Mar 252013
 

cmis

E’noto che il sistema documentale Alfresco è stato uno dei primi ad implementare CMIS.

Per chi non lo sapesse, CMIS (Content management interoperability service) è un protocollo standard di interscambio di dati documentali.

In teoria conoscendo tale protocollo è possibile interfacciarsi con tutti i sistemi che lo supportano e quindi, per esempio, effettuare operazioni sugli oggetti contenuti (per la maggior parte documenti o cartelle) quali modifica degli attributi, download, upload etc. etc.

Dovendo affrontare una migrazione ho immaginato che la strada più facile per trasferire il contenuto dal vecchio sistema documentale al nuovo fosse appunto l’utilizzo di CMIS.

Mettendomi all’opera mi sono subito scontrato con un problema: alcune caratteristiche del documento in Alfresco non sono definite come “properties”, ma come “aspects” (aspetti). E non sono caratteristiche trascurabili!

Parliamo, ad esempio del titolo (title) e della descrizione (summary).

Senza riuscire a trasferire tali caratteristiche sarebbe stato inutile iniziare la migrazione.

Ma qual’è il problema?

Gli aspetti attualmente non sono supportati da CMIS.

Alfresco ha deciso di estendere la sua implementazione del protocollo senza violarne lo standard. Per fare questo, siccome CMIS si basa su XML, ha deciso di inserire la definizione degli aspetti sotto un namespace proprietario. In questo modo un client “standard” può tranquillamente interrogare una repository di Alfresco semplicemente ignorando le informazioni aggiuntive.

La documentazione è abbastanza nebulosa, ma ho trovato dei riferimenti nei quali viene indicato il namespace “alf” ed alcuni esempi di modifica degli aspetti.

Dopo avere perso diverse ore cercando di effettuare la modifica del titolo di un documento inserito in una repository Alfresco 4.1, mi sono accorto che qualcosa non andava.

Con la nuova implementazione “cmisatom binding” sono cambiate un po’ di cose, tra le quali, in maniera piuttosto silente, la definizione del namaespace degli aspetti.

Infatti accedendo al documento  

l297.pdf

situato in

/Siti/testimport/documentLibrary

utilizzando semplicemente CURL:

curl -uadmin:password http://doc.alfresco.loc:8080/alfresco/cmisatom/ebb8a135-c726-4e41-8eb1-c9d10574b018/path?path=/Siti/testimport/documentLibrary/l297.pdf

Si ottiene in risposta qualcosa del genere:



.......

P:cm:thumbnailModification

doclib:1364214042891
webpreview:1364214051599
P:cm:titled
Datasheet;L297


Stepper motor controllers
P:cm:author
STMicroelectronics
P:rn:renditioned
P:sys:localized



........


.....

dove si nota un namespace  aspects differente da quanto documentato precedentemente.

Volendo modificare il titolo (che è un aspetto come indicato nella rispost) con una chiamata CMIS è sufficiente creare un “atom feed” come segue:


xmlns:aspects="http://www.alfresco.org"
xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">





Nuovo titolo






Da notare nell’atom-feed  l’aggiunta del namespace xmlns:aspects=”http://www.alfresco.org” 

Senza il quale verrebbe restituito un errore di “unknown namespace”.

Una volta salvato come put.xml

proviamo, sempre con curl, a postare le modifiche.  Il metodo HTTP corretto da usare è PUT.   La URL per accedere direttamente all’oggetto la ricaviamo dalla risposta precedente (self):

curl -X PUT -uadmin:password http://doc.alfresco.loc:8080/alfresco/cmisatom/ebb8a135-c726-4e41-8eb1-c9d10574b018/entry?id=workspace%3A%2F%2FSpacesStore%2F80890d60-e1cf-4c0eb%3B1.0 -H “Content-Type: application/atom+xml” -d @put.xml

Richiamando, sempre con curl, l’oggetto, possiamo notare che il titolo è cambiato come volevamo:


....
Datasheet;L297


Nuovo titolo
....

Purtroppo non ho trovato nessuna API per CMIS in PHP che riuscisse a gestire correttamente gli aspetti. Per questo motivo ho deciso di implementarne una funzionante e rilasciarla come codice open source.

Chi fosse interessato può trovarla qui: https://code.google.com/p/php-alf-cmis-api/

Fabrizio Vettore

  3 Risposte a “Alfresco 4, CMIS ed il problema degli “aspetti””

  1. Buongiorno, sono alle prime armi con il protocollo CMIS. Avrei la necessità di trasferire in Alfresco dei documenti generati da una piattaforma web (scritta in c#, per intenderci).
    Tramite la libreria dotCMIS riesco tranquillamente a generare i documenti in Alfresco e a scrivere le proprietà cm:title, cm:description e cm:author.
    Avrei, però, la necessità di scrivere all’interno del documento anche dei TAGS, in maniera da facilitarne la ricerca in ALfresco.
    Ho visto che esiste l’aspect cm:taggable, però, al contrario di cm:title, cm:descriptiom e cm:author, non mi pare ci sia la possibilità di settarne il valore.
    I TAGS sarebbero definiti come array di stringhe, ma non riesco a passarglieli.

    Secondo voi esiste un modo per farlo?

    Grazie per l’attenzione!

Lascia un commento a Massimo Benini Annulla commento

Puoi usare questi tag e attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)