Задача: Необходимо реализовать плагин, который запрещает удаление сущности при выполнении некоторого условия на связанную сущность.
Решение: Реализован плагин на событие Delete сущности new_grmember со снимком PreImage.
Решение: Реализован плагин на событие Delete сущности new_grmember со снимком PreImage.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk.Query;
namespace PreDeleteGrmember
{
public class GrmemberDeleteHandler : IPlugin
{
#region Члены IPlugin
public void Execute(IPluginExecutionContext context)
{
if (context.MessageName != MessageName.Delete || !(context.PreEntityImages.Contains("PreImage")) || !(context.PreEntityImages["PreImage"] is DynamicEntity))
return;
DynamicEntity _grmember = (DynamicEntity)context.PreEntityImages["PreImage"];
if (!_grmember.Properties.Contains("new_contractid"))
return;
Lookup customer = (Lookup)_grmember["new_contractid"];
if (customer.type != EntityName.opportunity.ToString())
return;
Guid opportunityid = customer.Value;
string[] fields = new string[] { "new_status" };
ICrmService crmservice = context.CreateCrmService(true);
RetrieveRequest request = new RetrieveRequest();
request.ColumnSet = new ColumnSet(fields);
request.ReturnDynamicEntities = true;
TargetRetrieveDynamic target = new TargetRetrieveDynamic();
target.EntityId = opportunityid;
target.EntityName = EntityName.opportunity.ToString();
request.Target = target;
DynamicEntity _opportunity = (DynamicEntity)((RetrieveResponse)crmservice.Execute(request)).BusinessEntity;
Picklist status = (Picklist)_opportunity["new_status"];
if (status.Value.ToString() == "2")
throw new InvalidPluginExecutionException("Вы не можете удалить этот объект!");
}
#endregion
}
}
Комментариев нет:
Отправить комментарий