Alfresco smart folders – seconda parte

Nella prima parte dell’articolo, abbiamo parlato di smart-folders di tipo System e Custom… che sono molto versatili ma hanno il “difetto” di dover essere attribuite manualmente ad ogni cartella. In molti scenari questa potrebbe rivelarsi una limitazione pesante.

Le smart-folders type-based sono pensate per aggirare questo ostacolo. Ci permettono infatti di attribuire un template ad una cartella se questa è di un certo tipo o se ha un certo aspetto.

Il procedimento da seguire è un po’ più complesso dei casi precedenti… ma con un po’ di pazienza non sarà difficile padroneggiarlo.

L’esempio che vorrei illustrarvi è una (banale) gestione di una raccolta di ebook. Per semplificare il dominio dei dati, diciamo che:

  • i romanzi che prenderemo in considerazione saranno solo di tipo: Storico, Fantasy o Thriller (con buona pace degli amanti della lettura…)
  • ogni libro avrà un proprietario

Decidiamo di usare Alfresco per organizzare la nostra libreria… ma siamo troppo pigri per metterci a catalogare a mano ogni libro. Vorremmo semplicemente fare l’upload di un ebook e delegare ad Alfresco il lavoro sporco (la classificazione).

Le smart-folders type-based sono esattamente quello di cui abbiamo bisogno.

I passi che seguiremo sono questi:

  1. creeremo un nuovo custom model
  2. creeremo un template di smart-folders
  3. configureremo Alfresco in modo opportuno
  4. attribuiremo il template ad una cartella… e faremo qualche prova

1. Il model

Partiamo dal primo punto cioè la creazione del modello.

Facciamola semplice (Keep It Simple, Stupid!): useremo solo un custom type che modellerà il nostro ebook e un aspetto che ci servirà per attribuire le smart-folders ad una cartella:

  • il type lo chiameremo bib:ebook ed avrà due properties:
    • bib:argomento (che potrà assumere un valore tra Storico, Fantasy e Thriller)
    • bib:proprietario (testo libero)
  • l’aspect avrà nome bib:biblioSmartFolders e avrà una sola proprietà testuale:
    • bib:proprietariodefault

Vi allego il model già bello e pronto in modo da risparmiarvi la fatica(?!) di doverlo ricreare da zero (comunque non è niente di trascendentale).

2. Il template

Il secondo passo è creare un template di smart-folders. Se avete letto la prima parte del tutorial sapete già di cosa stiamo parlando: un file json con una sintassi ben definita che descrive un albero di virtual-folders e il loro contenuto. Quello che vedremo tra un paio di righe è un po’ più complicato di quello usato in precedenza.

L’albero di directory che vogliamo realizzare è questo:

  • Archivio
    • Romanzi
    • Storico
    • Fantasy
    •  Thriller
  • Proprietari
    • Sconosciuto
    • David
    • Chiara

La directory archivio è una directory tradizionale(!) e conterrà i file degli ebook. Romanzi e Proprietari (e le rispettive sottocartelle) sono invece virtual-folders e sono costruite dinamicamente da Alfresco.

Alla fine del tutorial, quando inseriremo un nuovo ebook nella directory Archivio, lo troveremo (magicamente) anche sotto Romanzi e Proprietari, correttamente classificato nella giusta sottocartella.

Passiamo al codice. Per non allungare troppo il post, riporto solo le parti più interessanti (il template completo lo trovate, per vostra comodità, allegato all’articolo):

