Scrivere campi di cmis:document di un documento customizzato

cancel
Showing results for 
Search instead for 
Did you mean: 
carminepat
Member II

Scrivere campi di cmis:document di un documento customizzato

Buongiorno a tutti :-) Vi illustro brevemente il mio problema:
- sto utilizzando Alfresco 4.2.c ed utilizzo le API all'indirizzo http://miohost/alfresco/cmisatom
- ho creato il mio modello di documento personalizzato (modello_mio.xml) in tomcat/shared/classes/alfresco/extension ed importato in custom-model-context.xml il riferimento. Ho modificato opportunamente il file web-client-config-custom.xml e dall'interfaccia web di alfresco, posso importare documenti tipizzati secondo il mio modello personalizzato, e configurare tranquillamente tutte le proprietà.
- per mettere a fattor comune alcune proprietà che mi occorrono in tutti i documenti che manipolerò con Alfresco, ho inoltre modificato (all'interno di /tomcat/webapps/alfresco/WEB-INF/classes/alfresco/model) il file "cmisModel.xml" aggiungendo due campi. Anche con questa modifica tutto continua a funzionare (dopo il riavvio) ed esplorando con cmisWorkbench alcuni file o effettuando le query su documenti di tipo "cmis:document" appaiono anche le due nuove proprietà configurate.
- Il problema si verifica nel momento in cui (utilizzando le API di opencmis di apache chemistry) devo importare da codice java dei documenti in Alfresco (cosa tra l'altro già fatta spesso con successo) in questo caso un pò particolare. Riesco a settare tutte le proprietà del mio modello personalizzato di documento opportunamente, riesco ad importare tutti i ".pdf" in alfresco, ma non riesco a settare con successo le proprietà di cmis:document che ho aggiunto. Stranamente, pur osservando il log di alfresco (oltre a racchiudere il mio codice in try–>catch) non si verificano eccezioni e tutto va a buon fine, pur rimanendo bianche e senza i valori settati le proprietà aggiunte in cmis:document

Nella speranza di farmi comprendere meglio vi allego qui di seguito un estratto di codice esplicativo della mia situazione:

String fol=dao.getRepoDirRoot()+"/"+items.get(0).getFolderName();
CmisObject folderContainsDocument = dao.getSession().getObjectByPath(fol);
Folder openDataF=null;           

if (folderContainsDocument!=null && folderContainsDocument instanceof Folder) {
            myFolder=(Folder)folderContainsDocument;
}

Map<String, Object> properties = new HashMap<String, Object>();
            properties.put(PropertyIds.OBJECT_TYPE_ID, "myObjectTypeId:myObjectTypeId");
            properties.put("myProperties","hisValue"); // qui setto le proprietà del mio documento e in alfresco
// queste proprietà sono ben popolate. Questo succede per tutte le proprietà del mio modello di documento

            properties.put(CMISPROPERTY,"value"); // qui setto le proprietà di cmis, così come mappate in cmisModel.xml che poi sono bianche in alfresco
            //Infine creo un inpuStream e poi il contentStream del documento e creo il documento


myFolder.createDocument(properties, contentStream, VersioningState.MAJOR);

la mia domanda è: come faccio a scrivere i valori che desidero in quelle proprietà??? Sto sbagliando qualcosa???
3 Replies
davidciamberlan
Alfresco Employee

Re: Scrivere campi di cmis:document di un documento customizzato

Ciao,


ma perchè sei andato a modificare il cmisModel.xml? Hanno faticato tanto per accordarsi sullo standard e poi arrivi tu e me lo vai a cambiare! Smiley Very Happy

Scherzi a parte è altamente sconsigliato (e fonte di futuri grattacapi) andare a modificare pezzi del codice nativo.
Perchè non hai utilizzato un semplice aspetto con le due proprietà da aggiungere in fase di creazione dei documenti?

Il tuo codice java, a parte quanto detto sopra, sembra corretto…

PS: stai utilizzando le estesioni opencmis di alfresco?
carminepat
Member II

Re: Scrivere campi di cmis:document di un documento customizzato

Ciao Davide, grazie innanzitutto per la risposta :-) Concordo pienamente con te sulle modifiche della struttura nativa e non è mia abitudine abusare di questo tipo di cambiamenti ma purtroppo non sono riuscito a mettere in funzione una soluzione alternativa (probabilmente per qualche mia carenza sulla creazione di modelli di documenti custom) ed in ogni caso sono pronto a rimettere in gioco la soluzione finora adottata :-D
Rispondo innanzitutto alla domanda sull'utilizzo delle estensioni opencmis di alfresco –> Si, le ho utilizzate
Spiego meglio la mia esigenza, per metterti/(mettervi) nelle condizioni di darmi eventualmente consigli e soluzioni alternative.

- Io ho dei documenti molto diversi tra loro, che necessitano quindi ognuno un modello custom che ne descriva i "metadati".
- In tutta la diversità dei documenti ho però due proprietà da mettere a fattor comune
- Dunque pensando alla "programmatore maniera" voglio creare un <strong>padre</strong> di una gerarchia che abbia le due proprietà di tutti (tipo l'attuale cmis:document) e tanti <strong>figli</strong> quanti sono i modelli specifici da creare che però ereditino le proprietà del padre.
- Vorrei inoltre poter fare delle query di questo tipo: "SELECT * FROM padreSmiley Tongueadre" per vedermi restituire tutti i documenti figli
- Oppure: "SELECT * FROM primoFiglioSmiley TonguerimoFiglio" per vedermi restituire tutti i documenti del tipo specifico "primoFiglio" che abbiano quindi tutte le proprietà/metadati del tipo primoFiglio e contemporaneamente le due proprietà/metadati del padre.

E' possibile implementare questa soluzione con i modelli custom che vado a specificare? Qualcuno è in grado di spiegarmi "abbastanza dettagliatamente" come fare?

Buona giornata,
Carmine Paternoster
openpj
Moderator
Moderator

Re: Scrivere campi di cmis:document di un documento customizzato

<blockquote>- Io ho dei documenti molto diversi tra loro, che necessitano quindi ognuno un modello custom che ne descriva i "metadati".</blockquote>
Ok e per questo puoi creare un unico content model Alfresco che contiene diverse tipologie di contenuto. Non è necessario creare un modello per ogni tipologia, puoi fare tutto all'interno di un unico modello.

<blockquote>- In tutta la diversità dei documenti ho però due proprietà da mettere a fattor comune</blockquote>
Per questo puoi definire un aspect all'interno del modello con queste due proprietà che poi andrai ad applicare alle tipologie interessate con l'elemento mandatory-aspect.

<blockquote>- Dunque pensando alla "programmatore maniera" voglio creare un padre di una gerarchia che abbia le due proprietà di tutti (tipo l'attuale cmis:document) e tanti figli quanti sono i modelli specifici da creare che però ereditino le proprietà del padre.</blockquote>
Questo si fa sempre nel modello andando ad indicare all'interno della definizione il proprio parent da cui ereditare i metadati e/o associazioni base.

<blockquote>- Vorrei inoltre poter fare delle query di questo tipo: "SELECT * FROM padreSmiley Tongueadre" per vedermi restituire tutti i documenti figli</blockquote>
Se segui tutte le mie direttive questo gioco funziona in automatico in CMIS, ma anche in query con Lucene (TYPE:"padreSmiley Tongueadre").

Spero di essere stato chiaro Smiley Happy