属性的行为:必填、只编辑、格式

第 7 课 · 共 7 课 约 8 分钟

必填、只在语义层维护、值格式、条件格式、渲染提示、类型类:概念,以及 AIDC 今天有哪些。

本课目标

读完这一课,你将能够

  • 说出必填、只编辑、值格式、条件格式、渲染提示、类型类各管什么
  • 判断这六件事在 AIDC 里哪些今天有、哪些目前还没有
  • 为一个属性选对配置

六件事,一张表

前六节讲完了属性「是什么」。这一节讲属性「怎么表现」:六种配置,让同一个属性在写入、读取和显示时各守各的规矩。先看总表,再逐个展开。

它管什么在 AIDC 里,今天
必填值不能为空;必填的数组至少有一个元素有:notNull
只编辑属性不对应数据源的任何列,值只由编辑写入有:writeback: true
值格式把原始值显示得好读:币种、单位、百分比、日期格式、时区有:valueFormatting,只定义、原样返回
条件格式按值,或按同一对象另一个属性的值,给属性上色、对齐目前还没有
渲染提示告诉应用怎么用这个属性:可搜索、可排序、长文本、标识符……目前还没有
类型类一对 kind 与 name 的附加元数据,由应用解释有:typeClasses,只存、原样返回

必填与只在语义层维护

必填:属性不许为空,必填的数组至少要有一个元素。派生属性不能必填。给已有数据的属性加必填之前,先用 SQL 查一遍有没有空值,别让现存的对象一下子不合规。

{ "name": "customerId", "type": "string", "title": "Customer", "notNull": true,
  "references": { "entity": "customer", "column": "customerId" } }

最常见的坑,是把数据源里本来就常常为空的列设成必填:已有的空值会让这条规则一上线就不成立。先查、先清理,再加必填。

只在语义层维护:有些属性在 ERP 里没有对应的列,比如工单的负责人。它们只靠 Action 或编辑写入,数据源同步永远不会覆盖它。示例工厂的 assign-owner 写的就是这类属性。

{ "name": "ownerId", "type": "string", "sharedProperty": "ownerId", "writeback": true }

别把它和「数据源里本来就有、被 Action 改过」的属性混为一谈。后者不用标 writeback:读回对象时,被改动盖住的属性会出现在 overridden 里,告诉你数据源现在的值是什么。

值格式、条件格式与其他提示

值格式只改显示,不改值。数字可以加币种、单位、百分比或紧凑写法,日期和时刻可以指定格式与时区,布尔可以指定真、假各显示成什么。存的值不变,读到的还是原值。

{ "name": "totalUsd", "type": "decimal", "title": "Order total",
  "valueFormatting": { "number": { "type": "currency", "currencyCode": "USD", "maximumFractionDigits": 2 } } }

别把格式当成数据:不要为了好看,把 totalUsd 存成 "$18,450.00" 这样的字符串。存原值,交给值格式去显示,求和与比较才不会出错。

number 的类型有 standard、percentage、currency、unit、basisPoint、compact,小数位可以设 0 到 10 位。派生属性不能带格式。

条件格式按值给属性上色,也可以按同一个对象的另一个属性来判断,例如物料的 onHandQty 低于 safetyStockQty 时标红。渲染提示告诉应用这个属性怎么用:能不能搜索和排序,是不是长文本或标识符。类型类是一对 kind 与 name 的附加元数据,由应用自己去解释。

给一个属性选配置

  1. 值可以为空吗?

    不可以,就写 notNull;Action 的参数则写 required。

  2. 值来自数据源吗?

    不来自,只靠 Action 或人写,就标 writeback: true。

  3. 存的值和人看的样子一样吗?

    不一样,可以加 valueFormatting 元数据,值本身不动。要在 Workshop 里显示数字格式,还要配置组件的数字格式。

  4. 颜色要随值变吗?

    条件格式目前还没有,先在 Nexus 应用里按数据自己上色。

对象类型与属性到这里讲完了。下一门课讲对象之间的关系:两端的名字、基数和外键,从 link-types 开始。

要点

  • 必填让属性不能为空;writeback: true 的属性不来自数据源,同步不会覆盖它。
  • 值格式只改显示不改值;派生属性不能带格式,也不能必填。
  • 条件格式和渲染提示目前还没有;valueFormatting 和 typeClasses 存下来、原样返回。
  • 数字格式可在 Workshop 定义里配置。条件上色由 Nexus 应用代码实现。

练一练

给订单和工单配属性行为

销售订单必须有客户,工单的负责人只在语义层维护,订单金额要显示成美元。

为 salesOrder.customerId 写 notNull;先用 aidc semantic sql 查一查现有订单里有没有空的 customerId。

小测

选一个答案,马上看解析。

Q1workOrder.ownerId 只由 assign-owner 这个 Action 写,ERP 里没有这一列。它应该是?

Q2物料库存低于安全库存时要显示成红色。今天在 AIDC 里怎么做?

Q3给 totalUsd 加了 currency 值格式之后,读到的值变了吗?

延伸阅读