Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta 获取SSRS参数窗体的对话框结果_Axapta_Dynamics Ax 2012_X++ - Fatal编程技术网

Axapta 获取SSRS参数窗体的对话框结果

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

从报表控制器对象中,我试图找出如何确定用户是否取消了SSRS报表对话框屏幕,或者他们是否点击了OK

在AX中,我试图编写一个控制器,它将执行同一报表对象的两种不同设计,两种设计都将使用相同的契约(参数)。到目前为止,我有以下代码:

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您是否尝试了第二种方法?报告将执行并返回“已取消”似乎是不对的……似乎有其他事情发生了。需要完整地查看代码才能真正了解。