Hello friend ,, I write a plugin code for stop creating activity on case form after change in endorsement section for those customer who dn't have email id.
but still activity created , please see the code and give me your suggestion. please
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
namespace EndorsementEmail
{
public class CaseEndorsement : IPlugin
{
public ITracingService iTracingService;
#region Variable Declaration
private string TempName = string.Empty;
Guid _TemplateId;
Guid _ObjectId;
Guid _customerId;
int _Endstatus;
#endregion Variable Declaration
public void Execute(IServiceProvider serviceProvider)
{
try
{
#region Initilization of required plugin objects.
iTracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext iPluginExecutionContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory iOrganizationServiceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService iOrganizationService = iOrganizationServiceFactory.CreateOrganizationService(iPluginExecutionContext.UserId);
#endregion
if (iPluginExecutionContext.Depth > 1) return;
if (iPluginExecutionContext.PrimaryEntityName != "incident") return;
#region Business Logic
//Retrieve Case record with other attributes.
ColumnSet cols = new ColumnSet(new string[] { "customerid", "adkv_endorsementstatus" });
Entity _CaseRecord = iOrganizationService.Retrieve("incident", iPluginExecutionContext.PrimaryEntityId, cols);
if (_CaseRecord.Contains("customerid"))
{
iTracingService.Trace("CaseEndorsement plugin end on finally block");
EntityReference _customerId = _CaseRecord.GetAttributeValue<EntityReference>("customerid");
Entity customerRetreive = iOrganizationService.Retrieve("contact", _customerId.Id, new ColumnSet("emailaddress2"));
if (customerRetreive.GetAttributeValue<EntityReference>("emailaddress2") != null)
{
//Set Email Template based on Endorsement Status
if (_CaseRecord.Contains("adkv_endorsementstatus"))
{
iTracingService.Trace("CaseEndorsement plugin end on finally block");
_Endstatus = _CaseRecord.GetAttributeValue<OptionSetValue>("adkv_endorsementstatus").Value;
if (_Endstatus == 100000000)
{
TempName = "Endorsement Accepted Email Template";
}
else if (_Endstatus == 100000001)
{
TempName = "Endorsement Rejected Email Template";
}
}
_ObjectId = _CaseRecord.Id;
//code to retrieve emailtemplateid
string sFetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" +
"<entity name='template'>" +
"<attribute name='title' />" +
"<attribute name='templatetypecode' />" +
"<attribute name='ispersonal' />" +
"<attribute name='languagecode' /> " +
"<attribute name='templateid' /> " +
" <order attribute='title' descending='false' /> " +
"<filter type='and'> " +
"<condition attribute='title' operator='eq' value='" + TempName.ToString() + "' /> " +
"</filter> " +
"</entity> " +
"</fetch>";
EntityCollection enCollEmailTemp = iOrganizationService.RetrieveMultiple(new FetchExpression(sFetchXml));
if (enCollEmailTemp != null && enCollEmailTemp.Entities != null && enCollEmailTemp.Entities.Count > 0)
{
_TemplateId = enCollEmailTemp.Entities[0].GetAttributeValue<Guid>("templateid");
}
#region Initialte Email Template
InstantiateTemplateRequest instTemplateReq = new InstantiateTemplateRequest();
{
instTemplateReq["TemplateId"] = _TemplateId;
instTemplateReq["ObjectId"] = _ObjectId;
instTemplateReq["ObjectType"] = _CaseRecord.LogicalName.ToString();
};
InstantiateTemplateResponse instTemplateResp = (InstantiateTemplateResponse)iOrganizationService.Execute(instTemplateReq);
EntityCollection templatecollection = new EntityCollection();
templatecollection = (EntityCollection)instTemplateResp["EntityCollection"];
if (templatecollection.Entities.Count > 0)
{
Entity EmailCreate = new Entity("email");
EmailCreate["subject"] = templatecollection.Entities[0].GetAttributeValue<string>("subject");
EmailCreate["description"] = templatecollection.Entities[0].GetAttributeValue<string>("description");
EmailCreate["regardingobjectid"] = new EntityReference("incident", _CaseRecord.Id);
// Set from Field Start
Entity ap2 = new Entity();
ap2 = new Entity("activityparty");
iTracingService.Trace("1");
ap2["partyid"] = new EntityReference("systemuser", new Guid("F166DC3C-98B4-DD11-A7F2-001A6435D028"));
Entity[] aryFrom = { ap2 };
EmailCreate["from"] = aryFrom;
// Set From Field End
// Set To Fiel to email activity
Entity ap1 = new Entity();
ap1 = new Entity("activityparty");
iTracingService.Trace("2");
ap1["partyid"] = new EntityReference("contact", _customerId.Id);
Entity[] aryTo = { ap1 };
EmailCreate["to"] = aryTo;
// Set To field on email activity
iOrganizationService.Create(EmailCreate);
}
#endregion Initiate Email Template
}
#endregion Business Logic
}
}
catch (Exception e)
{
iTracingService.Trace("CaseEndorsement Plugin is on catch block");
throw e;
}
finally
{
iTracingService.Trace("CaseEndorsement plugin end on finally block");
}
}
}
}