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

 

 




Una piccola novità su Confluence

Una piccola novità….

In questo post andremo a riportare una curiosità, di cui mi sono accorto in questi giorni. Seguirà un post con opportuni approfondimenti 🙂

 

Di cosa si tratta?

Andiamo al dunque. Lavorando tutti i giorni con la versione Cloud di Confluence e JIRA, quasi non faccio caso alle ultime novità. Ma questa volta ho notato una piccola …. variante 😀

novita01

Nella fase di creazione di nuovi contenuti, è stata introdotta una variante. Il tasto Create è stato modificato in modo da semplificare il lavoro dell’operatore. Questo significa che se vogliamo creare una singola pagina, basta selezionare il tasto. Se invece abbiamo la necessità di creare una pagina da Template, allora quello che possiamo fare  selezionare il tasto con i tre punti, posto a fianco del tasto Create .

Conclusioni

Si tratta di un piccolo miglioramento, ma nel lavoro di un operatore, si tratta di una variante molto interessante. Se ci concentriamo sul lavoro di un operatore generico, questo lo aiuta notevolmente nell’aumentare la produttività e nel semplificarsi la vita. Non è cosa da poco 🙂




Stampiamo le pagine Confluence in PDF

Contenuti, Contenuti, Contenuti

In questo post andremo a vedere come possiamo stampare su PDF le pagine del nostro Confluence. Primo di una serie, in questo post andremo a fare una presentazione delle possibilità esistenti.

 

Come portare i contenuti su PDF?

Cerchiamo di dare una risposta a questa semplice domanda.

Abbiamo diverse possibilità, a seconda del nostro portafoglio, delle possibilità e delle potenzialità. Il primo sistema che abbiamo a disposizione è quello di stampare la pagina web su PDF (Opzione nativa su Chrome), sfruttando sia quello che il Browser offre che prodotti di terze parti, che ci creano delle stampanti virtuali che svolgono questa mansione.

Tuttavia, quello che potremmo ottenere, non sempre risulta di nostro gradimento: impaginazione non proprio perfetta, oppure riservarci delle sorprese e…. dover ricominciare da capo.

Altra alternativa è la funzionalità nativa di Confluence, come mostrato in figura:

pdf-01

Si tratta di una funzionalità nativa, messa a disposizione sia della versione server che della versione cloud, che consente di poter eseguire una esportazione, in formato PDF, della pagina correntemente visualizzata. Tuttavia il risultato potrebbe essere il medesimo e l’espressione del nostro viso potrebbe non mutare 🙂

L’operazione è possibile, sia per una singola pagina, che per un intero space/porzioni di space:

Infatti questa modalità ha necessità di essere opportunamente configurata. Ciò deve essere eseguito nella sezione di amministrazione: da COG menù selezioniamo General Configuration, quindi nel pannello di amministrazione cerchiamo la sezione LOOK AND FEEL:

pdf-02

abbiamo due sezioni dedicate alla configurazione:

  • PDF Layout
  • PDF Stylesheet

Il primo è interamente dedicato alla definizione del layout, dove andiamo a definire:

  • Titolo della pagina
  • Header
  • Footer

pdf-03

Il secondo consente di poter impostare un foglio di stile CSS da impostare per determinare lo stile del PDF.

Alternative?

Abbiamo valide alternative alle funzionalità standard di Confluence. Si tratta di un addon molto valido, ovvero Scroll PDF Exporter. Sviluppato dalla K15t Software GmbH, mette a disposizione una serie di funzionalità che semplificano notevolmente la vita dei redattori di documenti. Questo addon è al momento disponibile solo per le installazioni Server, ma confidiamo che funzionalità analoghe saranno presto disponibili su installazioni cloud.

 

Viene data la possibilità di poter definire degli export scheme  personalizzati, in maniera molto semplice, come siamo già abituati.

 

Semplici autocomposizioni consentono agli utenti, anche non espertissimi, di poter configurare un export scheme senza alcuna fatica e con pochi click del mouse.

 

Un addon molto completo e ben semplice, che consente di poter creare, dato un Confluence, un manuale in pochissimi click.

 

Altre alternative?

Abbiamo anche altre alternative, magari meno cool, ma andiamole a vedere. Sono sicuro che saranno molto interessanti 🙂

