起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3370|回复: 1

[结贴] 怎么在Be3.0以上版本中实现同步执行事件

[复制链接]

96

主题

293

帖子

964

积分

高级会员

Rank: 4

积分
964
QQ
发表于 2017-5-11 15:29:32 | 显示全部楼层 |阅读模式
版本: BeX5V3.5 小版本号: 3.6
数据库: MySQL 服务器操作系统: Windows 应用服务器: Tomcat
客户端操作系统: Windows 8 浏览器: Chrome
我在打开流程流对话框之前事件中写方法去调用action查询数据的时候,发现对话框在我数据还没有返回来的时候就打开了,这个怎么让方法能够同步执行呢,总不能我数据还没有返回来就打开对话框吧,也就是蓝色字体部分那段代码是在弹出框打开后才执行的。我想要的是蓝色代码部分先执行,然后根据返回的数据再去判断是否打开对话框。代码如下:
        打开流程流对话框之前事件
         Model.prototype.processBeforeOpenDialog = function(event){
                var detailData = this.comp("detailData");
                var count = detailData.getCount();
                if(count==0){
                        justep.Util.hint("借款信息最少需要填写一条!",{position:"top",style:"background-color:red"});
                        event.cancel = true;
                }else{
                        this.queryAvailableAmount(event);//在这里调用action进行数据查询
                }
               
        };

         queryAvailableAmount方法
           // 查询可用预算额度
        Model.prototype.queryAvailableAmount = function(event){
                var mainData = this.comp("mainData");
                var detailData = this.comp("detailData");
                var formBizDate = mainData.getValue("formBizDate");
                formBizDate = userUnit.formatValue(formBizDate);
                if(formBizDate == ""){
                        this.hintMsg("请选择[单据业务日期]");
                        return;
                }
                var year = formBizDate.toString().substring(0, 4);
                var isProcSuccess = true;
                var postData = '{' + '"inputList" : [{}';
                var paraArray = [];
                var isContinueProc = true;
                var msg = "";
                detailData.each(function(param) {
                        var serialNbr = param.row.val("serialNbr");
                        var costCenterCode = param.row.val("costCenterCode");
                        var projectCode = param.row.val("projectCode");
                        var budgetItemCode = param.row.val("budgetItemCode");
                        costCenterCode = userUnit.formatValue(costCenterCode);
                        if(costCenterCode == ""){
                                msg += "[序号:" + serialNbr + "]->成本中心不能为空!";
                                isContinueProc = false;
                                param.cancel = true;
                        }
                        projectCode = userUnit.formatValue(projectCode);
                        budgetItemCode = userUnit.formatValue(budgetItemCode);
                        if(budgetItemCode == ""){
                                msg += "[序号:" + serialNbr + "]->预算科目不能为空!";
                                isContinueProc = false;
                                param.cancel = true;
                        }
                        postData = postData + ",";
                        postData = postData + '{"gjahr":"' + year + '",' + // 年度:2017
                                                                   '"kostl":"' + costCenterCode + '",' + // 成本中心: 1452000000
                                                               '"aufnr":"' + projectCode + '",' + // 内部订单: 1100R00001
                                                                   '"fipex":"' + budgetItemCode + '"' + // 预算科目: FY0301
                                                              '}';
                });
                if(isContinueProc == false){
                        this.hintMsg(msg );
                        return;
                }
                postData = postData + ']}';
                var contexts = this.getContext();
                userSAP.invokAction(postData,"queryAvailableAmountAction",detailData,"availableamount",contexts,event);
                return isProcSuccess;
        }
          下面是要调用的action
           invokAction :function(postData,action,data,column,contexts,event){
                                var params = new biz.Request.ActionParam();
                                params.setString('postData', postData);
                                biz.Request.sendAsyncBizRequest ({
                                        dataType : "json",
                                        context : contexts,//这个在Be3.0以上版本上是必须的
                                        action : action,
                                        parameters : params,
                                        directExecute:true,
                                        callback : function(result) {
                                                if (result.state){

                                                        if(result.response=="bad"){
                                                                userUnit.hintMsg("SAP检查可用性预算出错,请联系管理员处理!");
                                                                event.cancel = true;
                                                        }else{
                                                                var jsonArrayTxt = result.response;// 返回的数据
                                                                var dataList = jQuery.parseJSON(jsonArrayTxt);
                                                                if (dataList != null && dataList.length > 0) {
                                                                        for (var i = 0; i < dataList.length; i++) {
                                                                                data.each(function (param){
                                                                                        var fid = userUnit.formatValue(param.row.val("formCommon_application"));//内部订单编码(项目编码)
                                                                                        var projectCode = userUnit.formatValue(param.row.val("projectCode"));//内部订单编码(项目编码)
                                                                                        var budgetItemCode = userUnit.formatValue(param.row.val("budgetItemCode"));//预算科目编码
                                                                                        var costCenterCode = userUnit.formatValue(param.row.val("costCenterCode"));//成本中心编码
                                                                                        if(dataList.kostl===costCenterCode&&dataList.aufnr===projectCode&&dataList.fipex===budgetItemCode){
                                                                                                data.setValueByID(column,dataList.sapAmount,fid);
                                                                                        }
                                                                                });
                                                                        }
                                                                }
                                                        }
                                                }else {
                                                        throw new Error("调用失败!|" + result.response.message);
                                                        event.cancel = true;
                                                }
                                        }
                                });
                        },

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-5-11 16:18:06 | 显示全部楼层
把action改为同步调用,用sendBizRequest (object options)
[推荐使用]向Biz服务端发送同步Action请求,使用json格式
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 15:31 , Processed in 0.110785 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表