Después de editar las propiedades de un documento, editar otro documento

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

Después de editar las propiedades de un documento, editar otro documento

Hola a tod@s,

La situación es…Estando en Share, hago click en la acción "Editar propiedades" sobre un documento llamado "Test.docx". Se abre un pop-up con los campos que quiero editar. Una vez editados, hago click en el botón "Gurdar" y me gustaría que también se editasen las propiedades de otro documento llamado "Test.pdf", el cual está referenciado (cm:references - apect) al documento que acabo de editar.

Primero, he intentado resolverlo editando el archivo "metadata.post.json.js" situado en "/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/repository/metadata/". Creo que este fichero es el que guarda las nueva propiedades editadas. No estoy seguro de ello porque después de aplicar mis cambios, el comportamiento era el mismo. Este ha sido mi intento de resolverlo cambiando un fichero desde la parte de repositorio.

Después de esto, he intentado resolverlo editando un archivo de la parte del cliente. El archivo se llama "action.js" situado en "alfresco\components\documentlibrary\". Existe una función llamada "onActionDetails". Si debugo esta función puedo obtener las propiedades del documento que estoy editando "Test.docx" pero no puedo obtener el documento referenciado "Test.pdf".

¿Sabéis cómo puedo obtener el documento referenciado "Test.pdf" en el archivo "actions.js" usando la API "Share Client-side"?

Después de pulsar el botón "Guardar", ¿dónde podría encontrar el archivo que recibe las propiedades editadas? Pensaba que era el fichero "metadata.post.json.js".

Creo que tengo dos posibilidades para resolverlo si cambio el código, ¿qué pensáis?

Muchas gracias de antemano
9 Replies
angelborroy
Expert

Re: Después de editar las propiedades de un documento, editar otro documento

Probablemente la mejor alternativa sea sobreescribir el método
onActionDetails
de
actions.js
para hacer la redirección en el cliente una vez hayas terminado de editar el documento original.

En el
successCallback
del
onSuccess
puedes incluir una
Alfresco.util.Ajax.request
para buscar el
nodeRef
en el repo y levantar un nuevo
Alfresco.module.SimpleDialog
para la edición del nodo relacionado.
Software Engineer in Alfresco Search Team.
wns
Active Member II

Re: Después de editar las propiedades de un documento, editar otro documento

Hola Ángel,

muchas gracias por la respuesta.

Siguiendo tu consejo he creado la
Alfresco.util.Ajax.request
de la siguiente manera:




Alfresco.util.Ajax.request({
                     
                      url: Alfresco.constants.PROXY_URI + "slingshot/documentlibrary/action/editdocumentproperties?nodeRef=" + record.jsNode.nodeRef.nodeRef,
                      method: Alfresco.util.Ajax.GET,
                     
                      successCallback:
                      {
                          fn: function dlA_onActionDetails_refreshSuccess(response)
                            {
                            },
                            scope: this
                      },
                      failureCallback:
                      {
                         fn: function dlA_onActionDetails_refreshSuccess(response)
                          {
                          },
                          scope: this
                      }
                  });





Y por otro lado he creado un webscript que ejecuta lo que quiero hacer (actualizar otro documento - está descrito en el primer post).
Los archivos creados están ubicados en "/resources/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/" y son los siguientes:
- edit.document.properties.get.desc.xml
- edit.document.properties.get.json.ftl
- edit.document.properties.get.json.js

El problema es que cuando se lanza la
Alfresco.util.Ajax.request
no se ejecuta nada. En la descripción (edit.document.properties.get.desc.xml) del webscript he puesto la siguiente URL
<url>/slingshot/documentlibrary/action/editdocumentproperties?nodeRef={nodeRef?}</url>
y en el webscript (edit.document.properties.get.json.js) cojo el parámetro pasado de la siquiente manera
args.nodeRef
. He puesto trazas para saber que el webscript se está ejecutando, pero no se traza nada.

¿Tengo la request bien definida?
¿O la URL está mal?

Muchas gracias de antemano.

Un saludo.
angelborroy
Expert

Re: Después de editar las propiedades de un documento, editar otro documento

Tiene buena pinta.

¿Llegas al webscript si incluyes esta URL en el navegador? http://localhost:8080/share/proxy/alfresco/slinghost/documentlibrary/action/editdocumentproperties?n...
Software Engineer in Alfresco Search Team.
wns
Active Member II

Re: Después de editar las propiedades de un documento, editar otro documento

Buenas Ángel,

gracias por contestar.

Sí, la respuesta que recibo es: "success": true" que lo tengo declarado en el archivo "edit.document.properties.get.json.ftl" o un "200 OK" debugándolo desde el navegador.
Además, entrando en la consola de webscripts (localhost:8080/alfresco/service/index), lo ejecuto también desde ahí y el resultado es el mismo: "success": true".

Parece que el webscript lo encuentra bien pero no se ejecuta nada. Además, me he asegurado de que el nivel de trazas estén a debug:

log4j.logger.org.alfresco.repo.jscript=debug
log4j.logger.org.alfresco.repo.jscript.ScriptLogger=debug

Pero sigo sin ver nada en los logs y además el webscript no hace nada de lo que quiero.

¿Tienes alguna idea de lo que puede estar pasando?

Muchas gracias.

Un saludo

angelborroy
Expert

Re: Después de editar las propiedades de un documento, editar otro documento

Parece que no se está llegando al
Alfresco.util.Ajax.request
. ¿Puedes ampliar el trozo de código JS cliente para ver dónde está insertado?
Software Engineer in Alfresco Search Team.
wns
Active Member II

