Action Java con acceso al documento

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 03:53 AM
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.
- Labels:
-
Archive
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 04:03 AM
Para hacer que la acción personalizada este disponible debemos declarar como un bean de Spring. Para ello crearemos un fichero en alfresco/extension siguiendo la nomenclatura que definimos para las extensiones de ficheros de configuración de Spring, por ejemplo add-aspect-action-context.xml, y añadiremos la definición:
# Accion personalizada para añadir aspecto <bean id="tag" class="org.alfresco.sample.TagActionExecuter" parent="action-executer"> <property name="nodeService"> <ref bean="nodeService" /> </property> </bean>
Saludos
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 04:06 AM
Para poder llamar a una clase java tienes que declarar un bean en el faces-config-custom.xml
Por ejemplo algo como:
<managed-bean> <description>Mi Bean para firmar</description> <managed-bean-name>Firmar</managed-bean-name> <managed-bean-class>org.alfresco.firmar.Firmar</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
luego el action listener de tu action podria ser:
<action-listener>#{Firmar.firmar}</action-listener>
en el Firmar.firmar, el Firmar primero es el nombre del bean y el segundo es el nombre del metodo en la clase java.
Y solo por curiosidad… ¿Que libreria vas a utilizar y como tienes en mente hacerlo?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 07:02 AM
Muchas gracias a los dos por las respuestas.
En cuanto a la propuesta de Pedro, la he probado, pero sigo sin saber como llamar desde el action-listener.
Tambien he probado la propuesta de ''dacedos". Para comenzar he creado un clase simple en Java con un metodo sin parámetros que lanza un traza (System.out.println), pero al invocarlo me pide que el metodo reciba un evento como parámetro:
javax.faces.el.EvaluationException: Exception while invoking expression #{Modulo.traza}caused by:java.lang.NoSuchMethodException: es.sia.alfresco.action.executer.SimpleClass.traza(javax.faces.event.ActionEvent)
¿Es necesario que los metodos reciban ese parámetro? ¿La clase debe heredar de de alguna clase o implementar algún interfaz?
Más adelante necesitaré pasar parámetros, he visto que se pueden definir los parámetros en la definición del action:
<params> <param name="id">#{actionContext.id}</param> </params>
Más concretamente necesitaré tener acceso al documento en cuestión, por eso mi intención de utilizar la clase
TransformActionExecutercuyo metodo
doTransformtiene acceso al documento. Pero, ¿hay alguna forma de que la clase tenga acceso al documento mediante la definición de parámetros en el elemento action?
Para satisfacer tu curiosad, te puedo decir que en realidad no voy a llamar a una librería, mi empresa tiene un producto que ofrece servicios relacionados con firma digital: firma, custodia,…,etc y buscamos una forma de integrar el producto con Alfresco.
Muchas gracias otra vez.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 07:14 AM
Investiga por ahi.
http://wiki.alfresco.com/wiki/Custom_Actions
Saludos

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 07:47 AM
<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>
Y en el link no hace referencia a nada de eso.
Muchas gracias
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 08:05 AM
<!– Add action to more actions menu for each space –> <action-group id="document_browse_menu"> <action idref="add_aspect" /> <action idref="custodia" /> </action-group>
Por otro lado, entiendo que para usar action-listener deberas incluir en dicha etiqueta el bean que has declarado para la accion de firmar no?
<config>
<actions>
<!– Launch Add Aspect Dialog –>
<action id="custodia">
<label>Custodia</label>
<image>/images/icons/add.gif</image>
<action-listener>#{Firmar.firmar}</action-listener>
<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>
Saludos

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 08:32 AM
Si tengo añadida mi action al grupo:
<config> <actions> <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="custodia" /> </action-group> </actions> </config>
Por otro lado tengo definido un bean con mi Action dentro del fichero custodia-action.context.xml como tu me indicaste:
<beans><!–Custodia Action Bean –> <bean id="custodia" class="es.sia.alfresco.action.executer.CustodiaActionExecuter" parent="actionexecuter"> <property name="nodeService"> <ref bean="NodeService" /> </property> </bean> <bean id="extension.actionResourceBundles" parent="actionResourceBundles"> <property name="resourceBundles"> <list> <value>alfresco.extension.custodiaactionmessages</value> </list> </property> </bean></beans>
Pero me falta modificar la declaración del action para que llame a este bean a traves del tag action-listener y no tengo claro como debe ser esa sintaxis o si tengo que poner el nombre del método.
Muchas gracias por tu interés.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 08:40 AM
<action-listener>#{Firmar.firmar}</action-listener>
Es decir la llamada al metodo del bean que has declarado. Con esto y sino necesita parametros deberia funcionar.
Saludos

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-02-2009 09:06 AM
<action-listener>#{custodia.executeImpl}</action-listener>
Y me ha mostrado el siguiente error:
javax.faces.el.EvaluationException: Exception while invoking expression #{custodia.executeImpl}caused by:javax.faces.el.PropertyNotFoundException: Base is null: custodia
el problema que veo que es la sintaxis:
#{Firmar.firmar}
parece propia de acciones de Java Server Faces y puede que los actions de tipo "Action Executer" no se llamen igual, (por eso hablo de que desconozco la sintaxis de la llamada o no se si hay que poner el nombre del metodo por que las 'Action Executer' deben implementar el metodo 'executeImpl')
Seguire peleando con ello.
Muchas gracias.
