Axapta 如何从查询窗口中识别高级查询或动态联接?

Axapta 如何从查询窗口中识别高级查询或动态联接?,axapta,x++,dynamics-ax-2012,dynamics-ax-2012-r2,Axapta,X++,Dynamics Ax 2012,Dynamics Ax 2012 R2,在弹出的查询窗口中,如果用户右键单击并选择“1:n”并选择一个表,如何检测和使用该表?我有一个很好的工作样本和截图,可以证明我正在努力完成什么 我编写了这个示例作业,它转储AOT查询对象,但不转储动态连接的表/范围/值 static void InventSumQuery(Args _args) { Query query = new Query(queryStr(InventDimPhys)); QueryRun qr = ne

在弹出的查询窗口中,如果用户右键单击并选择“1:n”并选择一个表,如何检测和使用该表?我有一个很好的工作样本和截图,可以证明我正在努力完成什么

我编写了这个示例作业,它转储AOT查询对象,但不转储动态连接的表/范围/值

static void InventSumQuery(Args _args)
{
    Query               query = new Query(queryStr(InventDimPhys));
    QueryRun            qr = new QueryRun(query);
    QueryBuildRange     queryRange;

    DictField           dictField;

    int i, n;


    if(qr.prompt())
    {
        for (n=1; n<=query.dataSourceCount(); n++)
        {            
            for (i=1; i<=query.dataSourceNo(n).rangeCount(); i++)
            {
                queryRange = query.dataSourceNo(n).range(i);

                dictField = new dictField(query.dataSourceNo(n).table(), fieldName2id(query.dataSourceNo(n).table(), queryRange.AOTname()));

                info(strFmt("%1.%2", tableId2name(dictField.tableid()), dictField.name()));
            }
        }
    }

    info("Done");
}
静态无效InventSumQuery(Args\u Args)
{
Query Query=新查询(queryStr(InventDimPhys));
QueryRun qr=新QueryRun(查询);
QueryBuildRange查询范围;
DictField-DictField;
inti,n;
if(qr.prompt())
{

对于(n=1;n当然,我会自己想出答案。查询对象是静态的,而查询表单实际上只是在您进行更改时修改查询

因此,您需要将上述代码修改为:

if(qr.prompt())
{
    query = qr.query();
高级查询实际上只是表单本身的一个函数,它最终修改了查询