SlideShare a Scribd company logo
1 of 51
Download to read offline
Customizing Share Best Practices!
      Will Abson, Senior Solutions Engineer

                    @wabson!
       Jeff Potts, Chief Community Officer!
                  @jeffpotts01!
“Best Practices” Disclaimer!

•  We’ve done a lot of Share customization
   implementation work
 •  BUT, things are changing quickly!


•  “Best Practice” is more succinct than “things we
   really feel strongly about based on all of the work
   we’ve done so far”

•  It would be great to get community feedback on
   these recommendations and ones we’ve missed
Customizing Share!

Evolution of Alfresco UI customization




         Image: http://en.wikipedia.org/wiki/File:Human_evolution_scheme.svg
What Can I Customize?!
What Can I Customize?!
What Can I Customize?!
High Level Architecture!




                       Web	
  Scripts	
  




                       Web	
  Scripts	
  
Share Architecture!
Share Architecture!
Best Practice Recommendations!

1.    Methodology
2.    Team Structure
3.    Project Folder Structure and Build Tools
4.    Packaging
5.    Namespaces
6.    Development Tools and Frameworks
7.    Documentation
8.    Testing
Use an Iterative Customization Process!

Lightweight technologies allow rapid iteration
Example: Content Expiration Add-on!

Sprint 1           Sprint 2            Sprint 3
Repository         Share dashlet and   Share dashlet and
customisations and web script JSON     custom page
HTML web script    template


                                               -click-

                           -click-
Rec 1.1: Develop iteratively where possible (e.g.
                    Sprints)

Divide Team by Tier!

•  If new repo tier web scripts are needed
 1.  Agree on a contract (URLs, Responses)!
 2.  Stub out JSON!
 3.  Create tests using the agreed to contract and stubs!
 4.  Work on each tier in parallel!
 5.  Integrate, test, go-live, repeat!
Divide Team by Tier!

•  Can be tougher to split out Share tier versus “UI
   development” aka YUI expertise
 1.  Designer creates pages!
 2.  UI person translates into markup!
 3.  Share tier developer puts markup in a template!
 4.  Gradually replace static bits with dynamic
     components!
Rec 2.1: Divide up the work by Tier

Project Structure Recommendations!

•  Separate your source from your deployment
 •  i.e., Donʼt create your project inside the webapp!!
 •  Choose an appropriate structure!
•  Choose a build tool to deploy your code
 •  Even for simple projects!
 •  Working right from the start!
 •  Project structure may be dictated by your build tool!
Build Tools!

•  Apache Ant
 •  Used by most Alfresco projects and modules and by Share
    Extras (see Sample Dashlet project)!
 •  Pros – lightweight, simple!
 •  Cons – no dependency management, lack of task
    standardization!
•  Apache Maven
 •  Used by Spring Surf!
 •  Pros – Standardized project structures and targets!
 •  Cons – More complex, can be slow, no public Enterprise
    Maven repo!
Example Ant Project Structure!

•  Source folder config
   contains classpath
   resources
•  Source folder source/web
   contains client-side assets
•  Local folder build used for
   compilation, assembly, etc.
 •  Normally not added to revision
    control!
Example Ant Build Script (build.xml)!

•  Suitable for most simple Share add-ons
•  Build packages ready for deployment
 •  By default builds a JAR-file extension!
 •  But also supports other formats!
•  Support for hot-copying exploded files into a local
   webapp for testing
•  Optional tasks (can be commented out if not required)
 •  JS compression using YUI Compressor (requires
    yuicompressor-2.4.2.jar and yui-compressor-ant-task-0.5.jar)!
 •  Web script reloading via HTTP (requires ml-ant-http-1.1.1.jar)!
•  Can be customized by adding additional build scripts
Example Folder Structure: Sample Dashlet!

http://code.google.com/p/share-extras/wiki/SampleProject
Example Maven Project Structure!

•  Source folder src/main/
   resources contains (most)
   classpath resources
 •  Sub-folder META-INF contains
    client-side assets!
 •  Sub-folder webscripts contains
    web script resources!
•  Local folder target used for
   compilation, assembly, etc.
 •  Normally not added to revision
    control!
Rec 3.1: Separate your source code

Rec 3.2: Use Ant or Maven to build!
Packaging Options!

1. Copy into exploded Share WAR
2. Create a JAR that includes everything, drop into
   WEB-INF/lib OR $TOMCAT_HOME/shared lib
3. Create an AMP

•  Recommendation: Use JAR approach whenever
   possible

•  Shameless plug: addons.alfresco.com
Packaging: JAR vs. AMP!

JAR	
  file	
  format	
                                            AMP	
  file	
  format	
  
