10.08.2011, 11:43 | #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 делал - не успевает срабатывать, нужно что-то другое. |
|
10.08.2011, 12:26 | #2 |
Чайный пьяница
|
Добрый день,
Для получения из лукапа его типа можно воспользоваться следующим кодом: Код: Lookup regarding = (Lookup)saEntity["regardingobjectid"]; string typename = regarding.type;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: WISEMAN (1). |
11.08.2011, 18:50 | #3 |
Участник
|
a33ik, благодарствую
|
|
25.05.2012, 11:41 | #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. |
|
25.05.2012, 16:02 | #5 |
Участник
|
У поля regardingobjectid в ресте необходимо указать значение LogicalName. В него необходимо написать имя сущности на которую у Вас лукап. Записывается по аналогии с Id.
|
|
|
За это сообщение автора поблагодарили: NoTimeToCry (1). |
25.05.2012, 16:15 | #6 |
Участник
|
|
|
|
|