plat-15 forms config, customization, and extension
DESCRIPTION
This session will cover the use of Forms in Share and demonstrate how to configure and customize them for your applications and data models. A working example will be used to show how to define forms for custom types, how out of the box form controls can be configured and how new custom controls can be plugged-in. We’ll also discuss the various extension hook points the Forms Service provides.TRANSCRIPT
Forms Config, Customizaton & Extension Mike Hatfield • Senior UI Engineer • twitter @mikehatfield
Agenda!
• Where Forms Are Used • Configuration • Customization • Extension • Demo • Q & A
Where Forms Are Used!
Metadata !
Advanced Search!
Workflow !
Datalists !
Actions (4.0)!
Admin Console (4.0)!
Configuration!
Global Defaults – form-config.xml <config> <forms> <default-controls> ... </default-controls> <constraint-handlers> ... </constraint-handlers> <dependencies> ... </dependencies> </forms> </config>
Default Controls!<default-controls> <type name="text” template="/org.../textfield.ftl" />
<type name=”datetime” template="/org.../date.ftl”> <control-param name="showTime”> true </control-param> </type> ... </default-controls>
Default Constraint Handlers!<constraint-handlers> … <constraint type="MANDATORY” validation-handler="...mandatory” event="keyup" />
<constraint type="NUMBER” validation-handler=”...number” event="keyup" /> ... </constraint-handlers>
Dependencies!<dependencies> <css src=” /accordion/accordion.css" /> <js src=“/accordion/accordion-min.js" /> ... </dependencies>
Custom Type (dcforms:presentation)!
• Name (d:text) inherited from cm:content • Code (d:text) • Abstract (d:text) • Level (d:text with LIST constraint) • Duration (d:int) • When (d:datetime) • Rating (d:int) • Presenter (association to cm:person)
Node Form – Visibility !<config evaluator="node-type” condition="dcforms:presentation"> <forms> <form> <field-visibility> <show id="dcforms:code" /> <show id="cm:name" /> <show id="dcforms:abstract" /> <show id="dcforms:presenter" /> <show id="dcforms:duration" /> <show id="dcforms:when" /> <show id="dcforms:level" /> <show id="dcforms:rating" /> </field-visibility> <appearance>….</appearance> </form> </forms> </config>
Node Form – Appearance !<appearance> <set id="" label-id="form.set.general” appearance="title”/> <set id="time" label="Time” appearance="title”/> <set id="feedback" label="Feedback" appearance=”panel”/>
<field id="dcforms:abstract"> <control template="/org/…/controls/textarea.ftl" /> </field> <field id="dcforms:rating" set="feedback” /> <field id="dcforms:when" set="time" /> <field id="dcforms:duration" set="time" /> </appearance>
Node Form – Screenshot !
Node Form – Hiding the ʻAuthorʼ field!<config evaluator="node-type" condition="cm:content"> <forms> <form> <field-visibility> <hide id="cm:author" /> </field-visibility> </form> </forms> </config>
Node Form – Hiding the ʻAuthorʼ field!
Search Form!<config evaluator="model-type" condition="dcforms:presentation"> <forms> <form id="search"> <field-visibility> <show id="cm:name" /> <show id="dcforms:code" /> <show id="dcforms:level" /> <show id="dcforms:when" /> </field-visibility> <appearance> <field id="dcforms:when"> <control template="/org/alfresco/components/form/controls/daterange.ftl" /> </field> </appearance> </form> </forms> </config>
Search Form
Customization!
Custom Control – YUI Slider!
• Root location for custom controls • shared/classes/alfresco/web-extension/site-webscripts!
<field id="dcforms:rating" set="feedback"> <control template="/devcon/progress.ftl" /> </field>
Custom Form Template!<config evaluator="task-type" condition="inwf:activitiInvitePendingTask"> <forms> <form> <view-form template="/org/alfresco/components/form/invite-task-form.ftl”/> <edit-form template="/org/alfresco/components/form/invite-task-form.ftl”/> <field-visibility> <show id="inwf:resourceTitle" /> <show id="inwf:resourceDescription" /> <show id="inwf:inviteeRole" /> <show id="bpm:priority" /> <show id="bpm:comment" /> <show id="inwf:inviteOutcome" /> </field-visibility> </form> </forms> </config>!
Custom Form Template!
inwf:resourceTitle bpm:priority
inwf:inviteeRole bpm:comment
inwf:inviteOutcome
Extension!
Form Processors!
• Pluggable Form Processors • Driven by “itemKind”!• Provide implementation to generate and persist form!• OOTB Form Processors!
• Node, Type, Workflow, Task, Action & JMX!
• Form Filter • Allows pre and post processing of fields!
NodeLocatorService (picker startLocation)!
• Returns a NodeRef • Implement NodeLocator Interface • NodeRef getNode(NodeRef, Map<String, Serializable>);!• Specify ID for “startLocation” param value!
• REST API • /api/workspace/SpacesStore/…/nodelocator/ancestor?type=xyz !
• https://wiki.alfresco.com/wiki/NodeLocatorService
Whatʼs New, Demo & Tips!
Whatʼs New in 4.0!
• JMX Form Processor • Action Form Processor • Association Control • Customizable startLocation !• rootNode option (stops navigation beyond node)!
• Category Control • Root node configurable!• Include sub categories option (for search)!
Demo!
• Custom Type • Custom Control • Advanced Search • FDK Unit Test Page • startLocation!
Tips!
• Log4J settings • org.alfresco.repo.forms=debug!• org.alfresco.web.config.forms=debug!• org.alfresco.web.scripts.forms=debug!
• Eclipse (breakpoints) • FormUIGet for UI!• FilteredFormProcessor for server!
Tips!
• Forms Development Kit (FDK) • Form Console (/<app>/page/form-console)!• Unit Test Page (/<app>/page/fdk-unit-tests)!• Debug control & template (dumps model)!
• Cntrl, Cntrl, Shift, Shift
Questions ?!
Learn More!
http://wiki.alfresco.com/wiki/Forms http://wiki.alfresco.com/wiki/Share_Advanced_Search