Jun 11, 2026

Email Template to populate dynamic values from any entity

 Email Templates of Dynamics 365/ Dataverse is very useful yet its one big limitation is it only can dynamically populate values of a one Entity type. Word Document templates don't have that limitation but it is actually for generation of a document not to use in Email content. Alternatively, Word Document Templates can be used to generate a document and attach to email which is widely done.

Today we will see how to programmatically enhance the usual Email Template to have any value. Below are the steps we do.

1) When creating Email Template, introduce special tags for dynamics values we plan to populate from other entities

2) Create email with Template in Draft status.

3) Replace special tags we introduce (Template will have many other dynamic fields as usual from specific Entity type it designed to fetch data from)

4) Send the Email

Please refer Programmatically create a draft Email using Email Template (C#) for steps 2 and 4.

Lets check how code would flow with the newly introduced method. Obviously values you need to populate should be query first to replace the tags.

// Step 2: Create Draft Email
// email object is defined here

// Step 3: Replace special tags
ReplaceEmailContent(email, "{{Coordinator}}", <Value need to populate>);
ReplaceEmailContent(email, "{{ContractId}}", <Value need to populate>);

// Step 4: Send Email

// Method to call
public Entity ReplaceEmailContent(Entity email, string tagName, string tagValue)
{
    var secondValue = email.Attributes.Values.ElementAt(1);
    if (secondValue is string strValue)
    {
        var replaced = strValue.Replace(tagName, tagValue);
        var key = email.Attributes.Keys.ElementAt(1);
        email.Attributes[key] = replaced;
    }
    return email;
}

Same way, if we need to add dynamics tags to Subject of the email, that's also possible. For that, use below method.

public Entity ReplaceEmailSubject(Entity email, string tagName, string tagValue)
{
    var secondValue = email.Attributes.Values.ElementAt(0);
    if (secondValue is string strValue)
    {
        var replaced = strValue.Replace(tagName, tagValue);
        var key = email.Attributes.Keys.ElementAt(0);
        email.Attributes[key] = replaced;
    }
    return email;
}

Best way to read Plugin trace log

All developers read Plugin trace log quite often when developing and investigating plugin issues. So if you add tracing in a meaningful manner it can pin point the erroneous point of the code. 

Anyway, one issue we face in this regards is its not easy to identify the exact trace log we are interested in. Suppose we analyze an issue in PROD environment where a lot of operations occur is same time. My personal opinion is its not even helpful with applying multiple filters to track the exact record.

In such situations, I find Plugin Trace Viewer (of Xrm Tool Box) helpful.


That's because, it allows you to apply many filters effectively by date, Plugin etc. which definitely help you fetch the exact trace you are searching for, evening with in lots of lots of traces. 


(Note: Please press Ctrl + F for text search of the trace log which is a most important feature)

I am very thankful to Jonas Rapp who is the author of the tool.

You too will like it!