Wednesday, 15 March 2017

PLUGIN TO CREATE TASK WHEN NEW ACCOUNT CREATED AND ASSIGN THE TASK TO SYSTEM USER BASED ON EMAILADDRESS ON DYNAMICS 365

The below plugin is to assign the task to the account and then  based on the system user email address assign the task to user..

I have created this plugin using Developer tool kit on dynamic 365..


STEPS:
MESSAGE : Create
EVENT PIPELINE STAGE OF EXECUTIONS :Post Operation
EXECUTION MODE: synchronous
DEPLOYMENT : Server



 // <copyright file="PostOperationaccountCreate.cs" company="">
// Copyright (c) 2017 All Rights Reserved
// </copyright>
// <author></author>
// <date>3/14/2017 4:15:03 PM</date>
// <summary>Implements the PostOperationaccountCreate Plugin.</summary>
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.1
// </auto-generated>

using System;
using System.ServiceModel;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace SamplePlugin1
{

    /// <summary>
    /// PostOperationaccountCreate Plugin.
    /// </summary>    
    public class PostOperationaccountCreate : PluginBase
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PostOperationaccountCreate"/> class.
        /// </summary>
        /// <param name="unsecure">Contains public (unsecured) configuration information.</param>
        /// <param name="secure">Contains non-public (secured) configuration information. 
        /// When using Microsoft Dynamics 365 for Outlook with Offline Access, 
        /// the secure string is not passed to a plug-in that executes while the client is offline.</param>
        public PostOperationaccountCreate(string unsecure, string secure)
            : base(typeof(PostOperationaccountCreate))
        {

            // TODO: Implement your custom configuration handling.
        }


        /// <summary>
        /// Main entry point for he business logic that the plug-in is to execute.
        /// </summary>
        /// <param name="localContext">The <see cref="LocalPluginContext"/> which contains the
        /// <see cref="IPluginExecutionContext"/>,
        /// <see cref="IOrganizationService"/>
        /// and <see cref="ITracingService"/>
        /// </param>
        /// <remarks>
        /// For improved performance, Microsoft Dynamics 365 caches plug-in instances.
        /// The plug-in's Execute method should be written to be stateless as the constructor
        /// is not called for every invocation of the plug-in. Also, multiple system threads
        /// could execute the plug-in at the same time. All per invocation state information
        /// is stored in the context. This means that you should not use global variables in plug-ins.
        /// </remarks>
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new InvalidPluginExecutionException("localContext");
            }

            // Obtain the target entity from the input parameters.
            Entity entity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
            //</snippetFollowupPlugin2>

            // Verify that the target entity represents an account.
            // If not, this plug-in was not registered correctly.
            if (entity.LogicalName != "account")
                return;
            try
            {

                // Create a task activity to follow up with the account customer in 7 days. 
                Entity followup = new Entity("task");

                followup["subject"] = "Send e-mail to the new customer.";
                followup["description"] = "Follow up with the customer. Check if there are any new issues that need resolution.";
                followup["scheduledstart"] = DateTime.Now.AddDays(7);
                followup["scheduledend"] = DateTime.Now.AddDays(7);
                followup["category"] = entity.LogicalName;
                followup["regardingobjectid"] = new EntityReference("account", entity.Id);
                Guid taskid = localContext.OrganizationService.Create(followup);


                // Assign the task created to #malla (another user when new account is created.)



                String fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
                                      <entity name='systemuser'>
                                        <attribute name='fullname' />
                                        <attribute name='businessunitid' />
                                        <attribute name='title' />
                                        <attribute name='address1_telephone1' />
                                        <attribute name='positionid' />
                                        <attribute name='systemuserid' />
                                        <order attribute='fullname' descending='false' />
                                        <filter type='and'>
                                          <condition attribute='internalemailaddress' operator='eq' value='mallagurram@gmrltd.onmicrosoft.com' />
                                        </filter>
                                      </entity>
                                    </fetch>";
                //THis will convert in Query base 
                FetchExpression query = new FetchExpression(fetchXml);

               
                EntityCollection entcollection = localContext.OrganizationService.RetrieveMultiple(query);

                for (int i = 0; i < entcollection.Entities.Count; i++)
                {

                    AssignRequest assign = new AssignRequest
                    {
                        Assignee = new EntityReference("systemuser", entcollection.Entities[i].Id),
                        Target = new EntityReference("task", taskid)
                    };
                    localContext.OrganizationService.Execute(assign);
                }


                // Execute the Request


                //// Execute the Request
                //localContext.OrganizationService.Execute(assign);

                //AssignRequest assign = new AssignRequest
                //{
                //    Assignee = new EntityReference("systemuser",string["internalemailaddress"],"mallagurram@gmrltd.onmicrosoft.com"),
                //        Target = new EntityReference("task", taskid)
                //};


            }

                //<snippetFollowupPlugin3>
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
            {
                throw new InvalidPluginExecutionException("An error occurred in the FollowupPlugin plug-in.", ex);
            }

        }
    }
}

No comments:

Post a Comment