<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.
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.