属性的行为:必填、只编辑、格式
必填、只在语义层维护、值格式、条件格式、渲染提示、类型类:概念,以及 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 的附加元数据,由应用自己去解释。
给一个属性选配置
- 值可以为空吗?
不可以,就写
notNull;Action 的参数则写required。 - 值来自数据源吗?
不来自,只靠 Action 或人写,就标
writeback: true。 - 存的值和人看的样子一样吗?
不一样,可以加
valueFormatting元数据,值本身不动。要在 Workshop 里显示数字格式,还要配置组件的数字格式。 - 颜色要随值变吗?
条件格式目前还没有,先在 Nexus 应用里按数据自己上色。
对象类型与属性到这里讲完了。下一门课讲对象之间的关系:两端的名字、基数和外键,从 link-types 开始。
要点
- 必填让属性不能为空;
writeback: true的属性不来自数据源,同步不会覆盖它。 - 值格式只改显示不改值;派生属性不能带格式,也不能必填。
- 条件格式和渲染提示目前还没有;
valueFormatting和typeClasses存下来、原样返回。 - 数字格式可在 Workshop 定义里配置。条件上色由 Nexus 应用代码实现。
练一练
给订单和工单配属性行为
销售订单必须有客户,工单的负责人只在语义层维护,订单金额要显示成美元。
为 salesOrder.customerId 写 notNull;先用 aidc semantic sql 查一查现有订单里有没有空的 customerId。
写出 workOrder.ownerId 的定义。它和「ERP 里有、被 Action 改过的 status」有什么不同?各自会出现在读回对象的哪里?
为 salesOrder.totalUsd 写 valueFormatting,显示成美元、两位小数。再写一句话:物料库存低于安全库存要标红,今天该怎么做?
小测
选一个答案,马上看解析。
Q1workOrder.ownerId 只由 assign-owner 这个 Action 写,ERP 里没有这一列。它应该是?
没有数据源的列,值只靠 Action 或编辑写入,这正是 writeback: true 的用途,数据源同步也不会把它冲掉。必填只管「不能为空」,不管值从哪来。
Q2物料库存低于安全库存时要显示成红色。今天在 AIDC 里怎么做?
条件格式和渲染提示目前都还没有。颜色由读数据的 Nexus 应用来决定。
Q3给 totalUsd 加了 currency 值格式之后,读到的值变了吗?
值格式只是元数据,告诉应用怎么显示。存的和读的都是原值,所以计算和比较不受影响。