通达oa应用中心使用手册(脚本编写指南)

通达OA二次开发 通达OA二次开发     2022-10-11     495

关键词:

   

   

脚本编写必备基础

   

   

1.1 什么是脚本

   

   

脚本是一段 PHP 代码,可以被应用中心执行以实现特定功能。应用中心支持通过脚本实现以下功能:

   

   

   

   

编写脚本对于应用中心来说不是必须的,但通过编写脚本却可以极大地增强应用中心的处理能力,这对于实施复杂度高、应用中心标准化功能满足不了的项目是一个很好的选择。

   

   

1.2 编写脚本需要具备哪些基础

   

   

除了要熟悉应用中心以及相关数据库表结构之外,编写脚本还需要有 PHP 编程基础, 写脚本的过程本质上写 PHP 代码的过程。因此,应用中心的实施人员需要补充些 PHP 编程知识,这对编写脚本是非常有帮助的。

   

   

1.3 应用中心库表结构

应用中心主要库表结构如下图所属:

 

1.4 应用中心控件数据结构

新版应用中心采取前后端分离方式实现,前端和后端采取规定好的数据结构进行通信, 因此用户自己编写脚本过程中读取和设置数据时要满足规定好的结构。

应用中心各控件数据结构说明如下: 单行文本、多行文本、数字文本、货币文本、自动编号:具体值,例如:

96,25.98,"2017110056"。 日期文本:类型为日期时,数据格式为 yyyy-M-d,例如:2017-11-20;类型为时间时, 数据格式为 HH:mm:ss,例如:11:07:01;类型为日期+时间时,数据格式为 yyyy-M-d HH:mm:ss,例如:2017-11-20 11:07:01。 单选框:选项值结构为:[["code","name"]],code 为代码保存值,name 为代码显示值,

例如:[["code"=>"01","name"=>"男"],["code"=>"02","name"=>"女"]];选定值为:选择后的 代码 code 值,例如:01。 多选框:选项值结构与单选框一样;选定值为:数组,数组里元素为选择后的代码 code 值,例如:["01","02"]。 下拉选择:选项值结构与单选框一样;不支持多选的选定值结构与单选框一致,支持多 选的选定值结构与多选框一致。

地址: 数 据 结 构 为 : ["prov"=>["id","name"],"city"=>["id","name"],"country"=>["id","name"],"street"],分别对应 省 、 市 、 县 以 及 详 细 地 址 , 例如: ["prov"=>["id"=>"110000","name"=>" 北 京 市"],"city"=>["id"=>"110100","name"=>"市辖区"],"country"=>["id"=>"110108","name"=>"海 淀区"],"street"=>"紫竹院路 69 号"]。 定位:数据结构为:["lat","lng","address"],分别对应纬度、经度以及具体地址,

例如: ["lat"=>39.9241,"lng"=>116.404,"address"=>"北京市东城区"]。 附件、图片:数据结构为:[["attach_id","attach_name"]],分别对应附件 ID 以及附件名 称 , 例 如 : [["attach_id"=>" 2873@1711_754692181","attach_name"=>" 报表需求开 发.docx"],["attach_id"=>" 2874@1711_303458136","name"=>" 17 版应用中心建议.docx"]]。 部门选择:数据结构为:[["dept_id","dept_name"]],分别对应部门 ID 以及部门名称, 例如: [["dept_id"=>"ALL_DEPT","dept_name"=>" 全 体 部 门 "]] , [["dept_id"=>1,"dept_name"=>"总经理"],["dept_id"=>2,"dept_name"=>"财务部"]]。

人员选择:数据结构为:[["uid","username"]],分别对应人员的 UID 以及人员真实姓名, 例如:[["uid"=>1,"username"=>"张三"],["uid"=>2,"username"=>"李四"]]。

