通达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,流程及表单自定义好用的类
通达OA-通用版-V12,流程及表单自定义好用的类 V1.0 V1.0 日期:2023年10月19日 新建类文件,将下面代码复制到文件中即可。 功能说明: 1、根据flow_id,可以获取流程表单相关的表名、及字段名。 2、根据run_id࿰…...
如何在vue中实现图片懒加载
1.什么是图片懒加载 概念当图片还未出现在浏览器的可视区,图片并不加载src所引入的图片资源。只有当图片出现在可视区时,才加载图片资源。 好处:当页面中需要许多图片进行展示。但是,在我们不可视区的图片我们可以进行图片懒加载…...
Mac 远程桌面软件
对于使用 Mac 计算机和笔记本电脑的企业来说,适用于 Mac 的远程桌面软件变得越来越重要,随着远程工作变得越来越普遍,IT 管理员和组织需要一种安全的方式来访问和修复问题、处理紧急任务以及监控远程工作站的状态,为了促进远距离协…...
EPLAN_005#宏边框、页宏、窗口宏/符号宏
一、宏边框 红边框不能用,变成了灰色 要在项目属性中更改位宏项目——才能使用宏边框功能 注意:创建宏边框时候要打开——显示隐藏元素 框选目标后,双击红边框的边——弹出红边框创建属性对话框——输入名称——更改变量ABC等 最后——自动…...
如何正确地使用ChatGPT(角色扮演+提示工程)
如何正确地使用ChatGPT 一、ChatGPT介绍二、准备工作2.1 获取ChatGPT环境2.2 确定使用ChatGPT的目标和需求 三、重要因素3.1 角色赋予3.2 提示工程 四、正确案例 一、ChatGPT介绍 可以查阅ChatGPT快速入门 二、准备工作 2.1 获取ChatGPT环境 国外的有OpenAI和微软NewBing等…...
MySQL服务安装与登录
(1)以管理员身份启动命令提示符: (2)定位到安装目录的bin目录下(根据自己的安装路径进行调整即可)。先输入“d:”,定位到d盘,输入cd空格文件路径(直接复制粘贴…...
论文阅读之《Kindling the Darkness: A Practical Low-light Image Enhancer》
目录 摘要 介绍 已有方法回顾 普通方法 基于亮度的方法 基于深度学习的方法 基于图像去噪的方法 提出的方法 2.1 Layer Decomposition Net 2.2 Reflectance Restoration Net 2.3 Illumination Adjustment Net 实验结果 总结 Kindling the Darkness: A Practical L…...
性能测试基础知识及性能指标
前言:最近公司接了个项目,领导开会突然来了句,让我出一份性能测试方案,后面性能测试工作交给我!我心里想之前面试没要求会这个啊(最少得加钱才能做吧~,没办法既然下达了指令,那就只能…...
ArcGIS笔记10_如何创建渔网?
本文目录 前言Step 1 确定渔网的精度单位Step 2 有底图时创建渔网的操作 前言 ArcGIS中的渔网是一个很好用的工具,它可以创建出规规整整的小格子,每个小格子都对应一个标注点,可以将原本散乱的数据规整化,如下图: Ste…...
Jmeter安装(快速入门)
大家好我是苏麟今天简单聊一下Jmeter . Jmeter Jmeter官网 : Apache JMeter - Download Apache JMeter 安装Jmeter Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 下载 : 官网下载 : 网盘自取 : 链接:…...
一个react前端项目中的配置文件作用解析
前端框架中用到的配置文件 .editorconfig, .gitignore, .npmrc, .prettierignore, .prettierrc, .umirc.local.ts, .umirc.ts, package-lock.json, package.json, README.md, tsconfig.json, typings.d.ts, webpack.config.js.editorconfig:用于定义代码编辑器的配…...
MAC 配置 Maven
Maven 是一个流行的 Java 项目管理和构建工具,它可以帮助我们管理项目依赖、构建和发布等过程。本文将指导您在 MAC 上配置 Maven 的详细步骤。 1、下载 Maven 首先,从 Maven 官方网站下载最新版本的 Maven 安装包。下载完成后,将其解压到您…...
vue3.0 + element plus upload图片 上传
直接上图吧: 记录一下,方便后续遇到啥问题...
Leetcode 18:四数之和
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复)。 解题思路:…...
word误删除的文件怎么恢复?恢复办法分享
在日常工作和学习中,我们常常会使用到Word来撰写文章、毕业论文、方案等。然而,我们可能会遇到Word误删文件的情况,令我们陷入恐慌,特别是这个文件很重要时。幸运的是,有办法找回。下面一起来看下word误删除的文件怎么…...
提高Qt开发软件运算性能提升
编译器minGW32,release版本,大部分操作在线程循环里面更容易体现出来 1、网上有说opencv像素处理使用直接获取Mat对象的像素块的数据指针,例如 for (int row 0; row < h; row) { uchar* uc_pixel image.data row * image.step; for (int col …...
WordPress SMTP邮件发送插件 Easy WP SMTP
Easy WP SMTP是一款 WordPress 邮件发送插件,WordPress 中经常用到邮件发送,包括新注册用户的邮件通知、找回密码通知、评论回复通知等。因为云服务器默认不启用 SMTP功能,所以需要安装 SMTP插件来解决这个问题。 SMTP 主机:smtp.…...
大咖云集,智慧碰撞|第 18 届 CLK 大会完整议程揭晓(内附报名通道)
自 2006 年以来,在国内 Linux 技术爱好者和行业公司的鼎力支持下,中国 Linux 内核开发者大会已走过 17个年头,是中国 Linux 内核领域最具影响力的峰会之一。今年的中国内核开发者大会依然秉承历届理念,以“自由、协作、创新”为理…...
springweb+vue前后端分离开发,集成部署
背景: 在自己做测试的时候,由于需要项目和项目的前端页面使用同样接口访问,所以需要将前端代码部署到后端项目下。前端采用vue,后端采用springboot。 首先时建立一个vue项目,这个可以参照网上的案例,创建方…...
美芯片禁令再次扩大,波及英伟达、AMD以及intel等科技公司 | 百能云芯
拜登政府17日宣布,计划停止英伟达(Nvidia)、超微半导体以及英特尔等科技公司设计的先进AI芯片输出中国大陆,英伟达(Nvidia)昨日股价重挫4.68%至每股439.38美元;天风国际证券分析师郭明錤表示&am…...
Aivy OS:构建本地化、人格化数字生命体的完整指南
1. 项目概述:一个真正属于你的本地数字生命体 如果你和我一样,对市面上那些“用完即走”的AI助手感到厌倦,觉得它们更像是功能强大的工具,而非一个可以信赖的伙伴,那么Aivy OS的出现,可能会让你眼前一亮。…...
副业收入超过主业:软件测试从业者如何打造第二曲线?
当主业增长触及天花板在技术日新月异的今天,软件测试工程师的职业发展路径正变得愈发清晰,同时也可能逐渐陷入一种“专业舒适区”。资深测试工程师、测试架构师、测试经理……沿着这条既定路线攀登,收入的增长曲线往往在达到一定高度后趋于平…...
VS Code MCP权限体系设计:RBAC+策略即代码(Policy-as-Code)双模管控,附GRC兼容配置清单
更多请点击: https://intelliparadigm.com 第一章:VS Code MCP权限体系设计:RBAC策略即代码(Policy-as-Code)双模管控,附GRC兼容配置清单 VS Code 通过 Microsoft Cloud Platform(MCPÿ…...
探索 MCP (Model Context Protocol):构建智能体与外部工具的桥梁
探索 MCP (Model Context Protocol):构建智能体与外部工具的桥梁 摘要 随着大语言模型(LLM)能力的增强,如何让模型安全、高效地访问外部数据和工具成为了人工智能领域的核心挑战。Model Context Protocol (MCP) 作为一种新兴的标准…...
为什么92%的Python量化团队在Tick级回测上栽跟头?——高频引擎时间对齐、订单簿重建与事件驱动闭环详解
更多请点击: https://intelliparadigm.com 第一章:Tick级回测失败的根源诊断与行业现状剖析 Tick级回测是量化策略验证的黄金标准,但实践中失败率高达68%(据2023年QuantResearch Survey统计)。其核心矛盾在于&#x…...
【Redis实战】分布式锁的N种实现方案对比与避坑指南
【Redis实战】分布式锁的N种实现方案对比与避坑指南在高并发场景下,分布式锁是保证数据一致性的关键技术。本文将从原理到实战,详细讲解分布式锁的各种实现方案。一、为什么需要分布式锁?假设这样一个场景:双十一秒杀活动…...
MATLAB极坐标图实战:用polar函数绘制复杂花瓣图案(附完整代码)
MATLAB极坐标艺术:用数学方程绘制曼陀罗花瓣图案 在数据可视化的艺术领域,MATLAB的极坐标绘图功能就像一位隐藏的艺术家。当大多数人还在用条形图和折线图呈现枯燥的数据时,聪明的工程师们已经发现:通过精心设计的极坐标方程&…...
Clinstagram:为AI智能体设计的Instagram双后端自动化工具
1. 项目概述:Clinstagram,一个为AI智能体设计的Instagram命令行工具 如果你正在构建一个需要与Instagram交互的AI智能体,或者你厌倦了在官方API的严格限制和第三方私有API的封号风险之间反复横跳,那么Clinstagram这个工具的出现&a…...
告别复制粘贴:深入理解TMS320F28335的GPIO配置寄存器(MUX/DIR/PUD)
深入解析TMS320F28335 GPIO寄存器:从硬件原理到高效编程实践 在嵌入式系统开发中,GPIO(通用输入输出)接口是最基础却至关重要的外设模块。对于TMS320F28335这款广泛应用于工业控制、电机驱动等领域的DSP芯片而言,深入理…...
BLHeli编程适配器制作指南:低成本DIY专业烧录工具
BLHeli编程适配器制作指南:低成本DIY专业烧录工具 【免费下载链接】BLHeli BLHeli for brushless ESC firmware 项目地址: https://gitcode.com/gh_mirrors/bl/BLHeli BLHeli是一款广泛应用于无刷电调的开源固件,为了对电调进行固件升级和参数配置…...
