Free Shipping in Australia on over 5 million books in stock
Programming Collaborative Web Applications with Microsoft Exchange 2000 Server By - Microsoft Corporation

Programming Collaborative Web Applications with Microsoft Exchange 2000 Server

Used Price
inc. GST
Free Shipping in Australia

Only 1 left

Programming Collaborative Web Applications with Microsoft Exchange 2000 Server Summary

Programming Collaborative Web Applications with Microsoft Exchange 2000 Server by - Microsoft Corporation

Accelerate your development productivity with the expert insights and instructive code samples in this hands-on guide. Created with the full support of the Microsoft Exchange 2000 Server development team, it delivers the detailed information you need to use the leading-edge Web Storage System technology in Microsoft Exchange 2000 Server to build powerful applications for calendaring, contact management, workflow, and more. You'll dig deep into the architecture and schema of the Web Storage System to see how it provides easy access to e-mail, documents, and Web pages, and you'll explore its support for XML and other Internet standards.

This highly technical expert guide will help you:

  • Understand Exchange 2000 Server development: Develop quickly with the Exchange 2000 Server and Web Storage System platform, master tools for building Web Storage System applications, organize data within the store, and get to that data from most clients without using any code.
  • Learn how to access data: Define and access custom content classes and properties, use OLE DB and the Microsoft ActiveX Data Objects (ADO) 2.5 Object Model to access the Web Storage System, use Collaboration Data Objects (CDO) for Exchange to develop messaging and calendaring applications, and interact with Microsoft Active Directory services.
  • Extend your application: Go beyond the core features of Exchange 2000 Server to use Web Storage System events, design workflow applications, and develop for Microsoft Outlook 2000.
  • Build for the Web: Explore applications and tools for the Web, build Web Storage System forms that replace the standard Microsoft Outlook Web access forms, and create Web pages that use XML and XSL for added flexibility in your Web applications.
  • Prepare for the enterprise: Build secure applications with the Windows 2000 security model, set up your own test environment, secure your middle-tier components by using the COM+ role-based security model, and understand key issues to watch out for when deploying a custom enterprise application.

For customers who purchase an ebook version of this title, instructions for downloading the CD files can be found in the ebook.

Customer Reviews - Programming Collaborative Web Applications with Microsoft Exchange 2000 Server

Why buy from World of Books

Our excellent value books literally don't cost the earth
Free delivery in Australia
Read more here
Every used book bought is one saved from landfill

About - Microsoft Corporation

Mindy Martin is an independent consultant, trainer, and author based in Chicago, IL. Mindy is a Microsoft Certified Solution Developer and Microsoft Certified Trainer, and she specializes in everything VBA. Her primary focus is in the creation of collaborative applications with Outlook and Exchange, and she thrives on integrating Microsoft Office into everything from the desktop environment to the Internet. She is a contributing author to a number of development publications including Informant Microsoft Office Developer and VB/Access/Office Advisor and is currently writing two books for Sybex Publishing: Mastering Excel and the Outlook Developers Handbook. She is a regular speaker at conferences worldwide including Tech*Ed, Microsoft Exchange Conference, Informant VBA Developer Conferences, and Advisor DevCons.

Table of Contents

