Добрый день. Есть следующая ситуация: при добавлении\сохранении сущности "действие сервиса" (serviceappointment) должен срабатывать плагин который смотрит какое действие добавлено => если оно является "сервисным контрактом" (contract), то поменять уже существующую "дату акта" (new_actdate) у контракта на ту, что выставили в "действии сервиса" (new_dateofact).
Что я делаю:
Вытаскиваю данные из serviceappointment
Код:
string saId = string.Empty; //service appointment id
CrmDateTime saDate = CrmDateTime.Null; //service appointment date of act
string cId = string.Empty; //contract id
CrmDateTime cDate = CrmDateTime.Null; //contract date of act
DynamicEntity entity = (DynamicEntity) context.InputParameters.Properties[ParameterName.Target];
saId = ((Key) entity.Properties["activityid"]).Value.ToString();
DynamicEntity saEntity = GetEntity("serviceappointment", saId, "new_dateofact", "regardingobjectid");
saDate = ((CrmDateTime) saEntity.Properties["new_dateofact"]);
cId = ((Lookup)saEntity.Properties["regardingobjectid"]).Value.ToString();
Да и GetEntity - мой метод:
Код:
private DynamicEntity GetEntity(string entityName, string entityId, params string[] attributes)
{
try
{
Microsoft.Crm.Sdk.Query.ColumnSet columnSet = new Microsoft.Crm.Sdk.Query.ColumnSet();
if (attributes.Length == 0)
{
throw new ArgumentNullException("You should send at least one attribute");
}
foreach (string el in attributes)
{
columnSet.Attributes.Add(el);
}
TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic { EntityId = new Guid(entityId), EntityName = entityName };
RetrieveRequest retrieveRequest = new RetrieveRequest {Target = targetRetrieve, ColumnSet = columnSet, ReturnDynamicEntities = true};
RetrieveResponse retrieveResponse = (RetrieveResponse)crmService.Execute(retrieveRequest);
return (DynamicEntity)retrieveResponse.BusinessEntity;
}
catch
{
return null;
}
}
Следующим шагом мне нужно узнать что этот RegardingObjectId относится к contract, а не к другим 12 типам с которыми serviceappointment в отношении. Я пытался взять RegardingObjectTypeCode так же среди атрибутов ч\з свой метод, но проблема в том что у сущности в crm среди атрибутов нету RegardingObjectTypeCode, а в базе данных такое поле есть.
Собственно вопрос - как узнать значение этого поля стандартными средствами, не прибегая к обращению напрямую запросом к базе, ибо клепать в одном простом плагине несколько способов обращения - есть изврат.
---------------------------------------------------------------------
Так же вопрос № 2:
Как можно переписать метод GetEntity так, чтобы он сообщал о том, что не найдена сущность с таким id (к примеру, взяли id которого не существует: Guid.NewGuid()). В настоящее время он просто падает с эксепшеном. Проверку на null retrieveResponse делал - не успевает срабатывать, нужно что-то другое.