表达式的编写提示与技巧

针对度量和出站事件值、触发器条件、入站事件过滤器等编写 XML 路径语言 (XPath) 表达式时,可以采用以下技巧和技术。

if 语句注意事项

如果使用 if 语句时遇到错误,可能需要您指定 else 子句。例如,您可以使用此命令:
if (myMetric eq 'abc') then 100 else 0

设置度量的值

您可以在表达式中使用 if 语句来设置度量的值:
if (inboundEvent_field eq 'sometext') then 100 else 0

XPath 中的除法

以下示例说明如何进行除法运算:
 myNumericMetric div 5
除法可用于数值类型(xs:integer 或 xs:decimal)和 xs:duration(用于将持续时间除以一个数或另一个持续时间)。
为防止除以零(这种情况将导致异常),请在执行计算之前,合并条件中的表达式,以确保除数不为零。 例如,不要编写以下表达式:
StockTradeBPEL.BR.HT.InvalidTrades div StockTradeBPEL.BR.HT.TotalTrades
可编写为:
if (StockTradeBPEL.BR.HT.TotalTrades ne 0) then StockTradeBPEL.BR.HT.InvalidTrades div StockTradeBPEL.BR.HT.TotalTrades else 0

聚集度量

如果有一个正在聚集度量值的度量,那么您可以通过使用空的度量值来忽略正在聚集的度量。
如果想要在满足某些条件之前,有目的性地忽略正在聚集的度量,请执行以下步骤:
  1. 设置度量的缺省值,从而当创建监控上下文实例时,该度量为空。
  2. 如果满足条件,使用以下表达式来设置度量值。如果不满足条件,则度量值仍为空。
    if (myMetric eq 'abc') then xs:decimal(100) else ()

使用包含秒表的最小聚集函数

将秒表的聚集函数设为最小将产生错误的结果,因为秒表的缺省值是 0,而不是为空。所有实例都包括在聚集中,即使那些从未启动的秒表也不例外,因此最小值将总是为 0。

相对于直接使用秒表,您可以定义复制秒表值的持续时间度量。使用触发器定义何时复制值。您可以定义在有事件到达时触发的触发器,或者您可以使用模型中的现有触发器。 请不要定义度量的缺省值。定义以下度量值表达式:

if ( StopwatchA ne xs:dayTimeDuration( 'PT0S' ) ) then StopwatchA else MetricB
其中,StopwatchA 是秒表,而 MetricB 是度量。现在,您可以将最小聚集函数应用于 MetricB

计算持续时间度量

以下示例说明如何使用时间戳记计算持续时间度量:
Order_End_Time - Order_Start_Time

将持续时间度量转换为天数

以下示例显示您可以如何将持续时间度量转换为持续时间所代表的天数:
xs:string(Average_Process_Duration_KPI div xs:dayTimeDuration('P1D'))

比较持续时间度量和常量值

您可以将持续时间度量与常量值进行比较。在下例中,持续时间是 3 天 1 小时。
Average_Process_Duration ge dayTimeDuration('P3DT1H')

添加元素引用

监控上下文(例如,度量值、计数器和秒表)以及入站或出站事件属性中的字段将通过其标识来引用。如果引用的字段位于父代或子代监控上下文中,那么它们的标识将用作导航路径的一部分,如以下示例所示:
表 1. 引用示例
引用的字段 Description
orderTotal 当前监控上下文中具有 orderTotal 标识的度量值
timeSinceProcessStart 当前监控上下文中具有 timeSinceProcessStart 标识的秒表
itemContext/itemCost 标识为 itemContext 的子监控上下文中具有 itemCost 标识的度量值
../orderNumber 父监控上下文中具有 orderNumber 标识的度量值
delayNotification/predefinedData/severity 公共基本事件中预先定义的数据元素,该元素通过包含 delayNotification 标识的入站或出站事件定义来发送或接收
delayNotification/extendedData/orderValue 入站或出站公共基本事件中的扩展数据元素
delayNotification/propertyData/cause 入站或出站公共基本事件中的上下文数据元素
Submit_Claim/createClaimResponse/app:claim/app:claimItem[@type="ACCIDENT"]/app:amount 入站事件的属性,该事件包含基于 XML 模式定义 (XSD) 的事件部分

除之前显示的最后一个路径表达式之外的所有路径表达式都是相对路径(以标识开头),从对包含该引用的表达式求值所在的监控上下文导航。