表达式约束和表约束

应用于: Microsoft Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 R2, Microsoft Dynamics AX 2012 Feature Pack

本主题介绍的是表达式约束和表约束的使用。约束控制的对象是您在配置销售订单、销售报价单、采购订单或生产订单的产品时您可以选择的属性值。您可以根据自己喜欢的构建约束方式来选择使用表达式约束或表约束。

什么是表达式约束?

表达式约束的特性是使用算术和布尔运算符和函数的表达式。表达式约束是为产品配置模型中的特定组件而写的。它不能为其他组件重用或共享。但是,组件的表达式约束可以引用组件的子组件的特性。关于如何创建表达式约束的信息,请参阅“为产品组件创建一个表达式约束”。

什么是表约束?

约束表列出了在配置产品时允许属性值的组合。表约束定义可以被广泛使用。当您为产品配置模型中的组件创建一个表约束时,您要选择一个表约束定义。

若要创建合理的组合,您要给组件添加特定类型的属性。每个属性类型具有一个特定值。有关如何创建表约束以及如何将其添加到产品配置模型的信息,请参阅创建一个表约束将表约束添加到组件

表约束示例

此示例显示的是如何限制特定尺寸的电视机的季节性报价配置。

第一个表显示的是配置通常可用的电视尺寸和类型。电视尺寸和类型为“电视类型”和“电视尺寸”属性类型可用的值。

属性

属性类型

电视

电视尺寸

24、36、42、48、50

电视类型

等离子、投影、OLED、LCD

下一张表显示的是由“电视季节报价”表约束定义的组合。通过使用下面的表约束,您可以配置尺寸仅为 48 寸和 50 寸的等离子电视和投影电视,并且可以配置尺寸仅为 36 寸的 LCD 电视。

表约束

类型

大小

电视季节性报价

等离子

48

等离子

50

投影

48

投影

50

LCD

36

有关如何添加产品属性的详细信息,请参见添加特性分配给组件

您可以创建系统定义的表约束和用户定义的表约束有关这些类型表约束的详细信息,请参阅“关于系统定义和用户定义的表约束”。

应使用何种语法来解决“Microsoft Dynamics AX”中的约束?

如果您要编写表约束,您必须使用优化建模语言语法来编写条件。“Microsoft Dynamics AX”使用“Microsoft” Solver Foundation 约束求解器来处理这些约束。有关详细信息,请参阅 Microsoft Solver Foundation

我应该使用表约束还是表达式约束?

您可以根据自己喜欢设置表约束定义的方式使用表达式约束或表约束。您建立的表约束为一个矩阵表,而表达式约束则是单个报表。在您配置产品时,可以随意使用约束条件。下列示例可以说明两种方法之间的差异。

当您使用以下设置约束配置产品时,允许的组合是黑色、尺寸为 30 或 50 的产品,以及红色、大小为 20 的产品。

表约束设置

颜色

大小

30

50

红色

20

表达式约束

(颜色 == “黑色” & (尺寸 == “30” | 尺寸 == “50”)) | (颜色 ==“红色” & 大小 = “20” )

当我编写表达式约束时,我应该使用运算符还是中缀表示法?

您既可以使用运算符又可以使用中缀表示法来编写表达式约束。对于运算符“Min”、“Max”和“Abs”,您不能使用中缀表示法。在大多数编程语言中这些运算符中是作为搜索条件的。

在编写表达式约束时,我可以使用哪些运算符和中缀表示法?

下表列出的是您在产品配置模型中为组件编写表达式约束时,可以使用的运算符和中缀表示法。

通过第一个表中示例,您可以了解编写表达式时如何使用中缀表示法或运算符。

操作员

描述

语法

示例

提示

如果第一个条件为 false,则为 true;第二个条件为 true 或两者都为 true。

提示[a, b],中缀:a -: b

运算符:“Implies[x != 0, y >= 0]”

中缀表示法:“x != 0 -: y >= 0”

只有所有条件为 true,则为 true。

如果条件数为 0 (零),则产生 True。

与[args],中缀:a & b & ...& z

运算符:“And[x == 2, y <= 2]”

中缀表示法:“x == 2 & y <= 2”

如有条件为 true,则为 true。

如果条件数为 0 (零),则产生 False。

或[args],中缀:a | b | ...| z

运算符:“Or[x == 2, y <= 2]”

中缀表示法:“x == 2 | y <= 2”

这将合计其条件。

如果条件数为 0 (零),则产生 0 。

加[args],中缀:a + b + ...+ z

运算符:“Plus[x, y, 2] == z”

中缀表示法:“x + y + 2 == z”

这就否定了此参数。

此处必须只有一个条件。

减[expr],中缀:-expr

运算符:“Minus[x] == y”

中缀表示法:“-x == y”

绝对值

取其条件的绝对值。

此处必须只有一个条件。

绝对值[expr]

运算符:“Abs[x]”

时间

取其条件的产物。

如果条件数为 0 ,则产生 1 。

乘[args],中缀:a * b * ...* z

运算符:“Times[x, y, 2] == z”

中缀表示法:“x * y * 2 == z”

功率

取指数。

从右到左求幂。也就是说,它是权限相关,并且“乘方[a, b, c]”与“乘方[a, 乘方[b, c]]”等效。只有正数数量为方次数时才可以使用乘方。

乘方[args],中缀:a ^ b ^ ...^ z

运算符:“Power[x, 2] == y”

中缀表示法:“x ^ 2 == y”

最大值

生成最大条件。

如果条件数为 0 (零),则生成结果为无穷大。

最大值[args]

运算符:“Max[x, y, 2] == z”

最小值

生成最小条件。

如果条件数为 0 (零),则生成结果为无穷大。

最小值[args]

运算符:“Min[x, y, 2] == z”

生成其条件的相反逻辑。

此处必须只有一个条件。

非[expr],中缀:!expr

运算符:“Not[x] & Not[y == 3]”

中缀表示法:“!x!(y == 3)”

下表示例显示的是如何编写中缀表示法。

中缀表示法

描述

x + y + z

增加额

x * y * z

x - y

二进制减法的转换方式与第二个数为负的二进制加法相同。

x ^ y ^ z

具有右关联的求幂

!x

布尔值“非”。

x -: y

布尔值影响

x | y | z

布尔值“或”

x & y & z

布尔值“与”

x == y == z

等式

x != y != z

明确的

x < y < z

小于

x > y > z

大于

x <= y <= z

小于等于

x >= y >= z

大于等于

(x)

括号覆盖默认优先级顺序。

为什么我的表达式约束验证为错误?

您不能使用预留的关键字作为产品配置模型中的属性、组件或子组件的求解器名称。以下列表包含您不能使用的预留关键字:

  • 上限

  • 分项指标

  • 相等

  • 场地

  • 如果

  • 小于

  • 大于

  • 提示

  • 日志

  • 最大值

  • 最小值

  • 功率

  • 时间

  • 时隙

  • 模型

  • 决策

  • 目标

看出您的问题了吗?

我们尽力涵盖更多问题,这样 Microsoft Dynamics AX 帮助就可以帮助更多的人。

请告诉我们您想将哪些问题添加到这个主题中。请发邮件到 adocs@microsoft.com