背景:当创建完销售订单(SO)之后,如果要生产产品,必然要创建生产订单(PR),此时我们可以点击SO页 面创建生产订单按钮。想要PR生效则需要点击我们系统里面的POST按钮,此时问题来了...
问题:当点击POST按钮时我们必须判断SO的状态是否为OPEN或者SHIPPED,否则,则弹窗予以警告。
解决方法:
前台部分代码:
function checkReferenceSOStatus(name){ clickName = name; var params = {}; params.commandName="checkReferenceSOStatus"; params.referenceSONumber=document.getElementById("PB___referenceSONumber").value; Ext.Ajax.request({ url : PRODUCTION_URLMAP.MTOPROD_ORDER_LIST_JSON, //应该是个servlet吧 params: params, async: false, //这里填true和false差别在哪里啊? method : "POST", success : checkReferenceSOStatus_callback }); } function checkReferenceSOStatus_callback(returnVal) { var obj = Ext.util.JSON.decode(returnVal.responseText); if (obj.soStatus == 'ORDER_DRAFT'||obj.soStatus=='ORDER_CANCELLED'||obj.soStatus=='ORDER_CLOSED'){ isMTSSalesOrderOpenOrShipped = false; alert("${erp:getResStr3(requestScope.session,'MTOProductionOrder.Prop.Post.CheckSOStatus')}"); }else{ isMTSSalesOrderOpenOrShipped = true; page_action(clickName); } } var isMTSSalesOrderOpenOrShipped = false; function page_action(name) { clickName = name; if(name == "POST"){ var referenceSONumber = document.getElementById("PB___referenceSONumber").value; if (!Strings.isEmpty(referenceSONumber) && !isMTSSalesOrderOpenOrShipped){ checkReferenceSOStatus(name); return; } } }
后台部分代码:private void checkReferenceSOStatus() { String referenceSONumber = requestBean.getValue("referenceSONumber"); OrderHeader orderHeader = orderService.loadOrderHeaderBySequence(referenceSONumber); JSONObject qs = new JSONObject(); qs.put("soStatus", orderHeader.getCurrentStatus().getStatusItem().getId()); contextMap.put("JSONString", qs.toString()); //注意:保存的是JSON对象,以便在前台取值 }
----以上都是个人学习用,欢迎大家指正,本人新手