SlideShare a Scribd company logo
1 of 40
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!
Categories of Recommendations!

•  Methodology
•  Team Structure
•  Project Folder Structure and Build Tools
•  Packaging
•  Namespaces
•  Development Tools and Frameworks
•  Documentation
•  Testing
Rec: Use an Iterative Customization Process!

Lightweight technologies allow rapid iteration
Example: Content Expiration Page!

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: 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!
Rec: 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!
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!
•  Consider using an IDE
 •  Though not essential!
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)	
  
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!
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!
Development Tools!

•  Eclipse used by Alfresco developers
 •  Large collection of plug-ins, e.g.!
   •    Web Developer Tools (JavaScript, CSS, HTML, XML)!
   •    Freemarker!
   •    Spring Surf!
   •    SpringSource tools (part of STS)!
 •  http://code.google.com/p/share-extras/wiki/
    DevelopmentEnvironment!
•  Spring Surf tools
 •  Web scripts index!
 •  JavaScript (Rhino) debugger!                       Rec: Two Tomcats
 •  SurfBug tool – new in 4.0!
   •  http://blogs.alfresco.com/wp/ddraper/2011/08/31/surfbug/!
Development Frameworks – Donʼt reinvent the
wheel!
•  Server-side frameworks
 •    Spring Framework!
 •    Spring Surf!
 •    Spring Web Scripts!
 •    Share mini-frameworks!
      •  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);
   };

     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
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!
 •  Use <family> element, even on repo tier web scripts!
Example JSDoc comments: Sample Dashlet!
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
Other interesting examples!
•  Share Extras
 •    JavaScript Console!
 •    CSV bulk load of users!
 •    Google dashlets!
 •    +34 other useful examples!
•  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?
Conclusions!


•  Customization opens up new possibilities, but
•  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

Modern websites in 2020 and Joomla
Modern websites in 2020 and JoomlaModern websites in 2020 and Joomla
Modern websites in 2020 and JoomlaGeorge Wilson
 
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
 
RESTful Api practices Rails 3
RESTful Api practices Rails 3RESTful Api practices Rails 3
RESTful Api practices Rails 3Anton Narusberg
 
One drupal to rule them all - Drupalcamp Caceres
One drupal to rule them all - Drupalcamp CaceresOne drupal to rule them all - Drupalcamp Caceres
One drupal to rule them all - Drupalcamp Cacereshernanibf
 
Padrino - the Godfather of Sinatra
Padrino - the Godfather of SinatraPadrino - the Godfather of Sinatra
Padrino - the Godfather of SinatraStoyan Zhekov
 
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
 
JavaScript debugging diagnostic web tools and firefox
JavaScript debugging diagnostic web tools and firefoxJavaScript debugging diagnostic web tools and firefox
JavaScript debugging diagnostic web tools and firefoxGennady Feldman
 
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...Michael Pirnat
 
Rapidly prototyping web applications using BackPress
Rapidly prototyping web applications using BackPressRapidly prototyping web applications using BackPress
Rapidly prototyping web applications using BackPressNathaniel Taintor
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsAlfresco Software
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Dutyreedmaniac
 
How to start developing your own ExpressionEngine addons
How to start developing your own ExpressionEngine addonsHow to start developing your own ExpressionEngine addons
How to start developing your own ExpressionEngine addonsLeevi Graham
 
Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)Mark Leusink
 
Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011Jacob Kaplan-Moss
 
Creating Web Templates for SharePoint 2010
Creating Web Templates for SharePoint 2010Creating Web Templates for SharePoint 2010
Creating Web Templates for SharePoint 2010Mark Collins
 
44 Slides About 22 Modules
44 Slides About 22 Modules44 Slides About 22 Modules
44 Slides About 22 Modulesheyrocker
 

What's hot (19)

Modern websites in 2020 and Joomla
Modern websites in 2020 and JoomlaModern websites in 2020 and Joomla
Modern websites in 2020 and Joomla
 
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
 
RESTful Api practices Rails 3
RESTful Api practices Rails 3RESTful Api practices Rails 3
RESTful Api practices Rails 3
 
One drupal to rule them all - Drupalcamp Caceres
One drupal to rule them all - Drupalcamp CaceresOne drupal to rule them all - Drupalcamp Caceres
One drupal to rule them all - Drupalcamp Caceres
 
Padrino - the Godfather of Sinatra
Padrino - the Godfather of SinatraPadrino - the Godfather of Sinatra
Padrino - the Godfather of Sinatra
 
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
 
JavaScript debugging diagnostic web tools and firefox
JavaScript debugging diagnostic web tools and firefoxJavaScript debugging diagnostic web tools and firefox
JavaScript debugging diagnostic web tools and firefox
 
DIWD 2011
DIWD 2011DIWD 2011
DIWD 2011
 
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
 
Rapidly prototyping web applications using BackPress
Rapidly prototyping web applications using BackPressRapidly prototyping web applications using BackPress
Rapidly prototyping web applications using BackPress
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in Grails
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Duty
 
遇見 Ruby on Rails
遇見 Ruby on Rails遇見 Ruby on Rails
遇見 Ruby on Rails
 
How to start developing your own ExpressionEngine addons
How to start developing your own ExpressionEngine addonsHow to start developing your own ExpressionEngine addons
How to start developing your own ExpressionEngine addons
 
01 spring-intro
01 spring-intro01 spring-intro
01 spring-intro
 
Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)
 
Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011
 
Creating Web Templates for SharePoint 2010
Creating Web Templates for SharePoint 2010Creating Web Templates for SharePoint 2010
Creating Web Templates for SharePoint 2010
 
