Axapta 获取SSRS参数窗体的对话框结果
从报表控制器对象中,我试图找出如何确定用户是否取消了SSRS报表对话框屏幕,或者他们是否点击了OK 在AX中,我试图编写一个控制器,它将执行同一报表对象的两种不同设计,两种设计都将使用相同的契约(参数)。到目前为止,我有以下代码:Axapta 获取SSRS参数窗体的对话框结果,axapta,dynamics-ax-2012,x++,Axapta,Dynamics Ax 2012,X++,从报表控制器对象中,我试图找出如何确定用户是否取消了SSRS报表对话框屏幕,或者他们是否点击了OK 在AX中,我试图编写一个控制器,它将执行同一报表对象的两种不同设计,两种设计都将使用相同的契约(参数)。到目前为止,我有以下代码: cusController controller; cusContract contract; //Run Format 1 controller = new cusController(); controller.initController(_args);
cusController controller;
cusContract contract;
//Run Format 1
controller = new cusController();
controller.initController(_args);
controller.parmReportName(ssrsReportStr(cusReport, Format1));
controller.parmShowDialog(true);
controller.startOperation();
//Run Format 2
contract = controller.parmReportContract().parmRdpContract() as cusContract;
contract.parmFormat(cusReportFormat::Format2);
controller = new cusController();
controller.initController(_args);
controller.parmReportName(ssrsReportStr(cusReport, Format2));
controller.parmShowDialog(false);
controller.parmReportContract().parmRdpContract(contract);
controller.startOperation();
当用户输入参数并点击OK时,上述操作非常有效。但是,当用户点击Cancel时,第一个报告将被取消,但由于第二个报告具有parmShowDialog(false),它不知道第一个报告已被取消。关于如何从第一个报告中捕获取消,您有什么想法吗?根据控制器类的扩展,我想您可以这样做。我见过很多不同的方法:
SysOperationStartResult result;
// Method 1
result = controller.startOperation();
if (result == SysOperationStartResult::Started ||
result == SysOperationStartResult::AddedToBatchQueue)
{
info("They clicked ok");
}
// Method 2
if (controller.prompt())
{
controller.run();
info("They clicked ok");
}
非常感谢,我不知道startOperation()的返回类型,这就成功了。很高兴能帮上忙!事实上,我收回了。这似乎不起作用。当我点击报告上的关闭按钮时,结果返回为已取消,即使报告已执行。回到绘图板:/n您是否尝试了第二种方法?报告将执行并返回“已取消”似乎是不对的……似乎有其他事情发生了。需要完整地查看代码才能真正了解。