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 ?!
http://wiki.alfresco.com/wiki/Forms http://wiki.alfresco.com/wiki/Share_Advanced_Search Learn More!

PLAT-14 Forms Config, Customization, and Extension

  • 1.
    Forms Config, Customization,& Extension! Gavin Cornwell, Development Manager, Services Team, Alfresco!
  • 2.
    Agenda! •  Where Forms Are 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> <typename="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> … <constraint type="MANDATORY” validation-handler="...mandatory” event="keyup" /> <constraint type="NUMBER” validation-handler=”...number” event="keyup" /> ... </constraint-handlers>
  • 15.
    Dependencies! <dependencies> <csssrc=” /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.
    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!
  • 34.
    Tips! •  Forms DevelopmentKit (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.