Overview
Development Steps
- Create Users
- Create Workgroups
- Create the Parent Document Type
- Create the Child Document Type
- Create the eDocLite Form
- Create the Form
- Create the Stylesheet
- Create the Rule Template
- Create Routing Rules
The Business Process
The Request Details
Request Detail |
Example |
Date and time for change |
January 1, 2010 |
Description of the port change |
Allow all workstations of the Application Development group access to the Oracle database port |
Ingress/egress characteristic |
Incoming on port 1521 |
Destination/source specification |
Source: wk1.ucdavis.edu, wk2.ucdavis.edu, wk3.ucdavis.edu Destination: dbhost.ucdavis.edu |
The term of the change (indefinite or otherwise) |
Indefinite |
Project related to the requested rule(s) change |
Kuali Rice Implementation |
Create Users
<?xml version="1.0" encoding="UTF-8"?> <data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData"> <users xmlns="ns:workflow/User" xsi:schemaLocation="ns:workflow/User resource:User"> <user> <workflowId>FPG1</workflowId> <emplId>FPG1</emplId> <authenticationId>FPG1</authenticationId> <uuId>FPG1</uuId> <emailAddress>FPG1@ucdavis.edu</emailAddress> <displayName>Firewall Group Policy User One</displayName> <givenName>Firewall Group Policy User</givenName> <lastName>One</lastName> </user> <user> <workflowId>FPG2</workflowId> <emplId>FPG2</emplId> <authenticationId>FPG2</authenticationId> <uuId>FPG2</uuId> <emailAddress>FPG2@ucdavis.edu</emailAddress> <displayName>Firewall Group Policy User Two</displayName> <givenName>Firewall Group Policy User</givenName> <lastName>Two</lastName> </user> </users> </data>
Create Workgroups
<?xml version="1.0" encoding="UTF-8"?> <data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData"> <workgroups xmlns="ns:workflow/Workgroup" xsi:schemaLocation="ns:workflow/Workgroup resource:Workgroup"> <workgroup> <workgroupName>eDoc.FirewallPolicyGroup.Workgroup</workgroupName> <description>Firewall Policy Group for Firewall Change Requests</description> <members> <authenticationId>FPG1</authenticationId> <authenticationId>FPG2</authenticationId> </members> </workgroup> </workgroups> </data>
Create the Parent Document Type
<?xml version="1.0" encoding="UTF-8"?> <data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData"> <documentTypes xmlns="ns:workflow/DocumentType" xsi:schemaLocation="ns:workflow/DocumentType resource:DocumentType"> <documentType> <name>eDoc.RequestFirewallChange.Parent</name> <description>eDoc.RequestFirewallChange Parent Document</description> <label>eDoc.RequestFirewallChange Parent Document</label> <postProcessorName>edu.iu.uis.eden.edl.EDocLitePostProcessor</postProcessorName> <superUserWorkgroupName>eDoc.FirewallPolicyGroup.Workgroup</superUserWorkgroupName> <blanketApprovePolicy>NONE</blanketApprovePolicy> <docHandler>${workflow.url}/EDocLite</docHandler> <active>true</active> <routingVersion>2</routingVersion> </documentType> </documentTypes> </data>
Create the Child Document Types
<?xml version="1.0" encoding="UTF-8"?> <data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData"> <documentTypes xmlns="ns:workflow/DocumentType" xsi:schemaLocation="ns:workflow/DocumentType resource:DocumentType"> <documentType> <name>eDoc.RequestFirewallChange</name> <parent>eDoc.RequestFirewallChange.Parent</parent> <description>eDoc.RequestFirewallChange Child Document Type</description> <label>eDoc.RequestFirewallChange Child Document Type</label> <postProcessorName>edu.iu.uis.eden.edl.EDocLitePostProcessor</postProcessorName> <superUserWorkgroupName>eDoc.FirewallPolicyGroup.Workgroup</superUserWorkgroupName> <blanketApprovePolicy>NONE</blanketApprovePolicy> <defaultExceptionWorkgroupName>eDoc.FirewallPolicyGroup.Workgroup</defaultExceptionWorkgroupName> <docHandler>${workflow.url}/EDocLite</docHandler> <active>true</active> <routingVersion>2</routingVersion> <routePaths> <routePath> <start name="Initiated" nextNode="eDoc.RequestFirewallChange.Node1" /> <requests name="eDoc.RequestFirewallChange.Node1" /> </routePath> </routePaths> <routeNodes> <start name="Initiated"> <activationType>P</activationType> <mandatoryRoute>false</mandatoryRoute> <finalApproval>false</finalApproval> </start> <requests name="eDoc.RequestFirewallChange.Node1"> <activationType>P</activationType> <ruleTemplate>eDoc.RequestFirewallChange.Node1</ruleTemplate> <mandatoryRoute>false</mandatoryRoute> <finalApproval>false</finalApproval> </requests> </routeNodes> </documentType> </documentTypes> </data>
Create the eDocLite Form
- Set up the eDocLite skeleton
<?xml version="1.0" encoding="UTF-8"?> <data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData"> <users xmlns="ns:workflow/User" xsi:schemaLocation="ns:workflow/User resource:User"> <user> <workflowId>FPG1</workflowId> <emplId>FPG1</emplId> <authenticationId>FPG1</authenticationId> <uuId>FPG1</uuId> <emailAddress>FPG1@ucdavis.edu</emailAddress> <displayName>Firewall Group Policy User One</displayName> <givenName>Firewall Group Policy User</givenName> <lastName>One</lastName> </user> <user> <workflowId>FPG2</workflowId> <emplId>FPG2</emplId> <authenticationId>FPG2</authenticationId> <uuId>FPG2</uuId> <emailAddress>FPG2@ucdavis.edu</emailAddress> <displayName>Firewall Group Policy User Two</displayName> <givenName>Firewall Group Policy User</givenName> <lastName>Two</lastName> </user> </users> </data>
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData">
<edoclite xmlns="ns:workflow/EDocLite" xsi:schemaLocation="ns:workflow/EDocLite resource:EDocLite">
<edl name="eDoc.RequestFirewallChange.Form" title="Request Firewall Change">
<security />
<createInstructions>** Fields with an asterisk are required.</createInstructions>
<instructions>** Questions with an asterisk are required.</instructions>
<validations />
<attributes />
</edl>
<style name="eDoc.RequestFirewallChange.Style">
</style>
<association>
<docType>eDoc.RequestFirewallChange</docType>
<definition>eDoc.RequestFirewallChange.Form</definition>
<style>eDoc.RequestFirewallChange.Style</style>
<active>true</active>
</association>
</edoclite>
</data>
\\ # Define fields
<edl name="eDoc.RequestFirewallChange.Form" title="Request Firewall Change">
<security />
<createInstructions>** Fields with an asterisk are required.</createInstructions>
<instructions>** Questions with an asterisk are required.</instructions>
<validations />
<attributes />
<fieldDef name="dateOfChange" title="Date and Time for Change">
<display>
<type>text</type>
</display>
</fieldDef>
<fieldDef name="descriptionOfChange" title="Description of the Port Change">
<display>
<type>textarea</type>
</display>
</fieldDef>
<fieldDef name="ingressEgressCharacteristic" title="Ingress/Egress Characteristic">
<display>
<type>textarea</type>
</display>
</fieldDef>
<fieldDef name="destinationSourceSpecification" title="Destination/Source Specification">
<display>
<type>textarea</type>
</display>
</fieldDef>
<fieldDef name="termOfRuleChange" title="Term of Rule Change (indefinite or otherwise)">
<display>
<type>text</type>
</display>
</fieldDef>
<fieldDef name="relatedProject" title="Project Related to Requested Rule(s) Change">
<display>
<type>text</type>
</display>
</fieldDef>
</edl>
\\ # Add field details
<edl name="eDoc.RequestFirewallChange.Form" title="Request Firewall Change">
<security />
<createInstructions>** Fields with an asterisk are required.</createInstructions>
<instructions>** Questions with an asterisk are required.</instructions>
<validations />
<attributes />
<fieldDef name="dateOfChange" title="Date and Time for Change">
<display>
<type>text</type>
</display>
</fieldDef>
<fieldDef name="descriptionOfChange" title="Description of the Port Change">
<display>
<type>textarea</type>
<meta>
<name>rows</name>
<value>5</value>
</meta>
<meta>
<name>cols</name>
<value>60</value>
</meta>
<meta>
<name>wrap</name>
<value>hard</value>
</meta>
</display>
</fieldDef>
<fieldDef name="ingressEgressCharacteristic" title="Ingress/Egress Characteristic">
<display>
<type>textarea</type>
<meta>
<name>rows</name>
<value>5</value>
</meta>
<meta>
<name>cols</name>
<value>60</value>
</meta>
<meta>
<name>wrap</name>
<value>hard</value>
</meta>
</display>
</fieldDef>
<fieldDef name="destinationSourceSpecification" title="Destination/Source Specification">
<display>
<type>textarea</type>
<meta>
<name>rows</name>
<value>5</value>
</meta>
<meta>
<name>cols</name>
<value>60</value>
</meta>
<meta>
<name>wrap</name>
<value>hard</value>
</meta>
</display>
</fieldDef>
<fieldDef name="termOfRuleChange" title="Term of Rule Change (indefinite or otherwise)">
<display>
<type>text</type>
<meta>
<name>size</name>
<value>50</value>
</meta>
</display>
</fieldDef>
<fieldDef name="relatedProject" title="Project Related to Requested Rule(s) Change">
<display>
<type>text</type>
<meta>
<name>size</name>
<value>50</value>
</meta>
</display>
</fieldDef>
</edl>
\\ # Add field validation
<edl name="eDoc.RequestFirewallChange.Form" title="Request Firewall Change">
<security />
<createInstructions>** Fields with an asterisk are required.</createInstructions>
<instructions>** Questions with an asterisk are required.</instructions>
<validations />
<attributes />
<fieldDef name="dateOfChange" title="Date and Time for Change">
<display>
<type>text</type>
</display>
<validation required="true">
<regex>^0-1?0-9(/|)0-3?0-9(/|)1-20-90-90-9$</regex>
<message>Enter a valid date in the format mm/dd/yyyy.</message>
</validation>
</fieldDef>
<fieldDef name="descriptionOfChange" title="Description of the Port Change">
<display>
<type>textarea</type>
<meta>
<name>rows</name>
<value>5</value>
</meta>
<meta>
<name>cols</name>
<value>60</value>
</meta>
<meta>
<name>wrap</name>
<value>hard</value>
</meta>
</display>
<validation required="true">
<message>Enter a description of the port change.</message>
</validation>
</fieldDef>
<fieldDef name="ingressEgressCharacteristic" title="Ingress/Egress Characteristic">
<display>
<type>textarea</type>
<meta>
<name>rows</name>
<value>5</value>
</meta>
<meta>
<name>cols</name>
<value>60</value>
</meta>
<meta>
<name>wrap</name>
<value>hard</value>
</meta>
</display>
<validation required="true">
<message>Enter the ingress/egress characteristic.</message>
</validation>
</fieldDef>
<fieldDef name="destinationSourceSpecification" title="Destination/Source Specification">
<display>
<type>textarea</type>
<meta>
<name>rows</name>
<value>5</value>
</meta>
<meta>
<name>cols</name>
<value>60</value>
</meta>
<meta>
<name>wrap</name>
<value>hard</value>
</meta>
</display>
<validation required="true">
<message>Enter the destination/source specification.</message>
</validation>
</fieldDef>
<fieldDef name="termOfRuleChange" title="Term of Rule Change (indefinite or otherwise)">
<display>
<type>text</type>
<meta>
<name>size</name>
<value>50</value>
</meta>
</display>
<validation required="true">
<message>Enter term of the rule change.</message>
</validation>
</fieldDef>
<fieldDef name="relatedProject" title="Project Related to Requested Rule(s) Change">
<display>
<type>text</type>
<meta>
<name>size</name>
<value>50</value>
</meta>
</display>
<validation required="true">
<message>Enter a related project to the requested rule change.</message>
</validation>
</fieldDef>
</edl>
\\ h3. Defining the Style Sheet to Render the Form # Setup the Styelsheet Skeleton
<style name="eDoc.RequestFirewallChange.Style">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my-class="xalan://edu.iu.uis.eden.edl.WorkflowFunctions" version="1.0">
<xsl:include href="widgets" />
<xsl:output indent="yes" method="html" omit-xml-declaration="yes" version="4.01" />
<xsl:variable name="actionable" select="/documentContent/documentState/actionable" />
<xsl:variable name="docHeaderId" select="/documentContent/documentState/docId" />
<xsl:variable name="editable" select="/documentContent/documentState/editable" />
<xsl:variable name="globalReadOnly" select="/documentContent/documentState/editable != 'true'" />
<xsl:variable name="docStatus" select="//documentState/workflowDocumentState/status" />
<xsl:variable name="isAtNodeInitiated" select="my-class:isAtNode($docHeaderId, 'Initiated')" />
<xsl:variable name="isPastInitiated" select="my-class:isNodeInPreviousNodeList('Initiated', $docHeaderId)" />
<xsl:variable name="isUserInitiator" select="my-class:isUserInitiator($docHeaderId)" />
<xsl:param name="overrideMain" select="'true'" />
<xsl:template name="mainForm">
<html xmlns="">
<head>
<script language="javascript" />
<xsl:call-template name="htmlHead" />
</head>
<body onload="onPageLoad()">
<xsl:call-template name="errors" />
<xsl:call-template name="header" />
<xsl:call-template name="instructions" />
<xsl:variable name="formTarget" select="'EDocLite'" />
<form action="{$formTarget}" enctype="multipart/form-data" id="edoclite" method="post" onsubmit="return validateOnSubmit(this)">
<xsl:call-template name="hidden-params" />
<xsl:call-template name="mainBody" />
<xsl:call-template name="notes" />
<br />
<xsl:call-template name="buttons" />
<br />
</form>
<xsl:call-template name="footer" />
</body>
</html>
</xsl:template>
<xsl:template name="mainBody">
</xsl:template>
<xsl:template name="nbsp">
<xsl:text disable-output-escaping="yes"> </xsl:text>
</xsl:template>
</xsl:stylesheet>
</style>
\\ # Define the mainBody
<xsl:template name="mainBody">
$docStatus=<xsl:value-of select="$docStatus" /> -->
<table xmlns="" align="center" border="0" cellpadding="0" cellspacing="0" class="bord-r-t" width="80%">
<tr>
<td align="left" border="3" class="thnormal" colspan="1">
<br />
<h3>
University of California, Davis
<br />
eDoclite Tutorial
</h3>
<br />
</td>
<td align="center" border="3" class="thnormal" colspan="2">
<br />
<h2>Request Firewall Change Form</h2>
</td>
</tr>
<tr>
<td class="headercell5" colspan="100%">
<b>Request Details</b>
</td>
</tr>
<tr>
<td class="thnormal">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'dateOfChange'" />
<xsl:with-param name="renderCmd" select="'title'" />
</xsl:call-template>
<font color="#ff0000">*</font>
</td>
<td class="datacell">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'dateOfChange'" />
<xsl:with-param name="renderCmd" select="'input'" />
<xsl:with-param name="readOnly" select="$isPastInitiated" />
</xsl:call-template>
</td>
</tr>
<tr>
<td class="thnormal">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'descriptionOfChange'" />
<xsl:with-param name="renderCmd" select="'title'" />
</xsl:call-template>
<font color="#ff0000">*</font>
</td>
<td class="datacell">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'descriptionOfChange'" />
<xsl:with-param name="renderCmd" select="'input'" />
<xsl:with-param name="readOnly" select="$isPastInitiated" />
</xsl:call-template>
</td>
</tr>
<tr>
<td class="thnormal">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'ingressEgressCharacteristic'" />
<xsl:with-param name="renderCmd" select="'title'" />
</xsl:call-template>
<font color="#ff0000">*</font>
</td>
<td class="datacell">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'ingressEgressCharacteristic'" />
<xsl:with-param name="renderCmd" select="'input'" />
<xsl:with-param name="readOnly" select="$isPastInitiated" />
</xsl:call-template>
</td>
</tr>
<tr>
<td class="thnormal">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'destinationSourceSpecification'" />
<xsl:with-param name="renderCmd" select="'title'" />
</xsl:call-template>
<font color="#ff0000">*</font>
</td>
<td class="datacell">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'destinationSourceSpecification'" />
<xsl:with-param name="renderCmd" select="'input'" />
<xsl:with-param name="readOnly" select="$isPastInitiated" />
</xsl:call-template>
</td>
</tr>
<tr>
<td class="thnormal">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'termOfRuleChange'" />
<xsl:with-param name="renderCmd" select="'title'" />
</xsl:call-template>
<font color="#ff0000">*</font>
</td>
<td class="datacell">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'termOfRuleChange'" />
<xsl:with-param name="renderCmd" select="'input'" />
<xsl:with-param name="readOnly" select="$isPastInitiated" />
</xsl:call-template>
</td>
</tr>
<tr>
<td class="thnormal">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'relatedProject'" />
<xsl:with-param name="renderCmd" select="'title'" />
</xsl:call-template>
<font color="#ff0000">*</font>
</td>
<td class="datacell">
<xsl:call-template name="widget_render">
<xsl:with-param name="fieldName" select="'relatedProject'" />
<xsl:with-param name="renderCmd" select="'input'" />
<xsl:with-param name="readOnly" select="$isPastInitiated" />
</xsl:call-template>
</td>
</tr>
</table>
<br xmlns="" />
</xsl:template>
\\ h3. Defining the Workgroups
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="ns:workflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ns:workflow resource:WorkflowData">
<workgroups xmlns="ns:workflow/Workgroup" xsi:schemaLocation="ns:workflow/Workgroup resource:Workgroup">
<workgroup>
<workgroupName>eDoc.FirewallPolicyGroup.Workgroup</workgroupName>
<description>Firewall Policy Group for Firewall Change Requests</description>
<members>
<authenticationId>FPG1</authenticationId>
<authenticationId>FPG2</authenticationId>
</members>
</workgroup>
</workgroups>
</data>
Ingest XML Files
- Ingest widgets.xml
- Ingest Workgroups
- Ingest Document Type
- Ingest EDL Definition
Reference
https://test.kuali.org/confluence/display/KULRICE/EDocLite+Documentation+Guide
https://test.kuali.org/confluence/display/KULRICE/eDocLite+Components+Detail#eDocLiteComponentsDetail-xsltdetail
https://test.kuali.org/confluence/display/KULRICE092/Workgroup+Guide