PLAT-14 Forms Config, Customization, and Extension

Post on 20-Jun-2015

1.746 views 3 download

Tags:

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 of PLAT-14 Forms Config, Customization, and Extension

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