Iniziamo con PDF Macros for Confluence. Si tratta di un addon che mette a disposizione le seguenti macro, al fine di consentire l’esportazione su PDF delle pagine di Confluence:

  • PDF Pagebreak: Per forzare le interruzioni di pagina
  • PDF Landscape: Mostrare il risultato della pagina in Landscape.
  • PDF Hidden Content: Nascondere il contenuto in fase di esportazione
  • Hide in Web View: Mostrare il contenuto solo su esportazione
  • Current Date and Time: Mostrare data e ora sulle pagine

Addon gratuito (al momento in cui viene scritto questo post), è una valida alternativa per predisporre delle pagine di Confluence, al fine di creare delle sezioni che diventino della manualistica.

 

Conclusioni

Abbiamo visto una panoramica di questo argomento. Nei prossimi post andremo più in profondità, per meglio capire come poter sfruttare queste funzionalità.




Template e Copy Page Tree – Una alleanza non indifferente

Componiamo le funzionalità

In questo post andremo a descrivere come possiamo comporre le due funzionalità in modo da ottenere un risultato unico 🙂

 

L’Unione fa la forza

Per riprendere l’omonimo detto popolare, mettendo insieme queste due funzionalità, è possibile creare un mix che può risultare molto utile nell’utilizzo di tutti i giorni di Confluence. Vediamo come.

Nell’uso di tutti i giorni, può capitare di voler usare delle pagine, e relative sottopagine, come dei template per implementare delle vere e proprie Schede di informazioni, come accennato nel seguente post. Adesso vediamo come realizzare il tutto con un esempio pratico. Questo può essere realizzato sia per le versioni Server, che per le versioni Cloud, in quanto l’addon è disponibile per entrambe le installazioni :-).

 

Come realizziamo il tutto?

Semplice. Creiamo uno Space ad hoc, dedicato ad implementare i template. Nel nostro caso, la home di questo Space, presenterà tutti i link ai Template impostati e ci aiuterà nella gestione degli stessi, come mostrato in figura.

Template01

A questo punto, una volta selezionato il template, attiviamo l’addon e copiamo il template dove ci serve.

Template02

Puntualizzazioni

Occorre evidenziare quanto segue:

  • La modifica dello Space, dedicato ai Template, non deve essere fornita a tutti gli utenti, ma solo ad utenti ben specifici. Questo al fine di evitare che si crei un caos non indifferente. L’utente medio deve limitarsi al solo utilizzo dei template. In caso, attraverso altri sistemi, sempre previsti ed attraverso opportuni sistemi, si può richiedere la creazione di nuovi template al personale autorizzato.
  • Una volta copiato il template dove richiesto, l’utente dispone della massima libertà di personalizzazione. Questo significa che, se il template prevede una pagina principale e 3 sottopagine, l’utente, una volta copiato, può aggiungere nuove sottopagine/togliere sottopagine, modificare la struttura interna delle pagine.

Conclusioni

Abbiamo visto un esempio pratico di come realizzare un mix di funzionalità, con l’obbiettivo di aiutare l’utente finale nello svolgimento delle sue attività.




Gestiamo gli appuntamenti

Appuntamenti

In questo post andremo ad esaminare come poter gestire degli appuntamenti attraverso Confluence e Team Calendar. In aggiunta, cercheremo di capire come poter automatizzare questa operazione in modo da poterla usare in diverse soluzioni.

Di cosa abbiamo bisogno?

Cercheremo di realizzare il tutto attraverso questi strumenti:

  • Confluence (versione Server/Cloud)
  • Team Calendar (versione Server/Cloud)

Come realizziamo il tutto?

Cerchiamo di realizzare il nostro calendario degli appuntamenti. Abbiamo diverse possibilità.

Sfruttanto l’addon Team Calendar, di cui abbiamo già parlato in vari posts, possiamo creare una pagina dedicata, dove andiamo a posizionare un calendario dedicato alla gestione degli appuntamenti.

Appuntamenti01

Basta selezionare Add Event e possiamo creare l’appuntamento, indicando le varie caratteristiche dello stesso, come mostrato nella figura successiva:

Appuntamenti02

