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);
}
}
}
}
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
Note: only a member of this blog may post a comment.