Кастомизация
02
Ноя
4

Представление с записями расшаренными на текущего пользователя

Создадим Представление, которое показывает записи, расшаренные на текущего пользователя. Стандартными средствами такое сделать нельзя. Но в целом, можножно построить такой FetchXml. А т.к. представления отбирают данные на основе FetchXml запросов, осталось подсунуть его какому-либо Представлению, созданному традиционным путем.

Эксперименты будем проводить на объекте Организация…

  • Создайте новое системное Представление. Назовите его, например, «Расшаренные Организации»;
  • На форме редактирования нажмите Ctrl + N и скопируйте из строки URL GUID Представления;
  • Откройте SQL Server management Studio и выполните в отношении БД _MSCRM такой SQL запрос:
    SELECT
    	SavedQueryId,
    	Name,
    	FetchXml
    FROM
    	SavedQueryBase
    WHERE
    	SavedQueryId = 'B64D8E2B-6C24-E211-965B-000C29CDB72E'
    

    где в SavedQueryId подставьте скопированный GUID Представления.
    Этот запрос вернет помимо прочего FetchXml запрос этого представления. Он будет примерно такого вида:

    <fetch version="1.0" output-format="xml-platform" mapping="logical">
      <entity name="account">
        <order attribute="name" descending="false" />
        <attribute name="emailaddress1" />
        <attribute name="ownerid" />
        <attribute name="telephone1" />
        <attribute name="primarycontactid" />
        <attribute name="name" />
        <attribute name="accountid" />
      </entity>
    </fetch>
    

    Скопируйте его и добавьте к нему связь с объектом principalobjectaccesss, примерно так:

    <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
      <entity name="account">
        <order attribute="name" descending="false" />
        <attribute name="emailaddress1" />
        <attribute name="ownerid" />
        <attribute name="telephone1" />
        <attribute name="primarycontactid" />
        <attribute name="name" />
        <attribute name="accountid" />
        <link-entity name="principalobjectaccess" to="accountid" from="objectid" link-type="inner" alias="share">
          <filter type="or">
            <condition attribute="principalid" operator="eq-userid" />
            <condition attribute="principalid" operator="eq-userteams" />        
          </filter>
        </link-entity>
      </entity>
    </fetch>
    

    Здесь мы добавили проверку по двум условиям: на наличие Рабочей группы и Пользователя среди тех на кого расшарена запись;

  • Выполните такой запрос, чтобы обновить FetchXml запрос Представления (заметьте что FetchXml запрос представлен одной строкой – никаких переносов строки):
    UPDATE SavedQueryBase
    SET FetchXml = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true"><entity name="account"><order attribute="name" descending="false" /><attribute name="emailaddress1" /><attribute name="ownerid" /><attribute name="telephone1" /><attribute name="primarycontactid" /><attribute name="name" /><attribute name="accountid" /><link-entity name="principalobjectaccess" to="accountid" from="objectid" link-type="inner" alias="share"><filter type="or"><condition attribute="principalid" operator="eq-userid" /><condition attribute="principalid" operator="eq-userteams" /></filter></link-entity></entity></fetch>'
    WHERE SavedQueryId = 'B64D8E2B-6C24-E211-965B-000C29CDB72E'
    
  • Опубликуйте все настройки в CRM.

Готово, идем тестировать…

Примечания:

  • Недостаток подхода состоит в том, что после изменения FetchXml запроса Вы не сможете использовать пользовательский интерфейс для просмотра и настройки Представления (а также открыть его в Расширенном поиске);
  • Также FetchXml запрос Представления можно изменить (или создать новое Представление) поддерживаем способом через SDK.





Комментарии (4)
  • Олег 02.11.2012

    Отлично! а как сделать отчет, чтобы для выбранного пользователя получить список отшаренных записей по всем сущностям?

  • Олег 02.11.2012

    slivka_83 Спасибо за ссылки. Помогло. Есть что-то подобное, чтобы найти все сущности, которые создал (автор) или изменил (редактор) конкретный пользователь?

  • slivka_83 02.11.2012

    Готовое врят ли. Но можно либо UNION’ом обойти все таблицы всех записей, либо дейтсвовать через таблицу аудита, где хранятся записи об изменениях и созданиях записей.

*

code