Email emailTemplate = new Email();
ActivityParty fromAdd = new ActivityParty();
fromAdd.PartyId = new EntityReference();
fromAdd.PartyId.Id = this.Requestor.Get<EntityReference>(executionContext).Id;
fromAdd.PartyId.LogicalName = Contact.EntityLogicalName.ToString();
emailTemplate.From = new ActivityParty[] { fromAdd };
ActivityParty toAdd = new ActivityParty();
toAdd.PartyId = new EntityReference();
toAdd.PartyId.Id = queueID;
toAdd.PartyId.LogicalName = "queue";
emailTemplate.To = new ActivityParty[] { toAdd };
string emailsubject = this.Subject.Get<string>(executionContext).ToString();
emailTemplate.Subject = emailsubject;
emailTemplate.Description = this.FullMessage.Get<string>(executionContext).ToString();
EntityReference Regarding = new EntityReference();
Regarding.Id = regardingCaseID;
Regarding.LogicalName = "incident";
emailTemplate.RegardingObjectId = Regarding;
emailTemplate.IsWorkflowCreated = true;
if (queueID != null && queueID != Guid.Empty)
{
QueryExpression queryQu = new QueryExpression
{
EntityName = Queue.EntityLogicalName,
ColumnSet = new ColumnSet("ownerid"),
};
queryQu.Criteria.AddCondition("queueid", ConditionOperator.Equal, queueID.ToString());
EntityCollection retrievedQu = _service.RetrieveMultiple(queryQu);
if (retrievedQu.Entities.Count > 0)
{
EntityReference queueOwner = (EntityReference)retrievedQu.Entities[0].Attributes["ownerid"];
emailTemplate.OwnerId = new EntityReference("team", queueOwner.Id);
}
}
Guid emailId = SendEmail(emailTemplate, _service, context, emailTemplate.Subject);
Entity incidentEnity = new Entity();
incidentEnity.Id = regardingCaseID;
incidentEnity.LogicalName = "incident";
incidentEnity.Attributes.Add("emailid", emailId.ToString());
incidentEnity.Attributes.Add("email", new OptionSetValue(2));
_service.Update(incidentEnity);
}
public static void AddAttachmentsToEmail(IOrganizationService _service, Guid activityId, Guid emailId, string emailSubject)
{
QueryExpression notesQuery = new QueryExpression
{
EntityName = "annotation",
ColumnSet = new ColumnSet("filename", "documentbody", "mimetype", "objectid", "annotationid"),
Criteria = new FilterExpression()
};
notesQuery.Criteria.AddCondition("objectid", ConditionOperator.Equal, activityId);
EntityCollection noteCol = _service.RetrieveMultiple(notesQuery);
if (noteCol.Entities.Count > 0)
{
for (int i = 0; i < noteCol.Entities.Count; i++)
{
string attachmentSubject = emailSubject;
// Create note in case
Entity setupAttachment = new Entity();
setupAttachment.LogicalName = "activitymimeattachment";
setupAttachment["subject"] = attachmentSubject;
setupAttachment["filename"] = (string)noteCol.Entities[i].Attributes["filename"];
setupAttachment["body"] = (string)noteCol.Entities[i].Attributes["documentbody"];
setupAttachment["mimetype"] = (string)noteCol.Entities[i].Attributes["mimetype"];
setupAttachment["objectid"] = new EntityReference("email", emailId);
setupAttachment["objecttypecode"] = "email";
_service.Create(setupAttachment);
}
}
}
private Guid SendEmail(Email emailObj, IOrganizationService _service, IWorkflowContext context, string emailSubject)
{
Guid emailId = _service.Create(emailObj);
//statecode is 1
SetStateRequest req = new SetStateRequest();
req.EntityMoniker = new EntityReference("email", emailId);
req.State = new OptionSetValue(1);
req.Status = new OptionSetValue(4);
SetStateResponse resp = (SetStateResponse)_service.Execute(req);
return emailId;
}