Расширенная функциональность
27
Дек
0

Динамический Маркетинговый список в коде…

Как Вы знаете, в CRM 2011 появились т.н. динамические Маркетинговые списки, участники которого нигде не хранятся, а возвращаются динамически на основе фильтра (составленного с помощью Расширенного поиска).

Для программного получения участников статического Маркетингового списка мы должны использовать объект ListMember, но с динамическим так не получится. В случае динамического Маркетингового списка, чтобы вернуть участников списка, мы должны воспользоваться FetchXML запросом, возвращаемым вместе с динамическим Маркетинговым списком в поле «query».

Нижи следующий пример показывает как в консольном приложении вывести участников одного (конкретного) динамического Маркетингового списка:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using System.ServiceModel.Description;
using System.Runtime.Serialization;

namespace DynamicList
{
    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;

            // Формируем запрос для возвращения динамического Маркетингового списка по имени
            QueryByAttribute qbaList = new QueryByAttribute("list");
            qbaList.ColumnSet = new ColumnSet("listname", "query");
            qbaList.Attributes.AddRange("listname");
            qbaList.Values.AddRange("Динамический Тест");

            // Выполняем запрос
            EntityCollection retrievLists = service.RetrieveMultiple(qbaList);

            System.Console.WriteLine("===============================");

            // Просматриваем ответ и получаем Fetch запрос из единственного возвращенного динамического Маркетингового списка
            string FetchXML = null;
            foreach (var list in retrievLists.Entities)
            {
                System.Console.WriteLine("FetchXML: " + list.Attributes["query"]);
                FetchXML = list.Attributes["query"].ToString();
            }

            System.Console.WriteLine("===============================");

            // Запрашиваем и вывродим Контакты по возвращенному Fetch запросу
            var retrievContacts = service.RetrieveMultiple(new FetchExpression(FetchXML));
            foreach (var contacts in retrievContacts.Entities)
            {
                System.Console.WriteLine("Contacts: " + contacts.Attributes["fullname"]);
            }

            System.Console.WriteLine("===============================");

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



Примечание: возможно результаты выполнения FetchXML запроса будут отличаться от того, что будет отображаться на форме динамического Маркетингового списка. Одна из причин этого, заключается в том, что CRM по умолчанию показывает только активные записи в пользовательском интерфейсе. Чтобы Ваши результаты не отличались, Вам нужно явно указать в запросе в Расширенном поиске исключить неактивные записи.

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

*

code