Alors voilà.
J'ai une Sub qui écrit un important volume de texte en utilisant des Response.Write
Il s'avère que j'ai besoin d'envoyer par mail ce texte.
Seul problème, cette Sub est appelée un peu partout dans le code, donc la modifié est assez risqué car je risque fortement d'oublier de modifier un appel quelquepart, et comme on n'est qu'à quelques jours de la mise en production du site, c'est pas vraiment terrible de courrir le risque de tout planter.
Du coup, je me demande si je ne pourrais pas modifier à la volée l'objet Response pour qu'au lieu d'afficher le texte passé en paramètre, il me le garde dans un coin pour que je puisse le réutiliser.
Au départ, je me suis dit que ce devait être un objet de type "TextStream" légèrement surchargé.
J'ai donc tenté de créer un objet de type "TextStream", et remplacer Response par ce dernier :
Set Response = monObj
Seulement ça plante. "L'objet Response ne supporte pas cette méthode". A priori, on ne peut pas le détruire pour affecter un autre objet à la place.
Du coup, je suis un peu ennuyé.
Dans l'autre sens, ça fonctionne par contre :
Set monObj = Response
monObj.Write "Test !"
=> Ca affiche bien "Test !" à l'écran.
Du coup il me reste la solution de modifier la sub en utilisant un objet "monObj" à la place de Response, et créer cet objet avant chaque appel, sauf pour mon appel particulier qui nécessite la récupération du texte, où je passerais un TextStream à la place. Seulement je me retrouve face au premier problème : Risque d'oubli de modification lors d'un appel.
Est-ce que vous auriez une solution miracle ?
Je me suis dit que faire un "flush()" puis un "buffer = true" avant l'appel me permettrait de n'avoir à la sortie de la fonction que le résultat de la sub dans le buffer du response.
Seulement deux choses : Je ne peux pas contrôler à quel moment l'objet va faire un flush automatique, qui risque d'arriver au milieu de la sub, et de toute façon on ne peux pas lire ce qui est dans le buffer du Response...
Bref, c'est la merde.
J'aimerai autant se faire se peu de réécrire la fonction, car elle est très loin de se contenter de faire de l'affichage, elle contient aussi tout le process de recalcul du panier (recherche des prix, vérification des stocks, etc.) sur un site marchand. Et c'est des points qui changent régulièrement, car on est greffé un à ERP et on calque nos process sur ce dernier... qui à la bougeaote. Et par expérience, du code dupliqué, c'est le meilleur moyen pour que le client voit 1000 dans son panier, paie pour 1500 avec sa CB et se retrouve avec un mail de confirmation pour un achat de 100 ... Trop risqué pour que cette solution soit vraiment envisageable sans avoir tout essayé avant...