Skip to content

业务处理

数据模型

】数据表是活字格应用搭建的基础,务必优先设计,谨慎修改。

📍 INFO

数据库的任何修改都应当谨慎对待,充分考虑改变对于现有逻辑的影响。更多请查阅数据库

服务端命令

】请按照业务场景,拆分公开与私有命令,确保一个服务端命令只负责一件事。模板命令的思路类似。

🔔 TIP

  1. 使用私有命令封装内部方法;
  2. 使用公开命令调用私有命令;
  3. 每个服务端命令的逻辑长度都不宜过长。如果命令较长,请及时分析是否满足只负责一件事的原则。

】优先确定服务端命令的入参与出参。

📍 INFO

如果您的团队组成中,页面设计和后端逻辑处理分别是不同的人员/团队负责,优先确定接口模型会有效提升开发效率。

】非必要不使用服务端命令的返回值。如需要返回多值,请使用「创建对象」命令构建返回对象。

📍 INFO

构建返回对象的优势:

  1. 可以轻松增加缓存;
  2. 数据字段增减时,不需要修改返回值,只需要在数据源处修改即可,返回值变更同理。

PS:「创建对象」命令为插件,请访问葡萄城市场进行下载安装。

】在团队能力范围内或合适的应用场景中,可以考虑将共有的服务端命令抽出,放在一个公共应用中,形成公共服务,方便多应用模块调用。

公式

】在非必要场景下,避免使用「odata 公式」。

📍 INFO

odata 公式作为活字格老版本时的查询数据利器,在持续的功能迭代下已经力不从心。目前,odata 公式具有如下问题:

  • odata 公式只支持查询单条数据的单个字段,早已无法满足实际的业务数据查询场景;
  • odata 公式可读性较差;
  • 每个 odata 公式都会与数据库进行交互,在一个页面中,odata 公式的数量会严重影响数据库的性能表现;
  • 「设置变量命令」已经完成对 odata 公式 99% 场景下的替代,因此 odata 公式已经不会继续更新,只会进行日常维护。

】请留意页面中公式的循环引用,避免出现死循环的现象。

示例

公式循环问题,用一句话表述:某个单元格公式中的上游包含了自己。如下方表格模拟所示,对于单元格 B2,其公式的计算会在连续引用中再次引用到自身,从而形成循环引用。

ABCD
1=D1=D2
21=A2+C1=B2=C2

公式循环引用在很多 Excel 场景中是常见的。但它在性能维度上带来的效果是负面的。

如果您的公式循环引用得到了非预期的效果,请梳理您的逻辑,明确自变量与因变量,将公式闭环转化为开口。在上方示例的表格中。C1:D2 区域于逻辑无用。因此一个循环引用的逻辑就被转化为 B2 自身的值翻倍,从而打破闭环。

在活字格中,「值变更原因」也是打破闭环的有力工具。

】所有单元格引用,请使用名称引用。

📍 INFO

维护时可以非常方便地理解引用逻辑;进行迁移、复制、粘贴时也不会造成引用错位。

】相比于数据库操作,公式函数 VLOOKUP() 的性能较差,大数据量或者复杂逻辑下非必要不使用,可以考虑使用「数据绑定-关联此字段的其他表」替代,或者编写查询视图。

表格

】当表格的查询条件使用单元格引用时,请勾选「初始化页面时不加载表格数据」,避免表格数据的二次加载。

📍 INFO

在页面初始化时,表格数据查询的优先级会高于单元格的值渲染。因此,当查询条件引用单元格时,表格会优先按照空值查询数据,之后单元格从空值更新为真实值的行为会再次触发表格的查询逻辑,完成二次请求。勾选「初始化页面时不加载表格数据」可以跳过按照空值查询数据的第一个查询操作。

】如果表格或列表(图文列表)的数据量大,请考虑按需加载、分页加载或者提供“加载”按钮,引导用户在页面呈现完毕后手动加载数据。

隐藏

】隐藏数据应当放置在统一的指定位置,便于后期维护。

】隐藏区域应当只关注数据本身,而非展现类型,因此其「单元格类型」请尽量选择空。

📍 INFO

