驰骋低代码、工作流、表单引擎头像
表单元素的分类与实现:主表、从表、附件与扩展控件驰骋BPM驰骋低代码低代码工作流引擎封面图

表单元素的分类与实现:主表、从表、附件与扩展控件驰骋BPM驰骋低代码低代码工作流引擎

表单元素的分类与实现:主表、从表、附件与扩展控件


一、概述

表单的本质是两件事:展示数据与采集数据。 这两件事决定底层逻辑;元素怎么分类,则决定设计器面板怎么摆、元数据怎么存、运行时怎么渲染。

驰骋把一张低代码表单上的「可设计元素」按数据载体分成四层:

层装什么元数据主表设计器入口
主表数据一行业务主记录上的字段Sys_MapAttr(FK_MapData=主表)「基础字段」inputGroup
从表数据多行明细Sys_MapDtl + 从表自己的 MapAttr「附件/从表」→ 从表
附件文件 / 图片Sys_FrmAttachment(+ 字段级 AthShow)「附件/从表」→ 字段附件 / 表格附件 / 图片
字段扩展控件评分、手写、签批、公文…仍是 Sys_MapAttr,高编号 UIContralType「通用 / 附件」扩展项 + 组合向导

与《表单三要素》的关系:三要素讲控件 · 数据 · 逻辑;本文讲主表 · 从表 · 附件 · 扩展——同一车厢的两种切片。逻辑类(级联、Pop、AutoFull)不另开一章,它们挂在字段上的 Sys_MapExt 里,见三要素文档。

起点关系落点
表单主记录(Sys_MapData / PTable)承载主表字段 Sys_MapAttr
表单主记录(Sys_MapData / PTable)承载从表 Sys_MapDtl
表单主记录(Sys_MapData / PTable)承载附件 Sys_FrmAttachment
从表列定义从表列 MapAttr
主表字段换一种控件扩展控件(高编号 UIContralType)
主表字段加一层行为Sys_MapExt 逻辑

运行时主链(经典表单):FrmGener → FrmFool* → MapAttrForm → OneMapAttr;从表走 DtlComponent / DtlCard;附件块走 Ath.vue。


二、主表数据

主表数据 = 主表物理行上的一列列字段。 每列是 Sys_MapAttr 一行,由三个维度共同描述(详见三要素文档):

维度字段作用
控件形态UIContralTypeTB / DDL / Radio / Check…
存储类型MyDataType字符串 / 整型 / 日期 / 金额…
逻辑类型LGType普通 0 / 枚举 1 / 外键 2

2.1 分类(对应设计器「基础字段」)

大纲里的「文本框、下拉框、单选、选择框」,在代码里展开为:

用户说法设计器项(FormComponents.inputGroup)典型落库
文本框文字、大块文字、整数、数值、金额、日期、日期时间UIContralType=TB(0) + 不同 MyDataType
下拉框枚举下拉、外键下拉DDL(1) + LGType=Enum/FK + UIBindKey
单选按钮单选(enumsRadio)RadioBtn(3) + 枚举
选择框开关(布尔)、多选(enumsCheckbox)CheckBok(2);布尔用 MyDataType=AppBoolean

创建实现:CreateFieldFunctions.ts 中 createBasicTextField / createBasicDateField / createBasicBooleanField 等 → INSERT Sys_MapAttr。 渲染:FrmEnd.useKeyOfEnType() 综合 MyDataType + UIContralType + mapExts 决定模板分支,再由 OneMapAttr.vue 画出具体控件。

2.2 实现要点

  1. 同一个 TB,配不同 MyDataType,就是不同输入体验(日期控件 ≠ 另起一种 UIContralType)。
  2. 下拉 / 单选 / 多选的数据来源不在控件枚举里,而在 LGType + UIBindKey(枚举进 Sys_Enum*,外键进 Sys_SFTable)。
  3. 组合字段 / Pop / 文本补全会出现在「实体单据引用」面板,但落库仍是主表文本字段 + Sys_MapExt——属于主表字段的行为增强,不是第四种主表数据类型。

2.3 主表小结

你要采的优先拖别忘了配
姓名、事由文字 TB长度、必填
请假天数、金额数值 / 金额小数位、AutoFull
请假类型单选或枚举下拉枚举字典
所属部门外键下拉SFTable / 级联

三、从表数据

从表 = 挂在主表下的多行明细。 元数据:Sys_MapDtl(FK_MapData→主表,PTable→明细物理表);列定义仍是 Sys_MapAttr,只是 FK_MapData 等于从表 No。 布局上通过 Sys_GroupField.CtrlType='Dtl' 占一块区域。 行键:OID + RefPK → 主表主键(流程里常为 WorkID)。

