通达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

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp