Показать сообщение отдельно
Старый 11.12.2019, 17:06   #1  
Дмитрий А.А. is offline
Дмитрий А.А.
Участник
Аватар для Дмитрий А.А.
 
173 / 19 (1) ++
Регистрация: 24.07.2015
Адрес: СПб
Работа с QueryExpression
Добрый день.
Dynamics 365.
Столкнулся со следующей проблемой, и не могу понять, как правильно сделать запрос:

Имеется 3 сущности: Отношения договора(клиент + договор + неинтересные реквизиты), Договор (проект + неинтересные реквизиты), Проект
На входе - идентификатор клиента + идентификатор проекта
Требуется найти, если имеются, Договора клиента по данному проекту.

Как я пробовал делать:
через первый QueryExpression получаю список Отношений договоров по клиенту:
X++:
QueryExpression queryRoles = new QueryExpression
                            {
                                EntityName = "new_customer_roles",
                                ColumnSet = new ColumnSet(true),
                                Criteria = new Microsoft.Xrm.Sdk.Query.FilterExpression()
                            };
                            queryRoles.Criteria.AddCondition("new_customer", ConditionOperator.Equal, value);
                            EntityCollection entityListRoles = _orgService.RetrieveMultiple(queryRoles);
в этом моменте все ок, отношения клиентов к договорам достаются без проблем.

затем я пытаюсь получить список Договоров, выбирая Договора по Проектам и пытаясь наложить фильтром найденный список отношений:

X++:
 QueryExpression query = new QueryExpression
                                {
                                    EntityName = "new_ddu",
                                    ColumnSet = new ColumnSet(true),
                                    Criteria = new Microsoft.Xrm.Sdk.Query.FilterExpression()
                                };
                                query.Criteria.AddCondition("new_object", ConditionOperator.Equal, Guid.Parse(flag));
                                //FilterExpression mainFilter = query.Criteria.AddFilter(LogicalOperator.And);
                                //mainFilter.AddCondition("new_object", ConditionOperator.Equal, Guid.Parse(flag));
                                FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.Or);
                                //FilterExpression childFilter = mainFilter.AddFilter(LogicalOperator.Or);
                                for (int ind = 0; ind < entityListRoles.Entities.Count; ind++)
                                {
                                    childFilter.AddCondition("new_dduid", ConditionOperator.Equal, ((EntityReference)entityListRoles[ind].Attributes["new_ddu"]).Id);
                                }
                                EntityCollection entityList = _orgService.RetrieveMultiple(query);
Получается, что каждый из фильтров по отдельности отрабатывает, а вместе они дают пустоту...
Буду рад любым советам, которые помогут понять, что не так я делаю.