Débutant en Web Scripts...

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

Débutant en Web Scripts...

Bonjour à tous,

je me mets aux web scripts, et comme il faut bien commencer par un exemple, j'ai choisi celui-ci :

ma description : arbo.get.desc.xml

<webscript>
  <shortname>Affichage documents</shortname>
  <description>Test2</description>
  <url>/repo</url>
  <url>/repo/node/{nodeid}</url>
  <url>/repo/node/path/{path}</url>

  <format default="html">argument</format>
  <authentication>guest</authentication>
  <transaction>required</transaction>
</webscript>
mon template : arbo.get.html.flt

<#assign spaces = results.spaces>
<#assign docs = result.documents>

<html>
<body>

<b>Spaces:</b><br/>
<#list spaces as space>
<a href="${url.serviceContext}/repo/node/${space.id}">${space.name}</a><br/>
</#list>
<hr/>
<b>Documents:</b><br/>
<#list docs as doc>
<a href="$url.serviceContext}/repo/node/${doc.id}">${doc.name}</a><br/>
</#list/
<hr/>
</body>
</html>
mon javascript : arbo.get.js

<import resource="classpath:alfresco/extension/templates/webscripts/org/alfresco/util/json.js">

var curNode = companyhome;

if (url.extension != "") {

   if (url.match == "/alfresco/service/repo/node/path/") {
      var expr = "company Home/";
      var str = url.extension.replace(expr,"");
      if (str != "") {
         curNode = companyhome.childByNamePath(str);
      }
   } else if (url.match == "/alfresco/service/repo/node/") {
      curNode = search.findNode("workspace://SpaceStore/" + URL.extension);
   }
}


var children = curNode.children;
var results = {};

var numDocs = 0;
var numSpaces = 0;

results.node = curNode;
results.spaces = new Array();
results.documents = new Array();

for (var i=0; i < children.length; i++){
   var index = 0;
   if (children[i].isContainer) {
      results.spaces[numSpace] = children[i];
      index = numSpaces++;
   } else if (children[i].isDocument) {
      results.documents[numDocs] = children[i];
      index = numDocs++;
   }
}
model.results = results;

Je lance won web script : http://mon_ip:8080/alfresco/service/repo
Et la…j'ai une erreur de syntaxe, et je pédale dans la semoule pour corriger

