Come usare Confluence e JIRA per ….#4

Come usare Confluence e JIRA per …..

In questo post andremo a vedere come possiamo usare Confluence e JIRA per realizzare una …. roadmap per un progetto.

Andiamo nel dettaglio

Vediamo come sfruttiamo le varie componenti per poter realizzare il tutto.

Confluence sarà usato per definire la documentazione e, attraverso l’uso della macro Roadmap, riusciamo a tracciare una indicazione di massima dei vari rilasci.

Questo punto è già stato affrontato in altri post, come descritto in :

Questo è un buon esempio pratico. In questo caso è pensabile di organizzare uno space, dedicato al progetto, in cui nella pagina principale viene subito indicato la roadmap generale del progetto.

In aggiunta, su Confluence aggiungiamo una serie di sottosezioni, dove andiamo a inserire:

  • Requisiti funzionali
  • Requisiti tecnici
  • Verbali di riunione (sia interne che con il cliente)

L’utilizzo della macro Roadmap, ci consente di poter dettagliare meglio le varie fasi con ulteriori pagine di Confluence e, grazie anche a come i prodotti della Atlassian comunicano tra di loro, collegare le varie fasi della roadmap con delle Issue JIRA, che andremo a definire di volta in volta.

E’ infatti possibile collegare delle pagine, alle varie barre che compongono la roadmap. Su queste pagine possiamo inserire i riferimenti a tali issue.

JIRA trova la sua naturale collocazione della definizione dei vari TASK per realizzare il progetto. Dedicato alla realizzazione di software, possiamo usarlo per definire i vari sprint/task. Andremo ad usarlo per realizzare l’implementazione vera e propria.

Conclusioni

In questo post è presente una ulteriore ipotesi di utilizzo di Confluence e JIRA. Ovviamente, quanto descritto non è solo relativo alla realizzazione di Software. Possiamo tranquillamente usare questi strumenti anche in altri ambiti, che non siano strettamente legati alla IT.




Appfusions – Userprofile prova su strada #3

Completiamo il test

In questo post andiamo a completare il test iniziato nei seguenti post:

andando a collegare il sistema ad un LDAP.

Colleghiamo un LDAP

Completiamo questo tour collegandoci ad un LDAP e testiamo il comportamento. Per far cio, sfruttiamo un server open LDAP presente su internet. Googlando sono riuscito a trovare questo LDAP. Lo usiamo come ambiente di test e cercheremo di sfruttarlo in maniera tale da poter impostare il nostro addon. La seguente immagine mostra gli utenti che sono messi a disposizione.

che, come possiamo vedere meglio,attraverso un visualizzatore free LDAPAdmin, vediamo quali sono gli utenti che sono effettivamente disponibili:


app-03-04

