Intro to Integrating Applications
with Stellent
or: 50 Ways to Integrate with
the Content Server
Brian “Bex” Huff
Chief Software Architect, Bezzotech Inc.
February , 2007
 Mainly covering the Stellent Content Server (SCS)
• Some IBPM
 Basics of integrations
• Front end: your application to the SCS
• Back end: SCS to your application
 50 ways to integrate
• And 20 of them are SOAP!
• Fairly technical overview
 Recommendations
• Which of the 50 is right for you?
Integration Basics
 SCS is a service-oriented architecture
• Easy to consume services from remote applications (front-end)
• Easy to customize services (back-end)
 Front End Integrations
• Execute services, access content from other applications
• J2EE Portal, ASP.NET, Desktop application
• Run services, receive data response, draw an interface
• Example: run a search, perform a check-in, access documents from CRM
 Back End Integrations
• Add services, modify existing services
• Access remote data or applications
• Example: custom check-in logic, RSS feeds, LDAP
Front-End Integrations
J2EE: Content Integration Suite (CIS)
 Standards compliant J2EE application for Stellent UCM
• Add-on product for Stellent
 Compatible with, and supported on, major app servers
• IBM WebSphere, BEA WebLogic, SunOne, Plumtree, Tomcat
 Complete coverage of Stellent API
• Common services available as objects-oriented API
• Can execute any UCM services
• Can also interface with IBPM
J2EE: Content Integration Suite (CIS)
 CIS is an application that connects to the content server
CIS server connects to Stellent
CIS client is used in your app to connect to CIS server
CIS server caches results for faster performance in peak hours
Supports several kinds of J2EE connectors
 Content Portal Suite (CPS) for J2EE Portal Server
• Uses CIS to connect to Stellent
• Contains several sample portlets for interacting with Stellent
• Search, Library, Contribution, Workflow, Admin, Image Server Search
Federated Search (Combined search over I/BPM and UCM)
CIS Integration Options
1. J2EE Application Server
CIS client uses EJBs to communicate with CIS server
2. J2EE Portal Server
Use CPS portlets to make calls to CIS server
May also use BEA’s Service Provider Interface (SPI) with CPS
3. Tomcat, other basic Servlet containers
CIS client uses RMI to communicate with CIS server
4. JSP Taglibraries
Quick access to CIS through JSP tags
CIS Integration Options – cont.
5. Spring Framework
More coherent, flexible, maintainable than straight JSPs
6. J2EE Connector Architecture (JCA) interface for CIS
For J2EE purists, disabled by default for performance reasons
7. Java Messaging Service (JMS) interface for CIS
Get higher performance with asynchronous messages
8. Stand-alone Java application
For Plain Old Java Objects (POJOs) without a J2EE framework
Initialize CIS server directly for a direct connection to Stellent
Simple Object Access Protocol (SOAP)
 An open XML based protocol for application integration
• Typically over the web (HTTP), or in messages
• Fundamental part of Microsoft’s .NET framework
• Toolkits exist for almost every language and platform
 Available as a free add-on (extra) for Stellent
• Download the SOAP component if version is before 7.5
• SOAP support built into 7.5, but you still want the WsdlGenerator
 Web Services Description Language (WSDL)
