CUST-1 Share Document Library Extension Points

26
Share Document Library Extension Points Mike Hatfield • Senior UI Engineer • twitter @mikehatfield

description

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.

Transcript of CUST-1 Share Document Library Extension Points

Page 1: CUST-1 Share Document Library Extension Points

Share Document Library Extension Points Mike Hatfield • Senior UI Engineer • twitter @mikehatfield

Page 2: CUST-1 Share Document Library Extension Points

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

Page 3: CUST-1 Share Document Library Extension Points

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.

Page 4: CUST-1 Share Document Library Extension Points

V3.4 Unofficial Extension Points

New Actions

New Actions

New Actions

New Actions

Custom UI

Custom UI

Custom UI

New Filters

New Filters

New Filters

Page 5: CUST-1 Share Document Library Extension Points

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

Page 6: CUST-1 Share Document Library Extension Points

V4.0 Extension Points

(New Actions)

New Actions

New Actions

Custom UI

Custom UI

New Filters

New Filters Custom Metadata

(Custom Metadata)

Custom Response

Custom Property Decorators

Page 7: CUST-1 Share Document Library Extension Points

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

Page 8: CUST-1 Share Document Library Extension Points

Repository Tier: Property Decorators

•  applicationScriptUtils bean o  <property name="decoratedProperties">

o  Augment JSON response for that property •  userName •  firstName, lastName, displayName

<map> <entry key="cm:creator"> <ref bean="usernamePropertyDecorator"/> </entry> … </map>

Page 9: CUST-1 Share Document Library Extension Points

Repository Tier: Custom Response

•  slingshotDocLibCustomResponse bean o  <property name=”customResponses">

o  Populates custom JSON response in metadata / custom section •  port, host •  or null if the module is not installed

<map> <entry key=”vtiServer"> <ref bean="doclibCustomVtiServer"/> </entry> … </map>

Page 10: CUST-1 Share Document Library Extension Points

Web Tier: Indicators

• Configured & evaluated on web tier

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

<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>

Page 11: CUST-1 Share Document Library Extension Points

Document Library: Metadata Templates

•  Two predefined templates <metadata-templates> <!-- Default (fallback) --> <template id="default"> <line index="10" id="date">{date}{size}</line> <line index="20" id="description” view=“detailed”>{description}</line> <line index="30" id="tags” view=“detailed”>{tags}</line> <line index="40" id="categories" view=“detailed” evaluator="evaluator.doclib.metadata.hasCategories">{categories}</line> <line index="50" id="social" view=“detailed”>{social}</line> </template>

<!-- Working Copies --> <template id="isWorkingCopy"> <evaluator>evaluator.doclib.metadata.isWorkingCopy</evaluator> <line index="10" id="date">{date}{size}</line> <line index="20" id="description" view=“detailed”>{description}</line> </template> </metadata-templates>

Page 12: CUST-1 Share Document Library Extension Points

Document Library: Metadata Templates

• Optional label (space-separated) • Optional line-based evaluator •  Simple and/or Detailed view

<template id="isPhoto"> <evaluator>evaluator.doclib.metadata.hasExif</evaluator> <line index="10" id="date”>{date}{size}</line> <line index="20" id="exposure” simpleView=“true” evaluator="evaluator.doclib.metadata.hasExposure"> {exposure exif.label.exposure} </line> <line index="30" id="description”>{description}</line> </template>

Page 13: CUST-1 Share Document Library Extension Points

Document Library: Metadata Templates

• Metadata placeholders can be: o  Node property names

•  cm_description (can omit prefix for “cm”) •  exif_fNumber

o  JavaScript renderer, e.g. {exposure}

YAHOO.Bubbling.fire("registerRenderer", { propertyName: "exposure", renderer: function exif_renderer(record, label) { return "..."; } });

Page 14: CUST-1 Share Document Library Extension Points

Document Library: Actions

• Configured & evaluated on web tier <!-- Edit online --> <action id="document-edit-online" type="javascript" label="actions.document.edit-online"> <param name="function">onActionEditOnline</param> <permissions> <permission allow="true">Write</permission> </permissions> <evaluator>evaluator.doclib.action.onlineEdit</evaluator> </action>

Page 15: CUST-1 Share Document Library Extension Points

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

Page 16: CUST-1 Share Document Library Extension Points

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) { … } });

Page 17: CUST-1 Share Document Library Extension Points

Document Library: Action Groups

•  Reference & order actions

• Override label, icon for action re-use

<actionGroups> <actionGroup id="document-browse"> ... <action index="200" id="document-edit-online" /> … </actionGroup>

<actionGroup id="document-details"> <actionGroup id=“folder-browse”> ...

Page 18: CUST-1 Share Document Library Extension Points

Document Library: Action Groups

•  Default groups

• Group name calculated in overridable web tier “calculateActionGroupId” function

<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">

Page 19: CUST-1 Share Document Library Extension Points

Document Library: Action Examples

• Completely disable an action

• …or conditionally (e.g. WCMQS site)

<config evaluator="string-compare" condition="DocLibActions"> <actions> <action id="document-upload-new-version"> <evaluator>evaluator.doclib.action.disableAction</evaluator> </action> <actions> </config>

<!-- Publish document: Disable for non-WCMQS sites --> <action id="document-publish"> <evaluator negate="true"> wcmqs.evaluator.doclib.action.isWebsiteContainerType </evaluator> </action>

Page 20: CUST-1 Share Document Library Extension Points

Document Library: Web Tier Evaluators

o  Has aspect o  Is mimetype o  Property Not Null o  Site Preset o  Site / No Site o  Container type o  Node type

o  Always false o  Value-based o  Metadata value o  Is browser (type) o  Is Portlet mode

Also evaluator chaining

•  Simple Java class: extend BaseEvaluator, implement evaluator, return boolean

•  Predefined evaluators:

Page 21: CUST-1 Share Document Library Extension Points

Client-side Extensions

•  Include via config extension

•  Relative to /share/res servlet •  Included after OOTB code to allow for

customization and extension

<config evaluator="string-compare" condition="DocLibCustom"> <dependencies> <css src="my-custom-action.css" /> <js src="my-custom-action.js" /> </dependencies> </config>

Page 22: CUST-1 Share Document Library Extension Points

Client-side Extensions

• Custom template

• Custom action

YAHOO.Bubbling.fire("registerRenderer", { propertyName: "exposure", renderer: function exif_renderer(record, label) …

YAHOO.Bubbling.fire("registerAction", { actionName: "onActionGeotag", fn: function geotag_onActionGeotag(record) …

Page 23: CUST-1 Share Document Library Extension Points

Demo

Page 24: CUST-1 Share Document Library Extension Points

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.

Page 25: CUST-1 Share Document Library Extension Points

Questions?

Page 26: CUST-1 Share Document Library Extension Points

The open platform for social content management.