- 浏览: 71390 次
- 性别:
- 来自: 上海
最新评论
第一章 软件开发环境简介
1.1 编程环境
通达 OA 主要采用 PHP 语言开发,系统使用 MySQL 数据库。
在 Windows 平台下,通达 OA 主要注册了 2 个系统服务,可以通过控制面板-〉管理工具
-〉服务,查看这 2 项服务,服务名分别是 Office_Anywhere 和 MySQL_OA,Office_Anywhere
服务实际是集成了 PHP 模块的 Apache 服 务 ,Apache 是通达 OA 所使用的 Web Server, 达 OA通
也可以支持 IIS 作为 Web Server,具体配置方法参见通达网站 OA 知识库相关文档。
关于 PHP 语言的使用,可参阅 http://www.php.net,下载 PHP 手册,作为开发指导;
关于 MySQL 数据库的管理与使用,将在第二章进行详细介绍。
1.2 目录层次结构
通达 OA 的目录层次结构清晰,体现出对服务程序、应用程序、WEB 页面的巧妙整合与
组织,便于理解和扩充,下面对目录结构加以说明:
MYOA
├─attach
├─bin
├─conf
├─data
│ ├─BUS
│ ├─TD_OA
│ ├─MySQL
│ └─TRAIN
├─logs
├─modules
├─MySQL
├─tmp
└─webroot
├─attachment
│ ├─hrms_pic
│ ├─product_pic
│ ├─new_sms
│ ├─rss
OA 附件文件存放目录
Apache、PHP、Zend 等主程序及配置文件,服务配置程序等
Apache 配置文件
MySQL 数据库文件目录
公交线路查询数据库
通达 OA 主数据库
MySQL 系统数据库
通达 OA 主数据库
Apache 等日志文件目录
Apache 的模块文件
MySQL 主程序文件
临时文件目录
通达 OA 的 WEB 根目录(PHP 程序目录)
部分 OA 附件文件存放目录
人事档案照片目录
销售管理产品照片存放目录
新短消息提醒状态文件
今日资讯信息缓存文件
│ ├─weather天气预报缓存文件
│ └─wm外部邮件存储目录
├─general主要模块目录
│ ├─ ……一般模块目录(略)
│ ├─ipanel主控面板,集成了菜单、短信箱等应用控制界面
│ ├─mytable桌面模块程序
│ └─system系统功能模块,下级目录略
├─images系统图片目录
│ ├─avatar自定义头像图片
│ └─menu菜单前小图标
├─inc系统通用程序及函数目录
├─ispiritOA 精灵页面
├─module系统组件
│ ├─dept_select部门选择组件
│ ├─editor简易 HTML 编辑器组件
│ ├─OCOffice 文档在线编辑与阅读
│ ├─OC_NETDISK文档在线编辑与阅读-仅适用于网络硬盘
│ ├─save_file文件转存组件
│ ├─user_select用户多选组件
│ └─user_select_single用户单选组件
├─theme界面主题
├─update系统升级,该文件夹下如存在 1.php 会被自动执行并删除
└─wav系统声音,Flash 格式
注:上表中红色颜色标示的目录是备份数据时需要备份的, OA 的所有数据所存放的目录。是
1.3 参数配置
1.3.1 Apache 配置(MYOA\conf\httpd.conf)
Timeout 300
ServerTokens Ful
ErrorDocument
ErrorLog logs/error.log
CustomLog logs/access.log combined
//连接超时,单位秒
//Apache 信息,Full,OS,Minor,Minimal,Major,Prod
//错误文档
//错误日志
//访问日志
1.3.2 PHP 配置(MYOA\bin\php.ini)
display_errors = On
log_errors = Off
error_log = filename
max_execution_time = 1200
memory_limit = 256M
post_max_size = 1000M
//是否显示 PHP 程序错误
//是否记录错误日志
//错误日志记录文件
//程序最大执行时间,单位秒
//单个程序占用内存上限
//表单提交最大数据量,单位 MB
upload_max_filesize = 200M
/上传单个附件大小,单位 MB
1.3.2 MySQL 配置(MYOA\MySQL\my.ini)
basedir=D:\MYOA\MySQL\
datadir=D:\MYOA\data\
default-character-set=gbk
port=3306
set-variable=max_connections=1000
set-variable=wait_timeout=1200
set-variable=long_query_time=5
set-variable=log-slow-queries=slow.log
MySQL 主程序路径
MySQL 数据库路径
MySQL 数据库字符集
//端口
//全局最大连接数
//SQL 语句执行结束后自动断开时间
//长 SQL 语句查询时间
//超时的查询则会被记录在该日志文件里
注:以上所有的配置选项修改后都需要重启服务才会生效。
第二章 数据库管理
2.1 phpMyAdmin 的安装2.1
MySQL 的数据库管理工具很多,phpMyAdmin 是使用 PHP 编写的免费 MySQL 数据库管理工
具。由于 OA 的 MySQL 数据库出于安全考虑,被配置为仅能从本机访问,所以使用 phpMyAdmin
这样的 B/S 结构的管理工具,可实现数据库的远程管理。
第一步、下载程序包
phpMyAdmin 程序可以从其官方网站 http://www.phpmyadmin.net 下载,建议下载 2.x
系列包含所有语言的非 UTF-8 版。
第二步、解压缩
在 MYOA\webroot 目录下新建一个目录,如 mysql369(为了防止他人利用该工具侵入数
据库系统,可把目录名设为比较复杂的,如 MySQL2345,避免目录名被猜测到。),将下载的
程序包解压后拷贝至 mysql369 目录下。
第三步、修改配置文件
用文本编辑器,如记事本,打开 MySQL 管理工具目录下的 confing.inc.php,修改以下配
置信息:
$cfg['blowfish_secret'] = '';//随便输入一个字符串,加密 Cookie 等信息
$cfg['Servers'][$i]['auth_type'] = 'http'; //http,config,cookie,建议使用 http
$cfg['Servers'][$i]['host'] = 'localhost'; //数据库地址,默认为 localhost
$cfg['Servers'][$i]['port'] = '3306';//数据库端口,默认为 3306
$cfg['Servers'][$i]['user'] = 'root';//数据库用户名,默认为 root
$cfg['Servers'][$i]['password'] = '';//数据库密码,默认为 myoa888
第四步、使用 phpMyAdmin
MySQL 管理工具地址:http://OA 地址/mysql,注意,进入后先选择中文界面(Chinese
simplified (zh-gb2312))。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,
以免导致数据丢失。
2.2 phpMyAdmin 的使用
phpMyAdmin 主界面如下
在左侧选择 TD_OA 数据库,可查看 OA 所有的数据表,如下图
点击左侧的表名,则右侧列出该表的结构和字段、索引、记录数等信息,如下图
phpMyAdmin 的具体使用教程方法可以参考 通达网站/OA 知识库/Office Anywhere 高
级应用技巧/OA 数据库管理工具/mysql 网页方式管理工具/phpMyAdmin 的安装和使用.wmv 。
第三章 如何创建一个模块
创建一个模块一般需要经过以下几个步骤:根据功能建立程序存放目录、创建菜单、分
配菜单权限、编码、测试等。
3.1 建立模块目录建立模块目录
在 MYOA\webroot\general 下建议一个目录 abc,作为自己开发模块的目录,将程序放
置于该目录下,默认页面是 index.php 或 index.html 或 index.htm
3.2 创建菜单
用管理员帐号进入 OA,打开 系统管理->菜单设置,在相应的一级菜单后点击“下一级”
链接,在右侧的界面上点击“新建子菜单项”按钮,如下图所示:
详细阅读上图界面中的说明信息,按界面上说明的要求定义好菜单:
子菜单项 ID:系统自动生成,无须调整
上级菜单:根据自己的实际应用情况调整
子菜单项代码:两位的数字或字母,作为排序之用
子菜单项名称:根据自己的实际应用自行填写
子菜单模块路径:该菜单对应的程序目录,应为上一个步骤创建的目录名称。如果为
abc,则该菜单对应的菜单图片名称为 MYOA\webroot\images\menu\abc.gif,需要自己创建
或拷贝 abc.gif 拷贝至 MYOA\webroot\images\menu 下.
3.3 分配菜单权限
用管理员帐号进入 OA,打开 系统管理->组织机构设置->角色与权限管理,给相关的角
色分配刚创建的菜单的使用权限,则相关角色的人员就可以在 OA 界面左侧的菜单中看到并
访问该菜单。
3.4 编码和测试
为便于用户开发自己的模块,通达科技在用户服务区提供了 Office Anywhere 部份模块
源码的下载,供开发人员参考。
用户自行开发 OA 的功能模块,需要根据 OA 的相关规范进行开发,这样既可以使自行开
发的模块和 OA 的界面效果一直,又可以保证自行开发的程序在 OA 安全框架的保护之下,这
样不仅可以保证新模块数据的安全,又可以使开发人员集中精力投入到模块功能的开发上。
OA 的各功能模块下的每个程序都需要包含 OA 的安全验证程序:inc/auth.php。该程序
包含了对用户登录信息、是否有权限访问该路径等的检查,以及 OA 界面效果的基本样式表
等。具体的语法为:include_once("inc/auth.php");OA 数据库的所有表名和字段名称全部
使用大写字母,开发过程请注意。
在开发自己的功能模块时可以参考现有 OA 模块,把功能相似的 OA 模块代码复制一份,
然后在 OA 代码的基础上修改。以下几个小节介绍 OA 系统变量和数据库的使用。
PHP、HTML、Javascript 等开发的基础知识请参考 通达网站/OA 知识库/通达科技历届
培训会议资料/2006 年 9 月-通达 OA 用户培训与交流研讨会资料/会议技术资料/通达 OA 开
发平台基础知识.ppt
3.4.1 系统变量
OA 系统提供了 5 个通过 SESSION 保存的当前用户的系统变量,分别是
$LOGIN_UID
$LOGIN_USER_ID
$LOGIN_USER_NAME
$LOGIN_USER_PRIV
$LOGIN_DEPT_ID
$LOGIN_AVATAR
$LOGIN_THEME
//用户数字 ID
//用户名,登录使用
//用户真实姓名
//用户角色 ID
//用户部门 ID
//用户头像
//用户界面主题
如需使用这些系统变量,程序需要包含 auth.php,如下代码:
<?
include_once("inc/auth.php");
echo "我的登录用户 ID 是".$LOGIN_USER_ID; //本句中的.表示字符串连接
?>
3.4.2 PHP 代码样例3.4.
以下是一段样例代码 index.php,可放置于 abc 目录下,可作为开发 OA 应用程序的模
版。//或/*…*/是 PHP 的注释语句。
<?
include_once("inc/auth.php");// 如需登录验证则包含,未登录将退出
//include_once("inc/conn.php");// 如需要连接数据库则包含
//include_once("inc/utility_all.php"); // 如需要使用公用函数则包含
//include_once("inc/check_type.php"); // 如需要使用类型检验函数则包含
//如已包含 auth.php,则无须包含 conn.php
?>
<html>
<head>
<title>功能模块名称</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body class="bodycolor">
<?
echo "当前登录的用户为:".$LOGIN_USER_NAME.",用户名为:".$LOGIN_USER_ID;
?>
</body>
</html>
程序运行结果如下:
3.4.3 连接数据库代码3.4.
以下程序代码为读取 admin 用户所属部门的示例:
<?
include_once("inc/auth.php");
include_once("inc/utility_all.php");
?>
<html>
// 如需登录验证则包含,未登录将退出
// 如需要使用公用函数则包含
<head>
<title>功能模块名称</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body class="bodycolor">
<?
$query = "SELECT * from USER where USER_ID='admin'";
$cursor= exequery($connection,$query);
/*
exequery 是 OA 系统 inc/conn.php 包装的 SQL 语句执行函数,$connection 是数据库的连
接标识符
*/
if($ROW=MySQL_fetch_array($cursor))
$DEPT_ID=$ROW["DEPT_ID"];
echo "admin 用户所在部门为:<u>".dept_long_name($DEPT_ID)."</u>";
?>
</body>
</html>
执行效果如下图:
从这段程序可以看出,使用 OA 系统提供的系统头文件和函数,访问数据库将是一件很
轻松的事,不用操心数据库的连接参数等问题,只需简单的写下 SQL 语句,执行它。
MySQL 数据库的连接参数在 MYOA\webroot\inc\oa_config.php 文件中配置,如果自己
安装 MySQL 数据库,可自行修改连接参数。
第四章 内置函数参考
4.1 utility.php
4.1.1 Message
函数原型:
Message($TITLE, $CONTENT, $STYLE="")
功能描述:
输出一个信息提示框的 HTML 代码
参数:
$TITLE
$CONTENT
$STYLE
返回值:
无
//信息框标题
//信息框提示信息
//信息框样式,可选的值有 error、warning、stop、forbidden、help、info
4.1.2 Button_Back
函数原型:
Button_Back()
功能描述:
输出一个返回按钮的 HTML 代码
参数:
无
返回值:
无
4.1.3 find_id
函数原型:
find_id($STRING, $ID)
功能描述:
在字符串$STRING 中查找子串$ID
参数:
$STRING
$ID
返回值:
找到则返回 true,否则返回 false,布尔值
//以英文逗号(,)连接的 N 个 ID 值的一个字符串,如 a,b,c,d
//要查找的子符串,如 c
4.2 utility_all.php
4.2.1 csubstr
函数原型:
csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2)
功能描述:
截取中文字符串
参数:
$str
$start
$long
$ltor
$cn_len
返回值:
截取后的中文字符串。
//要截取的字符串
//截取起始位置,默认从头开始
//要截取的长度
//系统保留
//系统保留
4.2.2 is_ip
函数原型:
is_ip($IP)
功能描述:
判断一个字符串是否是一个合法的 IP 地址
参数:
$IP
返回值:
如果$IP 是一个 IP 地址则返回 true,否则返回 false。
//IP 地址字符串
4.2.3 add_log
函数原型:
add_log($TYPE,$REMARK,$OPERATOR)
功能描述:
添加系统日志
参数:
$TYPE
$REMARK
$OPERATOR
返回值:
无
//日志类型代码,参考系统代码设置下的“系统日志类型”
//备注
//产生日志的用户的用户名,一般为当前用户
4.2.4 get_code_name
函数原型:
get_code_name($CODE_NO,$PARENT_NO)
功能描述:
获取系统代码的描述
参数:
$CODE_NO
$PARENT_NO
返回值:
对应代码值的文字描述
示例代码:
echo get_code_name('0','SMS_REMIND'); //输出“个人短信”
echo get_code_name('0,1','SMS_REMIND'); //输出“个人短信,公告通知”
//系统代码的代码值,如果多个代码则用英文逗号串起来
//父类型代码值
4.2.5 get_client_ip
函数原型:
get_client_ip()
功能描述:
获取用户的客户端 IP 地址
参数:
无
返回值:
用户的客户端 IP 地址字符串
4.2.6 dept_long_name
函数原型:
dept_long_name($DEPT_ID)
功能描述:
获取部门 ID 为$DEPT_ID 的多级部门名称
参数:
$DEPT_ID
返回值:
$DEPT_ID 对应的部门长名称,如“系统处/OA 开发组”
//部门 ID
4.2.7 get_sys_para
函数原型:
get_sys_para($PARA_NAME_STR)
功能描述:
获取系统参数设置的参数值并返回一个数组
参数:
$PARA_NAME_STR
返回值:
系统参数值的数组
//系统参数名称字符串,多个的话用英文逗号隔开
代码示例:
$PARA_ARRAY=get_sys_para("MENU_DISPLAY,MENU_EXPAND_SINGLE");
$PARA_ARRAY 为 array( "MENU_DISPLAY" => "1", "MENU_EXPAND_SINGLE" => "0");
4.2.8 set_sys_para
函数原型:
set_sys_para($PARA_ARRAY)
功能描述:
批量设置系统参数
参数:
$PARA_ARRAY //系统参数数组,数组键值为参数名,如 array("MENU_DISPLAY"=>"1")
返回值:
无
4.3 utility_org.php
4.3.1 is_dept_parent
函数原型:
is_dept_parent($DEPT_ID,$PARENT_ID)
功能描述:
判断一个部门是否是另外一个部门的上级部门
参数:
$DEPT_ID//要判断的部门 ID
$PARENT_ID //上级部门 ID
返回值:
是则返回 true,否则返回 false。
4.3.2 top_dept
函数原型:
top_dept($DEPT_ID)
功能描述:
获取部门 ID 为$DEPT_ID 的部门的最上级部门的 ID。
参数:
$DEPT_ID
返回值:
最上级部门的 ID。
//部门 ID
4.3.3 GetDeptNameById
函数原型:
GetDeptNameById($ID_STR)
功能描述:
获取 N 个部门的部门名称。
参数:
$ID_STR //N 个部门的 ID,用逗号串起来,如“1,2,”
返回值:
N 个部门名称字符串,用逗号串起来,如“系统部,OA 开发组”。
4.3.4 GetPrivNameById
函数原型:
GetPrivNameById($ID_STR)
功能描述:
获取 N 个角色的角色名称。
参数:
$ID_STR //N 个角色的 ID,用逗号串起来,如“1,2,”
返回值:
N 个角色名称字符串,用逗号串起来,如“OA 管理员,职员”。
4.3.5 GetUserNameById
函数原型:
GetUserNameById($ID_STR)
功能描述:
获取 N 个用户的用户姓名。
参数:
$ID_STR //N 个用户的用户名,用逗号串起来,如“admin,lxq,”
返回值:
N 个用户的真实姓名字符串,用逗号串起来,如“系统管理员,刘向前”。
4.3.6 GetUserNameByUid
函数原型:
GetUserNameByUid($ID_STR)
功能描述:
获取 N 个用户的用户姓名。
参数:
$ID_STR //N 个用户的数字,用逗号串起来,如“1,2,”
返回值:
N 个用户的真实姓名字符串,用逗号串起来,如“系统管理员,刘向前”。
4.3.7 my_exclude_uid
函数原型:
my_exclude_uid()
功能描述:
获取当前用户不能与之通讯的用户的数字 ID(UID)。
参数:
无
返回值:
当前用户不能与之通讯的用户的数字 ID(UID)。
4.4 utility_sms1.php
4.4.1 send_sms
函数原型:
send_sms($SEND_TIME,$FROM_ID,$TO_ID,$SMS_TYPE,$CONTENT,$REMIND_URL="")
功能描述:
发送内部短消息。
参数:
$SEND_TIME
$FROM_ID
$TO_ID
$SMS_TYPE
$CONTENT
$REMIND_URL
返回值:
无
//发送时间字符串,如“2009-01-12 02:00:00”
//发送人用户名,如“admin”
//接收人用户名用逗号串起来的字符串,如“lxq,xfn”
//短信类型代码,参考系统代码设置下的“内部短消息类型”
//短信内容
//点击短信提醒弹出窗口的“查看详情”打开的地址
4.4.2 delete_sms
函数原型:
delete_sms($SMS_ID_STR,$DEL_TYPE)
功能描述:
删除内部短消息。
参数:
$SMS_ID_STR
$DEL_TYPE
返回值:
无
//要删除的短信 ID 串,用逗号串起来,如“1,2,3”
//DEL_TYPE=1 删除收到的短信,DEL_TYPE=2 删除发送的短信
4.5 utility_sms2.php
4.5.1 send_mobile_sms_user
函数原型:
send_mobile_sms_user($SEND_TIME,$FROM_ID,$TO_ID,$CONTENT,$TYPE)
功能描述:
给 OA 用户发送手机短信。
参数:
$SEND_TIME
$FROM_ID
$TO_ID
$CONTENT
$TYPE
返回值:
无
//发送时间字符串,如“2009-01-12 02:00:00”
//发送人用户名,如“admin”
//接收人用户名用逗号串起来的字符串,如“lxq,xfn”
//短信内容
//短信类型代码,参考系统代码设置下的“内部短消息类型”
4.5.2 send_mobile_sms
函数原型:
send_mobile_sms($SEND_TIME,$FROM_ID,$PHONE,$CONTENT)
功能描述:
向指定号码发送手机短信。
参数:
$SEND_TIME
$FROM_ID
$PHONE
$CONTENT
返回值:
无
//发送时间字符串,如“2009-01-12 02:00:00”
//发送人用户名,如“admin”
//接收手机号码字符串,如“138xxxxxxxx,139xxxxxxxx”
//短信内容
4.6 utility_file.php
4.6.1 upload
函数原型:
upload($PREFIX="ATTACHMENT",$MODULE="")
功能描述:
上传附件,可以一次上传多个附件。
参数:
$PREFIX
$MODULE
返回值:
无
//表单 File 控件名称的前缀,一般为默认即可
//模块代码,如内部邮件为 email,为空则根据程序路径自动判断
4.6.2 delete_attach
函数原型:
delete_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
删除附件,可以一次删除多个附件。
参数:
$ATTACHMENT_ID//附件 ID,多个附件 ID 用逗号隔开
$ATTACHMENT_NAME//附件名称,多个附件名称用*号隔开
$MODULE//模块代码,如内部邮件为 email,为空则根据程序路径自动判断断
返回值:
无
4.6.3 attach_size
函数原型:
attach_size($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
获取附件大小。
参数:
$ATTACHMENT_ID//附件 ID
$ATTACHMENT_NAME//附件名称
$MODULE//模块代码,如内部邮件为 email,为空则根据程序路径自动判断断
返回值:
附件大小,单位字节。
4.6.4 copy_attach
函数原型:
copy_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE_SRC="",$MODULE_DESC="")
功能描述:
拷贝一个或多个附件。
参数:
$ATTACHMENT_ID//附件 ID,多个附件 ID 用逗号隔开
$ATTACHMENT_NAME//附件名称,多个附件名称用*号隔开
$MODULE_SRC//原附件所属模块代码,为空则根据程序路径自动判断断
$MODULE_DESC//新附件所属模块代码,为空则根据程序路径自动判断断
返回值:
新附件的附件 ID 串,多个附件的话用逗号隔开。
4.6.5 is_uploadable
函数原型:
is_uploadable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否允许上传。
参数:
$FILE_NAME
返回值:
允许上传则返回 true,否则返回 false。
//要判断的文件名
4.6.6 is_text
函数原型:
is_text($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是文本文件。
参数:
$FILE_NAME
返回值:
是文本文件则返回 true,否则返回 false。
//要判断的文件名
4.6.7 is_office
函数原型:
is_office($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是 Office 文档。
参数:
$FILE_NAME
返回值:
是 Office 文档则返回 true,否则返回 false。
//要判断的文件名
4.6.8 is_image
函数原型:
is_image($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是图片。
参数:
$FILE_NAME
返回值:
是图片则返回 true,否则返回 false。
23
//要判断的文件名
4.6.9 is_viewable
函数原型:
is_viewable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否可以直接浏览,如 htm、pdf、图片等。
参数:
$FILE_NAME
返回值:
可以直接浏览则返回 true,否则返回 false。
//要判断的文件名
4.6.10 is_media
函数原型:
is_media($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是媒体文件,如视频、音频文件等。
参数:
$FILE_NAME
返回值:
RealPlayer 播放类型返回 1,如 rm、rmvb 等
MediaPlayer 播放类型返回 2,如 wmv、mpeg 等
可直接在浏览器里打开的类型返回 3,如图片、pdf、html 等
Flash 播放类型返回 4,如 flv,fla 等
其它返回 0
//要判断的文件名
4.6.11 dir_size
函数原型:
dir_size($dir)
功能描述:
根据目录路径返回其下属子目录和文件的大小。
参数:
$dir
返回值:
目录大小,单位字节。
//服务器目录路径,如 D:/MYOA
4.6.12 delete_dir
函数原型:
delete_dir($dir)
功能描述:
根据目录路径删除该目录及其所有下属子目录和文件。
参数:
$dir
返回值:
无
//服务器目录路径,如 D:/MYOA
4.6.13 attach_sub_dir
函数原型:
attach_sub_dir()
功能描述:
根据程序路径判断其所属模块。
参数:
无
返回值:
附件所属模块代码,如在/general/email/new/submit.php 中调用该函数则返回 email。
4.6.14 attach_real_path
函数原型:
attach_real_path($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
根据附件的 ID、名称等获取该附件在服务器上存储的物理路径。
参数:
$ATTACHMENT_ID
$ATTACHMENT_NAME
$MODULE
返回值:
附件在服务器上的物理路径,如 D:/MYOA/attach/0901/123456789.二次开发手册.doc。
//附件 ID
//附件名称
//附件所述模块代码
4.6.15 attach_id_encode
函数原型:
attach_id_encode($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
根据附件的真实 ID 和名称获取在前台代码中显示的 ID。
参数:
$ATTACHMENT_ID
$ATTACHMENT_NAME
返回值:
经过加密处理的 ID。
//附件 ID
//附件名称
4.6.16 attach_id_decode
函数原型:
attach_id_decode($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
根据附件的加密 ID 和真实名称获取真实 ID。
参数:
$ATTACHMENT_ID
$ATTACHMENT_NAME
返回值:
附件的真实 ID。
//附件加密 ID
//附件真实名称
第五章 公用组件参考
公用组件为 JavaScript 脚本的前台代码,目的是为了简化前端程序的二次开发,开发
出和 OA 结合更紧密、更一致的功能。
5.1 日期选择
函数原型:
td_calendar(fieldname)
功能描述:
弹出一个日期选择窗口
加载文件:
/inc/js/module.js
参数:
fieldname
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
生效日期:<input type="text" name="BEGIN_DATE" size="10" class="BigInput">
<img src="calendar.gif" onClick="td_calendar('form1.BEGIN_DATE');">
</form>
//表单对应字段的对象,如 form1.BEGIN_DATE
5.2 人员多选
函数原型:
SelectUser(MODULE_ID,TO_ID, TO_NAME, MANAGE_FLAG,FORM_NAME)
功能描述:
弹出一个人员多选窗口
加载文件:
27
Office Anywhere 网络智能办公系统 二次开发手册
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
MANAGE_FLAG
FORM_NAME
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectUser('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
//模块 ID,系统保留,传递空值即可
//存放已选人员用户名的字段名,多个用户名用英文逗号隔开
//存放已选人员用户真实姓名的字段名,多个姓名用英文逗号隔开
//是否显示不允许登录 OA 人员,默认为 0
//表单名称,默认为“form1”
5.3 人员单选
函数原型:
SelectUserSingle(MODULE_ID,TO_ID, TO_NAME, MANAGE_FLAG,FORM_NAME)
功能描述:
弹出一个人员单选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
MANAGE_FLAG
FORM_NAME
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
28
//模块 ID,系统保留,传递空值即可
//存放已选人员用户名的字段名
//存放已选人员用户真实姓名的字段名
//是否显示不允许登录 OA 人员,默认为 0
//表单名称,默认为“form1”
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectUserSingle('','TO_ID', 'TO_NAME')">添
加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
5.4 部门多选
函数原型:
SelectDept(MODULE_ID,TO_ID, TO_NAME, PRIV_OP)
功能描述:
弹出一个部门多选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
PRIV_OP
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectDept('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
//模块 ID,系统保留,传递空值即可
//存放已选部门 ID 的字段名,多个 ID 用英文逗号隔开
//存放已选部门名称的字段名,多个名称用英文逗号隔开
//选择部门的范围,0 所有部门,1 用户管理范围内的部门
5.5 部门单选
函数原型:
SelectDeptSingle(MODULE_ID,TO_ID, TO_NAME, PRIV_OP)
功能描述:
弹出一个部门单选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
PRIV_OP
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectDeptSingle('','TO_ID', 'TO_NAME')">添
加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
//模块 ID,系统保留,传递空值即可
//存放已选部门 ID 的字段名
//存放已选部门名称的字段名
//选择部门的范围,0 所有部门,1 用户管理范围内的部门
5.6 角色多选
函数原型:
SelectPriv(MODULE_ID,TO_ID, TO_NAME, PRIV_OP)
功能描述:
弹出一个角色多选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
PRIV_OP
返回值:
//模块 ID,系统保留,传递空值即可
//存放已选角色 ID 的字段名,多个 ID 用英文逗号隔开
//存放已选角色名称的字段名,多个名称用英文逗号隔开
//默认 0,如果当前用户非 OA 管理员且该参数为 1,则不列出 OA 管理员
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectPriv('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
1.1 编程环境
通达 OA 主要采用 PHP 语言开发,系统使用 MySQL 数据库。
在 Windows 平台下,通达 OA 主要注册了 2 个系统服务,可以通过控制面板-〉管理工具
-〉服务,查看这 2 项服务,服务名分别是 Office_Anywhere 和 MySQL_OA,Office_Anywhere
服务实际是集成了 PHP 模块的 Apache 服 务 ,Apache 是通达 OA 所使用的 Web Server, 达 OA通
也可以支持 IIS 作为 Web Server,具体配置方法参见通达网站 OA 知识库相关文档。
关于 PHP 语言的使用,可参阅 http://www.php.net,下载 PHP 手册,作为开发指导;
关于 MySQL 数据库的管理与使用,将在第二章进行详细介绍。
1.2 目录层次结构
通达 OA 的目录层次结构清晰,体现出对服务程序、应用程序、WEB 页面的巧妙整合与
组织,便于理解和扩充,下面对目录结构加以说明:
MYOA
├─attach
├─bin
├─conf
├─data
│ ├─BUS
│ ├─TD_OA
│ ├─MySQL
│ └─TRAIN
├─logs
├─modules
├─MySQL
├─tmp
└─webroot
├─attachment
│ ├─hrms_pic
│ ├─product_pic
│ ├─new_sms
│ ├─rss
OA 附件文件存放目录
Apache、PHP、Zend 等主程序及配置文件,服务配置程序等
Apache 配置文件
MySQL 数据库文件目录
公交线路查询数据库
通达 OA 主数据库
MySQL 系统数据库
通达 OA 主数据库
Apache 等日志文件目录
Apache 的模块文件
MySQL 主程序文件
临时文件目录
通达 OA 的 WEB 根目录(PHP 程序目录)
部分 OA 附件文件存放目录
人事档案照片目录
销售管理产品照片存放目录
新短消息提醒状态文件
今日资讯信息缓存文件
│ ├─weather天气预报缓存文件
│ └─wm外部邮件存储目录
├─general主要模块目录
│ ├─ ……一般模块目录(略)
│ ├─ipanel主控面板,集成了菜单、短信箱等应用控制界面
│ ├─mytable桌面模块程序
│ └─system系统功能模块,下级目录略
├─images系统图片目录
│ ├─avatar自定义头像图片
│ └─menu菜单前小图标
├─inc系统通用程序及函数目录
├─ispiritOA 精灵页面
├─module系统组件
│ ├─dept_select部门选择组件
│ ├─editor简易 HTML 编辑器组件
│ ├─OCOffice 文档在线编辑与阅读
│ ├─OC_NETDISK文档在线编辑与阅读-仅适用于网络硬盘
│ ├─save_file文件转存组件
│ ├─user_select用户多选组件
│ └─user_select_single用户单选组件
├─theme界面主题
├─update系统升级,该文件夹下如存在 1.php 会被自动执行并删除
└─wav系统声音,Flash 格式
注:上表中红色颜色标示的目录是备份数据时需要备份的, OA 的所有数据所存放的目录。是
1.3 参数配置
1.3.1 Apache 配置(MYOA\conf\httpd.conf)
Timeout 300
ServerTokens Ful
ErrorDocument
ErrorLog logs/error.log
CustomLog logs/access.log combined
//连接超时,单位秒
//Apache 信息,Full,OS,Minor,Minimal,Major,Prod
//错误文档
//错误日志
//访问日志
1.3.2 PHP 配置(MYOA\bin\php.ini)
display_errors = On
log_errors = Off
error_log = filename
max_execution_time = 1200
memory_limit = 256M
post_max_size = 1000M
//是否显示 PHP 程序错误
//是否记录错误日志
//错误日志记录文件
//程序最大执行时间,单位秒
//单个程序占用内存上限
//表单提交最大数据量,单位 MB
upload_max_filesize = 200M
/上传单个附件大小,单位 MB
1.3.2 MySQL 配置(MYOA\MySQL\my.ini)
basedir=D:\MYOA\MySQL\
datadir=D:\MYOA\data\
default-character-set=gbk
port=3306
set-variable=max_connections=1000
set-variable=wait_timeout=1200
set-variable=long_query_time=5
set-variable=log-slow-queries=slow.log
MySQL 主程序路径
MySQL 数据库路径
MySQL 数据库字符集
//端口
//全局最大连接数
//SQL 语句执行结束后自动断开时间
//长 SQL 语句查询时间
//超时的查询则会被记录在该日志文件里
注:以上所有的配置选项修改后都需要重启服务才会生效。
第二章 数据库管理
2.1 phpMyAdmin 的安装2.1
MySQL 的数据库管理工具很多,phpMyAdmin 是使用 PHP 编写的免费 MySQL 数据库管理工
具。由于 OA 的 MySQL 数据库出于安全考虑,被配置为仅能从本机访问,所以使用 phpMyAdmin
这样的 B/S 结构的管理工具,可实现数据库的远程管理。
第一步、下载程序包
phpMyAdmin 程序可以从其官方网站 http://www.phpmyadmin.net 下载,建议下载 2.x
系列包含所有语言的非 UTF-8 版。
第二步、解压缩
在 MYOA\webroot 目录下新建一个目录,如 mysql369(为了防止他人利用该工具侵入数
据库系统,可把目录名设为比较复杂的,如 MySQL2345,避免目录名被猜测到。),将下载的
程序包解压后拷贝至 mysql369 目录下。
第三步、修改配置文件
用文本编辑器,如记事本,打开 MySQL 管理工具目录下的 confing.inc.php,修改以下配
置信息:
$cfg['blowfish_secret'] = '';//随便输入一个字符串,加密 Cookie 等信息
$cfg['Servers'][$i]['auth_type'] = 'http'; //http,config,cookie,建议使用 http
$cfg['Servers'][$i]['host'] = 'localhost'; //数据库地址,默认为 localhost
$cfg['Servers'][$i]['port'] = '3306';//数据库端口,默认为 3306
$cfg['Servers'][$i]['user'] = 'root';//数据库用户名,默认为 root
$cfg['Servers'][$i]['password'] = '';//数据库密码,默认为 myoa888
第四步、使用 phpMyAdmin
MySQL 管理工具地址:http://OA 地址/mysql,注意,进入后先选择中文界面(Chinese
simplified (zh-gb2312))。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,
以免导致数据丢失。
2.2 phpMyAdmin 的使用
phpMyAdmin 主界面如下
在左侧选择 TD_OA 数据库,可查看 OA 所有的数据表,如下图
点击左侧的表名,则右侧列出该表的结构和字段、索引、记录数等信息,如下图
phpMyAdmin 的具体使用教程方法可以参考 通达网站/OA 知识库/Office Anywhere 高
级应用技巧/OA 数据库管理工具/mysql 网页方式管理工具/phpMyAdmin 的安装和使用.wmv 。
第三章 如何创建一个模块
创建一个模块一般需要经过以下几个步骤:根据功能建立程序存放目录、创建菜单、分
配菜单权限、编码、测试等。
3.1 建立模块目录建立模块目录
在 MYOA\webroot\general 下建议一个目录 abc,作为自己开发模块的目录,将程序放
置于该目录下,默认页面是 index.php 或 index.html 或 index.htm
3.2 创建菜单
用管理员帐号进入 OA,打开 系统管理->菜单设置,在相应的一级菜单后点击“下一级”
链接,在右侧的界面上点击“新建子菜单项”按钮,如下图所示:
详细阅读上图界面中的说明信息,按界面上说明的要求定义好菜单:
子菜单项 ID:系统自动生成,无须调整
上级菜单:根据自己的实际应用情况调整
子菜单项代码:两位的数字或字母,作为排序之用
子菜单项名称:根据自己的实际应用自行填写
子菜单模块路径:该菜单对应的程序目录,应为上一个步骤创建的目录名称。如果为
abc,则该菜单对应的菜单图片名称为 MYOA\webroot\images\menu\abc.gif,需要自己创建
或拷贝 abc.gif 拷贝至 MYOA\webroot\images\menu 下.
3.3 分配菜单权限
用管理员帐号进入 OA,打开 系统管理->组织机构设置->角色与权限管理,给相关的角
色分配刚创建的菜单的使用权限,则相关角色的人员就可以在 OA 界面左侧的菜单中看到并
访问该菜单。
3.4 编码和测试
为便于用户开发自己的模块,通达科技在用户服务区提供了 Office Anywhere 部份模块
源码的下载,供开发人员参考。
用户自行开发 OA 的功能模块,需要根据 OA 的相关规范进行开发,这样既可以使自行开
发的模块和 OA 的界面效果一直,又可以保证自行开发的程序在 OA 安全框架的保护之下,这
样不仅可以保证新模块数据的安全,又可以使开发人员集中精力投入到模块功能的开发上。
OA 的各功能模块下的每个程序都需要包含 OA 的安全验证程序:inc/auth.php。该程序
包含了对用户登录信息、是否有权限访问该路径等的检查,以及 OA 界面效果的基本样式表
等。具体的语法为:include_once("inc/auth.php");OA 数据库的所有表名和字段名称全部
使用大写字母,开发过程请注意。
在开发自己的功能模块时可以参考现有 OA 模块,把功能相似的 OA 模块代码复制一份,
然后在 OA 代码的基础上修改。以下几个小节介绍 OA 系统变量和数据库的使用。
PHP、HTML、Javascript 等开发的基础知识请参考 通达网站/OA 知识库/通达科技历届
培训会议资料/2006 年 9 月-通达 OA 用户培训与交流研讨会资料/会议技术资料/通达 OA 开
发平台基础知识.ppt
3.4.1 系统变量
OA 系统提供了 5 个通过 SESSION 保存的当前用户的系统变量,分别是
$LOGIN_UID
$LOGIN_USER_ID
$LOGIN_USER_NAME
$LOGIN_USER_PRIV
$LOGIN_DEPT_ID
$LOGIN_AVATAR
$LOGIN_THEME
//用户数字 ID
//用户名,登录使用
//用户真实姓名
//用户角色 ID
//用户部门 ID
//用户头像
//用户界面主题
如需使用这些系统变量,程序需要包含 auth.php,如下代码:
<?
include_once("inc/auth.php");
echo "我的登录用户 ID 是".$LOGIN_USER_ID; //本句中的.表示字符串连接
?>
3.4.2 PHP 代码样例3.4.
以下是一段样例代码 index.php,可放置于 abc 目录下,可作为开发 OA 应用程序的模
版。//或/*…*/是 PHP 的注释语句。
<?
include_once("inc/auth.php");// 如需登录验证则包含,未登录将退出
//include_once("inc/conn.php");// 如需要连接数据库则包含
//include_once("inc/utility_all.php"); // 如需要使用公用函数则包含
//include_once("inc/check_type.php"); // 如需要使用类型检验函数则包含
//如已包含 auth.php,则无须包含 conn.php
?>
<html>
<head>
<title>功能模块名称</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body class="bodycolor">
<?
echo "当前登录的用户为:".$LOGIN_USER_NAME.",用户名为:".$LOGIN_USER_ID;
?>
</body>
</html>
程序运行结果如下:
3.4.3 连接数据库代码3.4.
以下程序代码为读取 admin 用户所属部门的示例:
<?
include_once("inc/auth.php");
include_once("inc/utility_all.php");
?>
<html>
// 如需登录验证则包含,未登录将退出
// 如需要使用公用函数则包含
<head>
<title>功能模块名称</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body class="bodycolor">
<?
$query = "SELECT * from USER where USER_ID='admin'";
$cursor= exequery($connection,$query);
/*
exequery 是 OA 系统 inc/conn.php 包装的 SQL 语句执行函数,$connection 是数据库的连
接标识符
*/
if($ROW=MySQL_fetch_array($cursor))
$DEPT_ID=$ROW["DEPT_ID"];
echo "admin 用户所在部门为:<u>".dept_long_name($DEPT_ID)."</u>";
?>
</body>
</html>
执行效果如下图:
从这段程序可以看出,使用 OA 系统提供的系统头文件和函数,访问数据库将是一件很
轻松的事,不用操心数据库的连接参数等问题,只需简单的写下 SQL 语句,执行它。
MySQL 数据库的连接参数在 MYOA\webroot\inc\oa_config.php 文件中配置,如果自己
安装 MySQL 数据库,可自行修改连接参数。
第四章 内置函数参考
4.1 utility.php
4.1.1 Message
函数原型:
Message($TITLE, $CONTENT, $STYLE="")
功能描述:
输出一个信息提示框的 HTML 代码
参数:
$TITLE
$CONTENT
$STYLE
返回值:
无
//信息框标题
//信息框提示信息
//信息框样式,可选的值有 error、warning、stop、forbidden、help、info
4.1.2 Button_Back
函数原型:
Button_Back()
功能描述:
输出一个返回按钮的 HTML 代码
参数:
无
返回值:
无
4.1.3 find_id
函数原型:
find_id($STRING, $ID)
功能描述:
在字符串$STRING 中查找子串$ID
参数:
$STRING
$ID
返回值:
找到则返回 true,否则返回 false,布尔值
//以英文逗号(,)连接的 N 个 ID 值的一个字符串,如 a,b,c,d
//要查找的子符串,如 c
4.2 utility_all.php
4.2.1 csubstr
函数原型:
csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2)
功能描述:
截取中文字符串
参数:
$str
$start
$long
$ltor
$cn_len
返回值:
截取后的中文字符串。
//要截取的字符串
//截取起始位置,默认从头开始
//要截取的长度
//系统保留
//系统保留
4.2.2 is_ip
函数原型:
is_ip($IP)
功能描述:
判断一个字符串是否是一个合法的 IP 地址
参数:
$IP
返回值:
如果$IP 是一个 IP 地址则返回 true,否则返回 false。
//IP 地址字符串
4.2.3 add_log
函数原型:
add_log($TYPE,$REMARK,$OPERATOR)
功能描述:
添加系统日志
参数:
$TYPE
$REMARK
$OPERATOR
返回值:
无
//日志类型代码,参考系统代码设置下的“系统日志类型”
//备注
//产生日志的用户的用户名,一般为当前用户
4.2.4 get_code_name
函数原型:
get_code_name($CODE_NO,$PARENT_NO)
功能描述:
获取系统代码的描述
参数:
$CODE_NO
$PARENT_NO
返回值:
对应代码值的文字描述
示例代码:
echo get_code_name('0','SMS_REMIND'); //输出“个人短信”
echo get_code_name('0,1','SMS_REMIND'); //输出“个人短信,公告通知”
//系统代码的代码值,如果多个代码则用英文逗号串起来
//父类型代码值
4.2.5 get_client_ip
函数原型:
get_client_ip()
功能描述:
获取用户的客户端 IP 地址
参数:
无
返回值:
用户的客户端 IP 地址字符串
4.2.6 dept_long_name
函数原型:
dept_long_name($DEPT_ID)
功能描述:
获取部门 ID 为$DEPT_ID 的多级部门名称
参数:
$DEPT_ID
返回值:
$DEPT_ID 对应的部门长名称,如“系统处/OA 开发组”
//部门 ID
4.2.7 get_sys_para
函数原型:
get_sys_para($PARA_NAME_STR)
功能描述:
获取系统参数设置的参数值并返回一个数组
参数:
$PARA_NAME_STR
返回值:
系统参数值的数组
//系统参数名称字符串,多个的话用英文逗号隔开
代码示例:
$PARA_ARRAY=get_sys_para("MENU_DISPLAY,MENU_EXPAND_SINGLE");
$PARA_ARRAY 为 array( "MENU_DISPLAY" => "1", "MENU_EXPAND_SINGLE" => "0");
4.2.8 set_sys_para
函数原型:
set_sys_para($PARA_ARRAY)
功能描述:
批量设置系统参数
参数:
$PARA_ARRAY //系统参数数组,数组键值为参数名,如 array("MENU_DISPLAY"=>"1")
返回值:
无
4.3 utility_org.php
4.3.1 is_dept_parent
函数原型:
is_dept_parent($DEPT_ID,$PARENT_ID)
功能描述:
判断一个部门是否是另外一个部门的上级部门
参数:
$DEPT_ID//要判断的部门 ID
$PARENT_ID //上级部门 ID
返回值:
是则返回 true,否则返回 false。
4.3.2 top_dept
函数原型:
top_dept($DEPT_ID)
功能描述:
获取部门 ID 为$DEPT_ID 的部门的最上级部门的 ID。
参数:
$DEPT_ID
返回值:
最上级部门的 ID。
//部门 ID
4.3.3 GetDeptNameById
函数原型:
GetDeptNameById($ID_STR)
功能描述:
获取 N 个部门的部门名称。
参数:
$ID_STR //N 个部门的 ID,用逗号串起来,如“1,2,”
返回值:
N 个部门名称字符串,用逗号串起来,如“系统部,OA 开发组”。
4.3.4 GetPrivNameById
函数原型:
GetPrivNameById($ID_STR)
功能描述:
获取 N 个角色的角色名称。
参数:
$ID_STR //N 个角色的 ID,用逗号串起来,如“1,2,”
返回值:
N 个角色名称字符串,用逗号串起来,如“OA 管理员,职员”。
4.3.5 GetUserNameById
函数原型:
GetUserNameById($ID_STR)
功能描述:
获取 N 个用户的用户姓名。
参数:
$ID_STR //N 个用户的用户名,用逗号串起来,如“admin,lxq,”
返回值:
N 个用户的真实姓名字符串,用逗号串起来,如“系统管理员,刘向前”。
4.3.6 GetUserNameByUid
函数原型:
GetUserNameByUid($ID_STR)
功能描述:
获取 N 个用户的用户姓名。
参数:
$ID_STR //N 个用户的数字,用逗号串起来,如“1,2,”
返回值:
N 个用户的真实姓名字符串,用逗号串起来,如“系统管理员,刘向前”。
4.3.7 my_exclude_uid
函数原型:
my_exclude_uid()
功能描述:
获取当前用户不能与之通讯的用户的数字 ID(UID)。
参数:
无
返回值:
当前用户不能与之通讯的用户的数字 ID(UID)。
4.4 utility_sms1.php
4.4.1 send_sms
函数原型:
send_sms($SEND_TIME,$FROM_ID,$TO_ID,$SMS_TYPE,$CONTENT,$REMIND_URL="")
功能描述:
发送内部短消息。
参数:
$SEND_TIME
$FROM_ID
$TO_ID
$SMS_TYPE
$CONTENT
$REMIND_URL
返回值:
无
//发送时间字符串,如“2009-01-12 02:00:00”
//发送人用户名,如“admin”
//接收人用户名用逗号串起来的字符串,如“lxq,xfn”
//短信类型代码,参考系统代码设置下的“内部短消息类型”
//短信内容
//点击短信提醒弹出窗口的“查看详情”打开的地址
4.4.2 delete_sms
函数原型:
delete_sms($SMS_ID_STR,$DEL_TYPE)
功能描述:
删除内部短消息。
参数:
$SMS_ID_STR
$DEL_TYPE
返回值:
无
//要删除的短信 ID 串,用逗号串起来,如“1,2,3”
//DEL_TYPE=1 删除收到的短信,DEL_TYPE=2 删除发送的短信
4.5 utility_sms2.php
4.5.1 send_mobile_sms_user
函数原型:
send_mobile_sms_user($SEND_TIME,$FROM_ID,$TO_ID,$CONTENT,$TYPE)
功能描述:
给 OA 用户发送手机短信。
参数:
$SEND_TIME
$FROM_ID
$TO_ID
$CONTENT
$TYPE
返回值:
无
//发送时间字符串,如“2009-01-12 02:00:00”
//发送人用户名,如“admin”
//接收人用户名用逗号串起来的字符串,如“lxq,xfn”
//短信内容
//短信类型代码,参考系统代码设置下的“内部短消息类型”
4.5.2 send_mobile_sms
函数原型:
send_mobile_sms($SEND_TIME,$FROM_ID,$PHONE,$CONTENT)
功能描述:
向指定号码发送手机短信。
参数:
$SEND_TIME
$FROM_ID
$PHONE
$CONTENT
返回值:
无
//发送时间字符串,如“2009-01-12 02:00:00”
//发送人用户名,如“admin”
//接收手机号码字符串,如“138xxxxxxxx,139xxxxxxxx”
//短信内容
4.6 utility_file.php
4.6.1 upload
函数原型:
upload($PREFIX="ATTACHMENT",$MODULE="")
功能描述:
上传附件,可以一次上传多个附件。
参数:
$PREFIX
$MODULE
返回值:
无
//表单 File 控件名称的前缀,一般为默认即可
//模块代码,如内部邮件为 email,为空则根据程序路径自动判断
4.6.2 delete_attach
函数原型:
delete_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
删除附件,可以一次删除多个附件。
参数:
$ATTACHMENT_ID//附件 ID,多个附件 ID 用逗号隔开
$ATTACHMENT_NAME//附件名称,多个附件名称用*号隔开
$MODULE//模块代码,如内部邮件为 email,为空则根据程序路径自动判断断
返回值:
无
4.6.3 attach_size
函数原型:
attach_size($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
获取附件大小。
参数:
$ATTACHMENT_ID//附件 ID
$ATTACHMENT_NAME//附件名称
$MODULE//模块代码,如内部邮件为 email,为空则根据程序路径自动判断断
返回值:
附件大小,单位字节。
4.6.4 copy_attach
函数原型:
copy_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE_SRC="",$MODULE_DESC="")
功能描述:
拷贝一个或多个附件。
参数:
$ATTACHMENT_ID//附件 ID,多个附件 ID 用逗号隔开
$ATTACHMENT_NAME//附件名称,多个附件名称用*号隔开
$MODULE_SRC//原附件所属模块代码,为空则根据程序路径自动判断断
$MODULE_DESC//新附件所属模块代码,为空则根据程序路径自动判断断
返回值:
新附件的附件 ID 串,多个附件的话用逗号隔开。
4.6.5 is_uploadable
函数原型:
is_uploadable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否允许上传。
参数:
$FILE_NAME
返回值:
允许上传则返回 true,否则返回 false。
//要判断的文件名
4.6.6 is_text
函数原型:
is_text($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是文本文件。
参数:
$FILE_NAME
返回值:
是文本文件则返回 true,否则返回 false。
//要判断的文件名
4.6.7 is_office
函数原型:
is_office($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是 Office 文档。
参数:
$FILE_NAME
返回值:
是 Office 文档则返回 true,否则返回 false。
//要判断的文件名
4.6.8 is_image
函数原型:
is_image($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是图片。
参数:
$FILE_NAME
返回值:
是图片则返回 true,否则返回 false。
23
//要判断的文件名
4.6.9 is_viewable
函数原型:
is_viewable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否可以直接浏览,如 htm、pdf、图片等。
参数:
$FILE_NAME
返回值:
可以直接浏览则返回 true,否则返回 false。
//要判断的文件名
4.6.10 is_media
函数原型:
is_media($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是媒体文件,如视频、音频文件等。
参数:
$FILE_NAME
返回值:
RealPlayer 播放类型返回 1,如 rm、rmvb 等
MediaPlayer 播放类型返回 2,如 wmv、mpeg 等
可直接在浏览器里打开的类型返回 3,如图片、pdf、html 等
Flash 播放类型返回 4,如 flv,fla 等
其它返回 0
//要判断的文件名
4.6.11 dir_size
函数原型:
dir_size($dir)
功能描述:
根据目录路径返回其下属子目录和文件的大小。
参数:
$dir
返回值:
目录大小,单位字节。
//服务器目录路径,如 D:/MYOA
4.6.12 delete_dir
函数原型:
delete_dir($dir)
功能描述:
根据目录路径删除该目录及其所有下属子目录和文件。
参数:
$dir
返回值:
无
//服务器目录路径,如 D:/MYOA
4.6.13 attach_sub_dir
函数原型:
attach_sub_dir()
功能描述:
根据程序路径判断其所属模块。
参数:
无
返回值:
附件所属模块代码,如在/general/email/new/submit.php 中调用该函数则返回 email。
4.6.14 attach_real_path
函数原型:
attach_real_path($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
根据附件的 ID、名称等获取该附件在服务器上存储的物理路径。
参数:
$ATTACHMENT_ID
$ATTACHMENT_NAME
$MODULE
返回值:
附件在服务器上的物理路径,如 D:/MYOA/attach/0901/123456789.二次开发手册.doc。
//附件 ID
//附件名称
//附件所述模块代码
4.6.15 attach_id_encode
函数原型:
attach_id_encode($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
根据附件的真实 ID 和名称获取在前台代码中显示的 ID。
参数:
$ATTACHMENT_ID
$ATTACHMENT_NAME
返回值:
经过加密处理的 ID。
//附件 ID
//附件名称
4.6.16 attach_id_decode
函数原型:
attach_id_decode($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
根据附件的加密 ID 和真实名称获取真实 ID。
参数:
$ATTACHMENT_ID
$ATTACHMENT_NAME
返回值:
附件的真实 ID。
//附件加密 ID
//附件真实名称
第五章 公用组件参考
公用组件为 JavaScript 脚本的前台代码,目的是为了简化前端程序的二次开发,开发
出和 OA 结合更紧密、更一致的功能。
5.1 日期选择
函数原型:
td_calendar(fieldname)
功能描述:
弹出一个日期选择窗口
加载文件:
/inc/js/module.js
参数:
fieldname
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
生效日期:<input type="text" name="BEGIN_DATE" size="10" class="BigInput">
<img src="calendar.gif" onClick="td_calendar('form1.BEGIN_DATE');">
</form>
//表单对应字段的对象,如 form1.BEGIN_DATE
5.2 人员多选
函数原型:
SelectUser(MODULE_ID,TO_ID, TO_NAME, MANAGE_FLAG,FORM_NAME)
功能描述:
弹出一个人员多选窗口
加载文件:
27
Office Anywhere 网络智能办公系统 二次开发手册
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
MANAGE_FLAG
FORM_NAME
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectUser('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
//模块 ID,系统保留,传递空值即可
//存放已选人员用户名的字段名,多个用户名用英文逗号隔开
//存放已选人员用户真实姓名的字段名,多个姓名用英文逗号隔开
//是否显示不允许登录 OA 人员,默认为 0
//表单名称,默认为“form1”
5.3 人员单选
函数原型:
SelectUserSingle(MODULE_ID,TO_ID, TO_NAME, MANAGE_FLAG,FORM_NAME)
功能描述:
弹出一个人员单选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
MANAGE_FLAG
FORM_NAME
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
28
//模块 ID,系统保留,传递空值即可
//存放已选人员用户名的字段名
//存放已选人员用户真实姓名的字段名
//是否显示不允许登录 OA 人员,默认为 0
//表单名称,默认为“form1”
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectUserSingle('','TO_ID', 'TO_NAME')">添
加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
5.4 部门多选
函数原型:
SelectDept(MODULE_ID,TO_ID, TO_NAME, PRIV_OP)
功能描述:
弹出一个部门多选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
PRIV_OP
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectDept('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
//模块 ID,系统保留,传递空值即可
//存放已选部门 ID 的字段名,多个 ID 用英文逗号隔开
//存放已选部门名称的字段名,多个名称用英文逗号隔开
//选择部门的范围,0 所有部门,1 用户管理范围内的部门
5.5 部门单选
函数原型:
SelectDeptSingle(MODULE_ID,TO_ID, TO_NAME, PRIV_OP)
功能描述:
弹出一个部门单选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
PRIV_OP
返回值:
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectDeptSingle('','TO_ID', 'TO_NAME')">添
加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
//模块 ID,系统保留,传递空值即可
//存放已选部门 ID 的字段名
//存放已选部门名称的字段名
//选择部门的范围,0 所有部门,1 用户管理范围内的部门
5.6 角色多选
函数原型:
SelectPriv(MODULE_ID,TO_ID, TO_NAME, PRIV_OP)
功能描述:
弹出一个角色多选窗口
加载文件:
/inc/js/module.js
参数:
MODULE_ID
TO_ID
TO_NAME
PRIV_OP
返回值:
//模块 ID,系统保留,传递空值即可
//存放已选角色 ID 的字段名,多个 ID 用英文逗号隔开
//存放已选角色名称的字段名,多个名称用英文逗号隔开
//默认 0,如果当前用户非 OA 管理员且该参数为 1,则不列出 OA 管理员
无
示例代码:
<script src="/inc/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectPriv('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
发表评论
-
中学数据管理平台方案
2015-04-06 11:14 687XXX中学数据管理平台方案 本系统共分 ... -
Formweaver表单设计
2015-03-24 17:22 2185表单设计概述 支持自定义模板。表单编辑和查看页面共 ... -
通达OA自动发起工作流代码
2014-11-16 22:02 3047<? //通达OA自动发起工作流代码 includ ... -
OA软件整体快速迁移的技巧
2012-11-22 08:45 1364<!--StartFragment --> OA ... -
通达OA多语言版如何实现
2012-08-26 22:17 2744通达OA官方有国际版 ... -
通达OA二次开发 修改
2012-08-13 15:08 1694传统的OA产品一 ...
相关推荐
通达OA二次开发手册 V12主要针对的是系统升级和兼容性改造,特别是从PHP5.4升级到PHP7.2以及MySQL5.6升级到MySQL5.7的情况。在这样的升级过程中,开发者需要注意一些关键的变化和调整。 首先,PHP7.2版本中,`each...
《通达OA二次开发手册》是一本针对Office Anywhere网络智能办公系统进行二次开发的专业指导文档,主要面向具有编程基础的技术人员,旨在帮助他们更好地理解和定制该系统以满足特定业务需求。手册详细介绍了开发环境...
本文将从不同的技术层面向您揭示通达OA的二次开发细节,是主要针对专职程序设计人员、编程爱好者、软件产品技术支持人员编写的OA二次开发入门教程。 通过阅读本文,您将不仅可以了解通达OA的设计奥秘,也将能够运用...
通达OA移动端开发帮助手册_二次开发API
首先,我们来了解一下《通达OA二次开发手册》。这份文档通常会涵盖以下内容: 1. **系统架构**:解释通达OA 2013 增强版的整体架构,包括前端界面、后端服务器、数据库结构等,这对于理解系统的运行机制非常重要。 ...
通达OA二次开发手册 通达OA二次开发手册 通达OA二次开发手册
本资料集合包含了“通达OA 2013 增强版 二次开发手册”和“数据库字典”,是进行二次开发的重要参考资料。 **二次开发手册**: 1. **开发环境配置**:手册会详细介绍如何搭建适合通达OA 2013开发的环境,包括服务器...
二次开发模块是通达OA系统的一大特色,它允许用户根据自身业务需求进行定制化开发,以满足不同企业的个性化需求。在这个特定的“性向测试”模块中,我们可能涉及到的知识点包括: 1. **二次开发基础**:通达OA提供...
通过深入学习《通达协同办公系统二次开发手册》,开发者不仅可以对通达OA有全面了解,还能掌握协同办公系统的开发技巧,从而根据企业的实际需求,打造出更加贴合业务场景的信息化解决方案。这不仅提升了工作效率,也...
"OA2019CODE30 (2)"可能是表明这是第二次发布或者是某种更新的版本。"通达;oa;开源;代码"这几个关键词再次确认了这是关于通达OA的开源代码。而".zip"文件格式则表明这是一个压缩包,通常用于打包多个文件或文件夹...