在表达式中使用 NOT_SET

什么是 NOT_SET?

NOT_SET 是一个应用于表达式中标量值的值。 用它来表示该值未定义。  在 Architect 中,标量值是非集合值。  例如: 在以下字符串中,返回值是 NOT_SET 字符串:

ToString(NOT_SET)

未定义的字符串值与空字符串不同。 如果在运行时计算以下表达式,则表达式返回 false:

ToString(NOT_SET) == ""

参数值的许多重载和函数中都不允许使用 NOT_SET 值。  在 “表 达式帮助 ” 对话框中,函数重载参数指示是否允许 NOT_SET 值。  每个参数都包含一个 “NOT_SET 允许:” 指示它是否接受指定类型的 NOT_SET 参数的条目。  如果 Architect 在运行时使用无效的 NOT_SET 值评估参数,则会调用错误处理程序。

不确定传入的值是否为 NOT_SET?

为避免在运行时出现错误,请在表达式中检查 NOT_SET。 以下示例说明了在运行时将失败的表达式场景:

Flow.myInteger 是一个整数变量,其值为 NOT_SET。  在这种情况下,流程作者有一个 “更新数据” 操作,该操作将此表达式分配给另一个 Integer 变量。

5+Flow.MyInteger

由于 Flow.myInteger 没有为输入的值分配值,因此它会要求调用流运行时将 undefined 添加到 5。 因为这个表达式没有答案,所以它会调用错误。 如果流程作者确保 Flow.myInteger 有一个值(例如,NOT_SET 以外的值),则 5+flow.myInteger 可以正常运行。 但是,如果 Flow.MyInteger 具有 NOT_SET 值,则流程作者应在表达式中明确检查此值并对其进行适当处理。

下一个示例演示如何在表达式中使用 NOT_SET:

在这种情况下,加法中的逻辑在 NOT_SET 的条件下将 Flow.myInteger 的实例视为 0:

5+If(IsSet(Flow.MyInteger),Flow.MyInteger,0)

该表达式本质上是说:“Flow.myInteger 中是否存在值? 如果是这样,请使用它。 否则,如果 Flow.myInteger 中不存在任何值,请使用值 0。” 在这种情况下,当值为 NOT_SET 时,流程作者会对 Architect 的行为做出有意识的决定,然后执行将继续。

不是为了空

isNotsetOreMpty 也是一个有用的 运行时函数,类似于 ISSet。 此函数对于处理 NOT_SET 或空值(例如集合)非常有用。 有关此函数的详细信息,请参阅表 达式帮助

NOT_SET 和集合

集合从来都不是整体上的 NOT_SET。 但是,集合可以包含 NOT_SET 项目。