计算表达式规则
写计算表达式的规则与大多数编程语言中的写表达式规则类似。计算表达式使用特定的语法和运算符、常数、函数以及 Windchill RV&S 字段来执行计算。
例如,下图显示了一个简单的计算表达式,该计算表达式涉及用于执行聚合计算的一个函数和一个字段。
计算表达式用于在图表中计算多项中所出现的字段的总和。
下图显示了更复杂的计算表达式,该表达式组合了多个函数、字段、字段值与运算符,以在计算字段中执行计算:
* 
为了清楚展示,此图概略显示了某些函数、字段、字段值和运算符。
计算字段中的计算表达式会确定项是否未有效的更改单。
* 
创建计算表达式之前,请审阅下列重要考虑事项,以了解可接受的语法、运算符和常数。
重要考虑事项
常规
本指南未涵盖提供有关如何编写计算表达式的明确说明。但是本指南提供了一些简易与复杂的计算表达式示例,以阐明在字段、图表和报告中执行计算时可以采用的某些方式。
如果您未提供正确的计算表达式语法,则在保存计算表达式时,Windchill RV&S 会显示详细的出错消息。
语法
要指定字段名,请将字段名包含在双引号内,例如,"Actual Cost"
除非在引号内,否则将忽略空格和特殊字符,例如,"Defect Count"
后会接“(” (括号) 的标识符视为函数。未接括号的标识符视为字段名。
计算字段可有效用作其他计算字段或计算表达式中使用的字段;但是,它们不可以递归。
算术运算符
计算表达式支持下列算术运算符:
* (乘)
/ (除)
+ (加)
- (减)
- (相反数)
Boolean-exp?true_exp:false_exp (条件式三元)
布尔运算符
计算表达式支持下列布尔运算符:
== (等于)
= (包含)
!= (不等于)
<> (不包含)
< (少于)
> (大于)
<= (少于或等于)
>= (大于或等于)
and
or
expression boolean-operator expression
对于布尔字段,两个关键字是布尔常数:truefalse。如果将计算字段标记为布尔字段,则计算表达式的结果必须是布尔值,例如:
空字段
Windchill RV&S 中,无值的字段称为空字段。除在聚合表达式中外,包括空字段或不明确字段的计算表达式均会返回空值。
例如,要确定是否 Project End Date 日期字段为空,请输入:
"Project End Date"-today() > 0
"Project End Date" - today() <=0? false:true
要将空字段值指定为零,请使用 isEmpty 函数。例如:
isEmpty("QA Time", 0) + isEmpty("Development Time", 0)
使您能够添加两个持续时间并检索结果,即使其中一个值为空,也是如此。
* 
如果计算字段可包含不明确的计算,作为最佳实践,PTC 建议将运算式包含在 IsEmpty() 函数中。这可确保将任何空计算字段值存储到历史记录,作为不明确计算表达式的结果。
日期、时间和时区
日期和日期/时间会视为计算表达式中的单独日期类型,并且无法分配给其他表达式。
显示的日期字段不会随用户所在的时区发生变化;不过,显示的日期/时间字段和时间条目会因用户所在的时区而异。
计算表达式将返回 Windchill RV&S 客户端的时区中的日期/时间,并在 Windchill RV&S 服务器的时区中执行计算 (如适用) 。
计算表达式不包括用于将日期/时间信息转为仅限日期的函数。此规则适用于表达式返回时间戳 (日期加时间) 值的所有情况。需要日期/时间信息时,请搭配使用计算表达式与时间戳字段。
日期表达式接受所有标准化的日期和时间戳格式。
在计算表达式中,支持含时间戳的下列操作:
* 
您不可混合使用日期与时间戳。
timestamp + integer constant; integer constant + timestamp
timestamp - integer constant
timestamp("timestamp-constant")
timestamp - timestamp
可从整数常量中减去或加上时间戳,例如,now()+5now() - 5
将以天为单位处理整数常量,例如,timestamp + integer constant 会获取指定的时间,然后加上指定的天数。两个时间戳相减时,两个日期之间的天数会舍入为最近的天数,并将此作为结果。使用其他操作符或浮点会导致出错。
用户和组字段
在计算表达式中,您可以比较单值和多值用户和组字段,例如,"Assigned User" = jriley"Assigned Group" = Development。通过创建包括用户或组字段比较在内的计算表达式,您可以将计算字段的结果整合到可编辑性规则中。
您还可以比较计算表达式中的两个用户字段,例如,“Assigned User” = “Created By”。此时会返回逻辑值或者 truefalse
您还可以使用符号 me 用户名来表示检索项的用户。
这对您有帮助吗?