# HowTo Components for Content Server 7.1, 7.5 and 10.1.3.x (10gR3)

The HowTo Components tutorial contains several advanced Java components for the Content Server, as well as documentation of common Stellent Java classes. The intention of this document is to show examples of how to hook into the internal Stellent Java API, and call custom Java code. Stellent Java Component Architecture supports five primary methods for adding custom Java code: Filters, Class Aliases, custom Service Handlers, custom Service Classes, and custom IdocScript Extensions.

Filters are used to execute custom code at specific moments that occur deep down in the core of the product, such as when new content is checked in, when security credentials are determined, or when the server first starts up. They are generally the quickest, easiest, and least intrusive way to plug in custom code. However, a filter might not exist where you need one.

Service Classes are used to execute custom Java code in the exact same way that IdcServices (such as 'CHECKIN_NEW') call Java code. A new Service Class can easilly be configured to call customized code, however they are limited in what standard code they can call.

Service Handlers are also used to execute custom code in the context of a custom Service, but with greater flexibility. Java code inside a custom Service Handler can be called from either a custom Service, or an existing Service. Also, custom Services that leverage Service Handlers can be configured to execute standard Java code as well. These are slightly harder to configure than custom Service Classes.

IdocScript Extensions can be used to add new IdocScript functions. These functions will be available on any template page or dynamic server page (HCSP/T/F). These are useful for anybody who uses IdocScript extensively on rendered pages or workflows, and would like to extend the functionality.

Class Aliasing is used when you wish to extend the functionality of an entire content server Java class. This can only be used on select classes, and should be considered a last resort. You should not use one unless no Filter exists, and a custom Service would not be sufficient.

Some of the HowTo components are simple, such as the DynamicPrefix and WorkflowCheck components. Others demonstrate a higher degree of code complexity, such as the DataAccess and StockQuotes components. They are numbered in order of difficulty below:

Name: | Purpose:
#1 - DynamicPrefix | This will alter the auto number prefix of a checked in document based on the document type.
#2 - WorkflowCheck | When a document is checked in, sometimes it fits the proper criteria for a workflow. This component causes additional security checks on the contributor to be performed to make sure the workflow should be started.
#3 - AcmeMail | This creates a simple web form that can be used to send email to arbitrary email addresses, or to the specific users based on nothing more than their username or alias.
#4 - SecurityFilter | A filter that allows a temporary "boosting" of security credentials over one request, for a specific service. In this case, it allows anonymous users to check in files, and dynamicly grants account priviledges to users.
#5 - ScheduledEvent | A filter that hooks into the scheduling system inside the content server. It creates two events, one that is executed every five minutes, and one that is executed with the system events, and can be configured to only run at midnight.
#6 - AddAlternateFile | This component demonstrates the new 7.5 ability to 'chain' ServiceHandlers by overriding the existing action 'addFiles' to generate and add an alternate file for large documents.
#7 - NewIdocScript | This component demonstrates how to add new IdocScript functions and variables for use on template pages. Very handy if you wish to farm out some page generation to pure Java code.
#8 - StockQuotes | This component demonstrates how to use personalization to create a special page for each user that displays personal stock ticker data.
#9 - DataAccess | This component creates and prefills a database table once, then allows the user to alter the data in the table with simple Idc services.
#10 - DatabaseProvider | This component demonstrates how to use Database Providers to perform predefined queries against an external database through the content server.

### Filters

Filters are a common way to plug-in custom Java code into the server using specific 'hooks' in the code. You can create custom Java code, and register that code with a component, in order to have it executed at these specific moments. Many hooks exist, but the most commonly used ones are the hooks for server startup, for the checkin of a document, and when security privileges are calculated.

The component DynamicPrefix demonstrates how to use a filter upon the checkin of a document. The component ScheduledEvent demonstrates how to hook into the internal scheduling system of the content server to run code at specific times. The component DataAccess demonstrates how to use a filter upon the startup of the server to modify the database. The component SecurityFilter shows how to boost a users security access for one single request.

In a filter, you always have access to a DataBinder object, which contains some information about the actions being performed. There is also a Workspace object, which gives access to the database. There is also an ExecutionContent object, which typically has information about the user performing the action, as well as other relevant cached objects.

