cancel
Showing results for 
Search instead for 
Did you mean: 

Action Java con acceso al documento

showbiz
Champ on-the-rise
Champ on-the-rise
Hola a tod@s.

Estoy intentando realizar una Integración de una librería que realiza tareas de firma digital con documentos con Alfresco. Soy nuevo en Alfresco y por lo poco que he visto he pensado que podía hacer esto:
1- declarar un 'action' y añadirlo al grupo de acciones que actuan sobre documentos (document_browse_menu)
2- hacer que este action llamará a un codigo Java que hiciera las llamadas pertinentes a la librería

El paso 1 lo he conseguido modificando el fichero web-client-config-custom.xml, añadiendo estas entradas:

   <config>
      <actions>
         <!– Launch Add Aspect Dialog –>
         <action id="custodia">
            <label>Custodia</label>
            <image>/images/icons/add.gif</image>           
            <tooltip>Envia el documento a custodia</tooltip>
         </action>
           
         <!– Add action to more actions menu for each space –>
         <action-group id="document_browse_menu">
            <action idref="add_aspect" />
         </action-group>
        
      </actions>
   </config>

Una vez realizada esta modificación, he comprobado que aparece una nueva opción en el menu contextual de un documento.

Para el paso dos he visto en el API de Alfresco que existe la clase 'TransformActionExecuter' , implementando una clase que herede de está tendre acceso al documento e incluso modificarlo.

El problema es que no se como modificar la declaración de action del paso1 para llamar a mi clase, he visto que existe el tag <action> y <action-listener>, pero no me permite llamar a mi clase, solo veo que puedo llamar a scripts y a dialogs.

¿Alguien podría decirme como llamar a mi clase Java desde el action declarado?

Muchas Gracias.
26 REPLIES 26

showbiz
Champ on-the-rise
Champ on-the-rise
He corregido un error de sintaxis en la declaracion del bean.

Con la siguiente llamada:

<action-listener>#{custodia.executeImpl}</action-listener>

Obtengo otro error diferente:


javax.faces.el.EvaluationException: Exception while invoking expression #{custodia.executeImpl}
caused by:
java.lang.NoSuchMethodException: es.sia.alfresco.action.executer.CustodiaSIAVALActionExecuter.executeImpl(javax.faces.event.ActionEvent)

Que es el mismo que me daba con la solucion que proponia 'dacedos' (definiendo el bean en el fichero faces-config-custom.xml)

¿Por que es necesario que los  metodos a llamar de la clase Java tengan como parámetro un objeto javax.faces.event.ActionEvent?

He estado ojeando el API de esa clase y no he visto que pueda tener acceso al documento a partir de ese objeto.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Hola, a ver si te sirve este ejemplo sacado de un libro de desarrollo de ALfresco

Implement the setActive method. It gets called when the UI Action is
invoked. It is passed as an ActionEvent through which you can get the
parameters:
/**
* Action handler called when the enable or disable action is
clicked.
* @param event
*/
public void setActive(ActionEvent event) {
UIActionLink link = (UIActionLink)event.getComponent();
Map<String, String> params = link.getParameterMap();
String id = params.get(PARAM_ID);
String active = params.get(PARAM_ACTIVE);
Boolean activeFlag = Boolean.parseBoolean(active);

Por tanto me imagino que dicho parametro sera el "disparador" de la accion personalizada.

Saludos

showbiz
Champ on-the-rise
Champ on-the-rise
Hola,

muchas gracias por el ejemplo, he visto como acceder a los parámetros que se definen en el action mediante los tags <param>.
En todos los ejemplos que he visto siempre se pasa el mismo parámetro:

<params>
             <param name="id">#{actionContext.id}</param>
</params>

Que corresponde con un identificador de la accion, necesito saber si  el actionContext tiene alguna referencia al documento, ya que en mi accion debería tener acceso al documento. ¿Hay algo de documentacion relacionada con actionContext?

Muchas Gracias

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Buenas,

Te adjunto un post bastante significativo
http://forums.alfresco.com/en/viewtopic.php?f=9&t=5010

El ContextAction, puede ser el documento,spacio… mismo al que estas aplicando la accion

Saludos

showbiz
Champ on-the-rise
Champ on-the-rise
Gracias por el post Pedro,

pero sigo con problemas para acceder al fichero, por lo que he podido ver en el API, para acceder al InputStream del fichero necesito su url.

He definido la url como parametro:

<param name="url">#{actionContext.properties['cm:url']}</param>

Y luego por codigo obtengo esa url e intento acceder al inputStream a patir de ella


UIActionLink link = (UIActionLink)e.getComponent();      
Map params = link.getParameterMap();
String url = (String)params.get("url");
HttpAlfrescoStore store = new HttpAlfrescoStore();      
ContentReader readerURL = store.getReader(url);
InputStream is =  readerURL.getContentInputStream();

La url tiene valor, su formato es:

workspace/SpacesStore/cf68c25f-458c-4f32-ade3-8d83d97b4ecb/fileIn.txt

pero  obtengo un error al obtener el inputstream a partir de él, como si el fichero no existiese.

¿Alguna idea de como debe ser el formato del URL o de como obtenerlo?

Gracias.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Hola,

Una cosa que no me cuadra
La url tiene valor, su formato es:

workspace/SpacesStore/cf68c25f-458c-4f32-ade3-8d83d97b4ecb/fileIn.txt

Creo que no es correcto, la url entiendo que podria ser la siguiente:

workspace/SpacesStore/cf68c25f-458c-4f32-ade3-8d83d97b4ecb

pero la ultima parte (/fileIn.txt) ¿ de donde sale?

Saludos

showbiz
Champ on-the-rise
Champ on-the-rise
Es el nombre del fichero desde el que lanzo la accion

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Uhmm espera que creo que se me fue la pelota. Esa url es relativa no? no se si eso te valdria, yo cuando quiero acceder a un contenido via url externa, pongo algo asi

http://IP-Alfresco:8080/alfresco/d/d/workspace/SpacesStore/dc20f0e7-5679-467a-92c8-9660addd8372/Proc...

Saludos

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Por otro lado , no has probado a obtener el ContentReader a partir del FileFolderService
ContentReader getReader(NodeRef nodeRef)

Saludos

showbiz
Champ on-the-rise
Champ on-the-rise
Sí, con un URL de ese tipo yo puedo acceder al documento, pero supongo que tu lo usas para poner enlaces a documentos en otras webs? no? ¿o lo usas como url dentro de un programa java?
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.