2014-10-09 1 views
0

У меня есть объект под названием Document Access. Теперь этот объект Document Access имеет отношение N: 1 к инциденту (у одного инцидента может быть много доступа к документу).CRM 2013 - Предотвращение удаления записи на основании условия

Когда кто-то создает новую запись доступа к документу, у меня есть JS, который проверяет, является ли лицо, создающее запись (текущий зарегистрированный пользователь) таким же, как владелец инцидента. Если нет, я запрещаю создание (это устанавливается в Save of the record).

Владелец записи документа может быть кем угодно (не обязательно владельцем инцидента). Как я могу обеспечить предотвращение удаления этих записей доступа к документу, если это не будет сделано Владельцем инцидента?

  1. Могу ли я достичь этого через Роли безопасности? Я не могу найти решение, которое может быть достигнуто с помощью Ролей безопасности, чтобы кнопка «Удалить» даже не отображалась при отображении вида или формы.
  2. Могу ли я достичь того же путем подключения JavaScript в кнопку «Удалить» как часть ленты? Если да, как я могу получить идентификатор инцидента, который выбирается для удаления? Будет ли это также вызвано, если мы удалим объем?
  3. Если это плагин, должен ли он находиться на этапе предварительной проверки операции удаления?

ответ

5

Я попытаюсь ответить и право каждого из ваших вариантов:

  1. Использование ролей безопасности. Нет, потому что вы хотите контролировать удаление на основании права собственности на связанный объект, который невозможен.
  2. Использование JavaScript. Вы можете скрыть кнопки с помощью настраиваемого правила ленты JavaScript, которое сравнивает владельца инцидента с владельцем записи Document Access. Однако этот подход не будет поддерживать все случаи использования, включая массовое удаление.
  3. Использование плагина. Это правильный подход, и регистрация на предварительном подтверждении - это хорошо. Он будет обеспечивать соблюдение вашего бизнес-правила независимо от того, откуда начинается запрос на удаление. Это может быть от пользователя через пользовательский интерфейс, операцию массового удаления или платформы, такую ​​как запрос внешней интеграции. Убедитесь, что вы возвращаете содержательное сообщение в исключение, которое объясняет бизнес-правило.
1

Наилучший подход - это сделать это через плагин на «Удаление записей доступа к документу».

В своем коде вы можете следить за этим шаги:

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

    Guid incidentId --> You get this form the lookup field, you have in Document Access to Incident Entity incident = service.Retrive("incident", incidentId, new ColumnSet("onwerid"));

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

    // context --> execution plugin context Guid ownerIncident = ((EntityReference)incident.Attributes["ownerid"]).Id; if(ownerIncident != context.InitiatingUserId) { throw new InvalidPluginExecutionContext("Can't delete Documet Access record"); } // otherwise let the record to be deleted