CreateMultiEntityAssociation
Продолжаем серию постов по оптимизации запросов CRM. На этот раз нас ждет CreateMultiEntityAssociation.
Метод CreateMultiEntityAssociation позволяет одним запросом соединить множество записей 1:N. Т.е., например, Вы можете с помощью него соединить с одной записью Контакта множество записей Возможных сделок. В классическом варианте мы бы обновляли все множество Возможных сделок по одной, проставляя в каждую из них один и тот же Контакт. А так мы будем экономить на запросах, а, следовательно, и на производительности сервера.
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; using Microsoft.Xrm.Tooling.Connector; namespace CreateMultiEntityAssociationTest { class Program { 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://crm2015/superfirma/XRMServices/2011/Organization.svc"); OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null); proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); CrmServiceClient crmServiceClient = new CrmServiceClient(proxy); // Список записей которые будем соединять с одной List<Guid> lstOpportunityGuid = new List<Guid>(); lstOpportunityGuid.Add(new Guid("1395A838-26F4-E411-80B7-000C291AFB9D")); lstOpportunityGuid.Add(new Guid("1595A838-26F4-E411-80B7-000C291AFB9D")); lstOpportunityGuid.Add(new Guid("1B95A838-26F4-E411-80B7-000C291AFB9D")); // Массово связываем записи crmServiceClient.CreateMultiEntityAssociation( "contact", new Guid("EF93A838-26F4-E411-80B7-000C291AFB9D"), "opportunity", lstOpportunityGuid, "opportunity_customer_contacts" ); } } }
В метод CreateMultiEntityAssociation передаются 5 параметров:
- targetEntity: имя объекта, запись одну которого нужно будет связать с множеством других;
- targetEntity1Id: GUID записи, с которой необходим связать множество других;
- sourceEntityName: имя объекта, множество записей которого необходимо связать с одной;
- sourceEntitieIds: массив GUID’ов записей, которые нужно связать с одной;
- relationshipName: имя связи, которая связывает исходный и целевой объект.