[Deep Dive] Using Content Intelligence for Content Suite Customizations

Introduction – Why?

This blog post discusses the use of the Content Intelligence(CI) suite of products as an alternative to Oscript based customizations. Much of this blog is devoted to some basic mechanics of how this is possible, but the first question is probably Why?

Despite the great flexibility and configurability of Content Suite, many, if not most, customers find some aspects of the system that they want to change. This ranges from minor cosmetic changes to building full blown applications on top of the existing Content Suite functionality. In an ideal world, each customer would be able to tailor Content Suite to match the specific needs of their business and users. Prior to the existence of the Content Intelligence product, there were already a couple of business tools such as WebForms and Workflows that allowed some business customization. Additionally, the optional Appearances module allowed some tailoring of the user interface. However,  outside the capability of these products the main option historically for customers to extend Content Suite was to create OScript modules to override the core functionality. As most of the existing Content Suite functionality is written with OScript modules, it follows that it is possible to create vast changes or improvements to the out-of-box functionality with this approach. The problem is that the more custom modules on a system, the more trouble when it comes time to upgrade to a new version of Content Suite. There are various reasons for this, and I’ve chosen not to detail these problems in depth here (perhaps the subject of a different blog). A consultation such as the one our company provides (Customizations Audit) can be used to review your specific situation,  but typically, customers who have been through at least one upgrade are fairly aware of issues related to any custom modules they have.

Besides the fact that many customers are becoming resistant to OScript customizations another driver towards non OScript module alternatives is the increased deployment of ECM or xECM as a cloud based offering. These products have explicitly prohibited Oscript customizations while allowing Content Intelligence  modules to be included in the software build. For customers who need some customization of Content Suite or who need to port customizations from their on-premise system to the cloud-based system, Content Intelligence provides an attractive way to meet their needs within the parameters of the ECM Cloud offering.

What about CWS or the REST API?

One of the issues with traditional OScript customizations is that historically there has been a lack of an enforced, well documented and supported API for developers writing code within the Content Suite environment. That being said, there is an API designed to aid developers of external software products in leveraging CS functionality. The original version of this was called LAPI and this was later obsoleted by "Content Web Services" (CWS).  While CWS is still supported, over the last six years or so, many common Content Suite functions have had REST based URL commands created to allow a consistent, supported way for custom client code to invoke Content Suite functionality. This creates a very robust way for customers to leverage existing Content Server URL based commands while creating their own client pages. Essentially it is possible to create an entirely new look and feel for Content Suite by executing REST commands to facilitate any necessary back-end functionality in Content Suite. This approach provides a well-defined, supported interface for developers and therefore solves some of the issues that occur with traditional OScript customizations; however,  this approach still has some limitations. To list a few of the major ones:

  • The developer is limited to whatever objects have been developed at any given time on a specific version of Content Suite.
  • Besides being limited by the available REST interface objects, it is also not possible to create any unique back end functionality required for an application.  It is possible to perform a set of related tasks by executing them in a specific order using a set of linked client requests but this can require many client requests to perform what ideally would be one function on the back end of CS.
  • The REST API by itself does not support specialized behaviors such as scheduled jobs, email notifications, stored output of generated report data, etc.
  • For customers who only want minor changes to the existing Content Suite views, this approach by itself does not really provide any obvious way to incrementally enhance functionality or UI pieces on existing Content Suite pages. (Note, this is mostly a problem with the classic UI whereas the new SmartView/SmartUI does allow extension and modification of the standard “out-of-the-box” client interface within the currently supported parameters of this new UI (see next section). 

What about the new “SmartView” (SmartUI) User Interface?

For customers who have Content Suite 16 and later versions, there is a new client interface available for Content Suite, called “Smart View” (sometimes referred to as SmartUI). This UI completely changes the Content Suite interface and is designed to be extendable; however, this flexibility applies to the client code only and is still limited by the available REST API library. This UI is still maturing but does provide a common look and feel based on an established set of JavaScript libraries that Content Suite developers can build on. This new UI provides great potential for developers to create new, more robust applications but without CI, it is still limited and is also fairly complex to master for many customers.  As described below, CI actually provides some specific hooks into Smart View to allow easy access to CI functionality and to integrate SmartView with CI based applications. 

What is Content Intelligence and What are CSApps?

Before discussing how Content Intelligence can be used, it is useful to be clear on what Content Intelligence is and what components make up this product.
Content intelligence is actually a marketing term that describes a collection of modules that were formally only sold individually. Depending on your vintage of Content Suite and what commercial arrangement was agreed, you may own one or one (or all) of these modules. The following chart provides guidance on all of the modules that are (or were) included as part of Content Intelligence.

Module Description Commercial Info
WebReports

This module provides a tag-based interface/API that allows a developer to access Content Suite data through the normal security model and to deliver data to any client product in any text-based format the developer requires. For example, HTML, JavaScript, pure text, XML, Word ML, etc. Each WebReport makes up a development object that supports a multitude of different data sources including LiveReports and Search Engine queries.  In addition to surfacing data through the Content Suite interface, WebReports supports a number of “action” commands that allow modification of Content Suite objects (and by extension the data). This allows the development of unique Content Suite scripts to perform customized functions.  It also essentially allows the development of custom request handlers without any Oscript coding. The WebReports tag engine supports 100s of tags and sub-tags essentially allowing near unlimited functionality via a supported and robust API. WebReports objects are added through the Content Suite interface and are thus fully version controlled and auditable for maximum security.

This module is built into Content Suite core, (i.e. not a separately installable module) but it requires a license to activate and must still be purchased as an add-on. Many customers already have this module as it is sometimes bundled with new Content Suite sales. 

ActiveView

This module utilizes the WebReports engine to create similar development objects but provides a number of interface points into the Content Suite UI.  Besides allowing any containers to be “overridden” for custom page layouts there are several specialized overrides that allow control of most Content Suite menus to allow tailoring to customer needs. Each ActiveView override, allows conditional logic (multiple rules) to define whether it is active for any given event. In this way various aspects of the interface can be unique designed for different requirements such as user group membership and any meta data associated with different system areas.  This technology has been leveraged to implement the new “Perspectives” feature that is used by the Smart UI in Content Suite 16 and above.

This module was a separately installable module until Content Suite 16.0. As of Content Suite 16.0 ActiveView is included as a core module and is also included in the price of Content Suite.

WebReportsWorkflow eXtensions - (WWX)

This module allows the WebReports engine to be integrated with Content Suite workflows.

This module is sold separately and is also a separately installed (non-core) module.

It was formally known as WebReports eXtensions for Workflow (WXW).

Content Suite Applications

(CSApps)

The intent of this product is to allow applications built with WebReports, ActiveView, WWX, LiveReports, Workflow and WebForms to be packaged into a discrete installable, upgradeable and removable “app”.  Besides managing the import and export of Content Suite based objects, this functionality is also designed to allow support files (JS files, images, etc.) and language files to be packaged up and managed along with each app.  This product also includes features to manage module dependencies, INI settings, ActiveView Override configurations, custom sub-tags and other application related functions.  More details on CSApps will be provided in a future blog post.

This module was never sold commercially and was usually provided for free to customers using applications built with WebReports and ActiveView).  This module existed in various forms prior to Content Suite 10.5 (e.g. WebApps and RKTApps) and in some cases customers were given their own specific versions, e.g. RBTSapps. As of CS 10.5 this module was renamed CSApps and included with all Content Suite instances under csapps.applicationmanagement (Content Server Applications Administration).

 

