SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Share Document Library Extension Points
 Mike Hatfield • Senior UI Engineer • twitter @mikehatfield
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
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.
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
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
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
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
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
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
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
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>
Document Library: Metadata Templates
  <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>



•  Optional label (space-separated)
•  Optional line-based evaluator
•  Simple and/or Detailed view
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 "...";
         }
       });
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>
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
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)
           {
             …
           }
         });
Document Library: Action Groups

•  Reference & order actions
    <actionGroups>
     <actionGroup id="document-browse">
       ...
       <action index="200" id="document-edit-online" />
       …
     </actionGroup>

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

•  Override label, icon for action re-use
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
Document Library: Action Examples

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


•  …or conditionally (e.g. WCMQS site)
   <!-- Publish document: Disable for non-WCMQS sites -->
   <action id="document-publish">
     <evaluator negate="true">
         wcmqs.evaluator.doclib.action.isWebsiteContainerType
     </evaluator>
   </action>
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
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
Client-side Extensions

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



•  Custom action
    YAHOO.Bubbling.fire("registerAction",
    {
      actionName: "onActionGeotag",
      fn: function geotag_onActionGeotag(record)
      …
Demo
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.
Questions?
The open platform for
social content management.

Más contenido relacionado

La actualidad más candente

SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote Authentication
Adil Ansari
 
SharePoint 2010 Client-side Object Model
SharePoint 2010 Client-side Object ModelSharePoint 2010 Client-side Object Model
SharePoint 2010 Client-side Object Model
Phil Wicklund
 
SharePoint 2010 Application Development Overview
SharePoint 2010 Application Development OverviewSharePoint 2010 Application Development Overview
SharePoint 2010 Application Development Overview
Rob Windsor
 
Are you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsAre you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint Apps
Liam Cleary [MVP]
 
Taking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST APITaking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST API
Eric Shupps
 
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
SharePoint Saturday NY
 
SPTechCon - Share point and jquery essentials
SPTechCon - Share point and jquery essentialsSPTechCon - Share point and jquery essentials
SPTechCon - Share point and jquery essentials
Mark Rackley
 
Hdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed SolutionsHdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed Solutions
woutervugt
 

La actualidad más candente (20)

SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote Authentication
 
SharePoint 2010 Client-side Object Model
SharePoint 2010 Client-side Object ModelSharePoint 2010 Client-side Object Model
SharePoint 2010 Client-side Object Model
 
SharePoint 2010 Application Development Overview
SharePoint 2010 Application Development OverviewSharePoint 2010 Application Development Overview
SharePoint 2010 Application Development Overview
 
Are you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsAre you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint Apps
 
Go Fullstack: JSF for Public Sites (CONFESS 2012)
Go Fullstack: JSF for Public Sites (CONFESS 2012)Go Fullstack: JSF for Public Sites (CONFESS 2012)
Go Fullstack: JSF for Public Sites (CONFESS 2012)
 
Taking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST APITaking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST API
 
Working With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentWorking With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps Development
 
Javascript Application Architecture with Backbone.JS
Javascript Application Architecture with Backbone.JSJavascript Application Architecture with Backbone.JS
Javascript Application Architecture with Backbone.JS
 
Go Fullstack: JSF for Public Sites (CONFESS 2013)
Go Fullstack: JSF for Public Sites (CONFESS 2013)Go Fullstack: JSF for Public Sites (CONFESS 2013)
Go Fullstack: JSF for Public Sites (CONFESS 2013)
 
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
 
The Future of Plugin Dev
The Future of Plugin DevThe Future of Plugin Dev
The Future of Plugin Dev
 
SPTechCon - Share point and jquery essentials
SPTechCon - Share point and jquery essentialsSPTechCon - Share point and jquery essentials
SPTechCon - Share point and jquery essentials
 
Introduction to SharePoint 2013 REST API
Introduction to SharePoint 2013 REST APIIntroduction to SharePoint 2013 REST API
Introduction to SharePoint 2013 REST API
 
SP Rest API Documentation
SP Rest API DocumentationSP Rest API Documentation
SP Rest API Documentation
 
Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...
Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...
Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...
 
SharePoint solution developer exam 70-488
SharePoint solution developer exam 70-488SharePoint solution developer exam 70-488
SharePoint solution developer exam 70-488
 
Hdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed SolutionsHdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed Solutions
 
Integrating Plone with E-Commerce and Relationship Management: A Case Study i...
Integrating Plone with E-Commerce and Relationship Management: A Case Study i...Integrating Plone with E-Commerce and Relationship Management: A Case Study i...
Integrating Plone with E-Commerce and Relationship Management: A Case Study i...
 
SharePoint and jQuery Essentials
SharePoint and jQuery EssentialsSharePoint and jQuery Essentials
SharePoint and jQuery Essentials
 
2/15/2012 - Wrapping Your Head Around the SharePoint Beast
2/15/2012 - Wrapping Your Head Around the SharePoint Beast2/15/2012 - Wrapping Your Head Around the SharePoint Beast
2/15/2012 - Wrapping Your Head Around the SharePoint Beast
 

Similar a CUST-1 Share Document Library Extension Points

WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 

Similar a CUST-1 Share Document Library Extension Points (20)

Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
DirectToWeb 2.0
DirectToWeb 2.0DirectToWeb 2.0
DirectToWeb 2.0
 
Grails patterns and practices
Grails patterns and practicesGrails patterns and practices
Grails patterns and practices
 
CUST-2 New Client Configuration & Extension Points in Share
CUST-2 New Client Configuration & Extension Points in ShareCUST-2 New Client Configuration & Extension Points in Share
CUST-2 New Client Configuration & Extension Points in Share
 
Tech talk live share extras extension modules feb 13
Tech talk live   share extras extension modules feb 13Tech talk live   share extras extension modules feb 13
Tech talk live share extras extension modules feb 13
 
Visualforce
VisualforceVisualforce
Visualforce
 
Rails 3 (beta) Roundup
Rails 3 (beta) RoundupRails 3 (beta) Roundup
Rails 3 (beta) Roundup
 
How to Contribute to Apache Usergrid
How to Contribute to Apache UsergridHow to Contribute to Apache Usergrid
How to Contribute to Apache Usergrid
 
Staying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPStaying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHP
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
 
Creation&imitation
Creation&imitationCreation&imitation
Creation&imitation
 
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
 
Training in Android with Maven
Training in Android with MavenTraining in Android with Maven
Training in Android with Maven
 
AAI-1713 Introduction to Java EE 7
AAI-1713 Introduction to Java EE 7AAI-1713 Introduction to Java EE 7
AAI-1713 Introduction to Java EE 7
 
AAI 1713-Introduction to Java EE 7
AAI 1713-Introduction to Java EE 7AAI 1713-Introduction to Java EE 7
AAI 1713-Introduction to Java EE 7
 
JS Essence
JS EssenceJS Essence
JS Essence
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Django Overview
Django OverviewDjango Overview
Django Overview
 
Using the Cascade Server Web Service API, by Artur Tomusiak
Using the Cascade Server Web Service API, by Artur TomusiakUsing the Cascade Server Web Service API, by Artur Tomusiak
Using the Cascade Server Web Service API, by Artur Tomusiak
 
J query
J queryJ query
J query
 

Más de Alfresco Software

Más de Alfresco Software (20)

Alfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossierAlfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossier
 
Alfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day Benelux Hogeschool Inholland Records Management applicationAlfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day Benelux Hogeschool Inholland Records Management application
 
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Saxion HogescholenAlfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
 
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: Customer Success Showcase - Gemeente AmsterdamAlfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
 
Alfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: The success of AlfrescoAlfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: The success of Alfresco
 
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Customer Success Showcase - Credendo GroupAlfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
 
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day BeNelux: Digital Transformation - It's All About FlowAlfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
 
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
 
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
 
Alfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Alfrescos neue Rest APIAlfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Alfrescos neue Rest API
 
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Support Tools für die Admin-KonsoleAlfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
 
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Entwickeln mit AlfrescoAlfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
 
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
 
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Partner Lightning Talk: WesternacherAlfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
 
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
 
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novumAlfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
 
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
 
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
 
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - SafranAlfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
 
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Warsaw 2016: Advancing the Flow of Digital BusinessAlfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business
 

Último

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

CUST-1 Share Document Library Extension Points

  • 1. Share Document Library Extension Points Mike Hatfield • Senior UI Engineer • twitter @mikehatfield
  • 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
  • 11. 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>
  • 12. Document Library: Metadata Templates <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> •  Optional label (space-separated) •  Optional line-based evaluator •  Simple and/or Detailed view
  • 13. 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 "..."; } });
  • 14. 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>
  • 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) { … } });
  • 17. Document Library: Action Groups •  Reference & order actions <actionGroups> <actionGroup id="document-browse"> ... <action index="200" id="document-edit-online" /> … </actionGroup> <actionGroup id="document-details"> <actionGroup id=“folder-browse”> ... •  Override label, icon for action re-use
  • 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
  • 19. Document Library: Action Examples •  Completely disable an action <config evaluator="string-compare" condition="DocLibActions"> <actions> <action id="document-upload-new-version"> <evaluator>evaluator.doclib.action.disableAction</evaluator> </action> <actions> </config> •  …or conditionally (e.g. WCMQS site) <!-- Publish document: Disable for non-WCMQS sites --> <action id="document-publish"> <evaluator negate="true"> wcmqs.evaluator.doclib.action.isWebsiteContainerType </evaluator> </action>
  • 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
  • 22. Client-side Extensions •  Custom template YAHOO.Bubbling.fire("registerRenderer", { propertyName: "exposure", renderer: function exif_renderer(record, label) … •  Custom action YAHOO.Bubbling.fire("registerAction", { actionName: "onActionGeotag", fn: function geotag_onActionGeotag(record) …
  • 23. Demo
  • 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.
  • 26. The open platform for social content management.