Configuriamo il nostro LDAP su Confluence e poi, successivamente, andiamo a configurare l’addon affinché punti al nuovo LDAP (che chiamiamo con estrema fantasia LDAP server 😛

app-03-05

Il risultato è il seguente:

app-03-03

 

Conclusioni

Concludiamo questa carellata dell’addon della Appfusions. Si tratta di un addon che consente una buona integrazione con LDAP e che consente di poter sfruttare questa integrazione per il meglio. Nei prossimi post cercheremo di fornire un confronto tra i vari addon, con l’obbiettivo di fornire delle indicazioni per comprendere quale addon usare per l’uso richiesto 🙂

 




Come usare JIRA e Confluence ….. #3

Come usare JIRA e Confluence per ……

Proseguiamo questa serie di articoli che tentano di spiegare come usare Confluence e JIRA per ulteriori scopi. In questo post andremo a vedere come usare Confluence e JIRA per ….. la gestione delle commesse.

 

Come possiamo organizzare il tutto

Possiamo pensare di impostare questa organizzazione. Come per la gestione degli Asset, vista nei precedenti post, possiamo sfruttare questo concetto e definire un Issue Type Commessa. In questo modo abbiamo la seguente situazione:

  • Una identificazione univoca delle Commesse. Possiamo in questo modo facilmente ricercarle sfruttando la ricerca che JIRA le mette a disposizione 
  • Possiamo gestirle con un opportuno Workflow, consentendo una gestione mirata 
  • Possiamo anche sfruttare i subtask per gestire tutte le attività che ricadono sotto la commessa. Il vantaggio è di dettagliare in maniera quasi completa tutti i lavori svolti e di avere il totale delle ore dedicate. Con delle semplici interrogazioni possiamo tenere sotto controllo la spesa della commessa 
  • Sfruttiamo Confluence per inserire la documentazione della commessa, specificando tutte le informazioni, cliente di riferimento, persona responsabile, lavori che devono ricadere su tale commessa 

Conclusioni

Abbiamo visto un semplice esempio di come possiamo sfruttare le funzionalità di JIRA e Confluence per gestire una situazione di tutti i giorni. Nei prossimi post andremo a vedere come realizzare una possibile implementazione.




Come usare Confluence e JIRA per …. #2

Come usare Confluence e JIRA per …..

Proseguiamo con lo scrivere questi post in cui cerchiamo di descrivere come poter usare Confluence e JIRA per poter realizzare un piccolo sistema di gestione degli ordini di acquisto/vendita.

Come possiamo realizzare il tutto?

Allo stesso modo con cui abbiamo realizzato il precedente esempio, possiamo utilizzare JIRA e JIRA Agile per gestire gli ordini di acquisto, vendita.

Ogni ISSUE JIRA rappresenta il nostro ordine di acquisto/vendita. Opportuni campi custom possono aiutare nella tracciatura dell’ordine vero e proprio.

Progetti separati, per tracciare gli ordini di acquisto e gli ordini di vendita può aiutare nello svolgere meglio questa attività.

Un opportuno Workflow, studiato per coprire tutte le casistiche possibili o necessarie per lo svolgimento della attività, può essere implementato ed associato ai progetti. In questo caso potrebbe essere necessario implementarne 2: uno per progetto

Successivamente, utilizzando la BOARD della JIRA Agile, possiamo consentire all’utente di poter meglio gestire i vari passaggi di stato, semplicemente spostando la ISSUE da una colonna all’altra.

In aggiunta, possiamo collegare anche delle informazioni relative alla società o alla natura dell’ordine. A tale scopo, Confluence ci viene in soccorso. In questo modo, possiamo sfruttare la potenza e la versatilità di Confluence per poter realizzare tutta la parte di documentazione necessaria. Queste informazioni possono essere poi collegate tramite campi custom

Risultato

Possiamo disporre di un sistema semplice per arrivare a gestire delle situazioni molto complesse, sfruttando la semplicità di questi strumenti. Nei prossimi post proveremo a sviluppare questa idea e cercheremo di realizzare un prototipo.




Metadata per Confluence – Prova su strada

Prova su strada

In questo post andiamo ad eseguire la prova su strada dell’addon della Communardo. Cerchiamo di capire vantaggi, limiti e possibilità di utilizzo.

Installiamo

Procediamo sempre con ordine. Come prima cosa installiamo l’addon. Una volta trovato, selezioniamo free trial per poter procedere alla prima installazione sul nostro sistema. Una volta selezionato, si procede con la fase di installazione.

Meta-02-01

Attendiamo che siano eseguiti tutti i passi necessari…

Meta-02-02

Al termine della installazione, qualora non siamo loggati, viene richiesto di accedere al proprio account Atlassian, per poter generare la licenza TRIAL

Meta-02-03

L’addon stesso si occupa di connettersi per poter ottenere la licenza

Meta-02-04

Terminata questa fase l’addon è disponibile

Meta-02-05

Possiamo quindi procedere con la configurazione. Nella scheda dell’addon, troviamo tutte le indicazioni che ci aiutano ad iniziare a lavorare, come mostrato nella figura seguente:

Meta-02-06

Prova

Iniziamo a testare il nostro nuovo addon. Seguiamo le indicazioni, presenti nella precedente immagine, che ci forniscono un primo aiuto. Partiamo dalla configurazione generale, presente nella sezione di amministrazione, dove l’addon mette a disposizione due link, sulla barra sinistra dei menù

Meta-02-07

Partiamo con il definire i primi metadati attraverso la funzionalità Metadata fields. Una volta selezionato, ci accorgiamo che, come default, l’addon mette a disposizione dei metadati, come mostrato in figura.

Meta-02-08

Possiamo aggiungere i nostri metadati personalizzati come vogliamo :-). Selezionamo il tasto Add metadata field, per procedere. L’addon propone la seguente schermata:

