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

脚本编写必备基础

1.1 什么是脚本

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

实现以下功能:

编写脚本对于应用中心来说不是必须的,但通过编写脚本却可以极大地增强应用中心的

处理能力,这对于实施复杂度高、应用中心标准化功能满足不了的项目是一个很好的选择。

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

除了要熟悉应用中心以及相关数据库表结构之外,编写脚本还需要有 PHP 编程基础,

写脚本的过程本质上写 PHP 代码的过程。因此,应用中心的实施人员需要补充些 PHP 编程

知识,这对编写脚本是非常有帮助的。

1.3 应用中心库表结构

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

1

app_form 表单id 表单idPKguid 表单guidPKfrmno 表单编号label 表单名称1对多app_item 字段信息id 字段idPKguid 字段guidPKform_guid 所属表单guidFKFKitem_guid 所属列表guidtitle 字段名称datatype2 字段数据类型

1对1

1对1

app_data_XXX 表单除列表之外且

不是大文本字段数据存储表,XXX

对应表单id,该表为表单数据主

表id 记录idPKguid 数据记录guidPK
FK    main_id 主表的数据记录id

run_id 工作流水号

isdeleted 删除标识

position 记录顺序号

create_userid 创建者uid

create_time 创建时间

update_userid 最后更新者 uid

update_time 最后更新时间

col_XXX 字段数据,XXX代表字段id

app_data_XXX_text 表单除列表之

外的大文本字段数据存储表,XXX

对应表单idid 记录idPKguid 数据记录guidPK
FK    main_id 主表的数据记录id

run_id 工作流水号

isdeleted 删除标识

position 记录顺序号

create_userid 创建者uid

create_time 创建时间

update_userid 最后更新者

uid

update_time 最后更新时间

col_XXX 字段数据,XXX代

表字段id

app_data_XXX_list_YYY 表单列表

字段数据存储表,XXX对应表单

id,YYY为列表字段id

PKid 记录idguid 数据记录guidPK
FK    main_id 主表的数据记录id

run_id 工作流水号

isdeleted 删除标识

position 记录顺序号

create_userid 创建者uid

create_time 创建时间

update_userid 最后更新者

uid

update_time 最后更新时间

col_XXX 字段数据,XXX代

表字段id

1.4 应用中心控件数据结构

新版应用中心采取前后端分离方式实现,前端和后端采取规定好的数据结构进行通信,

因此用户自己编写脚本过程中读取和设置数据时要满足规定好的结构。应用中心各控件数据

2结构说明如下:

单行文本、多行文本、数字文本、货币文本、自动编号:具体值,例如:"应用中心","2017

版\n 应用中心操作手册",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"=>"    [email protected]_754692181","attach_name"=>"    报 表 需 求 开

发.docx"],["attach_id"=>" [email protected]_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,非新增行时为空;

3index:行 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。

41.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 行顺序号,

默认取所有数据。

输出:基本数据或者列表数据。

51.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()

输入:无。

输出:应用中心数据库连接。

根据数据库连接操作数据库,常见方法举例如下:

6$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。

71.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。

8自定义函数

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 举例

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

9

其中,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;

}

运行一结果如下图所示:

10

11

自定义提取或回填引擎

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_arr_datas 等,以区别于应用中心里所使用的变量。

1.11 举例

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

12

处理引擎定义为"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, "充值卡");

13

$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);

?>

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

下:

14

回写条件和更新方式不定义。处理引擎写上 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();

}

}

}

?>

原文地址:https://www.cnblogs.com/tongdaoa/p/8338300.html

时间: 2024-08-25 21:32:26

通达OA应用中心使用手册(脚本编写指南)的相关文章

通达OA应用中心操作手册

第1章应用中心功能介绍 1.1 功能介绍 应用中心是一款以企事业单位广为使用的表单为对象.业务为驱 动.决策为目标,以"平台" +"实施"的方式,进而帮助企事业单位实 现各类管理信息系统的软件工具平台.利用这一平台,用户可把单位业 务模型和管理理念变成可实际操作的管理信息系统,以网络化方式实现 诸如单据填制.数据审批.业务流程.数据管理.数据评论.数据共 享.数据跟踪.数据汇总.统计分析.精准打印等极具实用功能.该软 件直接面向企业管理者和一线业务人员. 1.2 快

pyspider脚本编写指南

