Użycie obliczenia do utworzenia pojedynczego pola na podstawie dopasowań wyszukiwania

Do manipulowania danymi systemu Service Desk lub Asset Manager można użyć edytora obliczeń. W tej sekcji opisano, w jaki sposób utworzyć obliczenie przetwarzające iteracyjnie kolekcję Dopasowania wyszukiwania w celu zbudowania jednego pola, które może zostać wyświetlone lub wysłane w wiadomości e-mail do odpowiedniego użytkownika.

Więcej informacji na temat użycia obliczeń można znaleźć w dokumencie Podręcznik projektanta.

Kolekcja Dopasowania wyszukiwania wygenerowana przez zachowanie Wyszukiwanie automatyczne zwykle zawiera obiekty różnych typów, na przykład incydenty i artykuły. Obiekty te mają różne atrybuty, dlatego trudno jest napisać obliczenie zwracające zapisy z tej kolekcji, ponieważ nie można mieć pewności, jakie atrybuty mogą zostać odnalezione. Na przykład Incydent zawiera atrybut Data zgłoszenia, którego nie ma w obiekcie Artykuł, natomiast Artykuł zawiera atrybut Skuteczność, który nie występuje w obiekcie Incydent. Funkcja GetReferencedObject("") dostępna w edytorze obliczeń umożliwia iteracyjne przejście przez kolekcję Dopasowania wyszukiwania, zidentyfikowanie obiektów, do których odnoszą się poszczególne zapisy, a następnie zażądanie odpowiednich atrybutów danego zapisu w następnej części obliczenia.

W poniższym przykładowym obliczeniu iteracyjnie przeglądane są wiersze kolekcji Dopasowania wyszukiwania i sprawdzane jest, czy dany wiersz odpowiada obiektowi Artykuł czy Incydent. Jeśli wiersz odpowiada obiektowi Artykuł, generowany jest ciąg znaków Tytuł artykułu =tytuł, gdzie tytuł jest tytułem z obiektu Artykuł. Jeśli wiersz odpowiada obiektowi Incydent, generowany jest ciąg znaków Identyfikator incydentu=Id, gdzie Id jest numerem referencyjnym z obiektu Incydent.

Copy
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 == "ZarządzanieIncydentami.Incydent":
            Value += "Incident Id=" + obj.Id
    Value += " / "
return Value

Najpierw zmienna Value jest ustawiana na wartość pustą, a następnie w wierszu rozpoczynającym się od instrukcji for w obliczeniu wykonywane jest iteracyjne przejście przez poszczególne elementy kolekcji Dopasowania wyszukiwania obiektu Incydent.

Za każdym razem, gdy obliczenie mija wiersz Value +=, tekst wygenerowany przez pozostałą część wiersza zostaje dopisany na końcu bieżącego ciągu znaków przechowywanego w zmiennej Value. Gdy obliczenie po raz pierwszy mija wiersz Value += item.SerialNumber + "=", odczytywany jest numer seryjny (SerialNumber) pierwszego elementu (w tym przypadku 1) i dodawany jest znak =, co powoduje wygenerowanie ciągu znaków 1=.

W wierszu obj = item.GetReferencedObject("MatchingObject") używana jest funkcja GetReferencedObject(""), która ustawia zmienną o nazwie obj na wartość równą obiektowi odpowiadającemu elementowi w bieżącym wierszu kolekcji. Jest ona używana w instrukcjach if w dalszym ciągu obliczenia.

Instrukcja if obj.ClassType.FullName == "Knowledge.Article": sprawdza, czy obiekt zwrócony w poprzednim wierszu to Knowledge.Article. Jeśli obiektem tym NIE jest Knowledge.Article, obliczenie przechodzi do wiersza if obj.ClassType.FullName == "IncidentManagement.Incident":, aby sprawdzić, czy zwrócony obiekt to IncidentManagement.Incident.

Jeśli zwróconym obiektem jest Knowledge.Article, wykonywany jest wiersz Value += "Tytuł artykułu=" + obj.Title, który powoduje dodanie tekstu Tytuł artykułu=<tytuł artykułu> do zmiennej Value (gdzie <tytuł artykułu> jest tytułem odpowiedniego artykułu. Jeśli zwróconym obiektem jest IncidentManagement.Incident, wykonywany jest wiersz Value += "Identyfikator incydentu=" + obj.Id, który powoduje dodanie tekstu Identyfikator incydentu=<id incydentu> do zmiennej Value (gdzie <id incydentu> jest numerem referencyjnym odpowiedniego incydentu.

W wierszu Value += " / " na końcu zmiennej Value zostaje dodany znak /, a obliczenie przechodzi w pętli do następnego elementu kolekcji, dodając kolejny zapis itd. aż do końca kolekcji.

Gdy obliczenie będzie zakończone, wygenerowany zostanie ciąg znaków o postaci:

1=Tytuł artykułu=Tytuł pierwszego elementu w kolekcji / 2=Identyfikator incydentu=12033 / ...

W tym przykładzie pierwszym elementem w kolekcji Dopasowania wyszukiwania jest artykuł o tytule Tytuł pierwszego elementu w kolekcji, a drugim elementem jest incydent 12033.

Jeśli w tym przykładowym obliczeniu kolekcja Dopasowania wyszukiwania zawiera inne elementy niż artykuły lub incydenty, w instrukcjach if nie zostanie odnaleziony właściwy obiekt i odpowiedni wiersz będzie pusty z wyjątkiem numeru seryjnego znajdującego się na początku. Aby to poprawić, należy dodać inną instrukcję if dla nowego obiektu.