Documentation Center

Programmer's Interface Changes

New interfaces for MetadataBinding, QueryEnhance and TranslationManagement. Interfaces ICustomerFunction and IOnDocStore are replaced by IWrite*-plugins and IEventHandler by IBackgroundTaskHandler

All interfaces

All programmer's interfaces are now fully natively .NET. In 11.0.0 we introduced IWrite* plugins as replacement for IOnDocStore and ICustomerFunction. In 11.0.1 we introduced IBackgroundTaskHandler to replace IEventHandler.

Introducing MetadataBinding Extensions

Every MetadataBinding connector should implement Trisoft.InfoShare.Plugins.SDK.Extensions.MetadataBinding interfaces. The connector is read-only. Configuration is stored as part of <infoShareExtensionConfig> under <metadatabindings>, located in FISHEXTENSIONCONFIG field available through Settings25 API.

InterfaceShort Description
IHandlerInterface to retrieve information from an external system
IHandlerConfigurationInterface is implemented by the object passed to .NET handler Initialize method. It provides a handler with the parameters configured in the XML Extension Settings
IFieldsFilterInterface for passing metadata that can be used to further filter the results to the RetrieveTags and RetrieveTagStructure methods
IMessageThe message and all information necessary to translate the message
IMessageParamOne parameter for the (error)message
IResolveIdsContextImplement this interface in order to pass it to the metadata binding ResolveIds method
IResolveIdsResultAn object implementing this interface is returned from the metadata binding ResolveIds method
IRetrieveTagsContextImplement this interface in order to pass it to the metadata binding RetrieveTags method
IRetrieveTagsResultAn object implementing this interface is returned from the metadata binding RetrieveTags method.
IRetrieveTagStructureContextImplement this interface in order to pass it to the metadata binding RetrieveTagStructure method
IRetrieveTagStructureResultAn object implementing this interface is returned from the metadata binding RetrieveTagStructure method
IStructureTagContainer for the minimal metadata of the object in the external system and of the propriety that defines if the object can be selected or not. It is used when returning results from the RetrieveTagStructure method.
ITagContainer for the minimal metadata of the object in the external system. It is used when returning results from the ResolveIds and RetrieveTags methods
ITagRelationContainer for the relationship between 2 Tag objects. It is used when returning results from the RetrieveTagStructure method
IValidateContextImplement this interface in order to pass it to the metadata binding Validate method
IValidateResultAn object implementing this interface is returned from the metadata binding Validate method

Introducing QueryEnhance Extensions

The Web Client and Client Tools full-text index search actions are all routed over Search25 API. All the API consumers don't and shouldn't know if a field is metadata bounded or not. So there are no API changes for this. This extension point can enhance the incoming XML query before submitting to the full-text index. The examples are adding extra search criteria.

The configuration is stored as part of <infoShareExtensionConfig> under <search> stored in FISHEXTENSIONCONFIG field available through Settings25 API. The <queryenhance> entries are executed in the configured order.

InterfaceShort Description
IEnhanceQueryContextUses the IEnhanceQueryContext instance properties to access the input data passed to the EnhanceQuery method of IQueryEnhanceHandler class
IEnhanceQueryResultReturns IEnhanceQueryResult instance from the EnhanceQuery method of IQueryEnhanceHandler class
IQueryEnhanceHandlerInterface for dynamically enhancing the search query
IQueryEnhanceHandlerConfigurationContains the objects required for the query enhance handler initialization

Introducing Target XML File Extensions

It is now possible to configure a list of processing actions performed on to-be-translated XML files before they are sent to translation. You can do so using interfaces described in the documentation as Translation management plugin interfaces.

This set of interfaces is also responsible for purging any of the generated target file markup. For example going from a mixed language file back to a single language file.

PreTranslation functionality is now implemented using this new interface through Trisoft.InfoShare.Plugins.SDK.Extensions.TranslationManagement.
InterfaceShort Description
ITargetXmlFileHandlerCustom handler for generating a target file based upon the current source file and the previous released translation
ITargetXmlFileGenerateContextImplemented by the object passed to the handler Generate method. It provides the handler with the necessary input data
ITargetXmlFileHandlerConfigurationImplemented by the object passed to the Initialize method of the handler implementing the ITargetXmlFileHandler interface. It provides the handler with all parameters configured in the XML Extension Settings.
ITargetXmlFileGenerateResultThe Generate method of the ITargetXmlFileHandler class return an ITargetXmlFileGenerateResult instance
ITargetXmlFilePurgeContextImplemented by the object passed to the handler Purge method. It provides the handler with the necessary input data
ITargetXmlFilePurgeResultNeeds to be implemented in order to return the result of the Purge method from the ITargetXmlFileHandler class

IBackgroundTaskHandler replaces IEventHandler

Background Tasks can now be handled by a full stack .NET implementation. The following interfaces are provided and documented: IBackgroundTaskHandler, IBackgroundTaskHandlerContext and IBackgroundTaskHandlerConfiguration.

