Dynamics AX 2012 AIF QueryService через C# - отношения и использование JoinMode между несколькими таблицами
Я хочу создать сложный пользовательский сервис запросов AIF, используя Visual Studio и писать код для службы запросов в C#. Я использую две пользовательские таблицы, среди которых одна - заголовок, а другая - таблица строк. Я добавил поля в запрос, используя обе таблицы и применяя правильные диапазоны, и он работает нормально. Теперь я хочу установить связь между этими двумя таблицами, чтобы можно было получать данные на основе отношения.
Пожалуйста, помогите мне с тем, как установить связь между несколькими таблицами в службе запросов AIF.
query.DataSources = new QueryDataSourceMetadata[2];
query.Name = "AXCustomerInfo";
QueryDataSourceMetadata custTableDS = new QueryDataSourceMetadata();
custTableDS.Name = "CustTable";
custTableDS.Table = "CustTable";
custTableDS.Enabled = true;
query.DataSources[0] = custTableDS;
custTableDS.DynamicFieldList = false;
custTableDS.Fields = new QueryDataFieldMetadata[1];
QueryDataFieldMetadata accountNum;
accountNum = new QueryDataFieldMetadata();
accountNum.FieldName = "AccountNum";
accountNum.SelectionField = SelectionField.Database;
custTableDS.Fields[0] = accountNum;
custTableDS.HasRelations = true;
custTableDS.JoinMode =JoinMode.InnerJoin;
QueryDataSourceMetadata dirPartyTableDS = new QueryDataSourceMetadata();
dirPartyTableDS.Name = "DirPartyTable";
dirPartyTableDS.Table = "DirPartyTable";
dirPartyTableDS.Enabled = true;
query.DataSources[1] = dirPartyTableDS;
dirPartyTableDS.DynamicFieldList = false;
dirPartyTableDS.Fields = new QueryDataFieldMetadata[1];
QueryDataFieldMetadata name;
name = new QueryDataFieldMetadata();
name.FieldName = "Name";
name.SelectionField = SelectionField.Database;
dirPartyTableDS.Fields[0] = name;
dirPartyTableDS.HasRelations = false;
result = client.ExecuteQuery(query, ref paging);
foreach (DataRow row in result.Tables[0].Rows)
{
Console.WriteLine(String.Format("{0}", row[0]));
foreach (DataRow row1 in result.Tables[1].Rows)
{
Console.WriteLine(String.Format("{0}", row1[0]));
}
}
2 ответа
Узнайте, как добавить несколько источников данных в запрос.
Или:
- Установите для свойства Relations значение Yes для дочернего источника данных.
или же:
- Добавьте отношение, выполнив следующее:
- Установите для свойства Relations значение No в дочернем источнике данных.
- Щелкните правой кнопкой мыши узел "Отношения" и выберите "Новое отношение".
- Выберите поле из родительского источника данных в свойстве Field.
- Выберите поле из дочернего источника данных в свойстве RelatedField.
- Сохраните все модификации.
Затем вы можете получить доступ к данным запроса, используя OData Query Service.
Также посмотрите этот вопрос.
Gaurav,
В своем коде вы не создаете иерархическую структуру источников данных. Следовательно, отношения не будут работать. Вы получите ошибки типа: Вы не можете добавить связь с корневым источником данных. Я уже поделился своим ответом на сообществе AX. Вот ссылка: https://community.dynamics.com/ax/f/33/p/212065/573674
Это будет работать