Forms Config, Customization, & Extension!
Gavin Cornwell, Development Manager, Services Team, Alfresco!
Agenda!
•  Where Forms Are Used
•  Demo
•  Configuration
•  Customization
•  Extension
•  Q & A
Where Forms Are Used!
Metadata !
Advanced Search!
Workflow !
Datalists !
Actions (4.0)!
Admin Console (4.0)!
Demo!
•  Custom Type
•  Custom Control
•  Advanced Search
•  FDK
• startLocation!
•  Custom “foldername” NodeLocator!
•  Built-in NodeLocators; ancestor, doclib, userhome!
• Unit Test Page!
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 & 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)!
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

Forms config and customisation

  • 1.
    Forms Config, Customization,& Extension! Gavin Cornwell, Development Manager, Services Team, Alfresco!
  • 2.
    Agenda! •  Where FormsAre Used •  Demo •  Configuration •  Customization •  Extension •  Q & A
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
    Demo! •  Custom Type • Custom Control •  Advanced Search •  FDK • startLocation! •  Custom “foldername” NodeLocator! •  Built-in NodeLocators; ancestor, doclib, userhome! • Unit Test Page!
  • 11.
  • 12.
    Global Defaults –form-config.xml
 <config> <forms> <default-controls> ... </default-controls> <constraint-handlers> ... </constraint-handlers> <dependencies> ... </dependencies> </forms> </config>
  • 13.
    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>
  • 14.
    Default Constraint Handlers! <constraint-handlers> … <constrainttype="MANDATORY” validation-handler="...mandatory” event="keyup" /> <constraint type="NUMBER” validation-handler=”...number” event="keyup" /> ... </constraint-handlers>
  • 15.
    Dependencies! <dependencies> <css src=” /accordion/accordion.css"/> <js src=“/accordion/accordion-min.js" /> ... </dependencies>
  • 16.
    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)
  • 17.
    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>
  • 18.
    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>
  • 19.
    Node Form –Screenshot !
  • 20.
    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>
  • 21.
    Node Form –Hiding the ʻAuthorʼ field!
  • 22.
    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>
  • 23.
  • 24.
  • 25.
    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>
  • 26.
    Custom Form Template! <configevaluator="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>!
  • 27.
    Custom Form Template! inwf:resourceTitle   bpm:priority   inwf:inviteeRole   bpm:comment   inwf:inviteOutcome  
  • 28.
  • 29.
    Form Processors! •  PluggableForm 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!
  • 30.
    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
  • 31.
  • 32.
    Whatʼs New in4.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)!
  • 33.
  • 34.
    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
  • 35.
  • 36.