As a first implementation we offer an IBackgroundTaskHandler alternative implementation of the following plugins.
NameIEventHandler (COM+)IBackgroundTaskHandler (.NET)
THUMBNAILSUBMITISHPluginsIso.CDocSetThumbnailSetThumbnail
INBOXEXPORT, REPORTEXPORT, SEARCHEXPORT, PUBLICATIONEXPORTIshPluginsIso.cOutExportObjects
PUBLISHINGSERVICEPROCESS, ZIPFILES, SYNCHRONIZETOLIVECONTENTIshPluginsIso.cIshShellIshShell

API References documentation is available for the interfaces or on how to Create a background task handler.

IWrite* plugins Improvements

Execution during translation creation
It is now possible to configure a list of write plugins which will be executed during the creation of the target language objects. When a translation is created, all Write plugins that have value CreateTranslation as CurrentAction configured in the @ishcondition in the IWrite* configuration are executed.
Execution when objects are sent to publish

During PublicationOutput, when an object is sent to publish on a specified output, IWrite plugins can be executed. It can only be plugins that act on metadata (so, no IWriteMetadataAndBlob... is applicable) because the blob cannot be modified at this point. These plugins can add additional actions during a status transition, such as changing a date or starting a messaging background task.

CopyField plugin

A IWriteMetadata - CopyField plugin is introduced. This plugin copies values from one field to another. It is used by CreateTranslation during Translation Management to make sure that mandatory or unchanged fields (e.g translation word count) are available.

LoggerName

A specific LoggerName for the PluginLogService is available and can be configured from now on. [TS-8913]

Context based on element names

The IWrite* plugins that will be executed on your objects are selected by conditional publishing of the IWrite* configuration (Settings > XML Write plug-in Settings or Admin.XMLWriteObjPluginConfig.xml). Your incoming object will drive the context used for conditional publishing. Configuration can now be done by element names besides the more volatile labels. An @ishcondition entry such as DOC-LANGUAGE='en' AND ishoutputformat='PDF a4' - which breaks if somebody renames the language to en-US - should now be configured using the stable element names like DOC-LANGUAGE='VLANGUAGEEN' AND ishoutputformat='VOUTPUTFORMATPDFA4'.

Language, resolution and output format are extended. The documentation describes the possible condition names and values that define a context for content objects and publication outputs. So an example context, also called product definition, looks like this:

CurrentAction = SetMetadata
IshType = ISHIllustration
FMAPID = GUID-BC80B446-62BB-4583-9AF5-1C94D0C236E2
VERSION = 1
DOC-LANGUAGE = en, VLANGUAGEEN
FRESOLUTION = Thumbnail, VRESOLUTIONTHUMBNAIL
EDT = EDTJPG
ISHUserGroup = VUSERGROUPDEFAULTDEPARTMENT
ISHLevel = logical, version, lng

IWrite* plugin BlobExtractMetadata finetuned

A configuration like <Parameter name="ExtractXPath">//*[contains(@class,' topic/shortdesc ')] that returned an element was not possible anymore. When multiple values were returned from the XPath and stored in a single value field, we returned a TooManyValues error, instead of concatenating the values with a comma space.

For example, assume FSHORTDESC is a single value string field, and the XML file contains:
<shortdesc>The 
  <b>Title</b>
  provides information about configuring networking for
  <i>SDL</i>
  Architect, such as iSCSI, Fibre Channel, and so on.
</shortdesc>
For an ExtractXPath = "//*[contains(@class,' topic/shortdesc ')]" the result in FSHORTDESC would be:The Title provides information about configuring networking for SDL Architect such as iSCSI, Fibre Channel, and so on.
For an ExtractXPath = "//*[contains(@class,' topic/shortdesc ')]/text()" the result in FSHORTDESC would be:The , provides information about configuring networking for, Architect such as iSCSI, Fibre Channel, and so on.
For an ExtractXPath = "//*[contains(@class,' topic/shortdesc ')]//text()" the result in FSHORTDESC would be:The , Title, provides information about configuring networking for , SDL, Architect such as iSCSI, Fibre Channel, and so on.
Then
  • For an ExtractXPath = "//*[contains(@class,' topic/shortdesc ')]" the result in FSHORTDESC would be The Title provides information about configuring networking for SDL Architect such as iSCSI, Fibre Channel, and so on.
  • For an ExtractXPath = "//*[contains(@class,' topic/shortdesc ')]/text()" the result in FSHORTDESC would be The , provides information about configuring networking for, Architect such as iSCSI, Fibre Channel, and so on.
  • For an ExtractXPath = "//*[contains(@class,' topic/shortdesc ')]//text()" the result in FSHORTDESC would be The , Title, provides information about configuring networking for , SDL, Architect such as iSCSI, Fibre Channel, and so on.