一、FlashTable 在信创场景里,解决的是"数据入口"这一层
在信创国产化替代的推进中,芯片、操作系统、数据库都有成熟的国产方案,但有一层往往被忽略:数据入口——业务人员每天真正填写的那些表单(生产工单、检测原始记录、巡检记录、报销单)。
FlashTable 是一款专注高效表单开发的工具,它的定位正是落在这一层:把线下 Word/Excel/WPS 表单 1:1 还原成线上可填、可计算、可集成的表单,同时让表单数据结构化地进入下游系统。
在信创场景下,这个定位有特殊的价值。信创替代的核心诉求之一,是让整条数据链路都可信、可控。数据入口作为链路的第一环,它的可信程度直接决定了整条链路的可信程度。而一个可信的数据入口,需要同时满足三件事:数据不出域、结构可治理、入口可嵌入。本文就从这三个维度,讲清楚 FlashTable 在信创环境下的部署与落地方式。
二、私有化部署:离线交付,数据不出域
信创环境的第一约束是内网、甚至物理隔离,很多服务器跑 OpenEuler、OpenKylin 等国产操作系统,且不允许连公网。这决定了部署形态必须是自包含的离线交付。
FlashTable 以 Docker 离线镜像包交付,把运行时、第三方组件、配置全部打包,部署方只需把包传进内网、解压、跑一键脚本,全程不访问外网。
部署前先确认服务器环境满足要求:
# 检查 Docker 版本(需 >= 25.0.0)dockerversion# Client: Docker Engine - Community# Version: 28.2.2环境要求为 Linux x86_64、内核版本 > 5.0、内存 ≥ 8GB、存储 ≥ 50GB,明确支持 OpenEuler、OpenKylin 国产操作系统。
上传离线包并一键部署:
# 上传离线镜像包scpflashtable.tar.gz root@192.168.1.100:/opt/# 解压cd/opt&&tar-xzvfflashtable.tar.gz-C/opt/flashtable# 一键部署:先基础服务,再核心服务cdflashtable&&bash1key_deploy.sh# 1. deploy bases 部署基础服务# 2. deploy services 部署核心服务部署完成后,表单产生的所有数据都写入部署方自己指定的本地目录(默认/home/flash_table等),物理上不离开内网。服务状态可用一条命令确认:
watch-n5-d"docker service ls | grep cxist"三、从一张线下表单,到一条结构化数据
数据不出域解决的是"数据放哪",但可信的更高要求是数据本身结构化、可治理。
FlashTable 的做法是:让表单样式与数据结构同时成立。一方面,它对 Word/Excel 模板做 1:1 还原——合并单元格、跨页表格、盖章位置、公式计算都能保留,业务人员看到的就是原来那张表;另一方面,它用 JSON Schema 驱动表单结构,让每个输入项在数据对象里都有一个确定的位置。
字段定位靠两条路径规则:.访问对象属性,#访问数组元素。例如一个项目台账的数据对象:
{"project":{"name":"某产线改造","owner":"王工"},"materials":[{"name":"伺服电机","qty":4,"unit":"台"}]}表单里"项目负责人"对应project.owner,材料清单某行的"数量"对应materials#qty。明细行数由数据条数驱动——传几条渲染几行,而不是预先画死格子。
更进一步,字段结构可由主系统反向约束。FlashTable 暴露数据源接口,主系统把字段模型推送进来:
POST /api/datasourcefield/saveAll Content-Type: application/json { "dataSourceName": "material", "items": [ { "uniqueId": "m1", "fieldName": "materials#name", "fieldComment": "材料名称", "fieldType": "string", "isArray": 0, "isNull": 0, "order": 1, "parentId": "0", "type": "text" } ] }这样,表单层的字段结构在源头就和下游系统的表结构对齐,数据填出来即可被下游直接消费,无需再做二次转换。
四、组件化嵌入:RPC 协议与数据主权
信创替代很少推倒重建,更常见的是在既有系统骨架里,把"表单采集"这一层替换成更可信的组件。这要求数据入口能低侵入地嵌入,并且数据主权留在宿主系统。
FlashTable 通过 iframe 嵌入 + postMessage 通信来实现。它提供一套轻量 RPC 通信库(flash-table-rpc.min.js,约 2KB),宿主系统调用即可完成数据的读写与提交:
varrpc=createFlashTableRPC(iframe,'http://flash-table:9150',{TEMPLATE_LOADED:function(data){console.log('模板加载完成',data);},SUBMIT_CALLBACK:function(result){console.log('提交回调',result);}});// 写入数据rpc.SET_DATA({userName:'张三',userAge:25});// 读取数据rpc.GET_DATA({keyParameter:false}).then(function(data){console.log('表单数据:',data);});// 提交并获取数据 IDrpc.SUBMIT_DATA().then(function(dataId){console.log('数据ID:',dataId);});这套协议下,两点对信创场景尤其关键:统一账户(表单组件接入宿主已有身份体系,不另起账号、少一个攻击面)和数据归宿主(提交后把数据与数据 ID 交还宿主系统,由宿主决定存储与流转)。
五、一份可复现的落地配置
除了上述能力,FlashTable 还提供了几个在信创场景下实用的配置项,这里一并给出,方便直接复现。
主题定制:表单组件支持通过 SET_CONFIG 命令动态注入主题变量,与宿主系统的视觉风格保持一致:
rpc.SET_CONFIG({theme:{'--primary-color':'#1890ff','--input-background-color':'#e6f7ff'}});打印任务:检测原始记录、巡检记录这类表单,落地后往往需要打印归档。FlashTable 通过 PrintTask 支持静默打印,可指定纸张大小、方向或自定义尺寸:
rpc.PRINT({id:'template001',page:'A4',orientation:'p',dataId:'data001'}).then(function(){console.log('打印完成');});PrintTask 的page支持 A0-A10,orientation取p(纵向)或l(横向),也可用format: [宽mm, 高mm]自定义纸张尺寸,适配各类原始记录的存档规格。
六、数据入口这一环,交给它去承接
回过头看,信创场景下 FlashTable 的价值可以收敛为一句话:把"表单数据入口"这一环,做成可信、可私有化、结构化的组件。
它已经在安全等级要求严苛的能源电力央企数字化场景中跑过真实生产环境,在私有化部署、内网隔离、结构化采集的约束下长期运行,可信度是被实际负载验证过的。
对于正在推进信创替代的团队,如果遇到"表单采集层怎么替换才安全、又不推倒重来"的问题,FlashTable 提供了一个务实的选择:离线镜像包部署在国产操作系统上,字段路径规则让数据从源头结构化,iframe + postMessage 让组件低侵入嵌入、数据主权留在自己手里。数据入口这层夯扎实了,信创替代的信任底座才算真正落地。