2013-09-30 4 views
1

У меня есть сценарий, что мне нужно изменить некоторые поля объекта, у которого пользователь вообще не имеет доступа. Я хотел бы знать, есть ли какой-то способ в момент запуска моей логической логики плагина. Я увеличиваю дозволенное разрешение пользователя на обновление объекта, и после этого я его вынимаю.Олицетворить и изменить CRM 2011 Право доступа

Право на доступ Сотрудник: не имеет доступа к учетной записи вообще (текущее право доступа Брайана). Access Right Manager: имеет доступ к обновлению учетной записи.

Сценарий: каждый раз, когда «Брайан» создает возможность, запускается плагин, создающий его, который увеличивает в одном поле с именем new_count во всех учетных записях системы. (Я знаю, что этот сценарий глуп без всякого смысла, но в любом случае). Поэтому мы создали плагин для создания руководства. Брайан создает лидерство, в плагине я добавляю его права доступа с менеджером только для запуска плагина, после обновления я забираю его у него.

был я ясно? Если это так, я надеюсь на ответ!

Благодаря

ответ

3

У вас есть два варианта

  1. плагиновой инструмент регистрации, зарегистрировать плагин для запуска в контексте пользователя системы

  2. Или плагин, создать веб-сервис с нулем в качестве идентификатора пользователя ,

IOrganizationService adminservice = serviceFactory.CreateOrganizationService(null);

Все вызовы adminservice методы будут выполняться как SystemUser с правами администратора, так что вы можете обновить любое поле на любой организации, независимо от текущих пользователей прав доступа.

+1

Просто чтобы быть ясно, вы также можете позвонить 'CreateOrganizationService' более чем один раз в плагине, так что вы можете сделать большую часть работы, во время работы в качестве пользователя, и поднять на пользователя системы только для тех частей, которые нужно это. – shambulator

+0

Я вижу, я не могу запустить плагин с другим пользователем, потому что если это так, то поле «Модифицировано» потеряет свое реальное значение, которое было бы пользователем, у которого был запущен плагин. –

+0

«modified by» будет содержать SYSTEM, но исходное имя пользователя будет сохранено в поле «modified by (delegate)», поэтому при необходимости информация будет доступна. – MarioZG

0

Я наконец нашел решение моей проблемы.

Чтобы сделать это правильно, я должен был выполнить следующие шаги.

  1. Создаю обе услуги: IOrganizationService administratorService = serviceFactory.CreateOrganizationService (NULL); (спасибо MarioZG);

IOrganizationService service = serviceFactory.CreateOrganizationService (context.UserId);

  1. Создать команду, которая имеет разрешение администратора

  2. В начале моего плагина с помощью этого «administratorService» Поручаю вызывающего пользователя к этой команде.

  3. Я делаю все, что хочу, используя вызывающего пользователя (используя мою службу IOrganizationService с именем).

  4. Наконец-то я беру пользователя из команды.