设计器:「附件/从表」→ 从表(子表) → createSlavaTable。

3.1 展示模式:ListShowModel(GPE_ListShowModel)

从表不只是「一张普通表格」。产品按 MapDtl.ListShowModel 分成三组:

(1)常规模式
值名称说明
0表格(默认)大纲说的「通用表格」;标准行列编辑
1卡片模式每条明细一张卡;保存后常切 EditModel=1(经典表单弹卡编辑)
2自定义 URL自研展现页,数据仍写入当前从表

另有 EditModel:0 表格内编辑 / 1 经典表单卡片编辑——管的是「怎么改行」,与「怎么列出来」正交。

(2)报表模式(交叉采集 / 展现)
值名称字段结构要求维度习惯
32 维表2 个外键或枚举 + 1 个数值左=第 1 维,头=第 2 维
43 维表(左)3 个外键或枚举 + 1 个数值左侧为第 1 维
53 维表(上)同上上方为第 1 维

适用:按「年级 × 政治面貌」、多维指标矩阵等做采集或展示;存储仍是扁平从表行(维度字段 + 数值),交叉是展现算法。

(3)固定行表格
值名称典型场景
6损益表模式左树目录 + 本期 / 基期两列数值
7大类小类大类小类交叉

3.2 实现要点

  1. 从表是容器,不是 UIContralType;容器里的每一列才是控件。
  2. 运行时:DtlComponent.vue → 表格 Dtl.vue 或卡片 DtlCard.vue;卡片/单元格内字段仍走 OneMapAttr。
  3. 复杂计算装不下时用 自定义 URL,但不要另起一套存储——继续写当前 MapDtl.PTable。
  4. VSTO 场景另有 VSTOEditModel(Excel 侧编辑从表),与 Web ListShowModel 并列,不互相替代。

3.3 从表小结

场景建议模式
报销明细、行程列表通用表格 0
字段多、一行编辑重卡片 1
矩阵填报(两维/三维)2 维 / 3 维表
财务本期对比损益表 6
强定制交互自定义 URL 2

四、附件

附件解决的是:非结构化文件如何挂到表单实例上。 配置在 Sys_FrmAttachment;文件行在 Sys_FrmAttachmentDB(RefPKVal 挂主表/从表主键)。

4.1 上传类型:AttachmentUploadType(EnumAth.cs)

枚举产品转义设计器对应形态
Single字段附件(历史上称单附件)「字段附件」appendix-field → createAthField主表某一列上的附件;常伴 UIContralType=AthShow(6)
Multi表格附件(多附件)「表格附件」→ createAthTable + GroupField.CtrlType=Ath独立附件区,多文件列表(Ath.vue)
Specifically指定的特殊绑定按业务指定上传对象

文案对照:FrmAttachmentExt.UploadTypeT —— Multi→「多附件」,Single→「单附件」。设计器面板用「字段附件 / 表格附件」更贴实现。

4.2 图片附件

  • 设计器:「图片」→ createImgAth
  • 控件:UIContralType=FrmImgAth(12),可配 PicUploadType(相册或仅拍照等)
  • 与普通 Ath 分流:偏图片预览与移动端拍照,仍落附件库体系

另有 写字板(HandWriting=8)在附录分组里,本质是手写图像类附件扩展,见下一节。

4.3 实现要点

层字段附件(Single)表格附件(Multi)
布局行内一列GroupField 一整块
MapAttr通常有 AthShow 字段行容器为主,不依赖普通 TB
主键习惯FK_FrmAttachment + '_' + PKGUID 等多文件主键
保存方式AthSaveWay(IIS / FTP / DB…)两侧共用同左

API 侧:CCFormAPI.CreateOrSaveAthMulti / 单附件创建路径分别写 UploadType=Multi/Single。

4.4 附件小结

需求选
「合同扫描件」挂在字段旁字段附件
「本单所有证明材料」一个列表表格附件(多附件)
现场拍照、证件照图片附件
手签确认写字板(扩展控件)

五、字段扩展控件

扩展控件 = 仍是主表(或从表)上的 MapAttr 字段,但 UIContralType 不再是普通 TB/DDL,而是专用组件。 设计器创建函数集中在 CreateFieldFunctions / EditPageMap;运行时由 OneMapAttr 的 isScore / isSignCheck / isGovDocFile 等分支接管。

5.1 常见扩展清单(按代码补全)

