Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 34 Next »

Overview

Development Steps

  1. Create Users
  2. Create Workgroups
  3. Create the Parent Document Type
  4. Create the Child Document Type
  5. Create the eDocLite Form
    • Create the Definition
    • Create the Stylesheet
  6. Create the Rule Template
  7. 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

RFC-Users.xml
<?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>requester1</workflowId>
            <emplId>requester1</emplId>
            <authenticationId>requester1</authenticationId>
            <uuId>requester1</uuId>
            <emailAddress>requester1@ucdavis.edu</emailAddress>
            <displayName>Requester One</displayName>
            <givenName>Requester</givenName>
            <lastName>One</lastName>
        </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

RFC-Workgroup.xml
<?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

RFC-ParentDocType.xml
<?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

RFC-ChildDocTypes.xml
<?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

  1. The eDocLite Form Skeleton
    RFC-EDLForm.xml
    <?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>** Fields with an asterisk are required.</instructions>
    		<validations />
    		<attributes />
    	        ...
    	        ...
    	</edl>
    
    	<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">&amp;nbsp;</xsl:text>
    		</xsl:template>
    	</xsl:stylesheet>
    	</style>
    
    	<association>
    		<docType>eDoc.RequestFirewallChange</docType>
    		<definition>eDoc.RequestFirewallChange.Form</definition>
    		<style>eDoc.RequestFirewallChange.Style</style>
        		<active>true</active>
      	</association>
    
    </edoclite>
    </data>
    

  2. Form Definition
    RFC-EDLForm.xml
        <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-2][0-9][0-9][0-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>
    

  3. Form Stylesheet
    RFC-EDLForm.xml
      <xsl:template name="mainBody">
        <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>
    

Create the Rule Template

RFC-RuleTemplate.xml
<?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">
<ruleTemplates xmlns="ns:workflow/RuleTemplate" xsi:schemaLocation="ns:workflow/RuleTemplate resource:RuleTemplate">
	<ruleTemplate>
      	<name>eDoc.RequestFirewallChange.Node1</name>
      	<description>eDocLite RequestFirewallChange Routing</description>
	</ruleTemplate>
</ruleTemplates>
</data>


Create Routing Rules

RFC-RoutingRules.xml
<?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">
<rules xmlns="ns:workflow/Rule" xsi:schemaLocation="ns:workflow/Rule resource:Rule">
	<rule>
      		<documentType>eDoc.RequestFirewallChange</documentType>
      		<ruleTemplate>eDoc.RequestFirewallChange.Node1</ruleTemplate>
      		<description>Routing rule for eDocLite RequestFirewallChange.</description>
      		<ignorePrevious>false</ignorePrevious>
      		<responsibilities>
        		<responsibility>
          			<workgroup>eDoc.FirewallPolicyGroup.Workgroup</workgroup>
          			<actionRequested>A</actionRequested>
          			<priority>1</priority>
        		</responsibility>
      		</responsibilities>
    	</rule>
</rules>
</data>


XML File Ingestion

  1. Open the URL to a Kuali Rice development server (e.g. http://ricedevhost.ucdavis.edu:8080/rice-0.9.3-server/)
  2. Click on Kuali Enterprise Workflow
  3. Log in as admin
  4. Under Administration, click on XML Ingester
  5. Upload the XML files we just created in the following order:
    1. Users: RFC-Users.xml
    2. Workgroups: RFC-Workgroup.xml
    3. Rule Template: RFC-Users.xml
    4. Parent Document Type: RFC-ParentDocType.xml
    5. Child Document Types: RFC-ChildDocTypes.xml
    6. EDL Form: RFC-EDLForm.xml
    7. Routing Rules: RFC-RoutingRules.xml

Simulate the Business Process

  1. Log in as requester1
  2. Click on EDocLites
  3. Click Search
  4. Find the eDocLite whose Definition Name is eDoc.RequestFirewallChange.Form
  5. Click on Create Document
  6. Here's the form we just built:
  7. Fill out the form and click route
  8. Log in as FPG1
  9. Click on Action List
  10. Find the document initiated by requester1. Its status should be ENROUTE
  11. Click on the document and it should look like so:
  12. Click approve
  13. Log in as requester1 again.
  14. Click on Document Search and then Search
  15. Find the document approved by FPG1. It's status should be FINAL
  16. Click on the Log icon
  17. The log should like like so:

Reference

https://test.kuali.org/confluence/display/KULRICE/EDocLite+Documentation+Guide
https://test.kuali.org/confluence/display/KULRICE/eDocLite+Example+1

  • No labels