使用计算从 Search Matches(搜索匹配)中创建单个字段

您可以使用计算编辑器来操纵 Service Desk 或 Asset Manager 数据。此部分介绍如何通过创建迭代整个 Search Matches 集合的计算来创建能显示或以电子邮件方式发送给适当用户的单个字段。

有关使用计算的详细信息,请参阅设计器指南

自动搜索行为所生成的 Search Matches 集合通常包括不同类型的对象 — 例如,Incident(事件)和 Article(文章)。这些对象具有不同的属性,因此难以写出一个计算来返回该集合的记录,因为您无法确定您会找到哪些属性。例如,Incident 包含 Raise Date(提交日期)属性,但 Article 则不包含,而 Article 包含 Effectiveness(有效性)属性但 Incident 则不包含。计算编辑器中的 GetReferencedObject("") 函数使您可以迭代整个 Search Matches(搜索匹配)集合,确定每条记录引用哪个对象,然后在计算的下个部分中请求该记录的相应属性。

以下示例计算迭代了 Search Matches 集合中的各行,并确定了每一行是对应于 Article 还是对应于 Incident。如果某行是 Article,则生成字符串 Article Title=title,其中 title 是 Article 的标题;如果某行是 Incident,则生成字符串 Incident ID=Id,其中 Id Incident 的参考编号。

复制
import System
static def GetAttributeValue(Incident):
    Value = ""
    for item in Incident.SearchMatches:
        Value += item.SerialNumber + "="
        obj = item.GetReferencedObject("MatchingObject")

        if obj.ClassType.FullName == "Knowledge.Article":
            Value += "Article Title=" + obj.Title
        if obj.ClassType.FullName == "IncidentManagement.Incident":
            Value += "Incident Id=" + obj.Id
    Value += " / "
return Value

首先,Value 变量被设为空白,然后行开始 for 这一行,命令计算迭代 Incident 对象上的 Search Matches 集合中的每个 item

每当计算经过 Value += 时,该行其余部分生成的文本将被串联到 Value 变量中所保存的当前字符串的末尾。因此当计算第一次经过 Value += item.SerialNumber + "=" 这行时,它会读取第一个项目的 SerialNumber(即 1),然后加上 =,生成字符串 1=

obj = item.GetReferencedObject("MatchingObject") 这一行则使用 GetReferencedObject("") 函数来设置名为 obj 的变量,使其等于集合中当前行内的项目的对象。之后计算中的 if 语句将使用该值。

if obj.ClassType.FullName == "Knowledge.Article": 测试之前一行返回的对象是不是 Knowledge.Article,如返回的对象不是 Knowledge.Article,则计算会前进到行 if obj.ClassType.FullName == "IncidentManagement.Incident": 来测试返回的对象是不是 IncidentManagement.Incident

如果返回的对象是 Knowledge.Article,则会运行 Value += "Article Title=" + obj.Title 这一行并将文本 Article.Title=<article title> 添加到 Value 变量(其中 <article title> 是相应文章的标题。如果返回的对象是 IncidentManagement.Incident,则会运行 Value += "Incident ID=" + obj.Id 这一行并将文本 Incident ID=<Incident ID> 添加到 Value 变量(其中 <Incident ID> 是相应事件的参考编号。

然后 Value += " / " 行会将 / 添加到 Value 变量的末尾,计算循环会返回并继续处理集合中的下一个项目,添加下一条记录,以此类推,直到集合结束。

当计算完成时,它会生成一个字符串,格式如下:

1=Article Title=集合中第一个项目的标题 / 2=Incident.Id=12033 / ...

在本示例中,Search Matches 集合中的第一个项目是文章,其标题是 Title of first item in the collection,而第二个项目是事件 12033。

通过示例计算,如果 Search Matches 集合包含并非文章或事件的项目,则 if 语句就无法找到匹配,而相应的行则会是空白,只会在那一行的开头留有项目的序列号。您可以通过为新对象另行添加一个 if 语句来修复这个问题。