Meta-02-09

Proviamo, in questa fase di test, ad aggiungere alcune informazioni di prova, quali:

  • Progetto
  • Ambito di lavoro

Definiamo quindi il Metadata set di appartenenza.

Meta-02-13

Dopo di che, lavoriamo su di uno space di test, che con grande fantasia è chiamato Communardo-test, e verifichiamo come possiamo accedere a tali informazioni e come ci possono essere utili.

La prima cosa che notiamo è la presenza di una icona, in alto a destra sulla pagina:

Meta-02-10

Se lo selezioniamo, accediamo alla gestione dei metadati, come mostrato nella figura successiva. Con nostra sorpresa, non riusciamo ad accedere subito a tali informazioni.

Meta-02-11

Dobbiamo prima procedere con la configurazione sulle opzioni dello space, prima di poter procedere. Andiamo nella sezione dei Medatada set e selezioniamo l’ultimo inserito:

Meta-02-14

Salviamo ed il gioco è fatto. Adesso i metadati sono pronti ad essere usati. Se aggiungiamo l’apposita macro nella pagina di prova e andiamo a visualizzarla, questo è il risultato che otteniamo.

Meta-02-15

Per inserire i valori semplicemente andiamo a selezionare il tasto in alto a destra, già evidenziato nelle immagini precedenti e vediamo quanto segue:

Meta-02-16

Inseriamo i dati e selezioniamo il tasto Salva. L’immagine che segue mostra il risultato.

Meta-02-17

Si segnala inoltre che l’addon consente di definire, oltre che metadati globali, anche metadati ristretti solo a determinati Space. In questo modo si ha la possibilità di poter definire situazioni ad hoc per determinate situazioni.

Meta-02-12

Conclusioni

L’addon è molto interessante: L’idea di disporre di informazioni di tale genere, aiuta enormemente l’utilizzatore ad una classificazione della pagina ed estende, secondo il mio personale giudizio, la funzionalità delle Page properties.

Devo segnalare ancora qualche piccola anomalia/suggerimento, che dettaglio di seguito.

  • Se dalle opzioni dello Space andiamo a modificare un metadato globale, si viene poi rediretti nella sezione dei metadati globali. Se accedo dalle opzioni dello space, sarebbe il caso di ritornare su tale sezione.
  • Potrebbe essere utile semplificare la procedura per definire i metadati. L’utente generico potrebbe avere dei problemi nel gestire questa procedura.

Si tratta di piccole cose, ma sono sicuro che la Communardo, con la sua esperienza e con le sue capacità, ci sorprenderà di sicuro.

Reference

Maggiori informazioni sono reperibili alla pagina del marketplace.




Communardo – Metadata per Confluence

Metadati sullo Space

In questo post andremo a vedere questo nuovo addon della Communardo, che consente di poter aggiungere dei metadati nelle pagine di uno space, in maniera molto semplice, standardizzando il tutto e semplificando il lavoro degli utenti.

Andiamo in dettaglio

L’addon consente di poter impostare i metadati in maniera semplice, fornendo una unica fonte su cui caricare le informazioni a livello di space.

Consente, come si può vedere dalla precedente immagine, di caricare sia singoli metadati, che insiemi di campi di metadati, direttamente sotto le configurazioni dello Space

E’ anche possibile eseguire l’editazione di un singolo metadato, direttamente dalla pagina.