Technically, CSApps don't actually have to include any WebReport based objects and could be built entirely with objects such as WebForms, WebForm Templates, Workflows, folders and documents; however, using Content Intelligence provides a vast array of useful functionality. 

As described in the table above, CSApps functionality provides a good way to manage a related group of objects in a logical way to allow a customer all of the usual features of an "app" or module plus several unique features related to specific aspects of Content Intelligence. For example, you can include custom sub-tags in a CSApp and it is also possible to specify ActiveView override settings that should be enabled on application installation. More detailed information on CSApps will be the subject of a separate blog. 

So How Does Content Intelligence help?

Using Content Intelligence makes it possible to build various useful Content Server extensions or enhancements  ranging from packages of reports and analytics tools (one great example is the three CSApps used for Records Management reports), to various modifications of the Content Suite classic interface, to customized Smart View widgets, to complex applications.  Some OpenText partners have built full fledged products using Content Intelligence.  For example, Kinematik, ProcessNet, and Formark, to name a few.  Using Content Intelligence to address this type of requirement allows you to tailor Content Suite to your specific business requirements while dramatically lessening the potential for  compatibility issues during software upgrades. This latter benefit is due to the strict API that is provided by the WebReports engine. 

How Do I Build CSApps with Content Intelligence?

Perhaps the best way to illustrate how Content Intelligence can be used to build complex applications is to describe some typical aspects of OScript customization along with a description of the Content Intelligence approach. 


Feature

CI Approach

Installable, upgradeable, applications.

The CSApps module (built into Content Suite since Content Suite 10.5) allows any application built with Content Suite objects (WebReports, WebForms, LiveReports, Documents, folders etc.) to be collected into a single discrete application. This also allows any support files (images, JS libraries, etc.) to be captured and saved as part of the application. This application management feature manages changes and allows you to deliver an installable package for any Content Suite system.

Unique, Custom Behaviours and Functionality

