[javascript et share] Envoyer un mail depuis ftl

cancel
Showing results for 
Search instead for 
Did you mean: 
seksam
Active Member

[javascript et share] Envoyer un mail depuis ftl

Bonjour,
Cela fais un petit moment que je cherche alors je me permets de vous soumettre mon problème.
J'ai créé une page que j'ai pu ajouter sur le Dashboard (comme la page blog ou wiki) en me basant sur le help d'alfresco.
Je voudrais que lorsque je clique sur cette page qu'un mail puisse être envoyer automatiquement à un destinataire bien définit.
Sur Alfresco Explorer j'avais déjà écrit un script d’envoi de mail que j'utilisais avec une règle de contenu.   j'ai essayer d'adapter le script sur share.
Voici le script:
    
   var email = person.properties.email;
var name=person.properties.firstName;
   if(email){
         // create mail action
      var mail = actions.create("mail");
      mail.parameters.to = "toto@titi.fr";
      mail.parameters.subject = "Demande d'assistance";
      mail.parameters.from = email;
      mail.parameters.template = companyhome.childByNamePath("Dictionnaire de données/Modèles d'e-mail/Modèles d'e-mail de notification/notify_user_email_french.ftl");
      mail.parameters.text = " Bonjour,\n     Monsieur/madame '"+name+"'  demande de l'assistance.\n Cordialement'";
      // execute l'action
      mail.execute(document);
}
  
