XSL Transformation
Based on a XSL template external XML data sources can be transformed into the Imixs XML schema. The result of thus a transformation can be posted to the Imixs-Workflow REST service API. This is how a interface between an external system and the Imixs Workflow engine can be realized. The following example shows how to transform xml data:
The XML Data
This is a sample of a xml data structure provided by an external system. The structure contains several ‘Documents’ containing detail information and DocumentLevelFields
<?xml version="1.0" encoding="UTF-8"?>
<Batch>
<Documents>
<Document>
<Identifier>DOC1</Identifier>
<Type>Imixs-RG</Type>
<Valid>true</Valid>
<Reviewed>true</Reviewed>
<ErrorMessage></ErrorMessage>
<DocumentLevelFields>
<DocumentLevelField>
<Name>RG-NR</Name>
<Value>05052011</Value>
<Type>STRING</Type>
<Page>PG0</Page>
<FieldOrderNumber>1</FieldOrderNumber>
</DocumentLevelField>
</DocumentLevelFields>
</Document>
<Document>
<Identifier>DOC2</Identifier>
<Type>Imixs-RG</Type>
<Valid>true</Valid>
<Reviewed>true</Reviewed>
<ErrorMessage></ErrorMessage>
<DocumentLevelFields>
<DocumentLevelField>
<Name>RG-NR</Name>
<Value>44032011</Value>
<Type>STRING</Type>
<Page>PG0</Page>
<FieldOrderNumber>1</FieldOrderNumber>
</DocumentLevelField>
</DocumentLevelFields>
</Document>
</Documents>
</Batch>
Transforming the XML Data with XSLT
With a XSL template it is possible to transform the given XML data into the Imixs XML schema. This XML format of an Imixs EntityCollection has the following structure:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<document>
<item>
<name>numsequencenummer</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">1</value>
</item>
<item>
<name>namlasteditor</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">sally</value>
</item>
<item>
<name>$uniqueid</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">13189f34ce7-5668d41
</value>
</item>
<item>
<name>_ordernumber</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">345</value>
</item>
</document>
<document>
<item>
<name>numsequencenummer</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">2</value>
</item>
<item>
<name>namlasteditor</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Karl</value>
</item>
<item>
<name>$uniqueid</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">13189f34ce7-5668d41
</value>
</item>
<item>
<name>_ordernumber</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">345555</value>
</item>
</document>
</data>
See details about the xml format in the section XML. To transform the external data source a simple XSL template can be used like shown in the following example:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<data>
<xsl:apply-templates select="Batch/Documents/Document[Type='Imixs-RG']">
</xsl:apply-templates>
</data>
</xsl:template>
<xsl:template match="Batch/Documents/Document[Type='Imixs-RG']">
<document>
<!-- setting General Workflow Settings -->
<item>
<name>type</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">workitem</value>
</item>
<item>
<name>namcreator</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">ephesoft-batch-process</value>
</item>
<item>
<name>$modelversion</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">office-de-0.0.1</value>
</item>
<item>
<name>$taskid</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">4000</value>
</item>
<item>
<name>$eventid</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">20</value>
</item>
<!-- extract _ordernumber -->
<item>
<name>_ordernumber</name>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">
<xsl:value-of
select="DocumentLevelFields/DocumentLevelField[Name='RG-NR']/Value" />
</value>
</item>
</document>
</xsl:template>
</xsl:stylesheet>
This XSL template selects all Document nodes with the type=‘Imixs-RG’. For each document node the condition xsl:apply-templates creates a new entity tag with different item nodes. The template creates the entity tag and provides some workitem fields with fixed values. In the last section of the xsl:template a value from the provided DocumentLevelField tag is extracted and transformed into an item with the name “_ordernumer” and the corresponding value. The result of such a transformation can be used to be posted to the Imixs Rest Service interface. See the section Post XML Data.