The WebReports language includes a series of “sub-tags” that allow Content Suite functions to be executed. Stringing these sub-tags together allows nearly endless permutations of custom behavior to suit virtually any requirement. Essentially this allows custom scripts/requests to be created.  (See custom request handlers below.)

Scheduled Tasks

 Any WebReport can be configured to execute on a schedule. 

Triggered Responses

The WebReports module allows you to define custom triggers based on Content Suite events. These triggers cause one or more WebReports to execute in response to the defined event.

Custom Notifications

Using either scheduled WebReports or triggered WebReports it is possible to define a custom notification that is sent based on defined conditions. Scheduled WebReports can also be setup to query a data table and only execute if data is returned.

Custom Request Handlers (REST requests)

  • Data retrieval (GET)
  • System actions (PUT, POST, DELETE)

Any WebReport object can be invoked using either a Content Suite specific URL or a RESTful URL.  As a GET request, a WebReport object allows virtually any data from Content Suite to be surfaced in whatever text-based format is required including HTML, JS, JSON, XML etc. WebReports also support a number of actions to be performed within Content Suite including creation, updates, deletes and data submission for WebForms. It is also possible to initiate a Workflow with data and attachments pre-populated. With the WWX module, additional WebReports actions can also be included in the workflow.

General changes to legacy container pages

 The ActiveView module allows you to setup conditions where any container or hierarchy of containers in classic Content Suite can be overridden to return a custom view of that container. This ranges from a complete re-skinning of the container to relatively minor changes like adding a new button to the multi-select options.  ActiveView ultimately uses the WebReports engine to do this so any and all WebReports tags and sub-tags can be used.   ActiveView also allows any such override to be conditional based on virtually any scenario in the system. Most commonly this is used to make changes dependent on group membership.  Any area of the system also allows multiple different views to be defined with unique conditions, allowing the first matching condition to determine which view is used.

Menus/Options/Buttons/Command enhancements. 

 The ActiveView module allows you to specify alternative sets of menu and function options for any defined area in the Enterprise hierarchy. This uses an XML format to define option additions, changes and deletions. As above (and with all ActiveView overrides), this functionality can be made conditional allowing a variety of different layers of option configurations. (Note this may ultimately be possible with SmartView in the future but is not currently supported).

Client Applications with server data storage

WebReports and ActiveView can also be combined with the WebForms module to allow completely bespoke applications to be built within Content Server.  Thanks to the deep integration with Content Server these applications can interact seamlessly with existing Content Suite functionality.  WebReports is particularly useful for returning data stored through WebForms and Form templates in any given format (including JSON for AJAX responses) but it also provides the ability to enhance form customviews (“WR Powerview”) or to allow a completely unique input screen.   

Custom Reports

 Naturally WebReports also supports custom reporting. Besides displaying data, such reports can include links and functions to allow complete interactivity with any Content Suite objects in the report. 

 Document Generation

 As WebReports allows you to save its output as a document, you can build a WebReport designed to generate content in a particular format  for storage in a saved document.  Using text based formats such as WordML you can even create a word document.  Any WebReport output can also be passed through converters such as Adlib Express to create other formats such as PDF that may not be text based.

Workflow Application

WebReports and its companion module WebReports Workflow eXtensions provide significant additional capability to be used with Content Suite Workflows.  

SmartView Widgets

SmartView supports a WebReports Widget. This widget can be selected and setup like any of the standard, built-in widgets. The difference is that this widget allows you to specify any appropriately structured WebReport you have created, essentially allowing you to surface any type of data or functionally that you require in the SmartView.

 

Development Paradigm

The Content Intelligence paradigm is based on a template type of approach, similar to some modern day template paradigms in frameworks like Django. It is also similar in some respects to the concept of a "WebLingo" in OScript; however, the WebReport object can also be used to perform backend functionality as would typically be found in an OScript Request handler.  A WebReport does not normally support direct access to any functionality in the Content Suite, OScript code base but instead of this, a huge set of tags and sub-tags provide access to micro functions and pieces of data within CS. This library is not all encompassing but it has been developed over a period of about 16 years so it is pretty comprehensive. Additionally you can create and support your own sub-tags very simply and easily and this will also be the subject of a future blog.  While the basic approach is a template one, with static text content intermingled with data returned by tags, the tag framework also supports several looping and conditional statements to support some macro control of the content. Additionally, it is possible to include blocks of script (using the OScript language) where this seems more appropriate than using the tag based scripting.  This is referred to as "Server Side Scripting" and will be the topic of another blog. 

Summary

In summary, given all of the functionality available through Content Inteligence it is possible to create significant customization of Content Suite,  essentially comparable to OScript customization but with a much tighter API than is typically the case with OScript customization.  Through the built in "Application Management" section of CS you can also package applications built using this technology into discrete managed applications within Content Server. Many of these applications can also be installed or removed without the need for Content Suite restarts.