cancel
Showing results for 
Search instead for 
Did you mean: 

Script lancé par une action de menu sur document

fred_pack
Champ in-the-making
Champ in-the-making
Bonjour ,

Je poursuis sur le sujet concernant d'envoi de mail que j'ai soumis dernièrement…

J'ai rajouté une action dans le détail d'un document (dans le fichier web-client-config-actions.xml) :

         <action-group id="doc_details_actions">
            <action idref="envoi_mail_u" />

L'action id se décline comme ceci :

        <action id="envoi_mail_u">
            <label-id>envoi_mail</label-id>
            <image>/images/icons/email_users.gif</image>
            <script>/Company Home/Data Dictionary/Scripts/mail_aux_utilisateurs.js</script>
         </action>

Le script utilisé dans l'action id est le suivant :

var persons = [];
var perms = document.getPermissions();
for(var i=0 ; i<perms.length ; i++) {
   var perm = perms[i].split(";");
   if(perm[0] == "ALLOWED" && perm[1].lastIndexOf("GROUP_") != -1) {
      var group = people.getGroup(perm[1]);
         if(group)
            var persons = people.getMembers(group);
            for each (person in persons){
            if(person.properties.userName != "admin" && person.properties.userName != "guest"){
               var email = person.properties.email;
               if(email)
                  sendMail(email);
            }
         }
     }
}

function sendMail(email){
   // Envoi mail
   var mail = actions.create("mail");
   mail.parameters.to = email;
   mail.parameters.subject = "Document Mis a Jour";
   mail.parameters.from = "Info@Alfresco";
   mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/diffusion_document.ftl");
   mail.parameters.text = "Nouveau document";
   mail.execute(document);
}
Le script utilisé par l'option 'Lancer une action' dans les détails du document fonctionne bien
Par contre, lorsque je lance le script en cliquant sur mon action créée dans les options du document, j'ai l'erreur suivante :

org.alfresco.error.AlfrescoRuntimeException: Error during command servlet processing: Failed to execute script 'workspace://SpacesStore/ac628e1e-6283-4662-ad68-e119b3d4c0b6': ReferenceError: "document" n'est pas défini (AlfrescoScript#2)
caused by:
org.alfresco.scripts.ScriptException: Failed to execute script 'workspace://SpacesStore/ac628e1e-6283-4662-ad68-e119b3d4c0b6': ReferenceError: "document" n'est pas défini (AlfrescoScript#2)
caused by:
org.alfresco.error.AlfrescoRuntimeException: ReferenceError: "document" n'est pas défini (AlfrescoScript#2)
caused by:
org.mozilla.javascript.EcmaError: ReferenceError: "document" n'est pas défini (AlfrescoScript#2)

Je comprends bien, et c'est logique d'avoir ce message d'erreur me disant que 'document' n'est pas défini,

Mais comment faire pour retrouver cette référence au document  :?:  :?:

Merci de votre aide

Cordialement

Fred
4 REPLIES 4

bertrandf
Champ on-the-rise
Champ on-the-rise
Bonjour,

Il faut que vous passiez un argument (l'identifiant du nœud) à votre script :
<action id="envoi_mail_u">
   <label-id>envoi_mail</label-id>
   <image>/images/icons/email_users.gif</image>
   <script>/Company Home/Data Dictionary/Scripts/mail_aux_utilisateurs.js</script>
   <params>
      <param name="noderef">#{actionContext.nodeRef}</param>
   </params>
</action>

Et ensuite, il faut récupérer l'identifiant du nœud dans votre script :
var nodeRef = args["noderef"];
var document = search.findNode(nodeRef);

Source : http://wiki.alfresco.com/wiki/Externalised_Client_Actions#Action_Definition_Config_Elements



PS: j'ai l'impression que vous avez oublié des accolades dans votre script après le test if(group).
Je pense que votre script devrait ressembler à ca :
var nodeRef = args["noderef"];
var document = search.findNode(nodeRef);

var persons = [];
var perms = document.getPermissions();
for(var i=0 ; i<perms.length ; i++) {
   var perm = perms[i].split(";");
   if(perm[0] == "ALLOWED" && perm[1].lastIndexOf("GROUP_") != -1) {
      var group = people.getGroup(perm[1]);
      if(group) {
         var persons = people.getMembers(group);
         for each (person in persons){
            if(person.properties.userName != "admin" && person.properties.userName != "guest") {
               var email = person.properties.email;
               if(email)
                  sendMail(email);
            }
         }
      }
   }
}

function sendMail(email) {
   // Envoi mail
   var mail = actions.create("mail");
   mail.parameters.to = email;
   mail.parameters.subject = "Document Mis a Jour";
   mail.parameters.from = "Info@Alfresco";
   mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/diffusion_document.ftl");
   mail.parameters.text = "Nouveau document";
   mail.execute(document);
}

fred_pack
Champ in-the-making
Champ in-the-making
Bonjour,

Et encore une fois un grand Merci à vous Smiley Very Happy

J'ai modifié le script pour rajouter l'accolade manquante, et grâce au lien fourni, j'ai pu rajouter le code du retour à la page d'origine du document une fois le script terminé.

Cordialement

Fred.

tomen
Champ in-the-making
Champ in-the-making
Bonjour,

je souhaiterais rajouter un script dans la liste des scripts disponibles lorsque que l'on fait "Lancer une action".

Est-ce qu'il me suffit de le rajouter dans "Dictionnaire de données" où est-ce qu'il y quelque chose d'autre à faire ?

Le script ne sera effectué qu'une fois de temps en temps et n'a rien d'automatique. A la limite, si seul l'admin peut l’exécuter, ça m'arrange.

Si vous avez des des liens qui expliquent un peu tout ça, je suis preneur !

Merci Smiley Happy

Ps : je suis allé sur le lien donné un peu plus haut, s'il y avait la réponse à ma question … je n'ai rien compris :$

tomen
Champ in-the-making
Champ in-the-making
En fait c'était tout simple :
Dictionnaire de données / script
puis ajouter son script js.
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.