cancel
Showing results for 
Search instead for 
Did you mean: 

Problema sull'aggiornamento della versione di un documento

antoneav
Champ in-the-making
Champ in-the-making
Salve, ho un piccolo problema, quando inserisco un documento su Alfresco e setto le proprieta ho come versione del documento 0.1 io verrei avere 1.0. il problema è che devo impostargli che il documento deve essere  versionato (Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}autoVersion", "true") come faccio ad avere come versione iniziale 1.0. questo è il codice che ho scritto:

NamedValue[] contentProps = new NamedValue[8];
         contentProps[0] = Utils.createNamedValue(Constants.PROP_NAME,
               documentName);
         contentProps[1] = Utils.createNamedValue(Constants.PROP_CONTENT,
               contentString);
         // dataCreation= "2005-09-16T17:01:03.456+01:00";
         contentProps[2] = Utils.createNamedValue(Constants.PROP_CREATED, it.opera21.migration.Utils.convertToAlfrescoDateFormatFromShare(metadati.getCreation_date()));

         contentProps[3] = Utils.createNamedValue(PROP_MODIFIED, it.opera21.migration.Utils.convertToAlfrescoDateFormatFromShare(metadati.getCreation_date()));

         contentProps[4] = Utils.createNamedValue(Constants.PROP_DESCRIPTION, metadati.getTitle());

         contentProps[5] = Utils.createNamedValue(Constants.PROP_TITLE, metadati.getTitle());
         
         contentProps[6] = Utils.createNamedValue(PROP_AUTHOR, metadati.getReport());
         
         contentProps[7] = Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}autoVersion", "true");

CML cml1 = new CML();
CMLCreate create2 = new CMLCreate(null, parentReference, null,
                  null, null, Constants.TYPE_CONTENT, contentProps);
cml1.setCreate(new CMLCreate[] { create2 });
UpdateResult[] result;
         result = WebServiceFactory.getRepositoryService().update(cml1);
         System.out.println("######### UPLOAD CONTENT FINISHED #########");
7 REPLIES 7

openpj
Elite Collaborator
Elite Collaborator
Non ho avuto il tempo di verificarlo, ma credo sia necessario aggiungere la proprietà versionType che deve essere valorizzata con la stringa "MAJOR" o "MINOR", la dovresti trovare tra le costanti dell'interfaccia Web Services.

Spero ti possa aiutare a risolvere  Smiley Wink

antoneav
Champ in-the-making
Champ in-the-making
Ho provato ad aggiungere anche
contentProps[17] = Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}initialVersion", "true");
contentProps[18] = Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}versionType", "MAJOR");
contentProps[19] = Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}versionLabel", "1.0");


ma rimane la versione 0.1.  Inoltre una volta inseriti i documenti se li riverco tramite alfresco con la ricerca avanzata non li trova??? che posso fare??

openpj
Elite Collaborator
Elite Collaborator
Inoltre una volta inseriti i documenti se li riverco tramite alfresco con la ricerca avanzata non li trova??? che posso fare??
Sicuramente hai un problema nella tua procedura di inserimento dei nodi, innanzitutto quando vai ad inserire del testo su cui vuoi poter eseguire delle query FullText è necessario capire se hai settato bene l'oggetto ContentFormat che ti permette di far indicizzare correttamente il corpo del testo del formato del tuo contenuto.

Quindi controlla sempre se hai settato correttamente il mimetype e l'encoding del binario (intendo il binario che viene poi associato alla proprietà del modello di default che si chiama cm:content).

All'interno del tuo codice la seguente stringa presenta un errore di inserimento nodo:
contentProps[1] = Utils.createNamedValue(Constants.PROP_CONTENT,
contentString);

Non puoi inserire il contenuto binario di un nodo utilizzando la Web Services API senza utilizzare il CMLWriteContent oppure il ContentService.

All'interno della SDK di Alfresco trovi diversi esempi di utilizzo di questa API,  nel seguente esempio puoi vedere come utilizzare il ContentService per scrivere il binario del nodo di riferimento:
http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/sdk/samples/FirstWebS...

