1. 概述
本文介绍 同步用户 时一些注意事项及报错。
2. 次管无法添加/导入用户
次级管理员在部分情况下无法添加用户,详情如下表所示:
JAR包 | 用户来源 | 现象 |
---|---|---|
2020-01-15 到 2020-11-02 | 未同步用户 | 次级管理员只可见「添加用户」、「导入用户」按钮,不可见「同步用户」按钮 |
开启了同步用户 | 次级管理员不可见「添加用户」、「导入用户」、「同步用户管理」按钮,即用户列表上方无按钮 | |
2020-11-02及以后 | 未同步用户 | 次级管理员只可见「添加用户」、「导入用户」按钮,不可见「同步用户」按钮 |
开启了同步用户 | 次级管理员只可见「添加用户」、「导入用户」按钮,不可见「同步用户管理」按钮 |
3. 同步数据集字段不可选
问题描述:
创建的服务器数据集可以预览,但是在使用该数据集同步/导入用户时,没有字段可选,如下图所示:
原因分析&解决思路:
查看日志,发现报错:SQL ServerException:对象名' '无效。
检查数据集的创建方式,例如存储过程类的服务器数据集,嵌套之后 SQL 执行失败。
4. 同步结果面板报错
配置了 ID 列后会进行一些 ID 校验以防入库时冲突。此时出错的数据也会列在结果面板中。下面罗列报错情况。
4.1 ID 为空
报错信息如下图所示:
原因:勾选了 id 后,不允许出现 name 不为空,但是 id 为空的情况。如下图所示:
4.2 与原有 ID 冲突
报错信息如下图所示:
原因:勾选 ID 之后更改用户名,但是不允许更改 ID,否则会报 ID 冲突的错误,比如原本 Alice 的 id 为 3,现在变动成 2 。
4.3 ID 与其他对象重复
报错信息如下图所示:
原因:如下图所示,多个用户名使用了一个 id 时报错。
4.4 对应多个 ID
报错信息如下图所示:
原因:如下图所示,当一个用户名却有多个 id 时报此错。
5. 树数据集构建失败
当同步数据集为树数据集时,往往会因为树数据集构建问题导致同步失败,下面列举各种情况:
注:名词解释
部门标记:构建树数据集时选择的原始标记字段。
父部门标记:构建树数据集时选择的父标记字段。
5.1 21300055-报表、DEC交互原始标记相同
报错信息「报表、DEC交互原始标记相同」,如下图所示:
原因:树数据集下,多个部门都用了一个部门标记,比如下图中 DEC 交互,报表的 did 都为 a12。如下图所示:
5.2 21300056-报表有多个直接父部门
报错信息「报表有多个直接父部门」,如下图所示:
原因:一个部门有多个父部门标记,比如下图中报表的 pid 有 a1,a2。
5.3 21300057-决策平台找不到对应父部门
报错信息「树构建失败,决策平台找不到对应父部门」,如下图所示:
原因:如果父部门标记为空,那么此部门就是根部门,如果不为空,且父部门标记找不到对应的部门,则报错。
如下图所示,决策平台的 pid 为 a3,但是没有任何部门的 did 为 a3,也即没有该父部门:
注:同步用户数据集时,若服务器数据集为 树数据集 ,顶层机构的父机构应为空值。
5.4 21300058-报表有多个原始标记
报错信息「报表有多个原始标记」,如下图所示:
原因:如果部门名相同,且父部门标记相同,那么说明这就是同一个部门,如果他们的部门标记不同,则报错,如下图中报表的 did 有两个:a13,a12。
5.5 21300059-父子结构死循环
报错信息「决策报表,帆软软件,DEC研发构成父子结构死循环」,如下图所示:
原因:如果部门 111 的父标记指向部门 11 ,部门 11 的父标记指向部门 1 ,部门 1 的父标记又指向部门 111 ,构成了环,则报错。
如下图中帆软软件的父标记为 a111,指向 DEC 研发,决策平台的 pid 为 a1,指向帆软软件,DEC 研发的 pid 为 a11,指向决策平台。
5.6 21300063-名称与其他来源对象重复
报错信息「名称与其他来源对象重复」,如下图所示:
原因:导入树数据集的部门中存在和同步部门重复的数据,如先同步了树数据集 A,再导入树数据集 A 则会出现此报错。
5.7 21300064-ID与其他来源对象重复
报错信息「ID与其他来源对象重复」,如下图所示:
原因:平台有内置部门2,首次同步一树数据集,选择保留权限更新,数据源中一同步部门1和内置部门2的ID相同,但名称不同,同步后会报错。
6. ID 校验失败
树数据集情况下,如果还勾选了部门 id,且部门 id 列并非部门标记列,还会做 id 校验工作,会导致全局失败。以下所有示例中部门标记列为 did,父部门标记列为 pid,部门 id 列为 depId。
6.1 21300054-部门标记值与部门ID不一致
报错信息「部门标记值与部门ID不一致」,如下图所示:
注:2020-08-03 及之后的 JAR ,该错误码将不会出现。
原因:如果部门标记为纯数字,比如 11,111,会直接作为 id 项插入到 finedb 的部门表中,此时如果平台又勾选了其他列作为部门 id,且部门标记值和勾选的部门 id 不一样,则报错。建议当数据源当部门标记为纯数字时,使用 sql 语句的字符串拼接一个英文字母。
6.2 21300053-ID为空
报错信息「ID为空」,如下图所示:
原因:树数据集情况下,勾选部门 id 后如果部门 id 为空,则直接全局报错。如下图所示:
6.3 21300051-报表ID与其他对象重复
报错信息「报表ID与其他对象重复」,如下图所示:
原因:帆软软件-报表,与帆软软件-决策平台使用了相同的部门 id。如下图所示:
6.4 21300050-报表对应多个ID
报错信息「报表对应多个ID」如下图所示:
原因:当部门存在多个部门 id 时会报此错,如上图中帆软软件-报表有 a12,a15 两个部门 id。如下图所示:
6.5 21300052-决策平台和原有ID冲突
报错信息「决策平台和原有ID冲突」,如下图所示:
注:2020-06-08 及之后的 JAR ,该错误码将不会出现。
原因:部门 id 发生改变了,会报错与原有部门 id 冲突
7. 21300031-达到设定的中断值
报错信息「21300031 - 本次同步用户数量将减少XX%(XX个),达到设定的中断值XX%。请检查数据源数据是否正常,或暂时关闭"异常数据中断同步"功能。」
如下图所示:
原因:
同步用户高度依赖数据源,若数据源出现问题,例如被恶意清空数据库表,会导致同步到系统中的用户被清空,操作无法逆转。
因此 FineReport 提供同步熔断策略。10.0.18 及之后版本的报表工程,新增「异常数据中断同步」按钮。
管理员开启「异常数据中断同步」后,可设置用户数量减少达到X%,停止同步。X为1-100的正整数。
例如系统中原有100个同步用户(不包含手动添加/导入的用户数),设置为30%,即同步减少30(100*30%)个用户及以上,就会停止本次同步。
8. 21307213-非法节点
安装并使用插件「同步LDAP域用户」后同步用户失败,报错信息:
失败原因:21307213-非法节点
用户在用户下:
user1-->用户下用户
部门在用户下:
user2-->cn=用户下部门,cn=xxx,cn=xx,cn=roles,o=fanruan,dc=fr,dc=com
角色在用户下:
user3-->用户下角色」
如下图所示:
原因:
LDAP服务器下的数据,存在一些用户数据节点非叶子节点,其下还存在用户 / 部门 / 角色数据节点,同步时检查数据结构会报错并终止同步LDAP用户任务。