AX2012 - 未找到预处理的RecId参数

时间:2015-05-21 15:24:42

标签: reporting axapta dynamics-ax-2012

我在AX2012中制作了一份自定义报告,以取代WHS航运选择列表。自定义报告基于RDP。我没有直接运行它(使用参数对话框),但是当我尝试使用控制器(WHSPickListShippingController)时,我收到错误说"未找到预处理的RecId。无法处理报告。表示开发错误。"

错误是因为在类SrsReportProviderQueryBuilder(setArgs方法)中,映射变量reportProviderParameters为空。我不知道为什么会这样。我的数据提供程序中的代码运行正常。以下是运行报告的代码:

{{1}}

我不知道我是否足够清楚......但是我一直在寻找一个没有成功的小时数,所以我想我会在这里问。这个变量(来自方法参数AifQueryBuilderArgs)是否为空是否有原因?

2 个答案:

答案 0 :(得分:0)

我认为你的问题在于这些问题(尝试删除):

controller.parmReportContract().parmRdpContract(contract);
controller.parmReportContract().parmRdpName(classStr(clWHSPickListShippingDP));
controller.parmReportContract().parmRdlContract().parmLanguageId(CompanyInfo::languageId());

我期望看到你的合同的样式是这样的:

controller = new WHSPickListShippingController();
contract = controller.getDataContractObject();
contract.parmWhatever('ParametersHere');
controller.parmArgs(args);

对于DataProvider clWHSPickListShippingDP,通常如果报表使用DataProvider,则不会手动设置它,但DP会扩展SRSReportDataProviderBase并具有属性SRSReportParameterAttribute(...)装饰这种风格的类声明:

[SRSReportParameterAttribute(classstr(MyCustomContract))]
class MyCustomDP extends SRSReportDataProviderBase
{
    // Vars
}

您使用controller.parmReportContract().parmRdpContract(contract);错误,因为这更适合运行时修改。它通常用于访问preRunModifyContract重载的合同。

在开发环境中构建CrossReference,然后右键单击\Classes\SrsReportDataContract\parmRdpContract并单击Add-Ins>Cross-reference>Used By以查看通常如何使用它。

答案 1 :(得分:0)

好的,所以现在我觉得花这么多时间在这个错误上是非常愚蠢的,当它真是太小了......

错误的一句是:

controller.parmReportName(ssrsReportStr(WHSPickListShipping, Report));

因为WHSPickListShipping是AX报告的名称,但我重命名了我的自定义报告clWHSPickListShipping。使我困惑的是我的DataProvider类正在按需执行。