Interagire mediante Web Services con Alfresco

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

Interagire mediante Web Services con Alfresco

ciao a tutti
dopo aver installato la sdk (in eclipse) di alfresco  ho "consumato" gli esempi dell'SDKWebServiceSample (mi sembra di aver intuito che la mia installazione locale di alfresco funge da WS server, poichè le richieste le genera il mio IDE), così mi è venuto in mente di fare questa cosa: costruire un mio client webservice in modo da interagire con il WS server di alfresco.
quello che dovrei fare è:
1- passare tramite il WS un documento ad Alfresco (per farlo utilizzerei il metodo addObjectToFolder esposto dal MultiFilingServicePort)
2- inserire  delle custom Aspects che ho già creato che aggiungo tramite una l'action "add aspect to item" una volta che il documento viene "uploadato" nella cartella di alfresco  [  ma questo lo so fare!]
3- aggiornare tramite il WS i campi delle custom aspects passandogli dei valori che voglio io (per farlo utilizzerei il metodo updateProperties esposto dall'ObjectServicePort)

Dato che il punto 2 l'ho già implementato, vorrei sapere se qualcuno sa dirmi se ho individuato i metodi giusti per implementare i punti 1 e 3.

grazie a quanti vorranno rispondere
6 Replies
openpj
Moderator
Moderator

Re: Interagire mediante Web Services con Alfresco

Non si capisce se stai facendo riferimento alla Web Services API di Alfresco oppure alla CMIS WS API esposta da Alfresco.
L'esempio che trovi nella SDK è relativo alla Web Services API.
Quando parli di MultiFilingService invece stai parlando della CMIS WS API che è un'interfaccia molto differente basata sullo standard CMIS.
_valerio_
Member II

Re: Interagire mediante Web Services con Alfresco

Scusa se sono stato impreciso, ma non sono un grande esperto di informatica  Smiley Surprisedops: e solo da febbraio sto smanettando su Alfresco;
non sto parlando delle Web Services API di alfresco che trovo nell'SDK, ma delle CMIS WS API esposte da Alfresco (quelle che sto tentando di consumare attraverso soapUI, senza riuscirci benissimo); combinando le CMIS WS API con uno script javascript (da applicare come business rule una volta che il documento è stato caricato) vorrei realizzare un sistema che immagazzina documenti e inserisce i metadati che gli passo io.
Ho citato le Web Services API dell'SDK solo per dire che, analizzando come funzionano quegli esempi, ho capito che Alfresco funge da WS server, per cui dovrebbe essere possibile "interrogarlo" con un qualsiasi client WS esterno.
openpj
Moderator
Moderator

Re: Interagire mediante Web Services con Alfresco

In ogni caso tutti e 3 i punti sono implementabili utilizzando la CMIS WS API senza usare rules, se vuoi  Smiley Wink
_valerio_
Member II

Re: Interagire mediante Web Services con Alfresco

In ogni caso tutti e 3 i punti sono implementabili utilizzando la CMIS WS API senza usare rules, se vuoi  Smiley Wink

per favore, potresti aiutarmi facendomi vedere un esempio?  Smiley Surprisedops:  io per il momento non ne ho trovati

ma è possibile fare tutto con una sola request?
io avevo pensato di creare una soap envelope che facesse tutto,tipo una cosa del genere:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
   <soapenv:Body>
 
qualcosa che esegua una startsession (che penso sia necessaria),  i punti 1 2 e 3 , in fine la chiusura della sessione

   </soapenv:Body>

</soapenv:Envelope>

ma non ho ben chiaro come fare; soprattutto mi sfugge quale sia la sequenza delle azioni, tipo: loggarsi per avere il token, inserire il token nelle richieste, ecc…
_valerio_
Member II

Re: Interagire mediante Web Services con Alfresco

c'è percaso un WSDL che espone i servizi per aggiungere le custom aspects (quelle che ho già definito e che riesco ad aggiungere con le business rules) e per inserirne i valori? io ho trovato solo questi
http://localhost:8080/alfresco/cmis
http://localhost:8080/alfresco/wsdl/authentication-service.wsdl

grazie
_valerio_
Member II

Re: Interagire mediante Web Services con Alfresco

Smiley Very Happy Ho capito come fare per aggiungere le custom aspects con i valori che gli passo io, in pratica  lo faccio con il metodo updateProperties  esposto dall'ObjectServicePort, indicando in uno dei campi della soap envelope il nome della mia custom aspect ed il valore, come nell'esempio sotto:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns:ns1="http://docs.oasis-open.org/ns/cmis/core/200908/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:updateProperties>
         <ns:repositoryId>a4232886-7977-4350-9f6e-084b25249906</ns:repositoryId>
         <ns:objectId>workspace://SpacesStore/a5c54fb3-2e9b-4eb0-957b-7063b7ea801c</ns:objectId>

         <ns:properties>
            <!–You have a CHOICE of the next 8 items at this level–>
            <ns1:propertyId propertyDefinitionId="custom:PROPRIETA" localName="?" displayName="?" queryName="?">
               <!–Zero or more repetitions:–>
               <ns1:value>VALORE_CHE_VOGLIO_PASSARE</ns1:value>
            </ns1:propertyId>
                 .
                 .
                 .
         </ns:properties>
      </ns:updateProperties>
   </soapenv:Body>
</soapenv:Envelope>
In questo modo nei dettagli dell'oggetto in questione appare la proprietà che ho indicato con il valore che gli ho passato;
Stando così le cose, adesso sono in grado di eseguire i punti 2 e 3 del mio progetto; quello che mi resta è creare il documento in uno space di alfresco attraverso le CMIS WS API.
Per farlo ho provato ad utilizzare il metodo createDocumentFromSource; tuttavia questo metodo, nel campo sourceId richiede l'id del file che rappresenta la "sorgente"; se lo riempio con l'Alfresco Node Reference (presente nella pagina dei dettagli del file) di un oggetto che già si trova in un altro space di alfresco (ovviamente diverso dallo space di destinazione) il tutto funziona (cioè nello space di destinazione mi crea un file uguale al file presente nello space sorgente);

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns:ns1="http://docs.oasis-open.org/ns/cmis/core/200908/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:createDocumentFromSource>
         <ns:repositoryId>a4232886-7977-4350-9f6e-084b25249906</ns:repositoryId>
         <ns:sourceId>workspace://SpacesStore/9973fbfa-8146-4b83-b460-80824ed18292</ns:sourceId>
                 .
                 .
                 .
         <ns:folderId>workspace://SpacesStore/9a0b34b2-4f11-4a2b-8b21-51240ff3527c</ns:folderId>
                 .
                 .
                 .
      </ns:createDocumentFromSource>
   </soapenv:Body>
</soapenv:Envelope>

tuttavia io vorrei caricare il file nello space di destinazione prendendolo da una cartella sul mio computer (ad esempio C:\Users\Valerio\Documents\cartella di prova\prova.pdf), in tale caso come riempire il campo sourceId? Se qualcuno può darmi un suggerimento mi farebbe un grande favore.

grazie a chi vorrà contribuire