E’ quindi possibile, una volta impostati i metadati, arrivare a visualizzare le informazioni in maniera da sfruttarli

Conclusioni

Da una prima analisi, questo addon potenzia notevolmente le funzionalità di Confluence, aggiungendo la possibilità di poter aggiungere delle ulteriori informazioni sulle pagine. Nei prossimi post andremo ad eseguire la solita prova s strada, verificando di persona come funziona il tutto e saggiandone, come sempre, i limiti.




Appfusions – Userprofile prova su strada #1

Userprofile – Alternative

In questo post andremo a vedere questa alternativa e cercheremo di capire come si comporta l’addon della AppFusions.

Dividiamo questo post in due parti. La prima sarà dedicata alla gestione della installazione e di come richiedere la licenza. Essendo un Addon fuori marketplace, si richiede una cura particolare.

Installiamo il prodotto

Per installare il prodotto, occorre richiedere la licenza direttamente dal produttore. L’addon non è disponibile sul Marketplace della Atlassian. Basta collegarsi al sito della AppFusions e abbiamo a disposizione i vari prodotti :-).7

app-02-00

Selezioniamo, in prima battuta, il bottone Download e procediamo con la scelta della versione del prodotto

app-02-01

Una volta scelta la versione, procediamo con il download. Quindi, per la richiesta della licenza, come visto nella precedente immagine, abbiamo a disposizione la possibilità di richiedere la licenza di valutazione. Procediamo 🙂

app-02-02

Per l’installazione, basta semplicemente posizionarsi nella sezione di amministrazione, dedicata alla gestione degli addon, come mostrato in figura:

app-02-03

Selezioniamo quindi Upload Add-on, per procedere con il caricamento del file JAR che abbiamo scaricato prima:

app-02-04

Selezionamo dove andare a prendere il JAR (possiamo leggerlo dal nostro disco locale, dove lo abbiamo scaricato, oppure possiamo andarlo a leggere direttamente dalla URL).

app-02-05

L’installazione viene eseguita, come già mostrato in altri post:

app-02-06

Una volta terminata l’installazione, possiamo procedere con la configurazione. Il primo passo è fornire la licenza.

app-02-07

Inseriamo la licenza e procediamo con il nostro test 🙂

Conclusioni

Terminiamo questa prima parte dedicata a questo addon. Nel prossimo post, andremo ad eseguire il test su strada 🙂

 

 




Come usare Confluence e JIRA per …. #1

Come usare Confluence e JIRA per ….

In questo post inauguriamo una piccola innovazione. Cerchiamo di dare degli spunti su come è possibile usare questi meravigliosi strumenti, anche per compiti NON IT 🙂

Cosa possiamo fare?

Un esempio che mi viene in mente è quello di poter usare Confluence e JIRA per poter …. censire le offerte di lavoro, arrivando ad avere un controllo completo di ciò che succede in azienda. Come possiamo arrivare a gestire le nostre proposte/offerte di lavoro?

Possiamo usare JIRA per:

  • usare le issue come se fossero delle offerte (basandosi sull’esempio della realizzazione di un Asset manager, dove le issue sono usate per censire gli asset di una azienda;
  • usare il JIRA Workflow per poter gestire i passaggi di stato della offerta, fino a gestire l’intero ciclo di vita del lavoro proposto.
  • Usare JIRA Agile per gestire i passaggi di stato. Sfruttiamo la possibilità di poter visualizzare in un sol colpo lo stato di tutte le commesse e sfruttare i tool che JIRA Agile mette a disposizione

Possiamo usare Confluence per:

  • Documentare l’offerta di lavoro, impostando dei template standard, dove riportare tutte le informazioni dell’offerta, da quando è stata proposta al cliente fino alla sua conclusione 
  • Impostare tutte le informazioni documentali, quali documenti inviati, documenti ricevuti dal cliente e segnalazioni varie. Confluence viene usato più per tracciare tutti i documenti ;

Conclusioni

Questo è solo una idea di come poter implementare una possibile soluzione, sfruttando le funzionalità che i due prodotti mettono a disposizione. Infatti è possibile realizzare delle soluzioni non indifferenti :-).

