你有一个报告,你想运行在Microsoft Dynamics AX。您已经选择了要在其上运行报表的记录,为什么还要在参数屏幕上再次选择它呢?本指南向您展示如何通过单击按钮直接启动报表,而不必手动选择报表参数。
假设您已经从Visual Studio创建并部署了报表到AX。关键是在单击报表按钮并使用报表控制器类上的继承方法来自动填充参数时,捕获将用作参数的数据。你的报表控制器类应该扩展SrsReportRunController类:
class BHSTestRC extends SrsReportRunController { }
报表控制器类的主要方法应类似于以下内容:
public static void main(Args _args) { BHSTestRC controller = new BHSTestRC(); BHSDataTable dataTable; dataTable = _args.record() as BHSDataTable; controller.parmArgs(_args); controller.parmReportName(ssrsReportStr(SSRSReportName, Report)); controller.parmShowDialog(false); controller.startOperation(); }
在上面,您使用_arg. record()函数将传递到这个类的参数转换为您想要从其中提取数据的表类型。然后将args传递到新创建的控制器中,并决定运行哪个SSRS报告。
为了使报表在不显示参数屏幕的情况下运行,我们调用controller.parmShowDialog(false)。这将禁用参数屏幕。
最后一行将开始报告。但是报表如何知道将什么字段用于什么参数呢?通过覆盖prePromptModifyContract方法来使用相同的报告控制器类,如下所示:
protected void prePromptModifyContract() { BHSDataTable dataTable; BHSTestContract contract; if (this.parmArgs() && this.parmArgs().record()) { contract = this.parmReportContract().parmRdpContract() as BHSTestContract; dataTable = this.parmArgs().record(); contract.parmField(dataTable.dataField); } }
上面是作为args传入的表的另一个实例,同时声明了report contract类的一个实例。contract类包含报表将使用的所有参数,以及将访问字段的parm方法。
检查参数是否被传递到类中。如果是这样,创建contract类的实例,并将参数设置为数据表。然后parm从传入的参数中获得所需的数据。这一步将确保将正确的数据放入正确的参数中。
最后一步展示了如何将参数传递到类中以便在控制器中使用它们。您将希望首先创建一个运行控制器类的新输出菜单项。然后,在将用于运行报表的按钮的clicked()方法上,放置以下代码:
Args args = new Args(); args.record(BHSDataTable); new MenuFunction(menuitemOutputStr(BHSMenuItem), MenuItemType::Output).run(args);
创建一个新的Args类,然后使用数据表将一条记录分配给Args。如果您在一个表单上,网格中有一个突出显示的字段,当您引用该字段时,AX将理解您正在谈论的是已突出显示的记录。
然后,使用新创建的菜单项创建一个新的MenuFunction。最后我们调用run(args)。这是负责将args传递到控制器类的操作。您之前编写的代码将处理其余的工作!
原文:https://blog.bhsolutions.com/launch-an-ssrs-report-from-ax
留言评论
暂无留言