Разработка
30
Ноя
0

LinkEntity

В одной из предыдущих статей RelatedEntities было показано, как в одном запросе Retrieve вернуть основную запись и кучу связанных с ней (вместе с их полями). Теперь рассмотрим обратный манер – необходимо вернуть кучу основных записей и по одной «дочерней» связанной записи. При этом основная запись ссылается на дочернюю посредством лукапа (N:1). И все это одним запросом.

using System;
using System.Collections.Generic;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;

using System.ServiceModel;
using System.ServiceModel.Description;
using System.Runtime.Serialization;

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

            // Формируем запрос
            var query = new QueryExpression("account");
            var columnNames = new[] { "accountid", "name" };
            query.ColumnSet = new ColumnSet(columnNames);

            // Подкючаем связанный объект
            var colsAccount = new[] { "firstname", "lastname" };
            LinkEntity linkEntityAccount = new LinkEntity()
            {
                LinkFromEntityName = "account",
                LinkFromAttributeName = "primarycontactid",
                LinkToEntityName = "contact",
                LinkToAttributeName = "contactid",
                JoinOperator = JoinOperator.Inner,
                Columns = new ColumnSet(colsAccount),
                EntityAlias = "Contacts"
            };
            query.LinkEntities.Add(linkEntityAccount);

            // Выполняем запрос
            EntityCollection _results = service.RetrieveMultiple(query);
            if (_results == null) return;

            foreach (var ent in _results.Entities)
            {
                Console.WriteLine(ent.Attributes["name"]);
                // Выводим поля со вязанного объекта
                Console.WriteLine(" - " + (ent.Attributes["Contacts.firstname"] as AliasedValue).Value + " " + (ent.Attributes["Contacts.lastname"] as AliasedValue).Value);
            }
            Console.ReadKey();
        }
    }
}

Тут все просто:

  • Подключаемся к CRM;
  • Формируем запрос на возвращение Организаций;
  • К нему подключаем связанный объект – Контакт и указываем параметры этой связи;
  • Выводим полученную информацию.


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

*

code