Nei prossimi post cercheremo di dettagliare meglio questa soluzione, arrivando a fornire pro e contro della soluzione e verificando fino a che punto possiamo spingerci con questi strumenti 😀

 




User Macro – Lorem Ipsum: Facciamo un nostro esempio.

Un altro esempio

In questo post, proseguiamo la serie di articoli dedicati alla creazione di User Macro. Vedremo un esempio di come creare una semplice macro che sostituisca la macro ufficiale Lorem Ipsum.

 

Andiamo sul pratico

Iniziamo con il definire la nostra macro di prova. Come prima cosa andiamo a definire che cosa deve fare la nostra macro 🙂 . Non è cosa da poco.

Vogliamo sostituire la macro standard Lorem Ipsum di Confluence. Vogliamo implementarne una nostra che restituisca un nostro risultato personalizzato. Nel nostro caso abbiamo bisogno di ripetere una scritta solo fino a 5 volte massimo.

Il nostro obbiettivo è quello di avere delle sezioni si Lorem Ipsum molto ridotte come testo.

Il nostro script di macro

Definiamo il nostro script come segue:

Come parametri principali, fate riferimento alla seguente immagine:

usermacro-04-01

Il codice della macro è il seguente

## Macro title: Lorem Ipsum
## Macro has a body: N
## Body processing: Genera un testo a misura del Lorem Ipsum
## Output: Testo indicato
##
## Developed by: ArtigianoDelSoftware di Fabio Genovese
## Date created: 05/09/2015
## Installed by: -
## Parametri
## @param numpar:title=Number of paragraph|type=enum|enumValues=1,2,3,4,5|required=true|desc=Number of paragraph
## Corpo della macro
#set ( $Testo = "lorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius" )
#set ( $Testodef = "")
#set ( $limit = $paramnumpar )
#if ( $paramnumpar == 1 ) 
 #set ( $Testodef = "$Testo" )
#elseif ( $paramnumpar == 2 )
 #set ( $Testodef = "$Testo$Testo" )
#elseif ( $paramnumpar == 3 )
 #set ( $Testodef = "$Testo$Testo$Testo" )
#elseif ( $paramnumpar == 4 )
 #set ( $Testodef = "$Testo$Testo$Testo$Testo" )
#else
 #set ( $Testodef = "$Testo$Testo$Testo$Testo$Testo" )
#end
## Visualizzazione
<html>
<body>
$Testodef
</body>
<html>

Identifichiamo le seguenti sezioni:

  • Macro title – Si tratta di un commento da inserire in cima alla macro
  • Parametri – dichiarazione dei parametri
  • Corpo della macro – Codice della macro
  • Visualizzazione – Parte del corpo della macro che visualizza i risultati

Macro Title

Si tratta del mero commento alla procedura. Lo consiglio sempre. Inseritelo. Non occupa alcuno spazio ed è utile quando riprendete in mano la macro per farne manutenzione

## Parametri
## @param numpar:title=Number of paragraph|type=enum|enumValues=1,2,3,4,5|required=true|desc=Number of paragraph

Parametri

Dichiarazione dei parametri che richiede la macro. Parte molto importante. Nel nostro caso abbiamo inserito una selezione automatica in cui l’utente può selezionare un valore da 1 a 5. Un semplice enumeratore.

## Parametri
## @param numpar:title=Number of paragraph|type=enum|enumValues=1,2,3,4,5|required=true|desc=Number of paragraph

Corpo della macro

Di seguito il codice, scritto in sintassi Velocity, che realizza il tutto.

## Corpo della macro
#set ( $Testo = "lorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius" )
#set ( $Testodef = "")
#set ( $limit = $paramnumpar )
#if ( $paramnumpar == 1 ) 
 #set ( $Testodef = "$Testo" )
