环境编码

  1. UTF-8
  2. 包括PHP、MySQL、nginx等

PHPMySQL版本

PHP7.2

由 PHP5.4 升级为 PHP7.2 64位

MySQL5.7

由 MySQL5.6 升级为 MySQL5.7 64位

PHP版本升级已弃用功能

each() 函数已弃用,建议使用 foreach()

语法样例:

$arr = [1, 2, 3, 4];

foreach($arr as $key => $val)

{

echo "\$a[$key] => $val<br>";

}

输出结果:

$a[0] => 1

$a[1] => 2

$a[2] => 3

$a[3] => 4

PHP版本升级兼容

1    由于php7+不支持php_mysql.dll,所以需要改为php_mysqli.dll,有关MySQL的函数需要调整为

mysqli相关函数,代码中遇到请注意

mysql 转 mysqli 相关兼容

mysql_connect(host, user, pwd, connection) 替换 mysqli_connect(host, user, pwd, db) mysql_query($q, $c) 替换 mysqli_query($c, $q)

mysql_select_db($db, $c) 替换 mysqli_select_db($c, $db)

mysql_field_name 已弃 解决方案参考:关于如何解决mysqli()没有与之对应mysqli_field_name()问题 - 知乎 mysql_field_name — (mysqli_fetch_field_direct() [name] or [orgname])取得结果中指定字段的字段名

mysql_error 替换 注:mysqli_error(conn) 参数必选mysql_errno 替换 注:mysqli_errno(conn) 参数必选mysql_numrows 替换 mysqli_num_rows

mysql_unbuffered_query 替换 mysqli_query (mysqli_query(“SQL语句”, MYSQLI_USE_RESULT);

)向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行

其他mysql函数,绝大部分都可以直接批量替换为mysqli相关函数,使用参考mysqli函数文档

mysql_affected_rows() mysqli_affected_rows() 的区别

// MySQL方式

$query = "select * from td_user";

$cursor = exequery($conn, $query);

$count0 = mysql_affected_rows(); var_dump($count0);

// MySQLI方式

$query = "select * from td_user";

$conn = TD::conn();

$cursor = exequery($conn, $query);

$count1 = mysqli_num_rows($cursor); var_dump($count1);

$count2 = mysqli_affected_rows($conn);

var_dump($count2);

OA升级相关处理

1 建议使用pdo的SQL语法,medoo版本1.6 2

3 参考文档:https://medoo.lvtao.net/1.2/doc.php

数据库表修改

拆表:

user 改为 td_user

td_user表中的DEPT_ID_OTHER、USER_PRIV_OTHER 转存到user_other中,type=1辅助部门,

type=2辅助角色

department表中的1.部门主管,2:部门助理,3:上级主管领导,4:上级分管领导    转存到

department_manager表中

user_priv表中,角色对应的菜单FUNC_ID_STR,改成一对多存到user_priv_func user_ext表中U_FUNC_ID_STR 用户菜单ID串,改成一对多存到user_ext_func user_function表原来uid对应的user_func_id_str用户菜单id串,改为多条数据形式

注意:

建议非必要不要使用find_in_set函数,性能不好,优先使用    in

表结构字段建议设置为 NOT NULL DEFAULT ''

表属性:

1 表、字段编码均为 utf8_general_ci

数据库部分数据处理

unserialize 相关数据处理

  1. 由于之前gbk编码情况下存入数据库中的unserialize数据,在utf-8编码情况下解析后会变为空
  2. 处理方案:
  3. include_once("inc/utility_all.php");
  4. $module_name = gbk2utf8_unserialize($module_name); // gbk数据转为utf8数据,后续该如何处理就如何处理即可

数据库兼容国产化相关处理

日期字段默认值 0000-00-00 判断改为 1000-01-01

时间字段默认值 0000-00-00 00:00:00 判断改为 1000-01-01 00:00:00

timestamp字段默认值 0000-00-00 00:00:00 判断改为 2000-01-01 00:00:00

配置文件说明

OA相关参数:

MYOA/webroot/inc/td_config.php

MYOA/webroot/inc/oa_config.php

  1. MYOA_DB_TYPE (在db_config.php中设置,mysql dm kb st...)
  2. MYOA_PRODUCT_TYPE (0 - 标准版,1 - 信创版)

数据库配置:

MYOA/webroot/inc/db_config.php

//默认连接的数据库

$DB_TYPE = "mysql"; // ['mysql', 'dm', 'kb']

$MYSQL_SERVER = "127.0.0.1:3336";

$MYSQL_PORT = "3336"; // ['3336', '5236']

$MYSQL_USER = "oa";

$MYSQL_PASS = "myoa888";

$MYSQL_ROOT_USER = "root";

$MYSQL_ROOT_PASS = "myoa888";

