Desplegar una acción en Alfresco

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

Re: Desplegar una acción en Alfresco

Si, es exactamente en serc/main/resources/alfresco/module/*-repo/context/service-context.xml donde he definido el bean:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <bean id="myAlfrescoCustom" class="com.alf.ActionDemo"  parent="baseJavaScriptExtension">
        <property name="extensionName"   value="mycustom" />
    </bean>
</beans>

La clase ActionDemo:

public class ActionAlfrescoDemo extends BaseProcessorExtension {
 
 public void writeToCatalina(String text) {
  System.out.println("Message from Alfresco websript: " + text);
 }

El Script JS en Alfresco:

mycustom.writeToCatalina("Ei! ");

Eso es todo lo que tengo... el módulo AMP está instalado en alfresco.war, comprobado con java -jar bin/alfresco-mmt.jar list y cuándo se acciona la regla que ejecuta el script sale el siguiente log:

2018-03-06 10:52:41,542 ERROR [org.springframework.extensions.webscripts.AbstractRuntime] [http-apr-8080-exec-10] Exception from executeScript: 02060021 Failed to execute script 'workspace://*/*': 02060020 ReferenceError: "mycustom" is not defined.

[...]

Ais, si ya estoy dándole mil vueltas a esto... cuándo se consiga solventar este asunto y tenga que ponerme a implementar la tarea de generación de documentos, me caigo muerta

cristinamr
Advanced

Re: Desplegar una acción en Alfresco

Creo que te faltan los getters y setter del objeto.

Vamos a hacer una cosa, te voy a pasar un ejemplo que funciona y revisas el código ¿vale?

EJEMPLO (sacado del libro Alfresco developers, es para versiones antiguas pero para este tipo de conceptos/ejemplos va bien):

clase java (en la ruta src/java/com/someco/jscript/Ratings.java):

package com.someco.jscript;
import org.alfresco.repo.jscript.ScriptNode;
import org.alfresco.repo.jscript.ValueConverter;
import org.alfresco.repo.processor.BaseProcessorExtension;
import org.alfresco.service.cmr.repository.NodeRef;
import com.someco.service.RatingService;
public class Ratings extends BaseProcessorExtension {
private RatingService ratingService;
private final ValueConverter valueConverter = new ValueConverter();
public void rate(ScriptNode scriptNode, int rating, String user) {
ratingService.rate((NodeRef)valueConverter.convertValueForRepo(scriptNode), rating, user);
}
public void deleteRatings(ScriptNode scriptNode) {
ratingService.deleteRatings((NodeRef)valueConverter.convertValueForRepo(scriptNode));
}
public Object getRatingData(ScriptNode scriptNode) {
return ratingService.getRatingData((NodeRef)valueConverter.convertValueForRepo(scriptNode));
}
public int getUserRating(ScriptNode scriptNode, String user) {
return ratingService.getUserRating((NodeRef)valueConverter.convertValueForRepo(scriptNode), user);
}
public boolean hasRatings(ScriptNode scriptNode) {
return ratingService.hasRatings((NodeRef)valueConverter.convertValueForRepo(scriptNode));
}
public void setRatingService(RatingService ratingService) {
this.ratingService = ratingService;
}
}

Otro java más con el servicio customizado (ruta src/java/com/someco/service/RatingService.java)

package com.someco.service;
import org.alfresco.service.cmr.repository.NodeRef;
public interface RatingService {
public void rate(NodeRef nodeRef, int rating, String user);
public void deleteRatings(NodeRef nodeRef);
public RatingData getRatingData(NodeRef nodeRef);
public int getUserRating(NodeRef nodeRef, String user);
public boolean hasRatings(NodeRef nodeRef);
public interface RatingData {
public int getCount();
public double getRating();
public int getTotal();
}
}

contexto con el bean (en la ruta config/alfresco/extension/someco-services-context.xml)

<?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="ratingScript" parent="baseJavaScriptExtension" class="com.someco.jscript.Ratings">
<property name="extensionName">
<value>ratings</value>
</property>
<property name="ratingService">
<ref bean="RatingService" />
</property>
</bean>
</beans>

Y  javascript (en la ruta src/scripts/addTestRating.js):

// randomly pick a num b/w 1 and 5 inclusive
var ratingValue = Math.floor(Math.random()*5) + 1;
// use the rating service instead
/*
// add the aspect to this document if it needs it
if (document.hasAspect("sc:rateable")) {
logger.log("Document already as aspect");
} else {
logger.log("Adding rateable aspect");
document.addAspect("sc:rateable");
}
var props = new Array(2);
props["sc:rating"] = ratingValue;
props["sc:rater"] = person.properties.userName;
// create a new ratings node and set its properties
var ratingsNode = document.createNode("rating" + new Date().getTime(), "sc:rating", props, "sc:ratings");
ratingsNode.save();
*/
ratings.rate(document, ratingValue, person.properties.userName);
logger.log("Ratings node saved.");

Prueba y nos dices. Si consigues sacar este ejemplo, el tuyo lo verás con más claridad y podrás corregirlo. El caso es no quedarte estancada y ver si un ejemplo probado te sale para ir aprendiendo con la práctica.

Coméntanos,

Cris.

--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
peli
Member II

Re: Desplegar una acción en Alfresco