[...]
"id":"2",
"name" : "Proprietari",
"description" : "Romanzi per proprietario",
"nodes" : [{
    "id":"21",
    "name":"Sconosciuto",
    "description":"Proprietario sconosciuto",
    "search" : {
        "language" : "fts-alfresco",
        "query" : "+TYPE:'bib:ebook' AND PATH:'%ACTUAL_PATH%/cm:Archivio/*' AND =bib:proprietario:'Sconosciuto'"
    }
}
[... segue codice simile per altri proprietari]

Se avete letto la prima parte dell’articolo, non dovreste avere difficoltà nel capire lo scopo di questa porzione di json:

  • generare un cartella virtuale di nome “proprietari” e una sottocartella (sempre virtuale) di nome “Sconosciuto”
  • attribuire alla cartella “Sconosciuto” i documenti di tipo bib:ebook, con metadato bib:proprietario uguale a “Sconosciuto”, contenuti nella cartella “%ACTUAL_PATH%/cm:Archivio”.

%ACTUAL_PATH% è una variabile che viene sostituita da Alfresco con il path assoluto della cartella che contiene le smart-folders. In precedenza abbiamo già incontrato (e usato) un’altra variabile: %CURRENT_USER% che invece rappresentava l’utente corrente.

E questa era la parte facile… vediamo un altro frammento di codice:

[...]
"nodes" : [{
    "id":"1",
    "name" : "Romanzi",
    "description" : "Romanzi",
    "nodes" : [{
        "id":"11",
        "name":"Storici",
        "description":"Romanzi storici",
        "search" : {
            "language" : "fts-alfresco",
            "query" : "+TYPE:'bib:ebook' AND PATH:'%ACTUAL_PATH%/cm:Archivio/*' AND =bib:classificazione:'Storico'"
        },
        "filing" : {
            "path" : "%ACTUAL_PATH%/cm:Archivio",
            "classification" : {
                "type" : "bib:ebook",
                "aspects" : []
            },
            "properties" : {
                "bib:classificazione" : "Storico",
                "bib:proprietario" : "<bib:proprietariodefault>"
            }
        }
    }
}
[...segue codice simile ripetuto per i generi "Fantasy" e "Thriller"]

Quella che vedete è la definizione delle virtual-folders:

  • Romanzi
    • Storici

Leggendo la query possiamo capire qual è il contenuto della cartella Storici: i soli nodi di tipo bib:ebook che abbiano classificazione “Storico” e che siano contenuti nella cartella %ACTUAL_PATH%/cm:Archivio.

Rispetto al caso precedente, c’è una “novità”: il blocco filing, di cui dobbiamo parlare più a lungo.

2.1. filing

Il filing ci permette di eseguire l’upload di nuovi documenti in una smart-folders.

«Ma…» potreste obiettare «non ha senso! Hai detto fino ad ora che le smart-folders sono contenitori virtuali… dove vanno a finire i documenti? ».

Il dubbio è più che leggittimo… e in effetti c’è un trucco.

Se esaminate il contenuto del blocco filing vedrete che è diviso in tre parti:

  • path: specifica la destinazione dell’upload
  • classification: indica quale tipo e quali aspetti attribuire al documento
  • properties: come valorizzarne i metadati

Un po’ confuso? Diciamolo con parole più semplici: se provate a fare l’upload di un documento in una smart-folder, vi ritroverete quel documento nella cartella che avete specificato in path, con il tipo/aspetto che avete indicato in classification e con le proprietà valorizzate come indicato in properties.

In pratica, nel nostro esempio, il documento finirà nella cartella Archivio, avrà il tipo ebook e saranno valorizzati i suoi due metadati classificazione e proprietario. Il primo avrà il valore fisso “Storico”, il secondo erediterà il contenuto da <bib:proprietariodefault> della cartella padre (notate che il nome della property è racchiuso tra apici).

Forte no?

3. Configurazione di Alfresco

A questo punto siamo quasi pronti. Dobbiamo solo dire ad Alfresco come e quando utilizzare il nostro template.

Per prima cosa nel file alfresco-global.properties bisogna creare la seguente riga:

smart.folders.config.type.templates.qname.filter=bib:biblioSmartFolders


Come potete vedere la property è stata valorizzata con il nome dell’aspect che abbiamo creato nel primo paragrafo.

Caricate poi il template in “repository/dizionario dei dati/modelli cartelle intelligenti“. Attenzione! Il nome del file è importante! Deve corrispondere al valore della proprietà settata in precedenza, con un underscore al posto dei due punti. Nel nostro caso dovreste chiamarlo: bib_biblioSmartFolders.json.

Riavviate Alfresco per fargli recepire le nuove impostazioni… e voilà… siete pronti per usare le vostre smart-folders. D’ora in poi, ogni volta che una cartella avrà l’aspect bib:biblioSmartFolders, erediterà il template.

4. In action!

Abbiamo preparato tutto… è ora di fare delle prove!

Per convenienza creiamo un nuovo sito di nome (ad esempio) test-smart-folders. Nella documentLibrary create una cartella di nome Biblioteca e in essa un’altra di nome Archivio. Nel menu delle azioni di destra della cartella Biblioteca selezionate “segue” e poi “Gestisci aspetti”. Cercate l’aspect di nome “Biblioteca (bib:biblioSmartFolders)” e associatelo.

Ora, sempre dalle azioni a destra, selezionate “Modifica proprietà” poi “Tutte le proprietà”. In basso vedrete comparire un nuovo campo di nome “Proprietario di default”. Scrivete “Sconosciuto” nella casella di testo e salvate.

Se aprite la cartella Proprietari vedrete che al suo interno sono comparse delle smart-folders (le riconoscete dall’icona con la lente di ingrandimento):

  • Proprietari
    • Sconosciuto
    • Chiara
    • David
  • Romanzi
    • Storici
    • Fantasy
    • Thriller

Sono (ma guarda!) esattamente le cartelle che abbiamo definito nel template… Ma per ora sono vuote.

Provate a prendere un vostro ebook (supponiamo che sia “La bussola d’oro.pdf”) e a caricarlo nella cartella “Romanzi/Fantasy”. Sembrerà che non succeda nulla… ma se vi spostate nella cartella Archivio vedrete che il vostro file è lì e se controllate scoprirete che è di tipo bib:ebook e ha i metadati classificazione e proprietario valorizzati rispettivamente con “Fantasy” e “Sconosciuto”.

Tornate ora nella cartella “Romanzi/Fantasy”… lo stesso ebook è presente anche lì (se non lo trovate aspettate qualche secondo per dare la possibilità a Solr di indicizzarlo).

Controllate anche la cartella “Proprietari/Sconosciuto”… dovreste trovare di nuovo lo stesso file!

Ora provate a modificare il metadato Proprietario settandolo a “David”. Dopo qualche secondo il file dovrebbe sparire dalla cartella “Proprietari/Sconosciuto” e spostarsi in “Proprietari/David”.

Conclusioni

Le smart-folders sicuramente hanno grandi potenzialità… Ma in Alfresco sono state incluse da pochissimo, ed è ancora un po’ presto per dire quanto e come saranno recepite dagli utenti. Ci saranno problemi di performance? Si riveleranno alla fine poco versatili (almeno nella loro forma attuale)?

Ci tocca aspettare per saperlo (ma intanto iniziate ad utilizzarle!).

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco smart folders – prima parte

La metafora “cartelle e file” è stata introdotta nella preistoria dell’informativa (nei mitici laboratori Xerox di Palo Alto) ed è risultata tanto efficace, intuitiva e universalmente riconoscibile che ancora oggi è utilizzata praticamente da tutti i sistemi operativi…
…però…
…quando viene applicata in ambito documentale mostra più di qualche limite.
Il problema è che un albero di cartelle esprime solo uno dei tanti modi di classificare un insieme di documenti. E’ per questo che chi gestisce grandi archivi si trova spesso a dover ricorrere alla funzionalità di ricerca, per trovare i file che gli interessano.
Le smart-folders nascono per superare (o almeno mitigare) questi limiti.

Ma cosa sono?

Quello alla base delle smart-folders non è certo un concetto nuovo. Semplificando all’estremo, possiamo dire che sono delle cartelle virtuali che contengono documenti risultanti da una ricerca.
Il fatto che siano “virtuali” è rilevante: non possono essere trattate alla stregua delle folder tradizionali(!) di Alfresco. Ad esempio, non è possibile copiare in esse dei file (ok, in effetti sotto determinate condizioni questo è possibile… ma il comportamento è diverso da quello standard).

In Alfresco le smart-folders possono essere di tre tipi:

  1. System
  2. Custom
  3. Type-based

System e Custom sono molto simili tra loro e più semplici da capire. Le Type-based sono più versatili ma un po’ più complesse.

In questo post ci occuperemo dei primi due metodi. In un post successivo parleremo anche del terzo.

Cominciamo…

Per prima cosa bisogna abilitare le smart-folders in Alfresco perchè di default sono disattivate.
Nel solito alfresco-global.properties settate:

smart-folders-enabled = true

Naturalmente ci sarà bisogno di riavviare l’applicazione per recepire le nuove impostazioni. Fatelo… e mentre aspettate che Alfresco torni su, potrete ingannare il tempo creando un nuovo template, che altro non è che un file json con una sintassi ben definita (nella pagina ufficiale della documentazione sulle smart-folders trovate i dettagli).

Ecco un semplice esempio:

{
 "name" : "Virtual Folders Test",
 "nodes" : [{
   "id" : "101",
   "name" : "Documenti pdf",
   "description" : "I documenti pdf dell'utente contenuti nel sito",
   "search" : {
    "language" : "fts-alfresco",
    "query" : "(PATH:'/app:company_home/st:sites//*') 
AND =cm:content.mimetype:application/pdf 
AND (=cm:modifier:%CURRENT_USER% OR =cm:creator:%CURRENT_USER%)"
    }
   }, {
   "id" : "102",
   "name" : "Immagini",
   "description" : "Le immagini dell'utente contenute nel sito",
   "search" : {
    "language" : "fts-alfresco",
    "query" : "(PATH:'/app:company_home/st:sites//*') 
AND =cm:content.mimetype:image/jpeg 
AND (=cm:modifier:%CURRENT_USER% OR =cm:creator:%CURRENT_USER%)"
   }
  }]
}

Il significato delle sue parti è intuitivo: definiamo un oggetto che contiene una lista di nodi (due nel nostro caso). Ciascun nodo è a sua volta un oggetto con alcune proprietà: id, name, description, search.
Tra queste:

  • le uniche obbligatorie sono search con le sue (sotto)proprietà language e query.
  • Id, name, description sono opzionali. Id però è meglio specificarlo per generare un nodeRef più corto.
  • Language potrebbe accettare altri valori… ma per ora è consigliabile usare solo fts-alfresco.

Il template appena creato va salvato in Alfresco nella cartella “<repository>/Dizionario dati/Modelli di cartella intelligente” (“smart folder templates” in inglese). Potete dargli nome -ad esempio- smartFolder_tutorial.json.
Ora bisogna dire ad Alfresco che quello non è un file json qualunque ma rappresenta un template di smart-folders. Per farlo dobbiamo attribuire al documento un tipo speciale. Cliccate sul nome del file per aprire la vista di dettaglio, poi sulla destra selezionate “Cambia tipo” e tra quelli proposti scegliete: “modello di cartella intelligente” (smartFolderTemplate).

Ci siamo quasi…
L’ultimo passo è attribuire il nostro template ad una cartella. Questo si fa associandole un aspetto ben preciso e valorizzando alcuni suoi metadati.
Dal menu delle azioni a destra selezionate “Gestisci aspetti” e poi scegliete quello di nome “Cartella intelligente di sistema“. Poi, sempre nel menu delle azioni sulla destra, cliccate su “Modifica proprietà” per veder comparire la finestra di dialogo con il form di modifica.
Assicuratevi di mostrare tutte le proprietà (con il pulsante in alto a destra). Se avete seguito correttamente le istruzioni dovreste veder comparire in basso un ulteriore campo di nome “Modello di cartella intelligente” con una casella a discesa. Selezionate il template che avete creato in precedenza (smartFolder_tutorial.json) e salvate le modifiche.

Ora accadrà la magia: se aprite la cartella, scoprirete che ciascun oggetto node dichiarato nel template è stato  trasformato in una smart-folder. Il contenuto della smart-folder è il risultato della query specificata nella property query.
Il nostro esempio genererà quindi due smart-folders:

  • la prima conterrà tutti i documenti di tutti i siti (PATH:’/app:company_home/st:sites//*’) che siano pdf (=cm:content.mimetype:application/pdf) creati o modificati dall’utente corrente (=cm:modifier:%CURRENT_USER% OR =cm:creator:%CURRENT_USER%).
  • La seconda è analoga ma selezionerà solo i file di tipo jpg.

Una paio di cose prima di chiudere

  • Notate che in tutte e due le query abbiamo filtrato i risultati per utente corrente. Questo non perché per le smart-folders non valgano le regole di accesso (se non potete vedere un file, non lo vedrete!) ma per ottimizzare le performance ed evitare di recuperare documenti inutili.
  • Perché le smart-folders funzionino correttamente, bisogna aver cura di scegliere solr4 come servizio di ricerca e di configurare la Full Text Search in modo da usare il database (“Use Database if possibile” oppure “Always use Database“).

PS:
Vi state ancora chiedendo che differenza c’è tra i due tipi di smart-folders: System e Custom? Ecco soddisfatta la vostra curiosità. Se usate l’aspect “Cartella intelligente di sistema” potrete scegliere solo i template presenti nella directory “<repository>/Dizionario dati/Modelli di cartella intelligente”.
Se invece avete optato per “Cartella intelligente personalizzata” il template potrà essere posizionato ovunque nel repository… tutto qui.

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco – mount webdav su Linux, Windows e Mac

alfresco_logo_11437594739_retweet

Usare Alfresco come se fosse una normale cartella del filesystem può rivelarsi utile in molti casi. Che usiate Linux, Windows e Mac per eseguire questa operazione servono solo pochi minuti (per Windows bisogna prendere qualche accorgimento in più…). In questo articolo vi spiegherò passo passo come procedere.

Read more

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco 5: access log di tomcat troppo grandi.

alfresco_logoMi è capitato, dopo qualche mese di utilizzo di un Alfresco 5 di test che uso per i miei esperimenti, di riscontrare una occupazione anomala di spazio sull’hard disk del server.

Dopo una rapida analisi ho scoperto che il problema era correlato ai log di tomcat che erano cresciuti a dismisura arrivando ad occupare diversi GB di spazio. In particolare, il maggior responsabile del “misfatto” era il localhost_access-log che si preoccupava di registrare ogni singolo accesso di solr4 per l’indicizzazione dei contenuti.

Se anche voi avete riscontrato lo stesso problema la soluzione è semplice: basta commentare una direttiva nel file server.xml di tomcat.

Read more

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco – paging delle query lucene

alfresco_logo_1Il paging dei risultati di una query lucene è possibile, bisogna solo adottare un piccolo accorgimento.

Supponendo di voler realizzare un script javascript, dobbiamo utilizzare la funzione search.query() in luogo di search.luceneSearch(). E’ un modo più generale di eseguire query ed ha il pregio di accettare dei parametri di configurazione. Vediamo come procedere…

Read more

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco – alcune considerazioni sulla sicurezza

alfresco_logo_1Tutti i servizi esposti su internet sono soggetti a rischi di sicurezza e Alfresco non fa certo eccezione!

In questo post riporterò alcuni consigli per la fase di installazione, utili ad impedire (magari!… meglio dire: rendere la vita un po’ più difficile) a malintenzionati di spiare o compromettere il vostro sistema. L’articolo suppone che come SO si utilizzi Linux ma i concetti sono validi in generale.

ATTENZIONE! i consigli che riporto rappresentano solo un primo stadio di sicurezza, il minimo che serve per non avere falle banali nel sistema. Se il vostro Alfresco gestisce informazioni sensibili dovrete fare attenzione a molti altri aspetti. Nei casi più delicati sarebbe meglio non improvvisare e rivolgersi ad esperti! Nella linkografia alla fine della pagina vi riporto alcuni documenti che contengono informazioni più approfondite. Vi consiglio vivamente di leggerli.

Read more

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco News

alfresco_logoQuesto post contiene notizie, curiosità, link utili su Alfresco.

Sarà aggiornato regolarmente (almeno spero…).

 

26-07-2015

Vi segnalo un interessante post sui progetti del 2015 di Alfresco (la società) per Alfresco (il software).

http://richard.esplins.org/siwi/2015/06/26/2015-plans-alfresco-community-edition/

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.

Alfresco e google docs (…in 10 minuti)

alfresco_logo

Alfresco, di default, consente di creare solo documenti di testo semplice (al limite html o xml). Nel mondo reale tuttavia, soprattutto in ambito lavorativo, lo standard de facto è rappresentato (ahimè) da documenti world, excel e powerpoint. L’estensione google-docs si propone di superare questa seria limitazione, permettendo di sfruttare l’arcinoto servizio documenti di google come “editor esterno” per i file di Alfresco.

In questo tutorial vi spiegherò come fare per installare l’estensione che realizza tutto questo e per utilizzarla al meglio… il tutto rigorosamente in 10 minuti!

Read more

Creative Commons License
This work by David Ciamberlano is licensed under a Creative Commons Attribution 4.0 International License.