Support us

Microsoft Dynamics CRM 4: Update owner property

Оставить комментарий
Microsoft Dynamics CRM 4: Update owner property
skitched Статья изначально была написана для habrahabr и долго пылилась в Draft, так как не хватает кармы для ее опубликования. Решил, что опубликую ее здесь ;-) Работаю с CRM и столкнулся с такой тривиальной задачей, как обновить Owner свойтство у сущности. Со всеми сущностями я работаю через CRM4SDK и всю манипуляцию произвожу с помощью DynamicEntity. Например создать сущность с Owner, отличающимся от CurrentUser (учетная запись под которой работает мой application) не составляет труда (здесь правильнее сказать, так же как и привычная работа с CRM): //Создаем саму сущность
DynamicEntity entity = new DynamicEntity();
entity.Name = entityName; // это может быть например "contact" как в моем случае
entity.Properties = properties; // коллекция свойств, одно из которых OwnerProperty
//Создаем запрос
TargetCreateDynamic myTarget = new TargetCreateDynamic();
myTarget.Entity = entity;
CreateRequest create = new CreateRequest();
create.Target = myTarget;
//Выполняем собственно сам запрос
CreateResponse response = (CreateResponse)Service.Instance.Execute(create);
// ... ///

//Собственно создание OwnerProperty
Owner owner = new Owner("systemuser", id);
OwnerProperty ownerProperty = new OwnerProperty("ownerid", owner);
И это работает, но как только я пытаюсь обновить сущность, где одно из измененных полей это Owner, Service.Instance.Execute(new UpdateRequest { Target = new TargetUpdateDynamic { Entity = dynamicEntity } }); То все поля обновляются, а Owner каким был, таким и остается. Что я только не делал, и в дебаге смотрел каждую строчку, ошибку — все проходит без сучка и задоринки. Включил Trace — ничего, чтобы мне помогло узнать, почему не обновляется Owner. Проштудировал SDK и ни одного упоминаня, как менять owner на страницах работы с этим самим owner нет, отличного от того, как я написал выше. Оказывается!!! Для того чтобы сделать у существующей сущности обновление существующего Owner, существует специальный запрос на это дело и нужно создавать отдельный экземпляр класса SecurityPrincipal и посылать отдельный запрос, только для того, чтобы обновить одно поле!!! Вот она! Эта серебрянная пуля: public static void UpdateOwner(Guid ownerid, Guid entityid, string entityName)
        {
            SecurityPrincipal assignee = new SecurityPrincipal {PrincipalId = ownerid};
            TargetOwnedDynamic target = new TargetOwnedDynamic {EntityId = entityid, EntityName = entityName};
            AssignRequest assign = new AssignRequest {Assignee = assignee, Target = target};
            AssignResponse assignResponse = (AssignResponse)Service.Instance.Execute(assign);
        }
Надеюсь кому-нибудь сэкономлю кучу нервов и запросов в google.
Читайте также
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Rust стал самым быстрорастущим языком по числу разработчиков
Rust стал самым быстрорастущим языком по числу разработчиков
Rust стал самым быстрорастущим языком по числу разработчиков
TIOBE: C++ и C# наступают на первую тройку
TIOBE: C++ и C# наступают на первую тройку
TIOBE: C++ и C# наступают на первую тройку
3 комментария
TIOBE назвал «язык года»-2021
TIOBE назвал «язык года»-2021
TIOBE назвал «язык года»-2021
1 комментарий

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.