|
|
#1 |
|
Участник
|
CRM 4.0 использование regardingobjecttypecode в plugin
Добрый день. Есть следующая ситуация: при добавлении\сохранении сущности "действие сервиса" (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();Код: 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;
}
}Собственно вопрос - как узнать значение этого поля стандартными средствами, не прибегая к обращению напрямую запросом к базе, ибо клепать в одном простом плагине несколько способов обращения - есть изврат. --------------------------------------------------------------------- Так же вопрос № 2: Как можно переписать метод GetEntity так, чтобы он сообщал о том, что не найдена сущность с таким id (к примеру, взяли id которого не существует: Guid.NewGuid()). В настоящее время он просто падает с эксепшеном. Проверку на null retrieveResponse делал - не успевает срабатывать, нужно что-то другое. |
|
|
|
|
#2 |
|
Чайный пьяница
|
Добрый день,
Для получения из лукапа его типа можно воспользоваться следующим кодом: Код: Lookup regarding = (Lookup)saEntity["regardingobjectid"]; string typename = regarding.type;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
| За это сообщение автора поблагодарили: WISEMAN (1). | |
|
|
#3 |
|
Участник
|
a33ik, благодарствую
|
|
|
|
|
#4 |
|
Участник
|
Цитата:
Например, при создании сущности-действия через rest, как заполнять поле regardingobjectid, ведь его нет на форме. И соотвественно в дебагере ошибка The property name 'RegardingObjectTypeCode' specified for type 'Microsoft.Crm.Sdk.Data.Services.new_marks' is not valid." Последний раз редактировалось NoTimeToCry; 25.05.2012 в 13:14. |
|
|
|
|
#5 |
|
Участник
|
У поля regardingobjectid в ресте необходимо указать значение LogicalName. В него необходимо написать имя сущности на которую у Вас лукап. Записывается по аналогии с Id.
|
|
|
|
| За это сообщение автора поблагодарили: NoTimeToCry (1). | |
|
|
#6 |
|
Участник
|
|
|
|
|
|
|