TxmlHtmlDocument (tech)
Introduction
Les objets TxmlHtmlDocument sont des descendants de TxmlDocument permettant de construire des documents xml html.
TxmlHtmlMailDocument est un descendants de TxmlHtmlDocument permettant de construire un document html compatible avec les lecteurs de messagerie.
| Tip : Dans un mail destiné à une messagerie il n'est pas possible d'utiliser certaines fonctionnalités, en particulier il n'est pas possible d'inclure du script |
Propriétés
| Propriété | Usage |
|---|
Opérations
| Méthode | Usage |
|---|
Exemple:
//function Execute(var aReason:string):boolean;
Type
VueValideur = viewOf(TPieceTaxable)
vp1: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier,EtatMetier);
vp2: TValideurPossible = join(ValidationEtat.RegleValidation,RegleValidation);
gcv: TGroupeContactValidation = leftjoin(TGroupeValidation,vp2.ContactEtablissement);
aId1:TOID = vp1.oid;
aId2:TOID = vp2.oid;
aIdVP:TOID = vp2.oidValideurPrecedent;
aIdDV:TOID = oiddernierValideur;
aIdCV:TOID = vp2.oidContactEtablissement;
aIdCE:TOID = ISNULL(gcv.oidTContactEtablissement,vp2.oidContactEtablissement);
// personne
Mail:string = ISNULL(gcv.TContactEtablissement+eMail,vp2.ContactEtablissement.eMail);
FirstName:string = ISNULL(gcv.TContactEtablissement+prenom,vp2.ContactEtablissement.prenom);
LastName:string = ISNULL(gcv.TContactEtablissement+nom,vp2.ContactEtablissement.nom);
Civility:string = ISNULL(gcv.TContactEtablissement+Civilite+Caption,vp2.ContactEtablissement+Civilite+Caption);
// pièce
estVomplet:boolean = estComplet;
noPiece:string = noPiece;
datePiece:Tdatetime = datePiece;
totalHT: Tmoney = totalHT;
typePieceCode:string = TypePieceGC.code;
typePieceLibelle:string = TypePieceGC+Caption;
tiersFactureCode:string = RoleTiersFacture.Tiers.code;
tiersFactureLibelle:string = RoleTiersFacture.Tiers.Caption;
affaireCode:string = Affaire+code;
affaireLibelle:string = Affaire+Caption;
//
[ (estComplet=True) and (aId1=aId2) and (aIdDV<>aIdCV) and ((aIdVP='') or (aIdVP=aIdDV)) ]
end;
function _SendEmail(eMail,Subject:string; doc:TxmlHtmlMailDocument):boolean;
begin
Result := True;
if (eMail<>'') and (doc<>nil) then
begin
Result := MailTo(eMail,Subject,doc.htmlContent);
end;
end;
function _Subject(inst:VueValideur):string;
begin
Result := _TP('(No reply) (Sage FRP 1000) Commande(s) en attente de validation')
end;
procedure _BodyHeader(doc:TxmlHtmlMailDocument; inst:VueValideur);
begin
end;
procedure _Body(table:ThtmlTable; inst:VueValideur);
begin
table.AddRow([
inst.TranslateMsg(_TP('La pièce @noPiece@ en date du @datePiece@ d''un montant de @totalHT@ doit être validée'))
]);
end;
var ls:TSelector; eMail,Subject:string; doc:TxmlhtmlMailDocument; table:ThmlTable; inst:VueValideur;
begin
aReason := '';
Result := True;
//
ls := VueValideur.CreateSelector('','Mail,typePieceCode,datePiece',true,[]);
eMail := ''; Subject := ''; doc := nil;
foreach inst in ls.AsCursor do
begin
if inst.Mail<>eMail then
begin
if not _sendEMail(email,Subject,doc) then
begin
// do not continue if send mail failed
Result := False;
aReason := _TP('Echec d''envoi de mail, vérifiez le paramétrage du service de messagerie');
Exit;
end;
//
doc := TxmlHtmlMailDocument.Create(nil);
doc.htmlbody.AddHeader(inst.TranslateMsg(_TP('A l''attention de @Civility@ @FirstName@ @LastName@')),'section');
doc.htmlbody.AddHeader(_TP('A ce jour les pièces suivantes sont en attente de validation de votre part :'),'subsection');
//
table := doc.htmlbody.AddTable([
_TP('Type de pièce'),
_TP('Tiers'),
_TP('Affaire'),
_TP('Pièce'),
_TP('Date de pièce'),
_TP('Montant')
]);
eMail := inst.Mail;
Subject := _Subject(inst);
end;
//
if Assigned(Table) then
begin
table.AddRow([
inst.typePieceLibelle,
inst.tiersFactureLibelle,
inst.affaireLibelle,
Format('%s#%s',[inst.noPiece,TFacadeModel.GetLinkUrlOfObject(inst.oid)]),
inst.TranslateMsg('@datePiece@'),
inst.TranslateMsg('@totalHT@')
]);
end;
end;
//
Result := _SendEmail(eMail,Subject,doc);
end;
Voir aussi :
— Code métier — Développement DSM —