日期:2023年10月19日
新建类文件,将下面代码复制到文件中即可。
功能说明:
1、根据flow_id,可以获取流程表单相关的表名、及字段名。
2、根据run_id,可以获取流程表单相关的的表名、字段名、及流程表单中用户数据。
mainAndList=$args[0];
break;
case 2:
$this->mainAndList=$args[0];
$this->run_id=$args[1];
$data=$this->getBpmRun();
$this->flow_id=$data['FLOW_ID'];
break;
case 3:
$this->mainAndList=$args[0];
$this->run_id=$args[1];
$this->flow_id=$args[2];
break;
default:
break;
}
}
/**
* getBpmRun
* 说明:根据流水号run_id,获取流程的信息
* @return array 一维数组
*/
public function getBpmRun(){
$data=array();
$sql=sprintf('select * from bpm_run where RUN_ID=%d',$this->run_id);
$res=exequery(TD::conn(),$sql);
$data=mysqli_fetch_assoc($res);
return $data;
}
/**
*getSortAndDesc
* @return
array(
'main'=>'表单名称',
'detail_828'=>'列表控件名称'
)
*/
public function getSortAndDesc(){
$data=array();
$sql=sprintf('select * from bpm_variable_sort where FLOW_ID=%d',$this->flow_id);
$res=exequery(TD::conn(),$sql);
while ($row=mysqli_fetch_assoc($res)) {
if($row['TYPE']=='main'){
$type='main';
}else{
$type=$row['TYPE'].'_'.$row['ID'];
}
$data[$type]=$row['DESC'];
}
return $data;
}
/**
* getBpmTableAndColumn
* 说明:根据流程flow_id,获取流程的表名及字段名、列表控件的表名及字段名
* @return
array(
0=>array(//main的键值
'desc'=>'表单名称',
'tableNameArr'=>array(
'bpm_data_537',
'bpm_data_537_child'//如果表单中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18951'=>'申请日期',
'data_m18954'=>'报销人'
)
),
1=>array(//列表控件名称1键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_828',//如果存在列表控件
'bpm_data_537_list_828_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18984'=>'派车单号',
'data_m18985'=>'报告编号'
)
),
2=>array(//列表控件名称2键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_829',//如果存在列表控件
'bpm_data_537_list_829_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m19004'=>'派车单号',
'data_m19005'=>'报告编号'
)
)
)
*/
public function getBpmTableAndColumn(){
//表名前缀
$tbPre=$this->tbNamePre.$this->flow_id;
//返回数据
$data=array();
$sql=sprintf('select * from bpm_variable_sort where FLOW_ID=%d',$this->flow_id);
$res=exequery(TD::conn(),$sql);
while ($row=mysqli_fetch_assoc($res)) {
$tableName='';
$tableNameArr=array();
$tableColumArr=array();
if($row['TYPE']=='main'){
$type=array_search('main',$this->mainAndList);
$tableName=$tbPre;
}else{
$type=array_search($row['DESC'],$this->mainAndList);
$tableName=$tbPre.'_list_'.$row['ID'];
}
if($type===false){
continue;
}
array_push($tableNameArr,$tableName);
$sql2=sprintf('select * from bpm_variable where SORT_ID =%d',$row['ID']);
$res2=exequery(TD::conn(),$sql2);
$i=0;
while ($row2=mysqli_fetch_assoc($res2)) {
$tableColumArr[$row2['NAME']]=$row2['DESC'];
if($i===0&&$row2['TYPE']=='text'){ //如果有一个控件类型为text,则存在xx_child子表
$tableName=$tableName.'_child';
array_push($tableNameArr,$tableName);
$i++;
}
}
asort($tableNameArr);//确保子表_child在主表后面
ksort($tableColumArr);//字段名升序。
$data[$type]=array(
'desc'=>$row['DESC'],
'table'=>$tableNameArr,
'cols'=>$tableColumArr
);
}
ksort($data);
return $data;
}
/**
* 根据run_id,获取当前流程的表单数据
* @return
array(
0=>array(//main的键值
'desc'=>'表单名称',
'tableNameArr'=>array(
'bpm_data_537',
'bpm_data_537_child'//如果表单中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18951'=>'申请日期',
'data_m18954'=>'报销人'
),
'data'=>array(
0=>array(
'data_m18951'=>'2023年10月19日',
'data_m18954'=>'张三'
)
)
),
1=>array(//列表控件名称1键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_828',//如果存在列表控件
'bpm_data_537_list_828_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18984'=>'派车单号',
'data_m18985'=>'报告编号'
),
'data'=>array(
0=>array(
'data_m18984'=>'PCDBH-001',
'data_m18985'=>'BGBH-001'
)
)
),
2=>array(//列表控件名称2键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_829',//如果存在列表控件
'bpm_data_537_list_829_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m19004'=>'姓名',
'data_m19005'=>'开始日期'
),
'data'=>array(
0=>array(
'data_m19004'=>'李四',
'data_m19005'=>'2023年10月19日'
)
)
)
)
*
*/
public function getBpmData(){
$data=$this->getBpmTableAndColumn();
$tbArr=array();
foreach($data as $k=>$v){
$tbArr=$v['table'];
$tmp_data=array();
//查询数据
$cTbArr=count($tbArr);
if($cTbArr==1){
$sql=sprintf('select * from %s where run_id=%d',$tbArr[0],$this->run_id);
}else if($cTbArr==2){
$sql=sprintf('select * from %s as a join %s as b on a.id=b.id where a.run_id=%d',$tbArr[0],$tbArr[1],$this->run_id);
}
$res=exequery(TD::conn(),$sql);
while ($rows=mysqli_fetch_assoc($res)) {
foreach($rows as $k2=>$v2){
if($v2===null){//重置值为null的空字符串
$rows[$k2]='';
}
}
$tmp_data[]=$rows;
}
$data[$k]['data']=$tmp_data;
}
return $data;
}
}
调用示例
';
$run_id=196444;
//$data=$zztdBpmClass->getBpmTableAndColumn();
$arr=array(
'main',
'公车出行费用明细',
'自行出行费用明细'
);
$zztdBpmClass=new zztdBpmClass($arr,$run_id);
$data=$zztdBpmClass->getBpmData();
var_dump($data);