You are previewing Professional Alfresco: Practical Solutions for Enterprise Content Management.
O'Reilly logo
Professional Alfresco: Practical Solutions for Enterprise Content Management

Book Description

A timely and authoritative guide, written by the Chief Architect and Founder of Alfresco

Alfresco is considered the leading open source solution for Web and Content Management. What makes Alfresco unique is its services, which can be easily extended with web scripts via RESTful services. Written by an author team that includes the chief architect and the founder of Alfresco, this comprehensive guide provides in-depth coverage of the Alfresco architecture and services and shows how to extend them through Web scripts to meet real business needs.

You'll learn how to use Alfresco services to create effective content management solutions while detailed code examples show you how to extend Alfresco with Web scripts using RESTful services to deliver custom solutions.

  • Features detailed, working code examples that demonstrate how to extend Alfresco with Web scripts

  • Written by the Chief Architect and other key Alfresco insiders, ensuring that this book is both authoritative and up-to-date

  • Shows how to integrate Alfresco with Drupal and Joomla portal solutions

  • Covers the upcoming Alfresco 3.2 release

  • Includes real-world case examples of increasing levels of sophistication and complexity

  • The companion Web site contains all source code examples in the book

You'll benefit from this timely resource that shows how to get the most from Alfresco for specific business requirements.

