节选自:https://mp.weixin.qq.com/s/1I8QYxDuRJ45M9zuImc8bA
一、背景介绍:
在日常的流程使用的过程中会有一种情况,那就是被引用的字段是无法再次进行编辑的。
要想把这个被引用的字段进行替换的话,通常的办法是需要一个新增字段,并且在各个节点模版里面把旧的字段拿掉,放上新的字段,才能实现更换字段的目的,这就造成了极大的工作量。
该技巧主要是通过操作数据库的方式来实现新旧字段的替换,以减轻工作量。
二、功能介绍:
需要变动的表分为逻辑表和物理表;
-- 逻辑表存的OA表单管理界面显示的字段信息,在workflow_billfield中,根据fieldid可以查到;
-- 物理表指实际数据库上的表,比如formtable_main_xxx。
三、具体的步骤:
-
先在OA表单管理上直接新增字段,为了便于描述,我们这里将字段定义为Anew,将要替换掉的旧字段定义为A。
-
数据库查询workflow_billfield表中A和Anew的数据,然后对比一下两行数据之间的区别,把Anew记录update给A的记录。(除了uuid字段,这个是每个字段唯一的)(谨慎点可以备下份)
-
formtable_main_xxx物理表中,查看表结构,确认Anew的字段类型,然后执行Alter,把A的字段类型改成和Anew一样。(如果有历史数据,需根据情况判断处理)
-
数据库操作完之后,需要刷新下缓存,两种方式:访问缓存管理界面点击重新加载配置或直接重启OA。
-
就会发现流程表单上A字段已经替换为Anew字段了。第1步在表单管理界面加的Anew就可以直接删掉。
【相关sql可以参考附录里面的内容】
四、附录
步骤中涉及的sql语句可参考:
--如果修改字段类型涉及到物理表数据类型,需要修改物理表
--修改【币别】字段为系统标准币别
update workflow_billfield
set fielddbtype='int',fieldhtmltype='3',type='12'
where id=字段id
--修改【部门】字段为系统标准部门
update workflow_billfield
set fielddbtype='int',fieldhtmltype='3',type='4'
where id=字段id
--修改字段为单行文本
update workflow_billfield
set fielddbtype='varchar(300)',fieldhtmltype='1',type='1'
where id=字段id
--修改字段为整数
update workflow_billfield
set fielddbtype='int',fieldhtmltype='1',type='2'
where id=字段id
--修改字段为两位小数
update workflow_billfield
set fielddbtype='decimal(38,2)',fieldhtmltype='1',type='3'
where id=字段id
--修改字段为多行文本
update workflow_billfield
set fielddbtype='text',fieldhtmltype='2',type='1'
where id=字段id
--修改字段为单选系统浏览按钮
update workflow_billfield
set fielddbtype='int',fieldhtmltype='3',type='16'
where id=字段id
--修改字段为多选系统流程浏览按钮
update workflow_billfield
set fielddbtype='text',fieldhtmltype='3',type='152'
where id=字段id
--修改字段为多选系统归档流程浏览按钮
update workflow_billfield
set fielddbtype='varchar(4000)',fieldhtmltype='3',type='171'
where id=字段id
--修改字段为自定义浏览按钮
update workflow_billfield
set fielddbtype='browser.浏览按钮标识',fieldhtmltype='3',type='161' --type=161 是单选 162是多选
where id=字段id
---涉及到物理表数据类型,调整语法参考
alter table (table_name) alter column (column name) (type)
--update联合查询语法
UPDATE table1 inner/left/right join table2/(select columns from table3
[inner/left/right join on condition] [where conditions]) as t3
ON condition
SET column1 = value1,column2 = value2,...
[WHERE conditions];
update node1
set FullName=node3. FullName from node1, node3
where node1. Parentld=node3. Parentld AND node1.[ Level]=node3.[ Level]
--修改物理表列名
exec sp_rename 'formtable_main_665.bckhfftzje','kehProposalAmount'
标签:--,billfield,update,OA,id,where,字段,更换,泛微 From: https://blog.csdn.net/u010366234/article/details/140471978