A list of available filter hooks are listed at the end of this document.

### Service Classes

New Service Classes are a common way to create new services that execute custom Java code. A new service is created, along with a new Service Type, and any code in a custom Java class file that extends intradoc.server.Service (or one of its subclasses) can be executed. This is a quick and simple way to create new services that call custom code.

The component AcmeMail uses a custom Service Type and a custom service to call custom Java code. The Java code extends the class 'intradoc.server.Service', and the IdcService 'SEND_ACME_MAIL' calls functions that exist inside this custom code. All functions called by the custom IdcService must be defined in the custom Java code, or its superclass.

Please note, some functionality is lost with custom Service Classes - actions such as checkin, update, editing personalization, etc. cannot be easily executed from an entirely new Service Type, unless the specific subclass is extended. Either way, existing IdcServices cannot be easily augmented to call custom code in new service classes. For these kinds of customizations, custom Service Handlers are used.

### Service Handlers

Service Handlers are another powerful way to add custom code to standard IdcServices, and to create completely new services. To do this, the custom Java code must extend 'intradoc.server.ServiceHandler' (or one of its subclasses), and be registered as a service handler with the component. Then Java methods with a specific signature can be called from service definitions as actions. This is done in the components DatabaseProvider, StockQuotes, and AddAlternateFile.

Starting in Content Server version 7.5, Service Handler actions can be chained. This means that if two components both define a method called `addFiles`, they can be written in such a way that any service that has uses `addFiles` as an action can call both pieces of Java code. The order is determined by the load order specified in the ServiceHandler table.

In StockQuotes, we wish to create a new service, but it needs to be able to execute the personalization code as well. Personalization uses the UserProfileHandler code, which is a handler for services of type DocService. Therefore, our custom services should be of the type DocService, and a custom handler should be merged into that Service Type.

In DatabaseProvider, we wish to execute new services with custom Java code to run queries against an external database. In this case, we are not currently executing any actions in other ServiceHandler objects, so it is not required to have its Java methods in a ServiceHandler. However, it is still a good idea to make it a handler for DocService, to better enable future enhancements.

In AddAlternateFile,

### Idoc Script

Another more specialized way to execute custom Java code is by creating a new IdocScript variable, or function. In general, modifications to IdocScript should focus on page generation and display, and should be limited to read-only requests. IdocScript should never be used to write data, otherwise security issues will become a problem. A few examples of possible new IdocScript variables and functions are presented in the component NewIdocScript.

The code in this component demonstrates what parts of the Java code should be left alone, and what parts should be altered. Modification of this component requires more care than the other components, because certain parts of the sample code should never be altered.

### Class Aliasing

When standard functionality is not desirable, or when the user wants significantly different behavior that cannot be altered with a ServiceHandler, new IdocScript, or a filter, the last resort is a class alias.

A class alias uses a custom class instead of the default Java class. Typically, this custom class will extend the standard class, and then overload only those functions that need to behave differently. In most cases, these kinds of customizations require access to the original source code, such as the one in the WorkflowCheck component.

Since class aliasing will cause the component's class to override the standard, no content server can run two components that override the same class. Therefore, it should be done only as a last resort. All services and service handlers can be class aliased.

A list of all aliasable classed is at the end of this document.

## Appendicies

Below you will find lists of the available filter hooks, and the classes that can be aliased. Please note that this only applies to SCS 7.5, and older versions may not support all of the classes below.

### List of Filters

Below is a list of filter names, and a short description of where and when they are executed. In addition, a list of what CachedObjects are available in the ExecutionContent object is presented. Unless explicitly noted, all Cached Objects are Strings.