$MYSQL_DB = "TD_OA";

$MYSQL_DB_APP = "TD_APP";

$MYSQL_DB_CRSCELL = "crscell";

$MYSQL_DB_ARCHIVE = "TD_OA_ARCHIVE";

Redis相关兼容

1 Redis::delete() 转为 Redis::del() 2

3 Redis::setTimeout() 转为 Redis::EXPIRE()

PHP新增函数接口

1  获取当前浏览器
inc/utility_all.php GetBrowser()

is_weakpass()

1  检验是否弱密码,true / false

GetMembersFromDept($DEPT_ID1, $QUERY_MASTER="")

1 获取指定主部门的成员user_id串信息

gbk2utf8_unserialize($str)

1 获取根据unserialize的gbk数据信息转为unserialize的utf-8数据信息

is_https()

1 获取当前访问是否是https请求,true / false

td_gzcompress($content, $db_type = 'mysql')

1 获取根据原始内容数据及数据库类型处理后的进制流数据

td_gzuncompress($compress_content, $db_type = 'mysql')

1    获取根据数据库中取出的进制流内容数据,针对不通数据库类型处理后的原始内容数据

1 获取我能管理的用户信息

2  [['uid' => 1, 'user_id' => 'admin', 'user_name' => '系统管理员'], ...]

inc/utility_org.php get_manage_user()

GetUserOtherAllByDeptId($DeptIds, $type=0, $return=0)

  1. 获取指定部门id串为主部门/辅助部门下的人员信息
  2. return 1 - 用户user_id字符串信息
  3. return 0 - 返回用户数组信息

4  [['uid' => 1, 'user_id' => 'admin'], ...]

