Das CRM bietet die Möglichkeit, E-Mail Templates zu erstellen. Basierend auf diesen Templates können dann neue E-Mails erstellt werden. Das Funktioniert natürlich auch über die API.
Als erstes der Code um eine E-Mail Template bei gegebenem Namen zu holen. Nebst dem Namen wird auch noch der TypeCode berücksichtigt. Der TypeCode ist nichts anderes als der Schemaname der Entität, für die das Template erstellt wurde.
private Guid GetTemplateIdByName(string templateName, string templateTypeCode) { var query = new QueryByAttribute("template"); query.AddAttributeValue("title", templateName); query.AddAttributeValue("templatetypecode", templateTypeCode); return organizationService.RetrieveMultiple(query).Entities.Single().Id; }
In einem zweiten Schritt wird vom Template, mit Hilfe des “InstantiateTemplateRequest”, eine neue E-Mail erstellt. Das heisst, es wird ein neuer Record vom der Entity “E-Mail” im Response zurückgegeben. Dieser Record wurde jedoch im CRM erstellt. Der InstantiateTemplateRequest erwartet die folgenden Properties:
- ObjectI: Die Id des Records für den die E-Mail erstellt werden soll
- ObjectType: Der Name des Records für den die E-Mail erstellt werden soll
- TemplateId: Die Id des Templates welches verwendet werden soll
private Email CreateEmailFromTemplate(Entity regardingEntity, string templateName) { var templateId = GetTemplateIdByName(templateName, "contact"); var request = new InstantiateTemplateRequest { ObjectId = regardingEntity.Id, ObjectType = regardingEntity.LogicalName, TemplateId = templateId }; var repsonse = (InstantiateTemplateResponse)organizationService.Execute(request); return repsonse.EntityCollection.Entities.Single().ToEntity<Email>(); }
Schlussendlich kann die, vom Template generierte, E-Mail bearbeitet (z.B. Hinzufügen Empfänger) und mit einem “CreateRequest” erstellt werden. Wie ich dieser E-Mail dann ein Attachment hinzufügen und sie schlussendlich versenden kann, zeige ich in meinem Post von nächster Woche.
var email = CreateEmailFromTemplate(myCase, "myTemplate") email.Id = organizationService.Create(email);