OfficeAutomation网络智能办公系统二次开发手册2北京极限通科技有限公司2005年7月10日3前言OfficeAutomation网络智能办公系统(以下简称极限OA),不仅是一套成熟的网络办公系统,同时也是一个完整、精巧的软件开发平台,不仅集成了Web开发的全套环境,并提供了管理架构、系统资源的开放性支持,是开发中小型管理应用系统的理想平台。本文将从不同的技术层面向您揭示极限OA的二次开发细节,是主要针对专职程序设计人员、编程爱好者、软件产品技术支持人员编写的OA二次开发入门教程。通过阅读本文,您将不仅可以了解极限OA的设计奥秘,也将能够运用本文所介绍的知识和技巧,轻松构建属于自己的应用系统或模块,文中将结合具体实例加以说明。4一、软件开发环境简介1.1编程环境极限OA主要采用PHP语言开发,系统使用Mysql数据库。在Windows平台下,极限OA主要注册了2个系统服务,可以通过控制面板-〉管理工具-〉服务,查看这2项服务,服务名分别是OA_Service和Mysql,Office_Automation服务实际是集成了PHP模块的Apache服务,Apache是极限OA所使用的WebServer,极限OA也可以支持IIS作为WebServer,具体配置方法参见网站下载中心相关文档。关于PHP语言的使用,可下载PHP中文手册,作为开发指导;关于Mysql数据库的管理与使用,将在第二章进行详细介绍。1.2目录层次结构极限OA的目录层次结构清晰,体现出对服务程序、应用程序、WEB页面的巧妙整合与组织,便于理解和扩充。下面对目录结构加以说明:D:\myoa├─binApache及PHP系统文件、PHP配置文件、Zend/MMcache加速器、服务配置程序│└─sapiPHP的Apache接口程序├─modulesApache的模块5├─webroot极限OA的WEB根目录│├─attachment极限OA的附件目录,其路径可通过webroot\inc\oa_config.php指定││├─wm外部邮件存储目录││└─hrms_pic人事档案照片目录│├─general主要模块目录││├─……一般模块目录(略)││├─ipanel主控面板,集成了菜单、短信箱等应用控制界面│││├─bookmark收藏夹│││├─shortcut快捷组││││├─menu_define菜单快捷组││││└─win_defineWindows快捷组│││└─smsbox短信箱││├─mytable桌面│││├─intel_view智能桌面显示程序│││└─myconfig桌面自定义││├─status_bar状态栏││├─system系统功能模块,下级目录略││└─winexe调用Windows外部程序的页面│├─ikernel通用管理程序,支持创建简单的MIS系统│├─images系统图片目录6││├─avatar头像││└─menu菜单图片│├─inc系统通用程序及函数目录││├─dept_list部门列表XML输出││├─jpgraph统计图组件││└─user_list用户列表XML输出│├─ispiritOA精灵页面│├─module系统组件││├─dept_select部门选择组件││├─editor简易HTML编辑器组件││├─OCOffice文档在线编辑与阅读-适用于文件柜、工作流等模块││├─OC_NETDISK文档在线编辑与阅读-仅适用于网络硬盘││├─rte复杂HTML编辑器组件││├─save_file文件转存组件││├─user_select用户多选组件││└─user_select_single用户单选组件│├─theme界面主题│├─update系统升级,该文件夹下如存在1.php会被自动执行并删除│└─wav系统声音,Flash格式7├─tmp缓存目录,存储上传文件和登录Session文件。├─logsApache日志目录,主要包含了错误日志error.log├─confApache配置文件目录├─dataMysql数据库目录│├─TD_OA极限OA主数据库│├─dzbbs超级论坛数据库│└─mysqlMysql系统数据库└─mysqlMysql数据库服务程序8二、数据库管理与应用2.1数据库的配置极限OA在安装完毕后,会自动配置Mysql启动参数,并注册Mysql系统服务。出于特殊需要,用户也可以手动修改Mysql的配置参数,方法是使用记事本打开windows目录\my.ini,这是Mysql的配置文件,其内容一般如下格式:[mysqld]basedir=D:\MYOA\mysql\datadir=D:\MYOA\data\default-character-set=gbkset-variable=max_connections=1000其中,basedir表示mysql服务程序路径、datadir表示数据库文件路径,可根据实际情况进行调整并保存配置文件,重新启动Mysql服务后生效。2.2数据库的管理Mysql的数据库管理工具很多,常见的有phpMyAdmin等,phpMyAdmin是使用PHP编写的免费Mysql数据库管理工具。由于OA的Mysql数据库出于安全考虑,被配置为仅能从本机访问,所以使用phpMyAdmin这样的B/S结构的管理工具,可实现数据库的远程管理。9可通过网站OA知识库/OfficeAutomation高级应用技巧/数据库管理工具/mysql网页方式管理工具,找到该程序的下载地址。将解压的文件,拷贝至OA目录\webroot\mysql目录下。mysql数据库的网页管理工具,使用方法http://主机名/mysql,注意,进入后先选择中文界面。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,以免导致数据丢失。另外,为了防止他人利用该工具侵入数据库系统,可把目录名设为比较复杂的,如mysql2345,避免目录名被猜测到。phpMyAdmin主界面10选择TD_OA数据库,可查看数据表结构和数据为便于说明二次开发的过程,我们通过数据库管理工具,新建一个数据表。11新数据表STUDENT表示学生数据表,包含3个字段,ID是自增字段,作为主键和唯一标识,NAME表示姓名,SEX表示性别,值为1表示男,为2表示女。插入一条数据,并浏览,显示如图数据库管理工具简要介绍到此,对于有SQL关系型数据库基础的开发人员,掌握phpMyAdmin这个工具并不难。关于Mysql的语法规则参见Mysql手册,连同OA数据库结构说明,均可到上面提到的phpMyAdmin下载地址下载。12三、使用PHP语言开发OA功能模块的规范3.1PHP代码样例以下是一段样例代码test.php,可放置于webroot目录下执行,可作为开发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?htmlheadtitle页面标题/titlemetahttp-equiv=Content-Typecontent=text/html;13charset=gb2312/headbodyclass=bodycolor?echohelloOA;?/body/html程序运行结果3.2数据库连接函数参考以下程序代码read.php,访问我们之前建立的STUDENT14表?include_once(inc/conn.php);$query=SELECT*fromSTUDENT;$cursor=exequery($connection,$query);/*exequery是OA系统inc/conn.php包装的SQL语句执行函数,$connection是数据库的连接标识符*/if($ROW=mysql_fetch_array($cursor))$NAME=$ROW[NAME];echo$NAME;?程序运行结果15从这段程序可以看出,使用OA系统提供的系统头文件和函数,访问数据库将是一件很轻松的事,不用操心数据库的连接参数等问题,只需简单的写下SQL语句,执行它。以下这段程序,将删除STUDENT表的所有数据。?include_once(inc/conn.php);$query=deletefromSTUDENT;exequery($connection,$query);?Mysql数据库的连接参数在webroot\inc\oa_config.php文件中配置,可自行修改连接参数。3.3系统变量OA系统提供了5个通过SESSION保存的系统变量,分别是$LOGIN_USER_ID用户ID$LOGIN_USER_PRIV用户角色ID$LOGIN_DEPT_ID用户部门ID$LOGIN_AVATAR用户头像$LOGIN_THEME用户界面主题16先建test.php如需使用这些系统变量,程序需要包含auth.php,如下代码:?include_once(inc/auth.php);echo我的登录用户ID是.$LOGIN_USER_ID;//本句中的.表示字符串连接?因为执行这个程序前,必须先登录,我们首先定义一项个人网址,以便执行这个需要登录的程序。17程序执行结果以下一段程序,可以分别取出用户姓名、用户角色名称、在线时间至$USER_NAME、$USER_PRIV和$ONLINE变量。?include_once(inc/auth.php);$query=SELECT*fromUSERwhereUSER_ID='$LOGIN_USER_ID';$cursor=exequery($connection,$query);if($ROW=mysql_fetch_array($cursor)){$USER_NAME=$ROW[USER_NAME];$USER_PRIV=$ROW[USER_PRIV];18$ONLINE=$ROW[ONLINE];$query1=SELECT*fromUSER_PRIVwhereUSER_PRIV='$USER_PRIV';$cursor1=exequery($connection,$query1);if($ROW=mysql_fetch_array($cursor1))$USER_PRIV=$ROW[PRIV_NAME];}?3.4系统函数3.4.1常用函数包含方法:include_once(inc/utility.php);如已包含auth.php,则无需包含Message($TITLE,$CONTENT)显示一个提示框如图标题和内容可通过参数指定19Button_Back()显示一个返回按钮,用于访回下一页面find_id($STRING,$ID)查询用逗号隔开的$STRING字符串中,是否包含$ID如find_id(abc,def,ghq,abc);返回值是true3.4.2一般系统函数包含方法:include_once(inc/utility_all.php);format_date($STRING1)返回形如1999年2月1日get_week($STRING1)返回形如六format_money($STR)返回金额格式,形如19.00compare_date($DATE1,$DATE2)日期比较,DATE1=DATE2返回0,DATE1DATE2返回1,DATE1DATE2返回-1compare_time($TIME1,$TIME2)时间比较,time1=time2返回0,time1tim