列表:数据结构为:["flag","index","data"=>[["field_id","value"]]],解释如下: flag:新增行标识,新增行 flag 值为 new,非新增行时为空; 4 index:行 id; data:记录数据,是一个二维数组,每列数据包含 field_id 和 value,field_id 为该列 字段的 GUID,value 为该列的数值,数值结构参考之前的描述。

列表数据例子如下: [ ["flag"=>"new","index"=>" 1511236728561","data"=>[["field_id"=>"{4C022D90-83C4-5EBA-EE7B-ED1A98AFD7ED}","value"=> 2],["field_id"=>" {6FF2B352-A9D9-C1EC-414C-795016C2141D}","value"=>[11,12]]]], ["flag"=>"new","index"=>" 1511236715995", "data"=> [["field_id"=>"{4C022D90-83C4-5EBA-EE7B-ED1A98AFD7ED}","value"=>1],["field_id"=>" {6FF2B352-A9D9-C1EC-414C-795016C2141D}","value"=>[5,1]]]] ]

1.5 公共函数

系统内置了一系列公共函数可供自定义函数、自定义脚本插件使用,这些函数封装在一 个名为 APPPluginUtils 的类里,在运行时这个类会实例化为$PLUGIN_UTILS 对象,并以实 参或者变量形式传递给自定义函数、自定义插件。具体调用方式请参考后面例子。

1.5.1获得当前表单 id 方法:getFormId() 输入:无 输出:当前表单 id

1.5.2获得当前表单 guid 方法:getFormGuid() 输入:无。 输出:当前表单 guid。

1.5 1.5.3获得表单 guid 方法:getFormGuidById($i_id) 输入: $i_id 表单 id。 输出:指定表单 guid。

1.5.4 获得字段 guid 方法:getItemGuidByName($i_formid, $s_title, $s_subtitle = "") 输入:$i_formid 表单 id;$s_title 字段名称;$s_subtitle 列表子字段名称,可不传。 输出:字段 guid。

1.5.5 根据名称获得当前字段值 方法:getValueByName($s_item_name, $s_subitem_name = "", $i_seq = 1) 输入:$s_item_name 字段名称;$s_subitem_name 列表子字段名称,可不传;$i_seq 行 顺序号,默认取第一行数据。 输出:字段值。

1.5.6 获得当前字段值 方法: getValue($s_item_guid, $i_seq = 1) 输入:$s_item_guid 字段 guid;$i_seq 行顺序号,默认取第一行数据。 输出:字段值。

1.5.7 根据名称获得表单基本数据(非列表数据)或者 列表数据 方法:getRowByName($s_list_name = "", $i_seq = 0) 输入:$s_list_name 列表名称,可不传,不传时返回表单基本数据;$i_seq 行顺序号, 默认取所有数据。 输出:基本数据或者列表数据。

1.5.8 获得表单基本数据(非列表数据)或者列表数据 方法:getRow($s_list_guid = "", $i_seq = 0) 输入:$s_list_guid 列表 guid,可不传,不传时返回表单基本数据;$i_seq 行顺序号, 默认取所有数据。 输出:基本数据或者列表数据。

1.5.9 设置字段数据 方法:setValue($s_item_guid, $value, $i_seq = 1) 输入:$s_item_guid 字段 guid;$value 字段值;$i_seq 记录行顺序号。 输出:无。

1.5.10 设置字段选项数据 方法:setOptionValues($s_item_guid, $arr_options, $i_seq = 1) 输入:$s_item_guid 字段 guid;$arr_options 选项数组;$i_seq 记录行顺序号。 输出:无。

1.5.11 清除列表数据 方法:function clearDetailTable($s_item_guid) 输入:$s_item_guid 字段 guid。 输出:无。

1.5.12 获得应用中心数据库连接 方法:function getDb() 输入:无。 输出:应用中心数据库连接。 根据数据库连接操作数据库,常见方法举例如下: $command = $connection->createCommand('SELECT * FROM post'); $posts = $command->queryAll(); $post = $command->queryOne(); $command = $connection->createCommand('UPDATE post SET status=1'); $command->execute(); $command = $connection->createCommand('SELECT * FROM post WHERE id=:id'); $command->bindValue(':id', $_GET['id']); $post = $command->query();

