• Non ci sono risultati.

5.4 Alfresco Community Edition

5.4.2 Programmare per Alfresco

I tipi di dato gestiti dalla piattaforma e le loro relazioni sono definiti in Alfresco all’interno di modelli XML. Il termine “dato” è in questo contesto da intendersi in senso ampio, in quanto va a includere sia contenuti (per esempio tipologie di documento), che informazioni semplici (per esempio valori numerici).

Il sistema fornisce un insieme di modelli di base che descrivono, giusto per citarne alcuni, i tipi di dato fondamentali (numeri, stringhe, ecc.), i contenuti di base (documenti, cartelle, utenti, ecc.) e gli elementi di un flusso di lavoro (tipologie di compiti, sequenze di flussi, ecc.). Questi elementi di default costituiscono la base per i tipi personalizzati. Per rendere possibile questa derivazione (così come la derivazione da un altro modello personalizzato) è necessario che il modello specifichi le informazioni da importare in una lista di <imports>. Ogni elemento <import> specifica l’URI e il prefisso che identificano univocamente il modello. Il prefisso viene anteposto al nome di ogni elemento descritto, così da scongiurare il pericolo di incorrere in errori in caso di omonimia fra due elementi di modelli differenti. Quando si crea un nuovo file di descrizione, si deve specificare URI e prefisso come attributi di un tag<namespace />18.

I tipi di dato che possono essere definiti in Alfresco appartengono a cinque categorie [45]:

Tipi: identificati dal tag<type>, sono paragonabili agli oggetti nei linguaggi di program- mazione object-oriented. Descrivono oggetti reali di qualsiasi tipo (documenti, form, persone, ecc.), sono dotati di proprietà e possono discendere da un tipo genitore (< parent>) di cui ereditano le proprietà. La descrizione di un tipo può contenere anche associazioni e aspetti (questi ultimi possono essere obbligatori se inseriti in un tag

<mandatory-aspects>).

Proprietà: identificate dal tag<property>, sono metadati associati a un particolare tipo. Per ogni proprietà sono definiti i tipi di valori accettati (<type>), l’eventuale obbligo di

indicare un valore (<mandatory>) e se è possibile inserire valori multipli (<multiple>). Vincoli: identificati dal tag<constraint>, possono essere utilizzati per limitare i valori che una proprietà può assumere. Attraverso l’attributo type si indica il tipo di vincolo

(per esempio, una lista viene resa contype="LIST") imposto ai valori, che sono definiti parametri (<parameter>).

Associazioni: identificate dal tag<association>, definiscono relazioni fra diversi tipi. La

definizione di un’associazione si compone di due parti: una relativa alla sorgente (< source>) in cui si definisce se è obbligatoria e se accetta valori multipli (<many>), l’altra relativa all’elemento cui l’associazione punta (<target>) di cui si deve specificare il tipo (<class>), se questo è obbligatorio e l’eventuale possibilità di collegamenti multipli.

Aspetti: identificati dal tag<aspect>, sono essenzialmente dei “contenitori” di proprietà

e associazioni. A differenza di queste, però, sono indipendenti da un particolare tipo

5.4. ALFRESCO COMMUNITY EDITION 41 e consentono di definire proprietà e associazioni generali, attribuibili a tipi diversi qualora necessario.

I flussi di lavoro sono descritti in Alfresco utilizzando diagrammi BPMN 2.0 prodotti da Activiti. Questi possono essere visualizzati come file XML19 ed essere estesi utilizzando i tag<extensionElements>. Tali tag possono contenere frammenti di codice Javascript per la gestione del comportamento del flusso di lavoro (per esempio in presenza di una porta di scelta esclusiva) o per il trattamento dei dati utilizzati dal flusso di lavoro (per esempio per far sì che un dato inserito nel flusso di lavoro venga attribuito a una proprietà di un contenuto).

Il codice Javascript viene attivato da un evento relativo all’elemento in cui è inserito, indicato come attributo del tag<activiti:taskListener>. Per esempio, impostandoevent ="complete"lo script viene eseguito quando si completa il compito.