Table of Contents

  1. Copyright
  2. ABOUT THE AUTHORS
  3. ABOUT THE ALFRESCO PROJECT EDITOR
  4. ABOUT THE TECHNICAL EDITOR
  5. CREDITS
  6. ACKNOWLEDGMENTS
  7. INTRODUCTION
    1. WHO THIS BOOK IS FOR
    2. WHAT THIS BOOK COVERS
    3. HOW THIS BOOK IS STRUCTURED
    4. WHAT YOU NEED TO USE THIS BOOK
    5. CONVENTIONS
    6. SOURCE CODE
    7. ERRATA
    8. P2P.WROX.COM
  8. I. Getting to Know Alfresco
    1. 1. Introducing Alfresco
      1. 1.1. For The End User
        1. 1.1.1. For The End User
        2. 1.1.2. For the Business
        3. 1.1.3. For the Developer
        4. 1.1.4. For the IT Organization
      2. 1.2. WHAT IS ENTERPRISE CONTENT MANAGEMENT?
        1. 1.2.1. The Origins of ECM
        2. 1.2.2. Enter Alfresco
      3. 1.3. ALFRESCO OVERVIEW
        1. 1.3.1. The Content Application Server and the Repository
        2. 1.3.2. Alfresco Applications
        3. 1.3.3. The Alfresco Web Tier and Surf
        4. 1.3.4. Alfresco Programming Models
      4. 1.4. CONTENT APPLICATIONS
        1. 1.4.1. Knowledge Management
        2. 1.4.2. Document Management
        3. 1.4.3. Shared Drive Replacement
        4. 1.4.4. Enterprise Portals and Intranets
        5. 1.4.5. Web Content Management
        6. 1.4.6. Information Publishing
        7. 1.4.7. Records Management
        8. 1.4.8. Collaborative Content Development
        9. 1.4.9. Case Management
      5. 1.5. ALFRESCO AND YOUR ENVIRONMENT
        1. 1.5.1. What to Consider
          1. 1.5.1.1. The Audience
          2. 1.5.1.2. The Number of Users
          3. 1.5.1.3. The Architecture
          4. 1.5.1.4. The Level of Configuration or Customization
          5. 1.5.1.5. The Enterprise IT Environment
          6. 1.5.1.6. The Support Requirements
      6. 1.6. WHAT IS PROFESSIONAL OPEN SOURCE SOFTWARE?
        1. 1.6.1. Why Use Open Source?
        2. 1.6.2. Alfresco and the Community
    2. 2. Architecture
      1. 2.1. GUIDING PRINCIPLES
        1. 2.1.1. Supporting ECM Requirements
        2. 2.1.2. Simple, Simple, Simple
        3. 2.1.3. Scaling to the Enterprise
        4. 2.1.4. A Modular Approach
        5. 2.1.5. Incorporating Best-of-Breed Libraries
        6. 2.1.6. Environment Independence
        7. 2.1.7. A Solid Core
        8. 2.1.8. Scriptable Extensions
        9. 2.1.9. A Standards-Based Approach
        10. 2.1.10. An Architecture of Participation
      2. 2.2. A HIGH-LEVEL OVERVIEW
      3. 2.3. THE ALFRESCO CONTENT APPLICATION SERVER
        1. 2.3.1. The Content Repository
        2. 2.3.2. Modularity through a Spring Framework
        3. 2.3.3. Content Services
        4. 2.3.4. Protocols
        5. 2.3.5. APIs
          1. 2.3.5.1. The Remote API
          2. 2.3.5.2. The Embedded API
      4. 2.4. CONTENT MODELING
      5. 2.5. THE ALFRESCO WEB APPLICATION FRAMEWORK
      6. 2.6. DEPLOYMENT OPTIONS
        1. 2.6.1. Embedded Alfresco
        2. 2.6.2. The Alfresco Content Application Server
        3. 2.6.3. Clustered Alfresco
        4. 2.6.4. The Backup Server
        5. 2.6.5. Multitenancy
      7. 2.7. THE ENTERPRISE INFRASTRUCTURE
    3. 3. Setting Up an Alfresco Environment
      1. 3.1. INSTALLING ALFRESCO
        1. 3.1.1. Running the Alfresco Installation Wizard
        2. 3.1.2. Repository Configuration
      2. 3.2. DEPLOYING EXTENSIONS
        1. 3.2.1. Spring Configuration Extensions
        2. 3.2.2. Web Script Extensions
        3. 3.2.3. Web Tier Configuration Extensions
        4. 3.2.4. Share Customization Extensions
        5. 3.2.5. Packaging Extension Files
      3. 3.3. DEBUGGING TIPS
        1. 3.3.1. Server-Side JavaScript Logging
        2. 3.3.2. Server-Side JavaScript Debugging
        3. 3.3.3. Client-Side JavaScript Logging and Debugging
        4. 3.3.4. Disabling Caching
  9. II. Getting Technical with Alfresco
    1. 4. Services
      1. 4.1. CONTENT REPOSITORY SERVICES
        1. 4.1.1. File and Folder Management
        2. 4.1.2. Versioning and Check Out/Check In
        3. 4.1.3. Auditing
        4. 4.1.4. Authentication, Authorities, and Permissions
        5. 4.1.5. Modeling
        6. 4.1.6. Search
      2. 4.2. CONTENT APPLICATION SERVICES
        1. 4.2.1. Content Services
          1. 4.2.1.1. Rules and Actions
          2. 4.2.1.2. Transformation
          3. 4.2.1.3. Metadata Extraction
          4. 4.2.1.4. Thumbnailing
        2. 4.2.2. Control Services
          1. 4.2.2.1. Workflow
          2. 4.2.2.2. Web Projects
          3. 4.2.2.3. Sandboxes
          4. 4.2.2.4. Assets
        3. 4.2.3. Collaboration Services
          1. 4.2.3.1. Sites
          2. 4.2.3.2. Invite
          3. 4.2.3.3. Activity
          4. 4.2.3.4. Tagging
          5. 4.2.3.5. Commenting
      3. 4.3. HOW SERVICES ARE BUILT
      4. 4.4. USING SERVICES
        1. 4.4.1. Embedded APIs
        2. 4.4.2. Remote APIs
        3. 4.4.3. Configuring and Extending Existing Services
        4. 4.4.4. Building a Simple Service
          1. 4.4.4.1. Example Counter Service: Tier 1 – Java Service Layer
          2. 4.4.4.2. Example Counter Service: Tier 2 – JavaScript API
          3. 4.4.4.3. Example Counter Service: Tier 3 – RESTful API
      5. 4.5. CONTENT MANAGEMENT INTEROPERABILITY SERVICES (CMIS)
        1. 4.5.1. CMIS Requirements
        2. 4.5.2. Core Concepts of CMIS
        3. 4.5.3. CMIS Services
        4. 4.5.4. Using CMIS with Alfresco
    2. 5. Content Modeling
      1. 5.1. MODELING IN CONTEXT
      2. 5.2. DEPLOYING A CONTENT MODEL
      3. 5.3. THE CONTENT METAMODEL EXPLAINED
        1. 5.3.1. The Metamodel XML Schema
        2. 5.3.2. The Model Header
        3. 5.3.3. Model Namespaces
        4. 5.3.4. Types
        5. 5.3.5. Properties
        6. 5.3.6. Associations
        7. 5.3.7. Constraints
        8. 5.3.8. Inheritance
        9. 5.3.9. Aspects
      4. 5.4. OUT-OF-THE-BOX MODELS
      5. 5.5. A STEP-BY-STEP CUSTOM MODEL
      6. 5.6. CREATING CONTENT WITH JAVASCRIPT
      7. 5.7. MODEL LOCALIZATION
      8. 5.8. THE RELATIONSHIP TO CMIS
    3. 6. Authentication and Security
      1. 6.1. ALFRESCO AUTHENTICATION
        1. 6.1.1. Authentication Subsystems
        2. 6.1.2. Authentication Subsystem Types
        3. 6.1.3. The Authentication Chain
        4. 6.1.4. Authentication Configuration Examples
          1. 6.1.4.1. Example 1: Customizing alfrescoNtlm
            1. 6.1.4.1.1. Authentication Chain Composition
            2. 6.1.4.1.2. Configuring the Instance
            3. 6.1.4.1.3. Putting It in Action
          2. 6.1.4.2. Example 2: The ldap-ad Subsystem
            1. 6.1.4.2.1. Authentication Chain Composition
            2. 6.1.4.2.2. Configuring the Instances
            3. 6.1.4.2.3. Putting It in Action
          3. 6.1.4.3. Example 3: The passthru Subsystem
            1. 6.1.4.3.1. Authentication Chain Composition
            2. 6.1.4.3.2. Configuring the Instances
            3. 6.1.4.3.3. Putting It in Action
      2. 6.2. ALFRESCO SECURITY
      3. 6.3. AUTHORITIES
        1. 6.3.1. People and Users
        2. 6.3.2. Groups
        3. 6.3.3. Zones
          1. 6.3.3.1. Application-Related Zones
          2. 6.3.3.2. Authentication-Related Zones
        4. 6.3.4. Dynamic Authorities and Roles
      4. 6.4. PERMISSIONS
      5. 6.5. ACCESS CONTROL LISTS
        1. 6.5.1. ACL Ordering and Evaluation
        2. 6.5.2. An ACL Example
      6. 6.6. PUBLIC SERVICES
        1. 6.6.1. Configuration
        2. 6.6.2. Defining Method-Level Security
      7. 6.7. MODIFYING ACCESS CONTROL
      8. 6.8. ACCESS CONTROL EXTENSION
      9. 6.9. IMPLEMENTATION AND SERVICES
        1. 6.9.1. The Person Service
        2. 6.9.2. The Authority Service
        3. 6.9.3. The Permission Service
        4. 6.9.4. The Ownable Service
    4. 7. Business Process Management
      1. 7.1. INTRODUCTION TO WORKFLOW IN ALFRESCO
        1. 7.1.1. How jBPM Interprets and Implements a Process
          1. 7.1.1.1. Nodes and Transitions
          2. 7.1.1.2. Actions and Events
          3. 7.1.1.3. Tasks, Swimlanes, and Timers
          4. 7.1.1.4. Super-States and Sub-Processes
      2. 7.2. DEFINING A WORKFLOW IN ALFRESCO
      3. 7.3. CREATING THE PROCESS DEFINITION
        1. 7.3.1. Deploying a Process Definition
          1. 7.3.1.1. Configuring the Alfresco Server
          2. 7.3.1.2. Hot-Deploying a Process Definition
          3. 7.3.1.3. Testing the Deployment
      4. 7.4. THE TASK MODEL
        1. 7.4.1. Creating a Task Model
        2. 7.4.2. The Common Task Model
          1. 7.4.2.1. Workflow Task Definitions
          2. 7.4.2.2. The Start Task
          3. 7.4.2.3. Assignment Aspects
          4. 7.4.2.4. Workflow Package Actions
          5. 7.4.2.5. Accessing Task Attributes
        3. 7.4.3. Deploying the Task Model
      5. 7.5. CUSTOMIZING BEHAVIOR
        1. 7.5.1.
          1. 7.5.1.1. Process Variables
          2. 7.5.1.2. Assigning Tasks and Swimlanes
          3. 7.5.1.3. The Alfresco JavaScript Action
          4. 7.5.1.4. The ForEachFork Action
      6. 7.6. CONFIGURING THE EXPLORER WEB CLIENT
        1. 7.6.1. Resource Bundles
          1. 7.6.1.1. Creating a Resource Bundle
            1. 7.6.1.1.1. Task Model Types
            2. 7.6.1.1.2. Workflow Definition
            3. 7.6.1.1.3. Workflow Node
            4. 7.6.1.1.4. Workflow Transitions
            5. 7.6.1.1.5. Workflow Tasks
        2. 7.6.2. Deploying Resource Bundles
        3. 7.6.3. Configuring Task Property Pages
  10. III. Extending Alfresco with RESTful Services
    1. 8. Introducing Web Scripts
      1. 8.1. TYPES OF WEB SCRIPTS
        1. 8.1.1. Data Web Scripts
        2. 8.1.2. Presentation Web Scripts
      2. 8.2. THE WEB SCRIPT FRAMEWORK
      3. 8.3. HELLO WORLD WEB SCRIPT
      4. 8.4. LISTING ALREADY-BUILT WEB SCRIPTS
      5. 8.5. WHERE CAN I INVOKE A WEB SCRIPT?
        1. 8.5.1. Using cURL Instead of a Web Browser
      6. 8.6. AUTHENTICATING
        1. 8.6.1. Creating the Hello User Web Script
        2. 8.6.2. Specifying User Identity
        3. 8.6.3. Custom Client Authentication
      7. 8.7. RESPONSE FORMATS
        1. 8.7.1. Adding a Response Format to the Hello User Web Script
        2. 8.7.2. Selecting a Response Format
      8. 8.8. ANATOMY OF A WEB SCRIPT URI
      9. 8.9. WORKING WITH CLIENT LIMITATIONS
        1. 8.9.1. Tunneling HTTP Methods
        2. 8.9.2. Forcing Success Response Status
        3. 8.9.3. JSON Callbacks
      10. 8.10. CACHING
    2. 9. How to Create a Web Script
      1. 9.1. COMPONENTS OF A WEB SCRIPT
      2. 9.2. CREATING A DESCRIPTION DOCUMENT
        1. 9.2.1. URI Templates
      3. 9.3. CREATING A CONTROLLER SCRIPT
        1. 9.3.1. Parsing the Web Script URI
        2. 9.3.2. Calling Alfresco Services
        3. 9.3.3. Setting the Response Status Code
        4. 9.3.4. Constructing the Model
      4. 9.4. CREATING A RESPONSE TEMPLATE
        1. 9.4.1. Accessing the Model
        2. 9.4.2. Accessing Alfresco Services
        3. 9.4.3. FreeMarker Methods
      5. 9.5. REGISTERING AND TESTING
        1. 9.5.1. Debugging a Controller Script
      6. 9.6. MULTIPLE RESPONSE TEMPLATES
        1. 9.6.1. Response Status Code Templates
      7. 9.7. STEP-BY-STEP: KNOWLEDGE BASE SEARCH WEB SCRIPT
        1. 9.7.1. How Does Knowledge Base Search Work?
        2. 9.7.2. Testing Knowledge Base Search
      8. 9.8. COMPLEX ROOT OBJECTS REFERENCE
        1. 9.8.1. url
        2. 9.8.2. status
        3. 9.8.3. cache
        4. 9.8.4. format
        5. 9.8.5. webscript
        6. 9.8.6. server
    3. 10. Advanced Web Scripts
      1. 10.1. INTERNATIONALIZATION
      2. 10.2. CONFIGURATION
      3. 10.3. CONTENT NEGOTIATION
      4. 10.4. MULTIPART FORM PROCESSING
        1. 10.4.1. The Form Data API
          1. 10.4.1.1. formdata
          2. 10.4.1.2. formfield
      5. 10.5. REQUEST PROCESSING
        1. 10.5.1. The JSON Object API
          1. 10.5.1.1. JSONArray
          2. 10.5.1.2. JSONObject
      6. 10.6. CACHING
        1. 10.6.1. Descriptor Cache Controls
        2. 10.6.2. Runtime Cache Controls
      7. 10.7. ADVANCED DESCRIPTOR OPTIONS
        1. 10.7.1. Lifecycle
        2. 10.7.2. Family
        3. 10.7.3. Run As
    4. 11. Java-Backed Web Scripts
      1. 11.1. STEP-BY-STEP: FOLDER LISTING JAVA-BACKED WEB SCRIPT
      2. 11.2. JAVA APPROACH TO WEB SCRIPTS
        1. 11.2.1. Parsing the URI
        2. 11.2.2. Calling Alfresco Services
        3. 11.2.3. Setting the Response Status Code
        4. 11.2.4. Constructing the Model
      3. 11.3. SPRING-FRAMEWORK REGISTRATION
        1. 11.3.1. Service Dependencies
      4. 11.4. CREATING A NEW KIND OF WEB SCRIPT
        1. 11.4.1. Using a New Kind of Web Script
  11. IV. Extending Share
    1. 12. Understanding the Surf Framework
      1. 12.1. WHAT IS SURF?
      2. 12.2. BASIC CONCEPTS
        1. 12.2.1. Content
        2. 12.2.2. Content Delivery Services
        3. 12.2.3. Content Applications
      3. 12.3. PUTTING IT INTO ACTION
        1. 12.3.1. Plug-in for the Spring Framework
        2. 12.3.2. Model-View-Controller
        3. 12.3.3. Spring Web MVC
        4. 12.3.4. Surf View Resolvers
        5. 12.3.5. Examples
          1. 12.3.5.1. A Surf Page
          2. 12.3.5.2. Using an Annotated Controller
      4. 12.4. VIEW COMPOSITION
        1. 12.4.1. Pages
        2. 12.4.2. Templates and Regions
        3. 12.4.3. Components
      5. 12.5. PRESENTATION CONTENT
        1. 12.5.1. Surf Objects
        2. 12.5.2. Templates
        3. 12.5.3. Web Scripts
        4. 12.5.4. Example
          1. 12.5.4.1. A Java-Backed Web Script
      6. 12.6. CONNECTORS AND CREDENTIALS
        1. 12.6.1. Connectors and Endpoints
        2. 12.6.2. Credentials
        3. 12.6.3. Authenticators
        4. 12.6.4. The Remote API
        5. 12.6.5. Example
          1. 12.6.5.1. Scriptable Controller
      7. 12.7. GETTING INVOLVED
    2. 13. Levels of Customization
      1. 13.1. OVERVIEW
      2. 13.2. THE ALFRESCO REPOSITORY
        1. 13.2.1. Content Models
        2. 13.2.2. Content Behavior
        3. 13.2.3. Process Definitions
        4. 13.2.4. Workflow Models
        5. 13.2.5. Actions
        6. 13.2.6. Other Extension Points
      3. 13.3. ALFRESCO EXPLORER
        1. 13.3.1. The Basics
        2. 13.3.2. Permissions
        3. 13.3.3. Rules
        4. 13.3.4. Other Extension Points
      4. 13.4. ALFRESCO SHARE
        1. 13.4.1. The Basics
        2. 13.4.2. Dashboards
        3. 13.4.3. Dashlets
    3. 14. Custom Knowledge Base: Getting Started
      1. 14.1. OVERVIEW
        1. 14.1.1. Content Lifecycle
        2. 14.1.2. Content Model
          1. 14.1.2.1. Knowledge Base Spaces
          2. 14.1.2.2. Knowledge Base Articles
          3. 14.1.2.3. Constraints
        3. 14.1.3. Alfresco Explorer Extensions
          1. 14.1.3.1. Property Sheets
          2. 14.1.3.2. Wizards and Icons
        4. 14.1.4. Smart Spaces and Scripting
        5. 14.1.5. Space Templates
      2. 14.2. INSTALLING THE CODE
        1. 14.2.1. Stopping the Alfresco Server
        2. 14.2.2. Adding the Knowledge Base Content Model
        3. 14.2.3. Adding Alfresco Explorer Configuration
        4. 14.2.4. Adding the Knowledge Base Search Web Script
      3. 14.3. PUTTING IT INTO ACTION
        1. 14.3.1. Starting the Alfresco Server
        2. 14.3.2. Signing on to Alfresco Explorer
        3. 14.3.3. Adding a Script to the Data Dictionary
        4. 14.3.4. Creating a Knowledge Base Space Template
          1. 14.3.4.1. Creating the Space Template
          2. 14.3.4.2. Adding an Archived Space
          3. 14.3.4.3. Setting Up Content Rules
            1. 14.3.4.3.1. Rule 1: Apply KB Article Aspect and Tag Draft
            2. 14.3.4.3.2. Rule 2: Apply Move Archived Documents to Archived Folder
            3. 14.3.4.3.3. Rule 3: Update Status Tag
        5. 14.3.5. Creating a Knowledge Base
        6. 14.3.6. Contribute a Document
          1. 14.3.6.1. Using Alfresco Explorer
          2. 14.3.6.2. Using CIFS
        7. 14.3.7. Editing Your Knowledge Base Article
        8. 14.3.8. Seeing It in JSON!
      4. 14.4. SAMPLE CODE
        1. 14.4.1. Alfresco Repository
        2. 14.4.2. Alfresco Explorer
        3. 14.4.3. Data Dictionary Script
        4. 14.4.4. Knowledge Base–Search Web Script
    4. 15. Custom Knowledge Base: Basic Share Customizations
      1. 15.1. OVERVIEW
        1. 15.1.1. Sites
        2. 15.1.2. Custom Dashlet
          1. 15.1.2.1. Browser Dependencies
          2. 15.1.2.2. Internationalization (I18N)
        3. 15.1.3. Custom Site Page
          1. 15.1.3.1. A Knowledge Base Component
          2. 15.1.3.2. Browser Dependencies
          3. 15.1.3.3. Internationalization (I18N) and Configuration
          4. 15.1.3.4. Alfresco Share Configuration
        4. 15.1.4. Custom Site Preset
          1. 15.1.4.1. Dashboard Configuration
          2. 15.1.4.2. Internationalization (I18N)
      2. 15.2. INSTALLING THE CODE
        1. 15.2.1. Stopping the Alfresco Server
        2. 15.2.2. Adding the Custom Dashlet
        3. 15.2.3. Adding the Custom Site Page
          1. 15.2.3.1. Adding the Web Script
          2. 15.2.3.2. Adding the Surf Page
          3. 15.2.3.3. Adding the Surf Template Instance
          4. 15.2.3.4. Adding the FreeMarker Template
          5. 15.2.3.5. Adding the Surf Component Bindings
          6. 15.2.3.6. Configuring Your Site Page for Alfresco Share
        4. 15.2.4. Adding the Common Library
        5. 15.2.5. Configuring a Custom Site Preset
          1. 15.2.5.1. Adding the Preset
          2. 15.2.5.2. Overriding the Create Site Dialog Drop-Down List
          3. 15.2.5.3. Adding Your Custom Message-Bundle
          4. 15.2.5.4. Overriding the Message-Bundle Bootstrap Component
        6. 15.2.6. Adding Files to the Tomcat ROOT Web Application
          1. 15.2.6.1. Adding the web.xml File
          2. 15.2.6.2. Adding the Custom Dashlet Dependencies
          3. 15.2.6.3. Adding the Custom Page Component Dependencies
      3. 15.3. PUTTING IT INTO ACTION
        1. 15.3.1. Starting the Alfresco Server
        2. 15.3.2. Creating a New Alfresco Share Site
        3. 15.3.3. Adding the Custom Dashlet to Your Site
        4. 15.3.4. Adding the Custom Page to Your Site
        5. 15.3.5. Creating a Knowledge Base Site
        6. 15.3.6. Clicking on the Document Library
      4. 15.4. SAMPLE CODE
        1. 15.4.1. Alfresco Share – Custom Dashlet
          1. 15.4.1.1. Web Script
        2. 15.4.2. Alfresco Share – Custom Page
          1. 15.4.2.1. Surf Object — Page
          2. 15.4.2.2. Surf Object — Template Instance
          3. 15.4.2.3. Surf Objects — Components
          4. 15.4.2.4. Template
          5. 15.4.2.5. Web Script
        3. 15.4.3. Alfresco Share – Custom Site Preset
          1. 15.4.3.1. Share Object — Preset
          2. 15.4.3.2. Share Module – Site Creation
        4. 15.4.4. Alfresco Share – Common Library
        5. 15.4.5. Alfresco Share – Configuration Files
        6. 15.4.6. Alfresco Share – Message Bundle
        7. 15.4.7. Tomcat ROOT Web Application Files
          1. 15.4.7.1. Custom Dashlet — CSS
          2. 15.4.7.2. Custom Page – CSS and JavaScript
    5. 16. Custom Knowledge Base: Advanced Share Customizations
      1. 16.1. OVERVIEW
        1. 16.1.1. Alfresco Share Document Library
          1. 16.1.1.1. Aspects
          2. 16.1.1.2. Actions
          3. 16.1.1.3. Workflow
        2. 16.1.2. Forms in Alfresco Share
          1. 16.1.2.1. Alfresco Share Configuration
      2. 16.2. INSTALLING THE CODE
        1. 16.2.1. Stopping the Alfresco Server
        2. 16.2.2. Document Library Services
          1. 16.2.2.1. Adding the Custom Workflow
          2. 16.2.2.2. Adding the Archive Action Handler
          3. 16.2.2.3. Setting Up the kb: article Aspect
        3. 16.2.3. Alfresco Share
          1. 16.2.3.1. Adding the Archive Action to the Document Library
          2. 16.2.3.2. Configuring Alfresco Share to Show Your Custom Workflow
          3. 16.2.3.3. Configuring the Alfresco Share Form for kb:article Objects
          4. 16.2.3.4. Adding the Alfresco Share Form Template
          5. 16.2.3.5. Adding Your Custom Message Bundle
          6. 16.2.3.6. Overriding the Message Bundle Bootstrap Component
        4. 16.2.4. Adding Files to the Tomcat ROOT Web Application
          1. 16.2.4.1. Adding the web.xml File
          2. 16.2.4.2. Adding the Document Library Dependencies
          3. 16.2.4.3. Adding the Knowledge Base Article Image
      3. 16.3. PUTTING IT INTO ACTION
        1. 16.3.1. Restarting the Alfresco Server
        2. 16.3.2. Setting Up a Knowledge Base
        3. 16.3.3. Browsing to the Knowledge Base
        4. 16.3.4. Adding a Document to the Knowledge Base
        5. 16.3.5. Editing the Document Metadata Using a Form
        6. 16.3.6. Requesting Approval for Your Document
        7. 16.3.7. Approving the Document
        8. 16.3.8. Archiving the Document
      4. 16.4. SAMPLE CODE
        1. 16.4.1. Alfresco Repository
          1. 16.4.1.1. Custom Workflow
          2. 16.4.1.2. Archive Web Script (POST Handler)
          3. 16.4.1.3. Document Library Services
        2. 16.4.2. Alfresco Share
          1. 16.4.2.1. Configuration Files
          2. 16.4.2.2. Form Template
          3. 16.4.2.3. Document Library – HEAD Override
          4. 16.4.2.4. Document Library – Action List
          5. 16.4.2.5. Workflow
        3. 16.4.3. Tomcat ROOT Web Application Files
          1. 16.4.3.1. Document Library – Browser Dependencies
    6. 17. Integrating with Other Applications
      1. 17.1. WHY INTEGRATE CONTENT MANAGEMENT INTO APPLICATIONS?
        1. 17.1.1. Why Not Just Use a File System or a Database?
      2. 17.2. APPLICATION INTEGRATION OPTIONS
        1. 17.2.1. CMIS
        2. 17.2.2. Web Scripts
        3. 17.2.3. File-Based Access
        4. 17.2.4. OpenSearch and Feeds
        5. 17.2.5. Java Applications
        6. 17.2.6. PHP Applications
        7. 17.2.7. .NET Applications
        8. 17.2.8. Surf Components
        9. 17.2.9. Authentication and Directory Services
      3. 17.3. PATTERNS OF CONTENT MANAGEMENT INTEGRATION
        1. 17.3.1. Content Service Mappers
          1. 17.3.1.1. Using a Content Service Mapper
          2. 17.3.1.2. When to Use It
          3. 17.3.1.3. Example
        2. 17.3.2. Property View
          1. 17.3.2.1. Using a Property View
          2. 17.3.2.2. When to Use It
          3. 17.3.2.3. Example: Confluence
        3. 17.3.3. Article
          1. 17.3.3.1. Using the Article Pattern
          2. 17.3.3.2. When to Use It
          3. 17.3.3.3. Example
        4. 17.3.4. Query View
          1. 17.3.4.1. Using a Query View
          2. 17.3.4.2. When to Use It
          3. 17.3.4.3. Example: Drupal and OpenSearch
        5. 17.3.5. Browser View
          1. 17.3.5.1. Using a Browser View
          2. 17.3.5.2. When to Use It
          3. 17.3.5.3. Example: Drupal Repository Browser
        6. 17.3.6. Librarian
          1. 17.3.6.1. Using a Librarian
          2. 17.3.6.2. When to Use It
          3. 17.3.6.3. Example
        7. 17.3.7. Catalog View
          1. 17.3.7.1. Using a Catalog View
          2. 17.3.7.2. When to Use It
          3. 17.3.7.3. Example: Image Gallery in Share
        8. 17.3.8. Attachment
          1. 17.3.8.1. Using an Attachment
          2. 17.3.8.2. When to Use It
          3. 17.3.8.3. Example
        9. 17.3.9. Annotation
          1. 17.3.9.1. Using an Annotation
          2. 17.3.9.2. When to Use It
          3. 17.3.9.3. Example: Comments in a Share Blog
        10. 17.3.10. Archive
          1. 17.3.10.1. Using an Archive
          2. 17.3.10.2. When to Use It
          3. 17.3.10.3. Example: Kofax Release Script
        11. 17.3.11. Project Space
          1. 17.3.11.1. Using a Project Space
          2. 17.3.11.2. When to Use It
        12. 17.3.12. Review and Approval Workflow
          1. 17.3.12.1. Using a Review and Approval Workflow
          2. 17.3.12.2. When to Use It
          3. 17.3.12.3. Example: Kofax
        13. 17.3.13. Feed
          1. 17.3.13.1. Using a Feed
          2. 17.3.13.2. When to Use It
          3. 17.3.13.3. Example: Activities Atom Feed
        14. 17.3.14. Portlet View
          1. 17.3.14.1. Using a Portlet View
          2. 17.3.14.2. When to Use It
          3. 17.3.14.3. Example: Liferay and CMIS
      4. 17.4. EXAMPLE INTEGRATIONS
        1. 17.4.1. Joomla and Drupal
        2. 17.4.2. Confluence
        3. 17.4.3. Liferay Portal
        4. 17.4.4. SAP
        5. 17.4.5. Kofax Image Scanning
        6. 17.4.6. Microsoft SharePoint
        7. 17.4.7. Lotus Quickr
        8. 17.4.8. Email Clients
  12. V. Appendices
    1. A. RESTful API Reference
      1. A.1. CALENDAR
        1. A.1.1. Retrieve Day Events
        2. A.1.2. Retrieve Event Defaults
        3. A.1.3. Retrieve Event Details
        4. A.1.4. Retrieve Month Events
        5. A.1.5. Retrieve Week Events
        6. A.1.6. Save Calendar Event
        7. A.1.7. Remove Calendar Subscriptions
        8. A.1.8. Calendar Events
        9. A.1.9. Calendar
        10. A.1.10. Calendar Subscriptions
        11. A.1.11. Calendar Color
        12. A.1.12. Set Calendar Color
        13. A.1.13. Event Listing
        14. A.1.14. Calendar Feed
      2. A.2. REPOSITORY WEB SCRIPTS
        1. A.2.1. Authentication
          1. A.2.1.1. Login
          2. A.2.1.2. Login (POST)
          3. A.2.1.3. Logout
          4. A.2.1.4. Validate Login Ticket
          5. A.2.1.5. Touch
        2. A.2.2. Activities
          1. A.2.2.1. Activity Type Template
          2. A.2.2.2. Activity Template Paths
          3. A.2.2.3. Activities Feed
            1. A.2.2.3.1. Activities Site Feed
            2. A.2.2.3.2. Activities Admin User Feed
            3. A.2.2.3.3. Activities User Feed
          4. A.2.2.4. Activities Feed Controls
            1. A.2.2.4.1. Activity User Feed Controls DELETE
            2. A.2.2.4.2. Activity User Feed Controls POST
            3. A.2.2.4.3. Activity User Feed Controls GET
        3. A.2.3. Blogs
          1. A.2.3.1. Blog
            1. A.2.3.1.1. Blog GET
            2. A.2.3.1.2. Blog PUT
          2. A.2.3.2. Posting Blogs
            1. A.2.3.2.1. Blog Post Publishing
            2. A.2.3.2.2. Delete Blog Post
            3. A.2.3.2.3. Get All Blogs
            4. A.2.3.2.4. Update a Blog Post
          3. A.2.3.3. Blog Posts
            1. A.2.3.3.1. Blog Posts (Draft)
            2. A.2.3.3.2. Blog Posts (Published)
            3. A.2.3.3.3. Blog Posts
            4. A.2.3.3.4. Blog Posts per Month
            5. A.2.3.3.5. All Externally Published Posts
            6. A.2.3.3.6. Get Blog Posts
            7. A.2.3.3.7. New Blog Post
        4. A.2.4. Comments
          1. A.2.4.1. Delete a Comment
          2. A.2.4.2. Comment
          3. A.2.4.3. Update a Comment
          4. A.2.4.4. All Comments
          5. A.2.4.5. Add a Comment
        5. A.2.5. Dictionary
          1. A.2.5.1. Get Association Definitions
          2. A.2.5.2. Get Association Definitions for a Given Class Name
          3. A.2.5.3. Get Child Association Definitions
          4. A.2.5.4. Get Child Association Definitions for a Given Class Name
          5. A.2.5.5. Get Class Definitions
          6. A.2.5.6. Get Class Definitions for a Given Class Name
          7. A.2.5.7. Get Property Definitions
          8. A.2.5.8. Get Property Definitions for a Given Class Name and Property Name
          9. A.2.5.9. Get Subclass Definitions
        6. A.2.6. Discussions
          1. A.2.6.1. Discussion Forum
            1. A.2.6.1.1. Forum Hot Posts
            2. A.2.6.1.2. Forum My Posts
            3. A.2.6.1.3. Forum New Posts
            4. A.2.6.1.4. Get Forum Posts
            5. A.2.6.1.5. Add Forum Posts
          2. A.2.6.2. Discussion Posts
            1. A.2.6.2.1. Get Forum Post Replies
            2. A.2.6.2.2. Add Forum Post Replies
          3. A.2.6.3. Delete Topic
            1. A.2.6.3.1. Topic Details
            2. A.2.6.3.2. Update Topic
        7. A.2.7. Forms
          1. A.2.7.1. PickerList
          2. A.2.7.2. PickerItems
        8. A.2.8. Groups
          1. A.2.8.1. Remove an Authority from a Group
          2. A.2.8.2. Get the List of Child Authorities for a Group
          3. A.2.8.3. Add Group or User to a Group
          4. A.2.8.4. Get the Details of a Group
          5. A.2.8.5. Update the Details of a Group
          6. A.2.8.6. Delete a Group
          7. A.2.8.7. List Groups
          8. A.2.8.8. Get the List of Child Authorities for a Group
          9. A.2.8.9. Delete a Root Group
          10. A.2.8.10. List all Root Groups
          11. A.2.8.11. Add a Root Group
      3. A.3. IMAP
        1. A.3.1.
          1. A.3.1.1. IMAP Server Status
            1. A.3.1.1.1. IMAP Workflow Handler
        2. A.3.2. Metadata
          1. A.3.2.1. Node Metadata Retrieval Service
          2. A.3.2.2. Node Metadata Storage Service
        3. A.3.3. Person
          1. A.3.3.1. Update User Password
          2. A.3.3.2. Get People
          3. A.3.3.3. Add Person
          4. A.3.3.4. Delete Person
          5. A.3.3.5. Get Person
          6. A.3.3.6. Update Person
          7. A.3.3.7. Sites
        4. A.3.4. Preference
          1. A.3.4.1. Delete Preferences
          2. A.3.4.2. Get Preferences
          3. A.3.4.3. Set Preferences
        5. A.3.5. Search
          1. A.3.5.1. Alfresco Keyword Search (OpenSearch Enabled)
          2. A.3.5.2. Keyword Search Description
          3. A.3.5.3. Alfresco Person Search (OpenSearch Enabled)
          4. A.3.5.4. Person Search Description
          5. A.3.5.5. Search Engines
          6. A.3.5.6. Proxied (OpenSearch) Search
        6. A.3.6. Tagging
          1. A.3.6.1. Get Node Tags
          2. A.3.6.2. Add Tag
          3. A.3.6.3. List All Tags
          4. A.3.6.4. Get Nodes for Tag
          5. A.3.6.5. Tagscope Tags
        7. A.3.7. Thumbnail
          1. A.3.7.1. Delete Thumbnail
          2. A.3.7.2. Get Thumbnail
          3. A.3.7.3. Update Thumbnail
          4. A.3.7.4. Get Thumbnail Definitions
          5. A.3.7.5. Get Thumbnails
          6. A.3.7.6. Create New Thumbnail
        8. A.3.8. Upload
          1. A.3.8.1. File Upload
        9. A.3.9. Version
          1. A.3.9.1. Node Version Info
    2. B. Surf Platform API Reference
      1. B.1. ROOT-SCOPED OBJECTS
        1. B.1.1. context
        2. B.1.2. user
        3. B.1.3. content
        4. B.1.4. page
        5. B.1.5. template
        6. B.1.6. config
        7. B.1.7. theme
        8. B.1.8. instance
        9. B.1.9. sitedata
        10. B.1.10. remote
        11. B.1.11. locale
        12. B.1.12. htmlid
        13. B.1.13. url
        14. B.1.14. head
        15. B.1.15. app
        16. B.1.16. msg
      2. B.2. RETURN TYPES
        1. B.2.1. Model Objects
        2. B.2.2. Connectors
        3. B.2.3. Response
        4. B.2.4. ResponseStatus
      3. B.3. RENDERING OBJECTS
        1. B.3.1. Templates
        2. B.3.2. Components
    3. C. Repository FreeMarker Template API
      1. C.1. TEMPLATE FILES
      2. C.2. TEMPLATE MODELS
        1. C.2.1. Default Model
        2. C.2.2. TemplateNode Model API
        3. C.2.3. Advanced TemplateNode API
        4. C.2.4. Version History API
        5. C.2.5. Classification API
        6. C.2.6. XML Content Processing API
        7. C.2.7. Workflow API
          1. C.2.7.1. WorkflowTaskItem API
        8. C.2.8. People API
        9. C.2.9. Default Model Methods
        10. C.2.10. The Current Date
      3. C.3. JSP PAGE
    4. D. Repository JavaScript API Reference
      1. D.1. OBJECT-ORIENTED LEVEL APIs
      2. D.2. SCRIPT FILES
        1. D.2.1. Importing Scripts
      3. D.3. THE SCRIPTING API
        1. D.3.1. Root-Scoped Objects
        2. D.3.2. The ScriptNode API
        3. D.3.3. Modifying and Creating the API
        4. D.3.4. The ScriptContent API
        5. D.3.5. The Permission and Security API
        6. D.3.6. The Check In/Check Out API
        7. D.3.7. The Versions API
        8. D.3.8. The Transformation API
        9. D.3.9. The Search API
        10. D.3.10. The People API
        11. D.3.11. The Actions API
          1. D.3.11.1. The ScriptAction API
        12. D.3.12. The Logging API
        13. D.3.13. The Session API
        14. D.3.14. The Classification API
          1. D.3.14.1. The CategoryNode Object API
        15. D.3.15. WCM Web Projects
          1. D.3.15.1. The WebProject Object API
          2. D.3.15.2. The Sandbox Object API
          3. D.3.15.3. The WCM Asset Object API
        16. D.3.16. Utility Methods
      4. D.4. THE SERVICES API
        1. D.4.1. The Site Service
          1. D.4.1.1. The Site Service Object
          2. D.4.1.2. The Site Object
        2. D.4.2. The Activities Service
          1. D.4.2.1. The FeedControl Object
        3. D.4.3. The Tagging Service
          1. D.4.3.1. The TaggingService Object
          2. D.4.3.2. Extensions to the Existing ScriptNode
          3. D.4.3.3. Extensions to the Existing Search API
          4. D.4.3.4. The TagScope Object
          5. D.4.3.5. The TagDetails Object
        4. D.4.4. Thumbnail Services
          1. D.4.4.1. The Thumbnail Service
          2. D.4.4.2. Extensions to the Existing ScriptNode
          3. D.4.4.3. The Thumbnail Object
        5. D.4.5. The Authority Service
          1. D.4.5.1. The group Object
          2. D.4.5.2. The user Object
        6. D.4.6. Workflow Services
          1. D.4.6.1. The Workflow Manager
          2. D.4.6.2. JscriptWorkflowDefinition
          3. D.4.6.3. JscriptWorkflowInstance
          4. D.4.6.4. JscriptWorkflowNode
          5. D.4.6.5. JscriptWorkflowPath
          6. D.4.6.6. JscriptWorkflowTask
          7. D.4.6.7. JscriptWorkflowTransition
    5. E. Surf Quick Reference
      1. E.1. OBJECT DEFINITIONS
      2. E.2. COMMON OBJECT PROPERTIES
        1. E.2.1. Chrome
          1. E.2.1.1. Locations
          2. E.2.1.2. Definition
          3. E.2.1.3. Properties
          4. E.2.1.4. Example: Chrome for a Region
          5. E.2.1.5. Example: Chrome for a Component Binding
        2. E.2.2. Component Type
          1. E.2.2.1. Locations
          2. E.2.2.2. Definition
          3. E.2.2.3. Properties
          4. E.2.2.4. Example: Web Script Component Type
          5. E.2.2.5. Example: Sample Custom Type
        3. E.2.3. Component
          1. E.2.3.1. Locations
          2. E.2.3.2. Definition
          3. E.2.3.3. Properties
          4. E.2.3.4. Optional Properties
          5. E.2.3.5. Example: Page Scope Binding
          6. E.2.3.6. Example: Template Scope Binding
          7. E.2.3.7. Example: Global Scope Binding
          8. E.2.3.8. Example: Custom Page Scope Binding
        4. E.2.4. Configuration
          1. E.2.4.1. Locations
          2. E.2.4.2. Definition
          3. E.2.4.3. Properties
          4. E.2.4.4. Example: Site Configuration
        5. E.2.5. Content Association
          1. E.2.5.1. Locations
          2. E.2.5.2. Definition
          3. E.2.5.3. Properties
          4. E.2.5.4. Optional Properties
          5. E.2.5.5. Example: Configuring a Display Page for Alfresco Content
        6. E.2.6. Page Association
          1. E.2.6.1. Locations
          2. E.2.6.2. Definition
          3. E.2.6.3. Properties
          4. E.2.6.4. Optional Properties
          5. E.2.6.5. Example: Child Page Association
        7. E.2.7. Page Type
          1. E.2.7.1. Locations
          2. E.2.7.2. Definition
          3. E.2.7.3. Properties
          4. E.2.7.4. Example: Login Page Type with Custom Property
        8. E.2.8. Page
          1. E.2.8.1. Locations
          2. E.2.8.2. Definition
          3. E.2.8.3. Properties
          4. E.2.8.4. Optional Properties
          5. E.2.8.5. Example: Page with Authentication
        9. E.2.9. Template Instance
          1. E.2.9.1. Locations
          2. E.2.9.2. Definition
          3. E.2.9.3. Properties
          4. E.2.9.4. Example: Landing Template with Configuration
        10. E.2.10. Template Type
          1. E.2.10.1. Locations
          2. E.2.10.2. Definition
          3. E.2.10.3. Properties
          4. E.2.10.4. Example: FreeMarker Template Processor
        11. E.2.11. Theme
          1. E.2.11.1. Locations
          2. E.2.11.2. Definition
          3. E.2.11.3. Properties
          4. E.2.11.4. Example