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:
.......
........
.....
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:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
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:
....
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
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!
Se ben ricordo i TAG, come molte altre cose, non sono gestibili tramite CMIS.
Di solito in questi casi uso le RESTful API che sono piuttosto semplici e ben documentate.
Grazie, ci guardo