Llevo intentando hacer funcionar el ejemplo pero nada... He copiado las clases y el bean en mi proyecto pero cuando se ejecuta la regla del script en el share sigue apareciendo el error 'ratings is not defined'. He estado buscando info y sospecho de si el problema vendrá de la intalación del módulo AMP en Alfresco. Para añadir una extensión de Alfresco se instala el amp de la forma "java -jar bin\alfresco-mmt.jar amps\*.amp tomcat\webapps\alfresco.war" y ya está?

Porque al desisntalar el módulo, aparece un log que muestra:

- Removing file '/WEB-INF/lib/*.jar' from war

- Removing file '/WEB-INF/classes/alfresco/module/<nombre-modulo>/modifications.install' from war

- Removing file '/WEB-INF//classes/alfresco/module/<nombre-modulo>/module.properties' from war

Y si accededes a esos a ambos directorios una vez instalado el módulo, no existen ningún jar ni ningún directorio con el nombre del módulo que acabas de instalar. ¿Es porque están encapsulados en alfresco.war?

Vi que otra forma de añadir un módulo a Alfresco sería copiar el JAR en tomcat/webapps/WEB-INF/lib, pero de de esta manera Alfresco me da error al intentar acceder con un 'No se han reconocido sus datos de acceso o Alfresco Content Service no está disponible en este momento'.

Muchas gracias por la ayuda.

cristinamr
Advanced

Re: Desplegar una acción en Alfresco

...Alfresco se instala el amp de la forma "java -jar bin\alfresco-mmt.jar amps\*.amp tomcat\webapps\alfresco.war" y ya está?

No lo estás instalando correctamente, sería java-jar bin\alfresco-mmt.jar install amps\tu-amp.amp ruta_a_webapps\alfresco.war

Y lo mismo para share: java-jar bin\alfresco-mmt.jar install amps_share\tu-amp.amp ruta_a_webapps\share.war

Con el jar alfresco-mmt.jar puedes ver incluso que amps tienes instalados. Aquí más referencia: Using the Module Management Tool (MMT) | Alfresco Documentation 

¿Puedes mirar si lo tienes correctamente instalado?

--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
peli
Member II

Re: Desplegar una acción en Alfresco

Nada Cristina, no consigo salir de este bache. Os expongo en procedimiento que sigo:

1. Creación de la clase en src\main\java.

2. Registro del bean en src\main\resources\alfresco\module\<nombre-repo>\context\service-context.xml

3. Generación del AMP con mvn package.

4. Ubicación del AMP en el directorio de Alfresco alfresco\amps.

5. Instalación mediante java -jar bin\alfresco-mmt.jar install amps\<nombre-AMP>.amp tomcat\webapps\alfresco.war

6. Instalación mediante java -jar bin\alfresco-mmt.jar install amps\<nombre-AMP>.amp tomcat\webapps\share.war

7. Comprobación de la instalación mediante java -jar bin\alfresco list alfresco\webapps\alfresco.war y java -jar bin\alfresco list alfresco\webapps\share.war. Comprobación afirmativa tanto para alfresco.war como para share.war.

8. Creación de una regla en una carpeta de un espacio de Alfresco que ejecuta el script ubicado en Diccionario de datos\Scripts.

Adjunto el código del proyecto Maven, que no tiene nada, junto con el script, que es una línea. Ya no tengo ideas de lo que puedo estar haciendo mal...

peli
Member II

Re: Desplegar una acción en Alfresco

Hola chicos,

he probado con el ejemplo de enviar email  Actions | Alfresco Documentation  pero consigo el mismo resultado que de la manera anterior " 'send-as-email' is not defined". También he probado a instalar el AMP utilizando apply_amps pero el resultado es el mismo otra vez, o peor, utilizando ese ejecutable después no puedo hacer login en Alfresco Share y tengo que volver a una copia anterior de alfresco.war .

Creo que el problema radica en el proceso de instalación del amp que estou siguiendo, comentado anteriormente. Y no sé como salir de este bache después de 2 semanas bloqueada.

Muchas gracias por todo.

angelborroy
Alfresco Employee

Re: Desplegar una acción en Alfresco

Si sigues este tutorial deberías ser capaz de desarrollar una Action en Alfresco:

https://ecmarchitect.com/alfresco-developer-series-tutorials/actions/tutorial/tutorial.html

También puede ayudarte a empezar la configuración del entorno de desarrollo:

https://ecmarchitect.com/alfresco-developer-series-tutorials/maven-sdk/tutorial/tutorial.html

En el fondo el proceso no es tan complejo:

a) Define una clase Java que extienda de ActionExecuterAbstractBase (https://github.com/jpotts/alfresco-developer-series/blob/master/actions/actions-tutorial-repo/src/ma...)

b) Declara el bean de Spring con el nombre que desees usar (https://github.com/jpotts/alfresco-developer-series/blob/master/actions/actions-tutorial-repo/src/ma...)

Y ya debería aparecerte en la lista de la opción "Realizar acción" en la definición de reglas desde Share.

Hyland Developer Evangelist
peli
Member II

Re: Desplegar una acción en Alfresco

Resuelto el problema instalando el amp en java -jar bin\alfresco-mmt.jar install amps\<nombre-AMP>.amp tomcat\webapps\alfresco .

Muchas gracias!