Dynamics AX 2012 AIF QueryService через C# — использование отношений и режима присоединения между несколькими таблицами

Я хочу создать сложную определяемую пользователем службу запросов AIF, используя Visual Studio и написав код для службы запросов на С#. Я использую две настраиваемые таблицы, одна из которых является заголовком, а другая — строковой таблицей. Я добавил поля в запрос, используя обе таблицы, а также применил правильные диапазоны, и все работает нормально. Теперь я хочу установить связь между этими двумя таблицами, чтобы я мог получать данные на основе связи.

Пожалуйста, помогите мне, как установить связь между несколькими таблицами в службе запросов 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]));
    }
}

person Gaurav maheshwari    schedule 19.09.2016    source источник


Ответы (2)


См. как добавить несколько источников данных в запрос.

Либо:

  • Задайте для свойства Relations значение Да в дочернем источнике данных.

or:

  • Add a relation by doing the following:
    1. Set the Relations property to No on the child data source.
    2. Щелкните правой кнопкой мыши узел «Отношения» и выберите «Новое отношение».
    3. Выберите поле из родительского источника данных в свойстве Поле.
    4. Выберите поле из дочернего источника данных в свойстве RelatedField.
    5. Сохраните все изменения.

Затем вы можете получить доступ к данным запроса, используя OData. Служба запросов.

Также см. этот вопрос.

person Jan B. Kjeldsen    schedule 19.09.2016
comment
Я не использую Axapta AOT для создания связи. Все, что мне нужно сделать, это создать пользовательский запрос на C# с помощью службы запросов AIF. Я написал полный код на С#, но не могу установить связь или соединить две таблицы. - person Gaurav maheshwari; 19.09.2016

Гаурав,

В своем коде вы не создаете иерархическую структуру источников данных. Значит, отношений не получится. Вы получите такие ошибки, как: Вы не можете добавить отношение к корневому источнику данных. Я уже поделился своим ответом в сообществе AX. Вот ссылка: https://community.dynamics.com/ax/f/33/p/212065/573674#573674

Это сработает.

person arabinda mandal    schedule 28.10.2016