Helps SOAP toolkits parse XML into easy to use objects
One object to execute the service
Binds the XML request and response into data objects
Much easier to use than pure XML
SOAP Search Request
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=
<idc:service xmlns:idc=""
<idc:field name="QueryText">
dDocTitle &lt;substring&gt; `test`</idc:field>
<idc:field name="ResultCount">20</idc:field>
<idc:field name="SortOrder">desc</idc:field>
<idc:field name="SortField">dInDate</idc:field>
<idc:field name="SortSpec"></idc:field>
<idc:field name="StartRow"></idc:field>
<idc:field name="PageNumber"></idc:field>
SOAP Search Response
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=
<idc:service IdcService="GET_SEARCH_RESULTS">
<idc:document StartRow="1" EndRow="20" PageNumber="1"
NumPages="1" TotalRows="8" TotalDocsProcessed="377"
<idc:field name="SortField">dInDate</idc:field>
<idc:field name="EnterpriseSearchMaxRows">4</idc:field>
<idc:field name="ftx"/>
<idc:field name="ResultCount">20</idc:field>
<idc:field name="TranslatedQueryText">dDocTitle <substring>
<idc:field name="QueryText">dDocTitle+%3csubstring%3e+%60test%60
<idc:field name="SortOrder">Desc</idc:field>
<idc:field name="AdvSearch">True</idc:field>
<idc:resultset name="NavigationPages">
<idc:row PageNumber="1" StartRow="1" EndRow="8">
<idc:field name="HeaderPageNumber">1</idc:field>
<idc:field name="PageReference">1</idc:field>
SOAP Search Response – cont.
<idc:resultset name="SearchResults">
<idc:row dDocType="ADACCT" dRevisionID="1" dWebExtension="txt"
sCollectionID="" dOriginalName="test.txt" dDocName="1234"
dFormat="text/plain" dPublishType="" dID="554"
dDocAuthor="sysadmin" dOutDate="" dGif="adacct.gif"
dExtension="txt" dInDate="8/8/05 1:49 PM"
AlternateFormat="" dDocTitle="test document" dRevLabel="1"
dSecurityGroup="Public" dRendition2="" dRendition1="" >
<idc:field name="VDKSUMMARY">This is a test</idc:field>
<idc:field name="SCORE">1.0000</idc:field>
<idc:field name="AlternateFileSize">0</idc:field>
<idc:field name="VaultFileSize">14</idc:field>
<idc:field name="WEB-CGI-ROOT">/stellent/</idc:field>
<idc:field name="WebFileSize">14</idc:field>
<idc:field name="xComments"/>
SOAP Benefits
 All Stellent services available through SOAP
• Can create XML request manually, or use WSDL
• SCS 7.5 – pass IsSoap=1 into any URL or request to get back SOAP
 All the benefits of XML and HTTP
• Simple, extensible, used almost everywhere
• Most developers comfortable with the technology
 All the drawbacks of XML and HTTP
• Stateless requests – both good and bad
• Standard security problems with HTTP
• Verbosity presents performance challenges
• Don’t execute services until you need to
SOAP Integration Options
 Third-party toolkits exist for most programming languages
9. Java (Apache Axis)
10. C#
11. PHP
12. Python
13. Perl
14. C++ (Apache Axis)
15. Visual Basic (MS Soap Toolkit, Pocketsoap)
16. VBScript (XmlHttpRequest ActiveX object)
17. JavaScript (using AJAX toolkits)
18. Command line apps (curl, wget, with IsSoap=1 in URL)
SOAP Integration Options – cont.
 Even more third party toolkits:
19. VB.NET
21. C (csoap)
22. Ruby (built-in)
23. Flash (Flash MX Remote Scripting)
24. Appletalk
25. Tcl/Tk
26. Smalltalk
27. Ada
28. COBOL (partial)
Command-Line Java Applications
 Included with Stellent Content Server
• Not for advanced integrations, but can get the job done
29.IdcCommand single service request
• Make IdcCommand file to run an archive, check in a file
• Create a shell script to run the command
• Schedule that script with cron, or Windows Scheduled Tasks
30.IdcCommand batch files
• Multiple service requests: configure metadata, users, check in content
• Resubmit a large number of items for conversion
• Check in large numbers of items
• Can generate the batchloader file with a script
ActiveX Connectors
 Older than .NET, but still useful
• Legacy VB systems, VBScript in Office Applications
32.IdcCommandUX on an ASP
• SOAP-like interface, but with more features
• Used in Site Studio
33.IdcCommandUX in a VB/COM Application
• For admin tools only
34.IdcClient in a VB/COM Application
• For desktop applications: Publisher, Site Studio use it
• Can pop open a browser window for content check-in
Very Lightweight Integrations
 For situations where you only need to do something small and
