Script lancé par une action de menu sur document

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

Script lancé par une action de menu sur document

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
bertrandf
Active Member

Re: Script lancé par une action de menu sur document

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
Member II

Re: Script lancé par une action de menu sur document

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
Member II

Re: Script lancé par une action de menu sur document

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
Member II

Re: Script lancé par une action de menu sur document

En fait c'était tout simple :
Dictionnaire de données / script
puis ajouter son script js.