分配的时候提示:编码为XXX的基础资料已经配到组织“XXX”中”,如需重新分配清先操作“取消分配”。
但是取消分配操作的时候提示:目标组织的记录删除步成功导致取消分配失败:内码为XXX的基础资料不存在,可能已经被删除。
出现这种现象是因为在分配关系表T_ORG_BASEDATAALLOCATEENTRY 中已经记录这个分配关系,但是对应的基础资料表里面却没有目标组织下的该基础资料数据。导致这种数据产生的原因很多:可能是服务器异常中断或重启导致分配过程中断;可能是二开基础资料没有继承受组织控制的基础资料模板,导致删除操作上缺少了BaseDataDeletePlugIn插件,导致在删除基础资料的时候不会清理分配关系表;也可能是旧版本使用WebApi删除的基础资料的时候没有清理掉分配关系表
解决办法:
删除分配关系表T_ORG_BASEDATAALLOCATEENTRY表中存在,但是在基础资料表中不存在的数据,sql如下:
DELETE T_ORG_BASEDATAALLOCATEENTRY WHERE FENTRYID in
(
select a.FENTRYID from T_ORG_BASEDATAALLOCATEENTRY a left join 基础资料表 b on a.FDESTID=b.基础资料表主键ID
where a.FTABLENAME='基础资料表' and b.基础资料表主键ID is null
);
基础资料表可以通过BOS设计器查找表名,以物料为例,表名为T_BD_MATERIAL,主键可以通过数据库查找,为FMATERIALID ,所以物料的脏数据删除语句就是:
DELETE T_ORG_BASEDATAALLOCATEENTRY WHERE FENTRYID in
(
select a.FENTRYID from T_ORG_BASEDATAALLOCATEENTRY a left join T_BD_MATERIAL b on a.FDESTID=b.FMATERIALID
where a.FTABLENAME='T_BD_MATERIAL' and b.FMATERIALID is null
);
推荐阅读