一、引言通达OA提供了丰富的内置函数库涵盖通用基础接口、通用功能接口、组织机构相关接口、文件处理、邮件处理、短信发送等多个方面。掌握这些内置函数可以极大提高开发效率避免重复造轮子。本文将系统介绍OA的内置函数分类、使用方法和实战技巧。二、函数库总览通达OA的内置函数按功能分为多个文件函数文件功能分类主要用途utility.php通用基础接口消息提示、按钮、ID处理、IP获取utility_all.php通用功能接口字符串处理、日志、系统参数、邮件发送utility_org.php组织机构接口用户、部门、角色、权限管理utility_sms1.php短信接口OA内部短信发送utility_sms2.php手机短信接口手机短信发送utility_file.php文件处理接口上传、下载、附件管理utility_email.php邮件接口邮件收发管理utility_calendar.php日程接口日程、任务管理三、通用基础接口utility.php3.1 Message() - 消息提示Message($message, $url , $icon , $width 300, $height 160)功能显示消息提示框并跳转参数说明参数类型说明messagestring提示消息内容urlstring跳转URL默认返回上一页iconstring图标类型success/error/warning/infowidthint弹窗宽度heightint弹窗高度示例// 成功提示 Message(_(操作成功), index.php, success); // 错误提示 Message(_(操作失败), , error); // 提示后返回上一页 Message(_(删除成功));3.2 Button_Back() - 返回按钮Button_Back($text )功能生成返回上一页的按钮参数说明参数类型说明textstring按钮文字默认返回示例Button_Back(_(返回列表));3.3 find_id() - 获取IDfind_id($array, $id)功能从数组中查找指定ID的元素参数说明参数类型说明arrayarray待查找的数组idint要查找的ID返回值找到的元素或false示例$users array( array(uid 1, name 张三), array(uid 2, name 李四) ); $user find_id($users, 1); // 返回array(uid 1, name 张三)3.4 remove_id() - 移除IDremove_id($array, $id)功能从数组中移除指定ID的元素参数说明参数类型说明arrayarray待处理的数组idint要移除的ID返回值处理后的数组示例$users array( array(uid 1, name 张三), array(uid 2, name 李四) ); $users remove_id($users, 1); // 返回array(array(uid 2, name 李四))3.5 get_client_ip() - 获取客户端IPget_client_ip()功能获取客户端真实IP地址返回值IP地址字符串示例$ip get_client_ip(); echo 客户端IP$ip;四、通用功能接口utility_all.php4.1 csubstr() - 中文字符串截取csubstr($str, $start, $length, $charset utf-8)功能安全截取中文字符串避免乱码参数说明参数类型说明strstring原字符串startint起始位置lengthint截取长度charsetstring字符集默认utf-8返回值截取后的字符串示例$str 这是一段很长的中文文本; $result csubstr($str, 0, 10); echo $result; // 输出这是一段很长的中4.2 is_ip() - IP地址验证is_ip($ip)功能验证IP地址是否合法参数说明参数类型说明ipstringIP地址返回值true合法或false非法示例if (is_ip(192.168.1.1)) { echo IP地址合法; } else { echo IP地址非法; }4.3 add_log() - 添加日志add_log($type, $action, $detail )功能添加系统操作日志参数说明参数类型说明typestring日志类型actionstring操作动作detailstring详细描述示例add_log(project, add, 添加项目项目管理系统);4.4 get_code_name() - 获取代码名称get_code_name($table, $code_field, $name_field, $code)功能根据代码值获取对应的名称参数说明参数类型说明tablestring表名code_fieldstring代码字段名name_fieldstring名称字段名codemixed代码值返回值名称字符串示例$status_name get_code_name(project, status, status_name, 1); echo $status_name; // 输出已完成4.5 dept_long_name() - 获取部门全称dept_long_name($dept_id)功能获取部门的完整路径名称参数说明参数类型说明dept_idint部门ID返回值部门全称字符串示例$dept_name dept_long_name(5); echo $dept_name; // 输出总公司/技术部/开发组4.6 get_sys_para() - 获取系统参数get_sys_para($para_name)功能获取系统配置参数参数说明参数类型说明para_namestring参数名称返回值参数值示例$company_name get_sys_para(company_name); echo 公司名称$company_name;4.7 set_sys_para() - 设置系统参数set_sys_para($para_name, $para_value)功能设置系统配置参数参数说明参数类型说明para_namestring参数名称para_valuemixed参数值示例set_sys_para(company_name, 通达科技有限公司);4.8 send_mail() - 发送邮件send_mail($to, $subject, $body, $from , $cc , $attachment )功能发送邮件参数说明参数类型说明tostring收件人邮箱subjectstring邮件主题bodystring邮件内容fromstring发件人邮箱ccstring抄送邮箱attachmentstring附件路径示例send_mail( userexample.com, _(项目通知), _(您有新的项目任务), adminexample.com, ccexample.com, /path/to/file.pdf );五、组织机构接口utility_org.php5.1 用户信息获取5.1.1 GetUserNameById() - 根据ID获取用户名GetUserNameById($uid)参数$uid- 用户ID返回值用户姓名字符串示例$name GetUserNameById(1); echo 用户姓名$name;5.1.2 GetUserNameByUid() - 根据UID获取用户名GetUserNameByUid($uid)参数$uid- 用户UID返回值用户姓名字符串5.2 部门信息获取5.2.1 GetDeptNameById() - 根据ID获取部门名称GetDeptNameById($dept_id)参数$dept_id- 部门ID返回值部门名称字符串示例$dept_name GetDeptNameById(10); echo 部门名称$dept_name;5.2.2 is_dept_parent() - 判断是否为父部门is_dept_parent($parent_id, $child_id)功能判断parent_id是否为child_id的上级部门参数说明参数类型说明parent_idint父部门IDchild_idint子部门ID返回值true或false示例if (is_dept_parent(1, 5)) { echo 部门1是部门5的上级; }5.2.3 top_dept() - 获取顶级部门top_dept($dept_id)功能获取指定部门的顶级部门ID参数$dept_id- 部门ID返回值顶级部门ID示例$top_dept_id top_dept(5); echo 顶级部门ID$top_dept_id;5.3 角色信息获取5.3.1 GetPrivNameById() - 根据ID获取角色名称GetPrivNameById($priv_id)参数$priv_id- 角色ID返回值角色名称字符串5.4 权限管理5.4.1 is_module_manager() - 判断是否为模块管理员is_module_manager($uid, $module)功能判断用户是否为指定模块的管理员参数说明参数类型说明uidint用户IDmodulestring模块名称返回值true或false示例if (is_module_manager($_SESSION[uid], project)) { echo 您是项目管理模块管理员; }5.4.2 set_priv_menu_priv() - 设置角色菜单权限set_priv_menu_priv($priv_id, $menu_id, $priv)功能为角色设置菜单权限参数说明参数类型说明priv_idint角色IDmenu_idint菜单IDprivint权限值0无权限1有权限示例set_priv_menu_priv(1, 100, 1); // 为角色1设置菜单100的权限5.4.3 set_uid_menu_priv() - 设置用户菜单权限set_uid_menu_priv($uid, $menu_id, $priv)功能为用户设置菜单权限参数说明参数类型说明uidint用户IDmenu_idint菜单IDprivint权限值5.5 组织架构查询5.5.1 GetUnionSetOfChildDeptId() - 获取子部门ID集合GetUnionSetOfChildDeptId($dept_id)功能获取指定部门及其所有子部门的ID集合参数$dept_id- 部门ID返回值部门ID数组示例$dept_ids GetUnionSetOfChildDeptId(1); print_r($dept_ids); // 输出array(1, 2, 3, ...)5.5.2 GetfunmenuByuserID() - 获取用户功能菜单GetfunmenuByuserID($uid)功能获取用户有权限访问的功能菜单参数$uid- 用户ID返回值菜单数组六、短信接口6.1 OA内部短信utility_sms1.php6.1.1 send_sms() - 发送OA短信send_sms($to_uid, $content, $from_uid 0)功能发送OA内部短信参数说明参数类型说明to_uidint接收人IDcontentstring短信内容from_uidint发送人ID默认0系统返回值true或false示例send_sms(2, _(您有新的任务需要处理), 1);6.1.2 delete_sms() - 删除短信delete_sms($sms_id)功能删除指定短信参数$sms_id- 短信ID返回值true或false6.2 手机短信utility_sms2.php6.2.1 send_mobile_sms_user() - 向用户发送手机短信send_mobile_sms_user($uid, $content)功能向指定用户发送手机短信参数说明参数类型说明uidint用户IDcontentstring短信内容返回值true或false示例send_mobile_sms_user(1, _(验证码123456));6.2.2 send_mobile_sms() - 发送手机短信send_mobile_sms($mobile, $content)功能直接向手机号发送短信参数说明参数类型说明mobilestring手机号码contentstring短信内容返回值true或false示例send_mobile_sms(13800138000, _(验证码123456));七、邮件接口utility_email.php7.1 邮件统计7.1.1 GetWebMailNumByUid() - 获取收件箱邮件数GetWebMailNumByUid($uid)功能获取用户收件箱邮件数量参数$uid- 用户ID返回值邮件数量示例$count GetWebMailNumByUid(1); echo 收件箱邮件数$count;7.1.2 GetSentMailNum() - 获取已发送邮件数GetSentMailNum($uid)功能获取用户已发送邮件数量参数$uid- 用户ID返回值邮件数量7.2 邮件操作7.2.1 get_email_data() - 获取邮件数据get_email_data($mail_id)功能获取邮件详细信息参数$mail_id- 邮件ID返回值邮件数组7.2.2 delete_email() - 删除邮件delete_email($mail_id)功能删除指定邮件参数$mail_id- 邮件ID返回值true或false7.2.3 remove_email() - 彻底删除邮件remove_email($mail_id)功能彻底删除邮件从数据库中删除参数$mail_id- 邮件ID返回值true或false八、日程接口utility_calendar.php8.1 日程操作8.1.1 add_calendar() - 添加日程add_calendar($uid, $title, $start_time, $end_time, $content )功能添加日程参数说明参数类型说明uidint用户IDtitlestring日程标题start_timedatetime开始时间end_timedatetime结束时间contentstring日程内容返回值日程ID或false示例$calendar_id add_calendar( 1, _(项目会议), 2024-01-15 10:00:00, 2024-01-15 11:00:00, _(讨论项目进度) );8.1.2 update_calendar() - 更新日程update_calendar($calendar_id, $title, $start_time, $end_time, $content )功能更新日程信息参数说明参数类型说明calendar_idint日程IDtitlestring日程标题start_timedatetime开始时间end_timedatetime结束时间contentstring日程内容返回值true或false8.1.3 delete_calendar() - 删除日程delete_calendar($calendar_id)功能删除指定日程参数$calendar_id- 日程ID返回值true或false8.1.4 get_list_data() - 获取日程列表get_list_data($uid, $start_date, $end_date)功能获取用户在指定日期范围内的日程列表参数说明参数类型说明uidint用户IDstart_datedate开始日期end_datedate结束日期返回值日程数组8.2 任务操作8.2.1 insert_taskcenter() - 添加任务insert_taskcenter($uid, $title, $content, $deadline)功能添加任务参数说明参数类型说明uidint用户IDtitlestring任务标题contentstring任务内容deadlinedatetime截止时间返回值任务ID或false九、函数使用最佳实践9.1 函数调用流程调用步骤包含auth.inc.php推荐或直接包含对应函数文件调用所需函数处理返回结果9.2 函数引用方式// 方式1通过auth.inc.php间接包含推荐 include_once(inc/auth.inc.php); // 已包含utility.php, utility_all.php, utility_org.php等 // 方式2直接包含特定函数文件 include_once(inc/utility_file.php); include_once(inc/utility_sms2.php);9.3 实战技巧技巧1消息提示后跳转// 操作成功后跳转到列表页 if ($success) { Message(_(操作成功), index.php, success); exit; }技巧2获取用户信息// 获取当前用户信息 $uid $_SESSION[uid]; $username GetUserNameById($uid); $dept_name GetDeptNameById($_SESSION[dept_id]);技巧3发送通知// 发送OA短信通知 send_sms($user_id, $message); // 发送手机短信通知 send_mobile_sms_user($user_id, $message); // 发送邮件通知 send_mail($email, $subject, $body);技巧4权限判断// 判断用户是否为模块管理员 if (!is_module_manager($_SESSION[uid], project)) { Message(_(无权限访问), , error); exit; }十、常见问题10.1 函数未找到现象调用函数时报错Call to undefined function解决方案解决步骤确认已包含对应的函数文件检查函数名拼写是否正确确认OA版本是否支持该函数10.2 短信发送失败现象调用短信函数返回false解决方案问题类型排查方法短信余额不足检查短信服务配置手机号格式错误使用is_ip()类似方法验证短信内容过长截断内容或分条发送服务未启动检查OfficeMail服务状态10.3 邮件发送失败现象调用send_mail()返回false解决方案问题类型排查方法SMTP配置错误检查邮件服务器配置收件人地址错误验证邮箱格式附件路径错误检查文件是否存在服务未启动检查OfficeMail服务状态