Possiamo definire anche dei nuovi Event Type, a seconda delle nostre esigenze, oltre che definire dei reminder per essere avvisati per tempo.

Alternative?

Sempre attraverso Team Calendar, possiamo anche collegarci a Google Calendar, come specificato nella documentazione stessa di Team Calendar.

In questo modo abbiamo la possibilità di poter sfruttare un Calendario già in uso, attraverso Confluence, come già mostrato in altri post.

Conclusioni

Abbiamo visionato come Team Calendar possa essere utilizzato per poter gestire i nostri appuntamenti, come poterli creare e come integrarli nelle nostre pagine. Possiamo immaginare questa funzionalità in uso per migliaia di possibili utilizzi. Lasciamo correre la nostra fantasia 🙂




User Macro – Andiamo più in profondità

Approfondiamo l’argomento

In questo post andremo ad approfondire quanto già trattato nei seguenti post in materia di User Macro

Vediamo cosa possiamo fare

Nei precedenti post, abbiamo visto il classico esempio Hello World, croce e delizia di tutti gli sviluppatori. Questo per cercare di capire che cosa possiamo realizzare. Cerchiamo di entrare nel dettaglio.

Parametri

Possiamo gestire dei parametri nelle User Macro? La risposta è si :-).  Si tratta dei parametri, cui siamo oramai abituati, che normalmente vengono chiesti quando andiamo ad eseguire l’editing della macro stessa.

Possiamo definirli come:

## @param MYNAME:title=MY TITLE|type=MY TYPE|desc=MY DESCRIPTION|required=true|multiple=true|default=MY DEFAULT VALUE

ovvero come:

  • ## – Serve per identificare questa sezione di definizione di parametri e di caratteristiche della User Macro.
  • @param<nome> – Definisce il parametro. Utilizzando il prefisso @param, tutto ciò che si trova subito dopo sarà considerato come il nome del patametr
  • attributi – possiamo definire una serie di attributi, quali:
    • Titolo
    • Tipo del parametro, che può assumere un valore tra i seguenti:
      • boolean  (Booleano)
      • enum (per definire degli insiemi di possibili valori)
      • string (Stringa generica)
      • confluence-content (per consentire di poter referenziare dei contenuti di Confluence stesso, quali blog post o pagine)
      • username (per consentire di poter selezionare degli utenti)
      • spacekey (per consentire di poter selezionare degli space)
      • date (data)
      • int (numerico)
      • percentage  (trattato come una stringa. Sembra sia utilizzato per definire delle percentuali di utilizzo o per indicare tipo, ad esempio, quanti post blog visualizzare)

La User Macro può anche non presentare dei parametri. Basta, semplicemente, indicarlo come segue:

## @noparams

Oggetti disponibili

Vediamo quali oggetti abbiamo a disposizione per poter eseguire le nostre elaborazioni.

  • $body – il corpo della macro, come indicato nei post precedenti.
  • $param<nome> – il parametro definito.
  • $config – Si tratta dell’oggetto bootstrapManager di Confluence, che restituisce diverse proprietà di Confluence che possiamo utilizzare.
  • $space – oggetto Space, dove viene richiamata la Macro. Tramite questo oggetto possiamo richiamare diverse informazioni, quali pagine, blog post, etc.
  • $renderContext – Si tratta delle informazioni restituite dall’oggetto PageContext.
  • $content – Si tratta delle informazioni restituite dall’oggetto ContentEntity.

Maggiori ragguagli sono disponibili nella sezione developer della Atlassian.

Prossimi passi?

Nei prossimi passi, andremo ad approfondire un altro esempio

 

Reference




Workflow su Confluence – Prova su strada: Alternative

Workflow – Alternative

In questo post mostreremo come poter realizzare un semplice Workflow su Confluence, senza far ricorso all’addon dedicato, e sfruttando delle alternative ben precise.

 

Perchè non usare l’addon?

L’addon potrebbe non essere una scelta percorribile oppure potrebbe non essere disponibile, in quanto disponiamo di una installazione Cloud e vogliamo sfruttarla. Le motivazioni potrebbero essere qualsiasi.

Vediamo come implementare una alternativa.

Di cosa abbiamo bisogno?