#elseif ( $paramnumpar == 2 )
 #set ( $Testodef = "$Testo$Testo" )
#elseif ( $paramnumpar == 3 )
 #set ( $Testodef = "$Testo$Testo$Testo" )
#elseif ( $paramnumpar == 4 )
 #set ( $Testodef = "$Testo$Testo$Testo$Testo" )
#else
 #set ( $Testodef = "$Testo$Testo$Testo$Testo$Testo" )
#end

Visualizzazione

La parte che si occupa della visualizzazione è molto semplice e non richiede alcun commento.

## Visualizzazione
<html>
<body>
$Testodef
</body>
<html>

Risultati?

I risultati sono i seguenti. Alla chiamata vediamo che Confluence mostra anche la nostra Macro (la prima).

usermacro-04-02

Una volta selezionata la macro, viene attivata l’autocomposizione

usermacro-04-03

Una volta impostato la macro viene visualizzata sulla pagina

 

usermacro-04-04

Il risultato finale è il seguente:

usermacro-04-05

 

Conclusioni

Abbiamo visto come si può realizzare una semplice macro. Nei prossimi post andremo ad esaminare altri esempi.




User Macro – Un semplice esempio di utilizzo

User Macro

In questo post andremo ad consultare un articolo presente in questo blog, che ritengo molto interessante. Lo esamineremo e cercheremo di approfondire l’argomento, in quanto lo ritengo un ottimo esempio didattico.

Andiamo in dettaglio

L’articolo del blog spiega come realizzare una alternativa alla macro Space Detail Macrousando le macro per ottenere un risultato migliore 🙂

In particolare il risultato che offre con la sua macro è il seguente:

L’ho scelto perché si tratta di una macro molto semplice e, dal punto di vista didattico, la macro risulta realizzata molto bene.

Vediamo il codice

La configurazione preliminare della macro è molto semplice. La seguente immagine la riassume:

Il codice è molto semplice. Lo riporto di seguito nella sua interessa e successivamente lo andremo ad esaminare pezzo per pezzo, in modo da capire come viene eseguita ogni singola operazione.

## Macro title: Space Meta Data
## Macro has a body: Y or N (N)
## Body processing: Selected body processing option
## Output: Selected output option
##
## Developed by: Andrew Frayling
## Date created: 03/05/2012
## Installed by: <your name>

## Macro to display information such as number of pages, number of blog posts, attachment size, etc. about a Space. 

## @noparams

## Get space details
#set ( $spaceName = $space.getName() )
#set ( $spaceKey = $space.getKey() )
#set ( $spaceHome = $space.getHomePage() )
#set ( $spaceCreator = $space.getCreatorName() )
#set ( $spaceCreationDate = $space.getCreationDate() )
#set ( $spaceDescription = $space.getDescription() )
#set ( $pageCount = $spaceManager.findPageTotal($space) )
#set ( $blogCount = $spaceManager.getNumberOfBlogPosts($space) )

## Get all pages in the current Space
#set ( $allPagesInSpace = $pageManager.getPages($space, true) )

## Reset total attachment file size
#set ( $totalAttachmentFileSizeForSpace = 0 )

## Reset total number of attachments
#set ( $totalAttachmentCount = 0 )

## Loop through all pages in the current Space
#foreach ($page in $allPagesInSpace)
  ## reset the attachment count for each page
  #set ( $pageAttachmentCount = 0 )
  ## reset the attachment file size total for each page
  #set ( $totalFileSizePerPage = 0 )
  ## get the attachments for each page
  #set ( $allAttachments = $page.getAttachments() )
  ## Loop through each attachment
  #foreach ($attachment in $allAttachments)
    ## Increment the attachment count for the page
    #set ( $pageAttachmentCount = $pageAttachmentCount + 1 )
    ## Sum the size of the attachments on the page
    #set ( $totalFileSizePerPage = $totalFileSizePerPage + $attachment.getFileSize() )
  #end
  ## End looping through attachments
  ## Increment total attachment count for the current Space
  #set ( $totalAttachmentCount = $totalAttachmentCount + $pageAttachmentCount )
  ## Sum the total size of attachments for the current Space
  #set ( $totalAttachmentFileSizeForSpace = $totalAttachmentFileSizeForSpace + $totalFileSizePerPage )
