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.
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.