控件UIContralType设计/属性入口典型用途
评分101 ScoreExtScore / universal-rate满意度、质量打分
写字板 / 手写签名8 HandWritingcreateHandWriting签收、手签确认
签批组件14 SignCheckSignCheck节点意见区旁的签批
评论组件15 FlowBBSMapAttrFlowBBS表单内讨论
公文正文110 GovDocFileMapAttrGovDocFile正文文件
发文字号 / 收文字号17 / 170DocWord*公文文号
流程进度图50 JobScheduleExtJobSchedule进度可视化
轨迹图62 FrmFlowTrack(服务端枚举)流转轨迹
关联流程200 FlowRefLinkFlowRefLink引用其它流程实例
定位 / 地图16 Location / 4 MapPinExtMap / Fixed外勤打卡、选点
录音 / 拍照5 MicHot / 7 MobilePhoto移动端为主现场取证
身份证13 IDCardMapAttrCard证号识别/结构化
大块说明 HTML60 BigText / FrmHtmlcreateHTML说明性图文,非录入
超链接 / 按钮9 HyperLink / 18 BtnExtLink / FrmBtn跳转、触发动作
图片(展示)11 FrmImg通用图片装饰/示意图
二维码—(常为 MapExt QRCode)GPE_QRCode扫码打开/展示

评分、签批等在 EditPageMap 里各自打开专用属性页(如 ExtScore、SignCheck),不要用普通文本框属性页硬改。

5.2 与「逻辑扩展」的边界

字段扩展控件逻辑类 MapExt
改什么换成另一种控件在原控件上加行为
例子评分、手写、公文级联、AutoFull、Pop、填充从表
主存MapAttr.UIContralTypeSys_MapExt.ExtModel

Pop、文本自动完成在设计器「实体单据引用」里,实现上仍是文本字段 + MapExt,归入逻辑,不归入本节「换控件」。

5.3 扩展小结

先问:是换一种录入/展示组件,还是给现有组件加联动? 前者 → 扩展控件;后者 → MapExt(见《表单三要素》业务逻辑章)。


六、四层如何拼成一张单

以「请假 + 行程 + 证明」为例:

元素层实现落点
请假类型、日期、天数、事由主表数据Sys_MapAttr on ND1Rpt
行程明细(多行)从表 · 通用表格MapDtl + ListShowModel=0
病假证明扫描件表格附件或多图FrmAttachment UploadType=Multi / ImgAth
本人手签扩展 · 写字板UIContralType=HandWriting
天数 = 到 − 从(逻辑)Sys_MapExt ExtModel=ReqDays

换检验检测、合同申报,只是从表改成二维矩阵、附件改成报告 PDF、扩展改成评分——四层骨架不变。


七、小结

  1. 主表数据:基础字段面板;UIContralType × MyDataType × LGType。
  2. 从表数据:MapDtl + ListShowModel(通用表 / 卡片 / 2 维 / 3 维 / 损益…)。
  3. 附件:字段附件(Single)vs 表格附件(Multi)vs 图片附件;文件在 FrmAttachmentDB。
  4. 字段扩展控件:高编号 UIContralType 专用组件;与 MapExt 逻辑扩展分工明确。
  5. 设计器换车间(经典/章节/VSTO),元素分类与 Sys_ 落点共用*。

附录:代码索引

主题路径
控件枚举CCFlow/Components/BP.En30/En/EnumLab.cs → UIContralType
附件上传类型CCFlow/Components/BP.En30/Sys/EnumAth.cs → AttachmentUploadType
设计器面板Vue3/.../FoolFormDesigner/props/form/FormComponents.ts
创建函数.../type-utils/CreateFieldFunctions.ts、CreateContainerFunctions.ts
类型映射.../type-map/FormTypeMap.ts
从表展示模式Vue3/.../MapDtl/ListShowModel/GPE_ListShowModel.ts
附件实体CCFlow/.../Sys/FrmAttachment.cs
字段渲染Vue3/src/WF/CCForm/OneMapAttr.vue、FrmEnd.ts

延伸阅读

  • 《表单三要素:控件、数据与业务逻辑》:级联 / AutoFull / Pop 等逻辑类怎么挂。
  • 《表单引擎在应用系统中的位置与作用》:流程 / 实体 / 单据 / 活动四种宿主角色。
  • 《驰骋五大表单设计器》:请假 / 公文 / 合同 / 检验检测选哪种车间。

本文依据当前仓库傻瓜设计器与 BP.En30 静态整理;面板文案以你部署的版本为准。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/ccflow/article/details/170482612

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--