Table of Contents Acknowledgements xxvii Introduction xxix Who Should Read This Book xxix How This Book Is Organized xxx Section I Welcome to Exchange 2000 Server xxx Section II Data Access xxxi Section III Extending Your Application xxxiii Section IV Building for the Web xxxiv Section V Preparing for the Enterprise xxxiv Appendixes xxxv System Requirements xxxvi About the Companion CD xxxvi What s On the CD xxxvi Installing the Chapter Sample Code Files xxxvii Setting Up the Sample Application xxxviii Setting Up Zoo Management Folder Structure xxxviii Setting Up ZooWeb xxxix About the Helper Tools xl About ZipOut 2000 xli Conventions Used in This Book xlii SECTION I: Welcome to Exchange 2000 Server 1 Chapter 1: Developing with the Exchange Platform 3 A Tour of Exchange 2000 4 Exchange System Manager 4 Active Directory 5 The Web Storage System 7 Protocol Support 8 Web Storage System Schema 9 Using Data Access Tools 9 Understanding the Data Access Paradigm 10 Using ADO 11 Using CDO for Exchange 14 Using ADSI 16 Using XML 19 Displaying Your Data 22 Using Outlook 2000 23 Using Outlook Web Access 24 Reusing Outlook Web Access 26 Using Web Storage System Forms 28 Enhancing Your Application 29 Using Web Storage System Events 30 Using Workflow Logic 31 Wrapping It Up 33 Adding Security Features 33 Deploying a Web Storage System Application 34 Summary 35 Chapter 2: Exchange and the Web Storage System 37 Using Exchange for Data Storage 38 Benefits of the Web Storage System 38 Exchange vs. SQL Server 40 Understanding the Architecture of Exchange Data Storage 41 Exchange Then and Now 42 Web Storage System vs. Exchange Databases 44 Why Use Multiple Public Web Storage Systems? 45 Understanding Names Used in Exchange 48 Creating a New Web Storage System 49 Creating a Public Folder Tree 50 Creating and Mounting a Public Web Storage System 51 Creating a Virtual Directory 54 Using URLs with Exchange 56 URL Basics 57 Accessing Public Stores 58 Accessing Mailboxes 59 Accessing Individual Items 61 Using Additional Data Access Options 62 Windows Explorer 62 Open and Save Dialog Boxes 64 Custom Clients 65 Doing More with the Web Storage System 65 Querying a Web Storage System 65 Replicating Web Storage System Folder Trees 66 Summary 66 SECTION II: Data Access 67 Chapter 3: Web Storage System Schema 69 Overview of the Web Storage System Schema 70 Understanding the Web Storage System Schema 70 Understanding Property and Namespace Names 72 Web Storage System Namespaces 73 Introducing Content Classes 75 Understanding Content Classes 75 Folder Content Classes 76 Item Content Classes 79 Searching for a Specific Content Class 82 Learning About Content Classes by Using the Content Class Browser 84 Schema Access Scenarios 86 URLs and HTTP 87 Web Applications Using ASP Technology 88 Microsoft Outlook 2000 89 Using a Custom Application Schema 89 Benefits of Employing a Custom Schema 90 How a Custom Schema Works 91 Defining the Application Schema 93 Creating the Application Schema Folder 93 Configuring Application Folders 96 Defining Properties 99 Data Types 102 Defining Content Classes 103 Creating a Custom Schema 106 Defining the Zoo Management Schema 106 Creating the Schema Folder Structure 109 Defining the Custom Properties 110 Defining the Animal Content Class 111 Creating an Instance of the Animal Content Class 112 Returning Application Schema Information 113 Summary 116 Chapter 4: ActiveX Data Objects and Exchange 117 Overview of ActiveX Data Objects 2.5 and Exchange 118 ADO 2.5 Object Model 118 Exchange OLE DB Provider 121 Understanding the Relationship Between Records and Recordsets 122 Understanding Security in ADO 123 Connecting to a Web Storage System 124 Building URLs for ExOLEDB 124 Accessing Public Web Storage System Folders 125 Accessing Mailboxes 126 Accessing Items 127 Using a Connection Object 127 Opening and Closing a Connection 128 Using Relative URLs 129 Using Transactions 131 Handling Errors 133 Using the Record Object 135 Using the Open Method 136 Understanding the Mode Parameter 137 Understanding the CreateOptions Parameter 138 Opening a Resource 139 Enumerating Properties 140 Reading Single-Valued Properties 141 Reading Multi-Valued Properties 142 Saving a Record 142 Creating a Resource 143 Creating a Folder 144 Creating an Item 145 Appending a Custom Property to a Resource 146 Understanding ADO Data Types 148 Using the Recordset Object 150 Opening a Recordset 150 Using the GetChildren Method 151 Using the Open Method of a Recordset Object 151 Moving Through a Recordset 152 Using ADO to Get the Contents of a Folder 153 Querying a Web Storage System by Using SQL SELECT Statements 155 Using the AddQuotes Function 155 Building a Simple SELECT Statement 156 SELECT: Choose the Properties to Return 156 FROM: Indicating Where to Look for Records 157 WHERE: Filtering the Results 158 ORDER BY: Sorting the Results 159 Opening a Recordset with the Query Results 161 Saving a Recordset as XML 163 Doing More Using ADO 165 Copying a Resource 165 Moving a Resource 166 Deleting a Resource 167 Streaming Contents 169 Opening and Reading the Default Stream for an Item 169 Saving a Stream to a File 169 Using ADO with Microsoft Internet Publishing Provider 171 Summary 173 Chapter 5: Introduction to CDO for Exchange 175 Overview of CDO 176 CDO Object Models 177 Understanding the CDO for Exchange 2000 Server Object Model 178 Understanding the CDO for Exchange Management Objects Object Model 179 Understanding the CDO Workflow for Exchange Object Model 180 Getting Started with CDO 181 Creating Objects from Classes 181 Using Interfaces 182 Accessing Schema Properties 184 Using URLs 185 Understanding and Using the IDataSource Interface 186 IDataSource Interface Properties and Methods 186 How the IDataSource Interface Works 187 Opening a Resource by Using CDO 188 Detecting and Saving Changes 190 Creating a New Resource by Using CDO 192 Saving to a URL 192 Saving to a Container 194 Opening CDO Objects from Other Objects 196 Checking for the Existence of a Folder or Item 199 Working with Folders 200 CDO Folder Object Properties 201 Creating a Folder by Using CDO 202 Enabling a Folder for E-mail 203 Counting the Contents of a Folder 205 Working with Contact Information 207 Contact Properties 208 Creating a Contact in the Web Storage System 220 Retrieving vCard Information 221 Summary 223 Chapter 6: CDO Messaging 225 Overview of CDO Messaging 226 CDO Messaging Classes and Interfaces 227 Dissecting a MIME Message 228 Composing and Sending Messages 231 Sending a Simple Message 231 Addressing a Message 233 Specifying Who Is Sending the Message 234 Specifying Who Is Receiving the Message 234 Configuring for Replies 235 Adding the Body Text 235 Using Plain-Text Formatting 236 Using HTML Formatting 236 Using MHTML Formatting 238 Adding Attachments 240 Useful Schema Properties for Messaging 242 Sending to a Folder 245 Posting to a Newsgroup 246 Composing More Complex Messages 248 Using a Persistent Configuration Object 248 Resolving an Address in Your Domain 250 Checking for User Existence 251 Handling Ambiguous Names 254 Processing Messages 255 Finding a Message 255 Opening a Message 255 Detecting and Saving Attachments 257 Reading a Message as BodyPart Objects 259 Using Shortcut Properties 259 Identifying the Media Type of a BodyPart Object 260 Streaming BodyPart Objects 262 Replying to a Message 264 Forwarding a Message 266 Saving a Message to a File 268 Summary 270 Chapter 7: CDO Calendaring 271 Overview of CDO Calendaring 272 CDO Calendaring Classes and Interfaces 272 Understanding How Exchange Stores and Formats Dates and Times 274 Indicating a Time Zone 276 Using the Appointment Object 277 Creating a Simple Appointment 277 Appointment Properties 279 Using a Persistent Configuration Object 281 Scheduling Meetings 282 Scheduling a New Meeting 282 Setting the Meeting Organizer 285 Adding Attendees 285 Sending a Meeting Request 287 Checking Free/Busy Status 287 Checking the User Existence 288 Using the GetFreeBusy Method 288 Publishing a Meeting 291 Keeping Track of Attendees of a Published Event 293 Scheduling Recurring Appointments and Meetings 294 Configuring the Master Appointment 294 Defining a Recurrence Pattern 297 Using Exceptions 301 Getting the Recurrence Master 305 Working with Existing Appointments and Meeting Requests 309 Converting Dates and Times 309 Querying a Calendar 311 Identifying Appointment Types 315 Telling the Difference Between a Meeting and a Simple Appointment 317 Using Calendar Browser 317 Sending Updates 319 Canceling and Deleting Appointments and Meetings 319 Canceling an Appointment 320 Canceling a Meeting 322 Processing a Meeting Request 323 Setting Reminders 325 Summary 326 Chapter 8: Interacting with Active Directory 327 Connecting to Active Directory 328 LDAP 328 ADSI 329 CDO for Exchange 332 Choosing Between CDO and ADSI 333 Building the LDAP Binding String 334 ADSI for the Exchange Developer 336 Common Supported Interfaces 336 Opening an Object 338 Accessing the Domain 338 Opening a Container or Organizational Unit 339 Opening Group and User Objects 339 Opening with Logon Credentials 340 Understanding the Property Cache 342 Getting Property Values 343 Using the Get Method 343 Using the GetEx Method 344 Using the GetList Method 344 Setting Property Values 345 Using the Put Method 345 Using the PutEx Method 346 Using the SetInfo Method 347 Creating Objects 348 Deleting Objects 349 Understanding Active Directory Contacts, Users, and Mailboxes 350 Person, Contact, and User Objects 350 Understanding Mail-Enabled vs. Mailbox-Enabled 351 Creating Contact and User Objects 352 Creating an Active Directory Contact Object 353 Creating a User Account 354 Active Directory Properties for Address Book Information 357 Mail-Enabling an Object 360 Working with Mailboxes 362 Mailbox-Specific Properties in Active Directory 362 Creating a Mailbox 366 Customizing Mailbox Settings 370 Moving a Mailbox 372 Deleting a Mailbox 374 Managing User and Contact Objects 374 Using CDO to Open User and Contact Objects 375 Using ADSI to Open User and Contact Objects 376 Moving User and Contact Objects 376 Deleting User and Contact Objects 378 Enumerating User and Contact Objects 379 Working with Groups 381 Using Group Type and Group Scope 381 Understanding Group Type 381 Understanding Group Scope 382 Creating a Group Object 383 Creating a Mail-Enabled Distribution Group 383 Indicating the Group Type 385 Setting the sAMAccountName 386 Handling Group Membership 386 Adding Members 386 Checking User Membership 387 Removing Members 388 Enumerating Members of a Group 388 Managing Group Objects 390 Opening a Group Object 390 Moving Group Objects 391 Deleting a Group Object 392 Enumerating Only Group Objects in a Container 393 Querying Active Directory 394 Querying by Using ADO 395 Building the Core SELECT Statement 396 Adding Filter Criteria 398 Searching for Object Types 399 Setting Command Options 400 Using the SearchScope Property 401 Using the Time Limit and TimeOut Properties 402 Using the Page Size Property 402 Using the Cache Results Property 403 Using the Chase Referrals Property 403 Using ADSI to Return Information About Your Domain 404 Identifying Your Active Directory Server 404 Identifying Your Domain 406 Identifying the Current User 408 Returning Exchange Mailboxes 409 Returning Exchange Servers 411 Returning an Exchange Server from an E-mail Address 413 Summary 415 SECTION III: Extending Your Application 417 Chapter 9: Using Web Storage System Events 419 Overview of Events in Exchange 2000 420 Why Incorporate Events? 420 Understanding Event Types 421 Synchronous Events 422 Asynchronous Events 423 System Events 423 Understanding the Event Paradigm 424 Security and Event Sinks 426 Building an Event Sink 426 Creating the Dynamic-Link Library 427 Setting the References 427 Building the Event Procedures 428 Using CDO to Send Notifications 430 Using the EventSinkTemplate Project 431 Reacting to Synchronous Events 432 Using the OnSyncDelete Event Procedure 434 Using the OnSyncSave Event Procedure 435 Checking for the Phase of a Transaction 438 Distinguishing Between a New Item and a Changed Item 439 Modifying the Event Item in a Synchronous Event Sink 440 Aborting a Synchronous Event 441 Reacting to Asynchronous Events 442 Using the OnDelete Event Procedure 443 Using the OnSave Event Procedure 444 Accessing the Event Item in an Asynchronous Event Sink 446 Reacting to System Events 446 Using the OnMDBStartUp Event Procedure 447 Using the OnMDBShutDown Event Procedure 447 Using the OnTimer Event Procedure 447 Installing the Event Sink as a COM+ Application 448 Making the .dll File 448 Registering the .dll file 448 Creating the COM+ Components 449 Creating a New COM+ Application for Event Sink Components 449 Adding Components to a COM+ Application 453 Changing an Event Sink 456 Creating an Event Registration Item 457 Creating an Event Registration Item by Using ADO 458 Setting the Required Event Properties 461 Identifying the Source Events 461 Identifying the Event Sink 462 Setting Optional Event Properties 462 Defining the Range of an Event Registration Item 463 Restricting Event Items 465 Prioritizing Multiple Event Registrations 466 Registering for an OnTimer Event 467 Creating an Event Registration by Using the RegEvent Script 467 Managing Event Registration Items 469 Returning Event Registration Information 469 Disabling an Event Registration 471 Deleting an Event Registration 472 Using Custom Properties with Events 473 Defining Custom Properties in the Event Registration Item 474 Reading the Custom Fields in the Event Sink 475 Investigating Event Errors with the Application Log 476 Summary 477 Chapter 10: Designing Workflow Applications 479 Overview of Workflow 480 Workflow Background 480 Understanding the Workflow Process 480 Understanding Actions 482 Setting Security in Workflow 483 Running Script in Restricted Mode 483 Running Script in Privileged Mode 484 Building Workflow Applications 485 Before You Begin 486 Defining the Workflow System Account 487 Registering Workflow Authors 489 Using Workflow Designer for Exchange 491 Introducing Workflow Designer 491 Using Workflow Designer: A Simple Example 493 Connecting to a Workflow Folder with Workflow Designer 493 Creating a New Process 494 Adding States 495 Adding Actions 496 Adding Script 498 Creating Condition Script Statements 499 Creating Action Script 499 Creating Compensating Actions 500 Using External Script Files 500 Using Multiple Actions on a Single State 501 Adding Final Touches to Your Workflow Process 501 Importing and Exporting Processes 502 Scripting the Workflow Item 504 WorkflowSession Properties and Methods 504 Adding an Audit Entry 506 Identifying the Sender 507 Sending a Notification Message 508 Reading the State Information 510 Deleting the Workflow Item 510 Debugging Workflow Script 511 Checking Script Syntax 511 Using Event Viewer 512 Using Script Debugger 512 Summary 512 Chapter 11: Developing with Outlook 2000 513 Introducing the MAPI Folder Tree 514 Developing for the Outlook Environment 515 Creating Folders in the MAPI Folder Tree 515 Creating Items in the MAPI Folder Tree 517 Developing in the Outlook Environment 522 Adding Collaboration Features 522 Accessing Web Storage System Schema Properties in Outlook Forms 523 Using Field Chooser to Access Schema Properties 523 Using the Outlook Object Model to Access Schema Properties 526 Querying Other Web Storage Systems from Outlook Forms 526 Summary 528 SECTION IV: Building for the Web 529 Chapter 12: Building Web Applications for Exchange 531 Overview of Web Applications 532 Approaches to Web Development 532 Thinking in Terms of Data, Not Forms 533 Understanding How Web Storage System Forms Work 533 Using Forms Registry and Forms Registrations 536 Configuring a Forms Registry 537 Configuring a Forms Registry Folder 537 Taking Advantage of Custom Content Classes 538 Using the Folder Composition Tool 539 Using Form Registrations 540 Creating a Form Registration 541 Accessing the Form Registration Parameters from a Web Page 544 Using the Forms Registry Explorer 545 Setting Up a Web Development Environment 547 Setting Execute Permissions and Access Rights 548 Setting Execute Permissions 548 Using Anonymous Access 549 Using a Web Development Tool 551 Using FrontPage 2000 to Create a Web Development Environment 551 Using ADO and CDO Constants in Web Pages 552 Creating and Registering Web Storage System Forms 554 Choosing a Folder for Web Page Storage 554 Creating a Simple Home Page 555 Creating a Frameset Home Page 557 Understanding the Frameset Page 558 Understanding the Contents Page 559 Understanding the Main Page 562 Getting Folder Contents 563 Displaying an Item 568 Creating an Item 573 Saving an Item 574 Deleting an Item 579 Reusing Outlook Web Access 581 Summary 584 Chapter 13: XML and Exchange 585 Overview of XML and Exchange 586 Why Develop Using XML? 586 Building Applications by Using XML 587 Understanding HTTP and WebDAV 588 Understanding the Basics of XML 589 Building an XML Document 590 Creating XML Elements 592 Integrating XML Namespaces 594 Generating XML with an ASP Page 595 Using XML Data Islands 601 Making HTTP Requests from a Client 603 XMLHTTP Methods and Properties 603 Making a Simple HTTP Request 605 Using the Open Method 606 Setting Header Fields 608 Sending the HTTP Request and Getting the Results 609 Checking the State of an Asynchronous Connection 611 Using XMLHTTP 613 Returning a Resource with All Properties 613 Returning All the Properties for a Resource 613 Returning an Item with Specific Properties 614 Returning Folder Contents 615 Creating a Folder 617 Creating an Item 618 Copying a Resource 619 Moving a Resource 620 Deleting a Resource 621 Rendering XML with XSL 622 How It Works 623 Using XSL-Specific Elements 623 Building an XSL Template as a Stand-Alone File 624 Identifying XML Elements with XSL Patterns 626 Building a Table 628 Using an XML Data Island for an XSL Template 631 Response Codes 635 Summary 639 SECTION V: Preparing for the Enterprise 641 Chapter 14: Setting Security and Permissions 643 Understanding Exchange 2000 Server Security 644 How Exchange 2000 Server Security Works 644 Planning Security in Applications 645 Managing Client Permissions on Web Storage System Folders 646 Assigning Client Permissions by Using the User Interface 646 Assigning Permissions to MAPI Public Folders 647 Assigning Permissions to Non-MAPI Folders 650 Understanding Permissions Inheritance 653 Overlapping Permissions 657 Using the Security Descriptor Property 658 Understanding the Security Descriptor Property 658 Interpreting a DACL 663 Using Access Masks 664 Reading and Building an SID 666 Reading the Details of a Security Descriptor 668 Building a Security Descriptor 670 Enforcing Security on Code with COM+ Components 672 Why Use COM+ Role-Based Security? 672 Configuring COM+ Role-Based Security 673 Enabling Security for the COM+ Application 674 Defining COM+ Roles 675 Adding Users to COM+ Roles 677 Assigning COM+ Roles to Components 678 Disabling Anonymous Access to Effectively Use COM+ Roles 679 Summary 681 Chapter 15: Testing and Deploying Your Applications 683 Setting Up Exchange in a Single Server Domain 684 Installing Windows 2000 Server 684 Configuring Your Domain Controller 686 Installing Exchange 2000 Server 688 Creating a New Administrator Account 690 Setting Up the Development Environment 691 Installing Office 2000 and FrontPage Server Extensions 691 Installing Development Environments and Tools 692 Creating an Exchange Development MMC Console 692 Adding additional users 696 Deploying Application-Specific Tools 696 Using Windows Script Files to Automate Installations 698 Summary 700 Appendix A: Web Storage System Schema Properties 701 DAV 701 CDO Configuration 706 CDO NNTP Envelope 713 CDO SMTP Envelope 714 CDO Workflow 715 Exchange 718 Event Registrations 727 Exchange Security 729 Full Text Querying 732 Calendar 734 Contacts 742 HTTP Mail 754 Mail Header 759 Data Types 765 Exchange Data 765 Form Registrations 768 Microsoft Office 770 XML Data 777 Appendix B: Designing Forms with Outlook 2000 779 Introduction to Outlook Forms Designer 780 Using Outlook Form Events 782 Creating an Event Procedure 783 Canceling an Event 785 Using Control Events 787 Order of Event Firing 787 Opening 787 Saving and Closing 788 Sending 789 Replying 789 Forwarding 789 Using Script to Access Parts of an Outlook Form 790 Returning the Current Item 791 Getting the Inspector 791 Controlling Pages 791 Activating a Page 792 Hiding and Showing Pages 792 Accessing Controls on a Page 793 Delving into Custom Fields 794 Controlling Controls 795 Controlling Text Boxes 795 Controlling List Controls 795 Populating a List Control Array 796 Returning a Value from a List Control 798 Detecting When Data Changes 798 Moving Focus to a Control and Selecting Text 799 Controlling the Body of Items 800 Using Word as the Editor 801 Using HTML as the Editor 803 Using Custom Command Bars 804 Creating the Command Bar with the Open Event 804 Making Command Bars Temporary 805 Distributing Outlook Forms 806 Protecting Your Form Design 807 Saving the Current Instance of a Form 807 Creating a Form Template 808 Publishing to a Forms Library 808 Understanding How Published Forms Work 809 Publishing with the Form Definition 811 Using a Custom Form as the Default Form in a Folder 812 Managing and Maintaining Outlook Forms 812 Distributing a New Version of a Form 812 Updating the MessageClass Property 813 Glossary 815 Index 829

Additional information

Programming Collaborative Web Applications with Microsoft Exchange 2000 Server by - Microsoft Corporation
- Microsoft Corporation
Used - Very Good
Microsoft Press,U.S.
Book picture is for illustrative purposes only, actual binding, cover or edition may vary.
This is a used book - there is no escaping the fact it has been read by someone else and it will show signs of wear and previous use. Overall we expect it to be in very good condition, but if you are not entirely satisfied please get in touch with us.