(pour précision, le script est appelé dans le fichier ftl car je me dis que en cliquant sur le lien, l'appel du fichier ).
           Cependant, j'ai pu constater que sur Share les variables document et person ne sont pas définies. Je penses aussi qu'appeler le script ne suffit pas à l'exécuter  :?:  :!:  Avez vous une idée sur la façon de procéder?. Est ce la bonne façon de procéder? Existe t-il un autre moyen?
je viens  de lire l'API javascript et je n'ai pas trouvé aucune  alternative.

                     A défaut, je voulais me  contenter d'ouvrir un formulaire en cliquant sur l'onglet du dashboard et ensuite remplir un formulaire et les contenus du formulaire seront envoyer par mail. Mais même à ce niveau, je ne sais pas comment récupérer le contenu du formulaire et tout envoyer par mail.

                     En substance, je reviens toujours au même problème d’envoi de mail  et de récupération de données depuis un site share.
Dans l'espoir d'avoir été claire. Merci d'avance.
5 Replies
rguinot
Customer

Re: [javascript et share] Envoyer un mail depuis ftl

Les web scripts que vous developper pour Explorer font appel directement aux APIs Java.
Les web scripts que vous développez pour Share appellent ceux du repository via les connecteurs Surf.
Ce n'est donc pas la même AP, comme vous l'avez remarqué.

Vous pouvez rechercher dans le code de share les appels réalisés pour l'envoi de mail (utilisés dans les règles, notifications, …)
seksam
Active Member

Re: [javascript et share] Envoyer un mail depuis ftl

Merci  monsieur Guignot pour votre réponse.

Pour comprendre l'idée de repository (Vous en avez parlé dans votre réponse), j'ai effectué  une recherche  et j'ai cru comprendre qu'il faut utiliser la fonction remote  dans le fichier js et de  faire appel au bon script sur Alfresco, car le script  doit se situer du côté d'Alfresco.  Pour mieux comprendre  l'utilisation de la fonction et l'appel faite avec remote (l'exemple du wiki n'est pas trop parlant), je  suis entrain de parcourir le répertoire org/alfresco/components de share et les autres pour trouver, comme vous me l'avez demandé, comment est effectuée la mise en place des règles et de notification.

Je vous tiens au courant de mes trouvailles.

Encore une fois merci pour cette piste.
Cordialement.
seksam
Active Member

Re: [javascript et share] Envoyer un mail depuis ftl

Bonjour,

J'ai suivi la piste de rguignot et grâce à certains topic du forum et au wiki, j'ai pu créé un webscript et une fonction dans share qui utilise  remote.call.
J'ai créé sur /org/sample d'Alfresco Explorer    et dans Share les fichiers ci dessous. Cependant malgré le status.code qui vaut 200 et qui d'après le lien http://wiki.alfresco.com/wiki/Alfresco_REST_Design_Guidelines signifie  que la commande s'est bien exécutée , je ne reçois aucun message.
Sachant qu'il n' y a aucune erreur, je ne sais pas vraiment où chercher.  Alors je me permets de le mettre sur le forum au cas où une personne pourrais avoir une idée. Aurais je oublier quelque chose dans ma réalisation? Aurais mal écrit un fichier?

Merci d'avance.
Cordialement.

MailAssistance.desc.xml

<webscript>
<shortname>Mail Assistance</shortname>
<description>Webscript qui envoie un mail de demande d'assistance</description>
<url>/MailAssistance</url>
<format default="json">argument</format>
<authentication>user</authentication>
</webscript>

MailAssistance.get.js

try {
  model.users = [];
  model.failures = [];

  var nodeRef = args["noderef"];
  var document = search.findNode(nodeRef);
          if(person){
                 var email = person.properties.email;
                 if (email) {
                  sendMail(p, document);
                 }
             else{
             status.code=400;
             status.message="Nous n'avons pas pu trouver votre adresse email. Veuillez modifier votre profil et recommencer"
             }
              }
           else{
           status.code=400;
           status.message="Impossible de retrouver les informations sur la personne connectée";
           }
           }
catch (e) {}

function sendMail(p, doc) {
  try {
    // Envoi mail
    var mail = actions.create("mail");
    mail.parameters.subject = "Demande d'assistance";
    mail.parameters.to = "xxxx@xxx.xxx;
    mail.parameters.from = p.properties.email;
    mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/Notify Email Templates/notify_user_email.ftl");
    mail.parameters.text = "Demande d'assistance ";
    mail.execute(doc);

    model.users.push(p.properties.userName);
  }
  catch(e) {
    model.failures.push(p.properties.userName);
  }
}


MailAssistance.get.json.ftl
 
{
code : "${status.code}",
Message: "${status.message}"
}

C'est la première fois que je fais du json, je ne sais donc pas comment cela fonctionne, Veuillez donc excuser cette fonction médiocre. Le problème  est que dans MailAssistance.get.html.ftl je ne peux pas faire un if sur status.code (en javascript) car le status.code a pour valeur  undefined . Mais c'est pas le plus important.



J'ai aussi créé les fichiers (mais je ne juge pas utile de donner le detail)
MailAssistance.get.html.ftl
MailAssistance.get.config.xml
MailAssistance.get.html.400.ftl
MailAssistance.get.atom.400.ft


Au niveau de share
dans un fichier xxx.get.js
j'ai le code:
 
try{
module.result=remote.call("/MailAssistance");
}
catch(e){
}

je choisi de passer par module.result afin d'afficher le contenu dans mon fichier xxx.get.html.ftl sur share.
seksam
Active Member

Re: [javascript et share] Envoyer un mail depuis ftl

Bonjour,  Smiley Happy

Je me suis rendu compte que l'erreur présenté ci-dessus  était dû à un problème de node lors de l'appel.  J'ai donc modifier le code javascript de cette façon:

 var node= page.url.args.nodeRef;
model.result = remote.call("/MailAssistance?nodeRef=" + stringUtils.urlEncode(node));

Mais cela ne fonctionne toujours pas, j'ai l'erreur suivante:   :cry:
 
Error Code Information: 500 - An error inside the HTTP server which prevented it from fulfilling the request.
Error Message: 08070001 Failed to execute script 'classpath*:alfresco/site-webscripts/org/alfresco/components/assistance/assistance.get.js': 08070000
Server: Alfresco Spring WebScripts - v1.0.0 (Release Candidate 2 744) schema 1 000
Time: 7 sept. 2011 10:56:34
Click here to view full technical information on the error.
Exception: org.springframework.extensions.webscripts.WebScriptException - 08070000
org.springframework.extensions.webscripts.processor.JSScriptProcessor.executeScriptImpl(JSScriptProcessor.java:324)
Exception: org.springframework.extensions.webscripts.WebScriptException - 08070001 Failed to execute script 'classpath*:alfresco/site-webscripts/org/alfresco/components/assistance/assistance.get.js': 08070000
org.springframework.extensions.webscripts.processor.JSScriptProcessor.executeScript(JSScriptProcessor.java:200)

Alors j'ai essayé avec
 model.result=remote.call("/MailAssistance?noderef=workspace://SpacesStore/eb53100e-7f47-42d6-881e-e16b6d99af63&itemId=cm:content");
et cela fonctionne.
Je pense donc que c'est un problème  au niveau de  ma recherche de noeud . Cependant, je n'ai pas envie de mettre la valeur du nodeRef en dur, cela pourrait me poser problème à long terme. Je voulais donc savoir si quelqu'un connait une autre fonction qui me permet de recupérer le noderef sous  la forme workspace://SpacesStore/eb53100e-7f47-42d6-881e-e16b6d99af63&itemId=cm:content
Merci d'avance.  Smiley Happy
seksam
Active Member

Re: [javascript et share] Envoyer un mail depuis ftl

Bonjour,
Finalement, je pense qu'il n'est pas nécessaire de récupérer un noderef. En parcourant mon compte, je me suis rendu compte que la contrainte du noderef intervient juste pour pouvoir faire mail.execute(node).    Je me suis aussi rendu compte, que je n'ai pas de noderef en faisant page.url.args.noderef. Cela est peut-être du au fait que je veux que  lorsque je clique sur un onglet de mon menu que le mail soit envoyé  et qu'un nom du type http://adresseip/share/page/site/url_site/url_site_page ne possède pas de noderef. 
Alors pour remedier au problème, je me contente d'executer mail.execute sur companyhome.
Je ne sais pas si c'est la bonne soulution mais c'est la seule que j'ai à ce jour.
cordialement.