TxmlHtmlDocument (tech)

De Wiki1000
Révision datée du 5 juillet 2023 à 12:43 par Syfre (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

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
htmlHead Entête du document html (head)
htmlBody Corps du document html (body)
htmlContent Contenu généré du document html

Opérations

Méthode Usage

Exemple:

<source lang='delphi'> //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@ dun 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 denvoi de mail, vérifiez le paramétrage du service de messagerie'); 
          Exit; 
        end; 
       // 
       doc := TxmlHtmlMailDocument.Create(nil);
       doc.htmlbody.AddHeader(inst.TranslateMsg(_TP('A lattention 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; </source>

Voir aussi :

{{#if:Code métier|

{{#if:Code métier|— Code métier |}} — Développement DSM

|

{{#if:|— [[{{{1}}}]] |}} — Développement DSM

}}