Video that accompanies these slides at: http://www.youtube.com/watch?v=v6cDIO7P5o8
Share v4.0 now gives developers, partners and implementors the ability to customize & extend the Share Document Library without having to either write or duplicate large amounts of code. This session will highlight the changes made to both the Repository and Web tier webscripts and show how new actions and custom metadata can be configured, often without touching a line of code! Some familiarity with the workings of the Document Library will be beneficial, as will general knowledge about configuring Share.
2. Agenda
1 Overview: What were the Swift goals?
2 Data Webscript Refactoring
3 Share Refactoring
4 Indicator icons
5 Metadata templates
6 Actions
7 Evaluators
3. Overview: What were the Swift goals?
• To give developers, partners and
implementors the ability to customize
& extend the Share Document Library
without having to either write or
duplicate large amounts of code.
• Allowing modules such as Web
QuickStart and Records Management
to be fully isolated from “core” Share
code.
4. V3.4 Unofficial Extension Points
Custom UI
New Filters
New Actions
Custom UI
New Filters
New Actions
Custom UI
New Actions
New Actions
New Filters
5. V4.0 Extension Points
• Repository tier
o All node properties & aspects retrieved
o Custom property decorators
• Web tier
o Definitions appear ONCE in Share config!
o Status indicators
o Metadata templates for custom property
rendering
o Actions redefined and regrouped
6. V4.0 Extension Points
Custom UI (New Actions)
(Custom Metadata)
Custom UI New Actions
New Filters Custom Metadata
New Actions
New Filters
Custom Response
Custom Property Decorators
7. Repository Tier: Refactored Webscripts
• “documentlibrary-v2” data webscripts
• evaluator.lib.js
o Much smaller
o Only handles links and working copies
• filters.lib.js still in use, but “path” queries
no longer use Lucene
• Most of the work done via
o org.alfresco.repo.jscript.ApplicationScriptUtils
o and SlingshotDocLibCustomResponse
8. Repository Tier: Property Decorators
• applicationScriptUtils bean
o <property name="decoratedProperties">
<map>
<entry key="cm:creator">
<ref bean="usernamePropertyDecorator"/>
</entry>
…
</map>
o Augment JSON response for that property
• userName
• firstName, lastName, displayName
9. Repository Tier: Custom Response
• slingshotDocLibCustomResponse bean
o <property name=”customResponses">
<map>
<entry key=”vtiServer">
<ref bean="doclibCustomVtiServer"/>
</entry>
…
</map>
o Populates custom JSON response in metadata /
custom section
• port, host
• or null if the module is not installed
10. Web Tier: Indicators
• Configured & evaluated on web tier
<indicator id="google-docs-locked" index="10">
<evaluator>evaluator.doclib.indicator.googleDocsLocked</evaluator>
<labelParam index="0">{jsNode.properties.owner.displayName}</labelParam>
<labelParam index="1">{jsNode.properties.owner.userName}</labelParam>
<override>locked</override>
</indicator>
o evaluator(s) - Bean Id of existing or custom JSON
evaluator
o labelParam(s) - Substituted at runtime from node
o override(s) – deactivates existing indicator
15. Document Library: Actions
• Three main action types:
o “link” – external link or link to content
o “pagelink” – to another Share page (e.g. details)
o “javascript” – client-side action
o Configurable javascript actions
• onActionSimpleRepoAction
e.g. Simple Workflow approve/reject
• onActionFormDialog
e.g. Transform (to image), Run Action
– Not assigned an actionGroup OOTB
16. Document Library: JavaScript Actions
• Sometimes client-side code is required
o e.g. gathering user input
• Register a custom action handler
YAHOO.Bubbling.fire("registerAction",
{
actionName: ”onActionGeotag",
fn: function geotag_onActionGeotag(record)
{
…
}
});
18. Document Library: Action Groups
• Default groups
<actionGroup id="document-browse">
<actionGroup id="document-details">
<actionGroup id="folder-browse">
<actionGroup id="folder-details">
<actionGroup id="document-link-browse">
<actionGroup id="document-link-details">
<actionGroup id="folder-link-browse">
<actionGroup id="folder-link-details">
• Group name calculated in overridable
web tier “calculateActionGroupId”
function
20. Document Library: Web Tier Evaluators
• Simple Java class: extend BaseEvaluator,
implement evaluator, return boolean
• Predefined evaluators:
o Has aspect o Always false
o Is mimetype o Value-based
o Property Not Null o Metadata value
o Site Preset o Is browser (type)
o Site / No Site o Is Portlet mode
o Container type
o Node type Also evaluator chaining
21. Client-side Extensions
• Include via config extension
<config evaluator="string-compare" condition="DocLibCustom">
<dependencies>
<css src="my-custom-action.css" />
<js src="my-custom-action.js" />
</dependencies>
</config>
• Relative to /share/res servlet
• Included after OOTB code to allow for
customization and extension
24. Summary
• All indicator, metadata template and
action config centralised &
extendable.
• Completely refactored Document
Library web tier actions config – not
backward compatible with pre-4.0.
• However, old Remote API “doclist”
data webscripts still in-place.