Mettiamoci nell’ottica di utilizzare solo le funzionalità standard al fine di riuscire a ottenere un Workflow. In articolare ci concentriamo sulle seguenti funzionalità:

Dettaglio

Abbiamo un insieme di funzioni che ci consentono di poter creare un Workflow primordiale, ma efficace. Adesso andiamo a metterle insieme per realizzare questo nostro Workflow…. artigianale 🙂

Come prima cosa, abbiamo bisogno che esistano due Space ben distinti:

  • Uno con le informazioni pubblicate e pubbliche, dove sono riportate le pagine da mettere a disposizione degli utenti (Space PUBBLICO)
  • Uno con le pagine da modificare, ed a disposizione degli utenti che si occupano di pubblicare queste pagine (SPACE PRIVATO).

Come prima cosa, dobbiamo definire un template di pagine. In questo template, la prima sezione sarà costituita da:

  • Metadati del documentoSi tratta di Page properties e forniscono informazioni di dettaglio del documento. Queste sono molto utili e devono rimanere nelle pagine presenti in entrambi gli space, in quanto forniscono le indicazioni agli utenti di quanto sono recenti le informazioni. WF-MAN-01
    Sarà anche inserita una informazione fondamentale: Lo stato della pagina; che indicherà se la pagina è stata Creata, Modificata, Aggiornata, Cancellata, Pubblicata etc.
  • Tasks – In questa sezione sono riportate tutte i task che sono assegnati al gruppo di lavoro, ovvero chi scrive e chi fa le revisioni al documento, chi si occupa del controllo, chi di segnalare, etc etc etc. WF-MAN-02
  • Versioni della Pagina – Consentono di capire chi ha modificato cosa e perché. Si tratta delle funzionalità standard di Confluence ed indica l’utente che ha creato la pagina, chi ha eseguito le modifiche e quando, chi l’autore delle ultime modificheWF-MAN-03

Procediamo

Quando si crea una pagina, utilizzando un template, si crea la pagina e nei metadati si inserisce in stato DRAFT. La si completa con i dati di chi crea la pagina e, fino a quando non si è completata la redazione, si lascia in stato DRAFT.

WF-MAN-04

Quando si vuole iniziare l’iter di pubblicazione, si modifica lo stato in RICHIESTA APPROVAZIONE e si inserisce un TASK, assegnandolo alla persona responsabile di tale compito.

WF-MAN-05

La persona responsabile, riceverà un messaggio, dal sistema di messaggistica di Confluence

WF-MAN-06

quindi procederà con la revisione e nel caso di ulteriori modifiche.

In prima battuta, andrà a modificare lo stato in modo da poter indicare che sta procedendo con il lavoro.

WF-MAN-08

inserirà le sue modifiche (Nella figura seguente, la modifica riguarda l’aggiunta della sola riga del 18.07.2015, indicante la scritta MODIFICA)

WF-MAN-07

Infine, creerà un ulteriore task con le modifiche da verificare alla persona che ha richiesto l’approvazione. Quindi marcherà il suo lavoro come eseguito.

WF-MAN-09

La persona, cui è stata richiesta l’approvazione, riceverà un messaggio dal sistema di notifiche di Confluence.

WF-MAN-10

Quando aprirà la notifica, verificherà che gli è stato assegnato un Task per approvare la modifica.

WF-MAN-11

A questo punto procederà con il controllo, verificherà la modifica e alla fine approverà o meno il lavoro fatto. Al termine, quando la modifica risulterà approvata, verrà eseguito lo stesso ITER per procedere alla pubblicazione. Sarà assegnato un Task alla persona che si occupa della pubblicazione della pagina e questa procederà alla sua pubblicazione. Eseguirà la copia delle stesse, creando la nuova versione della pagina, modificherà lo stato della pagina SORGENTE in PUBBLICATO e aggiornerà di conseguenza la pagina nello Space PUBBLICO, facendo si che:

  • I metadati siano congruenti e presentino tutte e informazioni richieste dagli utenti finali.
  • Eliminerà i task dalla pagina dello Space PUBBLICO. Non sono necessari
  • Riporterà il testo aggiornato. Non si occuperà della modifica dei commenti o di altro.
  • Riporterà tutti gli allegati nella pagina, creando le versioni storiche.

