Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta 将参数传递到基于查询的报表的参数对话框_Axapta_Dynamics Ax 2012_X++ - Fatal编程技术网

Axapta 将参数传递到基于查询的报表的参数对话框

Axapta 将参数传递到基于查询的报表的参数对话框,axapta,dynamics-ax-2012,x++,Axapta,Dynamics Ax 2012,X++,我有一个基于查询的报告,其中查询启用了一些交互式范围。这很好,除非值为空,或者使用了预填充的最后一个值。其中之一是供应商账号。如果我想让此报告根据所选的供应商帐户记录(调用方)预填充供应商帐户,我将如何实现这一点?我还没有尝试过这一点,但您可以覆盖查询的init方法并以表单的形式调用element.args().record()。 大概是这样的: public void init() { VendTable vendTable; super(); if (elemen

我有一个基于查询的报告,其中查询启用了一些交互式范围。这很好,除非值为空,或者使用了预填充的最后一个值。其中之一是供应商账号。如果我想让此报告根据所选的供应商帐户记录(调用方)预填充供应商帐户,我将如何实现这一点?

我还没有尝试过这一点,但您可以覆盖查询的init方法并以表单的形式调用element.args().record()。 大概是这样的:

public void init()
{
    VendTable vendTable;

    super();

    if (element.args().dataset() == tableNum(VendTable))
    {
        vendTable = element.args().record();
        //populate your ranges with vendTable
    }
}

我希望它能起作用

答案很简单,但很难找到。我不知道您可以从控制器中访问查询对象。解决方案是创建一个控制器类,其中只有一个定义为normal的main()方法,并且覆盖了
precomptmodifycontract
方法。以下代码将解决此问题:

SomeTable   someTable;
Query       query;

super();

if (this.parmArgs() && this.parmArgs().dataset() == tableNum(SomeTable))
{
    someTable = this.parmArgs().record();
    query = this.getFirstQuery();

    SysQuery::findOrCreateRange(query.dataSourceTable(tableNum(SomeOtherTable)), fieldNum(SomeOtherTable, SomeOtherField)).value(SysQuery::value(someTable.SomeField));
}

查询调用者的问题是SSRS报告,报告本身不能附加记录。相反,使用控制器类,控制器成为查询的调用者并将其传递给报表。