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 🙂

 

 




Zephyr for JIRA – Prova su strada

Prova su strada

In questo post andremo ad eseguire la prova su strada dell’addon Zephyr for JIRA – Test Management.

Installiamo

Procediamo l’installazione, direttamente dal marketplace, come siamo già abituati.

Zephyr-02-01

Accettiamo i termini di licenza, quindi procediamo semplicemente selezionando il tasto Accept.

Zephyr-02-02

Lasciamo che la procedura si occupi del download e quindi….

Zephyr-02-03

… attendiamo l’installazione. Dopo di che l’addon è subito disponibile per essere utilizzato.

Zephyr-02-03A

Configuriamo l’addon

Il primo passo che deve essere fatto, è la configurazione. Possiamo accedervi direttamente dalla sezione di amministrazione degli Addon, come mostrato in figura:

Zephyr-02-05

Se selezioniamo la General Configuration, possiamo settare tutte le opzioni che l’addon mette a disposizione.

Zephyr-02-04

Possiamo assegnare anche dei codici di colore per poter identificare i vari stati.

Zephyr-02-06

NB. Si suggerisce una operazione di reindex al termine della installazione. L’addon modifica la configurazione interna di JIRA, come l’aggiunta di nuovi campi personalizzati. Di conseguenza, meglio eseguirla o rischiamo di non vedere le nuove features. L’addon ci aiuta segnalandolo nella sezione di configurazione (Vedi prima immagine della General Configuration).

Usiamo l’addon

Creiamo un progetto ad hoc, che per fantasia chiamiamo Demo-Zephyr.

Zephyr-02-08

Poi passiamo all’utilizo vero e proprio. Il progetto deve presentare, come tipo di Issue, TEST, ovvero il nuovo tipo aggiunto dall’addon. Possiamo quindi aggiungerlo allo schema in uso al progetto oppure selezionarne uno preesistente.

Creiamo un nuovo Test semplicemente selezionandolo dalla Toolbar

Zephyr-02-07

che come vediamo mette a disposizione tutte le informazioni. Se selezioniamo Create a Test, viene subito proposta una nuova maschera che consente di poter eseguire l’inputazione dei vari dati del test:

Zephyr-02-09

Come osserviamo, non abbiamo da imparare nuove configurazioni: Sembra che stiamo inserendo una nuova e banale Issue. Di conseguenza, possiamo elogiare la scelta fatta dal produttore, in quanto favorisce in maniera non indifferente l’utente.

Creato il test, andiamo a creare un ciclo di test, dove possiamo inserire tutti i nostri test creati.

Zephyr-02-10

Semplicemente, o da menù Test, o dalla sezione Overview del progetto, andiamo a settare i Test Cycles.

Zephyr-02-11

Selezioniamo il Test che abbiamo appena creato e andiamo a generare il nostro Test Cycle.

Zephyr-02-12

Vediamo che il test risulta ancora non eseguito. Procediamo con l’esecuzione, che può essere vista come un semplice sistema di gestione

Zephyr-02-13

Andando a selezionare la relativa voce del men Test, andiamo a gestire le esecuzioni e, di conseguenza, impostiamo i vari stati che il piano di esecuzione può assumere.

Nella precedente immagine, abbiamo simulato una esecuzione e, come possiamo vedere, abbiamo tracciato tutto lo storico dei vari stati. Possiamo quindi tracciare ogni singola fase del test.

Conclusioni

Abbiamo a disposizione un addon molto interessante, ben fatto e che consente di poter semplificare molto la gestione dei test. Si integra molto bene con JIRA e le sue funzionalità, senza inficiare il lavoro dell’utente, anzi, semplificandolo in quanto applica esattamente quello che già conosce. Il giudizio non può che essere uno solo: OTTIMO ADDON 🙂

 




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 😀

 




TEMPO – un addon indispensabile per JIRA

Tempo – Addon indispensabile

In questo post andremo ad esaminare un addon indispensabile per gli utilizzatori di JIRA. Si tratta di TEMPO. Vedremo che cosa offre, quali funzionalità mette a disposizione e quali possibilità offre.

First look

Fondamentalmente, TEMPO consente di poter facilmente tracciare dei consuntivi delle ore di lavoro. Il suo obbiettivo è quello di agevolare il lavoro degli utilizzatori di JIRA, tracciare facilmente le ore di lavoro e consentire ai manager /project manager di poter monitorare l’andamento degli stessi progetti.

Dalla precedente immagine, vediamo che consente una veloce e rapida imputazione dei dati delle ore, consentendo di poter facilmente discriminare tra le varie attività svolte e agevolando il lavoro degli utilizzatori (mi permetto di sottolineare l’uso di questo termine, in quanto questo addon si presta bene a chiunque utilizzi JIRA per tracciare le ore di lavoro, quindi non solo sviluppatori software, ma anche progettisti o chiunque lo utilizzi).

