【问题标题】:AX2012 - Pre-Processed RecId parameter not foundAX2012 - 未找到预处理的 RecId 参数
【发布时间】:2015-05-21 15:24:42
【问题描述】:

我在 AX2012 中制作了一个自定义报告,以替换 WHS 运输拣货清单。自定义报告基于 RDP。我直接运行它没有问题(使用参数对话框),但是当我尝试使用控制器(WHSPickListShippingController)时,我收到一条错误消息“找不到预处理的 RecId。无法处理报告。表示开发错误。”

错误是因为在类SrsReportProviderQueryBuilder(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)为空有什么原因吗?

【问题讨论】:

    标签: reporting axapta dynamics-ax-2012


    【解决方案1】:

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

    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);
    

    对于DataProviderclWHSPickListShippingDP,通常如果报表使用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 以查看其一般使用方式。

    【讨论】:

    • 好吧,所以我试过了,但没有成功...首先,如果我删除设置 parmRdpName 的行,我的 DataProvider 不会运行。并且删除其他两行似乎并没有改变任何东西,我仍然得到同样的错误。此外,我的 DP 扩展了 SrsReportDataProviderPreProcess 并且存在 SRSReportParameterAttribute。
    • 好的,所以我发现了问题所在。我的错误,没有人能找到它,因为我的代码的那部分不在我的问题中。我仍然会赞成你的回答,因为你教了我一些我不知道的东西,但我没有足够的声誉。还是谢谢!
    • 很高兴你想通了,希望我对整个过程有所帮助!
    【解决方案2】:

    好吧,现在我觉得在这个错误上花了这么多时间很愚蠢,因为它是如此微小的事情......

    错误的那一行是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 2014-02-24
      • 2023-03-07
      相关资源
      最近更新 更多