1.5.13 获得数据源里配置的数据库连接 方法:function getOtherDB($s_sername, $s_db = "") 输入:$s_sername 数据源名称,在系统管理》数据源管理中设置;$s_db 数据库名称, 不传时使用数据源里设置的数据库。 输出:数据库连接。

1.5.14 根据表单名称获得表单 id 方法:function getFormIdByName($s_app, $s_form) 输入:$s_app 应用名称;$s_form 表单名称。 输出:表单 id。

1.5.15 根据表单 guid 获得表单 id 方法:function getFormIdByGuid($s_guid) 输入:$s_guid 表单 guid。 输出:表单 id。

1.5.16 根据字段 GUID 获得字段 ID 方法:function getItemIdByGuid($s_guid) 输入:$s_guid 字段 guid。 输出:字段 id。

1.5.17 根据字段名称获得字段 ID 方法:function getItemIdByName($i_formid, $s_title, $s_subtitle = "") 输入:$i_formid 表单 id;$s_title 字段名称;$s_subtitle 列表子字段名称,可不传。 输出:字段 id。 9 自定义函数

1.6 概述 应用中心提供了大量的标准函数,通过组合这些标准函数可以实现各种复杂度不一的数 据处理。此外,应用中心还提供了自定义函数功能,方便用户自行扩充数据处理功能。自定 义函数语法如下: MYFUNC():返回由指定的自定义函数处理后的结果。例如: MYFUNC("get_aux_quantity")。 处理引擎命名规则:XXX 名称.func,对应的实现文件为:XXX 名称.func.php,例如: MYFUNC("get_aux_quantity")指定处理引擎为 get_aux_quantity.func,对应的实现文件为: get_aux_quantity.func.php。 引擎实现文件存放路径为:webroot\general\appbuilder\modules\appcenter\plugin\表单 id, 例如:webroot\general\reportshop\utils\plugins\1。 如何查看表单 id?点击该表单设计界面,浏览器地址栏上会显示 formId=XXX,XXX 即为该表单 id。 注意:自定义函数只能用在填充表达式中,不能用在筛选条件中。

1.7 输入参数与输出结果 应用中心调用自定义函数时,将给自定义函数传递以下实参(即自定义函数的输入参 数): $PLUGIN_UTILS:插件公共对象,包含了访问公共函数接口; 自定义函数输出结果为计算结果值。

1.8 举例 以倍数换算为例,举例说明如何使用自定义函数。首先,定义如下提取触发器:

 