L’addon mette a disposizione agevoli schermate video che consentono una maggiore visibilità delle informazioni, anche nel caso di utenti coinvolti in più progetti.

Report e grafici sono messi a disposizione per monitorare gli andamenti dei progetti, degli sforzi degli utilizzatori nei vari progetti.

Viene messa a disposizione anche la possibilità, per gli utilizzatori, di poter inserire la pianificazione di ferie/permessi.

Da sottolineare anche la presenza di Gadget, indispensabili per creare delle dashboards omnicomprensive e ricche di informazioni. Questo lo rende uno strumento completo ed indispensabile per svolgere le proprie attività.

Agevoli strumenti sono messi a disposizione per tracciare i timesheet, monitoraggio e pianificazione delle attività.

Conclusioni

SI tratta di uno degli addon più completi e sicuramente indispensabili. Disponibile sia per installazioni server, che per installazioni cloud, è sicuramente lo strumento ideale per la gestione dei progetti. Nei prossimi post andremo ad eseguire la solita prova su strada dell’addon e, successivamente, forniremo una comparazione con altri strumenti che svolgono operazioni simili, come già mostrato nel seguente post:

Reference

 




JIRA Workflow – Approfondimenti

Approfondiamo l’argomento

In questo post andremo ad approfondire l’argomento Workflow, già trattato in:

Cercheremo, in questa prima fase, di capire che funzionalità abbiamo a disposizione, cercando in una seconda fase di applicarle a dei casi reali.

Nel dettaglio

Come JIRA Administrator è possibile operare le seguenti azioni su di un Workflow:

  • Triggers –  Si tratta di  impostare delle azioni specifiche da eseguire in determinate condizioni / transazioni.
  • Conditions – possibilità di poter impostare delle condizioni per poter eseguire determinate transazioni.
  • Validators – intesa come validazione dei dati, affinché rispettino determinate condizioni
  • Post functions – intesa come l’esecuzione di operazioni dopo che una issue è passata da uno stato all’altro
  • Properties – si tratta di coppie di valori che possono essere usate per estendere le proprietà, come informazioni aggiuntive del workflow.

Andiamo ad esaminare nel dettaglio le varie componenti.

 

Triggers

Questi strumenti sono utilizzati prevalentemente per integrare determinate azioni del workflow con gli strumenti di sviluppo quali Stash o FishEye/Crucible. La seguente tabella riassume quali azioni possono essere eseguite.

WF-03-01

Di conseguenza, se non si dispone di un link a tali strumenti, i trigger non risultano usabili. Questo lo andremo a verificare con i nostri test. 🙂

 

Conditions

Si tratta condizioni che possono essere impostate nelle varie transazioni di stato del Workflow. Possiamo, ade esempio, impostare le seguenti condizioni:

  • Consentire al solo reporter di eseguire una transizione di stato. Si tratta di una condizione molto rigida: Si consiglia una attenta valutazione prima di impostare una condizione del genere;
  • Consentire ad un insieme di utenti di poter eseguire una transizione di stato. SI tratta di una condizione molto rigida anche questa.
  • Poter eseguire una transizione di stato solo dopo aver eseguito la commit.

Validators

Con questa funzionalità, riusciamo ad impostare una validazione dei dati che sono inseriti prima della transazione di stato. Se questa fase non viene passata, la transazione di stato non viene eseguita e le operazioni successive non sono eseguite.

In questo modo possiamo accertarci di aver inserito correttamente tutte le informazioni, nell’ambito di una issue. Possiamo finalmente avere delle issue complete in ogni fase della lavorazione 🙂

 

Post functions

Si tratta di operazioni, di corollario, che possono essere impostate per essere eseguite dopo che la transazione di stato è stata eseguita. In questo modo possiamo impostare delle funzionalità aggiuntive. SI tratta di una funzionalità non indifferente 🙂

Possiamo settare lo stato di una linked issue, in modo da sbloccarla in … automatico. Questo sicuramente ci può aiutare nella sincronizzazione dei gruppi di lavoro. Supponiamo che una nostra issue blocca il lavoro di un altro gruppo. Con questa semplice azione possiamo segnalare in automatico che possono procedere con la lavorazione di una determinata anomalia. Immaginatevi se i gruppi di lavoro sono a distanza l’uno dall’altro.

Possiamo anche andare a settare un campo in funzione del contenuto di un’altro. Le possibilità sono molteplici. 😀

 

Properties

Si tratta di coppie di valori (codice/valore) che sono usate per estendere le proprietà di un workflow.

Un possibile uso può essere quello di impostare delle restrizioni in base ai valori delle properties impostate.

 

Conclusioni

In questo post siamo andati un in profondità sui Workflow. Abbiamo visto come è possibile estendere queste nuove funzionalità, come poter impostare diverse condizioni, validazioni ed estendere il Workflow con nuove proprietà. Nei prossimi post andremo a vedere un esempio di utilizzo di queste, applicandoli a situazioni già descritte.

 