GetUserOtherAllByUserPrivId($UserPrivId, $type=0, $retu

  1. 获取指定角色id串为主角色/辅助角色下的人员信息
  2. return 1 - 用户user_id字符串信息
  3. return 0 - 返回用户数组信息

4  [['uid' => 1, 'user_id' => 'admin'], ...]

GetUserOtherIdByUid($uid, $type=0)

  1. 获取指定用户uid的相关信息
  2. type 1 - 辅助部门
  3. type 2 - 辅助角色
  4. type 0 - 辅助部门和辅助角色

5 ['dept_id_other' => '1,2,3,', 'user_priv_other' => '1,2,3,']

medoo相关及语法

  1. medoo版本 1.6
  2. webroot/inc/medoo/medoo.php

SQL实例select

$ret = TD::DB()->select(TD::tableFix("url"), "*", [

"OR"

=> [

"AND #first"

"URL_TYPE" "USER"

],

"AND #second"

"URL_TYPE" "USER"

]

=> [

=> '3',

=> ''

=> [

=> '2',

=> $_SESSION["LOGIN_USER_ID"]

],

"ORDER" => ["URL_NO" => "ASC"]

]);

var_dump($ret);

输出结果:

array(14) { [0]=>

array(8) {

["URL_ID"]=>

string(2) "23"

["URL_NO"]=>

string(1) "1" ["URL_DESC"]=>

string(12) "百度搜索"

["URL"]=>

string(16) "http://baidu.com" ["USER"]=>

string(0) "" ["URL_TYPE"]=>

string(1) "3" ["SUB_TYPE"]=>

string(0) "" ["URL_ICON"]=>

string(13) "ewp_baidu.png"

}

[1]=> ...

}

insert

1 TD::DB()->insert(TD::tableFix("im_offline_file"), ['TIME' => date('Y-m-d H:i:s'), 'SRC_UID' => $_SESSION["LOGIN_UID"], ...]);

2 TD::DB()->id();

update

1 TD::DB()->update(TD::tableFix("td_user"), ["ON_STATUS" => 1, ...], ["UID" =>

$_SESSION["LOGIN_UID"]]);

delete

1 TD::DB()->delete(TD::tableFix("address"),["ADD_ID" => $TOK]);

count

1 $TOTAL_ITEMS = TD::DB()->count(TD::tableFix('im_offline_file'),['DEST_UID' =>

$_SESSION["LOGIN_UID"]]);

prepareQuery

  1. $query="select * from td_user ...";
  2. $row = TD::DB()->prepareQuery($query);

debug

  1. TD::DB()->debug()->select()
  2. TD::DB()->debug()->update()
  3. TD::DB()->debug()->insert()
  4. TD::DB()->debug()->prepareQuery() 5 ...

更多参考:中文文档-中文帮助手册-Medoo - 高效的轻量级PHP数据库框架, 提高开发效率!

存储:

$compress_content = bin2hex(gzcompress($content));

$compress_content = '0x'.$compress_content;

获取:

$compress_content

= gzuncompress($ret_test[0]['compress_content']);

富文本内容压缩存储

各数据库有关blob处理

MySQL blob处理

DM blob处理

存储:

$compress_content = bin2hex(gzcompress($content));

// SQL中 '0x' 可加可不加,达梦会自动转十六进制

$compress_content = '0x'.$compress_content;

或者使用 TO_BLOB 函数处理

获取:

$compress_content3 = @gzuncompress(hex2bin($ret_test[0] ['compress_content']));

KB blob处理

存储:

$compress_content = bin2hex(gzcompress($content));

$compress_content = "x'".$compress_content."'";

获取:

SELECT "COMPRESS_CONTENT"::BYTEA FROM "test_blob" WHERE id=1146;

  1. medoo中CONTENT别名aa
  2. $ret_test = TD::DB()->select(TD::tableFix("test_blob"), ['CONTENT(aa)', 'COMPRESS_CONTENT'], array(
  3. "id" => $test_id 4 ));

业务代码使用

新增 & 修改

include_once("inc/utility_all.php");

$COMPRESS_CONTENT = td_gzcompress($CONTENT);

// 方法一:推荐

TD::DB()->insert('news', [

"COMPRESS_CONTENT[BLOB]" => $COMPRESS_CONTENT // 注:变量不需要使用引号处理

]);

// 方法二:

$query = "insert into news (`COMPRESS_CONTENT`) values ($COMPRESS_CONTENT);"; // 注:变量不需要使用引号处理exequery(TD::conn(), $query);

// 方法三:

$query = "insert into news (`COMPRESS_CONTENT`) values ($COMPRESS_CONTENT);"; // 注:变量不需要使用引号处理TD::DB()->prepareQuery($query);

查看

  1. include_once("inc/utility_all.php");
  2. $COMPRESS_CONTENT = td_gzuncompress($ROW["COMPRESS_CONTENT"]);

归档数据库使用

方法一:直接ARCHIVE_DB连接数据库型 (推荐使用)

  1. $table_name = "email_body_20190807";
  2. $rows = TD::ARCHIVE_DB()->select($table_name, ['body_id', 'subject']);

方法二:DB函数重连数据库型

  1. $table_name = "email_body_20190807";
  2. $rows = TD::DB('1', true, 'td_oa_archive')->select($table_name, ['body_id', 'subject']);
  3. $table_name = "email_body_20190807";
  4. $rows = TD::DB('1')->select($table_name, ['body_id', 'subject']);

方法三:复杂SQL

  1. $query = "select body_id,subject from td_oa_archive.email_body_20190807";
  2. $rows = TD::DB()->prepareQuery($query);

方法四:mysqli连接数据库型

  1. $query = "select body_id,subject from td_oa_archive.email_body_20190807";
  2. $cursor = exequery(TD::conn(), $query);
  3. while($rows = mysqli_fetch_array($cursor))

方法五:medoo兼容处理型

  1. $table_name = "td_oa_archive.email_body_20190807";
  2. $rows = TD::DB()->select($table_name, ['body_id', 'subject']);

MySQL升级相关

配置文件my.ini修改

[mysql]

default-character-set=utf8

[mysqld]

character-set-server=utf8 skip-ssl

# innodb_file_format=Barracuda log_timestamps = SYSTEM

# thread_concurrency =8

sql_mode=NO_ENGINE_SUBSTITUTION

数据库管理工具配置

下载

官网下载phpMyAdmin工具:http://www.phpmyadmin.net,建议下载对应PHP版本的最新的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

技术支持 QQ2524837118

使用phpMyAdmin

MySQL管理工具地址:http://OA地址/mysql1369,注意,进入后先选择中文界面(中文-Chinese simplified )。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,以免导致数据丢失

注:也可使用其他的数据库管理工具,如Navicat等

MySQL升级遇到问题汇总

问题一:mysql5.7 BLOB, TEXT, GEOMETRY or JSON column 'user_str' can't have a default value

  1. select @@sql_mode 查看模式,修改模式为:
  2. sql_mode=NO_ENGINE_SUBSTITUTION
  3. //STRICT_TRANS_TABLES 存储引擎启用严格模式,非法数据值被拒绝

通达OA二次开发手册V12相关推荐

  1. 通达OA二次开发手册

    前 言 Office Anywhere网络智能办公系统(以下简称通达OA),不仅是一套成熟的网络办公系统,同时也是一个完整.精巧的软件开发平台,不仅集成了Web开发的全套环境,并提供了管理架构.系统资 ...

  2. 小飞鱼 通达OA二次开发网络课程 系列视频课程在CSDN发布

    小飞鱼通达OA二次开发网络课程  (上传完毕) http://edu.csdn.net/course/detail/4479 小飞鱼通达OA二次开发程序设计基础 http://edu.csdn.net ...

  3. 通达OA二次开发 小飞鱼智能人事加班请假流程开发(图文)

    通达OA中的请假加班等流程完全是由用户自己创建的,因此也就不会与考勤数据进行关联,为了能够将这些数据打通,小飞鱼进行了流程的二次开发,实现请假考勤相关流程的智能化. 程序可以自动提取系统数据中的可用年 ...

  4. 小飞鱼通达OA二次开发 同步中控考勤机网络版数据到OA系统并增加个人查询功能(图文)

    一般我们同步的都是中控的单机版系统,这个系统本身是支持的,只不过原有的程序有些bug需要处理一下.这次同步的是中控的网络版考勤机,有什么不同么?当然有,网络版的数据库结构与单机版本完全不同. 经过连接 ...

  5. [通达OA二次开发]FineReport 与通达OA集成 如何实现统一登录。

    通达OA的首页文件是加密的,无法配置单点登陆可以在拿取用户名和密码的地方传给FR登录地址注册一下.下面就详细的讲一下如何进行配置. 可以在js里面拿到用户名,就和FR文档的单点登录里面一样做 var  ...

  6. 通达OA二次开发工程项目管理方案

    项目策划,投标管理 项目立项,招标管理 合同管理,分包管理 结算管理,劳务管理 财务管理,竣工管理 资料中心,预算管理 同时支持定制开发 一, 1.通过收入合同单据,对公司签订的所有收入合同进行登记, ...

  7. 通达OA二次开发 对通达2015版微信查询用户信息模块升级开发(图文)

    OA提供对微信的支持这一点做的非常好,用户使用起来也更方便了. 而其中的个别功能还有待完善,比如今天要说的这个微信查询用户信息模块.升级前的使用方法:输入@+用户中文名,并且要求完全匹配,然而在实际使 ...

  8. 通达OA二次开发 小飞鱼OA工作流人事考勤系统(图文)

    今天给大家带来的是小飞鱼开发的人事考勤系统.每个单位都有考勤,如何才能让考勤用着更方便,更人性化呢,请看小飞鱼人事考勤系统. 系统可以从考勤机中自动同步数据,这样就有了打卡记录,但是在应用考勤当月使用 ...

  9. 通达OA二次开发 一次批量审批多个关联工作流(图文)

    最近开发了这样一个流程,就是审批工作流的工作流了,事情是这样的:每个月有多条检查的工作流需要审批,这些都是具体的执行记录,这些流程都执行完毕后需要统一走一个大的审批流程,将所有这些关联的流程一次进行审 ...

  10. 通达OA二次开发 开发基于AJAX技术数据列表控件的智能表单(图文)

    按照人鱼兄弟的思路,自己也做了一个这样的表单,数据智能提取的效率大大提高,更主要的是数据获取及变换的形式更灵活,完全可以自己编程进行控制.感谢大怪兽的技术支持,这里面用到很多js的东西大怪兽研究的还是 ...

最新文章

  1. java 判断ocx是否存在_OCX控件的注册卸载,以及判断是否注册
  2. 【138天】尚学堂高淇Java300集视频精华笔记(84)
  3. python语言下载-python下载_python免费下载[编程工具]-下载之家
  4. 深度学习100例 | 第27天-卷积神经网络(CNN):艺术作品识别
  5. 返回函数之循环变量问题
  6. 数字图像处理之点运算
  7. MyBatis 实际使用案例-Mapper.xml 映射配置文件【重点】
  8. excel表格打印每页都有表头_这么漂亮的Excel表格,用黑白打印机打印真是可惜了...
  9. 学习腾讯的hover效果
  10. 小程序入门学习10--云开发03
  11. 8255工作方式2——双向选通输入输出(A口)
  12. 你可能一直都做错,真正如何正确的转换视频格式尤其是TS合并
  13. 关于跨境电商shopee平台,你了解多少?
  14. VBA实战(7) -字典(Dictionary)
  15. MySQL - 解除安全模式
  16. Sharepoint安装必备组件下载地址
  17. 2021Java校招笔试题答案及评分标准
  18. Springboot餐饮点餐系统毕业设计源码301749
  19. 计算机图形学中的光栅化
  20. Jquery解决视频播放过程中定时弹出确认窗口

热门文章

  1. Python项目:Django员工管理系统
  2. TX2(linux系统、Ubuntu系统)输入法不显示拼音候选框、下拉框
  3. cadence的工艺角仿真、蒙特卡洛仿真、PSRR
  4. 【MQTT编程】Last will and Testament(LWT Payload设置)
  5. 遗传+粒子群 求解多配送中心车辆调度问题(python)
  6. 随机生成手机号的java代码
  7. 深度解读设备的“万能语言”鸿蒙系统的分布式软总线能力
  8. ENVI大气校正后遥感图像颜色变了及编辑头文件
  9. verilog语法检查
  10. (亲测)使用cmd结束进程的3种方法