In alternativa potresti utilizzare l'oggetto CMLWriteContent per poter scrivere one-shot anche il binario senza utilizzare il ContentService.

Spero ti possa aiutare.

antoneav
Champ in-the-making
Champ in-the-making
Grazie di tutto OpenPj, ma ho sempre il problema della verisone… non so più che fare! Vado a modificare con uno script il db di mysql?
grazie anticipatamente.

antoneav
Champ in-the-making
Champ in-the-making
un'altra cosa si puo' usare la Content contentRef = contentService.write… per fare l'update delle propeietà (metadati) esempio la {http://www.alfresco.org/model/content/1.0}modifier? ho provato a fare l'update ma non mi funziona
 ContentServiceSoapBindingStub contentService = WebServiceFactory.getContentService();
            ContentFormat contentFormat = new ContentFormat("application/pdf", "UTF-8");
            Content contentRef = contentService.write(content, Constants.PROP_CONTENT, byteFile, contentFormat);
            System.out.println("Content Length: " + contentRef.getLength());
            idContenutoAlfresco = contentRef.getNode().getUuid();
         
            if (result[0].getDestination() != null) {
            System.out.println("RESULT DESTINATION PATH: " + contentRef.getNode().getPath());
            System.out.println("RESULT DESTINATION UUID: " + contentRef.getNode().getUuid());
         }
           
            NamedValue[] contentPropsUpdate = new NamedValue[8];
         contentPropsUpdate[0] = Utils.createNamedValue(Constants.PROP_NAME,
               displayName);
                  // dataCreation= "2005-09-16T17:01:03.456+01:00";
         contentPropsUpdate[1] = Utils.createNamedValue(Constants.PROP_CREATED, it.opera21.migration.Utils.convertToAlfrescoDateFormatFromMigration(metadati.getCreation_date()));

         contentPropsUpdate[2] = Utils.createNamedValue(PROP_MODIFIED, it.opera21.migration.Utils.convertToAlfrescoDateFormatFromMigration(metadati.getModified()));

         contentPropsUpdate[3] = Utils.createNamedValue(Constants.PROP_DESCRIPTION, descrizione);

         contentPropsUpdate[4] = Utils.createNamedValue(Constants.PROP_TITLE, metadati.getTitle());

         contentPropsUpdate[5] = Utils.createNamedValue(PROP_AUTHOR, metadati.getReport());

         contentPropsUpdate[6] = Utils.createNamedValue(PROP_CREATOR, metadati.getCreatedBy());

         contentPropsUpdate[7] = Utils.createNamedValue(PROP_MODIFIER, metadati.getModifiedby());
         
         CMLUpdate update = new CMLUpdate();
         update.setProperty(contentPropsUpdate);


         Predicate predicate = new Predicate();
         predicate.setStore(STORE_ALFRESCO);
         predicate.setNodes(new Reference[]{new Reference(STORE_ALFRESCO,  contentRef.getNode().getUuid(), null)});

         update.setWhere(predicate);
         CML cml1 = new CML();
         cml1.setUpdate(new CMLUpdate[] {update});
         UpdateResult[] result1;
         result1 = WebServiceFactory.getRepositoryService().update(cml1);


come posso fare?

openpj
Elite Collaborator
Elite Collaborator
Grazie di tutto OpenPj, ma ho sempre il problema della verisone… non so più che fare! Vado a modificare con uno script il db di mysql?
grazie anticipatamente.
No, con nessun prodotto ECM vanno eseguite queste operazioni a basso livello su db, non avrebbe senso utilizzare un simile approccio.

come posso fare?
Non puoi modificare in modo esplicito il modifier perché all'interno del content model di Alfresco è dichiarato come metadato protetto, significa che non può essere modificato in modo esplicito da un utente del repository.

mikrobe
Champ in-the-making
Champ in-the-making
Salve, ho un piccolo problema, quando inserisco un documento su Alfresco e setto le proprieta ho come versione del documento 0.1 io verrei avere 1.0. il problema è che devo impostargli che il documento deve essere  versionato (Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}autoVersion", "true") come faccio ad avere come versione iniziale 1.0. questo è il codice che ho scritto:

