[stringtemplate-interest] Merge email using StringTemplate.NET through multiple passes
parrt at cs.usfca.edu
Fri Nov 21 10:46:28 PST 2008
Hi, when you call toString() you are destroying all possible attribute
information and getting a string. why are you evaluating twice? just
set the attributes that you want and then do a single toString.
On Nov 15, 2008, at 4:18 PM, Tam Ly wrote:
> I am new to StringTemplate.NET and appreciate your help. I am trying
> to use StringTemplate.NET (antlr.runtime.dll 184.108.40.206 &
> StringTemplate.dll 220.127.116.1133) to generate html emails to be sent
> from my web site. I am using a database to store my content as
> ResourceName ResourceValue
> ----------------- ----------------------------------
> EmailHeader <center>If you have trouble viewing this
> email, <a href='https://www.chaseidprotect.com/displayEmail.aspx?mid=$MemberId$&eid=$EmailDocumentId$'
> >click here</a></center><br />
> <img src='https://www.chaseidprotect.com/images/companylogo.jpg'
> alt='Chase' />
> EmailWelcome $EmailHeader$<br />
> Dear $FirstName$ $LastName$,
> Hello world! This is a test of StringTemplate!
> There is another table that tells me that EmailWelcome resource uses
> EmailHeader resource. For performance reasons, I want to cache my
> resource so I have to merge data in 2 passes:
> 1st pass: Merge the value of EmailHeader to EmailWelcome
> 2nd pass: Merge my member and email template data to EmailWelcome
> Here's the sample code:
> private void button2_Click(object sender, EventArgs e)
> string emailHeader = "<center>If you have trouble viewing
> this email, <a href='https://www.chaseidprotect.com/displayEmail.aspx?mid=$MemberId$&eid=$EmailDocumentId$'
> >click here</a></center><br /><img src='https://www.chaseidprotect.com/images/companylogo.jpg/companylogo.jpg'
> alt='Chase' />";
> string emailWelcome = "$EmailHeader$<br />Dear $FirstName$
> $LastName$, <br />Hello world! This is a test of StringTemplate!";
> // 1st pass, merge resource only because we do not have
> member or email template data yet
> StringTemplate emailContent = new
> StringTemplate(emailWelcome, typeof(DefaultTemplateLexer));
> emailContent.SetAttribute("EmailHeader", emailHeader);
> // 2nd pass, merge member and email template data when an
> email is queued
> StringTemplate emailMerged = new
> StringTemplate(emailContent.ToString(), typeof(DefaultTemplateLexer));
> emailMerged.SetAttribute("MemberId", 241);
> emailMerged.SetAttribute("EmailDocumentId", 1);
> emailMerged.SetAttribute("FirstName", "Tam");
> emailMerged.SetAttribute("LastName", "Ly");
> Because I do not have my member's and email template data: MemberId,
> FirstName, LastName and EmailDocumentId at the 1st pass, I have to
> merge my member and email template data at the 2nd pass.
> Unfortunately, my member's attributes: $FirstName$ and $LastName no
> longer exist in the EmailWelcome after my 1st pass of merging.
> It looks like StringTemplate evaluates the attribute to emptry
> string if I don't pass in the value the first time. Is there a way
> to tell StringTemplate to pass through an attribute if a value is not
> passed in instead of evaluating to empty string?
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
More information about the stringtemplate-interest