Actualizando Web Scripts

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

Actualizando Web Scripts

Hola gente, soy bastante nuevo en temas de Alfresco y Web Scripts y en el trabajo donde estoy he tenido que realizar una actualización de su Alfresco 2.2 a la 3.4 community.

He Exportado los webScripts propios del proyecto y luego importado como paquetes ACP a la nueva versión.

Pero a la hora de ejecutarlos a cada paso que doy siempre me da un problema de definición de variables, de web scripts que en la versión anterior están funcionando.

No sé si es que tengo que compilar los web scripts o cambiar alguna librería. Os dejo el error por si os habeis encontrado con ello y el código del web script que me da problemas.

El fichero getExpReviewers.post.js:
var myexp, i, users;
var users = new Array();
exp = args.exp;

exps = search.luceneSearch("+TYPE:\"exp:expediente\" +@cm\\:name:\"" + exp + "\"");
myexp = exps[0];

interiorexp = myexp.childrenByXPath(".//*");
j=0;
for(i=0;i<interiorexp.length;i++)
{
if(interiorexp[i].type == "{http://www.unav.es/model/expedientes/1.0}reviewer")
{
   users[j] = interiorexp[i];
   j++;  
}
}
model.users = users;

el fichero getExpReviewers.post.desc.xml

<webscript>
<shortname>Expediente Get Reviewers</shortname>
<description>WebScript que saca la lista de revisores del expediente</description>
<url format="xml" template="/unav/getExpReviewers?exp={exp}"/>
<format default="xml">extension</format>
<authentication>user</authentication>
<transaction>none</transaction>
</webscript>

Y el ftl getExpReviewers.post.xml.ftl.xml
<?xml version="1.0" encoding="utf-8"?>
<userlist>  
<#list users ?sort_by(['properties','exp:order']) as user>  
<user>
    <order>${user.properties["exp:order"]}</order>
    <userName>${user.assocs["exp:user"][0].properties["cm:userName"]}</userName>   
    <#if user.assocs["exp:user"][0].properties["cm:firstName"]?exists>
    <firstName>${user.assocs["exp:user"][0].properties["cm:firstName"]}</firstName>
    <#else>
    <firstName></firstName>
    </#if>
    <#if user.assocs["exp:user"][0].properties["cm:lastName"]?exists>
    <lastName>${user.assocs["exp:user"][0].properties["cm:lastName"]}</lastName>
    <#else>
    <lastName></lastName>
    </#if>
    <#if user.assocs["exp:user"][0].properties["cm:homeFolder"]?exists>
    <homeFolder>${user.assocs["exp:user"][0].properties["cm:homeFolder"]}</homeFolder>
    <#else>
    <homeFolder></homeFolder>
    </#if>
    <#if user.assocs["exp:user"][0].properties["cm:email"]?exists>
    <email>${user.assocs["exp:user"][0].properties["cm:email"]}</email>
    <#else>
    <email></email>
    </#if>
</user>   
</#list>
</userlist>


Y cuando intento utilizar desde mi código dicho web script me salta este error de undefined expression

15:55:40,353 User:rclau ERROR [freemarker.runtime] Expression user.assocs["exp:user"] is undefined on line 6, column 17 in unav/getExpReviewers.post.xml.ftl.

Expression user.assocs["exp:user"] is undefined on line 6, column 17 in unav/getExpReviewers.post.xml.ftl.
The problematic instruction:
———-
==> ${user.assocs["exp:user"][0].properties["cm:userName"]} [on line 6, column 15 in unav/getExpReviewers.post.xml.ftl]
———-

Java backtrace for programmers:
———-
freemarker.core.InvalidReferenceException: Expression user.assocs["exp:user"] is undefined on line 6, column 17 in unav/getExpReviewers.post.xml.ftl.
   at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
   at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:75)
   at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
   at freemarker.core.Dot._getAsTemplateModel(Dot.java:74)
   at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
   at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:74)
   at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
   at freemarker.core.Expression.getStringValue(Expression.java:93)
   at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
   at freemarker.core.Environment.visit(Environment.java:210)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:210)
   at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
   at freemarker.core.Environment.visit(Environment.java:417)
   at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
   at freemarker.core.Environment.visit(Environment.java:210)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:210)
   at freemarker.core.Environment.process(Environment.java:190)
   at freemarker.template.Template.process(Template.java:237)
   at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:197)
   at org.springframework.extensions.webscripts.AbstractWebScript.renderTemplate(AbstractWebScript.java:589)
   at org.springframework.extensions.webscripts.DeclarativeWebScript.renderFormatTemplate(DeclarativeWebScript.java:267)
   at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:147)
   at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:336)
   at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:466)
   at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:304)
   at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:333)
   at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:189)
   at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:118)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
   at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
   at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
   at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
   at java.lang.Thread.run(Thread.java:619)


Si alguien puede ayudarme, lo agradecería.
5 Replies
cesarista
Customer

Re: Actualizando Web Scripts

Hola:

Si te entiendo bien los webscripts que intentas instalar unicamente tienen dependencia con las API's javascript de Alfresco y no con backend de java. Aun en ese caso, teniendo en cuenta el salto que mencionas (Alfresco 2.2 a la 3.4) puede que el API que utilices no este bien.

Hay diferencias entre las API's de javascript en las diferentes versiones de Alfresco. Deberias ver si esta disponible en Alfresco 3.4 user.assocs


freemarker.core.InvalidReferenceException: Expression user.assocs["exp:user"] is undefined on line 6, column 17 in unav/getExpReviewers.post.xml.ftl.

http://wiki.alfresco.com/wiki/JavaScript_API

Por otro lado, se hace una búsqueda de unos tipos de contenido personalizados que deberían estar instalados (expediente) porque si no también tendrás problemas.

Un saludo.

–C.
gabri124
Member II

Re: Actualizando Web Scripts

gracias Cesarita, el Api de JavaScript que se instala con el Alfresco directamente? Es que trabajo con máquinas virtuales y esta es heredada para saber si quizás cogiendo la anterior Api me funciona y listo.
cesarista
Customer

Re: Actualizando Web Scripts

Hola:

Si, el API javascript (de servidor) de Alfresco, viene con Alfresco.
No tienes que instalar nada, se utiliza constantemente en un montón de componentes como webscripts, scripts, dashlets…. 

Lo que tendrías que hacer, si te he entendido bien, es adaptar tu webscript con el API correspondiente a la versión 3.4

Un saludo.

–C.
gabri124
Member II

Re: Actualizando Web Scripts

Perdona mi incultura pero si en un entender el Api no ha cambiado y se ha actualizado, como es que simplemente definicion de variables ya no están. Como puedo verificar el código del api? pq no lo encuentro en ningún sitio.

Por lo que estoy viendo al debuggar, el model.user me está devolviendo null, quizás es tema que no estoy pasando vien el usuario, o no está bien definido en alfresco el espacio o algo…. no sé
gabri124
Member II

Re: Actualizando Web Scripts

Problema solucionado. Todo esto vino a que no tenía configurado los permisos en el permissionDefinitions.xml de alfresco. Al configurar estos con los que yo quería utilizar las aplicaciones van sin ningún problema