Saturday, 16 November 2019

Email Templates

                  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;

            }        

No comments:

Post a Comment