As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<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>
# 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>
<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>
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)
<params> <param name="id">#{actionContext.id}</param> </params>
TransformActionExecuter
doTransform
<!– Add action to more actions menu for each space –> <action-group id="document_browse_menu"> <action idref="add_aspect" /> <action idref="custodia" /> </action-group>
<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>
<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>
<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>
<action-listener>#{custodia.executeImpl}</action-listener>
javax.faces.el.EvaluationException: Exception while invoking expression #{custodia.executeImpl} caused by: javax.faces.el.PropertyNotFoundException: Base is null: custodia
#{Firmar.firmar}
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)
Implement the setActive method. It gets called when the UI Action isinvoked. It is passed as an ActionEvent through which you can get theparameters:/*** Action handler called when the enable or disable action isclicked.* @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);
<param name="url">#{actionContext.properties['cm:url']}</param>
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
<config> <actions> <action id="copia"> <label>Copia</label> <image>/images/icons/add.gif</image> <tooltip>Crea una copia local del documento</tooltip> <action-listener>#{copia.crearCopiaLocal}</action-listener> <params> <param name="id">#{actionContext.id}</param> <param name="name">#{actionContext.properties['cm:name']}</param> <param name="url">#{actionContext.properties['cm:url']}</param> <param name="nodeRef">#{actionContext.nodeRef}</param> </params> </action> <!– Add action to more actions menu for each space –> <action-group id="document_browse_menu"> <action idref="custodia" /> </action-group> </actions> </config>
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="copia" class="es.alfresco.action.executer.CopiaActionExecuter" parent="action-executer"> <property name="nodeService"> <ref bean="NodeService" /> </property> <property name="fileFolderService"> <ref bean="FileFolderService" /> </property> </bean> <bean id="extension.actionResourceBundles" parent="actionResourceBundles"> <property name="resourceBundles"> <list> <value>alfresco.extension.custodiaactionmessages</value> </list> </property> </bean> </beans>
public class es.alfresco.action.executer.CopiaActionExecuter extends ActionExecuterAbstractBase{ /** * Referencia al interfaz que tiene acceso a los nodos de Alfresco. * Para tener este referencia es necesario declarar un parametro * con el mismo nombre en la declaracion del bean de la accion */ private NodeService nodeService; /** * Referencia al interfaz que tiene acceso a los ficheros(contenidos) * y a los directorios(spaces) de alfresco. * Para tener este referencia es necesario declarar un parametro * con el mismo nombre en la declaracion del bean de la accion */ private FileFolderService fileFolderService; /** * Constructor de la clase */ public CustodiaSIAVALActionExecuter(){ super(); } /** * Obtiene referencia al Node Service * @return referencia al NodeService */ public NodeService getNodeService() { return nodeService; } /** * Da valor a la referencia al nodeService de la clase. * Este metodo se lanza por el hecho de tener definido * el parametro nodeService en la declaracion del bean de la accion * @param nodeService referencia al nodeService */ public void setNodeService(NodeService nodeService){ this.nodeService = nodeService; } /** * Da valor a la referencia al fileFolderService de la clase. * Este metodo se lanza por el hecho de tener definido * el parametro fileFolderService en la declaracion del bean de la accion * @param fileFolderService referencia al fileFolderService */ public void setFileFolderService(FileFolderService fileFolderService){ this.fileFolderService = fileFolderService; } /** * Crea una copìa local del documento que lanza el evento en la unidad C. El nombre de la copia * siuue el siguiente patron: "Copia_<nombre_doc_original>.<ext_doc_original>" * @param e referencia al evento que lanza la accion */ public void crearCopiaLocal(ActionEvent e){ try { // obtengo los parámetros recibidos UIActionLink link = (UIActionLink)e.getComponent(); Map params = link.getParameterMap(); // obtengo instancia del noderef String nodeRefStr = (String) params.get("nodeRef"); NodeRef nodeRef = new NodeRef(nodeRefStr); if (fileFolderService==null){ // otra forma de obtener el filefolderservice fileFolderService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getFileFolderService(); } if (fileFolderService!=null){ // obtengo el reader a partir del filefolderservice ContentReader reader = fileFolderService.getReader(nodeRef); InputStream is = reader.getContentInputStream(); // obtengo el nombre que le pondremos a la copia String nombreCopia = getNombreCopia(nodeRef); // creo un outputstream, ubicare el fichero en la unidad C: OutputStream os = new FileOutputStream(new File("c:\\"+nombreCopia)); byte[] bytes = new byte[4096]; int len; // copio el fichero en bloques de 4k while ((len = is.read(bytes)) >= 0) { os.write(bytes, 0, len); } os.close(); System.out.println("fin de la copia"); }else{ System.out.println("el FileFolder es null"); } } catch (ContentIOException e1) { e1.printStackTrace(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } private String getNombreCopia(NodeRef nodeRef){ Map propiedades = nodeService.getProperties(nodeRef); QName qName = QName.createQName("{http://www.alfresco.org/model/content/1.0}name"); String nombre = (String)propiedades.get(qName); int indicePunto = nombre.indexOf("."); String nombreSinExt = nombre.substring(0,indicePunto); String nombreCopia = "Copia_" + nombreSinExt +"." + nombre.substring(indicePunto+1); return nombreCopia; } protected void executeImpl(Action arg0, NodeRef arg1) { } protected void addParameterDefinitions(List arg0) { } }
<action id="mi_accion"> <label-id>miaccion</label-id> <image>/image/icons/miaccion.gif</image> <action>dialog:miaction</action> <!– esta es la parte importante ya que llamara un dialogo–> </action>
<action-group id="browse_actions_menu"> <action idref="mi_accion"/><!– aca agregaras el link de la accion.–> </action-group>
<dialog name="miaccion" page="/jsp/extension/miaccion.jsp" managed-bean="si es que tengo" icon="/images/icons/miaccion.gif" title-id="mi-accion" />
<navigation-rule> <from-view-id>/jsp/*</from-view-id> <navigation-case> <from-outcome>miaccion</from-outcome> <to-view-id>/jsp/extension/miaccion.jsp</to-view-id> </navigation-case> </navigation-rule>
Buenas tardes, me gustaría retomar este hilo porque tengo que hacer algo parecido, lo que quiero es llamar a una aplicación que tengo desplegada en tomcat (el mismo donde está mi Alfresco que por cierto es el 3.4.d) he seguido todos los pasos pero lo que no sé es cómo implementar el método dentro del actionexecuter.java para que llame a otra aplicación, ya que en el código de showbiz_ lo que hace es una copia del documento. gracias de antemano por cualquier ayuda que puedan prestarme. un saludo.