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

Create Folder On Share Point by using Power Automate In Dynamics CRM

Duplicate Detection Plugin code for Microsoft dynamics CRM