#end
## End looping through pages

## Convert attachment size to MBs
#set ( $attachmentSizeMb = ($totalAttachmentFileSizeForSpace / 1024.00) / 1024.00 )

## Display Space Details
<table class="confluenceTable">
  <tbody>
    <tr>
      <th class="confluenceTh">Name</th>
      <td class="confluenceTd">$spaceName</td>
    </tr>
    <tr>
      <th class="confluenceTh">Key</th>
      <td class="confluenceTd">$spaceKey</td>
    </tr>
    <tr>
      <th class="confluenceTh">Description</th>
      <td class="confluenceTd">$spaceDescription.getBodyAsString()</td>
    </tr>
    <tr>
      <th class="confluenceTh">Home Page</th>
      <td class="confluenceTd">#contentLink2($spaceHome true false)</td>
    </tr>
    <tr>
      <th class="confluenceTh">Created By</th>
      <td class="confluenceTd">#usernameLink($spaceCreator) ($action.dateFormatter.formatDateTime($spaceCreationDate))</td>
    </tr>
    <tr>
      <th class="confluenceTh">Number of Pages</th>
      <td class="confluenceTd">$pageCount</td>
    </tr>
    <tr>
      <th class="confluenceTh">Number of Blog Posts</th>
      <td class="confluenceTd">$blogCount</td>
    </tr>
    <tr>
      <th class="confluenceTh">Number of Attachments</th>
      <td class="confluenceTd">$totalAttachmentCount (including all versions)</td>
    </tr>
    <tr>
      <th class="confluenceTh">Total Size of Attachments</th>
      <td class="confluenceTd">$attachmentSizeMb MB</td>
    </tr>
  </tbody>
</table>

Distinguiamo le seguenti sezioni nella macro:

  • Testata
  • Lettura parametri dello space
  • Lettura della dimensione dei vari allegati
  • Visualizzazione dati ottenuti

Andiamo ad esaminarle in dettaglio.

## Macro title: Space Meta Data 
## Macro has a body: Y or N (N) 
## Body processing: Selected body processing option 
## Output: Selected output option 
## 
## Developed by: Andrew Frayling 
## Date created: 03/05/2012 
## Installed by: <your name> 
## Macro to display information such as number of pages, number of blog posts, attachment size, etc. about a Space. ## @noparams

L’Intestazione della macro è quello che avevo già descritto nel mio primo post. In questo caso, l’autore ha realizzato una intestazione molto ben fatta, chiara, semplice e di rapido effetto.

Spiega subito le caratteristiche della macro in poche righe.

## Get space details
#set ( $spaceName = $space.getName() )
#set ( $spaceKey = $space.getKey() )
#set ( $spaceHome = $space.getHomePage() )
#set ( $spaceCreator = $space.getCreatorName() )
#set ( $spaceCreationDate = $space.getCreationDate() )
#set ( $spaceDescription = $space.getDescription() )
#set ( $pageCount = $spaceManager.findPageTotal($space) )
#set ( $blogCount = $spaceManager.getNumberOfBlogPosts($space) )

## Get all pages in the current Space
#set ( $allPagesInSpace = $pageManager.getPages($space, true) )

## Reset total attachment file size
#set ( $totalAttachmentFileSizeForSpace = 0 )

In questa sezione, invece, va a leggere tutte le informazioni dello Space, impostando tutte le variabili con le informazioni che si vogliono visualizzare nella macro. Notiamo le variabili, definite con la sintassi che è stata già spiegata nei precedenti post.

## Reset total number of attachments 
#set ( $totalAttachmentCount = 0 )

