Transcript
Page 1: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

1

Page 2: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

No coding necessaryBuilding user macros and dynamic reports inside Confluence

2

Charles HallWiki Project ManagerAstrium

Page 4: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Agenda

•What is a user macro?

•Worked example – colored tables

•Worked example – watermark for wiki pages

•Showcase

4

Page 5: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

User macros

•What is a user macro?• Added functionality• Removes complexity for authors• Facilitates re-use

•Restrictions• Used by users but…• …installed by system admins

5

Page 6: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

User macros

•Where can they be used?• Pages• Templates• In other user macros

But not…• Custom HTML (administration screen)

•What do they consist of?• HTML• Javascript• Velocity Template Language (VTL)• References to Confluence objects

6

Page 7: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Complexity vs Functionality

7

Standard Wiki markup

{html} User macros

Custom plugins

Capability

Low

High

Functionality

Effort

HighComplexity

Page 8: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

An example

8

A performance testing tool – {response-time}

See your cheat sheet for details of this macro

Page 9: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Introducing jQuery

“I thought you said no coding?”

•A Javascript library for simplifying HTML document traversal, event handling, and adding AJAX support easily

•Already used by Confluence•Minimizes Javascript coding

9

Page 10: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 1 – colored tables

10

No more boring tables!

Page 11: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 1 – colored tables

11

Listing 2

## Macro name: color-table## Macro has a body: N## Body format: n/a## Output: HTML#### Developed by: Charles Hall## Developed for: All users## Date created: 23/02/2010## Installed by: Charles Hall

## Apply coloring to alternate rows of tables.

<script type="text/javascript" defer="defer"> jQuery(document).ready(function() { jQuery("tr:even").css("background-color", "#318db6"); jQuery("tr:odd").css("background-color", "#f86a46"); });</script>

Comment header

Page 12: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 1 – side effects

12

Test, test then test some more!

Page 13: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Firebug to the rescue

13

Pinpoint the table(s) wewant to modify

Point & Click

Page 14: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 1 – revised version

14

Listing 2

## Macro name: color-table## Macro has a body: N## Body format: n/a## Output: HTML#### Developed by: Charles Hall## Developed for: All users## Date created: 23/02/2010## Installed by: Charles Hall

## Apply coloring to alternate rows of any tables with the class of confluenceTable.

<script type="text/javascript" defer="defer"> jQuery(document).ready(function() { jQuery("table.confluenceTable tr:nth-child (odd)").css("background-color", "#f86a46");

jQuery("table.confluenceTable tr:nth-child (even)").css("background-color", "#318db6");

});</script>

element.class

Page 15: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 1 – Accepting parameters

15

{color-table:A2C1D5|BFEBEF}

Page 16: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 1 – Accepting parameters

16

Listing 2

## Apply coloring to alternate rows of any tables with the class of confluenceTable.

#set($oddcolor= $param0)#set($evencolor= $param1)

## Check for valid odd color, otherwise use default#if (!$oddcolor) #set ($oddcolor="ffffff")#end

## Check for valid even color, otherwise use default#if (!$evencolor) #set ($evencolor="ededed")#end

Page 17: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked Example 2 - Using Confluence objects

17

Page 18: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 2 – Referencing the image

18

Listing 3

#set($image= $param0)#set($repeat = $param1)#set($minheight= $param2)

<script type="text/javascript" defer="defer">jQuery(document).ready(function(){jQuery('#mainViewPane').css('background-image', 'url($config.getBaseUrl()$content.getAttachmentNamed("$image").getDownloadPath())');

2 strings joined together

{watermark:draft.gif|no-repeat|1000}

Page 19: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 2 – Setting the repeat behaviour

19

Listing 3

#set($repeat = $param1)…

## Add the specified repeat behaviour#if ($repeat) jQuery('#mainViewPane').css('background-repeat', '$repeat');#end

Page 20: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 2 – Specifying a minimum height

20

Listing 3

#set($minheight = $param2)…

## Check for a specified minimum height#if ($minheight) jQuery('#mainViewPane').css('height', '$minheight');#end

Page 21: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 2 – reusing

21

How about defining some standard watermarks to help users?• Draft • Company logo

Could we make the syntax easier too?

• {draft-watermark}• {company-watermark}

Page 22: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 2 – reusing

22

Listing 3

## Check for full image path or attachment name#if($image.startsWith("http",0))#set($url=$image)#else#set($url=$config.getBaseUrl()+$content.getAttachmentNamed("$image").getDownloadPath())

#end…

Page 23: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Worked example 2 – reusing

23

Listing 4

## Macro name: draft-watermark## Macro has a body: N## Body format: n/a## Output: HTML#### Developed by: Charles Hall## Developed for: Astrium wiki## Date created: 19/04/2010## Installed by: Charles Hall

## N.B. Calls the watermark user macro## draft.gif must reside in "company" space

#set($url="http://globalcorp.com/confluence/download/attachments/74416134/draft.gif")

$action.getHelper().renderConfluenceMacro("{watermark:$url|no-repeat|1000}")

Calling the existing user macro

Page 24: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Showcase

24

Page 25: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Gradient background

25

Page 26: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Page theme

26

Page 27: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Client-side RSS feed reader

27

Page 28: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Tweaking another plug-in

28

Page 29: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Tweaking a standard feature

Page 30: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

In summary

30

•Add real functionality•Users can control behaviour•Access to some Confluence objects•Can perform useful UI tweaks•Can be re-used in other macros

Useful resources•See your cheat sheet

Page 31: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Building Awesome Dashboards

with Confluence

Jim Severino, Atlassian

Page 32: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 33: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 34: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 35: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 36: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 37: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 38: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 39: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 40: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 41: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 42: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

ConfluenceFree Plugins

Your Data

= Awesome

+

Page 43: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

JDBC

Page 44: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

1. SQL

2. Chart

3. Run

4. Scripting

Plugins For Reporting:

Page 45: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

{sql}

DB

JDBC

Wiki

Plugin: SQL

Page 46: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 47: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

{sql} Table

DB

JDBCJDBC

DB

Plugin: SQL

Page 48: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 49: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 50: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

{chart}

{sql} Table

DB

Plugin: Chart

Page 51: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 52: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 53: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

{chart}

{sql} Table

DB

Plugin: Chart

Page 54: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 55: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 56: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 57: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 58: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 59: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 60: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 63: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 64: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 65: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 66: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 67: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

{sql} Table

DB

{run} {chart}

Plugin: Run

Page 68: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Scripting

Page 69: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 70: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Text

Image (c) United Feature Comics

Page 71: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Rule #1:Macro Security

Page 72: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Recommendation:Use the

Macro Security Plugin.

Page 73: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Rule #2:Datasource Security

Page 74: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 75: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Rule #3:Summary Databases

Page 76: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Recommendation:Run Reports off a Summary Database

Page 77: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 78: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

1. SQL

2. Chart

3. Run

4. Scripting

Plugins For Reporting:

Page 79: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 80: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 81: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 82: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010
Page 83: No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluence - Atlassian Summit 2010

Recommended