Получение связи N:N в Dynamics Crm

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

if (context.InputParameters.Contains("Target") && (context.InputParameters["Target"]) is Entity)
{
    Entity en = (Entity)context.InputParameters["Target"];
    QueryExpression _Query = new QueryExpression
    {
        EntityName = "transactioncurrency",
        ColumnSet = new ColumnSet(true),
        LinkEntities = 
        { 
            new LinkEntity 
            { 
                Columns=new ColumnSet(true),
                LinkFromEntityName="lead",
                LinkFromAttributeName="leadid",
                LinkToEntityName="new_lead_transactioncurrency",
                LinkToAttributeName="transactioncurrencyid",
                LinkCriteria=new FilterExpression  
                {
                    FilterOperator=LogicalOperator.And,
                    Conditions=
                    { 
                        new ConditionExpression  
                        {
                            AttributeName="transactioncurrencyid",
                            Operator=ConditionOperator.Equal,
                            Values={ en.Id }
                        }
                    }
                }
            }
        }
    };

    EntityCollection entitycollect = service.RetrieveMultiple(_Query);
    int entitycount = entitycollect.Entities.Count;
}

person user3631102    schedule 16.06.2014    source источник


Ответы (1)


Я думаю, вам нужно определить правильные LinkFromAttributeName и LinkToAttributeName.

QueryExpression query = new QueryExpression(entity1);

query.ColumnSet = new ColumnSet(true);

LinkEntity linkEntity1 = new LinkEntity("lead", "new_lead_transactioncurrency", "leadid", "leadid", JoinOperator.Inner);

LinkEntity linkEntity2 = new LinkEntity("new_lead_transactioncurrency", "transactioncurrency", "transactioncurrencyid", "transactioncurrencyid", JoinOperator.Inner);

linkEntity1.LinkEntities.Add(linkEntity2);
query.LinkEntities.Add(linkEntity1);

// Add condition to match the Bike name with “Honda”
linkEntity2.LinkCriteria = new FilterExpression();

linkEntity2.LinkCriteria.AddCondition(new ConditionExpression("raj_bikename", ConditionOperator.Equal, "Honda"));

EntityCollection collRecords = service.RetrieveMultiple(query);

Для справки, пожалуйста, взгляните на следующие ссылки:

Получить связанные записи (связанные N:N)

Пример: преобразование запросов между Fetch и QueryExpression

person Scorpion    schedule 16.06.2014
comment
да. Я видел, что в блоге в объекте ссылки нет параметра «relationentityname». Он будет иметь только имена объектов «от/до», имена атрибутов. Не могли бы вы мне помочь. - person user3631102; 16.06.2014
comment
relationshipentityname — это просто заполнитель. Имя отношения можно найти в разделе «Настройки» > «Настройка» > «Настроить систему» ​​> «Сущности» (в разделе «Компонент»). Затем разверните сущность, над которой вы работаете. Имя отношения будет под N:N Relationships. - person Scorpion; 16.06.2014
comment
да. Я знаю имена отношений, но в объекте ссылки нет параметра. Не могли бы вы уточнить запрос. - person user3631102; 16.06.2014
comment
я получаю эту ошибку. Дополнительная информация: объект «TransactionCurrency» не содержит атрибута с именем = «leadid». - person user3631102; 16.06.2014
comment
Вам нужно определить правильные LinkFromAttributeName и LinkToAttributeName. просмотреть все поля поиска в TransactionCurrency. Проверьте, какой из них представляет потенциальных клиентов. - person Scorpion; 16.06.2014
comment
я проверил в transactioncurrency, у него есть отношение n: n name=lead_transectioncurrencyid, и он не содержит никакого идентификатора. - person user3631102; 17.06.2014
comment
валюта транзакции имеет имя отношения n:n new_lead_transactioncurrency.она содержит какой-либо атрибут или идентификатор - person user3631102; 17.06.2014
comment
не могли бы вы пояснить меня - person user3631102; 17.06.2014
comment
Если внимательно прочитать первую ссылку. В нем четко сказано, что если вы создаете отношение N:N между двумя объектами, он создает промежуточный объект (т.е. объект отношения) с 3 полями (выделено на снимке экрана). Чтобы найти это, перейдите в «Настройки»> «Настройка»> «Настроить систему»> «Сущности» (в разделе «Компонент»). Затем разверните сущность, над которой вы работаете. Имя отношения будет в разделе Отношения N:N. Дважды щелкните отношение, над которым вы работаете. Проверьте, что у вас есть в Relationship Entity Name - person Scorpion; 17.06.2014
comment
пробовал как в blog.LinkEntity linkEntity1 = new LinkEntity(lead, new_lead_transactioncurrency, leadid, lead, JoinOperator.Inner); LinkEntity linkEntity2 = new LinkEntity(new_lead_transactioncurrency, transactioncurrency, transactioncurrencyid, transactioncurrency, JoinOperator.Inner); ошибка получения в транзакции transactioncurrency содержит атрибут лида. я прошел через объект transactioncuurency, там нет атрибутов поля, связанных с лидом, только отношения n: n, в которых я ошибаюсь, уточните меня - person user3631102; 17.06.2014
comment
получение ошибки при транзакцииcurrency действительно содержит лид-атрибут. я прошел через объект transactioncuurency, там нет атрибутов поля, связанных с лидом, только отношения n: n, в которых я ошибаюсь, уточните меня - person user3631102; 17.06.2014
comment
lead — это имя сущности. Это не может быть основным полем сущности 1. - person Scorpion; 17.06.2014
comment
просто предположение. Попробуйте заменить значение 4-го параметра на transactioncurrencyid. - person Scorpion; 17.06.2014
comment
я изменил 4-й параметр на transactioncurrencyid. его ошибка получения в transactioncurrency не содержит атрибут с именем = leadid - person user3631102; 17.06.2014
comment
сущность отношения всегда содержит 4 столбца. т.е. 1) Первичное Поле Сущностей. 2) Первичное поле второго объекта. 3) Идентификатор объекта отношений. 4) Номер версии. - person Scorpion; 17.06.2014
comment
тогда, где я делаю неправильно. проясните меня. со вчерашнего дня я пытаюсь решить эту проблему - person user3631102; 17.06.2014
comment
ТБХ, я не в своей голове. - person Scorpion; 17.06.2014
comment
Попробуйте один раз: LinkEntity linkEntity1 = new LinkEntity(lead, new_lead_transactioncurrency, leadid, leadid, JoinOperator.Inner); LinkEntity linkEntity2 = new LinkEntity(new_lead_transactioncurrency, transactioncurrency, transactioncurrencyid, transactioncurrencyid, JoinOperator.Inner); - person Scorpion; 17.06.2014
comment
его получение той же ошибки в транзакцииcurrency не содержит атрибут с именем = leadid - person user3631102; 17.06.2014
comment
Пожалуйста, дайте мне знать, если это отсортировано и в чем была точная проблема. - person Scorpion; 17.06.2014
comment
наконец, я получил это man.using метод addlink в выражении запроса - person user3631102; 23.06.2014
comment
Отличная работа. Можете ли вы поделиться кодом, пожалуйста. Вы можете ответить на свой вопрос, чтобы закрыть вопрос, если считаете, что у вас есть решение. - person Scorpion; 23.06.2014
comment
Конечно. Использование метода AddLink Как это qx.AddLink(new_lead_transactioncurrency, transactioncurrencyid, transactioncurrencyid); - person user3631102; 24.06.2014