我在AX2012中制作了一份自定义报告,以取代WHS航运选择列表。自定义报告基于RDP。我没有直接运行它(使用参数对话框),但是当我尝试使用控制器(WHSPickListShippingController)时,我收到错误说"未找到预处理的RecId。无法处理报告。表示开发错误。"
错误是因为在类SrsReportProviderQueryBuilder(setArgs方法)中,映射变量reportProviderParameters为空。我不知道为什么会这样。我的数据提供程序中的代码运行正常。以下是运行报告的代码:
{{1}}
我不知道我是否足够清楚......但是我一直在寻找一个没有成功的小时数,所以我想我会在这里问。这个变量(来自方法参数AifQueryBuilderArgs)是否为空是否有原因?
答案 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类正在按需执行。