L’interazione dell’utente con la piattaforma avviene essenzialmente attraverso l’utilizzo di form, che possono essere descritti utilizzando file XML che contiene la configurazione di Alfresco (il tag radice dei vari moduli è<alfresco-config>).

Il codice è suddiviso in una serie di elementi <config> che richiamano i casi in cui applicare un determinato tipo di visualizzazione. L’associazione a determinati contenuti avviene attraverso l’utilizzo dei due attributi evaluator e condition che identificano, ri- spettivamente, il tipo di confronto da effettuare e il valore ricercato nel confronto. Alcuni dei valori che possono essere assunti daevaluatorsono:

string-compare si tratta di un confronto tra stringhe

task-type confronta i tipi associati ai compiti di un flusso di lavoro aspect confronta gli identificativi degli aspetti

node-type confronta gli identificativi dei tipi di nodo, cioè essenzialmente dei tipi di contenuto

model-type il confronto avviene sui modelli

Ogni elemento<config>contiene la descrizione di uno o più moduli<form>, strutturata in due sezioni. La sezione<field-visibility>contiene una lista di tutti i campi che devono essere visualizzati nel modulo, ciascuno dei quali è rappresentato da un elemento<show id ="..."/>. Segue un elemento<appearance>nel quale sono definite le impostazioni generali di visualizzazione dei campi, con riferimenti ai modelli cui devono rifarsi e all’identificativo dell’etichetta che devono visualizzare (attraverso gli elementi<set />e <field>).

Differiscono da questa struttura generale gli elementi <config>che gestiscono il menù per cambiare (o aggiungere) aspetti e tipi e quelli che gestiscono il menù della ricerca avanzata.

Nel primo caso sono presenti due liste, una relativa agli aspetti (<aspects>) e l’altra ai tipi di contenuto (<types>). I singoli aspetti sono elencati all’interno di tre tag:

42 CAPITOLO 5. ACTIVITI E ALFRESCO • <visible>per quelli visibili

• <addable>per quelli aggiungibili • <removeable> per quelli rimuovibili

Se la lista contenuta nei tre tag è identica, è possibile inserirla solamente nel primo elemento; Alfresco interpreterà poi correttamente i tag lasciati vuoti.

La lista dei tipi, invece, specifica le trasformazioni possibili per ciascun tipo di conte- nuto. In particolare saranno elencati gli elementi<type id="...">per ogni tipo contenuto che può essere trasformato, inserendo all’interno del tag tanti elementi<subtype id="...">

quanti sono i tipi di destinazione.

Per estendere il sistema di ricerca avanzata di Alfresco, affinché crei moduli specializzati per i diversi tipi aggiunti, è necessario creare un opportuno elemento che gestisca la lista di tipi di contenuto ricercabili e richiami il modulo di ricerca di ciascuno di essi. All’interno di tale elemento, inoltre, si devono ridefinire i rimandi relativi anche ai tipi di contenuto predefiniti di Alfresco, in quanto questa configurazione va a sostituire quella definita dalla piattaforma (attributoreplace="true").

La lista dei moduli (<forms>) richiama, per ogni elemento<form />, l’identificativo/per- corso dell’etichetta (labelId) e della descrizione (descriptionId). I form richiamati sono descritti nelle configurazioni identificate daevaluator="model-type", dove è stato collocato un elemento specifico<form id="search">.

Le etichette con cui sono visualizzate le informazioni presenti nei moduli dell’interfaccia sono descritte all’interno di file con estensione properties. Qui i singoli elementi vengono richiamati utilizzando la notazione puntata (dot notation) e viene loro associata la stringa che comparirà a schermo.

Capitolo 6

La piattaforma software

Il capitolo descrive l’implementazione mediante Alfresco del caso di studio.

La prima e la seconda sezione descrivono, rispettivamente, come sono raffigurati i ruoli e gli spazi di lavoro all’interno della piattaforma.

La terza sezione presenta l’implementazione del modello dei contenuti, ossia definiamo le caratteristiche dei diversi tipi di documenti utilizzati nella piattaforma1.

L’ultima sezione contiene l’implementazione del modello dei flussi di lavoro, cioè de- scriviamo i flussi di lavoro relativi al processo aziendale del caso di studio, i tipi di dato specializzati e i moduli associati2.

Documenti correlati