Utilisation de sendWithAttach

4.0
Tags: #<Tag:0x00007fc9f783fce8>
Utilisation de sendWithAttach
0

#1

Bonjour,

lors du changement de statut d’une prestation CrbCrePresta, je souhaite envoyer un mail contenant les pièces jointes enregistrées dans l’objet lié CrbCrePrestaPjO.

j’essaye d’utiliser la fonction sendWithAttach mais je n’y arrive pas.

est-ce-que vous auriez un exemple d’utilisation de cette fonction ?


(François Genestin) #2

Si les docs sont dans l’objet il faut mettre des [ATTACH:docfield].
Si les docs ne sont pas dans l’objet, il faut coder un peu :

  1. utiliser Mail.sendWithAttach :

cette méthode très Java est assez bas niveau et non documentée hormis la javadoc, peu pratique dans un contexte Rhino (jamais testé) :

(new Mail(grant)).sendWithAttach(to, from, cc, bcc, subject, body, mime, files, attachs);

  • to, cc, bcc : tableau d’emails
  • mime = “text/html” si contenu HTML ou “text/plain” pour du texte simple
  • files : tableau de chemins absolus vers des docs
  • attachs : tableau de MailAttach (à utiliser si le document n’a pas de fichier physique new MailAttach(bytes, "application/pdf", "fichier.pdf"); )

Attention les tableaux sont des tableaux Java donc à instancier comme suit dans un script Rhino :
var to = ScriptInterpreter.getStringArray(2);
to[0] = "john@simplicite.fr";
to[1] = "bob@simplicite.fr";

A priori on ne peut pas instancier MailAttach en Rhino car c’est une inner class de Mail.

  1. Utiliser une Alerte

Il est préférable de créer une Alert dans Processus métier pour rendre configurable tout le message et les destinataires… et l’envoyer depuis la méthode “envoyerMail” à paramétrer au niveau de la transition d’état.

CrbCrePresta.envoyerMail = function() {
	var g = this.getGrant();
	var alert = this.getAlert("<alert name>", Alert.TYPE_INFO);
	if (alert) {
		var i, doc, list, att = new ArrayList();
		var a = g.getTmpObject("CrbCrePrestaPjO");
		a.resetFilters();
		a.setFieldFilter("<foreign key name>", this.getRowId());
		list = a.search();
		for (i=0; i<list.size(); i++) {
			a.setValues(list.get(i));
			doc = a.getField("<doc field name>").getDocumentFromDB(g);
			if (doc) {
				console.log("debug attach: "+doc.toString());
				att.add(doc);
			}
		}
		alert.send(this, att);
	}
}

A tester demain car la méthode Alert.send(ObjectDB, List<DocumentDB>) n’est pas encore publique en V4.


#3

j’ai essayé de faire une alerte mais je n’ai pas réussi.

mon mail contient des données issues de l’objet et de ses liens, le destinataire est lui aussi récupéré dans l’objet.

je vais essayer demain.