# A
addExportedWebFilterConfiguration
Executed right before the web filter configuration file 'SecurityInfo.hda' is published. Use this hook to pass extra configuration info to a custom web filter plugin.
addExtraPreviewParameters
Executed towards the end of intradoc.preview.PreviewHandler.performPreview in the service call 'PREVIEW_DOCUMENT' to add parameters to the binder used to create a preview of a document.
addFiles
During checkin, executed immediately before the uploaded files are placed into the vault folder.
additionalImportFilter
Used during a Archiver table import, can specify a SQL WHERE clause in the databainder variable 'additionalImportFilter' to control what rows get imported.
advanceDocumentStateMarkWorkflowFinished
Executed just before a content item in workflow is marked as finished. Extra logging, or updating of external resources can be done here. Cached Objects: intradoc.server.workflow.WorkflowStates WorkflowStates
advanceDocumentStateStart
Executed at each step in a workflow (check in, check out, approve)to enable the storage of extra data, or the complete overriding of core workflow behavior. Cached Objects: intradoc.server.workflow.WorkflowStates WorkflowStates, boolean WorkflowUseLocal
afterArchiveBatchFile
After archiving a batch of files, this filter is executed. A good place to perform additional logging. Cached Objects: String archiveName, String batchDir, String batchFileName, String metaFileName, String fileNumber
afterCreateTransferPackageFileSet
Executed during archive replication services such as 'REQUEST_TRANSFER' and 'TRANSFER_ARCHIVE'. It is executed just before creating the ZIP file to replicate. A good place to add extra data to an archive. Cached Objects: String batchDir, String archiveDir, String targetDir, String fileName, intradoc.data.ResultSet fileSet, intradoc.server.archive.ArchiveImportStateInformation importState
afterLoadRecordWebChange
Executed during indexing of deletions, additions, or retries. This will fire after a web file (???) If it returns ABORT, no idexing of the content item is done. A good place to hook in extremely pervasive changes to the indexing engine. Execution Context: intradoc.indexer.IndexerWorkObject Cached Objects: intradoc.data.DataBinder WebChangeFilterParams, intradoc.indexer.IndexerInfo FilterIndexerInfo, intradoc.indexer.IndexerBulkLoader IndexerBulkLoader, intradoc.indexer.WebChange WebChange, intradoc.data.ResultSet DemotedRevisionInfo
afterImportBatch
Executed during an archive import after a batch of files is imported. Most batches are groups of 1000 or less. Cached Objects:Vector currentImportDocs
afterInitLocale
Executed at the beginning of every service request after the locale for the user has been determined.
afterPrepareSingleDoc
This is executed only when the archive explicitly imports one single item from an archive via the 'IMPORT_DOCUMENT' service. It is run after the item has been preprocessed. All field maps and value maps will have been applied. Cached Objects: Vector currentImportDocs
afterPreprocessImportBatch
Called after the metadata for a batch of items in an import have been preprocessed. All field maps and value maps will have been applied. Cached Objects:Vector currentImportDocs
allowProblemReportAction
Executed at the beginning of allowProblemReportAction() in UPDATE_PROBLEMREPORT and DELETE_PROBLEMREPORT Cached Objects: String TestProblemReportAction
alterProviderAttributes
This filter is executed after retrieving a user's information from an external user provider, such as LDAP. It is useful for altering any user attribute, or mapping an organizational attribute to a security attribute. Cached Objects: intradoc.provider.UserProvider TargetUserProvider
alterUserCredentials
Executed at the end of 'retrieveUserDatabaseProfileData' to allow temporary alteration of user credentials over the scope of a single request for any purpose. Cached Objects: intradoc.shared.UserData TargetUserData
archiveCheckinRevisionComparisonTest
Executed during an archive, when testing to see which service call to perform when inserting a new item. If 'canInsertNew' is true, the 'INSERT_NEW' service is used. Otherwise an error is thrown.
archiveHistoryItem
During an archive, executed after recording the history of an archived document into the ArchiveHistory database table.
ArchivableTableRelationsDefinition
Executed during an archive to grab a list of additional database tables to package up into the archive.
auditUserAttributesStore
During an update of user data, before the new data is saved to the database, this filter can be called to perform extra validation or store extra information into a different table. Cached Objects: intradoc.shared.UserData TargetUserData, Boolean hasUserChanged
# B
beforeLoadRecordWebChange
Executed during indexing of deletions, additions, or retries. A good place to hook in extremely pervasive changes to the indexing engine. Cached Objects: intradoc.data.DataBinder WebChangeFilterParams, intradoc.indexer.IndexerInfo FilterIndexerInfo, intradoc.indexer.IndexerBulkLoader IndexerBulkLoader, intradoc.indexer.WebChange WebChange, intradoc.data.ResultSet DemotedRevisionInfo
# C
checkDocRules
Called in function 'checkDocRules' which is executed during a check-in, check-out, or update to check which security rules apply. For example, does this user have rights to change the author on an update. Additional rules can be added. Cached Objects: String CheckRule
checkExtendedSecurityModelDocAccess
During a security check for a document, executed to augment the normal security levels to grant access to other documents. Cached Objects: Integer desiredPrivilege, intradoc.data.ResultSet securityProfileResultSet, intradoc.data.DataBinder securityProfileData, Boolean securityResult, String securityResultMsg
checkMetaChangeSecurity
Used during entity/collaboration security checks when the content info for an item changes. Throw a security exception if access is denied. Cached Objects:boolean checkMeta:isNewDoc, intradoc.data.ResultSet checkMeta:priorDocInfo
checkScheduledEvents
Executed after checking if its time to run scheduled events, such as the compaction of the database, or the removal of the cache, which are performed every few hours. The check itself is executed every five minutes. A good place to add scheduled actions.
xxxComponentUninstallFilter
Replace 'xxx' with the name of a component, and this filter will be run when the Admin Server or Component Wizard uninstalls a component. If extra cleanup is required, place such code here.
computeDocName
Used to adjust 'dDocName' during a checkin after the AutoNumberPrefix (if any) is applied, but before valididation is done.
computeExtendedSecurityModelWhereClausePrivileges
During a security check for a service, executed to augment the normal security levels to grant special access to finding files in the search results that a user might not normally have access to. Cached Objects: Integer desiredPrivilege, Boolean isVerity, intradoc.shared.UserData UserData
computeFunction
Used as a quick way to add an IdocScript function, but not an IdocScript variable. The last object in the array 'args' is the return value, if one exists. Cached Objects: String function, Object[] args
computeOptionList
Used to compute or filter an option list for display on IdocScript pages. Place the result Vector in the cached object 'optionlist'. Mostly deprecated by the Schema functionality. Cached Objects: Vector params
createProviderData
When adding or editing a provider, executed after the data for the provider has been created (and after 'validateProvider'). Cached Objects: intradoc.data.DataBinder ProviderData
createWebWiewable
Executed in the last step of a check in, when the web viewable file is placed in the weblayout directory. Executed immediately before the web files are created/converted/moved. Cached Objects: intradoc.server.WebViewableConverterOutput WebViewableOutput
# D
determineDocConversion
Executed in the 'docRefinery' action to override the computed value for 'dConversion', which is used by the refinery to process content. Cached Objects: Object[] DocConversionParams, which contains in order intradoc.server.DocFormats docFormats, Boolean isResubmit, String fileKey, String format, String conversionType
doUpdateMoveCheck
Called in the 'UPDATE_DOCINFO' service to check if a content item's metadata was modified sufficiently to force it to be moved. For example, changing the security group or content type is usually blocked if the item is in a workflow or refinery process. Cached Objects: String doUpdateMoveCheckParams
docUrlAllowAccess
During "remoteCredentialsCheck", executed to allow augmentation of security levels for external users. Cached Objects: intradoc.shared.UserData UserData
docUrlAllowDisclosure
During the IdocScript function "docUrlAllowDisclosure" executed to allow augmentation of security levels for the disclosure of urls to content.
dynamicFileLoadDocEnvironment
Executed every time a HCSP/T/F is rendered in the content server. Use this hook to load up a richer environment for rendering pages.
# E
editHttpResponseHeader
Used when building the response page to any service call to modify the generated HTTP headers in the response. Cached Objects: intradoc.server.ServiceHttpImplementor HttpImplementor, StringBuffer responseBuffer
editTopic
Executed when PNE data is saved to the content server (workflow in queue, saved searches). If FINISHED is returned, the default updating of the files is not done. Can be used to modify or extend how user preferences are saved. Cached Objects: Properties topicEditRowProps
evaluateGlobalRulesAndProfile
Executed before content profiles are evaluated. Can be used to set flags to trigger profile specific behavior, such as ':defaultValue' and ':isExcluded'.
editTopic
During the addition or editing of personalization topics, executed before the editing takes place in "prepareTopicEdits" to perform final validation, or saving to another topic. Cached Objects: Properties topicEditRowProps
extraAfterConfigInit
Executed after the IdcSystemLoader is initialized, at the very beginning of the server's startup. A good place to execute a filter once early on in intialization.
extraAfterServicesLoadInit
Executed after all the services are loaded into the server. Typically, this is at the last part of the server's initialization, and any one-time post initialization filter can go here..
extraBeforeCacheLoadInit
Executed during server initialization, after database connections have been established, but before the data in the database has been cached. A good place for database table manipulation.
# F
finishProfileEvaluation
Executed after all the content profiles and global rules have been evaluated. An ideal place to trigger additional profile side-effects. Cached Objects: Hashtable FieldMap
fixUpAndValidateQuery
Executed immediately before a search query is run. This is the last chance to modify 'QueryText' before the search is run.
formPostSubmit
Executed at the very end of a Html Form submission, after all the data has been submitted.
formPreSubmit
Executed at the very end of processForm(), after the default data precessing occurs, but before the Html Form gets submitted
# G
getDocFormats
Executed on content info pages to determine the known formats of a content item (text/html, application/unknown, etc)
getEnterpriseSearchResults
Executed at the end of an enterprise search.
getnextrow
A callback filter used when looping over result sets in IdocScript. It can be used to filter the values displayed. Cached Objects: String resultset
# H
handleIndexerResult
Executed after indexing was attempted on a content item. Additional error logging, callbacks, or retry logic can occur here. Cached Objects: intradoc.indexer.IndexerInfo, intradoc.indexer.WebChange
# I
importTable
Executed before the Archiver imports the data from an archived database table.
incomingSocketProviderInit
Executed when any incoming socket provider is initialized, such as the connection from the web server, or from another content server.
incomingSocketProxyAuth
Executed when an incoming socket provider has its authorization validated. Cached Objects: intradoc.data.DataBinder ProxyAuthProviderData, Properties ProxyAuthParams
initSearchIndexer
Executed at the end of the initialization of the search indexer.
initSubjects
Executed after loading the cached tables upon server intialization.
# J
JspExecution
Executed immediately before a request for a JSP is rendered by the internal JSP engine. This is a good place to create a richer environment for JSP execution. Cached Objects: java.io.OutputStream OutputStream, intradoc.data.Workspace Workspace
# L
loadDefaultInfo
Executed at the beginning of the function loadDefaultInfo, typically when checkin/update forms are displayed for retrieval of doc formats, doc types, and accounts.
loadMetaDefaults
Executed at the beginning of the function loadMetaDefaults, for the loading of custom metadata and the defaults.
loadMetaOptionsLists
Executed before loading the custom metadata option lists from the database.
loadStateLists
Executed before the state list is loaded for a project.
loadUserAttributes
Executed towards the end of loading the database attributes for a user. Cached Objects: intradoc.shared.UserData TargetUserData
# N
notifySubjects
Called before the subjects are notified (users, work, indexer status, etc.). Cached Objects: Vector serviceSubjects, Boolean isNotify
notifynextrow
Executed after the 'getnextrow' filter. Cached Objects: String resultset
# O
onEndScriptSubServiceActions
Executed at the end of every service call that is executed from IdocScript.
onEndServiceRequestActions
Executed at the end of all successful service requests before the response is sent back.
onServiceRequestError
Executed every time a service throws an error. Cached Objects: intradoc.server.ServiceException CurrentRequestError
outgoingRequestHeaders
Executed to alter the HTTP headers for an outgoing request from one content server to another. Cached Objects: Properties requestHeaders
# P
parseDataForServiceRequest
A hook to allow parsing of raw GET request data before it is barsed into a DataBinder object.
postConversionQueueSubmit
Executed in the refinery process further along than 'createWebWiewable', right before the workflow history is recorded.
postDocHistoryInfo
Executed after the document history is recorded in the DocumentHistory database table.
postHtmlFormCheckin
Executed in function postHtmlFormCheckin() in service 'SUBMIT_HTML_FORM' for submitting Html Forms.
postIndexingStep
Executed after the indexer processes a content item, immediately before the cleanup.
postParseDataForServiceRequest
Similar to 'parseDataForServiceRequest', but for POST requests.
postProcessBatch
Executed by the archiver at the end of the import of an archived database table.
postUnpackageResultFile
Executed towards the end of a preview request, after the preview files have been unpackaged.
postValidateCheckinData
Executed at the end of the action 'validateCheckinData' after the filter 'validateCheckinData' and the content profiles have been evaulated. This is a good hook for last-chance metadata validation for check ins.
postWebfileCreation
Executed after the file is placed into the weblayout directory. Cached Objects: String WebfilePath, String VaultfilePath
preIndexingStep
Executed at the beginning of an indexer step, right after the indexer determines which files to process.
preMergeInFileInfo
Executed when building an archive, during creation of a batch result set, before computing the names of the files to archive.
preWebfileCreation
Executed before the file is put into the conversion queue. The resulting converted file will be placed into the weblayout directory.
prepareHttpResponseHeader
Executed before the HTTP response is created for every service call. Cached Objects: intradoc.server.ServiceHttpImplementor HttpImplementor, StringBuffer responseBuffer
prepareQuery
Executed before the general search query is assembled. A good place to modify the sort order and result count.
prepareQueryText
This is the first chance available to modify the parameters that will alter how the 'QueryText' is normalized. Modifications to the 'QueryText' belong here or in 'fixUpAndValidateQuery'.
prepareSubscriptionMail
Executed before information about a subscription is placed in the mail queue. A good place to add extra data to the binder so that subscription emails can be rendered. Cached Objects: boolean isSendMail
# R
removeCustomDatedCaches
Executed before deleting a dated cache for the Dynamic Converter(???).
requestAuditEndRequest
If the 'requestaudit' tracing section is active, this filter will be executed at the end of every request. A useful place to put extra debugging information. Cached Objects: String requestAuditServiceName, String requestAuditCurNumActiveThreads
requestAuditParsedRequest
If the 'requestaudit' tracing section is active, this will be executed after the data for a request has been parsed, but before the request has been processed.
requestAuditStartRequest
If the 'requestaudit' tracing section is active, this will be executed immediately after an incoming request has been initialized, before any parsing of the request. This is a very powerful hook to allow for extremely thread-specific and request-specific logging. Cached Objects: intradoc.server.IdcServerThread RequestAuditIncomingThread, intradoc.server.ServiceManager RequestAuditServiceManager
requestAuditStatisticsReport
If the 'requestaudit' tracing section is active, this will be executed intermittently (see RequestAuditIntervalSeconds) to generate an overall statistics report. If customization of the report is desired, mostly likely another filter for 'requestAuditStartRequest' will be needed in order to store custom data. Cached Objects:StringBuffer (requestAuditReportBuffer)
retrieveProviderInfo
Executed after the data about a provider is loaded for display.
# S
scheduledSystemEvent
Similar to the 'checkScheduledEvents' filter, but more useful for modifying the behavior of existing system scheduled events.
sendDataForServerResponse
Executed at the end of every service request that returns raw data, like what happens when 'IsJava=1' is passed in the URL. This is useful for overriding how request data is sent back to application servers and the like. Cached Objects: String responseString
sendDataForServerResponseBytes
Same as 'sendDataForServerResponse', but this filter is executed first. If the cached object 'responseBytes' is non-null, its byte stream will be passed back. Cached Objects: String encoding, byte[] responseBytes
submitHtmlForm
Executed in function submitHtmlForm() in service 'SUBMIT_HTML_FORM' for submitting Html Forms. Cached Objects: String IsTemplate
# U
unmanagedDocCheckAccess
In the event of a dynamic page request for an unmanaged file (eg. images, help, portal.htm) this filter will be executed to enable custom access validation.
updateExtendedAttributes
Executed when revision information about a content item changes (check in, delete, update) right before the 'dRevRank' flag is calculated. Cached Objects: String attributes:revAction
updateMetaTable
Executed after the DocMetaDefinition has changed.
updateSubscriptionInfo
Executed before the subscription info is updated. Cached Objects: intradoc.indexer.WebChanges WebChanges, intradoc.indexer.IndexerState IndexerState
updateWorkflowStateAfterChange
Executed in function updateWorkflowStateAfterCheckin() in service 'WORKFLOW_CHECKIN_SUB' to allow additional alteration of parameters for updating the state of a content item in a workflow.
# V
XXX:validate
Executed at the beginning of 'hasAllowableValueInOptionLists' which checks whether or not a value for a metadata field is valid. 'XXX' should be replaced with the name of the metadata field to check, such as 'xComments'.
validateCheckinData
During checkin or update, executed before validating some of the data, such as account name, revision label, and field lengths.
validateProvider
When adding or editing a provider, executed after the data for the provider has been validated.
validateStandard
During update or checkin, executed before validating some of the data, such as dReleaseState, dDocName, dRevClassID, dDocTitle, primaryFile, alternateFile, dCreateDate, dInDate, and dOutDate.
# W
workflowComputeDocStepInfo
Executed each time a the state of an item in workflow is calculated for display purposes. Cached Objects: intradoc.shared.workflow.WfStepData WfStepData