NamedValue[] contentProps = new NamedValue[8];
         contentProps[0] = Utils.createNamedValue(Constants.PROP_NAME,
               documentName);
         contentProps[1] = Utils.createNamedValue(Constants.PROP_CONTENT,
               contentString);
         // dataCreation= "2005-09-16T17:01:03.456+01:00";
         contentProps[2] = Utils.createNamedValue(Constants.PROP_CREATED, it.opera21.migration.Utils.convertToAlfrescoDateFormatFromShare(metadati.getCreation_date()));

         contentProps[3] = Utils.createNamedValue(PROP_MODIFIED, it.opera21.migration.Utils.convertToAlfrescoDateFormatFromShare(metadati.getCreation_date()));

         contentProps[4] = Utils.createNamedValue(Constants.PROP_DESCRIPTION, metadati.getTitle());

         contentProps[5] = Utils.createNamedValue(Constants.PROP_TITLE, metadati.getTitle());
         
         contentProps[6] = Utils.createNamedValue(PROP_AUTHOR, metadati.getReport());
         
         contentProps[7] = Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}autoVersion", "true");

CML cml1 = new CML();
CMLCreate create2 = new CMLCreate(null, parentReference, null,
                  null, null, Constants.TYPE_CONTENT, contentProps);
cml1.setCreate(new CMLCreate[] { create2 });
UpdateResult[] result;
         result = WebServiceFactory.getRepositoryService().update(cml1);
         System.out.println("######### UPLOAD CONTENT FINISHED #########");


Ciao, anch'io sto armeggiando con il versioning di alfresco tramite Web Service e mi sono scontrato con il tuo stesso problema.
Ho visto che questo post e' vecchio di qualche mese, ma potrebbe comunque essere utile per altri.
L'unica via che sono riuscito a inventarmi e' stata questa, anche se non elegante:
1. crea nuovo documento senza aspect versionable
2. fai il checkout
3. aggiungi l'aspect versionable alla workingReference
4. fai il checkin con versionType MAJOR

A questo punto ti ritrovi un documento con version 1.0 e configurato Versionable.

Di seguito il codice (potrebbero esserci degli errori in quando editato al volo):


      // CREATE DOC
      ParentReference parent = ReferenceToParent(parentref);
      parent.setChildName(Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, normilizeNodeName(docname)));
      NamedValue[] properties = new NamedValue[]{Utils.createNamedValue(Constants.PROP_NAME, docname)};
      CMLCreate create = new CMLCreate("1", parent, null, null, null, Constants.TYPE_CONTENT, properties);
      CML cml = new CML();
      cml.setCreate(new CMLCreate[]{create});
      UpdateResult[] results = getRepositoryService().update(cml);
      Reference document = results[0].getDestination();

      // UPLOAD CONTENT
      ContentFormat format = new ContentFormat(mimetype, "UTF-8");
      getContentService().write(document, Constants.PROP_CONTENT, content, format);

      // CHECKOUT      
      Predicate predicate = new Predicate(new Reference[]{document}, null, null);
      CheckoutResult checkOutResult = getAuthoringService().checkout(predicate, null);

      // WORKING COPY REFERENCE
      Reference workingCopyReference = checkOutResult.getWorkingCopies()[0];
      Predicate workingCopyPredicate = new Predicate(new Reference[] { workingCopyReference }, null, null);
      
      // ADD VERSIONABLE ASPECT to WORKING COPY REFERENCE
      CMLAddAspect addAspect = new CMLAddAspect(Constants.ASPECT_VERSIONABLE, null, workingCopyPredicate, null);
      CML cml = new CML();
      cml.setAddAspect(new CMLAddAspect[]{addAspect});
      getRepositoryService().update(cml);
      
      // CHECKIN
      NamedValue[] revisionType = new NamedValue[] { Utils.createNamedValue("versionType", "MAJOR")};
      CheckinResult checkinResult = getAuthoringService().checkin(workingCopyPredicate, revisionType, false);

      Reference[] refs = checkinResult.getCheckedIn();