WF-MAN-12

Conclusione

Abbiamo visto un sistema alternativo, basato su funzionalità standard di Confluence, che consente di implementare un sistema molto semplice di Workflow. Ovviamente si tratta di un sistema che può essere implementato per realtà piccole/medie, non molto strutturate e con poche persone. Quando il numero delle persone e dei gruppi e degli space aumenta, allora conviene sicuramente volgersi a delle soluzioni molto più strutturate, non ultima, utilizzare l’addon già descritto nel precedente post.




Atlassian Connect – Introduzione

Addons per Cloud

In questo post iniziamo ad analizzare come realizzare un addon per i prodotti Atlassian su Cloud. Parleremo di Atlassian Connect.

 

Due parole prima di iniziare

Lo sviluppo su Atlassian Connect non può essere fatto allo stesso modo degli addon per installazione Server. Essendo un sistema configurato in maniera differente, deve ragionare in maniera differente. Già in questo post, avevo indicato quali sono le differenze tra i Server e Cloud. Queste differenze si riflettono anche nello sviluppo degli addon per la versione Cloud.

Occorre tenere presente che, fondamentalmente, l’addon per Cloud è una webapp a se stante che si interfaccia con la componente Cloud, sfruttando le chiamate REST e controllandone le risposte che restiruisce.

Che cosa è Atlassian Connect?

Connect è un framework che la Atlassian mette a disposizione per mettere in comunicazione gli Addons, che come indicato in precedenza sono delle web application, con Confluence e JIRA Cloud.

Come indicato nel seguente diagramma, presente nella documentazione Atlassian:

l’addon si interfaccia con l’istanza cloud Atlassian. L’utente finale non vede alcuna differenza: non si deve preoccupare di dover modificare alcuna configurazione: Sarà il Confluence o il JIRA di turno a richiamare la web application e a comunicare con essa.

Come sarà organizzata?

L’addon sarà costruito secondo opportuni criteri e deve essere impostata in modo da riportare delle informazioni (in particolare, determinati contenuti) nella UI dei prodotti Atlassian, in modo da poter richiamare le funzionalità della web application.

L’addon dovrà poi comunicare con i prodotti Atlassian attraverso le chiamate REST e attendere/rispondere a Webhooks.

Conclusioni

Come precedentemente esposto, la realizzazione di addon per Cloud richiede un differente approccio rispetto agli addon per le versioni Server. Nei prossimi post andremo a vedere il classico Hello World .

 

Reference

La manualistica può essere reperita qui

 




Copy Page Tree – Esempio di uso

Esempio di uso

In questo post andremo ad esaminare un addon, forse non molto considerati, ma che può sicuramente risultare utile nel proprio lavoro di tutti i giorni.

 

A cosa serve?

Questo addon consente di poter copiare una pagina, e la relativa alberatura sottostante, da uno space ad un’altro, specificando lo space dove andare a copiare, come mostrato nella figura precedente.

L’addon mette a disposizione la possibilità di poter modificare i nomi delle nuove pagine copiate e di poter eseguire delle operazioni di renaming/aggiunta prefissi e suffissi agli attachments. Viene anche data la possibilità di poter copiare o meno gli attachments stessi 🙂

UN agevole LOG consente di poter visionare l’avanzamento della operazione di copia, mettendo a disposizione uno strumento agevole.

Che utilizzi possiamo avere?

Questa è sicuramente la domanda più importante. Per quale motivo possiamo utilizzare questo addon?

Schede Clienti

Un primo utilizzo che mi viene in mente potrebbe essere quello di utilizzarlo come sistema per creare delle alberature standard nel nostro Confluence Cloud. Se abbiamo la necessità di disporre, anche su space differenti, di una particolare alberatura di pagine, che sia sempre la medesima, questo sistema è sicuramente il più semplice.

Un esempio banale, potrebbe essere quello di creare delle schede clienti. Potremmo avere necessità di una alberatura standard, dove andare a posizionare le varie informazioni del cliente, e con questo sistema, basta disporre di uno Space che contenga il template, ed il gioco è fatto. 🙂

 

Template standard