44 Slides About 22 Modules
44 Slides About 22 Modules44 Slides About 22 Modules
44 Slides About 22 Modules
 

Similar to BP-9 Share Customization Best Practices

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
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUlrich Krause
 
BP-8 Global Federation and Search
BP-8 Global Federation and SearchBP-8 Global Federation and Search
BP-8 Global Federation and SearchAlfresco Software
 
Tech talk live alfresco add ons
Tech talk live alfresco add onsTech talk live alfresco add ons
Tech talk live alfresco add onsAlfresco 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
 
How to start developing apps for Firefox OS
How to start developing apps for Firefox OSHow to start developing apps for Firefox OS
How to start developing apps for Firefox OSbenko
 
SharePoint 2013 Sandbox Solutions for On Premise or Office 365
SharePoint 2013 Sandbox Solutions for On Premise or Office 365SharePoint 2013 Sandbox Solutions for On Premise or Office 365
SharePoint 2013 Sandbox Solutions for On Premise or Office 365Ed Musters
 
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
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat OverviewMandi Walls
 
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
 
Learn from my Mistakes - Building Better Solutions in SPFx
Learn from my  Mistakes - Building Better Solutions in SPFxLearn from my  Mistakes - Building Better Solutions in SPFx
Learn from my Mistakes - Building Better Solutions in SPFxThomas Daly
 
Alfresco overview EDM
Alfresco overview EDMAlfresco overview EDM
Alfresco overview EDMsang nguyen
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfOrtus Solutions, Corp
 
Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018Den Delimarsky
 
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
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
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
 
How to Use Selenium, Successfully
How to Use Selenium, SuccessfullyHow to Use Selenium, Successfully
How to Use Selenium, SuccessfullySauce Labs
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPagesUlrich Krause
 

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

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
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
 
BP-8 Global Federation and Search
BP-8 Global Federation and SearchBP-8 Global Federation and Search
BP-8 Global Federation and Search
 
Tech talk live alfresco add ons
Tech talk live alfresco add onsTech talk live alfresco add ons
Tech talk live alfresco add ons
 
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
 
How to start developing apps for Firefox OS
How to start developing apps for Firefox OSHow to start developing apps for Firefox OS
How to start developing apps for Firefox OS
 
SharePoint 2013 Sandbox Solutions for On Premise or Office 365
SharePoint 2013 Sandbox Solutions for On Premise or Office 365SharePoint 2013 Sandbox Solutions for On Premise or Office 365
SharePoint 2013 Sandbox Solutions for On Premise or Office 365
 
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...
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat Overview
 
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
 
Learn from my Mistakes - Building Better Solutions in SPFx
Learn from my  Mistakes - Building Better Solutions in SPFxLearn from my  Mistakes - Building Better Solutions in SPFx
Learn from my Mistakes - Building Better Solutions in SPFx
 
Alfresco overview EDM
Alfresco overview EDMAlfresco overview EDM
Alfresco overview EDM
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
 
Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018
 
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
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
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
 
How to Use Selenium, Successfully
How to Use Selenium, SuccessfullyHow to Use Selenium, Successfully
How to Use Selenium, Successfully
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPages
 

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

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 

BP-9 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. Categories of Recommendations! •  Methodology •  Team Structure •  Project Folder Structure and Build Tools •  Packaging •  Namespaces •  Development Tools and Frameworks •  Documentation •  Testing
  • 11. Rec: Use an Iterative Customization Process! Lightweight technologies allow rapid iteration
  • 12. Example: Content Expiration Page! 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: 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!
  • 14. Rec: 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!
  • 15. 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! •  Consider using an IDE •  Though not essential!
  • 16. 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
  • 17. 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)  
  • 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. 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!
  • 25. Development Tools! •  Eclipse used by Alfresco developers •  Large collection of plug-ins, e.g.! •  Web Developer Tools (JavaScript, CSS, HTML, XML)! •  Freemarker! •  Spring Surf! •  SpringSource tools (part of STS)! •  http://code.google.com/p/share-extras/wiki/ DevelopmentEnvironment! •  Spring Surf tools •  Web scripts index! •  JavaScript (Rhino) debugger! Rec: Two Tomcats •  SurfBug tool – new in 4.0! •  http://blogs.alfresco.com/wp/ddraper/2011/08/31/surfbug/!
  • 26. Development Frameworks – Donʼt reinvent the wheel! •  Server-side frameworks •  Spring Framework! •  Spring Surf! •  Spring Web Scripts! •  Share mini-frameworks! •  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!
  • 27. Rec: Mashup/re-use Whatʼs Already There!
  • 28. 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!
  • 29. 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/
  • 30. 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); }; YAHOO.extend(Alfresco.dashlet.SiteTags, Alfresco.component.Base, { options: { ... }, onReady: function SiteTags_onReady() { ... // This is where the action happens }, ... } }
  • 31. 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/
  • 32. 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 = {}; }
  • 33. 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
  • 34. 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! •  Use <family> element, even on repo tier web scripts!
  • 35. Example JSDoc comments: Sample Dashlet!
  • 36. 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
  • 37. Other interesting examples! •  Share Extras •  JavaScript Console! •  CSV bulk load of users! •  Google dashlets! •  +34 other useful examples! •  Dashlet Challenge 2011 Submissions (~12) •  See wiki for complete list of all submissions and links! •  Records Management Module •  Web Quick Start Share customizations
  • 38. 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?
  • 39. Conclusions! •  Customization opens up new possibilities, but •  Understand the frameworks •  Use an appropriate project structure •  Consider which packaging format is best for you •  Don’t forget testing and documentation
  • 40. will.abson@alfresco.com
 @wabson
 jeff.potts@alfresco.com
 @jeffpotts01!