## Loop through all pages in the current Space
#foreach ($page in $allPagesInSpace)
  ## reset the attachment count for each page
  #set ( $pageAttachmentCount = 0 )
  ## reset the attachment file size total for each page
  #set ( $totalFileSizePerPage = 0 )
  ## get the attachments for each page
  #set ( $allAttachments = $page.getAttachments() )
  ## Loop through each attachment
  #foreach ($attachment in $allAttachments)
    ## Increment the attachment count for the page
    #set ( $pageAttachmentCount = $pageAttachmentCount + 1 )
    ## Sum the size of the attachments on the page
    #set ( $totalFileSizePerPage = $totalFileSizePerPage + $attachment.getFileSize() )
  #end
  ## End looping through attachments
  ## Increment total attachment count for the current Space
  #set ( $totalAttachmentCount = $totalAttachmentCount + $pageAttachmentCount )
  ## Sum the total size of attachments for the current Space
  #set ( $totalAttachmentFileSizeForSpace = $totalAttachmentFileSizeForSpace + $totalFileSizePerPage )
#end
## End looping through pages

## Convert attachment size to MBs
#set ( $attachmentSizeMb = ($totalAttachmentFileSizeForSpace / 1024.00) / 1024.00 )

In questa sezione del codice, viene eseguito un esempio di ciclo sulle varie pagine, per determinare la dimensione dei vari allegati alle pagine dello Space. Questo è sicuramente un ottimo esempio che mostra come sono reperite le informazioni usando il codice delle macro.

In aggiunta vediamo come eseguire il reperimento dei dati, quali le pagine presenti dentro uno space, e degli allegati. La sintassi non è affatto difficile e consente di poter lavorare agevolmente.

## Display Space Details
<table class="confluenceTable">
  <tbody>
    <tr>
      <th class="confluenceTh">Name</th>
      <td class="confluenceTd">$spaceName</td>
    </tr>
    <tr>
      <th class="confluenceTh">Key</th>
      <td class="confluenceTd">$spaceKey</td>
    </tr>
    <tr>
      <th class="confluenceTh">Description</th>
      <td class="confluenceTd">$spaceDescription.getBodyAsString()</td>
    </tr>
    <tr>
      <th class="confluenceTh">Home Page</th>
      <td class="confluenceTd">#contentLink2($spaceHome true false)</td>
    </tr>
    <tr>
      <th class="confluenceTh">Created By</th>
      <td class="confluenceTd">#usernameLink($spaceCreator) ($action.dateFormatter.formatDateTime($spaceCreationDate))</td>
    </tr>
    <tr>
      <th class="confluenceTh">Number of Pages</th>
      <td class="confluenceTd">$pageCount</td>
    </tr>
    <tr>
      <th class="confluenceTh">Number of Blog Posts</th>
      <td class="confluenceTd">$blogCount</td>
    </tr>
    <tr>
      <th class="confluenceTh">Number of Attachments</th>
      <td class="confluenceTd">$totalAttachmentCount (including all versions)</td>
    </tr>
    <tr>
      <th class="confluenceTh">Total Size of Attachments</th>
      <td class="confluenceTd">$attachmentSizeMb MB</td>
    </tr>
  </tbody>
</table>

Questa è la parte che si occupa della visualizzazione. Notiamo che si tratta di HTML, che sfrutta le classi e le proprietà di Confluence. Vediamo che tutti i risultati delle precedenti elaborazioni sono inserite in questa tabella, in maniera molto rapida.

Conclusioni

Abbiamo analizzato un esempio di macro, molto semplice ma nello stesso tempo, fondamentale. Con esso è possibile comprendere e capire meglio come si può realizzare una macro, come possiamo sfruttare i vari punti del linguaggio per realizzare le funzionalità di cui si abbisogna senza, in questo caso, dover installare nulla :-). Scusate se è poco 😀

Ringraziamenti

Un ringraziamento particolare va all’autore del post blog. L’articolo è ben fatto e, anche se in inglese, è molto chiaro. I complimenti all’autore sono d’obbligo. 🙂