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

AX2012 - Pre-Processed RecId parameter not found

我在 AX2012 中制作了一个自定义报告,以替换 WHS 运输选择列表。自定义报告是基于 RDP 的。我直接 运行 没问题(使用参数对话框),但是当我尝试使用控制器 (WHSPickListShippingController) 时,我收到一条错误消息 "Pre-Processed RecId not found. Cannot process report. Indicates a development error."

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

WHSWorkId id = 'LAM-000052';
WHSPickListShippingController controller;
Args args;
WHSShipmentTable whsShipmentTable;
WHSWorkTable whsWorkTable;
clWHSPickListShippingContract contract; //My custom RDP Contract  

whsShipmentTable = WHSShipmentTable::find(whsWorkTable.ShipmentId);

args = new Args(ssrsReportStr(WHSPickListShipping, Report));
args.record(whsShipmentTable);
args.parm(whsShipmentTable.LoadId);

contract = new clWHSPickListShippingContract();

controller = new WHSPickListShippingController();
controller.parmReportName(ssrsReportStr(WHSPickListShipping, Report));
controller.parmShowDialog(false);
controller.parmLoadFromSysLastValue(false);
controller.parmReportContract().parmRdpContract(contract);
controller.parmReportContract().parmRdpName(classStr(clWHSPickListShippingDP));
controller.parmReportContract().parmRdlContract().parmLanguageId(CompanyInfo::languageId());
controller.parmArgs(args);

controller.startOperation();

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

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

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(...)用这种风格装饰 class 声明:

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

你用的controller.parmReportContract().parmRdpContract(contract);错了,因为这更多是为了运行次修改。它通常用于访问 preRunModifyContract 重载的合同。

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

好吧,现在我觉得花这么多时间在那个错误上很愚蠢,当它是这么小的事情时...

错误的那一行是:

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

因为WHSPickListShipping 是AX 报告的名称,但我将自定义报告重命名为clWHSPickListShipping。让我感到困惑的是我的 DataProvider class 正在按需要执行。