上一主题: 代理

下一主题: 创建业务逻辑模块

输出 - 用户表

标准业务逻辑脚本无权访问外部输出表。 仅有以下两个输出目标:

在以下情况下需要使用 T_SLALOM_OUTPUTS 外部表:需要超出定期服务水平结果的附加输出时,无法通过添加其他度量标准提供附加输出时,或添加另一度量标准而导致计算性能下降时(遍历同一记录集,仅仅是为了提供不同的输出)。

例如,考虑这样一种情况:度量标准被设置为计算在不到一天的时间内就解决的故障单的百分比,并且需要生成报告来显示未能在一天内解决的所有故障单的列表,那么公式除了要将找到的每个故障单计入统计信息外,还需要输出到外部表。

对于以上要求,常规输出服务水平表将无法提供此输出,原因如下:

写入用户输出表的记录仅是与针对度量标准的跟踪期运行并计算例外和更正的代理相关的记录。 例如,如果为度量标准定义了每月跟踪期,则当引擎针对其他粒度(如小时、日、周、季度和年)执行公式时,将不会执行输出语句(Tools.SaveRecord 和 Tools.SaveFields)。

从外部来说,拥有此表的额外好处是它可用来表示多个报告要求。 除契约要求外,其他典型报告要求都可从这些表中生成。 例如,计算一个月内“关闭的故障单数”的度量标准,还能计算故障单解决时间并将所有这类信息输出到输出表。 这将可以对该期间内关闭的各个故障单进行更详细的分析,同时还能提供某单独的报告要求下可能需要的其他详细信息。

这些表中的信息也由引擎重新计算机制管理。 在重新计算过程中,将记录标记为非活动,并写入新行来代替。 这是务必要注意的一个要点,因为所有自由格式报告 SQL 语句都需要检查 T_SLALOM_OUTPUTS 表中的 IS_ACTIVE 字段 (where is_active = 1)(由于仅这些记录是当前的)。

注意:在公式的调试过程中运行业务逻辑脚本时,实际上是将消息写入 T_DEBUG_SLALOM_OUTPUTS 表,而不是 T_SLALOM_OUTPUTS 表。

在使用 T_SLALOM_OUTPUTS 记录数据时,插入的数据始终为文本(因为 T_SLALOM_OUTPUTS 中的字段全部为 varchar2)。 因此,将采用操作系统的格式(在应用程序生命周期内可能会更改)将日期值转换为文本。 因此,T_SLALOM_OUTPUTS 中的日期格式可能会存在不一致。 此外,业务逻辑处理 UTC 日期时,有的用户可能希望 T_SLALOM_OUTPUTS 保存本地时间戳,因此在某些情况下,可能需要使用转换函数 Tools.GetLocaleDate(date) 来解决此问题。

以下函数可将日期转换为本地时间,并通过将日期设置为“dd/mm/yyyy hh24:mi:ss”格式来保持日期格式一致:
Function FormatDate(time)
     Dim LocalTime
     LocalTime=Tools.GetLocaleTime(time)
     FormatDate=Day(LocalTime) & "/" & Month(LocalTime) & "/" &
  Year(LocalTime) & " " & _
     Hour(LocalTime) & ":" & Minute(LocalTime) & ":" & Second(LocalTime)
End Function

可以采用以下两种方法从业务逻辑公式写入外部表:

下面详细介绍了 Tools 对象的这两种方法:

Tools.SaveRecord tableName, key,[val1],[val2],…

此方法将记录保存到名为 T_SLALOM_OUTPUTS 的表中。 tableName 参数指定应当将信息写入 T_SLALOM_OUTPUTS 中的(虚拟)表。 用户表中的每条记录都具有唯一键,该键指定了应当将信息写入的记录。 每条记录还具有多达 20 个字符串类型的值字段。 SaveRecord 方法接收用户表名称和键。 它还接受用户表中的所有值字段。 (这些值参数为可选,可以省略。)如果已存在具有相同键的记录,则会更新此记录。 (仅更新作为参数传输的值字段。)如果不存在具有此键的记录,则会创建此记录。

Tools.SaveFields tableName, key, [fieldName1,fieldVal1], [fieldName2,fieldVal2]

此方法与 SaveRecord 类似,只是此方法提供的是字段名称和相关字段值对,而不是枚举所有值。 字段编号可代替字段名称。 字段名称应在前面已在 T_SO_FIELD_NAMES 表中手动定义好。 此表用于记录输出表的结构。

建议在写入 T_SLALOM_OUTPUTS 之前由业务逻辑专家定义好输出表的结构,因为这样也就定义好了字段的结构和含义,这会使查询更简单。

表结构如下:

优先选择使用 SaveFields 方法,因为它会保留包含插入值的结构和含义的文档。

示例

考虑这样一种情况:除了生成计算解决时间低于定义的阈值的故障单的百分比的度量标准结果外,还需要生成解决时间超过阈值的所有突发事件的列表。 在验证阈值后,将在 OnXXXEvent 事件处理程序过程中写入输出表。

这可通过以下示例来说明:

Sub OnIncidentEvent(eventDetails)
                                     
    If eventDetails("RESOLUTION_TIME")<=SThreshold Then
     CountSuccessIncident s= CountSuccessIncidents+1
    Else
building the record unique key
     KeyString= eventDetails("IncidentID") &eventDetails.Time	

        Tools.SaveFields "IncidentsTable", KeyString, "CASE_ID",
    eventDetails("CASE_ID"),_
           "CUSTOMER_REF",eventDetails("CUSTOMER_REF"),_
           "TICKET_CREATOR",eventDetails("TICKET_CREATOR"),_
           "CREATION_TIME",eventDetails("CREATION_TIME"),_
           "SEVERITY",eventDetails("SEVERITY"),_
           " RESOLUTION_TIME ",eventDetails("RESOLUTION_TIME "),_
           "CLOSE_TIME",eventDetails("CLOSE_TIME")
    End If
End Sub

与使用 T_SLALOM_OUTPUTS 表有关的几个建议如下:

注意:写入输出表可能会影响引擎的性能,因为与内存中的计算相比,写入表时计算密集程度更高。 因此,请慎重考虑是否需要使用此功能;确实需要时,请尽量最小化访问表的次数。

报告来自用户定义的表的信息

无法使用标准 CA Business Service Insight 报告向导来报告写入输出表的信息。 为了报告此信息,需要构建一个自由格式报告。 本质上,这意味着构建一个基于此表的 SQL 查询。 因为此表包含通过各种公式写入的多个逻辑表,因此,建议由熟悉 SQL 的某个人(数据源专家)基于 T_SLALOM_OUTPUTS 创建一个视图,以便区分其中包含的各种逻辑表,并确保按计划检索到相应的信息。

视图定义将包含由字符串字段类型向相关信息类型的转换,并保存需要的所有筛选(逻辑表、活动记录、相关度量标准等)。

以下示例说明了创建视图的过程:

create or replace view kpi_view as
select
     to_date(t...) as fieldName,
     to_number(t..), …
from t_slalom_outputs t,
     t_rules r,
     t_sla_versions sv,
     t_slas s,
where table_name = 'TableName'
     and is_active = 1
     and t.rule_id = r.psl_rule_id
     and r.sla_version_id = sv.sla_version_id
     and sv.sla_id = s.sla_id
     and sv.status = 'EFFECTIVE'