developing great dashlets

37
Developing Great Dashlets Will Abson – @wabson

Upload: gabriel-livingston

Post on 03-Jan-2016

42 views

Category:

Documents


4 download

DESCRIPTION

Developing Great Dashlets. Will Abson – @wabson. About Me. Project Lead, Share Extras Alfresco Developer and previously Solutions Engineer DevCon 2011 – Customizing Share Best Practices - with Jeff Potts Dashlet Challenge Judge 2011 & 2012. In this presentation…. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Developing Great Dashlets

Developing Great Dashlets

Will Abson – @wabson

Page 2: Developing Great Dashlets

About Me

• Project Lead, Share Extras• Alfresco Developer and previously Solutions Engineer• DevCon 2011 – Customizing Share Best Practices - with

Jeff Potts• Dashlet Challenge Judge 2011 & 2012

Page 3: Developing Great Dashlets

In this presentation…

Page 4: Developing Great Dashlets

…we’ll take your dashlets

From This

Page 5: Developing Great Dashlets

…we’ll take your dashlets

From This To This

Page 6: Developing Great Dashlets

What Makes a Great Dashlet?

• Summarise information in meaningful ways• Configurable• Responsive user interface• Rich controls

Page 7: Developing Great Dashlets

Event Scheduling by Bertrand Forest

Page 8: Developing Great Dashlets

Social Tops Dashlet by Sébastien Le Marchand

Page 9: Developing Great Dashlets

JMX Statistics Dashlet by Chris Paul

Page 10: Developing Great Dashlets

Now Let’s Get our Hands Dirty!

Page 11: Developing Great Dashlets

Agenda

The Basics

• Hello World

Utilising UI Components

• Title Bar Actions• Dashlet Resizers• YUI Buttons• Dom Manipulation• Event Listeners• User Preferences• Popup Notifications

Page 12: Developing Great Dashlets

Agenda

Utilising UI Components (ctd.)

• Configuration dialogues

Fetching Data

• Dashlets that access the Alfresco Repository• Dashlets that access third party services

Page 13: Developing Great Dashlets

Example Project

Source Code

• Each stage in the walk-through is available in GitHub• Corresponds to a different branch• https://github.com/wabson/great-dashlets

• I will demonstrate using a local repository

Page 14: Developing Great Dashlets

Hello World Dashlet for 4.2

• Based on Share Extras ‘Sample Dashlet’• Displays a configurable message to the user• Demonstrates structure of a basic dashlet

• Web-tier web script• Client-side assets• Best practice

• Displays static / semi-dynamic text• We will go further!

Page 15: Developing Great Dashlets

Hello World Example 1

https://github.com/wabson/great-dashlets/tree/helloworld1

Page 16: Developing Great Dashlets

Title Bar Actions

• New in Alfresco 4.0• Replaces action links previously placed in

dashlet toolbars• e.g. ‘Configure’ action

• Actions may point to a link in the same or a new window/tab or trigger custom YUI or Bubbling events

• To use, create an instance of Alfresco.widget.DashletTitleBarActions

• More info• http://sharextras.org/jsdoc/share/community-4.2.b/symb

ols/Alfresco.widget.DashletTitleBarActions.html

Page 17: Developing Great Dashlets

Hello World Example 2

https://github.com/wabson/great-dashlets/tree/helloworld2

Page 18: Developing Great Dashlets

Dashlet Resizers

• Allows resizing of user dashlets or site dashlets by Site Managers• Resizing is persistent• Height attribute stored in component configuration

• To use, create an instance of Alfresco.widget.DashletResizer

• Must supply HTML ID and component ID

• More info• http://sharextras.org/jsdoc/share/community-4.2.b/symb

ols/Alfresco.widget.DashletResizer.html

Page 19: Developing Great Dashlets

Hello World Example 3

https://github.com/wabson/great-dashlets/tree/helloworld3

Page 20: Developing Great Dashlets

Dashlet Client-side Components

• Up until now we have used standard re-usable classes (or widgets)

• Most dashlets will require us to define our own custom dashlet classes to implement the behaviour required

• To do this, extend Alfresco.component.Base to add your own implementation• Implementation should be held in custom client-side JS

files, which we need to include in the page• Once we have done this we can create an instance of

the client-side component on the page

Page 21: Developing Great Dashlets

Hello World Example 4

https://github.com/wabson/great-dashlets/tree/helloworld4

Page 22: Developing Great Dashlets

Push Button Controls

• YUI2 provides a range of different button types• http://developer.yahoo.com/yui/button/

• Alfresco.util provides a handy function for setting up push buttons• {YAHOO.widget.Button}