• SOAP and CIS are sometimes overkill
• Perhaps your developers hate XML?
• Perhaps your integrators don’t have time to write an application?
35.Output content as RSS (RssFeeds component)
• Output search results, static lists, log files
36.Import RSS content (RssFeeds component)
• Download a feed from another server, display in SCS
Very Lightweight Integrations – cont.
Interface with Windows Explorer, Microsoft Office
Very easy to use interface, but limited functionality
38.Place IsJava=1 in the URL
Returns a HDA data dump for debugging, or scripts
39.Display just SCS forms without navigation links
Embed form in an IFRAME, or pop up a separate browser window
Pass coreContentOnly=1 in the URL
May additionally pass ClientControlled, but is trickier
Publisher and Site Studio sometimes use this technique
Back-End Integrations
Security Integrations
 Security model just as customizable as everything else in SCS
40.Custom User Providers
• Connect to LDAP/Active Directory
• Do complex mapping from LDAP groups to SCS roles and accounts
• Mostly Java code, plus some configuration
41.Custom Web Security Plug-Ins
• For custom Single-Sign-On integrations at the web server
• Examples: SSL certificates, Kerberos tokens, Nettegrity Site Minder
• Mostly C++ code, fewer resources available at this level
Custom Java Components
 Need to know Java, and Stellent Component Architecture
• Anything you can do in Java, you can do here
42.Add new services
• Run reports, process content through custom life cycles, display data
43.Customize existing services
• Generate a list of ‘related items’ when you get content info about an item
44.Execute code when specific Filter Events occur
When the server starts-up
When an item enters workflow
When an item is checked-in or deleted
You can alter how the service is processed, or run independent code
Remote Repository Integrations
 Need to know Java, and Stellent Component Architecture
45.Custom Database Providers
• Connect to multiple databases
46.File Store Providers (SCS 8.0)
• Alter how and where content item files are stored
47.Records Management Agents
• Manage remote data as a record, even if it isn’t in the SCS repository!
48.Use Publisher to output content, and XML
• Import the data into another search engine
Site Studio Integrations
 For integrating Site Studio web sites
49.Use SSPU to output pages to remote web farm
• Export Site Studio pages as static HTML for maximum performance
50.Site Studio Extensible Elements
A custom contribution element, accessible from Contributor application
The ‘element’ is a URL to a web form you created
Users fill out values in your custom web form
Upon submit, your web form returns text to the Contributor
• Uses a special JavaScript method
• Useful for allowing users to generate raw HTML in a controlled manner
• Parameters for Flash plug ins, Applets, JavaScript, or any arbitrary chunk of text
What Should You Use?
 Are you integrating a Java front-end to the SCS?
• CIS/CPS/Spring is probably what you want
• SOAP with WSDLs a good choice for lighter integrations
 Are you integrating a non-Java front end?
• SOAP is the best choice
• WSDLs if you choose, not always the best idea
• IdcCommandUX has extra features, useful on an ASP
• Command-line apps discouraged, but sometimes useful
 Are you writing a desktop application?
• SOAP is a good choice for behind-the-scenes integration
• IdcClient if you wish to have a browser-like interface for check-ins
• WebDAV is too rigid for extensive use
What Should You Use?
 Are you integrating Stellent with a remote repository?
• Need Java component: custom Services, custom security plug-ins
• Remote databases, remote user repository, email server
• Connect with standard Java libraries from your code
• If you need Records Management, use Agents
 Do you want to execute code when specific events occur?
• Example: on startup, every five minutes, when content is checked-in or
• Need Java component: Filter or chained Service Handler
• Hundreds of filter events and services available for customization
And finally –
 My Company:
 My Blog:
 My Self:
 Please complete the session survey before you leave today
 Visit the Stellent Solutions Center & Partner Expo to learn more!
Access this presentation* at:
*Log-in and password required to access presentations (watch for an email containing your codes)

Crescendo 2006 Presentation Format