Date de création : | 23 septembre 2004 | |
Dernière modification : | ||
Diffusion : | internet |
Notre canal d'exemple affiche un menu proposant d'accéder à un formulaire d'envoi de mail, avec des options différentes. Ce qui nous proposons ici est bien sûr qu'un exemple d'utilisation.
Il faut déclarer une variable qui précise si le canal servant est en cours d'exécution ou pas.
private boolean servantAvailable = false;
Il faut également répertorié le canal servant dans une variable lorsqu'il est actif de façon à accéder à ses méthodes.
private IServant servant;
Il faut instancier le canal quand vous en avez besoin. Le plus simple est de tester un paramètre dans la méthode setRuntimeData. Dans notre si le paramètre "action" est valué à "mailto". Alors le canal "maître" sait qu'il va passer la main au servant.
if ( (!servantAvailable) && (rd.getParameter("action")!=null) && (rd.getParameter("action").equals("mailTo")) ){ servantAvailable = true; }
Une fois que le servant est noté comme "actif", créons une nouvelle instance du canal servant.
if (servantAvailable){ try { Class servantClass = Class.forName("org.esupportail.portal.channels.CMailTo.CMailToServant"); // Instanciation du servant Object servantObj = servantClass.newInstance(); servant = (IServant)servantObj; } catch (ClassNotFoundException e) { LogService.log(LogService.ERROR,"CTestMailtoNormal::setRuntimeData:ClassNotFoundException : "+e.getMessage()); } catch (InstantiationException e) { LogService.log(LogService.ERROR,"CTestMailtoNormal::setRuntimeData:InstantiationException : "+e.getMessage()); } catch (IllegalAccessException e) { LogService.log(LogService.ERROR,"CTestMailtoNormal::setRuntimeData:IllegalAccessException : "+e.getMessage()); } catch (Exception e) { LogService.log(LogService.ERROR,"CTestMailtoNormal::setRuntimeData:Exception : "+e.getMessage()); }
Dès lors, le servant est créé. Il reste maintenant à lui envoyer tous les paramètres du canal maître au canal servant.
//Passage des paramètres servant.setStaticData(staticData); servant.setRuntimeData(runtimeData);
Il faut tester aussi que le canal servant a fini de s'éxecuter. Pour cela, testez le code retour de la méthode "isFinished" du servant.
if (servant.isFinished()) { servantAvailable=false; } }
Maintenant que le servant est bien démarré, vous devez lui donner la main pour l'affichage.
Pour cela, renommez la méthode "renderXML" de votre canal en "myRenderXML".
private void myRenderXML(ContentHandler out) throws PortalException {
Puis recréez la méthode "renderXML", qui va afficher soit le rendu du canal maître soit le rendu du canal servant.
public void renderXML(ContentHandler out) throws PortalException { if (servantAvailable){ servant.renderXML(out); } else{ myRenderXML(out); } }
Il est possible de modifier le formulaire d'envoi de mail en positionnant certains
paramètres. Dans notre exemple, le menu propose différents cas
d'utilisation. En plus de valuer la variable "action" à "mailTo",
nous spécifions quel cas d'utilisation nous exécutons.
Juste avant d'envoyer les "runtimeData" au canal servant, créez
les attributs du mail que vous voulez préremplir et stockez les dans
les "runtimeData".
Un attribut du mail peut avoir 3 caractéristiques :
1 => sa valeur
2 => si l'utilisateur peut modifier cette valeur
3 => si l'utilisateur peut voir cette valeur
Un attribut est donc un tableau de 3 chaînes de caractères.
String[] att = new String[3]; //destinataire att[0] = "sgaudin@univ-nancy2.fr"; att[1] = "false"; att[2] = "true"; runtimeData.setParameterValues(Mail.TO,att); //cc att = new String[3]; att[0] = ""; att[1] = "false"; att[2] = "false"; runtimeData.setParameterValues(Mail.CC,att); //bcc att = new String[3]; att[0] = ""; att[1] = "false"; att[2] = "false"; runtimeData.setParameterValues(Mail.BCC,att); //sujet att = new String[3]; att[0] = "Test de mail"; runtimeData.setParameterValues(Mail.SUBJECT,att); //sujet att = new String[3]; att[0] = "Message à modifier"; runtimeData.setParameterValues(Mail.CONTENT,att);
Vous devez mettre un hyperlien dans votre feuille de style (.xsl) pour acceder à l'action d'envoie de mail.
Par exemple dans le menu, un lien va pointer sur l'action "mailTo" qui correspond ici à l'instanciation du canal servant sans paramètre.
<li><a href="{$baseActionURL}?action=mailTo">Formulaire standard</a></li><br/>
Au niveau de la method setRuntimeData, il est possible de tester si on a cliqué sur le lien "sendMail". Si c'est le cas, alors on on peut créer un Mail et lui passer les paramètres que l'on veut.
if ( (!servantAvailable) && (rd.getParameter("action")!=null) && (rd.getParameter("action").equals("sendMail")) ){ Mail myMail = new Mail(); myMail.setFrom(staticData.getPerson().getAttribute("mail").toString()); myMail.setTo("sgaudin@univ-nancy2.fr"); myMail.setSubject("Test de mail"); myMail.setContent("message envoyé automatiquement");Maintenant il faut envoyer le mail.
try { myMail.send(); } catch (MalFormedMailException e) { rd.setParameter("errorSendMail","true"); log.error("CTestMailToNormal::setRuntimeData : ",e); } }
Vous remarquerez que dans le cas de l'envoi automatique le servant n'est pas executé. Comme il n'est pas necessaire d'afficher l'interface d'envoi, il est possible d'utiliser directement la methode send de l'objet Mail.
Création : 23 septembre 2004 - Sébastien GAUDIN (N2) | |
Modifications : |