Message:   Wrapped Exception (with status template): Failed to execute script '/maboite/arbo.get.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': erreur de syntaxe (AlfrescoScript#8)
   

y-aurait-il une âme charitable pour me filer un petit coup de pouce  Smiley Tongue

Merci de votre aide
6 Replies
bertrandf
Active Member

Re: Débutant en Web Scripts...

Bonjour,

Est-ce vous qui avez créé le script que vous importez dans votre fichier JS (json.js) ?
Si oui, serait-il possible de voir son contenu et/ou avoir son nombre de lignes svp.

Merci.
fred_pack
Member II

Re: Débutant en Web Scripts...

Bonjour,
Et merci de votre intêret …

Ce n'est pas moi qui ai créé ce fichier json.js, et apparemment il n'existe pas dans le chemin indiqué dans mon fichier get.js

J'ai fait une recherche dans mon répertoire /opt/alfresco et j'ai trouvé des fichiers json.js, mais qui se trouvent dans :
/opt/alfresco/tomcat/webapps/alfresco/scripts/ajax/dojo/src/
/opt/alfresco/tomcat/webapps/share/yui/json/

Cordialement
bertrandf
Active Member

Re: Débutant en Web Scripts...

Bon alors, j'ai testé votre WebScript,

1- Il faut que vous enleviez l'import inutile (json.js)
2- Dans votre fichier JS, ligne 30 (après suppression de l'import), la variable "numSpace" n'existe pas.
Au passage je ne comprends pas l'utilité de la variable "index" qui est incrémentée mais jamais utilisée.

3- Votre fichier freemarker et mal nommé (du moins dans votre sujet sur le forum), l'extension freemarker est .ftl et non .flt

4- En ce qui concerne votre template :
  4.1- Il y a une erreur de syntaxe ligne 15 pour fermer votre boucle (</#list/ => </#list>)
  4.2- Ligne 2 : vous avez oublié un "s" à "result" => results.documents
 
Avec ces modifications, j'ai réussi à faire fonctionner le WebScript en allant à l'adresse :
http://localhost:8080/alfresco/service/repo

Après avec les paramètres ca n'a pas vraiment l'air de fonctionner … Je pense qu'il faut revoir la façon dont vous récupérez vos paramètres.
Pourquoi ne pas utiliser  url.templateArgs["nom-du-paramètre"] et tester la nullité de ce qui est récupéré?

Voici un exemple :
   var nodeId = url.templateArgs["nodeid"];
   var path = url.templateArgs["path"];
  
   if(nodeId != null){
      curNode = search.findNode("workspace://SpaceStore/" + nodeId);
   }
   else if(path != null){
      var expr = "company Home/";
      var str = path.replace(expr,"");
      if (str != "") {
         curNode = companyhome.childByNamePath(str);
      }  
   }


PS :
Je ne sais pas vraiment à quoi va vous servir le WebScript mais faites attention quand vous faites le "curNode.children" car si le nœud est un fichier cela déclenchera une erreur.
Je vous conseillerai donc d'utiliser "isContainer" sur le nœud avant de récupérer ses enfants.
Allez sur le wiki Alfresco pour voir les possibilités offertes par l'API JavaScript : http://wiki.alfresco.com/wiki/JavaScript_API

En espérant vous avoir aidé.
Cordialement.
fred_pack
Member II

Re: Débutant en Web Scripts...

Merci pour votre réponse hyper précise !!

En fait, je cherche à utiliser un web script à destination des utilisateurs qui n'ont accès qu'en lecture à une diffusion de documents qualités.
Etant donné qu'il s'agit d'un public large (administratif, postes dans ateliers, etc…), je veux mettre en place une IHM simplifiée

…et que j'ai trouvé un exemple à cet endroit : http://files.meetup.com/511466/Alfresco_WebScripts.pdf

mais d'après ce que vous me dites, je vais plutôt chercher aller ailleurs… Smiley Happy

Cordialement
jayjayecl
Active Member II

Re: Débutant en Web Scripts...

Bon alors, j'ai testé votre WebScript,

1- Il faut que vous enleviez l'import inutile (json.js)
2- Dans votre fichier JS, ligne 30 (après suppression de l'import), la variable "numSpace" n'existe pas.
Au passage je ne comprends pas l'utilité de la variable "index" qui est incrémentée mais jamais utilisée.

3- Votre fichier freemarker et mal nommé (du moins dans votre sujet sur le forum), l'extension freemarker est .ftl et non .flt

4- En ce qui concerne votre template :
  4.1- Il y a une erreur de syntaxe ligne 15 pour fermer votre boucle (</#list/ => </#list>)
  4.2- Ligne 2 : vous avez oublié un "s" à "result" => results.documents
 
Avec ces modifications, j'ai réussi à faire fonctionner le WebScript en allant à l'adresse :
http://localhost:8080/alfresco/service/repo

Après avec les paramètres ca n'a pas vraiment l'air de fonctionner … Je pense qu'il faut revoir la façon dont vous récupérez vos paramètres.
Pourquoi ne pas utiliser  url.templateArgs["nom-du-paramètre"] et tester la nullité de ce qui est récupéré?

Voici un exemple :
   var nodeId = url.templateArgs["nodeid"];
   var path = url.templateArgs["path"];
  
   if(nodeId != null){
      curNode = search.findNode("workspace://SpaceStore/" + nodeId);
   }
   else if(path != null){
      var expr = "company Home/";
      var str = path.replace(expr,"");
      if (str != "") {
         curNode = companyhome.childByNamePath(str);
      }  
   }


PS :
Je ne sais pas vraiment à quoi va vous servir le WebScript mais faites attention quand vous faites le "curNode.children" car si le nœud est un fichier cela déclenchera une erreur.
Je vous conseillerai donc d'utiliser "isContainer" sur le nœud avant de récupérer ses enfants.
Allez sur le wiki Alfresco pour voir les possibilités offertes par l'API JavaScript : http://wiki.alfresco.com/wiki/JavaScript_API

En espérant vous avoir aidé.
Cordialement.


Cette aide mériterait presque d'instaurer des points multiples. Smiley Wink
bertrandf
Active Member

Re: Débutant en Web Scripts...

J'ai trouvé un exemple à cet endroit : http://files.meetup.com/511466/Alfresco_WebScripts.pdf

mais d'après ce que vous me dites, je vais plutôt chercher aller ailleurs… Smiley Happy

Je pense que l'exemple que vous avez trouvé est une bonne base pour démarrer votre WebScript mais il va seulement falloir que vous l'adaptiez à vos besoins.
Il y a surement 2, 3 choses à améliorer dans le WebScript (notamment ce que je vous ai dit pour la récupération des paramètres).

Bon courage pour la réalisation de votre WebScript et n'hésitez pas à demander de l'aider si vous bloquez.

PS: Le wiki d'Alfresco devrait grandement vous aider que ce soit pour le JavaScript ou le Freemarker.