Разработка
10
Окт
0

Пользователи/Рабочие группы на которые расшарена запись

Посмотрим как с помощью кода вернуть всех Пользователей и Рабочие группы, на которые расшарена какая-либо запись.
Код будет таким:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Crm.Sdk.Messages;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Runtime.Serialization;

namespace shared
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаемся к CRM
            ClientCredentials credentials = new ClientCredentials();
            credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1qaz@WSX", "D2011");
            Uri uri = new Uri("http://crm2011:5555/superfirma/XRMServices/2011/Organization.svc");
            OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null);
            proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
            IOrganizationService service = (IOrganizationService)proxy;

            string entityName = "account"; // Объект, запись которого будем просматривать
            Guid entityId = new Guid("10E25FE5-73E2-E111-B2D5-000C29CDB72E"); // GUID записи шару которого будем смотреть

            // Запрашиваем всех Пользователей и Рабочие группы на которые расшарена запись
            PrincipalAccess[] sharedItems = getSharedItemsItems(entityName, entityId, service);
            
            // Просматриваем все возвращенные записи
            foreach (PrincipalAccess item in sharedItems)
            {
                string type = item.Principal.LogicalName; // Тип записи
                Guid Id = item.Principal.Id; // GUID записи
                Console.WriteLine(type + ": " + Id.ToString());
            }

            Console.WriteLine("\nPress <Enter> to exit.");  
            Console.ReadLine();
        }

        // Функция возвращает Пользователей и Рабочие группы на которые расшарена определенная запись
        static PrincipalAccess[] getSharedItemsItems(string entityName, Guid entityId, IOrganizationService service)
        {
            RetrieveSharedPrincipalsAndAccessRequest retrieveSharedRequest = new RetrieveSharedPrincipalsAndAccessRequest()
            {
                Target = new EntityReference(entityName, entityId)
            };
            RetrieveSharedPrincipalsAndAccessResponse retrieveSharedResponse = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(retrieveSharedRequest);

            return retrieveSharedResponse.PrincipalAccesses;
        }
    }
}

Код делает следующее:

  • Подключается к CRM;
  • Вызываем функцию getSharedItemsItems, которая принимает название объекта и GUID записи. А возвращает всех Пользователей и Рабочие группы, на которые эта запись расшарена;
  • Далее поочередно просматриваем всех Пользователей и Рабочие группы и выводим их тип и GUID.


Комментарии (0)

*

code