Nel caso in cui il semplice Template non sia sufficiente ai nostri obbiettivi, ovvero abbiamo la necessità di disporre di template di pagine standard per gestire i vari meeting, analisi, documentazione, etc. Questo può essere realizzato sia su installazioni Server che su installazioni Cloud.

 

Conclusioni

Anche se a prima vista gli addon non sembrano svolgere chissà quale funzione, consiglio vivamente di far correre la fantasia. Vedrete che i vari addon possono sopperire a necessità inaspettate, arrivando a sorprendere sempre 🙂




Workflow su Confluence

Workflow su Confluence

In questo post andremo ad introdurre un concetto di Workflow su Confluence.

 

Che cosa è un Workflow?

Come prima cosa, cerchiamo di dare una definizione di Workflow Per fare ciò, consiglio questo link, dove ho trovato una bella definizione di workflow e consiglio anche la pagina di wikipedia (in inglese, ma la consiglio).

Fondamentalmente, andando al sodo, un Workflow è il flusso di lavoro che deve essere eseguito per svolgere una determinata operazione, in ambito di un business.

 

Come si può introdurre il concetto di workflow su Confluence?

Spieghiamo in che modo possiamo calare questo concetto su Confluence 🙂

In ambito wiki, si ha la necessità di un Workflow quando si devono pubblicare delle pagine in cui, per evidenti motivi, le informazioni devono essere prima vagliate/approvate da un responsabile che deve accertare che tutte le informazioni presenti siano corrette.

Basti pensare ad un sistema in cui ogni pagina wiki presenta delle informazioni finanziarie di una società. Se questa pagina è visionata da un numero molto elevato di utenti, la pubblicazione di una informazione errata potrebbe scatenare problemi non indifferenti.

 

Quindi, in situazioni come questa, dove se viene eseguita una pubblicazione senza controllo esiste un grosso rischio, trova la sua naturale applicazione un Workflow.

Come possiamo applicare un Workflow in Confluence?

In Confluence abbiamo a disposizione un Addon che consente di poter aggiungere un Workflow su Confluence. SI tratta del Comala Workflow.

 

Questo addon consente di poter assegnare uno stato specifico alle pagine di uno space. In aggiunta, possiamo assegnare un Workflow specifico ad ogni singolo space.

Possiamo assegnare task specifici ad un singolo utente, come mostrato nella precedente figura. Questi riceverà una opportuna segnalazione, in modo da poter poi procedere con le operazioni richieste.

 

Opportune macro consentono di poter creare delle pagine, in cui riassumere gli stati assunti dalle pagine

Nei prossimi post andremo a collaudare questo addon per saggiarne le potenzialità e limiti.

Alternative?

Come prima cosa, l’addon indicato è disponibile solo per installazioni Server, mentre non è affatto disponibile per Cloud. Quindi, sorge spontanea la domanda: Esistono delle alternative?

La risposta è si, e sarà oggetto di un post dedicato esclusivamente a questo punto.

L’idea è la seguente e si basa sull’uso di funzionalità standard.

Come prima cosa, occorre disporre di due space:

  • Space Pubblicato, ovvero lo space effettivamente disponibile al pubblico utenti
  • Space privato, clone dello space pubblicato, dove gli autori eseguono le correzioni/modifiche/aggiunte.

Come seconda cosa, possiamo associare degli stati agli space basandoci sulle Page properties, descritte in questo mio post, e usate anche in tanti altri esempi 🙂

Come seconda cosa, utilizziamo i Tasks di Confluence, per assegnare i compiti alle persone e mandare loro delle segnalazioni, un pò come avviene con l’addon, ma facendo uso solo delle funzionalità standard.

 

In questo modo, ed usando un pò di organizzazione, gli utenti lavorano nello space privato, a meno di correzioni del tipo:

  • errori di battitura;
  • correzioni dell’ultimo minuto, etc

cambiando stato (nelle page properties) ed impostando i task su di una opportuna pagina di uno space di lavoro.

Conclusioni

Abbiamo a disposizione degli strumenti opportuni per poter impostare un Workflow su Confluence, sia come addon specifici, sia come unione di funzionalità standard che, alla fine dei giochi, possono metterci a disposizione un Workflow molto primordiale ma, nel contempo, semplice e funzionale. Questi argomenti saranno approfonditi su altri post.