### List of Aliasable Classes

Classname | Location
Applications | intradoc.apps.shared.Applications
ArchiveCheckinHandler | intradoc.server.ArchiveCheckinHandler
ArchiveExportHelper | intradoc.server.archive.ArchiveExportHelper
ArchiveHandler | intradoc.server.archive.ArchiveHandler
ArchiveHandler | intradoc.server.archive.ArchiveHandler
ArchiveImportStateInformation | intradoc.server.archive.ArchiveImportStateInformation
ArchiveService | intradoc.server.ArchiveService
ArchiveTableCallBack | intradoc.server.archive.ArchiveTableCallBack
BatchService | intradoc.server.BatchService
BuildChanges | intradoc.indexer.IndexerBuildChanges
ChunkedService | intradoc.server.ChunkedService
CollaborationService | intradoc.server.CollaborationService
CommonSearchConfigCompanion | intradoc.search.DBSearchConfigCompanion, intradoc.search.AvsSearchConfigCompanion, or intradoc.search.VeritySearchConfigCompanion
ConverterHandler | intradoc.server.converter.ConverterHandler
DataBinderProtocol | intradoc.server.DataBinderProtocolImplementor
DetermineSubscription | intradoc.indexer.DetermineSubscription
DocCommonHandler | intradoc.server.DocCommonHandler
DocIndexer | intradoc.indexer.DocIndexerAdaptor
DocIndexer | intradoc.indexer.DocIndexerAdaptor
DocProfileService | intradoc.server.DocProfileService
DocProfileStates | intradoc.server.DocProfileStates
DocService | intradoc.server.DocService
DocServiceHandler | intradoc.server.DocServiceHandler
DocServiceHandler | intradoc.server.DocServiceHandler
DocumentAccessSecurity | intradoc.server.DocumentAccessSecurity
DtmExtendedLoader | intradoc.server.IdcExtendedLoader
ExpirationNotifier | intradoc.server.ExpirationNotifier
ExpiredContentHandler | intradoc.server.ExpiredContentHandler
FileService | intradoc.server.FileService
FormHandler | intradoc.server.FormHandler
HttpImplementor | intradoc.server.ServiceHttpImplementor
IdcExtendedLoader | intradoc.server.IdcExtendedLoader
IndexAdditions | intradoc.indexer.CommonIndexerBulkLoader
IndexDeletions | intradoc.indexer.CommonIndexerBulkLoader
IndexRetries | intradoc.indexer.CommonIndexerBulkLoader
Indexer | intradoc.indexer.Indexer
IndexerDriver | intradoc.indexer.IndexerDriverAdaptor
IndexerExecution | intradoc.indexer.IndexerExecution
IndexerExecutionHandler | intradoc.indexer.VerityHandler
(ALTAVISTA)IndexerExecutionHandler | intradoc.indexer.AltavistaHandler
(DATABASE)IndexerExecutionHandler | intradoc.indexer.DatabaseHandler
(DATABASEFULLTEXT)IndexerExecutionHandler | intradoc.indexer.DatabaseFullTextHandler
IndexerService | intradoc.server.IndexerService
IndexerTransition | intradoc.indexer.IndexerTransition
JspServiceHandler | intradoc.server.jsp.JspServiceHandler
ListBoxService | intradoc.server.ListBoxService
LocaleService | intradoc.server.LocaleService
MetaService | intradoc.server.MetaService
OutgoingProviderManager | intradoc.server.proxy.OutgoingProviderManager
PageHandler | intradoc.server.PageHandler
PageHandler | intradoc.server.PageHandler
PageHandlerService | intradoc.server.PageHandlerService
PageHandlerService | intradoc.server.PageHandlerService
PageRequestService | intradoc.server.PageRequestService
ProblemReportHandler | intradoc.server.ProblemReportHandler
ProjectDocHandler | intradoc.server.ProjectDocHandler
ProjectService | intradoc.server.ProjectService
ProviderManagerService | intradoc.server.ProviderManagerService
ProxyImplementor | intradoc.server.proxy.ServiceProxyImplementor
Replication | intradoc.server.IndexerReplication
RevisionImplementor | intradoc.shared.RevisionImplementor
ScheduledSystemEvents | intradoc.server.ScheduledSystemEvents
SchemaArchiveHandler | intradoc.server.archive.SchemaArchiveHandler
SchemaEditHelper | intradoc.shared.schema.SchemaEditHelper
SchemaFieldConfig | intradoc.shared.schema.SchemaFieldConfig
SchemaHandler | intradoc.server.SchemaHandler
SchemaHelper | intradoc.shared.schema.SchemaHelper
SchemaLoader | intradoc.server.schema.ServerSchemaLoader
SchemaPublisher | intradoc.server.schema.StandardSchemaPublisher
SchemaPublisherThread | intradoc.server.schema.StandardSchemaPublisherThread
SchemaRelationConfig | intradoc.shared.schema.SchemaRelationConfig
SchemaService | intradoc.server.SchemaService
SchemaTableConfig | intradoc.shared.schema.SchemaTableConfig
SchemaUtils | intradoc.server.schema.SchemaUtils
SchemaViewConfig | intradoc.shared.schema.SchemaViewConfig
SearchCache | intradoc.search.SearchCache
SearchFieldInfo | intradoc.shared.SearchFieldInfo
SearchManager | intradoc.server.SearchManager
SearchService | intradoc.server.SearchService
SecurityImplementor | intradoc.upload.UploadSecurityImplementor
ServerSchemaManager | intradoc.server.schema.StandardSchemaManager
Service | intradoc.server.Service
ServiceHandler | intradoc.server.ServiceHandler
SubscriptionByDocument | intradoc.indexer.DocumentOrientedSubscription
SubscriptionBySubscription | intradoc.indexer.SubscriptionOrientedSubscription
SubscriptionHandler | intradoc.server.SubscriptionHandler
TransferHandler | intradoc.server.archive.TransferHandler
TransferHandler | intradoc.server.archive.TransferHandler
TransferServiceHandler | intradoc.server.archive.TransferServiceHandler
UserProfileHandler | intradoc.server.UserProfileHandler
UserService | intradoc.server.UserService
UserServiceHandler | intradoc.server.UserServiceHandler
UserServiceHandler | intradoc.server.UserServiceHandler
UserServiceHandler | intradoc.server.UserServiceHandler
WebFilterConfigHandler | intradoc.server.filter.WebFilterConfigHandler
WebViewableConverterOutput | intradoc.server.WebViewableConverterOutput
WorkflowDocImplementor | intradoc.server.workflow.WorkflowDocImplementor
WorkflowHandler | intradoc.server.workflow.WorkflowHandler
WorkflowScriptHandler | intradoc.server.workflow.WorkflowScriptHandler
WorkflowService | intradoc.server.WorkflowService
WorkflowStates | intradoc.server.workflow.WorkflowStates
WorkflowTemplateService | intradoc.server.WorkflowTemplateService
intradoc.server.UserStorageImplementor | intradoc.server.UserStorageImplementor
intradoc.server.UserTempCache | intradoc.server.UserTempCache