Kanoah Tests 1.5.0 – Ultime novità

Ultime news

In questo post andremo a vedere quali sono le ultime novità sull’addon Kanoah Tests, andando ad approfondire i post che nel passato abbiamo dedicato all’argomento.

Andiamo in dettaglio

Vediamo quali sono le ultime novità, andandole ad esaminare in dettaglio:

Rich text support

E’ stato fornita la possibilità di editare i commenti ed i testi con formattazione (grassetto, italico, etc), come mostrato nella seguente figura.

Permission

Abbiamo a disposizione una unica area, nella sezione di amministrazione, per gestire le permission dei vari utenti, gruppi e ruoli.

Tracciatura storico test

Viene data la possibilità di poter tracciare lo storico dei vari test, delle varie operazioni, come mostrato in figura.

Abilitare/Disabilitare l’addon

Viene data la possibilità di poter abilitare/disabilitare l’addon per specifici progetti. Questo significa che possiamo attivare l’addon solo per alcuni di essi e non attivarlo per altri. Provate a pensare se avete delle situazioni in cui si dispone di progetti, preesistenti, che sono già operativi ed avviati. Questo è un ottimo risultato.

Migliorata la gestione dei Run Test

E’ stata migliorata la gestione dei Run Test, consentendo una migliore interazione con gli stessi e consentendo di poter meglio gestire il tutto.

Conclusioni

La Kanoah ci sorprende con nuove sorprese. Sono sicuro che non finirà di stupirci. Rimaniamo in attesa di nuove implementazioni 🙂




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.




TimePO – Prova su strada

Prova su strada

Proseguiamo l’analisi dell’addon: andiamo a provarlo su strada e a verificarne le potenzialià.

Installazione, configurazione …

Dopo aver installato l’addon, con le solite procedure, abbiamo il nostro addon attivo:

timepo-01

Non abbiamo una fase di configurazione vera e propria. Basta semplicemente aggiungere i seguenti gadget alla dashboard di sistema:

timepo-02

Aggiunti alla dashboard, procediamo solo ad impostare i parametri dei gadget, come mostrato in figura

timepo-03

Configuriamo il gadget logged time su di un progetto specifico, in modo da saggiarne una prima potenzialità.

Non appena salviamo la configurazione, questo è il risultato. Tenete conto che sto utilizzano il mio ambiente di test, dove eseguo tutte le prove su strada. Questo mi aiuta notevolmente a saggiare il nuovo componente, cercando di costruire una situazione il più simile ad un ambiente di produzione.

timepo-04

Come si può vedere, gli operatori possono già da subito caricare le ore direttamente sui vari TASK (primo gadget). Questa visualizzazione si avvicina tantissimo ad un normale consuntivo delle ore, cui siamo molto abituati.

Se selezioniamo una singola cella, come mostrato in figura, vediamo che subito possiamo inserire le ore sul task, sulla giornata cui vi abbiamo lavorato. La seguente figura mostra la form di caricamento delle ore, molto semplice e di facile utilizzo.

timepo-05

Il risultato è molto semplice.

timepo-06

Proviamo adesso a verificare i risultati nel secondo gadget. Andiamo ad inserire i dati sui task di uno specifico progetto e verifichiamo i risultati, con la prossima figura.

timepo-07

Come abbiamo modo di vedere, il secondo gadget realizza una pivot con tutte le informazioni che servono, per la gestione del progetto. Abbiamo il totale delle ore raggruppate per progetto e la spaccatura totale per utente, task.

Domanda: Come estraggo i dati?

La domanda è molto lecita. Il sistema non servirebbe a nulla, se poi non è possibile estrarre i dati. Se andiamo a visualizzare gli elenchi dei report, possiamo avere a disposizione un meccanismo per estrarre i dati e portarli su Excel. Dalla figura abbiamo le indicazioni per reperire i report:

timepo-08

Se selezioniamo il primo report, ovvero TimePO Project/Team timesheet report, quindi selezioniamo i parametri di emissione del report:

timepo-09

Il risultato che otteniamo è il seguente:

timepo-10

L’apposito tasto Excel View, posto in alto a destra, ci aiuta nella estrazione dei risultati in Excel.

Conclusioni

Il risultato è notevole. Aggiungiamo che l’addon (al momento in cui viene redatto l’articolo) è gratuito. Questo ne fa una delle soluzioni più semplici per la tracciatura delle ore di un progetto. Il sistema per imputare le ore è molto semplice: sostanzialmente si tratta di compilare un oggetto molto simile ad un foglio excel. Questa soluzione è sicuramente ottima per le aziende che non possono permettersi delle soluzioni costose.

Reference

Le informazioni sull’addon sono reperibili qui.

 




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. 🙂