前 言
Office Anywhere 网络智能办公系统(以下简称通达 OA),不仅是一套成熟的网络办公系统,同时也是一个完整、精巧的软件开发平台,不仅集成了 Web 开发的全套环境,并提供了管理架构、系统资源的开放性支持,是开发中小型管理应用系统的理想平台。
本文将从不同的技术层面向您揭示通达 OA 的二次开发细节,是主要针对专职程序设计人员、编程爱好者、软件产品技术支持人员编写的 OA 二次开发入门教程。
通过阅读本文,您将不仅可以了解通达 OA 的设计奥秘,也将能够运用本文所介绍的知识和技巧,轻松构建属于自己的应用系统或模块,文中将结合具体实例加以说明。
Office Anywhere 网络智能办公系统 二次开发手册
第一章 软件开发环境简介
1.1 编程环境
通达 OA 主要采用 PHP 语言开发,系统使用 MySQL 数据库。
在 Windows 平台下,通达 OA 主要注册了 11 个系统服务,可以通过控制面板-〉管理工具-〉服务,查看这 11 项服务,服务名分别是 Office_Web、MySQL5_OA、Office_Redis、 OfficeDaemon 、 OfficeIm 、 OfficeIndex 、 OfficeMail 、 OfficePOP3 、 OfficeTask 、OfficeDbProxy、OfficeMQ,Office_Web 是管理 ngnix 进程的服务,Office_Web 是通达 OA 所使用的 Web Server,通达 OA 也可以支持 IIS 作为 Web Server,具体配置方法参见通达网站 OA 知识库相关文档。
关于 PHP 语言的使用,可参阅 http://www.php.net,下载 PHP 手册,作为开发指导, PHP 版本已升级至 5.3,该版本中许多函数或方法有调整,使用时需要注意;关于 MySQL 数据库的管理与使用,将在第二章进行详细介绍。
1.2 目录层次结构
通达 OA 的目录层次结构清晰,体现出对服务程序、应用程序、WEB 页面的巧妙整合与组织,便于理解和扩充,下面对目录结构加以说明:
MYOA
├─attach |
OA 附件文件存放目录 |
|
├─bin |
PHP、Zend 等主程序及配置文件,服务配置程序等 |
|
├─data5 |
MySQL 数据库文件目录 |
|
│ |
├─BUS |
公交线路查询数据库 |
│ |
├─TD_OA |
通达 OA 主数据库 |
│ |
├─crscell |
报表数据库 |
│ |
├─MySQL |
MySQL 系统数据库 |
│ ├─TD_OA_ARCHIVE |
通达 OA 归档数据库 |
|
│ |
├─ib_logfile0 |
InnoDB 引擎使用的日志文件 |
│ |
├─ib_logfile1 |
InnoDB 引擎使用的日志文件 |
│ |
└─ibdata1 |
InnoDB 引擎存储数据与索引的数据文件 |
├─logs |
OA 服务等的日志文件目录 |
|
├─MyAdmin |
通达 OA 的 MySQL 管理工具 |
|
├─mysql5 |
MySQL 主程序文件 |
Office Anywhere 网络智能办公系统 二次开发手册
├─nginx 高性能的通达 Nginx Web 应用服务
├─tmp 临时文件目录
└─webroot 通达 OA 的 WEB 根目录(PHP 程序目录)
├─attachment 部分 OA 附件文件存放目录
│ ├─hrms_pic 人事档案照片目录
│ |
├─new_sms |
新短消息提醒状态文件 |
│ ├─…… |
部分附件目录(略) |
|
│ |
├─rss |
今日资讯信息缓存文件 |
│ |
├─update |
系统升级,该文件夹下如存在 1.php 会被自动执行并删除 |
│ |
├─weather |
天气预报缓存文件 |
│ |
└─wm |
外部邮件存储目录 |
├─general |
主要模块目录 |
|
│ ├─ …… |
一般模块目录(略) |
|
│ |
├─appbuilder |
Yii 框架目录 |
│ |
├─ipanel |
主控面板,集成了菜单、短信箱等应用控制界面 |
│ |
├─mytable |
桌面模块程序 |
│ |
└─system |
系统功能模块,下级目录略 |
├─inc |
系统通用程序及函数目录 |
|
├─ispirit |
OA 精灵页面 |
|
├─mobile |
OA 移动界面 |
|
├─module |
系统组件 |
│ |
├─editor |
简易 HTML 编辑器组件 |
│ |
├─OC |
Office 文档在线编辑与阅读 |
│ |
├─OC_NETDISK |
文档在线编辑与阅读-仅适用于网络硬盘 |
│ |
├─save_file |
文件转存组件 |
├─portal门户界面
└─static系统通用程序及静态文件目录
├─common 通用 css 文件及其引用的图片文件
├─images 所有代码中的标签 src 引用的图片文件
├─templates 登录界面模版
├─theme 界面主题
├─wav 微讯提醒声音
├─js 界面主题
├─templates 登录界面模版
└─modules 所有模块非通用的 css 文件及其引用的图片文件等的目录
├─address 通讯簿非通用 css 文件及其引用的图片文件
├─ …… 部分模块目录(略)
注:上表中红色颜色标示的目录是备份数据时需要备份的,是 OA 的所有数据所存放的目录。
3
Office Anywhere 网络智能办公系统 二次开发手册
1.3 参数配置
1.3.1 OfficeFPM 配置(MYOA\bin\service.ini)
Listen = 8266 //监听端口
ProcessNumber = 10 //fastcgi 进程数
1.3.2 OfficWeb 配置(MYOA\bin\service.ini)
Listen = 2367 //监听端口
MemoryWarning= 100 // 非工作时间 OfficeNginx.exe 占用内存的最大值,
单位为兆字节(MB)
MemoryMax= 200 // 工作时间 OfficeNginx.exe 占用内存的最大值,
单位为兆字节(MB)
1.3.3 PHP 配置(MYOA\bin\php.ini)
display_errors = Off
log_errors = Off
error_log = filename
max_execution_time = 1200
memory_limit = 256M
post_max_size = 1000M
upload_max_filesize = 200M
//是否显示 PHP 程序错误
//是否记录错误日志
//错误日志记录文件
//程序最大执行时间,单位秒
//单个程序占用内存上限
//表单提交最大数据量,单位 MB
//上传单个附件大小,单位 MB
1.3.4 MySQL 配置(MYOA\mysql5\my.ini)
basedir=D:/MYOA/mysql5/ //MySQL 主程序路径
datadir=D:/MYOA/data5/ //MySQL 数据库路径
tmpdir=D:/MYOA/tmp/ //缓存路径
character-set-server=gbk //MySQL 数据库字编码
port=3336 //端口
wait_timeout=30 //SQL 语句执行结束后自动断开时间
interactive_timeout=30 //运行 SQL 语句时段开时间
skip-name-resolve //避免外部锁定(默认是 ON)
bind-address=0.0.0.0 //允许远程连接
innodb_file_per_table=1 //启用独立表空间模式
innodb_file_format=Barracuda //InnoDB 数据压缩
注:以上所有的配置选项修改后都需要重启服务才会生效。
1.3.5 OfficWeb、OfficeFPM 和 PHP 的关系
OfficeWeb 服务守护 OfficeFPM 进程和 OfficeNginx 。 OfficeFPM 进程启动多个(ProcessNumber)FastCGI 进程。OfficeWeb 根据配置参数(MemoryWarning 和 MemoryMax)定时检测 OfficeNginx 的内存占用情况,保证 OfficeNginx 时刻处于正常响应状态。
1.4 核心文件
1.4.1 auth.inc.php (MYOA\webroot\inc\)
通达 OA 为满足用户数据安全,原则上所有的 php 页面执行都将包含 auth.inc.php 权限验证程序,其中包含 session 合法性验证、访问路径授权验证等;
例:include_once("inc/auth.inc.php");
1.4.2 header.inc.php (MYOA\webroot\inc\)
为保证通达 OA 功能显示标准统一,需要使用标准统一的 HTML 解析模式对页面进行解析和渲染,在所有包含 HTML 代码输出的页面都需要包含 header.inc.php 程序,其中包括采用的 HTML 标准、页面字符集、页面标题、标准界面样式表(style.css)等;
例:$HTML_PAGE_TITLE = _("页面标题");
include_once("inc/header.inc.php");
1.4.3 common.inc.php (MYOA\webroot\inc\)
为了防止用户输入不安全数据等,通达 OA 为您提供了用户输入数据($_GET、$_POST、
$_COOKIE)过滤和校验程序,原则上所有 php 页面文件都需要包含,但如果页面已经包含过
auth.inc.php、header.inc.php 或 conn.php,则无需再单独包含。
例:include_once("inc/auth.inc.php");
1.4.4 conn.php (MYOA\webroot\inc\)
为方便用户快速连接操作数据库,且对 SQL 语句安全验证,原则上在进行数据库操作的所有 php 页面都需要包含 conn.php 程序,但如果页面已经包含 auth.inc.php 程序,则无需再单独包含;
例:include_once("inc/conn.php");
第二章 数据库管理
2.1 phpMyAdmin 的安装
MySQL 的数据库管理工具很多,phpMyAdmin 是使用 PHP 编写的免费 MySQL 数据库管理工具。由于 OA 的 MySQL 数据库出于安全考虑,被配置为仅能从本机访问,所以使用 phpMyAdmin 这样的 B/S 结构的管理工具,可实现数据库的远程管理。
第一步、下载程序包
phpMyAdmin 程序可以从其官方网站 http://www.phpmyadmin.net 下载,建议下载最新的 all-language 版本。
第二步、解压缩
在 MYOA\webroot 目录下新建一个目录,如 mysql369(为了防止他人利用该工具侵入数据库系统,可把目录名设为比较复杂的,如 MySQL2345,避免目录名被猜测到。),将下载的程序包解压后拷贝至 mysql369 目录下。
第三步、修改配置文件
用文本编辑器,如记事本,打开 MySQL 管理工具目录,复制 config.sample.inc.php 文件并改名为 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'] = '3336'; //数据库端口,默认为 3336
$cfg['Servers'][$i]['user'] = 'root'; //数据库用户名,默认为 root
$cfg['Servers'][$i]['password'] = ''; //数据库密码,默认为 myoa888
第四步、使用 phpMyAdmin
MySQL 管理工具地址:http://OA 地址/mysql,注意,进入后先选择中文界面(中文 -Chinese simplified )。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,以免导致数据丢失。
2.2 phpMyAdmin 的使用
phpMyAdmin 主界面如下
在左侧选择 TD 数据库,可查看 OA 所有的数据表,如下图
点击左侧的表名,则右侧列出该表的结构和字段、索引、记录数等信息,如下图
phpMyAdmin 的具体使用教程方法可以参考 通达网站/OA 知识库/Office Anywhere 高级
应用技巧/OA 数据库管理工具/mysql 网页方式管理工具/phpMyAdmin 的安装和使用.wmv 。
第三章 如何创建一个模块
创建一个模块一般需要经过以下几个步骤:根据功能建立程序存放目录、创建菜单、分
配菜单权限、编码、测试等。
3.1 建立模块目录
3.2 创建菜单
用管理员帐号进入 OA,打开 系统管理->菜单设置,在相应的一级菜单后点击“下一级”链接,在右侧的界面上点击“增加子菜单项”按钮,如下图所示:
详细阅读上图界面中的说明信息,按界面上说明的要求定义好菜单:
子菜单项 ID:系统自动生成,无须调整
上级菜单:根据自己的实际应用情况调整
子菜单项代码:两位的数字或字母,作为排序之用子菜单项名称:根据自己的实际应用自行填写
子菜单模块路径:该菜单对应的程序目录,应为上一个步骤创建的目录名称。如果为new_module,则该菜单对应的菜单图片名称为 MYOA\webroot\static\images\menu\new_mod ule.gif,需要自己创建或拷贝 new_module.gif 拷贝至 MYOA\webroot\static\images\menu 下。
3.3 分配菜单权限
用系统管理员账号,在菜单创建完成后跳转界面直接可以给指定菜单分配权限(首次分配菜单权限时需要验证超级密码,与系统管理->组织机构设置->角色与权限管理中超级密码一致),如下图所示:
也可以使用传统方式给新建菜单分配权限,用管理员帐
号进入 OA,打开 系统管理->组织机构设置->角色与权限管理,给相关的角色分配刚创建的菜单的使用权限,则相关角色的人员就可以在 OA 界面左侧的菜单中看到并访问该菜单。
3.4 编码和测试
为便于用户开发自己的模块,通达科技在用户服务区提供了 Office Anywhere 部份模块源码的下载,供开发人员参考。
用户自行开发 OA 的功能模块,需要根据 OA 的相关规范进行开发,这样既可以使自行开发的模块和 OA 的界面效果一致,又可以保证自行开发的程序在 OA 安全框架的保护之下,这样不仅可以保证新模块数据的安全,又可以使开发人员集中精力投入到模块功能的开发上。
OA 的各功能模块下的每个程序都需要包含 OA 的安全验证程序:inc/auth.inc.php。该程序包含了对用户登录信息、是否有权限访问该路径等的检查等。具体的语法为:include_once("inc/auth.inc.php");为更好兼容更多版本的浏览器,需要使用标准统一的 HTML 解析模式对页面进行解析和渲染,在所有包含 HTML 代码输出的页面,都需要包含:inc/header.inc.php,输出统一的 HTML 头信息,包括采用的 HTML 标准、页面字符集、页面标题、标准界面样式表(style.css)等。在没有 HTML 代码输出的页面,不需要包含该文件。
OA 数据库的所有表名全部使用小写字母,字段名称全部使用大写字母,新模块中字段名也
建议与表名统一使用小写字母,开发过程请注意。
在开发自己的功能模块时可以参考现有 OA 模块,把功能相似的 OA 模块代码复制一份,
然后在 OA 代码的基础上修改。以下几个小节介绍 OA 系统变量和数据库的使用。
3.4.1 系统变量
OA 系统提供了多个通过 SESSION 保存的当前用户的系统变量,分别是
$_SESSION["LOGIN_UID"]
$_SESSION["LOGIN_USER_ID"]
$_SESSION["LOGIN_BYNAME"]
$_SESSION["LOGIN_USER_NAME"]
$_SESSION["LOGIN_USER_PRIV"]
$_SESSION["LOGIN_USER_PRIV_OTHER"]
$_SESSION["LOGIN_SYS_ADMIN"]
$_SESSION["LOGIN_DEPT_ID"]
$_SESSION["LOGIN_DEPT_ID_OTHER"]
$_SESSION["LOGIN_AVATAR"]
$_SESSION["LOGIN_THEME"]
$_SESSION["LOGIN_FUNC_STR"]
$_SESSION["LOGIN_NOT_VIEW_USER"]
$_SESSION["LOGIN_DEPT_ID_JUNIOR"]
$_SESSION["LOGIN_CLIENT"]
$_SESSION["LOGIN_USER_SEX"]
//用户数字 ID
//用户名,无意义
//用户名,又叫用户别名,登录使用
//用户真实姓名
//用户角色 ID
//用户辅助角色 ID
//用户是否有系统管理员权限
//用户部门 ID
//用户辅助部门 ID
//用户头像
//用户界面主题
//用户模块权限
//用户禁止查看用户列表
//用户所在部门和所属部门合集字符串//用户登录 OA 的设备类型//用户性别
如需使用这些系统变量,程序需要包含 auth.inc.php,如下代码:
include_once("inc/auth.inc.php");
echo "我的登录用户名是".$_SESSION["LOGIN_BYNAME"]; //本句中的.表示字符串连接
?>
3.4.2 PHP 代码样例
以下是一段样例代码 index.php,可放置于 new_module 目录下,可作为开发 OA 应用程
序的模版。//或/*…*/是 PHP 的注释语句。
include_once("inc/auth.inc.php"); // 如需登录验证则包含,未登录将退出
//include_once("inc/conn.php"); // 如需要连接数据库则包含
//如已包含 auth.inc.php,则无须包含 conn.php
//include_once("inc/utility_all.php"); // 如需要使用公用函数则包含
//include_once("inc/check_type.php"); // 如需要使用类型检验函数则包含
$HTML_PAGE_TITLE = _("功能模块名称");
include_once("inc/header.inc.php"); // 如有 HTML 代码输出则包含
?>
echo " 当 前 登 录 的 用 户 为 : ".$_SESSION["LOGIN_USER_NAME"]." , 用 户 名 为 :
".$_SESSION["LOGIN_BYNAME"];
?>