Send Birthday Email Custom Workflow MS CRM

 using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


using System.Activities;

using Microsoft.Xrm.Sdk;

using Microsoft.Xrm.Sdk.Messages;

using Microsoft.Xrm.Sdk.Workflow;

using Microsoft.Xrm.Sdk.Query;

using Microsoft.Crm.Sdk.Messages;


namespace Birthday

{

    public class Birthday : CodeActivity

    {

        protected override void Execute(CodeActivityContext context)

        {

            //Tracing service

            ITracingService tracing = context.GetExtension<ITracingService>();


            //workfow context

            IWorkflowContext WorkflowContext = context.GetExtension<IWorkflowContext>();

            IOrganizationServiceFactory serviceFactory = context.GetExtension<IOrganizationServiceFactory>();

            IOrganizationService service = serviceFactory.CreateOrganizationService(WorkflowContext.UserId);


            tracing.Trace("Birthday Workflow started");


            //Query to get todays birthday contacts

            QueryExpression birthdayContactsQuery = new QueryExpression

            {

                EntityName = "contact",

                ColumnSet = new ColumnSet("contactid", "firstname"),

                Criteria = new FilterExpression

                {

                    Conditions = 

                        {

                            new ConditionExpression 

                            {

                                AttributeName = "birthdate",

                                Operator = ConditionOperator.Equal,

                                Values = { DateTime.Today }

                            }

                        }

                }

            };


            DataCollection<Entity> birthdayContacts = service.RetrieveMultiple(birthdayContactsQuery).Entities;


            foreach (Entity contact in birthdayContacts)

            {

                //Create email

                Entity email = new Entity("email");


                Entity Fromparty = new Entity("activityparty");

                Fromparty.Attributes.Add("partyid", new EntityReference("systemuser", WorkflowContext.UserId));

                Entity Toparty = new Entity("activityparty");

                Toparty.Attributes.Add("partyid", new EntityReference("contact", contact.Id));


                email["from"] = new Entity[] { Fromparty };

                email["to"] = new Entity[] { Toparty };

                email["directioncode"] = true;

                email["subject"] = "Wish you very Happy Birthday";


                // Create the request

                SendEmailFromTemplateRequest emailUsingTemplateReq = new SendEmailFromTemplateRequest

                {

                    Target = email,

                    TemplateId = new Guid(TemplateID.Get(context).ToString()), //Guid("9CB6EC15-D3C2-E211-B090-00155D07ECE3"),

                    RegardingId = contact.Id,

                    RegardingType = contact.LogicalName

                };


                SendEmailFromTemplateResponse emailUsingTemplateResp = (SendEmailFromTemplateResponse)service.Execute(emailUsingTemplateReq);


                //Update next birthday

                contact["birthdate"] = DateTime.Today.AddYears(+1);

                service.Update(contact);

            }


            tracing.Trace("email send successfully");

        }


        //input parameters

        [Input("Template ID")]

        [RequiredArgument]

        public InArgument<string> TemplateID { get; set; }


        [Input("frequently")]

        [Default("1")]

        public InArgument<string> Frequently { get; set; }

    }

}

Comments

Popular posts from this blog

Power Automate - Update Child record when parent record is updated by using power automate in MS Dynamics CRM

set the active stage in Dynamics 365 when the option set value is "yes"