Kuali Rice: eDocLite Conversion (0.9.3 to 1.0.0)
Post date: Oct 19, 2010 6:4:58 PM
I recently completed a technical proof-of-concept project using the eDocLite functionality of Kuali Rice 0.9.3. The project went well, and it resulted in the call for a pilot to begin in early February. Since the proof-of-concept effort, a new version of the Rice framework was released, and it has some fairly dramatic data model and identity management changes. I'm actually having regular nightmares about the data migration process that is underway in our conversion from uPortal 2.6.1 to 3.1.1; therefore, moving forward on a platform that was already losing favor to the new flavor doesn't seem like a prudent choice.Â
In an attempt to avoid such a venture with the Kuali Rice product, I recently installed the latest version of the framework and began slugging away. Lucky for me, most of my hard work remains intact. However, I did find a few gotchas, so I thought I'd share what I had uncovered. There are two main categories of changes that have an impact on the eDocLite workflows. First, a re-factoring that packaged Rice as a product of the Kuali Foundation, replacing the legacy package names that chronicled its history as an open source effort kicked off by some of the key players in higher ed community source. And second, a rewrite that unifies the identity management componentry across all the current Kuali projects (i.e. Financials, Coeus, Student).
I was able to fix issues with the package name refactor through a few simple search and replace operations in my eDocLite source files before importing them using the Rice Ingester:
replace "edu.iu.uis.eden.edl." with "org.kuali.rice.kew.edl."
replace "edu.iu.uis.eden.routetemplate." with "org.kuali.rice.kew.rule."
Keep in mind, that there may be other similar situations, but these are the only ones that I encountered.
The changes prompted by the identity management rewrite are not much more complicated, but they do require a bit more explanation.
Importing Users: The xml syntax for importing users is the same, because the developers used an adapter pattern to map the old xml nodes to the new data model. However, the mappings are not readily apparent, and they don't seem to be documented anywhere yet.
<displayName> and <uuId> doesn't seem to map to anything
<workflowId> maps to krim_prncpl_t.prncpl_id
<authenticationId> maps to krim_prncpl_t.prncpl_nm
<emplId> maps to krim_entity_emp_info_t.emp_id
<emailAddress> maps to krim_entity_email_t.email_addr
<givenName> maps to krim_entity_nm_t.first_nm
<lastName> maps to krim_entity_nm_t.last_nm
Importing Groups: The xml syntax here is quite different mostly due to the need to support group namespaces. Beyond the required changes below, there are also some optional additions. A few good samples of the new format can be found in the kuali source available here.
the container tag <workgroups> changes to <groups>
the container tag <workgroup> changes to <group>
there is a new tag <namespace> for qualifying groups (I used KR-WKFLW for all mine) and maps to krim_grp_t.nmspc_cd
<workgroupName> changes to <name> and maps to krim_grp_t.grp_nm
<description> remains <description> and maps to krim_grp_t.grp_desc
the container tag <members> remains <members>, but the children change:
<authenticationId> changes to <principalName> and maps via krim_prncpl_t.prncpl_id to provide krim_grp_mbr_t.mbr_id
<workgroupName> changes to <group>, and is now a container for <name> and <namespace>, and it maps via krim_grp_t.grp_nm, krim_grp_t.nmspc_cd to provide krim_grp_mbr_t.mbr_id
Referencing Groups: All groups now require a namespace, and an abbreviated syntax is available that works for eDocLite references. This is accomplished by prefixing the group name with the namespace followed by a colon. For example:
<superUserWorkgroupName>rice-admin</superUserWorkgroupName>, becomes
<superUserWorkgroupName>KR-WKFLW:rice-admin</superUserWorkgroupName>
Helper Class: The footprint of the isUserInGroup method found in WorkflowFunctions also changes to accommodate group namespacing (boolean isUserInGroup(String namespace, String groupName)). For example:
<xsl:variable name="authZ" select="my-class:isUserInGroup('rice-admin')"/>, becomes
<xsl:variable name="authZ" select="my-class:isUserInGroup('KR-WKFLW','rice-admin')"/>
After making these modifications, I was able to demonstrate my eDocLite workflows using the latest version of Rice. I believe these same changes will address the needs of most eDocLite conversions; although, I'm sure there are some rocks left unturned. In any case, I hope this helps some folks save some time.