You are previewing SharePoint 2010 as a Development Platform.
O'Reilly logo
SharePoint 2010 as a Development Platform

Book Description

SharePoint is gaining recognition as a full-fledged application server with many features and enhancements that specifically allow non-developers to create sophisticated intranet sites. However, with the 2010 release, Microsoft's SharePoint increasingly becomes a compelling development platform. The strong application programming interface (API), its highly extensible nature, and its foundation on the underlying .NET Framework all generate "the perfect storm" to make it one of the most powerful web development platforms available.

However, with power comes complexity. The wide range of usage scenarios make it difficult for developers to grasp the full ability of this next-generation platform. This book takes an in-depth, all-encompassing approach to programming concepts, the extensibility interfaces, and how to embrace SharePoint as a toolkit full of features available to web developers.

  • Take an in-depth look into the internals of SharePoint.

  • Create sophisticated applications using SharePoint controls and databases.

  • Understand the API and use in conjunction with ASP.NET to extend SharePoint.

SharePoint is more than a portal and more than an intranet. Harness its capabilities and put it to work for you.

Table of Contents

  1. Copyright
  2. About the Authors
  3. About the Technical Reviewer
  4. Acknowledgments
  5. Introduction
    1. What Does This Book Cover?
    2. Conventions Used in This Book
    3. Who Is This Book For?
    4. Prerequisites
    5. How This Book Is Organized
    6. Support
    7. Welcome to SharePoint Development
      1. SharePoint Applications
      2. The SharePoint Community
      3. Windows SharePoint Foundation for Developers
        1. The Execution Environment
        2. The Data Layer
        3. The Business Logic Layer
        4. The User Interface Layer
          1. Silverlight Integration
        5. The Security Layer
        6. The Developer Toolbox
      4. Microsoft SharePoint Server for Developers
        1. Content
        2. Search
        3. Dashboards
        4. Forms and Workflows
        5. Community
        6. Content Publishing
      5. Applications Make the World Go Round
  6. 1. Basic Tasks
    1. 1. Developer Basics
      1. 1.1.
        1. 1.1.1. Before You Start
        2. 1.1.2. Setting Up a Development Environment for SharePoint
          1. 1.1.2.1. Working Outside a Server
            1. 1.1.2.1.1. Considering Remote Development
          2. 1.1.2.2. Installation Scenarios
            1. 1.1.2.2.1. Developer Workstation on Windows Server 2008
            2. 1.1.2.2.2. Developer Workstation on Windows Vista or Windows 7
            3. 1.1.2.2.3. Steps for Vista SP1 Only
            4. 1.1.2.2.4. Installing Required Windows Features
            5. 1.1.2.2.5. Installing and Configuring SharePoint
            6. 1.1.2.2.6. Installing Visual Studio 2010
          3. 1.1.2.3. Team Development
          4. 1.1.2.4. Optimizing Your Development Experience
          5. 1.1.2.5. Preparing to Use .NET 3.5
        3. 1.1.3. SharePoint's Developer Support at a Glance
          1. 1.1.3.1. Bridging the Gap
          2. 1.1.3.2. Connecting Your Systems
          3. 1.1.3.3. Advantages of SharePoint Functions
            1. 1.1.3.3.1. Understanding the API
          4. 1.1.3.4. Critical Tasks
          5. 1.1.3.5. Debugging the Server
            1. 1.1.3.5.1. Looking into the Event Log for SharePoint
            2. 1.1.3.5.2. Looking into the SharePoint and IIS Logs
            3. 1.1.3.5.3. Using Common Debugging Techniques
          6. 1.1.3.6. The Developer Dashboard
            1. 1.1.3.6.1. Activating the Developer Dashboard Using stsadm
            2. 1.1.3.6.2. Activating the Developer Dashboard Using PowerShell
            3. 1.1.3.6.3. Activating the Developer Dashboard Using Code
            4. 1.1.3.6.4. Working with the Developer Dashboard
            5. 1.1.3.6.5. Making Your Code Dashboard-Aware
          7. 1.1.3.7. Debugging the Client
            1. 1.1.3.7.1. Using Fiddler to Understand What's Going on the Wire
            2. 1.1.3.7.2. Using Developer Tools to Investigate What's Running in the Browser
        4. 1.1.4. Introducing Visual Studio 2010's SharePoint Support
          1. 1.1.4.1. Visual Studio 2010
            1. 1.1.4.1.1. Preparing Visual Studio
            2. 1.1.4.1.2. The SharePoint Development Templates
            3. 1.1.4.1.3. Adding Items to a Project
            4. 1.1.4.1.4. Investigating a Package
            5. 1.1.4.1.5. The Feature Designer
            6. 1.1.4.1.6. Working with SharePoint Designer Workflows
            7. 1.1.4.1.7. Importing Packages
            8. 1.1.4.1.8. Creating a Package
            9. 1.1.4.1.9. Building and Deploying
          2. 1.1.4.2. SharePoint Designer 2010 vs. Visual Studio 2010
        5. 1.1.5. SharePoint Designer 2010 for Professional Developers
          1. 1.1.5.1. Installation Hints
          2. 1.1.5.2. Features at a Glance
            1. 1.1.5.2.1. SharePoint Designer Rights
            2. 1.1.5.2.2. New Dashboard Interface
            3. 1.1.5.2.3. Simplified Object Creation
            4. 1.1.5.2.4. Easy Use of Content Types
            5. 1.1.5.2.5. Resource Management
            6. 1.1.5.2.6. XSLT Views
            7. 1.1.5.2.7. Accessing Data Sources
            8. 1.1.5.2.8. Managing Business Data Connectivity Services
            9. 1.1.5.2.9. Managing Workflows
            10. 1.1.5.2.10. Master and Site Pages
        6. 1.1.6. SharePoint as a Development Toolkit and Framework
          1. 1.1.6.1. Command-Line Tools
            1. 1.1.6.1.1. psconfig.exe
            2. 1.1.6.1.2. stsadm.exe
            3. 1.1.6.1.3. SPMetal.exe
          2. 1.1.6.2. Graphical Tools
            1. 1.1.6.2.1. psconfigui.exe
        7. 1.1.7. Handling 64-Bit Quirks
          1. 1.1.7.1. Programming SharePoint Using a Console Application
          2. 1.1.7.2. Programming SharePoint Using ASP.NET
            1. 1.1.7.2.1. Preparing ASP.NET for the x64 Platform
            2. 1.1.7.2.2. Configuring IIS to Run with the Right Account
        8. 1.1.8. Summary
    2. 2. Architecture
      1. 2.1.
        1. 2.1.1. The Architectural View
          1. 2.1.1.1. SharePoint 2010 Foundation
          2. 2.1.1.2. SharePoint Server
          3. 2.1.1.3. Why Develop with the SharePoint Platform?
        2. 2.1.2. The Technical Integration
          1. 2.1.2.1. IIS and ASP.NET
            1. 2.1.2.1.1. What Is ASP.NET?
            2. 2.1.2.1.2. From ISAPI to ASP.NET
            3. 2.1.2.1.3. The IIS 7 Integrated Pipeline
            4. 2.1.2.1.4. IIS Sites, Applications, and Virtual Directories
            5. 2.1.2.1.5. The Request Pipeline
          2. 2.1.2.2. ASP.NET Extensibility
            1. 2.1.2.2.1. Modules, Handlers, and IIS
            2. 2.1.2.2.2. The Provider Model
            3. 2.1.2.2.3. The Configuration Model
            4. 2.1.2.2.4. Virtual Path Provider
          3. 2.1.2.3. SharePoint Integration with ASP.NET
            1. 2.1.2.3.1. Understanding the Web Application
            2. 2.1.2.3.2. Understanding the Configuration
            3. 2.1.2.3.3. Using the Virtual Path Provider
          4. 2.1.2.4. SharePoint and Ajax
            1. 2.1.2.4.1. What Is Ajax?
          5. 2.1.2.5. Security Model
            1. 2.1.2.5.1. Safe Mode
            2. 2.1.2.5.2. Safe Controls
            3. 2.1.2.5.3. Manipulating web.config to Add Safe Controls Programmatically
            4. 2.1.2.5.4. Making a Web Part Safe by Default
        3. 2.1.3. The Foundation's Object Model
          1. 2.1.3.1. Data-Related Building Blocks
            1. 2.1.3.1.1. Lists and Document Libraries
            2. 2.1.3.1.2. Files and Documents
            3. 2.1.3.1.3. Columns and Field Types
            4. 2.1.3.1.4. Content Types
            5. 2.1.3.1.5. Queries and Views
          2. 2.1.3.2. Deployment- and Maintenance-Related Building Blocks
            1. 2.1.3.2.1. Features
            2. 2.1.3.2.2. Solutions
            3. 2.1.3.2.3. Web Sites and Site Collections
          3. 2.1.3.3. Building Blocks to Create the UI
            1. 2.1.3.3.1. Pages and UI Support Elements
            2. 2.1.3.3.2. Ribbon
            3. 2.1.3.3.3. Web Parts
          4. 2.1.3.4. Control Flow, Action, and Events
            1. 2.1.3.4.1. Event Handling
            2. 2.1.3.4.2. Alerts
            3. 2.1.3.4.3. Workflows
        4. 2.1.4. The Administrative Object Model
          1. 2.1.4.1. Overview of Namespaces
          2. 2.1.4.2. An Administrative View
            1. 2.1.4.2.1. The Database Architecture
            2. 2.1.4.2.2. The Server Architecture
            3. 2.1.4.2.3. Working with Top-Level Objects
            4. 2.1.4.2.4. Site Architecture
          3. 2.1.4.3. The Administrative Server Object Model Organization
            1. 2.1.4.3.1. Physical Hierarchy
            2. 2.1.4.3.2. Content Hierarchy
            3. 2.1.4.3.3. Services Hierarchy
        5. 2.1.5. Summary
    3. 3. Accessing the API
      1. 3.1.
        1. 3.1.1. Finding the Entry Points
          1. 3.1.1.1. Establishing the Site Context
        2. 3.1.2. Utilities, Helper Classes, and Support Classes
          1. 3.1.2.1. Examining the Namespaces
          2. 3.1.2.2. SPUtility Class Examples
            1. 3.1.2.2.1. Formatting a Date Using SPUtility.FormatDate
            2. 3.1.2.2.2. Getting the 14 Hive File System Path
            3. 3.1.2.2.3. Getting the Full (Absolute) URL
            4. 3.1.2.2.4. Redirecting to Another Page
            5. 3.1.2.2.5. Redirecting to SharePoint Success or Error Pages
            6. 3.1.2.2.6. Formatting Scalar Data
          3. 3.1.2.3. Common Utility Classes
            1. 3.1.2.3.1. The DateOptions Class
            2. 3.1.2.3.2. The SPUrlUtility Class
            3. 3.1.2.3.3. The SPHttpUtility Class
            4. 3.1.2.3.4. The SPDiffUtility Class
        3. 3.1.3. Object Disposal Issues
          1. 3.1.3.1. Best Practice Advice
            1. 3.1.3.1.1. Handling Objects Used in a Publishing Web
            2. 3.1.3.1.2. Disposing of Objects and Collections
            3. 3.1.3.1.3. Objects Owned by SharePoint
          2. 3.1.3.2. Example of Incorrect Disposal
          3. 3.1.3.3. Finding Incorrectly Disposed-Of Objects
        4. 3.1.4. SharePoint Security: Users and Roles
          1. 3.1.4.1. Security Primer
            1. 3.1.4.1.1. Authentication
            2. 3.1.4.1.2. Access
            3. 3.1.4.1.3. Search
          2. 3.1.4.2. Users, Groups, and Roles
            1. 3.1.4.2.1. Retrieving Users
            2. 3.1.4.2.2. Retrieving the Current User
            3. 3.1.4.2.3. Getting a Specific SPUser Object
            4. 3.1.4.2.4. Working with Groups
          3. 3.1.4.3. Security Issues in Custom Code
            1. 3.1.4.3.1. Running with Elevated Privileges
            2. 3.1.4.3.2. Securing Objects
            3. 3.1.4.3.3. Handling Authorization Failures
            4. 3.1.4.3.4. Using Helper Classes
        5. 3.1.5. The Isolated Programming Style
          1. 3.1.5.1. Console-Based Applications
            1. 3.1.5.1.1. Creating a Console Application
            2. 3.1.5.1.2. Controlling a Console Application Using Parameters
            3. 3.1.5.1.3. Handling Output of a Console Application
            4. 3.1.5.1.4. Using Object Constructors
            5. 3.1.5.1.5. Console Example
          2. 3.1.5.2. Windows Forms and WPF Applications
        6. 3.1.6. Summary
    4. 4. Data Access
      1. 4.1.
        1. 4.1.1. Organizing Data in Lists
          1. 4.1.1.1. Lists and Their Elements
            1. 4.1.1.1.1. Lists and Content Types
            2. 4.1.1.1.2. Content Type Elements
          2. 4.1.1.2. Working with Lists
            1. 4.1.1.2.1. The Built-in Lists
            2. 4.1.1.2.2. Creating a List Programmatically
            3. 4.1.1.2.3. Adding Fields to the List
            4. 4.1.1.2.4. Changing Field Properties
            5. 4.1.1.2.5. Enumerating the Fields Collection
            6. 4.1.1.2.6. Adding Items to the List
            7. 4.1.1.2.7. Working with Collections
            8. 4.1.1.2.8. Working with Attachments
            9. 4.1.1.2.9. Handle Huge Lists
          3. 4.1.1.3. Define and Use Views
            1. 4.1.1.3.1. Modifying an Existing View
            2. 4.1.1.3.2. Creating a New View Programmatically
          4. 4.1.1.4. Custom Field Types
          5. 4.1.1.5. Content Types
            1. 4.1.1.5.1. Difference between Lists and Libraries
            2. 4.1.1.5.2. Parts of a Content Type
            3. 4.1.1.5.3. When to Use Content Types Programmatically
          6. 4.1.1.6. Item- and List-Level Event Receivers
            1. 4.1.1.6.1. Synchronous vs. Asynchronous Events
            2. 4.1.1.6.2. List Item Events
            3. 4.1.1.6.3. List Events
          7. 4.1.1.7. Developing and Deploying an Event Receiver
            1. 4.1.1.7.1. The Elements.xml
            2. 4.1.1.7.2. The Event Handler Code
        2. 4.1.2. Document Libraries and Document Sets
          1. 4.1.2.1. Libraries, Folders, and Documents
            1. 4.1.2.1.1. Example: Reading a File from the Shared Documents Library
            2. 4.1.2.1.2. Example: Adding a Folder to a Library
            3. 4.1.2.1.3. Example: Saving Data to Libraries
            4. 4.1.2.1.4. Example: Deleting a File
          2. 4.1.2.2. Working with Office Documents
            1. 4.1.2.2.1. Enriching a Word Document with Placeholders
            2. 4.1.2.2.2. Creating Documents from Templates
            3. 4.1.2.2.3. Working with Open Packaging Convention Packages
            4. 4.1.2.2.4. Creating the Report
          3. 4.1.2.3. Document Sets
            1. 4.1.2.3.1. Advantages of Document Sets
            2. 4.1.2.3.2. Prepare Document Sets
            3. 4.1.2.3.3. Access a Document Set Programmatically
            4. 4.1.2.3.4. Reading the Properties
            5. 4.1.2.3.5. Example: Checking Whether an Item Is in a Set
        3. 4.1.3. Query Data Using CAML and LINQ
          1. 4.1.3.1. CAML vs. LINQ
          2. 4.1.3.2. Obsolete Methods in SharePoint 2010
            1. 4.1.3.2.1. Avoid Using SharePoint Data Providing Web Services
            2. 4.1.3.2.2. Avoid Direct Calls to owssvr.dll
        4. 4.1.4. Query Data Using CAML
          1. 4.1.4.1. Understanding CAML
            1. 4.1.4.1.1. Using CAML to Retrieve Data
            2. 4.1.4.1.2. How to Create a CAML Query
            3. 4.1.4.1.3. The Query Schema
            4. 4.1.4.1.4. Working with Lists, Joins, and Projections
            5. 4.1.4.1.5. Using List Joins and Projections in Site Templates
        5. 4.1.5. Understanding LINQ
          1. 4.1.5.1. Examining the LINQ Basics
            1. 4.1.5.1.1. Architecture of LINQ
            2. 4.1.5.1.2. Keywords
            3. 4.1.5.1.3. Enumerations
            4. 4.1.5.1.4. Operators
            5. 4.1.5.1.5. Simple Queries
            6. 4.1.5.1.6. Aggregators
            7. 4.1.5.1.7. Selectors
          2. 4.1.5.2. LINQ to SharePoint
            1. 4.1.5.2.1. Understanding the LINQ to SharePoint Provider
            2. 4.1.5.2.2. Writing Data
          3. 4.1.5.3. Creating the Layer with SPMetal.exe
            1. 4.1.5.3.1. Where to Get SPMetal?
            2. 4.1.5.3.2. How to Use SPMetal?
            3. 4.1.5.3.3. Advanced Configuration
            4. 4.1.5.3.4. What SPMetal Generates
          4. 4.1.5.4. Using LINQ
            1. 4.1.5.4.1. Example: Reading Data
            2. 4.1.5.4.2. Example: Read Joined Data
            3. 4.1.5.4.3. Example: Inserting Items Using EntityList<T>
            4. 4.1.5.4.4. Example: Deleting Items
            5. 4.1.5.4.5. Example: Updating Properties Using the ForEach Pattern
          5. 4.1.5.5. Advanced List Examples
            1. 4.1.5.5.1. Handle Queries Containing Functions
            2. 4.1.5.5.2. Customize the Mapping
            3. 4.1.5.5.3. Track Changes
            4. 4.1.5.5.4. Declare Your Own Type Classes
            5. 4.1.5.5.5. Examine Relationships
            6. 4.1.5.5.6. Understanding LINQ to CAML Conversion
        6. 4.1.6. Summary
    5. 5. External Data Access
      1. 5.1. Introducing External Data Access
      2. 5.2. Query Data Using Data Services
        1. 5.2.1. The WCF Data Services Framework
        2. 5.2.2. Introducing REST
          1. 5.2.2.1. What About SOAP?
          2. 5.2.2.2. Constraints and Opportunities
          3. 5.2.2.3. Addresses for Resources
          4. 5.2.2.4. Reading the Response
        3. 5.2.3. Install and Use WCF Data Services
          1. 5.2.3.1. Download the Data Services Update
          2. 5.2.3.2. Installing the Package
          3. 5.2.3.3. Programming WCF Data Services with SharePoint
        4. 5.2.4. Data Services URIs and URI Parameters
          1. 5.2.4.1. Options for Data Representation
        5. 5.2.5. Querying Data
          1. 5.2.5.1. Examples
          2. 5.2.5.2. Work with Data Services
      3. 5.3. External Data: Business Connectivity Services
        1. 5.3.1. Business Connectivity Architecture at a Glance
        2. 5.3.2. External Content Types
          1. 5.3.2.1. Create an External Content Type Using SharePoint Designer
          2. 5.3.2.2. Manage Appropriate Security Settings
          3. 5.3.2.3. Access External Data
          4. 5.3.2.4. Create an External List Using the Browser UI
        3. 5.3.3. Access External Data Through the Object Model
        4. 5.3.4. Access External Data Through the Client Object Model
      4. 5.4. Highly Efficient Data Access
        1. 5.4.1. Using LINQ to SQL
          1. 5.4.1.1. Understanding the Content Database
          2. 5.4.1.2. Creating SQL Views for SharePoint Lists
          3. 5.4.1.3. Querying with LINQ to SQL
          4. 5.4.1.4. Limitations of This Method
          5. 5.4.1.5. Conclusion
        2. 5.4.2. Efficient Access to Huge Lists
          1. 5.4.2.1. Using Paging in Advanced Scenarios
      5. 5.5. Summary
    6. 6. Web Parts
      1. 6.1.
        1. 6.1.1. Fundamentals
          1. 6.1.1.1. Usage Scenarios
          2. 6.1.1.2. Distinctions Between SharePoint and ASP.NET Web Parts
          3. 6.1.1.3. Web Part Primer
            1. 6.1.1.3.1. Creating a Simple Web Part
            2. 6.1.1.3.2. Built-In Web Parts
            3. 6.1.1.3.3. Web Part Properties
            4. 6.1.1.3.4. Web Part in a Chrome
            5. 6.1.1.3.5. Securing Web Parts
          4. 6.1.1.4. Visual Web Parts
            1. 6.1.1.4.1. Understanding the Project Structure
            2. 6.1.1.4.2. Running Visual Web Parts in a Sandbox
            3. 6.1.1.4.3. Creating Visual Web Parts
        2. 6.1.2. Understanding ASP.NET Web Parts
          1. 6.1.2.1. How It Works
            1. 6.1.2.1.1. The Zone Concept
            2. 6.1.2.1.2. Structure of a Web Part Page
          2. 6.1.2.2. SPWebPartManager
            1. 6.1.2.2.1. WebPartZone
            2. 6.1.2.2.2. EditorZone
            3. 6.1.2.2.3. CatalogZone
            4. 6.1.2.2.4. ConnectionsZone
            5. 6.1.2.2.5. WebPart's Class Hierarchy
        3. 6.1.3. Advanced Web Part Development
          1. 6.1.3.1. Personalizing Web Parts
          2. 6.1.3.2. Customizing the Property Pane
            1. 6.1.3.2.1. Understanding Properties
            2. 6.1.3.2.2. Global Settings
          3. 6.1.3.3. Editing Complex Properties with Editor Parts
            1. 6.1.3.3.1. Using Editor Parts to Edit Properties
            2. 6.1.3.3.2. Creating a Custom Editor Part Example
            3. 6.1.3.3.3. Editing Complex Properties Using a Pop-Up
        4. 6.1.4. Connectable Web Parts
          1. 6.1.4.1. Understanding Data Connections
          2. 6.1.4.2. Developing Connected Web Parts
            1. 6.1.4.2.1. Creating the Web Part Definition Files
            2. 6.1.4.2.2. Coding a Connected Web Part
          3. 6.1.4.3. Advanced Connection Scenarios
            1. 6.1.4.3.1. Using Generic Interfaces
            2. 6.1.4.3.2. Enhancing Web Parts Using Ajax
          4. 6.1.4.4. The Web Part Page Services Component
        5. 6.1.5. Creating Private Actions Using Verbs
          1. 6.1.5.1. Adding Entries to the Web Part Drop-Down Menu
          2. 6.1.5.2. Using Client Script to Handle Menu Clicks
          3. 6.1.5.3. Adding Server-Side and Client-Side Handlers
        6. 6.1.6. Asynchronous Web Parts
          1. 6.1.6.1. Making a Web Part Asynchronously
          2. 6.1.6.2. Creating an Asynchronous Data Source
        7. 6.1.7. Best Practices for Developing Web Parts for SharePoint
          1. 6.1.7.1. Avoiding Error-Prone Web Parts
            1. 6.1.7.1.1. Handling All Exceptions to Prevent Web Part Page Failures
            2. 6.1.7.1.2. Checking Permissions Before Rendering Your Web Part
            3. 6.1.7.1.3. Validating Properties Before Saving Changes to the Database
            4. 6.1.7.1.4. Specifying Custom Error Messages When Appropriate
            5. 6.1.7.1.5. Validating All User Input
          2. 6.1.7.2. Optimizing Performance
            1. 6.1.7.2.1. Registering the Client-Side Script Shared by Multiple Web Parts to Improve Performance
            2. 6.1.7.2.2. Techniques to Improve Web Part Performance
          3. 6.1.7.3. Supporting the End User
            1. 6.1.7.3.1. Specifying Whether Web Part Properties Can Be Exported
            2. 6.1.7.3.2. Supporting SharePoint Designer and the Visual Studio Design-Time Experience
            3. 6.1.7.3.3. Making Properties User-Friendly in the Tool Pane
            4. 6.1.7.3.4. Encoding All User Input Rendered to the Client
            5. 6.1.7.3.5. Checking Web Part Zone Properties Whenever You Attempt to Save Changes
            6. 6.1.7.3.6. Using Simple Types for Custom Properties You Define
            7. 6.1.7.3.7. Making Properties Independent of Each Other If They Both Appear in the Tool Pane
            8. 6.1.7.3.8. Making Web Parts Easily Searchable in the Galleries
            9. 6.1.7.3.9. Providing a Preview of Your Web Part for the Web Part Gallery
            10. 6.1.7.3.10. Localizing Your Custom Properties
            11. 6.1.7.3.11. Supporting Anonymous Access
            12. 6.1.7.3.12. Help Using Resources
        8. 6.1.8. Summary
    7. 7. Templates
      1. 7.1. Templates Overview
      2. 7.2. Column Templates
      3. 7.3. List Templates
        1. 7.3.1. List Definitions vs. List Templates
        2. 7.3.2. Custom List Definitions
        3. 7.3.3. List Template Definition Files
          1. 7.3.3.1. The List Element
          2. 7.3.3.2. The ContentTypes Element
          3. 7.3.3.3. The Fields Element
            1. 7.3.3.3.1. Lookup Fields
          4. 7.3.3.4. The Views Element
            1. 7.3.3.4.1. XSL-Based Rendering
            2. 7.3.3.4.2. Joins and Projections
            3. 7.3.3.4.3. The ViewFields Element
            4. 7.3.3.4.4. The Query Element
          5. 7.3.3.5. Forms
        4. 7.3.4. Using List Templates
      4. 7.4. Site Templates
        1. 7.4.1. Visual Studio 2010 Support
        2. 7.4.2. SiteTemplate vs. SiteDefinition
        3. 7.4.3. Site Definition Structure
          1. 7.4.3.1. webTemp.xml
            1. 7.4.3.1.1. Site Provisioning Provider
          2. 7.4.3.2. default.aspx
          3. 7.4.3.3. Onet.xml
            1. 7.4.3.3.1. The NavBars Element
            2. 7.4.3.3.2. The ListTemplates Element
            3. 7.4.3.3.3. Document Templates
            4. 7.4.3.3.4. Modules
            5. 7.4.3.3.5. Configurations
        4. 7.4.4. Using a Site Definition
          1. 7.4.4.1. stsadm.exe
          2. 7.4.4.2. Create Workspace or Site Collection via the UI
          3. 7.4.4.3. Custom Code
      5. 7.5. Summary
    8. 8. Application Techniques
      1. 8.1.
        1. 8.1.1. Application Pages
          1. 8.1.1.1. Creating Application Pages Using Visual Studio
          2. 8.1.1.2. Using the Base Class
          3. 8.1.1.3. Using Inline Code
          4. 8.1.1.4. Using Code-Behind
          5. 8.1.1.5. Using the Master Page
          6. 8.1.1.6. Integrating Application Pages
          7. 8.1.1.7. Security Considerations
        2. 8.1.2. Resources and Localization
          1. 8.1.2.1. Resource Primer
            1. 8.1.2.1.1. Defining Resources in SharePoint
            2. 8.1.2.1.2. Usage Scenarios in SharePoint
          2. 8.1.2.2. Using Resources in Web Parts
            1. 8.1.2.2.1. Using Resources for Static Data in Web Parts
            2. 8.1.2.2.2. Using Resources for Localization with Embedded Resource Files
            3. 8.1.2.2.3. Using Resources to Localize Web Part Attributes
            4. 8.1.2.2.4. Using Resources for Linked Data
            5. 8.1.2.2.5. The Resource Manager
          3. 8.1.2.3. Using Resources to Localize a Feature
        3. 8.1.3. The Event Model
          1. 8.1.3.1. The Event Receiver Principles
          2. 8.1.3.2. Events at a Glance
          3. 8.1.3.3. Events at the Deployment Stage: Feature Receivers
            1. 8.1.3.3.1. Creating a Feature with the Application Page's Navigation
            2. 8.1.3.3.2. Creating the Feature Receiver
            3. 8.1.3.3.3. Registering the Event
          4. 8.1.3.4. Events at the Site and Site Collection Levels
            1. 8.1.3.4.1. Defining the Event Receiver
            2. 8.1.3.4.2. Creating a Web Event Receiver Class
            3. 8.1.3.4.3. Dealing with Error Conditions
        4. 8.1.4. Sending E-mail
          1. 8.1.4.1. Sending E-mail Using ASP.NET
          2. 8.1.4.2. Using SharePoint's Mail-Sending Classes
          3. 8.1.4.3. Sending E-Mail from a WCF Service
        5. 8.1.5. Custom Helper Classes
          1. 8.1.5.1. Data Manager Functions
            1. 8.1.5.1.1. Getting a Web with Elevated Privileges
            2. 8.1.5.1.2. Getting a List Instance
            3. 8.1.5.1.3. Getting a List with a Data Model Behind the Scenes
            4. 8.1.5.1.4. Extension Methods Elaborated
            5. 8.1.5.1.5. Caching Queries to Improve Performance
        6. 8.1.6. Summary
    9. 9. Solution Deployment
      1. 9.1.
        1. 9.1.1. SharePoint Features
        2. 9.1.2. Solution Packages
        3. 9.1.3. Sandboxed Solutions
          1. 9.1.3.1. Restrictions of Sandboxed Solutions
          2. 9.1.3.2. The Sandbox Architecture
          3. 9.1.3.3. Life Cycle of a Sandboxed Solution
            1. 9.1.3.3.1. Deploying a Sandboxed Solution
            2. 9.1.3.3.2. Upgrading a Sandboxed Solution
          4. 9.1.3.4. Monitoring Sandboxed Solutions
          5. 9.1.3.5. Sandboxed Solution Validators
          6. 9.1.3.6. Sandboxed Solution Full-Trust Proxies
        4. 9.1.4. Deploying Solution Packages Using PowerShell Cmdlets
          1. 9.1.4.1.
            1. 9.1.4.1.1. Cmdlets
            2. 9.1.4.1.2. An Interactive Environment
            3. 9.1.4.1.3. The PowerShell Scripting Language
            4. 9.1.4.1.4. Scripting with PowerShell and the PowerShell Integrated Scripting Environment
          2. 9.1.4.2. PowerShell and SharePoint 2010
            1. 9.1.4.2.1. PowerShell Cmdlets for SharePoint 2010 Overview
            2. 9.1.4.2.2. Getting Help: What Are Cmdlets Good For?
          3. 9.1.4.3. Deploying a Farm Solution Package
          4. 9.1.4.4. Deploying a Sandboxed Solution using PowerShell
        5. 9.1.5. Deploying Solution Packages Using stsadm
          1. 9.1.5.1. Adding a Solution Package
          2. 9.1.5.2. Removing Solutions
          3. 9.1.5.3. Installing Features
        6. 9.1.6. Creating a Solution Package Step by Step
          1. 9.1.6.1. Step 1: Creating the Folder Structure
          2. 9.1.6.2. Step 2: Building the Feature
          3. 9.1.6.3. Step 3: Creating a Solution Definition
          4. 9.1.6.4. Step 4: Creating a DDF
          5. 9.1.6.5. Step 5: Creating the Solution Package
        7. 9.1.7. How To: Creating a Solution Package Using Visual Studio 2010
          1. 9.1.7.1. Using the Project Templates
          2. 9.1.7.2. Site and Security Level for Debugging
          3. 9.1.7.3. Adding SharePoint Items and Features to Your Project
          4. 9.1.7.4. Editing Your Features
          5. 9.1.7.5. Editing Your Solution Package
          6. 9.1.7.6. Project Properties and Deployment Configuration
          7. 9.1.7.7. Debugging the Solution
          8. 9.1.7.8. Packaging the Solution
        8. 9.1.8. How To: Creating a Sandboxed Solution Using Visual Studio 2010
          1. 9.1.8.1. Debugging the Solution
          2. 9.1.8.2. Creating a Full-Trust Proxy
            1. 9.1.8.2.1. Deploying the Full-Trust Proxy DLL to the GAC
            2. 9.1.8.2.2. Registering the Full-Trust Proxy Using a Feature Receiver
            3. 9.1.8.2.3. Using the Full-Trust Proxy to Extend a Sandboxed Solution
          3. 9.1.8.3. Creating a Solution Validator
            1. 9.1.8.3.1. Creating an Error Page for the Solution Validation
            2. 9.1.8.3.2. Deploying and Registering the Solution Validator
        9. 9.1.9. Upgrading Custom Developed Solutions to SharePoint 2010
          1. 9.1.9.1. Backward Compatibility Mode
          2. 9.1.9.2. Reasons for Upgrading
          3. 9.1.9.3. Upgrading a VSeWSS Solution
          4. 9.1.9.4. Upgrading a WSP Package
          5. 9.1.9.5. Upgrading Custom Solutions
          6. 9.1.9.6. Using Existing SharePoint 2007 Code in SharePoint 2010
          7. 9.1.9.7. Deprecated APIs
        10. 9.1.10. Summary
  7. 2. User Interface
    1. 10. Extending the User Interface
      1. 10.1.
        1. 10.1.1. Master Pages
          1. 10.1.1.1. Master Page Types
            1. 10.1.1.1.1. System Master Page(Default Master Page)
            2. 10.1.1.1.2. Site Master Page (Custom Master Page)
            3. 10.1.1.1.3. Application Master Pages
            4. 10.1.1.1.4. Dialog Master Pages
            5. 10.1.1.1.5. Content Pages vs. Application Pages
            6. 10.1.1.1.6. Conclusion
          2. 10.1.1.2. Master Page Tokens
            1. 10.1.1.2.1. Dynamic Tokens
            2. 10.1.1.2.2. Static Tokens
          3. 10.1.1.3. Master Page Gallery
          4. 10.1.1.4. Example: Applying a Master Page Recursively
        2. 10.1.2. Navigation
          1. 10.1.2.1. Navigation Controls
            1. 10.1.2.1.1. Top Link Bar Navigation
            2. 10.1.2.1.2. Quick Launch Navigation
            3. 10.1.2.1.3. Breadcrumb Navigation
            4. 10.1.2.1.4. Tree View Navigation
          2. 10.1.2.2. Understanding ASP.NET Site Map Providers
          3. 10.1.2.3. SharePoint Foundation Navigation Providers
            1. 10.1.2.3.1. The SPNavigationProvider Class
            2. 10.1.2.3.2. The SPSiteMapProvider Class
            3. 10.1.2.3.3. The SPContentMapProvider Class
            4. 10.1.2.3.4. The SPXmlContentMapProvider Class
          4. 10.1.2.4. SharePoint Server Navigation Providers
          5. 10.1.2.5. Example: Browsing Through Navigation Providers
        3. 10.1.3. Themes
          1. 10.1.3.1. Understanding Themes
            1. 10.1.3.1.1. Customization Levels
            2. 10.1.3.1.2. Applying Fonts and Colors
            3. 10.1.3.1.3. Dynamic Stylesheets
            4. 10.1.3.1.4. Correlation with Office THMX Files
            5. 10.1.3.1.5. Separation of Design and Implementation
          2. 10.1.3.2. SharePoint Theming
            1. 10.1.3.2.1. Themes in SharePoint 2010
            2. 10.1.3.2.2. Theming Prerequisites
            3. 10.1.3.2.3. Theme Colors and Variations
            4. 10.1.3.2.4. Dynamic Stylesheets
            5. 10.1.3.2.5. Applying Themes
            6. 10.1.3.2.6. Creating Themable Application Pages
        4. 10.1.4. Extending the UI
          1. 10.1.4.1. Custom Actions
          2. 10.1.4.2. Custom Action Examples
            1. 10.1.4.2.1. Listing All Custom Actions
            2. 10.1.4.2.2. Extending Site Settings
            3. 10.1.4.2.3. Adding Nested Menus
          3. 10.1.4.3. Using Ribbons
            1. 10.1.4.3.1. Adding a Button
            2. 10.1.4.3.2. Removing a Button
            3. 10.1.4.3.3. Replacing a Button
        5. 10.1.5. Summary
    2. 11. Using Web Controls
      1. 11.1.
        1. 11.1.1. Overview
        2. 11.1.2. Field Controls
          1. 11.1.2.1. Understanding the BaseFieldControl Base Class
          2. 11.1.2.2. Custom Field Controls
            1. 11.1.2.2.1. Field Type Definition
            2. 11.1.2.2.2. XSL Stylesheets for Custom Fields
            3. 11.1.2.2.3. The Field Class
            4. 11.1.2.2.4. The Field-Rendering Control Class
            5. 11.1.2.2.5. The Field-Rendering Template
            6. 11.1.2.2.6. Getting the Custom Field to Work
          3. 11.1.2.3. Custom Field Properties
            1. 11.1.2.3.1. Field Editor User Control: Web Form (ASCX)
            2. 11.1.2.3.2. Field Editor User Control: Code-Behind (CS)
        3. 11.1.3. Input Form Controls
          1. 11.1.3.1. Sections
          2. 11.1.3.2. Text Controls
          3. 11.1.3.3. Check Boxes and Radio Buttons
          4. 11.1.3.4. Using Validator Controls
            1. 11.1.3.4.1. InputFormRequiredFieldValidator
            2. 11.1.3.4.2. InputFormCompareValidator
            3. 11.1.3.4.3. InputFormRangeValidator
            4. 11.1.3.4.4. InputFormRegularExpressionValidator
            5. 11.1.3.4.5. InputFormCustomValidator
          5. 11.1.3.5. Security Trimming
            1. 11.1.3.5.1. Deriving from SPSecurityTrimmedControl
        4. 11.1.4. Pickers and Selector Controls
          1. 11.1.4.1. Useful Controls
            1. 11.1.4.1.1. Selectors for WebApplication, SiteCollection, Site, and List
            2. 11.1.4.1.2. Schedule Picker
            3. 11.1.4.1.3. People Picker
          2. 11.1.4.2. Implementing Custom Pickers
            1. 11.1.4.2.1. The Data Source
            2. 11.1.4.2.2. Dialog Editor Class
            3. 11.1.4.2.3. Dialog Picker Class
            4. 11.1.4.2.4. Query Control Class
            5. 11.1.4.2.5. Getting the Custom Picker to Work
        5. 11.1.5. Toolbar and Ribbon Controls
          1. 11.1.5.1. Toolbar Control
          2. 11.1.5.2. Ribbon Control
            1. 11.1.5.2.1. Ribbon Basics
            2. 11.1.5.2.2. Ribbon Communication
            3. 11.1.5.2.3. Ribbon Controls Overview
          3. 11.1.5.3. Customizing the Ribbon
            1. 11.1.5.3.1. Prerequisites for a Custom Ribbon
            2. 11.1.5.3.2. Creating a Feature with a Ribbon Definition
            3. 11.1.5.3.3. Creating an Application Page and Displaying the Ribbon Bar
            4. 11.1.5.3.4. Creating Client-Side JavaScript Code for a PageComponent Implementation
            5. 11.1.5.3.5. Implementing Server-Side Event Handlers
        6. 11.1.6. Data Controls
          1. 11.1.6.1. Working with the SPGridView Control
            1. 11.1.6.1.1. Example: Implementing a Grid for a SharePoint List
            2. 11.1.6.1.2. Example: Using the DataTable Class
            3. 11.1.6.1.3. Example: Adding Custom Menus
            4. 11.1.6.1.4. Example: Enabling Sorting
            5. 11.1.6.1.5. Example: Enabling Sorting and Filtering Using a LINQ Data Source
          2. 11.1.6.2. Working with the JS Grid Control
            1. 11.1.6.2.1. Features
            2. 11.1.6.2.2. Example: Using the JS Grid Control
        7. 11.1.7. Summary
    3. 12. Client Programming
      1. 12.1.
        1. 12.1.1. Understanding the Client Object Model
          1. 12.1.1.1. Getting Started
            1. 12.1.1.1.1. .NET Managed Applications
            2. 12.1.1.1.2. Silverlight Applications
            3. 12.1.1.1.3. JavaScript Applications
          2. 12.1.1.2. Namespaces Overview
          3. 12.1.1.3. The Client Context
            1. 12.1.1.3.1. Authentication Modes
            2. 12.1.1.3.2. Client and Value Objects
            3. 12.1.1.3.3. Automatically Obtaining Object Identity
          4. 12.1.1.4. Working with Data
          5. 12.1.1.5. Data Loading and Querying
          6. 12.1.1.6. Differences and Limitations
            1. 12.1.1.6.1. Absolute and Relative URLs Within the Constructors
            2. 12.1.1.6.2. Different Data Types
            3. 12.1.1.6.3. Specifying the Authentication Mode
            4. 12.1.1.6.4. Using the Digest Web Control
          7. 12.1.1.7. Summary
        2. 12.1.2. Using the Dialog Framework
          1. 12.1.2.1. Working with Modal Pop-Up Dialogs
          2. 12.1.2.2. Using Callback Functions and Return Values
          3. 12.1.2.3. Building Dialog Pages
        3. 12.1.3. Working with Status Information and Notifications
          1. 12.1.3.1. Status API
          2. 12.1.3.2. Notification API
        4. 12.1.4. Development Best Practices
          1. 12.1.4.1. Preparing Visual Studio for JavaScript
            1. 12.1.4.1.1. Workaround to Enable JavaScript IntelliSense in Custom Application Pages
            2. 12.1.4.1.2. Using JavaScript IntelliSense Within JS Files
        5. 12.1.5. Programming Examples
          1. 12.1.5.1. Common Pitfalls
            1. 12.1.5.1.1. Objects Cannot Be Accessed Until They Are Loaded
            2. 12.1.5.1.2. Not All Values Are Retrieved
            3. 12.1.5.1.3. The Difference Between Value Objects and Client Objects
          2. 12.1.5.2. Accessing Webs and Sites
            1. 12.1.5.2.1. How to Retrieve Site and Web Properties
            2. 12.1.5.2.2. How to Retrieve Specific Properties Only
            3. 12.1.5.2.3. How to Update Properties
            4. 12.1.5.2.4. How to Create a New Web Site
          3. 12.1.5.3. Accessing Lists
            1. 12.1.5.3.1. How to Retrieve All SharePoint Lists in a Web Site
            2. 12.1.5.3.2. How to Retrieve List Field Information
            3. 12.1.5.3.3. How to Create a New SharePoint List
            4. 12.1.5.3.4. How to Modify an Existing SharePoint List
            5. 12.1.5.3.5. How to Delete a SharePoint List
          4. 12.1.5.4. Accessing List Items
            1. 12.1.5.4.1. How to Retrieve All Items in a SharePoint List
            2. 12.1.5.4.2. How to Retrieve List Items Using CAML Queries
            3. 12.1.5.4.3. How to Create a New List Item
            4. 12.1.5.4.4. How to Update a List Item
            5. 12.1.5.4.5. How to Delete a List Item
          5. 12.1.5.5. Accessing Users and Roles
            1. 12.1.5.5.1. How to Add Users to a SharePoint Group
            2. 12.1.5.5.2. How to Retrieve Members of a SharePoint Group
            3. 12.1.5.5.3. How to Create a Role
            4. 12.1.5.5.4. How to Add Users or Groups to Roles
            5. 12.1.5.5.5. How to Create a New SharePoint Group and Assign the Group to a Role
            6. 12.1.5.5.6. How to Break the Role Inheritance
          6. 12.1.5.6. Accessing Web Parts
            1. 12.1.5.6.1. How to Update the Title of a Web Part
            2. 12.1.5.6.2. How to Add a Web Part to a Page
            3. 12.1.5.6.3. How to Delete a Web Part from a Page
          7. 12.1.5.7. Advanced Examples
            1. 12.1.5.7.1. How to Use Exception-Handling Scope
            2. 12.1.5.7.2. How to Use Conditional Scope
            3. 12.1.5.7.3. How to Access Large Lists
        6. 12.1.6. Summary
    4. 13. Integrating Silverlight
      1. 13.1.
        1. 13.1.1. Introducing Silverlight
          1. 13.1.1.1. Being Prepared for Silverlight
          2. 13.1.1.2. The Architecture of Silverlight
            1. 13.1.1.2.1. The Client Library
            2. 13.1.1.2.2. The Core Libraries
            3. 13.1.1.2.3. The Presentation Core
          3. 13.1.1.3. Silverlight and XAML
            1. 13.1.1.3.1. Describing a Silverlight UI Using XAML
            2. 13.1.1.3.2. Events
            3. 13.1.1.3.3. The Layout Manager
        2. 13.1.2. Silverlight Hosting and Distribution
          1. 13.1.2.1. Setup and Deployment
            1. 13.1.2.1.1. Treat Silverlight as an External Application
          2. 13.1.2.2. Cross-Domain Security
            1. 13.1.2.2.1. Managing the Client-Access Policy
            2. 13.1.2.2.2. Creating an HTTP Request Forwarder
            3. 13.1.2.2.3. Activating the Handler Using an External Application Provider
          3. 13.1.2.3. Integrating Silverlight
            1. 13.1.2.3.1. Using Silverlight in an Application Page
            2. 13.1.2.3.2. Using Silverlight in a Web Part
        3. 13.1.3. Accessing SharePoint Data
          1. 13.1.3.1. Using the SharePoint Client Object Model
          2. 13.1.3.2. Executing Queries
          3. 13.1.3.3. Example: Reading List Data from SharePoint and Writing Changes Back
            1. 13.1.3.3.1. Limitations
          4. 13.1.3.4. Example: Accessing Lists
            1. 13.1.3.4.1. Retrieving All SharePoint Lists in a Web Site
            2. 13.1.3.4.2. Retrieving List Field Information
            3. 13.1.3.4.3. Creating a New SharePoint List
            4. 13.1.3.4.4. Retrieving List Items Using CAML Queries
          5. 13.1.3.5. Example: Accessing Users and Roles
            1. 13.1.3.5.1. How to Add Users to a SharePoint Group
        4. 13.1.4. Summary
    5. 14. Integrating Charts and Maps
      1. 14.1.
        1. 14.1.1. Data Access Scenarios
        2. 14.1.2. Integrating Charts
          1. 14.1.2.1. Understanding Microsoft Chart Controls
            1. 14.1.2.1.1. Prerequisites
            2. 14.1.2.1.2. Features
            3. 14.1.2.1.3. Setting Up
          2. 14.1.2.2. Using Microsoft Chart Control
            1. 14.1.2.2.1. Chart Elements
            2. 14.1.2.2.2. Working with Data
            3. 14.1.2.2.3. Chart Types and Examples
            4. 14.1.2.2.4. Conclusion
          3. 14.1.2.3. Using the Google Chart API
            1. 14.1.2.3.1. Chart Types
            2. 14.1.2.3.2. Using the Google Chart API with SharePoint
          4. 14.1.2.4. Using the Google Visualization API
            1. 14.1.2.4.1. Chart Types
            2. 14.1.2.4.2. Using the Google Visualization API with SharePoint
        3. 14.1.3. Integrating Map Services
          1. 14.1.3.1. Bing Maps
            1. 14.1.3.1.1. Integrating Bing Maps into Application Pages
            2. 14.1.3.1.2. Integrating Bing Maps into Web Parts
            3. 14.1.3.1.3. Populating Bing Maps Using the JavaScript Client Object Model
          2. 14.1.3.2. Google Maps
            1. 14.1.3.2.1. Integrating Google Maps into Application Pages
            2. 14.1.3.2.2. Integrating Google Maps into Web Parts
            3. 14.1.3.2.3. Populating Google Maps Using the JavaScript Client Object Model
          3. 14.1.3.3. Bing Maps vs. Google Maps
            1. 14.1.3.3.1. Limitations When Using SSL/HTTPS
            2. 14.1.3.3.2. Licensing
        4. 14.1.4. Summary
  8. 3. Advanced Techniques
    1. 15. Forms Services and InfoPath
      1. 15.1. Internals of InfoPath Forms
        1. 15.1.1. InfoPath Form Template
          1. 15.1.1.1. Form Definition Files
          2. 15.1.1.2. Form Schema File (XSD)
          3. 15.1.1.3. Form Views (XSL)
          4. 15.1.1.4. Form XML Template (XML)
        2. 15.1.2. InfoPath Form Data
      2. 15.2. Designing Browser-Enabled Form Templates
        1. 15.2.1. Defining the Data Structure
        2. 15.2.2. Designing the Form Templates
        3. 15.2.3. Adding Rules and Validation
        4. 15.2.4. Accessing External Data
        5. 15.2.5. Forms Security
        6. 15.2.6. Enabling Browser Support
          1. 15.2.6.1. Setting Form Compatibility
          2. 15.2.6.2. Configuring Interface Options for InfoPath Forms Services
          3. 15.2.6.3. Configuring Submit Options
      3. 15.3. Deploying InfoPath Forms to SharePoint
        1. 15.3.1. Using InfoPath Forms in SharePoint
        2. 15.3.2. Publishing and Deploying Using the InfoPath Wizard
          1. 15.3.2.1. Publishing Form Templates to Document Libraries
          2. 15.3.2.2. Publishing Form Templates as a Separate Content Type
          3. 15.3.2.3. Publishing Form Templates as Administrator-Approved Templates
          4. 15.3.2.4. Publishing Form Templates to a Network Location
        3. 15.3.3. Embedding Forms into SharePoint Features
        4. 15.3.4. Deploying Forms Using Command-Line Utilities
          1. 15.3.4.1. stsadm.exe
          2. 15.3.4.2. PowerShell Cmdlets
        5. 15.3.5. Deploying Forms with Code
      4. 15.4. Programming InfoPath Forms
        1. 15.4.1. Attaching Managed Code
        2. 15.4.2. InfoPath Object Model
          1. 15.4.2.1. Events
          2. 15.4.2.2. Accessing the Form Data
          3. 15.4.2.3. Maintaining State in Browser-Based Forms
          4. 15.4.2.4. Accessing Views
          5. 15.4.2.5. Handling Errors
      5. 15.5. InfoPath Forms Services
        1. 15.5.1. Preparing InfoPath Forms Services Support
          1. 15.5.1.1. State Service
          2. 15.5.1.2. Configuring InfoPath Forms Services
        2. 15.5.2. Configuring Libraries
        3. 15.5.3. Managing Form Templates
        4. 15.5.4. Displaying Forms in the InfoPath Form Web Part
        5. 15.5.5. Customizing the Browser View Using XmlFormView
          1. 15.5.5.1. Integrating XmlFormView in an Application Page
          2. 15.5.5.2. Accessing the XmlForm Object
        6. 15.5.6. Integrating InfoPath Forms with the Environment
          1. 15.5.6.1. Property Promotion and Demotion of XML Documents
            1. 15.5.6.1.1. Configuring Promotion/Demotion Using InfoPath
            2. 15.5.6.1.2. Configuring Promotion/Demotion Within a List Feature
          2. 15.5.6.2. Web Part Connection Parameters
          3. 15.5.6.3. Passing Parameters from SharePoint to InfoPath Forms
      6. 15.6. Summary
    2. 16. Workflows
      1. 16.1. Workflows in SharePoint
        1. 16.1.1. SharePoint Workflow Basics
          1. 16.1.1.1. Workflow Building Blocks
            1. 16.1.1.1.1. Activities
            2. 16.1.1.1.2. Working on Content
            3. 16.1.1.1.3. User Interaction
          2. 16.1.1.2. Workflow Architecture
            1. 16.1.1.2.1. Workflow Hosting Environment
            2. 16.1.1.2.2. Workflow Types
            3. 16.1.1.2.3. Workflow Structure
          3. 16.1.1.3. SharePoint Workflow Life Cycle
            1. 16.1.1.3.1. Association
            2. 16.1.1.3.2. Initiation
            3. 16.1.1.3.3. Execution and Modification
            4. 16.1.1.3.4. Completion
        2. 16.1.2. Using Workflows in SharePoint
          1. 16.1.2.1. SharePoint Out-Of-the-Box Workflows
          2. 16.1.2.2. Associate Workflows with SharePoint Items
          3. 16.1.2.3. Starting Workflows
          4. 16.1.2.4. Managing and Monitoring Running Workflows
          5. 16.1.2.5. User Interaction Using Tasks
        3. 16.1.3. Tools for Workflow Development
          1. 16.1.3.1. Visio 2010: Process Design
          2. 16.1.3.2. SharePoint Designer 2010: Declarative Workflow
            1. 16.1.3.2.1. Workflows
            2. 16.1.3.2.2. Workflow Settings
            3. 16.1.3.2.3. Workflow Editor
          3. 16.1.3.3. Visual Studio 2010: Custom Workflows
          4. 16.1.3.4. Tool Comparison
      2. 16.2. Workflows with SharePoint Designer
        1. 16.2.1. Creating Workflows with SharePoint Designer
          1. 16.2.1.1. Declaring a Workflow using Actions and Conditions
          2. 16.2.1.2. Actions and Conditions
          3. 16.2.1.3. Working with Steps and Branches
          4. 16.2.1.4. Working with Tasks
          5. 16.2.1.5. Source Files of SharePoint Designer Workflows
        2. 16.2.2. Developing Custom Activities for SharePoint Designer
          1. 16.2.2.1. Setting Up the Visual Studio Solution
          2. 16.2.2.2. Implementing the Activity Class
          3. 16.2.2.3. Describing a SharePoint Designer Action in the .ACTIONS File
          4. 16.2.2.4. Applying Settings to the Configuration
      3. 16.3. Custom Workflows with Visual Studio
        1. 16.3.1. Understanding Workflow Foundation
          1. 16.3.1.1. WF Activities and Their Facets
          2. 16.3.1.2. Dependency Properties and Activity Binding
          3. 16.3.1.3. Correlation Tokens
        2. 16.3.2. SharePoint Workflow Object Model
          1. 16.3.2.1. SPWorkflow
          2. 16.3.2.2. SPWorkflowTemplate
          3. 16.3.2.3. SPWorkflowAssociation
          4. 16.3.2.4. SPWorkflowManager
          5. 16.3.2.5. SPWorkflowTask
          6. 16.3.2.6. SPWorkflowModification
          7. 16.3.2.7. SPWorkflowEventReceiver
          8. 16.3.2.8. SPItemKey
        3. 16.3.3. Developing Workflows with Visual Studio 2010
          1. 16.3.3.1. Modeling the Workflow
          2. 16.3.3.2. Developing the Workflow
          3. 16.3.3.3. Deploying Workflows
          4. 16.3.3.4. Using ASPX Workflow Forms
            1. 16.3.3.4.1. Custom Workflow Association Form
            2. 16.3.3.4.2. Custom Workflow Task Form
          5. 16.3.3.5. Integrate InfoPath Forms with Workflows
      4. 16.4. Summary
    3. 17. Administrative Tasks
      1. 17.1.
        1. 17.1.1. Introduction
          1. 17.1.1.1. Why Automate Tasks?
        2. 17.1.2. Creating Objects
          1. 17.1.2.1. Creating a Web Application
          2. 17.1.2.2. Creating a Site Collection
          3. 17.1.2.3. Creating a Web
        3. 17.1.3. Working with Site Configurations
          1. 17.1.3.1. Working with Site Properties
          2. 17.1.3.2. Maintaining Settings in web.config Programmatically
          3. 17.1.3.3. Setting Up the Configuration
          4. 17.1.3.4. Accessing the Current Settings
        4. 17.1.4. Working with Features
        5. 17.1.5. Working with Site Information
        6. 17.1.6. Retrieving the Configuration Database
        7. 17.1.7. Summary
    4. 18. Enterprise Features
      1. 18.1. Enterprise Search
        1. 18.1.1. Search Products
        2. 18.1.2. Preparing Index and Query Services
        3. 18.1.3. Query Results from the Index
      2. 18.2. User Profiles and My Sites
        1. 18.2.1. Using User Profiles
        2. 18.2.2. Work Within the Context of My Sites
        3. 18.2.3. Personalize a User's Settings
      3. 18.3. Web Content Management
        1. 18.3.1. Working with SPPublishingWeb Class
        2. 18.3.2. Content Deployment
        3. 18.3.3. What's New in SharePoint 2010 Web Content Management
          1. 18.3.3.1. Page Authoring Experience
          2. 18.3.3.2. Rich Media Integration
          3. 18.3.3.3. Content Query Web Part
          4. 18.3.3.4. Web Analytics
      4. 18.4. Advanced Document Management and Metadata
        1. 18.4.1. Document Management
          1. 18.4.1.1. Working with Metadata Navigation
          2. 18.4.1.2. Working with Metadata Taxonomies
        2. 18.4.2. Check In and Check Out
        3. 18.4.3. Versioning
      5. 18.5. Records Management
        1. 18.5.1. Moving Documents to the Records Center Using the API
        2. 18.5.2. Maintain Retention Policies
      6. 18.6. Summary