Analysis JIRA:

Google Doc Gap Analysis


KNS Feature

Implemented in KRAD



Support for a "Use Transactional Document" permission which was used to control the availability of various sections/features of the document. One of the permission details was an "editMode", which predates the KIM conversion. It was a simple string flag which was stored in the request and checked by the JSP code (and business rules) to determine what the user could do with the document at the present time.

This feature was also used to present completely different views on a few KFS documents.

(error) KULRICE-10772

UXI Prioritized

Ideally,other KRAD features should be used to replace the concept of "editMode", but that may not be practical upon the initial conversion. It will need to be supported, but could be deprecated as a backwards-compatability/conversion-support feature only.

In KNS JSP files, these were typically checked as below:

<c:if test="${!empty KualiForm.editingMode['amendmentEntry']}">


Ability to "copy" a transactional document.

"copy" was a new action which could be taken on transactional documents. It checked the allowed actions (as given by the presentation controller (which checked the document class for the "Copyable" interface AND checked the DD for the allowsCopy attribute), and filtered by the document authorizer. (which checked the "Copy Document" permission)

(warning) Permission check is missing in the transactional document controller!

The Copyable interface is probably unnecessary. It likely pre-dates the attribute on the DD. The interface has the toCopy method. But, there is likely no reason that we could not remove that interface and add toCopy to the base Document interface and then control this from the DD. (The method is there already.)

The main reason is that there is always code needed to copy a document. But, if we can provide a generic behavior of toCopy, that should not be a problem. (BTW - the implementation assumes that you have already loaded the document you want to copy and then want to make that instance into the copy. (Which means fully detaching from JPA and then changing the PK fields throughout.)

T3Semi-support for non-session documents. org.kuali.rice.krad.document.TransactionalDocumentBase contains an isSessionDocument() method. This should be removed, as all documents are session documents these days.(error) 
T4Mappings of Struts Form and Action classes needed to be done via the struts-config.xml files.(tick)Not needed in KRAD since View model is completely different and the use of Spring MVC replaces this configuration model.
T5Display of custom header fields at the top (see page.tag) if added into the Form data.(tick)KFS uses this to display additional document status information as well as document linking information. (for correction documents)

QUESTION (JR):  KRAD provides support for defining your header with whatever form fields you would like through the view configuration.  KNS automatically creates the header based on the contents of KualiForm.docInfo (done in page.tag).  Does this need to be included in KRAD even though it can be done through configuration of the form?
T6Display of custom header navigation tabs provided by the Form.(tick)

I assume this would be replaced with standard KRAD View setup, as the use of page.tag will be removed.

QUESTION (JR):  KRAD provides support for defining your header navigation with whatever form fields you would like through the view configuration.  KNS automatically creates the header navigation based on the contents of KualiForm.headerNavigationTabs (done in page.tag).  Does this need to be included in KRAD even though it can be done through configuration of the form?

T7Automatic display of the document title (as stored in the label of the KEW document type)

(error) KULRICE-10775

UXI Prioritized

T8Automatic display of the "template" document number. This is populated in the baseline code when a document is copied from another.

(error) KULRICE-10775

UXI Prioritized

T9Like the maintenance documents, supports an instance of PromptBeforeValidation and DerivedValuesSetter in the DD.(tick) 
T10Like maintenance documents, can provide a list of custom JS script files in the DD.(tick) 
T11In the DD, ability to provide a list of additional header navigation links which will be rendered automatically. See the file reference below for the attributes available on this class.(tick)

Not used by KFS at all. Probably there for KC screens. I'm assuming this will be replaced by KRAD view definitions.

However, we should make sure that it is possible to turn on/off tabs dynamically as part of the View lifecycle, since that is the reason that links like this would be built into the DD and not part of the JPS layer.

T12Retaining of tab open/closed state between requests.(tick) 
T13Ability to render fields and labels using standard custom tags by passing in the appropriate AttributeDefinition entry. (Or Map represenation thereof.)(tick)


<kul:htmlAttributeHeaderCell />
<kul:htmlAttributeLabel />
<kul:htmlAttributeHeaderCell />

<kul:htmlControlAttribute />
T14Ability to add custom methods to the action/controller class which can be invoked via the standard "methodToCall" syntaxes.(tick) 
T15Ability to override baseline action/controller methods to add behavior. (Overriding code is still responsible for calling the superclass.)(tick)Consider allowing the registration of additional customization "hooks" which can be registered for baseline events. This would allow for custom methods to be called and not rely on superclass functions being called. This would allow the baseline code to always run and then call through the list of custom hooks at the appropriate time(s). (before/after hooks?)
T16Ability to intercept the methodToCall processing and tweak before the requested method gets called. (Struts execute() method.)(tick) 
T17Connection to PessimisticLockService to block pre-routing document actions if the check fails.(error) 
T18Support of the concept of "document exiting"-type actions which change behavior. Values are stored in the session which allow actions to be taken after the action is complete.(error)It seems to be related to clearing the Form objects from memory (the UserSession) and partly for pessimistic locking clearing.
T19Support for prompting users for a note/workflow annotation when taking certain types of workflow actions (cancel/disapprove/etc...)

(error) KULRICE-10756

UXI Prioritized

T20Ability to intercept/customize the form field to data object bindings by overriding the populate() method on the Struts Form class.(tick) 
T21Ability to override the base "parent" beans used in most DD definitions for the client applications to add/change defaults and add new properties and behaviors.(tick)

For examples, see KFS:



Involved Classes



Finished Analysis

Struts Classes







Most of the methods on this class are left-over cruft from KFS. (formatReversalDate)

forcedReadOnlyFields is only used in a single place in all of KFS

(warning) Performs special setting of empty select lists and checkboxes to make sure they get blanked or set to false even when the attribute was not set by the browser.

org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase (tick)
org.kuali.rice.kns.web.struts.form.KualiForm (tick)
org.kuali.rice.kns.web.struts.form.pojo.PojoFormBase (tick)
General Classes  
org.kuali.rice.krad.document.TransactionalDocumentBase (tick)
org.kuali.rice.kns.web.ui.HeaderFieldUI Holder for page.tag to use to display the document header fields.(tick)
org.kuali.rice.kns.util.ActionFormUtilMapA class which should die! Was placed in the Form to allow for configuration of some items which were difficult in the KNS. It should no longer be necessary in KRAD.(tick)

JSP/Tag Files


(No JSP Files - The master JSP for each transactional document was custom. They would use the base custom tag files plus those added by the client applications.) (tick)


Displayed the appropriate buttons at the bottom of the document page. Also had the ability for extra buttons to be displayed before the standard buttons if they were added to some properties on the base Form class.

/rice-web/src/main/webapp/WEB-INF/tags/kr/documentOverview.tag (tick)
/rice-web/src/main/webapp/WEB-INF/tags/kr/documentPage.tag (tick)

Displayed the document header information (doc #, initiator, etc...)


/rice-web/src/main/webapp/WEB-INF/tags/kr/documentOverview.tag (tick)







Data Dictionary Classes





protected String headerTabMethodToCall;
protected String headerTabNavigateTo;
protected String headerTabDisplayName;
protected HelpDefinition helpDefinition;
protected boolean disabled = false;

org.kuali.rice.kns.datadictionary.KNSDocumentEntry (tick)
Presentation Controller and Authorization  
org.kuali.rice.krad.document.DocumentPresentationControllerBase (tick)


(empty placeholder)