Successfully reported this slideshow.
Your SlideShare is downloading. ×

The Total Book Developing Solutions With EPiServer 4

Ad

Developing Solutions
  with EPiServer

                by Rolf Åberg




    © Copyright 2004, ElektroPost Stockholm AB
  ...

Ad

Developing Solutions with EPiServer

     ISBN 91-631-5351-3

     © Copyright 2004 ElektroPost Stockholm AB, mailto:info@...

Ad

Contents


    Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 366 Ad
1 of 366 Ad
Advertisement

More Related Content

Advertisement
Advertisement

The Total Book Developing Solutions With EPiServer 4

  1. 1. Developing Solutions with EPiServer by Rolf Åberg © Copyright 2004, ElektroPost Stockholm AB mailto:info@episerver.com http://www.episerver.com i
  2. 2. Developing Solutions with EPiServer ISBN 91-631-5351-3 © Copyright 2004 ElektroPost Stockholm AB, mailto:info@episerver.com Published by: ElektroPost Stockholm AB Finlandsgatan 38 SE–164 74 KISTA Sweden Tel. +46 (0)8–444 19 30 Fax +46 (0)8–444 19 59 All rights reserved. Without limiting the the rights under copyright reserved above, no parts of this publication may be reproduced, stored in or introduced into a retrieval system, or transmitted, in any form or by any means (electronic, mechanical, photocopying, recording or otherwise) without the prior written permission of the copyright owner of this book. First published 2004 Författares Bokmaskin, Stockholm 2004 Set in 11/13 pt Garamond, headings in Tahoma. ii
  3. 3. Contents Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Table of Contents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 1 Windows Development and ASP.NET Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 EPiServer Overview and Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3 Developing with EPiServer 4: Basic Insights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4 Mimicking the Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5 Avoiding Errors, Testing and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6 EPiServer Base Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7 EPiServer Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 8 Custom Property Data Types and Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 9 Data Modelling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 10 Personalization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 11 Job Scheduling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 12 File and Folder Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 13 Extending EPiServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 A Finding Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 B Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 C Developers’ Book List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 D ANSI To HTML Entity Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 List of Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 iii
  4. 4. iv
  5. 5. Table of Contents Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Table of Contents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 1 Windows Development and ASP.NET Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 How Does EPiServer Work Its Magic? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 ASP.NET Web Forms Are Event-Driven, Making Them Appear Much Like Windows Forms . . . . . . . . . .1 Translate the Event-Driven Model to the Web, Do Not Create an X Window System . . . . . . . . . . .3 Handling Events on the Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Using Forms Help Preserve Visual Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 ASP.NET View State Variable ViewState. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Avoiding Re-Initialising with Every Form Posting: IsPostBack. . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Events Are Handled in Compiled Code on the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 ‘Code-Behind File’ Is Microsoft’s Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 When Compiled Code-Behind Files Form a Dynamic Link Library (DLL) . . . . . . . . . . . . . . . . . . . . .7 The ASP.NET Magic: Going from a Web Form to an HTML Page . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Going from an EPiServer Web Page to an HTML Page in the Visitor’s Browser . . . . . . . . . . . . . . . . . .9 You’ll Be Seeing EPiServerSample.DLL a Lot, Not EPiApp.DLL . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 EPiServer Overview and Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 EPiServer Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 EPiServer 4 Is Only the Latest Incarnation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Relation Between EPiServer and Internet Information Services, IIS . . . . . . . . . . . . . . . . . . . . . . . . . 14 EPiServer 4 Is Backwards Compatible. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 EPiServer’s View of People . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Division of Responsibilities between Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 EPiServer DLL and Executable Infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 EPiServer Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 EPiServer Is a Trifurcated Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 All Modes Are Multi-User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 The Most Important Admin Mode Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Editor Efforts Are Crucial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Admin Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Names of Property Data Types Are Different in Admin Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Edit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Naming Web Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 v
  6. 6. Table of Contents Page Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... . . . . . . . 20 Sort Order in The Page Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... . . . . . . . 20 EPiServer Handles Versions Automatically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... . . . . . . . 21 Built-In Properties in Edit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... . . . . . . . 21 The Page Chain, Tools and Techniques Used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... . . . . . . . 21 3 Developing with EPiServer 4: Basic Insights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 EPiServer Structure and Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Framework Definition Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Regions Are Central. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Relationship Between Page Templates, Page Types and Web Pages . . . . . . . . . . . . . . . . . . . . . . . . 24 Framework Definition Files and Page Templates Are Created in Visual Studio .NET . . . . . . . . . . . . . . 25 Page Types Are Created in EPiServer Admin Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Web Pages Are Created in EPiServer Edit Mode by EPiServer Editors . . . . . . . . . . . . . . . . . . . . . . . . 26 The Web Pages Live in a Web Page Tree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 EPiServer 4 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 EPiServer Architecture and Folder Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 The Very Important templates Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 EPiServer Content Framework: Combining Pages and Contents to Make a Web Site . . . . . . . . . . . . . 29 A Visual Layout Divided . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Separate Presentation from Content: EPiServer Page Type Properties . . . . . . . . . . . . . . . . . . . . 30 Properties Always Have a Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Built-in Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 User-defined Properties: Static Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 User-defined Properties: Dynamic Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Dealing with Properties in Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Boolean Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Interaction between Web Pages and the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Using Web User Controls in Framework Definition Files and Page Template Files. . . . . . . . . . . . . 34 Purpose of EPiServer Framework Definition Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 EPiServer Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 EPiServer Regions Are Used by Means of the Content Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Both the Region and Content Classes Are Part of EPiServer.WebControls . . . . . . . . . . . . . . . . . . 37 Page Template Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Using HTML Tables for Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 A Very Simple Framework Definition File Using HTML Tables for Layout . . . . . . . . . . . . . . . . . . . 38 A Very Simple Page Template Using the Very Simple Framework Definition File . . . . . . . . . . . . . 39 Accessibility Considerations Starting with EPiServer 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Using HTML Div Elements for Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Inner Make-Up of a Page Template File which Doesn’t Use a Framework Definition File . . . . . . . . . . 43 EPiServer Content Framework Is Not Unlike ASP.NET 2.0 Master Pages and Content Pages. . . . . . . . 44 EPiServer Name Spaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 EPiServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 EPiServer.Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 EPiServer.Core.Html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 EPiServer.Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 vi
  7. 7. EPiServer.Personalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 EPiServer.PlugIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 EPiServer.Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 EPiServer.SpecializedProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 EPiServer.WebControls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Permissions and User Identities Are Handled By EPiServer (and You) . . . . . . . . . . . . . . . . . . . . . . . 46 User Identities and Permissions Are Easy to Handle In Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 EPiServer System Settings in the web.config File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Accessing System Settings from Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 You Can Add Your Own Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 EPiServer Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Developing EPiServer Solutions is a Little Different to Developing ASP.NET Solutions . . . . . . . . . . . . 52 Tools Needed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Developing ASP.NET Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Developing Solutions with EPiServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 EPiServer’s Built-In Web User Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 EPiServer Base Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Extending EPiServer 4 Is a Lot Easier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Performance Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4 Mimicking the Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Let’s Create a Web Site by Mimicking the Example Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Game Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Install EPiServer 4 and Let It Create the Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Inventory Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Page Templates, Page Types and Their Properties, Web Pages, Folders and the Database . . . . . . . . 59 Page Templates which Really are Used in the Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . 59 Page Types Are Created from Page Templates–Page Types Own Page Templates . . . . . . . . . . . . 60 Some Page Types Have Common Page Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Properties Used for Page Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Dynamic Properties Used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Properties Used on Start Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Web Pages Created from Page Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Folders and Database Tables Used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Create the Mimic Web Site: Install a New Version of EPiServer, or Re-Install. . . . . . . . . . . . . . . . . . . . . 67 Inventory ‘Empty’ Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Page Templates, Page Types and Their Properties, Web Pages, Folders and the Database . . . . . . . . 69 Properties Used on Page Type Start Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Dynamic Properties Used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Web Pages Created from the Single Page Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Order of Business. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Create and Use Dynamic Property ‘Global search page’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Create the Same Page Types That Exist in the Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . 70 We’ll Cheat a Little . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Create a Page Type to Hold Most Common Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Create Page Type ‘Ordinary web page’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 vii
  8. 8. Table of Contents Create Page Types ‘Calendar’ and ‘Calender event’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Interlude: Create the Top-Level Web Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Create the Last Page Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Create the Same Web Pages That Exist in the Example Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Putting the QuickSearch Bar Back on the Start Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Spreading The News . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Set up a Few Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Cleaning up the Start Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Final Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Removing Superfluous Web Page Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 A Closer Look at Frameworks and Page Templates in the Example Web Site . . . . . . . . . . . . . . . . . . . . . 80 Anatomy of an EPiServer Framework Definition File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Web User Controls and EPiServer Base Classes in DefaultFramework . . . . . . . . . . . . . . . . . . . . . 80 The HTML Tables in DefaultFramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 EPiServer Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Inside an EPiServer Page Template File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Framework Definition Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Page Template Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Looking into the Start Page, Default.aspx and DefaultFramework.ascx . . . . . . . . . . . . . . . . . . . . . . 85 Looking into the Immutable Part of DefaultFramework.ascx . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Setting the Table Background ‘background=quot;<%=HeaderImage%>quot;’ . . . . . . . . . . . . . . . . . . . . 87 Anchor ‘<a href='<%=EPiServer.Global.EPConfig.RootDir%>'>’ with an Image . . . . . . . . . . . . . 87 Using QuickSearch ‘<development:QuickSearch ID=quot;QuickSearchquot; runat=quot;serverquot; />’ . . . . . . . . 88 Web Pages As Menu: <development:TopMenu runat=quot;serverquot; id=quot;TopMenuquot; /> . . . . . . . . . . . . 89 Use of Regions in DefaultFramework.ascx by Default.aspx Page Template . . . . . . . . . . . . . . . . . 90 News Items Go in the Left-Most Area, Region menuRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Region mainRegion Gets a Picture, a Heading and Some Text . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5 Avoiding Errors, Testing and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Separate Presentation and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 ASP.NET Templated Controls Has Built-In Separation of Presentation and Data . . . . . . . . . . . . . . . . 95 Express Your Intent Clearly in Code, Comment When You Must . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Testing Equals Module Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Make Tests Easy, Easy to Interpret and Self-Documenting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Have Your Code Write Data to Files, Compare Files between Versions of the Code . . . . . . . . . . . 96 When Bugs Are Reported Start by Expanding the Test Suite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Common Problems in ASP.NET Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Useful Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 DebugView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 FileMon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 RegMon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 The Importance of Knowledge and Experience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Microsoft .NET Framework and Visual C# .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Boxing Is Very Popular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Use StringBuilder Instead of String, But Not Always. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 It Is Faster to Use Implicit Concatenation than More Calls to Append . . . . . . . . . . . . . . . . . . . . 103 viii
  9. 9. Debugging Is a Three-Pronged Choice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Tracing in HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Switching on Tracing for the Whole Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Adding Debug Code to Your Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 System.Diagnostics.Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 System.Diagnostics.Debug.Assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 System.Diagnostics.Debug.Write and WriteLine; WriteIf and WriteLineIf . . . . . . . . . . . . . . . . . 107 Debug Output Can Be Effortlessly Passed to a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Conditional Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 The Conditional Attribute for Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Debugging with Visual Studio .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Debugging a Live EPiServer Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Break Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Static Break Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Dynamic, Conditional, Break Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Single-Stepping in Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Step Into . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Step Over (Step/Execute Call) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Step Out (Finish up Here and Return to Caller) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Move the Point of Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Watch Expressions, QuickWatch and QuickestWatch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 QuickWatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 QuickestWatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Call Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Command Window: Command Mode and Immediate Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Use the Logging Capabilities Introduced with EPiServer 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Statistics logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Optimising Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 More Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 What Is Taking So Long? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Change Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Using the Debug Switch for EPiServer Scheduler Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6 EPiServer Base Classes and Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 The Ever-Present Web Page Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 PageBase, UserControlBase and PageData: When to Use What . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 EPiServer.PageBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Public Properties for EPiServer.PageBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Public Methods for EPiServer.PageBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 More Information on Using the Public Properties and Methods in EPiServer.PageBase. . . . . . . . . . . 129 PageBase.Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 PageBase.Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 PageBase.CurrentPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 PageBase.CurrentPageLink. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 PageBase.CurrentUser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 ix
  10. 10. Table of Contents PageBase.EPCharset, PageBase.EPLanguage and PageBase.EPLocale. . . . . . . . . . . . . . . . . . . . 134 PageBase.AccessDenied. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 PageBase.GetChildren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 PageBase.GetPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 PageBase.IsValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 PageBase.QueryDistinctAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 PageBase.RequiredAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 PageBase.Translate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 EPiServer.SimplePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 EPiServer.EditPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Public Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Public Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Protected Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Protected Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 EPiServer.TemplatePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Creating an EPiServer Page Template File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Open the Example Web Site Solution in Visual Studio .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Add a Framework File, Change Prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 EPiServer.SystemPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 EPiServer.Util.LoginBase . . . . . . . . . . . . . . . . . . . . . . . . .