Alfresco.util.createYUIButton(p_scope, p_name, p_onclick, p_obj, p_oElement)

• Button element must be declared in HTML• Easier to use this if the standard component markup is

used• But we could use YAHOO.widget.Button() directly

• http://sharextras.org/jsdoc/share/community-4.2.b/symbols/Alfresco.util.html#.createYUIButton

Page 23: Developing Great Dashlets

Dom Manipulation

• YAHOO.util.Dom provides a range of static methods for locating and manipulating Dom elements• YAHOO.util.Dom.get()• YAHOO.util.Dom.getAttribute()• YAHOO.util.Dom.addClass()

• Once we have an HTML element in our hands we can• Set its content (innerHTML)• Add sibling and child elements

• Alfresco.util builds on these functions• http://sharextras.org/jsdoc/share/community-4.2.b/symb

ols/Alfresco.util.html

Page 24: Developing Great Dashlets

Hello World Example 5

https://github.com/wabson/great-dashlets/tree/helloworld5

Page 25: Developing Great Dashlets

Dashlet Toolbars

• Filters are usually implemented using YUI ‘menu’ buttons

• Or could be ‘split’ buttons if clickable too• Like push buttons we create in HTML• Activate the button using

Alfresco.util.createYUIButton• Need to provide a function to handle the click

event• Actions usually implemented as HTML links (with

icons)• Could be a hyperlink to another page or wired to a

function using YAHOO.util.Event.addListener()

Page 26: Developing Great Dashlets

Hello World Example 6

https://github.com/wabson/great-dashlets/tree/helloworld6

Page 27: Developing Great Dashlets

User Preferences

• Allow us to store user-specific configuration properties

• Properties are stored using JSON in a hierarchical structure, e.g. {com: {someco: {someapp: {foo: “bar”}}}}

• Implemented in Alfresco.service.Preferences

• Dashlets should create a class instance in their constructor

• Provide callback functions when loading and saving data

• http://sharextras.org/jsdoc/share/community-4.2.b/symbols/Alfresco.service.Preferences.html

Page 28: Developing Great Dashlets

Hello World Example 7

https://github.com/wabson/great-dashlets/tree/helloworld7

Page 29: Developing Great Dashlets

User Notifications and Prompts

• Notifications appear briefly and then fade out

• Prompts require the user to confirm something

• By default a single button is shown• We can provide multiple buttons, e.g. ‘Yes’, ‘No’

• Other functions – get user input, display web scripts, display forms

• Implemented using static methods on Alfresco.util.PopupManager

• http://sharextras.org/jsdoc/share/community-4.2.b/symbols/Alfresco.service.Preferences.html

Page 30: Developing Great Dashlets

Hello World Example 8

https://github.com/wabson/great-dashlets/tree/helloworld8

Page 31: Developing Great Dashlets

Get Latest Document Dashlet

• Original implementation by Jeff Potts• http://ecmarchitect.com/archives/

2012/05/04/1592• http://ecmarchitect.com/archives/

2012/05/15/1599• Improvements by Rik Taminaars• Further improvements for these examples• A more advanced dashlet

• Fetches data from the repository• Configurable per-instance using a config dialogue

Page 32: Developing Great Dashlets

Loading Repository Data

Credit: Jeff Potts

Page 33: Developing Great Dashlets

Loading Repository Data

• Data is loaded using a custom repository web script returning JSON data• But you could re-use existing web scripts

• Data loading in web-tier – Alfresco.util.Ajax• See http://sharextras.org/jsdoc/share/community-

4.2.b/symbols/Alfresco.util.Ajax.html• Data loading in client-side component• How do we reload data?

Page 34: Developing Great Dashlets

Get Latest Document Example 1

https://github.com/wabson/great-dashlets/tree/getlatestdoc2

Page 35: Developing Great Dashlets

Dashlet Configuration Dialogues

• Allows the dashlet to be tailored to different situations

• Configurable by users (user dashlets) or Site Managers (site dashlets)• Same storage mechanism as Dashlet Resizer

• Implement using Alfresco.module.SimpleDialog instance (docs)• Must include client-side files for this class• Must provide a web script to implement the UI• Optionally, we can provide a custom form target

• Most dashlets will use the default modules/dashlet/config/{id} target

Page 36: Developing Great Dashlets

Get Latest Document Example 2

https://github.com/wabson/great-dashlets/tree/getlatestdoc2

Page 37: Developing Great Dashlets

More Information

https://github.com/wabson/great-dashlets

http://sharextras.org/

http://sharextras.org/jsdoc/share/