通达OA2015版支持多种前端触发器的使用,之前的版本只支持后端处理,即通过转交动作将表单中的数据POST到触发器的php文件中,2015也保留了这种方法,但这种方法当检查数据合法性时,显示不够灵活,通常的做法是,触发器分析$_POST数组中的数据,若不合要求,则通过echo 返回按钮,重新将整个表单打开一次;当用户比较多,这种方式会对web服务器会造成较大影响;
因此,对于复杂的数据合法性检查,能用前端的尽量用前端实现,下面的操作步骤以母件工作流转交某个步骤时,要检查其子件工作流是否结束做为应用场景,当有未结束的子件工作流时,母件工作流不允许转交下一步,具体操作及代码如下:
第一步:创建触发器目录
打开X:\MYOA\webroot\general\workflow\plugin\turn,创建新目录chkSubIsOver
第二步:创建触发器配置文件
打开X:\MYOA\webroot\general\workflow\plugin\turn\chkSubIsOver,创建chkSubIsOver.ini,内容如下:
NAME = 子流程是否全部完成
DESC = 母件转最后下一步时,检查子件是否已全部完成
BEFORE_FRONTEND =BEFORE_FRONTEND.php
第三步:创建触发器文件
创建 E:\MYOA\webroot\general\workflow\plugin\turn\chkSubIsOver\BEFORE_FRONTEND.php文件,文件内容:
<script>
jQuery.ajaxSetup({
type:"POST",
dataType:"json",
async:false,
cache:false
});
function chkSubIsOver_before_callBack_<?php echo $PRCS_KEY_ID;?>(){
var run_id=jQuery("input[name='run_id']:eq(0)").val(); //获取流水号
var flow_id=jQuery("input[name='flow_id']:eq(0)").val(); //获取流程ID号
//获取表单内控件值 如果需要对表单某个数据做较验,可以使用以下部份
//var myform=jQuery(window.frames["work_form_data"].document).find("form[name='form1'");
//var val=myform.find(":input[name='DATA_2']").val();
//检查子件是否结束
var chckflag=true;
jQuery.ajax({
url:"/userext/index.php?c=workflow&m=chkSubisOver",
data:{flow_id:flow_id,run_id:run_id},
success:function(res){
if (!res){
alert("获取子件数据失败");
chckflag=false;
}
if (!res.rescode){
alert("该母件的子件还未结束\r子件流水号:\r"+res.resmsg);
chckflag=false;
}
}
});
if (!chckflag){
return false;
}
}
</script>
确定后保存
第五步:验证效果