通达OA-通用版-V12,流程及表单自定义好用的类

通达OA-通用版-V12,流程及表单自定义好用的类

  • V1.0

V1.0

日期: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);

你可能感兴趣的:(OA系统二次开发,OA,v12,流程,表单,字段)