Standard	
  file	
  format,	
  based	
  on	
  ZIP	
  format.	
   Same	
  ZIP	
  format,	
  but	
  supports	
  custom	
  
No	
  support	
  for	
  metadata	
  yet,	
  but	
  JAR	
        deployment-­‐Eme	
  file	
  mappings	
  and	
  
supports	
  it	
  via	
  MANIFEST	
  file.	
                     addiEonal	
  module	
  metadata	
  
Deploy	
  by	
  copying	
  into	
  tomcat/shared/lib	
            Deploy	
  directly	
  into	
  the	
  webapp	
  using	
  
or	
  similar	
  or	
  into	
  WEB-­‐INF/lib	
  (Java	
           Alfresco	
  Module	
  Management	
  Tool	
  (MMT)	
  
classloading	
  restricEons)	
  
Same	
  JAR	
  can	
  contain	
  repository	
  and	
  Share	
     Requires	
  one	
  file	
  for	
  Share	
  and	
  another	
  for	
  
customisaEons,	
  or	
  separate	
  JARs	
  can	
  be	
           repository	
  
used	
  
Uninstall	
  by	
  removing	
  the	
  JAR	
  file	
                Uninstall	
  requires	
  a	
  back-­‐up	
  of	
  the	
  original	
  
                                                                  WAR	
  file	
  (created	
  by	
  MMT	
  by	
  default)	
  
Rec 4.1: Distribute JARs whenever possible

   Rec 4.2: Distribute AMPs elsewhere

 Rec 4.3: Copy into WAR for local testing!
Namespace Recommendations!

•  Used to ensure your identifiers are unique
•  Namespaces exist everywhere
 •  Web scripts use web script package!
   •  e.g. org/mycompany/share/sample/myscript.get
 •  Client-side assets use folder path and object namespaces!
   •  e.g. mycompany/components/sample/sprite.png,
      MyCompany.dashlet.HelloWorldDashlet!
 •  Spring bean IDs use dot notation!
   •  e.g. mycompany.share.sample.css!
 •  Content models use URLs and prefixes!
 •  AMP module IDs use package structure with underscores!
•  Do not re-use Alfresco namespaces
 •  Even if they are not explicit!
Example Namespaces: Sample Dashlet!
Rec 5.1: Define your own namespaces

Development Tools!

