背景:最近碰到了一个问题,因为得帆云的数据库结构特殊,数据库中所存的其实都是表单或者数据字典关联的编码,很少有直接以文字形式存储的。在利用这部分数据做帆软报表时发现,由于部分下拉框使用的是静态的选项,既没有数据字典也没有表单依据,所以得帆云会给这些静态选项随机生成一些编码但没有可对照获得中文描述的数据库,此为得帆云的机制。
由于制作帆软报表并不能只显示编码,还是需要找到对应的中文,直接CASE WHEN 编码若未来增加选项会造成匹配问题,需要修改代码,所以决定是给这些本为静态选项的下拉框增加一个数据字典。然而生产机上有五百条用户逐条录入的数据,要求不能有任何损失或者丢失。因此产生了以下的解决方案。
1.备份生产机数据
使用navicat,右键需要备份的目标数据库,转储SQL文件->结构和数据
将会得到一个.sql文件。如果需要恢复数据库+数据,就可以右键对象列表的空白处,选择运行sql文件后,点击备份数据得到的sql文件即可恢复数据。
2.备份得帆云应用
因为如果需要将该字段的下拉选项由静态选项改为数据字典,则需要删除该下拉框重新配置。然而如果数据出现问题,需要恢复原貌(静态选项)时,再去新建一个下拉选项为静态的下拉框时,选项对应的编码会再次改变。这样一来,即使数据库的数据可以恢复,数据库中存储的编码与新产生的静态选项编码对不上号,无法显示正确内容。
但如果备份得帆云应用,产生问题需要恢复时,通过导入应用来恢复配置,则编码规则不变。
备份步骤如下:
1.导出应用、数据字典、角色管理
2.恢复时将应用导入,检查数据
3.发布应用
4.验证功能
3.批量修改数据库数据
1.找到静态选项对应的编码
在进入表单的设置页面,点击目标静态选项的下拉框后,从开发者模式的Network处可以看到后端发送的该静态选项的编码。
将该编码和对应的中文整理出来,
补充:该位置在点击打开页面配置时,发送的该请求,层级为:
data->detailPage->formComponents->对应框->chooseOptions
2.将新建的数据字典的编码和中文对应起来
我在应用中新建了需要用到的数据字典,然后将编码和前面获得的随机编码对应起来
就得到了如下的对应关系
3.数据库批量修改
数据库内存储的是静态选项的随机编码
使用下列的sql语句
UPDATE 数据表名
SET 目标字段名=
CASE
目标字段名
WHEN '["qqqso"]' THEN '["op1"]'
WHEN '["HrKbm"]' THEN '["op2"]'
WHEN '["u3zpY"]' THEN '["op3"]'
END
再刷新目标数据表,就会发现数据被我们批量修改了
再回到得帆云的页面可以看到,由于这个修改后的编码和旧的静态选项编码对应不上,已经显示不出正确的选项中文
4.修改该字段为静态字典
打开对应页面设置,删除原有的下拉框,然后设置选项来源为新建的数据字典然后保存。此处还需要将新的下拉框指向原表单的对应模型字段。因为我测试的时候,测试应用忘记建立模型了,所以再拖入新的下拉框以后,没法指向原有的字段了,但是我在别的有模型的应用上测试是可行的。保存这个设置后,再查看页面的数据,可以显示正确的中文。