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

2023-10-19 17:36

本文主要是介绍通达OA-通用版-V12,流程及表单自定义好用的类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • V1.0

V1.0

日期:2023年10月19日
新建类文件,将下面代码复制到文件中即可。
功能说明:
1、根据flow_id,可以获取流程表单相关的表名、及字段名。
2、根据run_id,可以获取流程表单相关的的表名、字段名、及流程表单中用户数据。

<?php
/*** 日期:2023年10月19日* 说明:整合定制开发过程中常用的功能* 版本:V1.0* 适用版本:通用版V12/PHP 7.2.34* 依赖:OA系统数据库连接。include_once 'inc/auth.inc.php';或include_once 'inc/conn.php';*/
<?php
/*** 日期:2023年10月19日* 说明:整合定制开发过程中常用的功能* 版本:V1.0* 适用版本:通用版V12/PHP 7.2.34* 依赖:OA系统数据库连接。include_once 'inc/auth.inc.php';或include_once 'inc/conn.php';*/
class zztdBpmClass{//具体流程的表名前缀var $tbNamePre='bpm_data_';var $mainAndList=array();var $flow_id=0;var $run_id=0;/*** * 参数说明* $mainAndList=array(//此参数必须。*  'main',//表示当前表单,固定的,必须的*  '列表控件名称1',*  '列表控件名称2'* )* $run_id,查询流程表单的具体数据,则此参数必须。* $flow_id,查询流程数据表名称及表中的字段。传入$run_id时,可不填此参数*/function __construct(){//$mainAndList,$run_id=0,$flow_id=0$args=func_get_args();$argsnum=func_num_args();switch ($argsnum) {case 1:$this->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;}}

调用示例

<?php
require_once 'inc/auth.inc.php';
require_once 'zztdBpmClass.php';
echo '<pre>';
$run_id=196444;
//$data=$zztdBpmClass->getBpmTableAndColumn();
$arr=array('main','公车出行费用明细','自行出行费用明细'
);
$zztdBpmClass=new zztdBpmClass($arr,$run_id);
$data=$zztdBpmClass->getBpmData();
var_dump($data);

这篇关于通达OA-通用版-V12,流程及表单自定义好用的类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241325

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3