注意,虽然在本文中会涉及调度策略等内容,但实际执行效果取决于具体策略实现. project 脚本分为不同的 project,不同的 project 之间的任务互相独立,建议为不同的站点建立不同的 project project 属性 group – 分组标识,暂时仅用于区分 name – 脚本的名字,只允许 a-zA-Z0-9_ status – 任务状态,只有处于 DEBUG 和 RUNNING 状态任务才会被执行 TODO – 新建立的脚本所处的状态 STOP – 停止 CHECKING –

通达OA用户操作手册(二)

4.3 业务流程平台 业务流程平台的详细使用介绍,详见<Office Anywhere2017 业务流程平台使用详解>,此处不再赘言. 4.4 工作流 工作流的详细使用介绍见<Office Anywhere2017 工作流使用详解>. 4.4.1 新建工作 图 4.4-1 进入[工作流]-[新建工作],将鼠标放在需要新建的流程后面即可看到[快速新建]和[新建向导]两个按钮,单击进入新建向导界面,双击为快速新建进入工作办理界面.如果用户没有流程第一步的经办权限,那么用户在新建界面看不

通达OA用户操作手册(一)

第四章通达 OA 用户手册 4.1 任务中心功能介绍 图 4.1-1 按任务的紧急程度及时间顺序分组,方便快速查看.办理任务,支持对任务的推迟.恢复.忽略等操作:以时间轴显示方式呈现当日工作日程安排情况:时间.天气.限行尾号,每日贴心提醒:可以快速发起 OA 常用工作任务. 4.1.1 急件箱 在"急件箱"里,将未办理的过期的日程安排.超时的工作流等数据按时间 进行展示,点击日程或工作流进行办理,并且可以将待办任务推迟或者忽略,推 迟可自定义推迟时间进行延后办理,忽略可将该工作忽略,存

【转】DB2 的命令行处理器和脚本编写

命令行处理器是 DB2 的接口,它最佳地体现了 DB2 的威力,以及 DB2 的简单性和通用性.作者通过例子对其进行了详细的论述. 0 评论: Blair Adamache, DB2 Technology Development, IBM 关闭 [x] Blair Adamache 是 IBM 多伦多实验室里的一名有 17 年工作经验的老员工.他拥有修辞学(Rhetoric)的硕士学位,但是承诺只将自己的能力应用于好的服务.Blair 当前的职责是管理 DB2 服务小组,这个小组负责确保客户能够

通达oa破解版下载|通达OA2017破解版|通达OA破解补丁下载

一.百度搜索[通达OA官网]=>[下载]=>[下载2017版]=>[通达OA精灵2017版](Windows.iPhone.Android版本号2017.07.19):安装包下载地址:http://www.tongda2000.com/download/2017.php 二.打开[MYOA2017]=>[安装D盘] 三.单机[所有程序]=>[通达网络办公]=>[通达服务职能配置]=>[web服务协议]=>[web服务名称localhost]=>[Htt

通达OA 常用内置函数示例

通达OA系统内置了大量的函数,简化了程序开发,这里从二次开发手册中节选出部分例子,通过实际的程序运行调试给大家做个简要的介绍. 内置函数参考 一. utility.php 1.Button_Back  显示一个返回按钮 <?php include_once( "inc/utility.php" );                  //先进行函数文件引用 Button_Back($HTML_CHARSET = 'GBK');                 //使用函数 ?&g

通达OA 开始移动端技术研究

手机移动端应用是如火如荼,现在干什么都可以用手机来操作,大有取代电脑的趋势.通达OA很早就推出了移动端的软件,只是有些功能做的还很简单,加上有些兼容性的问题存在,主要是js脚本的问题.但毕竟有这个功能比没有还是强不少,出门在外的时候能看到公告和邮件也是不错的. 最近群里有不少人问移动端的开发问题,经过初步的判断应该是可以实现的,只不过手机端对应用限制更多一些,各种手机版本及型号的差异也会导致测试复杂.这里算作一个研究新方向的开始,探索新的世界......

通达OA

Office Anywhere 是企业搭乘信息化快车的一票通, 通达OA永久免费, 30用户小微企业版永久免费. 系统简介 Office Anywhere网络智能办公系统(简称Office Anywhere)是中国协同办公自动化软件(OA软件)普及型的旗舰产品,是中国用户群最广的OA产品,是与中国企业最佳管理实践相结合,形成的中国企业最佳管理办公平台.它为不同规模企业提供领先的软件能力,帮助其获取成长所需的洞察力.创新力.优化力.协作力.敏捷力.安全力.移动力等企业"软"实力.通达OA