•  Eclipse used by Alfresco developers (
 •  Large collection of plug-ins, e.g.!
   •  Web Developer Tools (JavaScript, CSS, HTML, XML)!
   •  Freemarker (part of JBoss tools)!
   •  Spring Surf and SpringSource tools (part of STS)!
 •  http://code.google.com/p/share-extras/wiki/
    DevelopmentEnvironment!
 •  Alternatives are IntelliJ or <whatever you like!>!
•  Spring Surf tools
 •  Web scripts index!
 •  JavaScript (Rhino) debugger!
 •  SurfBug tool – new in 4.0!
   •  http://blogs.alfresco.com/wp/ddraper/2011/08/31/surfbug/!
Development Tools!

•  Browser plug-ins
 •  Firebug for Firefox!
 •  Chrome JavaScript debugger!
•  Share components for
   development
 •  Node Browser!
 •  JavaScript Console – now with
    code completion!!
•  More Information
 •  http://blogs.alfresco.com/wp/
    kevinr/2010/04/07/developer-
    tips-for-alfresco-share-33/!
Development Settings!

•  Turn on Share development settings
 •  Caching, JS debug mode, logging!
 •  See comments in share-config-custom.xml.sample
•  Deploy Share and Alfresco in separate Tomcat
   containers for testing
 •  Massive time-saver!
 •  Must set different port numbers!!

                                        Rec: Two Tomcats
Development Frameworks – Donʼt reinvent the
wheel!
•  Server-side frameworks
 •    Spring Framework!
 •    Spring Surf!
 •    Spring Web Scripts!
 •    Share extension points!
      •  Dashlets, Admin Console Components!
      •  Document Library and Data List actions!
•  Client-side frameworks
 •  YUI 2.9.0 (from 4.0, previously 2.8.1)!
 •  JQuery 1.5.2 (from 4.0)!
 •  Alfresco client-side JavaScript!
Rec: Mashup/re-use Whatʼs Already There!
Spring Web Scripts!

•  Share web scripts must be placed on the classpath
•  Core configuration defines multiple container folders
   for web scripts
 •  Like the repository, folders can override each other based on web
    script path!
 •  Use alfresco/site-webscripts for your own scripts!
 •  Use alfresco/web-extension/site-webscripts if you are
    overriding existing scripts!
   •  But remember you donʼt need to override all files!
•  Differently-named from repository web script folders
 •  So repository and Share web scripts can co-exist in the same project
    structure!
Spring Surf Extensibility!

•  New in 4.0 / Spring Surf 1.0
•  Define add-on modules for Spring Surf
 •  Much more flexible than old method of overriding web scripts!
 •  Dynamically enable/disable and update modules!
•  Add, extend or remove page components
•  Implementation via sub-components
 •  Breaking down of Surf page components!
 •  Old component definitions will still work!
   •  Converted internally to new-style components with a single sub-component
      with ID default
•  See http://blogs.alfresco.com/wp/ddraper/
Extending Alfresco JavaScript!

    Use the standard pattern and extend
    Alfresco.component.Base
(function()
{
   ...
   Alfresco.dashlet.SiteTags = function SiteTags_constructor(htmlId)
   {
       return Alfresco.dashlet.SiteTags.superclass.constructor.call(this,
   "Alfresco.dashlet.SiteTags", htmlId, ["button"]);
   };

     YAHOO.extend(Alfresco.dashlet.SiteTags, Alfresco.component.Base,
     {
        options:
        {
            ...
        },
        onReady: function SiteTags_onReady()
        {
            ...
            // This is where the action happens
        },
        ...
     }
}
Extending Alfresco JavaScript!

•  Use Alfresco utility classes and methods
 •  Alfresco.util.Ajax for loading data!
 •  Alfresco.util.Anim for fading and resizing!
 •  Alfresco.module.SimpleDialog for modal dialogs!
 •  Other useful methods!
   •  Alfresco.util.encodeHTML() and Alfresco.util.decodeHTML()
   •  Alfresco.util.createYUIButton()
   •  Alfresco.util.parseJSON()

•  Full docs at http://sharextras.org/jsdoc/
Extending Alfresco JavaScript!
•  Declare your own custom
   JS namespaces
if (typeof MyCompany == "undefined" || !MyCompany)
{
   var MyCompany = {};
}
if (typeof MyCompany.dashlet == "undefined" || !
  MyCompany.dashlet)
{
   MyCompany.dashlet = {};
}
Extending Alfresco JavaScript!

•  Override client-side JS methods using object prototype OR
   (better) using YAHOO.extend(), YAHOO.lang.augmentProto()
   and YAHOO.lang.augmentObject()
// Override "icon" column in My Tasks     MyCompany.component.TaskList = ...
  list                                    YAHOO.extend
Alfresco.component.TaskList.prototype.r     (MyCompany.component.TaskList,
  enderCellTaskInfo = function              Alfresco.component.TaskList, {
  Acme_TL_renderCellTaskInfo(elCell,         renderCellTaskInfo: function
  oRecord, oColumn, oData)                  Acme_TL_renderCellTaskInfo(elCell,
  {                                         oRecord, oColumn, oData)
    elCell.innerHTML = <custom code         {
  goes here>;                                 elCell.innerHTML = <custom code
  };                                        goes here>;
                                            };
                                          });
Examples from Erik Winlöf’s 2010 talk More Ways of Customizing Share and
  RecordsDocumentList component in Share DOD5015.2 Module
Rec 6.1: Set up your development environment
                   correctly

      Rec 6.2: Work with the frameworks

 Rec 6.3: Understand Share extension points

  Rec 6.4: Re-use Alfresco objects and utils

      Rec 6.5: Minimize code duplication!
Documentation Recommendations!
•  Client-side documentation
 •  Use JSDoc annotations within comments!
 •  JsDoc Toolkit is used by Share Extras to generate HTML
    summaries, with custom ʻAlfrescoʼ template – see
    http://code.google.com/p/share-extras/wiki/JSDoc!
 •  Yahooʼs YUI Doc is another option -
    http://developer.yahoo.com/yui/yuidoc/!
•  Web script documentation
 •  Use <description> element in web script descriptor to
    describe the script itself, plus itʼs parameters and response
    format!
   •  Document all args in <url> element!
Example JSDoc comments: Sample Dashlet!
Rec 7.1: Document all web scripts and client-side code!
Testing Recommendations!

•  Have a repeatable approach, right from the start
•  A framework is provided for testing both Presentation
   and Repository web scripts
 •  Different test harness classes used for each!
•  Testing may be interactive (when developing) or
   automated (unit tests)
 •  Interactive testing avoids the need to do time-consuming build-
    deploy cycles!
 •  Unit tests can use helper methods to test correctness of their output
    – and is recommended for all data web scripts!
   •  Note: Java unit tests required!
•  http://wiki.alfresco.com/wiki/3.0_Web_Scripts_Testing
Testing Recommendations!

•  Test your whole application as well as components
 •  Selenium used by Alfresco QA team!
Rec 8.1: Unit test your data web scripts

 Rec 8.2: Test your whole application !
Other interesting examples!
•  Share Extras
 •    JavaScript Console!
 •    CSV/JSON bulk load of users!
 •    Google dashlets!
 •    +34 other useful examples!
•  FME Alfresco Extensions
•  Dashlet Challenge 2011 Submissions (~12)
 •  See wiki for complete list of all submissions and links!
•  Records Management Module
•  Web Quick Start Share customizations
Help Wanted / Gauge Interest!

•  Metaversant Five Star Ratings Widget
 •  Might refactor using new extensibility features and publish
    the lessons learned as a tutorial!
•  Port of SomeCo Developer Guide Examples
 •  Code mostly done for 3.3/3.4—needs to be cleaned up,
    posted, docʼd!
 •  Needs to be refactored for 4.0!
•  Collaboratively-authored Share Developer Guide
   on wiki or under Creative Commons?
•  Share Extras 4.0 Plans
Conclusions!


•  Customization opens up new possibilities, but
•  Set up your environment
•  Understand the frameworks
•  Use an appropriate project structure
•  Consider which packaging format is best for you
•  Don’t forget testing and documentation
will.abson@alfresco.com

        @wabson

jeff.potts@alfresco.com

       @jeffpotts01!

More Related Content

What's hot

Alfresco 5.0 Technology Review
Alfresco 5.0 Technology ReviewAlfresco 5.0 Technology Review
Alfresco 5.0 Technology ReviewZia Consulting
 
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIBuilding Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIJeff Potts
 
Super Fast Application development with Mura CMS
Super Fast Application development with Mura CMSSuper Fast Application development with Mura CMS
Super Fast Application development with Mura CMSColdFusionConference
 
Load Balancing, Failover and Scalability with ColdFusion
Load Balancing, Failover and Scalability with ColdFusionLoad Balancing, Failover and Scalability with ColdFusion
Load Balancing, Failover and Scalability with ColdFusionColdFusionConference
 
Intro To Alfresco Part 2
Intro To Alfresco Part 2Intro To Alfresco Part 2
Intro To Alfresco Part 2Jeff Potts
 
Mobile Hybrid Development with WordPress
Mobile Hybrid Development with WordPressMobile Hybrid Development with WordPress
Mobile Hybrid Development with WordPressDanilo Ercoli
 
Improve WordPress performance with caching and deferred execution of code
Improve WordPress performance with caching and deferred execution of codeImprove WordPress performance with caching and deferred execution of code
Improve WordPress performance with caching and deferred execution of codeDanilo Ercoli
 
WordPress Development Tools and Best Practices
WordPress Development Tools and Best PracticesWordPress Development Tools and Best Practices
WordPress Development Tools and Best PracticesDanilo Ercoli
 
Intro To Alfresco Part 3
Intro To Alfresco Part 3Intro To Alfresco Part 3
Intro To Alfresco Part 3Jeff Potts
 
AEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly toolsAEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly toolsAshokkumar T A
 
AEM - Binary less replication
AEM - Binary less replicationAEM - Binary less replication
AEM - Binary less replicationAshokkumar T A
 
10 Reasons ColdFusion PDFs should rule the world
10 Reasons ColdFusion PDFs should rule the world10 Reasons ColdFusion PDFs should rule the world
10 Reasons ColdFusion PDFs should rule the worldColdFusionConference
 
Hey My Web App is Slow Where is the Problem
Hey My Web App is Slow Where is the ProblemHey My Web App is Slow Where is the Problem
Hey My Web App is Slow Where is the ProblemColdFusionConference
 

What's hot (20)

Alfresco 5.0 Technology Review
Alfresco 5.0 Technology ReviewAlfresco 5.0 Technology Review
Alfresco 5.0 Technology Review
 
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIBuilding Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco API
 
Super Fast Application development with Mura CMS
Super Fast Application development with Mura CMSSuper Fast Application development with Mura CMS
Super Fast Application development with Mura CMS
 
Require js training
Require js trainingRequire js training
Require js training
 
Load Balancing, Failover and Scalability with ColdFusion
Load Balancing, Failover and Scalability with ColdFusionLoad Balancing, Failover and Scalability with ColdFusion
Load Balancing, Failover and Scalability with ColdFusion
 
ColdFusion builder plugins
ColdFusion builder pluginsColdFusion builder plugins
ColdFusion builder plugins
 
A Bit of REST
A Bit of RESTA Bit of REST
A Bit of REST
 
Intro To Alfresco Part 2
Intro To Alfresco Part 2Intro To Alfresco Part 2
Intro To Alfresco Part 2
 
Fluxible
FluxibleFluxible
Fluxible
 
Mobile Hybrid Development with WordPress
Mobile Hybrid Development with WordPressMobile Hybrid Development with WordPress
Mobile Hybrid Development with WordPress
 
Improve WordPress performance with caching and deferred execution of code
Improve WordPress performance with caching and deferred execution of codeImprove WordPress performance with caching and deferred execution of code
Improve WordPress performance with caching and deferred execution of code
 
WordPress Development Tools and Best Practices
WordPress Development Tools and Best PracticesWordPress Development Tools and Best Practices
WordPress Development Tools and Best Practices
 
Hidden Gems in ColdFusion 2016
Hidden Gems in ColdFusion 2016Hidden Gems in ColdFusion 2016
Hidden Gems in ColdFusion 2016
 
Intro To Alfresco Part 3
Intro To Alfresco Part 3Intro To Alfresco Part 3
Intro To Alfresco Part 3
 
AEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly toolsAEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly tools
 
AEM - Binary less replication
AEM - Binary less replicationAEM - Binary less replication
AEM - Binary less replication
 
Cfml features modern_coding
Cfml features modern_codingCfml features modern_coding
Cfml features modern_coding
 
10 Reasons ColdFusion PDFs should rule the world
10 Reasons ColdFusion PDFs should rule the world10 Reasons ColdFusion PDFs should rule the world
10 Reasons ColdFusion PDFs should rule the world
 
Command box
Command boxCommand box
Command box
 
Hey My Web App is Slow Where is the Problem
Hey My Web App is Slow Where is the ProblemHey My Web App is Slow Where is the Problem
Hey My Web App is Slow Where is the Problem
 

Similar to BP-7 Share Customization Best Practices

Tech talk live alfresco add ons
Tech talk live alfresco add onsTech talk live alfresco add ons
Tech talk live alfresco add onsAlfresco Software
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUlrich Krause
 
PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfAlfresco Software
 
PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfAlfresco Software
 
PLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfPLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfAlfresco Software
 
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsBP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsAlfresco Software
 
Apex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEXApex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEXSergei Martens
 
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Nicole Szigeti
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPagesUlrich Krause
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the BasicsUlrich Krause
 
APEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdfAPEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdfRichard Martens
 
PLAT-5 Jive, Dropbox & Other Integrations
PLAT-5 Jive, Dropbox & Other IntegrationsPLAT-5 Jive, Dropbox & Other Integrations
PLAT-5 Jive, Dropbox & Other IntegrationsAlfresco Software
 
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slides
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slidesKeep Your Code Organized! WordCamp Montreal 2013 Presentation slides
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slidesJer Clarke
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platformAlfresco Software
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat OverviewMandi Walls
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich Krause
 
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San JoseTypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San JoseSteve Reiner
 
CUST-3 Document Management with Share
CUST-3 Document Management with ShareCUST-3 Document Management with Share
CUST-3 Document Management with ShareAlfresco Software
 

Similar to BP-7 Share Customization Best Practices (20)

Tech talk live alfresco add ons
Tech talk live alfresco add onsTech talk live alfresco add ons
Tech talk live alfresco add ons
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
 
PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring Surf
 
PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring Surf
 
PLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfPLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring Surf
 
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsBP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
 
Apex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEXApex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEX
 
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPages
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics
 
APEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdfAPEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdf
 
PLAT-5 Jive, Dropbox & Other Integrations
PLAT-5 Jive, Dropbox & Other IntegrationsPLAT-5 Jive, Dropbox & Other Integrations
PLAT-5 Jive, Dropbox & Other Integrations
 
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slides
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slidesKeep Your Code Organized! WordCamp Montreal 2013 Presentation slides
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slides
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platform
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat Overview
 
Upgrading to Alfresco 6
Upgrading to Alfresco 6Upgrading to Alfresco 6
Upgrading to Alfresco 6
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San JoseTypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
 
CUST-3 Document Management with Share
CUST-3 Document Management with ShareCUST-3 Document Management with Share
CUST-3 Document Management with Share
 

More from Alfresco Software

Alfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossierAlfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossierAlfresco Software
 
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 applicationAlfresco Software
 
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 HogescholenAlfresco Software
 
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 AmsterdamAlfresco Software
 
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 AlfrescoAlfresco Software
 
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 GroupAlfresco Software
 
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 FlowAlfresco Software
 
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 Software
 
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 Software
 
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 APIAlfresco Software
 
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-KonsoleAlfresco Software
 
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 AlfrescoAlfresco Software
 
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 Software
 
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: WesternacherAlfresco Software
 
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 Software
 
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-novumAlfresco Software
 
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 Software
 
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 Software
 
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 - SafranAlfresco Software
 
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 BusinessAlfresco Software
 

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

Recently uploaded

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 

Recently uploaded (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

BP-7 Share Customization Best Practices

  • 1. Customizing Share Best Practices! Will Abson, Senior Solutions Engineer
 @wabson! Jeff Potts, Chief Community Officer! @jeffpotts01!
  • 2. “Best Practices” Disclaimer! •  We’ve done a lot of Share customization implementation work •  BUT, things are changing quickly! •  “Best Practice” is more succinct than “things we really feel strongly about based on all of the work we’ve done so far” •  It would be great to get community feedback on these recommendations and ones we’ve missed
  • 3. Customizing Share! Evolution of Alfresco UI customization Image: http://en.wikipedia.org/wiki/File:Human_evolution_scheme.svg
  • 4. What Can I Customize?!
  • 5. What Can I Customize?!
  • 6. What Can I Customize?!
  • 7. High Level Architecture! Web  Scripts   Web  Scripts  
  • 10. Best Practice Recommendations! 1.  Methodology 2.  Team Structure 3.  Project Folder Structure and Build Tools 4.  Packaging 5.  Namespaces 6.  Development Tools and Frameworks 7.  Documentation 8.  Testing
  • 11. Use an Iterative Customization Process! Lightweight technologies allow rapid iteration
  • 12. Example: Content Expiration Add-on! Sprint 1 Sprint 2 Sprint 3 Repository Share dashlet and Share dashlet and customisations and web script JSON custom page HTML web script template -click- -click-
  • 13. Rec 1.1: Develop iteratively where possible (e.g. Sprints)

  • 14. Divide Team by Tier! •  If new repo tier web scripts are needed 1.  Agree on a contract (URLs, Responses)! 2.  Stub out JSON! 3.  Create tests using the agreed to contract and stubs! 4.  Work on each tier in parallel! 5.  Integrate, test, go-live, repeat!
  • 15. Divide Team by Tier! •  Can be tougher to split out Share tier versus “UI development” aka YUI expertise 1.  Designer creates pages! 2.  UI person translates into markup! 3.  Share tier developer puts markup in a template! 4.  Gradually replace static bits with dynamic components!
  • 16. Rec 2.1: Divide up the work by Tier

  • 17. Project Structure Recommendations! •  Separate your source from your deployment •  i.e., Donʼt create your project inside the webapp!! •  Choose an appropriate structure! •  Choose a build tool to deploy your code •  Even for simple projects! •  Working right from the start! •  Project structure may be dictated by your build tool!
  • 18. Build Tools! •  Apache Ant •  Used by most Alfresco projects and modules and by Share Extras (see Sample Dashlet project)! •  Pros – lightweight, simple! •  Cons – no dependency management, lack of task standardization! •  Apache Maven •  Used by Spring Surf! •  Pros – Standardized project structures and targets! •  Cons – More complex, can be slow, no public Enterprise Maven repo!
  • 19. Example Ant Project Structure! •  Source folder config contains classpath resources •  Source folder source/web contains client-side assets •  Local folder build used for compilation, assembly, etc. •  Normally not added to revision control!
  • 20. Example Ant Build Script (build.xml)! •  Suitable for most simple Share add-ons •  Build packages ready for deployment •  By default builds a JAR-file extension! •  But also supports other formats! •  Support for hot-copying exploded files into a local webapp for testing •  Optional tasks (can be commented out if not required) •  JS compression using YUI Compressor (requires yuicompressor-2.4.2.jar and yui-compressor-ant-task-0.5.jar)! •  Web script reloading via HTTP (requires ml-ant-http-1.1.1.jar)! •  Can be customized by adding additional build scripts
  • 21. Example Folder Structure: Sample Dashlet! http://code.google.com/p/share-extras/wiki/SampleProject
  • 22. Example Maven Project Structure! •  Source folder src/main/ resources contains (most) classpath resources •  Sub-folder META-INF contains client-side assets! •  Sub-folder webscripts contains web script resources! •  Local folder target used for compilation, assembly, etc. •  Normally not added to revision control!
  • 23. Rec 3.1: Separate your source code
 Rec 3.2: Use Ant or Maven to build!
  • 24. Packaging Options! 1. Copy into exploded Share WAR 2. Create a JAR that includes everything, drop into WEB-INF/lib OR $TOMCAT_HOME/shared lib 3. Create an AMP •  Recommendation: Use JAR approach whenever possible •  Shameless plug: addons.alfresco.com
  • 25. Packaging: JAR vs. AMP! JAR  file  format   AMP  file  format   Standard  file  format,  based  on  ZIP  format.   Same  ZIP  format,  but  supports  custom   No  support  for  metadata  yet,  but  JAR   deployment-­‐Eme  file  mappings  and   supports  it  via  MANIFEST  file.   addiEonal  module  metadata   Deploy  by  copying  into  tomcat/shared/lib   Deploy  directly  into  the  webapp  using   or  similar  or  into  WEB-­‐INF/lib  (Java   Alfresco  Module  Management  Tool  (MMT)   classloading  restricEons)   Same  JAR  can  contain  repository  and  Share   Requires  one  file  for  Share  and  another  for   customisaEons,  or  separate  JARs  can  be   repository   used   Uninstall  by  removing  the  JAR  file   Uninstall  requires  a  back-­‐up  of  the  original   WAR  file  (created  by  MMT  by  default)  
  • 26. Rec 4.1: Distribute JARs whenever possible
 Rec 4.2: Distribute AMPs elsewhere
 Rec 4.3: Copy into WAR for local testing!
  • 27. Namespace Recommendations! •  Used to ensure your identifiers are unique •  Namespaces exist everywhere •  Web scripts use web script package! •  e.g. org/mycompany/share/sample/myscript.get •  Client-side assets use folder path and object namespaces! •  e.g. mycompany/components/sample/sprite.png, MyCompany.dashlet.HelloWorldDashlet! •  Spring bean IDs use dot notation! •  e.g. mycompany.share.sample.css! •  Content models use URLs and prefixes! •  AMP module IDs use package structure with underscores! •  Do not re-use Alfresco namespaces •  Even if they are not explicit!
  • 29. Rec 5.1: Define your own namespaces

  • 30. Development Tools! •  Eclipse used by Alfresco developers ( •  Large collection of plug-ins, e.g.! •  Web Developer Tools (JavaScript, CSS, HTML, XML)! •  Freemarker (part of JBoss tools)! •  Spring Surf and SpringSource tools (part of STS)! •  http://code.google.com/p/share-extras/wiki/ DevelopmentEnvironment! •  Alternatives are IntelliJ or <whatever you like!>! •  Spring Surf tools •  Web scripts index! •  JavaScript (Rhino) debugger! •  SurfBug tool – new in 4.0! •  http://blogs.alfresco.com/wp/ddraper/2011/08/31/surfbug/!
  • 31. Development Tools! •  Browser plug-ins •  Firebug for Firefox! •  Chrome JavaScript debugger! •  Share components for development •  Node Browser! •  JavaScript Console – now with code completion!! •  More Information •  http://blogs.alfresco.com/wp/ kevinr/2010/04/07/developer- tips-for-alfresco-share-33/!
  • 32. Development Settings! •  Turn on Share development settings •  Caching, JS debug mode, logging! •  See comments in share-config-custom.xml.sample •  Deploy Share and Alfresco in separate Tomcat containers for testing •  Massive time-saver! •  Must set different port numbers!! Rec: Two Tomcats
  • 33. Development Frameworks – Donʼt reinvent the wheel! •  Server-side frameworks •  Spring Framework! •  Spring Surf! •  Spring Web Scripts! •  Share extension points! •  Dashlets, Admin Console Components! •  Document Library and Data List actions! •  Client-side frameworks •  YUI 2.9.0 (from 4.0, previously 2.8.1)! •  JQuery 1.5.2 (from 4.0)! •  Alfresco client-side JavaScript!
  • 34. Rec: Mashup/re-use Whatʼs Already There!
  • 35. Spring Web Scripts! •  Share web scripts must be placed on the classpath •  Core configuration defines multiple container folders for web scripts •  Like the repository, folders can override each other based on web script path! •  Use alfresco/site-webscripts for your own scripts! •  Use alfresco/web-extension/site-webscripts if you are overriding existing scripts! •  But remember you donʼt need to override all files! •  Differently-named from repository web script folders •  So repository and Share web scripts can co-exist in the same project structure!
  • 36. Spring Surf Extensibility! •  New in 4.0 / Spring Surf 1.0 •  Define add-on modules for Spring Surf •  Much more flexible than old method of overriding web scripts! •  Dynamically enable/disable and update modules! •  Add, extend or remove page components •  Implementation via sub-components •  Breaking down of Surf page components! •  Old component definitions will still work! •  Converted internally to new-style components with a single sub-component with ID default •  See http://blogs.alfresco.com/wp/ddraper/
  • 37. Extending Alfresco JavaScript! Use the standard pattern and extend Alfresco.component.Base (function() { ... Alfresco.dashlet.SiteTags = function SiteTags_constructor(htmlId) { return Alfresco.dashlet.SiteTags.superclass.constructor.call(this, "Alfresco.dashlet.SiteTags", htmlId, ["button"]); }; YAHOO.extend(Alfresco.dashlet.SiteTags, Alfresco.component.Base, { options: { ... }, onReady: function SiteTags_onReady() { ... // This is where the action happens }, ... } }
  • 38. Extending Alfresco JavaScript! •  Use Alfresco utility classes and methods •  Alfresco.util.Ajax for loading data! •  Alfresco.util.Anim for fading and resizing! •  Alfresco.module.SimpleDialog for modal dialogs! •  Other useful methods! •  Alfresco.util.encodeHTML() and Alfresco.util.decodeHTML() •  Alfresco.util.createYUIButton() •  Alfresco.util.parseJSON() •  Full docs at http://sharextras.org/jsdoc/
  • 39. Extending Alfresco JavaScript! •  Declare your own custom JS namespaces if (typeof MyCompany == "undefined" || !MyCompany) { var MyCompany = {}; } if (typeof MyCompany.dashlet == "undefined" || ! MyCompany.dashlet) { MyCompany.dashlet = {}; }
  • 40. Extending Alfresco JavaScript! •  Override client-side JS methods using object prototype OR (better) using YAHOO.extend(), YAHOO.lang.augmentProto() and YAHOO.lang.augmentObject() // Override "icon" column in My Tasks MyCompany.component.TaskList = ... list YAHOO.extend Alfresco.component.TaskList.prototype.r (MyCompany.component.TaskList, enderCellTaskInfo = function Alfresco.component.TaskList, { Acme_TL_renderCellTaskInfo(elCell, renderCellTaskInfo: function oRecord, oColumn, oData) Acme_TL_renderCellTaskInfo(elCell, { oRecord, oColumn, oData) elCell.innerHTML = <custom code { goes here>; elCell.innerHTML = <custom code }; goes here>; }; }); Examples from Erik Winlöf’s 2010 talk More Ways of Customizing Share and RecordsDocumentList component in Share DOD5015.2 Module
  • 41. Rec 6.1: Set up your development environment correctly
 Rec 6.2: Work with the frameworks
 Rec 6.3: Understand Share extension points
 Rec 6.4: Re-use Alfresco objects and utils
 Rec 6.5: Minimize code duplication!
  • 42. Documentation Recommendations! •  Client-side documentation •  Use JSDoc annotations within comments! •  JsDoc Toolkit is used by Share Extras to generate HTML summaries, with custom ʻAlfrescoʼ template – see http://code.google.com/p/share-extras/wiki/JSDoc! •  Yahooʼs YUI Doc is another option - http://developer.yahoo.com/yui/yuidoc/! •  Web script documentation •  Use <description> element in web script descriptor to describe the script itself, plus itʼs parameters and response format! •  Document all args in <url> element!
  • 43. Example JSDoc comments: Sample Dashlet!
  • 44. Rec 7.1: Document all web scripts and client-side code!
  • 45. Testing Recommendations! •  Have a repeatable approach, right from the start •  A framework is provided for testing both Presentation and Repository web scripts •  Different test harness classes used for each! •  Testing may be interactive (when developing) or automated (unit tests) •  Interactive testing avoids the need to do time-consuming build- deploy cycles! •  Unit tests can use helper methods to test correctness of their output – and is recommended for all data web scripts! •  Note: Java unit tests required! •  http://wiki.alfresco.com/wiki/3.0_Web_Scripts_Testing
  • 46. Testing Recommendations! •  Test your whole application as well as components •  Selenium used by Alfresco QA team!
  • 47. Rec 8.1: Unit test your data web scripts
 Rec 8.2: Test your whole application !
  • 48. Other interesting examples! •  Share Extras •  JavaScript Console! •  CSV/JSON bulk load of users! •  Google dashlets! •  +34 other useful examples! •  FME Alfresco Extensions •  Dashlet Challenge 2011 Submissions (~12) •  See wiki for complete list of all submissions and links! •  Records Management Module •  Web Quick Start Share customizations
  • 49. Help Wanted / Gauge Interest! •  Metaversant Five Star Ratings Widget •  Might refactor using new extensibility features and publish the lessons learned as a tutorial! •  Port of SomeCo Developer Guide Examples •  Code mostly done for 3.3/3.4—needs to be cleaned up, posted, docʼd! •  Needs to be refactored for 4.0! •  Collaboratively-authored Share Developer Guide on wiki or under Creative Commons? •  Share Extras 4.0 Plans
  • 50. Conclusions! •  Customization opens up new possibilities, but •  Set up your environment •  Understand the frameworks •  Use an appropriate project structure •  Consider which packaging format is best for you •  Don’t forget testing and documentation
  • 51. will.abson@alfresco.com
 @wabson
 jeff.potts@alfresco.com
 @jeffpotts01!