其中,MYFUNC("calculate_it")为自定义函数。处理引擎定义为:calculate.func。引擎实现文 calculate.func.php 包含自定义函数 calculate_it,其脚本如下: /** 计算基数根据陪数翻番后的结果 @param $PLUGIN_UTILS 插件公共对象,提供公共方法  

   

   

function calculate_it($PLUGIN_UTILS){

   

$i_basic = $PLUGIN_UTILS->getValueByName("基数"); $i_power = $PLUGIN_UTILS->getValueByName("倍数"); $i_result = $i_basic;

   

while($i_power > 1){

   

$i_result *= $i_basic;

   

$i_power--;

   

}

   

return $i_result;

   

}

   

运行一结果如下图所示:

   

自定义提取或回填引擎

   

   

1.9 概述

   

   

自定义函数仅在触发器的局部实现了自定义处理逻辑。除此之外,应用中心还支持在整个触发器范围内自定义处理逻辑。要实现整个触发器范围内的自定义处理,需要满足以下条件:

   

如果是提取触发器,填充方式里除了匹配之外,其他填充方式不得存在。

   

如果是回填触发器,则无需定义更新方式。

   

自定义提取或者回填处理引擎命名规则为:XXX 名称,对应的实现文件为:XXX 名称.php,例如:处理引擎为 get_goods_lot,对应的实现文件为:get_goods_lot.php

   

引擎实现文件存放路径为:webroot\general\appbuilder\modules\appcenter\plugin \模板 id例如:webroot\general\appbuilder\modules\appcenter\plugin \1

   

   

1.10 输入参数与输出结果

   

   

应用中心传递给脚本引擎的参数,即引擎文件输入参数为:

   

   

注意:由于自定义提取或回填脚本引擎是被嵌入到应用中心里一起执行的,因此引擎里用的变量尽可能加前缀" plugin_ "并采用小写形式,例如 $plugin_i $plugin_str $plugin_arr_datas 等,以区别于应用中心里所使用的变量。

   

   

1.11 举例

   

   

以初始化数据为例,举例说明如何使用脚本引擎实现自定义提取逻辑,触发器定义如下:

 

   

处理引擎定义为"fill_it",填充方式空着,即什么都不定义。 引擎脚本文件 fill_it.php 包含以下内容:

   

<?php

   

$plugin_s_select =

   

$PLUGIN_UTILS->getItemGuidByName($PLUGIN_UTILS->getFormId(), "寄送方式");

   

$PLUGIN_UTILS->setOptionValues($plugin_s_select,

   

[["code"=>"","name"=>""],["code"=>"01","name"=>"自提"],["code"=>"02","name"=>"邮寄"],["code"=>"03","name"=>"送达"]]);

   

$PLUGIN_UTILS->setValue($plugin_s_select, "01");

   

$plugin_s_list = $PLUGIN_UTILS->getItemGuidByName($PLUGIN_UTILS->getFormId(), "列表 ");

   

$plugin_s_guid = $PLUGIN_UTILS->getItemGuidByName($PLUGIN_UTILS->getFormId(), "列表 ", "发票名称");

   

$plugin_s_guid2 = $PLUGIN_UTILS->getItemGuidByName($PLUGIN_UTILS->getFormId(), "列表", "发票号");

   

$PLUGIN_UTILS->clearDetailTable($plugin_s_list);

   

$PLUGIN_UTILS->setValue($plugin_s_guid, "充值卡");

   

   

$PLUGIN_UTILS->setValue($plugin_s_guid2, 19918125); $PLUGIN_UTILS->setValue($plugin_s_guid, "物业费", 2); $PLUGIN_UTILS->setValue($plugin_s_guid2, 19918126, 2); $PLUGIN_UTILS->setValue($plugin_s_guid, "采暖费", 3); $PLUGIN_UTILS->setValue($plugin_s_guid2, 19918127, 3);

   

?>

   

以回写发票信息为例,举例说明如何使用脚本引擎实现自定义回填逻辑,触发器定义如下:

   

 回写条件和更新方式不定义。处理引擎写上 back_it。 脚本引擎文件 back_it.php 包含如下内容:

   

<?php

 //把本表单列表数据回填到目标表单的列表中

   

//回写目标

   

$plugin_i_target_formid = $PLUGIN_UTILS->getFormIdByName("特性展示", "test112102");//目标表单 id

   

$plugin_i_target_list_id =

   

$PLUGIN_UTILS->getItemIdByName($plugin_i_target_formid, "列表");//

   

目标列表 id

   

$plugin_i_target_fph_id =

   

$PLUGIN_UTILS->getItemIdByName($plugin_i_target_formid, "列表", "发票号");//目标字段发票号 id

   

$plugin_i_target_bz_id =

   

$PLUGIN_UTILS->getItemIdByName($plugin_i_target_formid, "列表", "

   

");//目标字段说明 id

   

//本表单

   

$plugin_i_source_fph_id =

   

$PLUGIN_UTILS->getItemIdByGuid("{C55A3264-04D4-297B-7685-26AFE7FE 10C2}");//本表单字段发票号 id

   

$plugin_i_source_fpmc_id =

   

$PLUGIN_UTILS->getItemIdByGuid("{B8240BDB-5A0B-21F3-D676-2E9A07DC 36CF}");//本表单字段发票名称 id

   

////本表单列表数据

   

$plugin_arr_row = $PLUGIN_UTILS->getRowByName("列表"); if(!empty($plugin_arr_row)){

   

foreach($plugin_arr_row as $plugin_row){ $sql = "select id from

   

app_data_{$plugin_i_target_formid}_list_{$plugin_i_target_list_id}

   

where

   

col_$plugin_i_target_fph_id='{$plugin_row["col_$plugin_i_source_f

   

ph_id"]}'";

 $plugin_target_row =

   

$PLUGIN_UTILS->getDb()->createCommand($sql)->queryOne();

   

if(!empty($plugin_target_row)){

   

$plugin_s_value = "发票号:

   

{$plugin_row["col_$plugin_i_source_fph_id"]},发票项目:

   

{$plugin_row["col_$plugin_i_source_fpmc_id"]}";

   

$sql = "update

   

app_data_{$plugin_i_target_formid}_list_{$plugin_i_target_list_id}

   

set col_$plugin_i_target_bz_id='$plugin_s_value' where

   

id=$plugin_target_row[id]";

   

$PLUGIN_UTILS->getDb()->createCommand($sql)->execute();

   

}

   

}

   

}

   

?>

通达oa用户操作手册

第四章通达OA用户手册4.1任务中心功能介绍图4.1-1按任务的紧急程度及时间顺序分组,方便快速查看、办理任务,支持对任务的推迟、恢复、忽略等操作;以时间轴显示方式呈现当日工作日程安排情况;时间、天气、限行尾号,... 查看详情

通达oa用户操作手册

4.3业务流程平台业务流程平台的详细使用介绍,详见《OfficeAnywhere2017业务流程平台使用详解》,此处不再赘言。4.4工作流工作流的详细使用介绍见《OfficeAnywhere2017工作流使用详解》。4.4.1新建工作图4.4-1进入【工作流】-【新建工... 查看详情

通达云oa故障

参考技术A通达云oa故障解决方案:用admin用户进入系统后,系统管理-〉数据库管理-〉选择数据库脚本导出(全选),然后把导出的脚本解压后,用记事本打开脚本,速度有点慢耐心等待一会,打开后,查找替换功能查找\'BOX_NO(... 查看详情

oa选型

...型,提供参考,因为笔者使用OA六年以上,泛微、致远、通达、蓝凌、自主开发OA都使用过。企业信息化项目选型很关键,一个适合的产品,高效的实施团队会让实施事半功倍。说一说主流:泛微:技术更加灵活,表单可以写JS脚... 查看详情

小飞鱼通达二开小飞鱼oa开发案例集锦目录(持续更新)

工作流二次开发小飞鱼通达二开《小飞鱼工作流超级管理中心》助你流程管理效率轻松提升十倍+!小飞鱼通达二开通达OA工作流超时自动转交程序,让工作流加速到360迈!(图文)小飞鱼软件通达OA工作流... 查看详情

小飞鱼通达二开致远oa配置(写数据到通达oa第三方系统)接口(图文)

最近需要做的一个开发,需要集成审批通知到通达系统,在建立流程及映射关系后,需要先使用集团管理员账号配置CIP接口。使用group-admin账号登录 新建第三方应用接口库 新建接口分类 前面的步骤相当于只是配置... 查看详情

通达oa为啥刚进去总是要等一会才能使用?

在公司内部建了个通达OA办公系统,可是在才在刚登录进去整个页面都不能点击,都要等差不多一分钟的样子才链接才能使用.请遇到这种情况的朋友帮帮忙!谢谢最稳定,最完善最多用户OA源码提供全套开发技术(源码、文档、安装... 查看详情

关于通达oa版权的问题

我想问一下,我们现在使用的通达OA破解版的,通达公司会不会检测到我们使用的盗版软件呢?会不会被告侵权呢??有什么方法能不让通达公司检测到呢??要如何屏蔽端口啊?在连接外网的情况下,因为我们有外网用户需要登... 查看详情

使用以下逻辑编写 Powershell 脚本的指南 [关闭]

】使用以下逻辑编写Powershell脚本的指南[关闭]【英文标题】:GuidanceforwritingaPowershellscriptwiththefollowinglogic[closed]【发布时间】:2014-12-1219:05:57【问题描述】:使用此逻辑编写WindowsPowerShell脚本获取当前日期并验证是否是该月的第一... 查看详情

通达oa工作流-表单设计

第1章    什么是工作流 1.1    工作流的用途 随着企业管理信息化进程的不断深入,协同应用软件的概念已深入人心,而工作流系统正是协同应用软件的核心。通过应用IT技术来规范工作流程、提高... 查看详情

通达oa小飞鱼工作流在线培训教程工作流应用的意义及基础设置(图文)

这个课程计划已经有一段时间了,经过这段时间结合实际网络教学又进行了一些总结,这里将陆续为大家呈现相关的工作流设计开发课程。同一时候线上的视频教学课程也将立即上线,欢迎朋友们的关注。首先介绍一些工作流应... 查看详情

小飞鱼通达二开致远oa配置(写数据到通达oa第三方系统)接口(图文)

最近需要做的一个开发,需要集成审批通知到通达系统,在建立流程及映射关系后,需要先使用集团管理员账号配置CIP接口。使用group-admin账号登录 新建第三方应用接口库 新建接口分类 前面的步骤相当于只是配置... 查看详情

通达oa通达server遇到在线200人速度变慢瓶颈的简要分析

今天。通达OA技术交流群里一位朋友提出他们的server当人数达到200时,速度会变慢的问题。经过群里大家的讨论得出一些相关分析方法及经验。这里记录一下以便兴许继续深入探讨研究。OA版本号:2010硬件配置:IBM3650M4,2CPU,16G... 查看详情

通达oa---清空admin的密码(代码片段)

...相关资料,备份下,以留以后急用。清空管理员密码:在通达官网&gt;&gt;&gt;&gt;帮助与支持&gt;&gt;&gt;&gt;相关链接&gt;&gt;&gt;&gt;OA知识库&gt;&gt;&gt;&gt;OfficeAnywhere疑难解答目录下有清空管... 查看详情

通达oa前台cookie伪造登录漏洞复现

通达OA前台cookie伪造登录漏洞复现前言通达OA是一套办公系统。2020年04月17日,通达OA官方在更新了一个v11版本安全补丁,其中修复了一个任意用户伪造登录漏洞。0X01漏洞概述该漏洞类型为任意用户伪造,未经授权的远程攻击者可以... 查看详情

智慧学工

产品篇功能简介 基于通达OA平台的用户体系,建立校本化平台与通达OA平台的统一身份认证,实现单点登录,一次授权多次使用。同时校本化平台PC端集成通达OA扫码授权登录方式,扫码确认即可登录。从而将通达OA打造成为... 查看详情

通达oa任意用户登录漏洞

通达OA任意用户伪造登录0x00漏洞介绍  通达OA一套办公系统2020.4.17官方公布修复了一个任意用户伪造cookie登录漏洞,用户可伪造cookie以管理员身份登录。0x01影响版本  通达OA2017  V11.X<V11.50x02漏洞分析  在logincheck_code.ph... 查看详情

漏洞复现-通达oa(代码片段)

通达OA1:未授权文件上传+文件包含姿势2:Nginx日志+文件包含CNVD:CNVD-2020-2656211.5sql注入漏洞复现201711.x<11.5任意用户未授权通达OA网络智能办公系统是由北京通达信科科技有限公司开发的一款办公系统采用基于WEB的... 查看详情