Re: Después de editar las propiedades de un documento, editar otro documento

Buenas de nuevo Ángel,

gracias por contestar.

Ok, te mando el trozo donde está declarada la Request. Está dentro de la función
onSuccess
:



            onSuccess:
            {
               fn: function dlA_onActionDetails_success(response)
               {
                  // Reload the node's metadata
                  Alfresco.util.Ajax.request(
                  {
                     url: $combine(Alfresco.constants.URL_SERVICECONTEXT, "components/documentlibrary/data/node/", jsNode.nodeRef.uri) + "?view=" + this.actionsView,
                     successCallback:
                     {
                        fn: function dlA_onActionDetails_refreshSuccess(response)
                        {
                           var record = response.json.item
                           record.jsNode = new Alfresco.util.Node(response.json.item.node);

                           // Fire "renamed" event
                           YAHOO.Bubbling.fire(record.node.isContainer ? "folderRenamed" : "fileRenamed",
                           {
                              file: record
                           });

                           // Fire "tagRefresh" event
                           YAHOO.Bubbling.fire("tagRefresh");

                           // Display success message
                           Alfresco.util.PopupManager.displayMessage(
                           {
                              text: this.msg("message.details.success")
                           });
                          
                           // Refresh the document list…
                           this._updateDocList.call(this);
                        },
                        scope: this
                     },
                     failureCallback:
                     {
                        fn: function dlA_onActionDetails_refreshFailure(response)
                        {
                           Alfresco.util.PopupManager.displayMessage(
                           {
                              text: this.msg("message.details.failure")
                           });
                        },
                        scope: this
                     }
                  });
                 
                  Alfresco.util.Ajax.request({
                     
                      url: Alfresco.constants.PROXY_URI + "slingshot/documentlibrary/action/editdocumentproperties?nodeRef=" + record.jsNode.nodeRef.nodeRef,
                      method: Alfresco.util.Ajax.GET,

                      successCallback:
                      {
                          fn: function dlA_onActionDetails_refreshSuccess(response)
                            {
                            },
                            scope: this
                      },
                      failureCallback:
                      {
                         fn: function dlA_onActionDetails_refreshSuccess(response)
                          {
                          },
                          scope: this
                      }
                  });
               },
               scope: this
            }






Debugando desde el navegador este código parece que sí se produce la llamada correctamente…Pero quizás, ¿podría probar esta función fuera del onSuccess?

Muchas gracias

Un saludo.
angelborroy
Expert

Re: Después de editar las propiedades de un documento, editar otro documento

Debes ponerlo dentro del bloque
successCallback
para sustituir lo que se está haciendo allí…
Software Engineer in Alfresco Search Team.
wns
Active Member II

Re: Después de editar las propiedades de un documento, editar otro documento

Buenas Ángel,

gracias por contestar de nuevo.

He probado sustituyendo lo que comentas pero no funciona. De hecho, el comportamiento es el mismo que donde estaba antes la Request.

Esto debería ser algo sencillo y se está complicando.

También he probado a poner
requestContentType: Alfresco.util.Ajax.JSON
en la Request pero no funciona. La Request queda de la siguiente manera:

 

Alfresco.util.Ajax.request({
                        
   url: Alfresco.constants.PROXY_URI + "slingshot/documentlibrary/action/editdocumentproperties?nodeRef=" + record.jsNode.nodeRef.nodeRef,
   method: Alfresco.util.Ajax.GET,
   requestContentType: Alfresco.util.Ajax.JSON,

        successCallback:
   {
      fn: function dlA_onActionDetails_refreshSuccess2(response)
      {
      },
      scope: this
      },
   failureCallback:
      {
      fn: function dlA_onActionDetails_refreshSuccess2(response)
      {
      },
      scope: this
      }
});
                              



Y el error que obtengo es:




ERROR [extensions.webscripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: 01090002 Failed to convert request to JSON
org.springframework.extensions.webscripts.WebScriptException: 01090002 Failed to convert request to JSON
   at org.springframework.extensions.webscripts.json.JSONReader.read(JSONReader.java:82)
   …
   
   Caused by: org.json.JSONException: A JSONObject text must begin with '{' at character 0
   at org.json.JSONTokener.syntaxError(JSONTokener.java:413)
   at org.json.JSONObject.<init>(JSONObject.java:180)
   at org.json.JSONObject.<init>(JSONObject.java:420)
   at org.springframework.extensions.webscripts.json.JSONReader.read(JSONReader.java:77)
   … 28 more




Por tanto, he intentado lo siguiente modificando la Request, he añadido (submitType: "json") en un "dataObj", quedando de la siguiente manera:



Alfresco.util.Ajax.request({
                        
   url: Alfresco.constants.PROXY_URI + "slingshot/documentlibrary/action/editdocumentproperties?nodeRef=" + record.jsNode.nodeRef.nodeRef,
   method: Alfresco.util.Ajax.GET,
   requestContentType: Alfresco.util.Ajax.JSON,
   dataObj: {
             submitType: "json"
                  },
        successCallback:
   {
      fn: function dlA_onActionDetails_refreshSuccess2(response)
      {
      },
      scope: this
      },
   failureCallback:
      {
      fn: function dlA_onActionDetails_refreshSuccess2(response)
      {
      },
      scope: this
      }
});



Pero obtengo es el mismo error. ¿Esto puede ser porque en el webscript destino esté algo mál configurado?

Muchas gracias.

Un saludo
wns
Active Member II

Re: Después de editar las propiedades de un documento, editar otro documento

Buenas Ángel,

he cambiado todo a POST y funciona :-)

Muchas gracias por la ayuda.

Un saludo