Professional Documents
Culture Documents
KC is heavily dependant on Rice Learn best practices for customizing and enhancing
KC for your institution
KC has both Unit and Integration tests Integration tests require a test database Web tests are recorded with Selenium IDE and
exported to Java
Heavily inherited from Rice Business Objects Java POJO; encapsulate domain model OJB ORM tool; map database tables to Business Objects Data dictionary Rice component; describe BO fields and
how to display/validate them at the UI level, and relationships between Bos
Struts MVC framework Spring IoC container, service bean factory, transaction
management
KC Architecture
9
KC Architecture
10
11
13
Custom Attributes
14
15
War overlays merge dependant war project together Allows certain files to be overrriden enabling
customizations
So this is all great but what is the downside? Overlays increase build time Overlays dont work with all IDE tooling/maven plugins it is
getting better though!
See
http://maven.apache.org/plugins/maven-war-plugin/ overlays.html for more info.
18
Embedded Architecture
20
21
2.2.
The keystore is also located in the server distribution under the security directory.
Rice Keystore
22
keystore.file - The location of the keystore keystore.alias - The alias used in creating the
keystore above
Rice Keystore
23
24
KC ships with a dummy authentication filter New filters can be registered in kc-config.xml Can be integrated with KIM
26
Questionnaire
27
28
Extended Attributes record is not required. KIM services can be overridden to retrieve person
information from other institutional sources.
Person Management
29
30
Out of the box groups are typically workflow groups Derived roles based on project roles defined on the
document
Exercise 12: Create and Maintain Roles and Permissions using KIM Screens
33
Exercise 13: Create and Maintain Roles and Permissions using Direct SQL
38
KC Document
Maintenance Document
PropDev Document
KC Document Hierarchy
40
KEW Features
41
Route Nodes Details about each node Route Path plus Route Nodes is referred to as the
Process Definition
Many different types of nodes but we will look at 3: requests, role, dynamic.
Approval Request
First, build the route path. Need to keep the split for proposal hierarchy. Will
talk more about split nodes later.
Rule-based requests node Again, we use Xpath to tell KEW how to find the data
it needs to make a routing decision, then specify a rule for that data
Departmental Routing
49
Departmental Routing
50
<ruleAttribute> <name>DepartmentApprovalAttribute</name> <className>org.kuali.rice.kew.rule.xmlrouting.StandardGenericXMLRuleAttribute</ className> <type>RuleXmlAttribute</type> <serviceNamespace>KC</serviceNamespace> <routingConfig> <fieldDef name="leadUnitNumber" title="Lead Unit" workflowType="RULE"> <display><type>text</type></display> <validation required="false" /> <fieldEvaluation> <xpathexpression>wf:xstreamsafe('//document/developmentProposalList[1]/ org.kuali.kra.proposaldevelopment.bo.DevelopmentProposal/ownedByUnitNumber')= wf:ruledata('leadUnitNumber')</xpathexpression> </ruleAttribute>
Departmental Routing
51
<rule> <name>DepartmentApprovalRule</name> <documentType>ProposalDevelopmentDocument</documentType> <ruleTemplate>DepartmentApproval</ruleTemplate> <description>Department Approval Routing Rule for IN-CARD</description> <forceAction>false</forceAction> <ruleExtensions> <ruleExtension> <attribute>DepartmentApprovalAttribute</attribute> <ruleTemplate>DepartmentApproval</ruleTemplate> <ruleExtensionValues> <ruleExtensionValue> <key>leadUnitNumber</key> <value>IN-CARD</value> </ruleExtensions> <responsibilities> <responsibility> <principalName>chew</principalName> <actionRequested>A</actionRequested> <priority>1</priority> </responsibility> </rule>
Departmental Routing
52
Departmental Routing
54
55
Route based on responsibilities, which are tied to Roles In KC we use derived and assigned Roles for routing
Route to PI / CO-PIs / Key Investigators Based on KIM Role, not rules Will send to Roles with ProposalPersons responsibility for this Proposal See responsibility screen
<ruleAttribute> <name>ProposalPersons-XPathQualifierResolver</name> <className>org.kuali.rice.kew.role.XPathQualifierResolver</className> <resolverConfig> <qualifier name="proposal"> <xPathExpression>//document/developmentProposalList[1]/ org.kuali.kra.proposaldevelopment.bo.DevelopmentProposal[1]/proposalNumber[1] </xPathExpression> </qualifier> </resolverConfig> </ruleAttribute>
60
61
edu.iu.uits.kra.workflow.engin.node.hierarchyrouting.SimpleHierarchyProvid er
<rule> <name>hierarchy-UA-VPIT-Approver</name> <documentType>ProposalDevelopmentDocument</documentType> <description>Unit Approver for UA-VPIT</description> <forceAction>true</forceAction> <responsibilities> <responsibility> <principalName>lsalander</principalName> <actionRequested>A</actionRequested> <priority>1</priority> </responsibility> </responsibilities> </rule>
Hierarchy Provider
67
Split nodes are composed of Branches Every split must have a corresponding Join Splits within splits are supported
<split name = "isHierarchyChild"> <branch name = "False"> <requests name="OSPInitial" nextNode="ProposalPersons" /> .. </branch> <branch name = "True"> <!-- The document is a child in a hierarchy. This node will have the system user as an approver. If the parent moves to final approval, is rejected, or cancelled the system user will take the same action on the children. --> <requests name = "WaitForHierarchyDisposition" nextNode="Join"/> </branch> </split> <join name="Join"/>
<routeNodes> <split name="isHierarchyChild"> <type>org.kuali.kra.kew.SimpleBooleanSplitNode</type> </split> <requests name="WaitForHierarchyDisposition"> <activationType>S</activationType> <ruleTemplate>HierarchyParentDispositionApproval</ruleTemplate> <mandatoryRoute>true</mandatoryRoute> <ignorePrevious>true</ignorePrevious> <finalApproval>false</finalApproval> </requests> <join name="Join"/>
71
Further Learning
72
73
74
75