任何非空的单元格类型都会加入渲染工作中,对于页面性能有直接影响。

】批量数据请尽量选择绑定数据源。隐藏区域放置表格,非必要不使用。

数据

】对企业内部大多数简单权限的系统,推荐使用页面数据库绑定,开发比较快速,开发效率比较高。

】大型系统、有复杂逻辑或权限的系统、面向公网用户的系统,请遵循前后端分离的思想,弃用数据库字段绑定,统一从服务端命令中获取数据。

📍 INFO

从服务端命令中获取数据的优势:

  • 可以轻松解决各种复杂的权限问题(在服务端命令里校验权限);
  • 可以轻松解决异步数据加载问题(如增加首屏速度);
  • 可以轻松应对页面和数据库设计变更问题,尤其是数据库变更(页面与数据分离,逻辑集中在服务端命令里,修改页面对逻辑修改较少);
  • 可以轻松增加缓存(可以给服务端命令加缓存,加快展示速度)。

】对于下拉列表,使用数据源绑定且数据量较大时,「服务端搜索」是性能更好的呈现方式。

】对于变更频率较低,或者允许一定时间更新延迟的数据,比如字典类型数据,推荐打开其绑定的单元格样式中的缓存选项。

】所有第三方服务的 api 地址,请尽量维护在全局变量中,禁止在调用侧直接硬编码(hard code) 。

📍 INFO

硬编码,即将数据直接写在代码/逻辑中。对于 api 服务,不同环境下的请求地址大多是不同的。调用侧硬编码会导致切换环境时(提测或上线时),维护的成本大大增加。

除了全局变量,也可以考虑将数据维护在数据表中,在调用时从数据表中读取最新值。

】如果需要导入直接进库的 Excel 数据文件较大时,推荐使用「获取数据库附件中的文件路径」和「服务端导入导出 excel 命令」在后端完成数据导入。

🔔 TIP

Excel 数据导入的场景落地思路较为灵活。 从空间维度可分为前端导入与后端导入:

  • 前端导入:数据解析与校验在页面上执行,处理完成后走数据接口进行持久化。适合数据量较小的场景。「导入 Excel 数据到表格」为典型的前端导入。
  • 后端导入:数据解析至持久化的全过程都在服务器上执行。用户只需要将 Excel 文件上传至服务器即可。适合数据量较大的场景。后端导入在数据校验的反馈及时性上表现较差,因此,对于模版的规范要求较高。

从时间维度可分为同步导入与异步导入:

  • 同步导入:在执行导入逻辑时,当前页面无法进行其他操作,直至导入完成。所以同步导入一般应用在小数量的导入场景中。
  • 异步导入:用户在执行导入操作后,系统直接反馈操作结果。导入逻辑会在后台运行,用户可以进行其他操作。导入完成后,系统会以消息的方式告知用户结果。一般应用在大数据量的导入场景中。

同步与异步的思路也可以等价运用到所有类型的文件上传场景中。

流程

】流程操作推荐使用「流程命令条」。活字格会依照「节点操作」配置自动读取当前节点可用操作。如需织入自定义逻辑,请优先使用流程「高级设置 - 事件」中织入自定义的服务端命令,

🔔 TIP

如需自定义操作,请在流程的「节点操作-操作类型」中选择自定义,之后配合「事件」与「流程命令条」的前后置命令实现操作落地。

】在工作流中调用服务端命令时,推荐勾选「异步请求」,以避免阻塞。

】流程视图请初始化在外联库中。

📍 INFO

流程引擎具有独享的内置库。因此,任何业务表与流程视图的关联查询都因为跨库而查询异常。将流程引擎数据切换为和业务表相同的外联库中可以有效提升数据检索的效率。

打印

】打印页的设计请避免使用页面嵌套的方式。

📍 INFO

无论是「页面容器」或者「组件」,都不会加入到打印渲染中。

】如果在打印页中使用「图文列表」,请确保图文列表中的行列布局与父页面保持一致。

📍 INFO

「打印/导出页面到PDF」命令在进行打印区域渲染时,为保证打印精度,会严格匹配页面中的行列。如果图文列表中的行列布局与父页面不一致,可能影响最终的打印效果。