在表达式中使用 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 项目。