Paul Swider’s ‘Developing and Extending Enterprise Content Management Features’ at STP Santiago

Paul Swider presenting at STP SantiagoWith Ricardo translating for the Spanish-speaking audience, Paul Swider delivered his STP Santiago session looking at ECM from a developer's perspective. Explaining the objectives for the session at the outset, Paul said that attendees would gain an understanding of forms of ECM programming, as well as best practices regarding extending ECM features. Paul also said that he would be focusing on the document management namespace and the taxonomy namespace during his session.

"Everything you can do in lists today can be useful in document management," Paul said, and that "by using Visual Studio, we get a lot of control over those lists." Paul went on to say that "the workflow project template in Visual Studio 2011 is greatly enhanced compared to the previous version … essentially, it's a workflow designer." Addressing the Policy object model, Paul said that since information management policies are often desired in document management, bar codes, labels, audits, and more are available in SharePoint now, and "the Policy object model allows us to extend that." Addressing the Search object model, Paul said that it "makes it very easy for people to navigate and find the content they're looking for." As well, "SPFile allows us to stream files from a document library." "All of these are features that exist today," said Paul, "and allow us to extend the content management features."

Paul said that the rest of the session would focus on the two namespaces, which "both live in the SharePoint Root, can be referenced by any Visual Studio project, and allow code (including workflows, Web Parts, and list event handlers) to run on the server."

Looking at a code snippet, Paul explained the necessity of setting a reference to assemblies and including a "using" statement at the start of your code in order to reference the namespace. The SharePoint Root folder and the files contained therein are available on all SharePoint front-ends on your farm.
Paul's first demo involved the Document ID Service, a new site collection feature that, once enabled, automatically adds a unique ID to documents and retrieves documents regardless of their location. Paul began the demo in the Document Center, enabling the site collection feature first. About the Document ID Service, Paul said, "turn on this feature and it will be available regardless of the site you're using." "In the Document ID Settings, you can provide a prefix to be generated for all of the documents in this site collection." You can also set the search scope for the document ID lookup. Paul showed a couple pf previously uploaded documents, with document IDs assigned, and pointed out that the individual URL is persistent URL for each document.

The bulk of this demo involved customizing a document ID provider, and Paul will be making his code available on SharingthePoint.org soon. Paul explained that it has to be a site feature since document IDs are managed at site collection level. Walking through his code, Paul noted the added reference to the assembly, and the "using" statement at the top of the code file. A custom class called "custom provider" specifies what to inherit. The first function is to generate a unique ID, based on business logic. There is also code to implement a custom search. Next, Paul addressed how to use the document management namespace to create a document set, then adding a list of the content types that can be a part of the document set (e.g., rich media files). The next block of code adds a file to the document set, allowing for programatically streaming files into the document set. The final section creates a document library, then adds the newly created document set to that library.

Paul then provided a demo of his Sharepoint.taxonomy namespace code, which "allows us to get at the features included in the managed metadata service, including terms from the term store, as well as global content types. Paul enables content type syndication at the site collection level, which can then be shared with other site collections across the farm. Paul noted as a best practice to "create a blank site collection, and use that to create custom content types, allowing other sites to pull shared content types from that site collection." His demo involved a program for content type syndication via accessing the Managed Metadata Service, and he began in Central Administration. "The Managed Metadata Service synchronizes content types to site collections that subscribe to the hub," he said, and that the "Managed Metadata Service essentially synchronizes terms sets with site collections, and synchronizes and publishes the global content types." From the document library Settings, Paul created a Santiago as the sun prepares to setManaged Metadata column to connect to the term set, noting that tags can be used to tag content and document libraries, and that by editing the properties of a document, you can add a new term to the term store.

Paul then provided a brief walkthrough of the code that illustrates this functionality, and built and deployed the project, engaging in a Q&A while it ran. Once complete, Paul refreshed the term store page, pointing out the new term that had been added. Then, refreshing the document site, refreshing revealed that the new library with the document set included had been added, and the requested file had successfully streamed into the document set.

Muchas gracias once again to all of the attendees for coming out to STP Santiago, and for sharing your beautiful city with us!

Sharing the Point South America is made possible through the generous support of Fpweb.net and AvePoint.

Read John Anderson's complete coverage of the Sharing the Point South America events: