Przykłady reguł zdarzeń dla funkcji systemu

Wstęp

Dokument opisuje przykłady konfiguracji reguł zdarzeń dla automatów przetwarzających zdarzenia dla systemu. Szczegóły konfiguracji ogólnej zdarzeń opisane są w dokumentacji typu howto w portalu dokumentacji.

Powiadomienie email i przypisaniu osoby do zdarzenia serwisowego

W momencie, gdy zostanie zmienione zdarzenie serwisowe i osoba przypisana do tego zdarzenia się zmieniła, to ta nowa osoba otrzymuje email z treścią informującą go o przydzieleniu jego osoby do tego zdarzenia.

  • Tytuł: Przypisane zdarzenie serwisowe

  • Opis: Wysyła email dla nowo przypisanej osoby.

Definicje

  • Typ reguły: zmiana (CHANGE)

  • Obiekt: zdarzenie serwisowe (mod.AssetApi.model.service.ServiceEvent)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat: Przypisano zdarzenie serwisowe o numerze # {{obj.eventNumber}}

Treść: Przypisano do Ciebie zdarzenie serwisowe dotyczące produktu: {{obj.product.name}}

Lista adresów email: pozostawiamy puste, ponieważ adres email jest pobierany z kontekstu.

Dzięki temu numer zdarzenia oraz nazwa produktu zostaną podstawione w szablonach. Porównanie UUID przypisanego wcześniej i teraz. Test pozytywny, tylko jeśli UUID się zmienił i jeśli przypisany jest niepusty. Porównanie != obsługuje zarówno undefined, jak i null.

Wyrażenia skryptowe

check

Funkcja zwraca true jeśli UUID przypisanego użytkownika do zdarzenia serwisowego jest różny od poprzedniego i nie jest pusty. Oznacza to, że użytkownik przypisany się zmienił. Wykorzystujemy tutaj dostęp do aktualnej wersji obiektu zdarzenia serwisowego obj oraz do poprzedniej wersji oldObj.

 (function(){
     var assignedUuid=_.get(ctx,"obj.assigned.uuid");
     var oldAssignedUuid=_.get(ctx,"oldObj.assigned.uuid");
     return (assignedUuid!=null) && (assignedUuid !== oldAssignedUuid);
 })();

prepare

Uzyskanie maila przypisanego i sprawdzenie, czy nie jest pusty oraz, czy znak "@" występuje na znaku 2 lub dalszym (indexOf zwraca -1, jeśli znak nie wystąpi lub indeks znaku). Nie jest to w pełni poprawna walidacja, ale chodzi o podstawowe sprawdzenie. Jeżeli mail jest OK, to jest dopisywany do tablicy mails obiektu data, który potem zostanie przebudowany w obiekt danych efektora i na tym działanie skryptu się zakończy. Jeżeli nie jest, zostanie rzucony wyjątek (komunikat sformatowany przy pomocy wbudowanego mechanizmu szablonów), że użytkownik o podanym loginie nie ma ustawionego maila, więc wiadomość nie może zostać wysłana.

 var assignedMail=_.get(ctx,"obj.assigned.employeeData.email");
 if(
     (assignedMail!=null) &&
     (assignedMail.indexOf("@")>0)
 ) {
     data.mails.push(assignedMail);
 }
 else {
    logger.info("mail rejected: "+assignedMail);
    throw templating.render("Użytkownik \"{{obj.assigned.login}}\" nie ma ustawionego adresu e-mail!",ctx);
 }

Powiadomienie klienta o zdarzeniu serwisowym

  • Tytuł: Powiadom klienta o zdarzeniu serwisowym

  • Opis: Wyślij email do klienta, kiedy zmieni się stan zdarzenia na rozwiązany

Definicje

  • Typ reguły: zmiana (CHANGE)

  • Obiekt: zdarzenie serwisowe (mod.AssetApi.model.service.ServiceEvent)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat: Zdarzenie serwisowe o numerze # {{obj.eventNumber}} zostało rozwiązane

Wiadomość: Zdarzenie serwisowe dla produktu {{obj.product.name}} zostało rozwiązane.

Wyrażenia skryptowe

check

Reguła sprawdzająca weryfikuje publiczny stan zdarzenia dla aktualnej i poprzedniej wersji obiektu. Pozytywny test występuje jedynie, jeśli aktualny stan to ROZWIĄZANY (RESOLVED) (porównanie != wspiera zarówno niezdefiniowany, jak i obiekt typu null.)

 (function(){
   var currentState =_.get(ctx,"obj.state.publicState");
   var oldState = _.get(ctx,"oldObj.state.publicState");
   return (currentState === "RESOLVED") && (currentState !== oldState);
 })();

prepare

Reguła przygotowująca pobiera email klienta i sprawdza, czy nie jest pusty i czy znak '@' występuje na drugim lub kolejnym znaku (indexOf zwraca -1, jeśli znak nie występuje lub zwraca indeks, na którym ten znak występuje). To nie jest pełne sprawdzenie, ale wystarcza do podstawowej weryfikacji. Jeśli email jest OK, to jest dodawany do listy emaili do wysyłki, a następnie skrypt zakończy działanie. Jeśli nie, wyjątek zostanie wyrzucony z wewnętrznym formatowaniem komunikatu z powodu braku zdefiniowanego adresu email dla klienta, więc wiadomość nie może zostać wysłana.

 var customerMail=_.get(ctx,"obj.eventManager.customer.email");
 if(
     (customerMail!=null) &&
     (customerMail.indexOf("@")>0)
 ) {
     data.mails.push(customerMail);
 }
 else {
     logger.info("mail rejected: " + customerMail);
     throw templating.render("Klient \"{{obj.eventManager.customer.name}}\" nie  ma ustawionego adresu e-mail!",ctx);
 }

Niedziałający agregator

  • Tytuł: Niedziałający agregator

  • Opis: Sprawdza stan połączenia z agregatorem

Definicje

  • Typ reguły: scheduler (SCHEDULER)

  • Obiekt: urządzenie mobilne (mod.AssetApi.model.mobile.Mobile)

  • Efektor: powiadomienie email (Email Notification)

  • Użycie

Potrzebne jest aktywowanie zadania okresowo sprawdzającego komunikację z agregatorami. Należy włączyć odpowiedni scheduler.

Efektor powiadomienia mailowego

Tytuł: Agregator "{{obj.name}}" nie działa

Wiadomość: Agregator "{{obj.name}}" nie odpowiada. Ostatnia data komunikacji: {{lastCommunicationDate}}

Warto zwrócić uwagę na wartość lastCommunicationDate, która domyślnie nie występuje w kontekście, natomiast jest do niego wprowadzana przez regułę sprawdzającą.

Wyrażenia skryptowe

prepare

pusty

check

 (function() {
	if(ctx.detailedEventType !== "aggregator_failure") {
		return false;
	}

	//Pozyskuje datę (jako epoch ms) i konwertuje na ciąg YYYY-MM-DD; HH:mm:ss
	var lastComm = _.get(ctx,"obj.lastCommunicationDate");
	var lastCommStr = "nigdy";
	if(lastComm) {
		var date = new Date(lastComm);
		lastCommStr = date.getFullYear(); //YYYY
		lastCommStr += "-";
		lastCommStr += ("00" + (date.getMonth()+1)).substr(-2,2); //MM
		lastCommStr += "-";
		lastCommStr += ("00" + date.getDate()).substr(-2,2); //DD
		lastCommStr +="; "
		lastCommStr += ("00" + date.getHours()).substr(-2,2); //HH
		lastCommStr +=":"
		lastCommStr += ("00" + date.getMinutes()).substr(-2,2); //mm
		lastCommStr +=":"
		lastCommStr += ("00" + date.getSeconds()).substr(-2,2); //ss
	}

	ctx.lastCommunicationDate = lastCommStr
	return true
 })()

Utworzenie reklamacji

  • Tytuł: Utworzenie reklamacji

  • Opis: Wysyła email do osoby, która utworzyła zamówienia powiązane z tą reklamacją

Definicje

  • Typ reguły: zmiana (CHANGE)

  • Obiekt: reklamacja (mod.AssetApi.model.warehouse.Complaint)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat: Reklamacja z numerem {{obj.number}} została utworzona

Wiadomość: Reklamacja z numerem {{obj.number}} została utworzona

Wyrażenia skryptowe

check

(function(){
   var currentState =_.get(ctx,"obj.complaintState");
   var oldState = _.get(ctx,"oldObj.complaintState");
 return ((currentState === "CREATED") || currentState === "READY") &&  (currentState !== oldState);
 })();

prepare

Dzięki temu skryptowi numer reklamacji zostanie zastąpiony w szablonach. Reguła sprawdzająca przetwarza i porównuje stan reklamacji obecny i poprzedni. Tylko pozytywny test będzie wtedy, gdy stan reklamacji się zmienił i aktualny stan to stan CREATED. Reguła przygotowująca pobiera email z osoby, która utworzyła powiązane zamówienie (przez dostawę) i sprawdza, czy nie jest pusty i znak "@" pojawia się a drugim lub następnym znaku (indexOf zwraca -1, jeśli w danym ciągu nie ma danego znaku). To nie jest w pełni poprawne sprawdzenie, tylko podstawowe. Jeśli email jest OK, jest dodawany do listy adresów email w obiekcie danych, który zostanie wbudowany do obiektu efektora.

Następnie skrypt zakończy działanie. Jeśli nie, wyjątek zostanie rzucony i wiadomość sformatowana zgodnie z wewnętrznym mechanizmem szablonów z informacją, który login użytkownika nie posiada zdefiniowanego adresu email.

Dostępne stany reklamacji: CREATED, READY, SENT, IN_PROGRESS, VALID, INVALID, CLOSED;

 var createdByMail  =_.get(ctx,"obj.delivery.orderDocument.createdBy.employeeData.email");

 if(
   (createdByMail != null) &&
   (createdByMail.indexOf("@")>0)
 ) {
   data.mails.push(createdByMail);
 }
 else {
   logger.info("mail rejected: " + createdByMail);
   throw templating.render("User  \"{{obj.delivery.orderDocument.createdBy.login}}\" does not have assigned  email address!",ctx);
 }

Zmiana stanu dostawy

  • Tytuł: Sprawdzona dostawa

  • Opis: Wysyła email do osoby, która utworzyła zamówienia powiązane z tą dostawą

Definicje

  • Typ reguły: zmiana (CHANGE)

  • Obiekt: dostawa (mod.AssetApi.model.warehouse.Delivery)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat: Dostawa z numerem {{obj.number}} została sprawdzona na budowie

Wiadomość: Dostawa z numerem {{obj.number}} została sprawdzona na budowie

Wyrażenia skryptowe

check

Reguła sprawdzająca przetwarza i porównuje stan reklamacji obecny i poprzedni. Tylko pozytywny test będzie wtedy, gdy stan dostawy się zmienił i aktualny stan to stan DELIVERED lub REMARKS.

(function(){
   var currentState =_.get(ctx,"obj.deliveryState");
   var oldState = _.get(ctx,"oldObj.deliveryState");
   return ((currentState === "DELIVERED") || (currentState === "REMARKS")) &&  (currentState !== oldState);
 })();

prepare

Reguła przygotowująca pobiera email z osoby, która utworzyła powiązane zamówienie (przez dostawę) i sprawdza, czy nie jest pusty i znak "@" pojawia się a drugim lub następnym znaku (indexOf zwraca -1, jeśli w danym ciągu nie ma danego znaku). To nie jest w pełni poprawne sprawdzenie, tylko podstawowe. Jeśli email jest OK, jest dodawany do listy adresów email w obiekcie danych, który zostanie wbudowany do obiektu efektora. Następnie skrypt zakończy działanie. Jeśli nie, wyjątek zostanie rzucony i wiadomość sformatowana zgodnie z wewnętrznym mechanizmem szablonów z informacją, który login użytkownika nie posiada zdefiniowanego adresu email.

Dostępne stany dostawy: LOADING_ON_SITE, IN_TRANSIT, DELIVERED, REMARKS;

 var createdByMail =_.get(ctx,"obj.orderDocument.createdBy.employeeData.email");

 if(
   (createdByMail!=null) &&
   (createdByMail.indexOf("@")>0)
 ) {
   data.mails.push(createdByMail);
 }
 else {
   logger.info("mail rejected: "+createdByMail);
   throw templating.render("User \"{{obj.orderDocument.createdBy.login}}\" does  not have assigned email address!",ctx);
 }

Zmiana stanu zamówienia

  • Tytuł: Zamówienie zaakceptowane

  • Opis: Wysyła email do osoby, która utworzyła zamówienie, jeśli zamówienie zostanie zaakceptowane przez osobę odpowiedzialną

Definicje

  • Typ reguły: zmiana (CHANGE)

  • Obiekt: zamówienie (mod.AssetApi.model.warehouse.Order)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat: Zamówienie z numerem {{obj.number}} zostało utworzone

Wiadomość: Zamówienie z numerem {{obj.number}} zostało utworzone

Wyrażenia skryptowe

check

Reguła sprawdzająca przetwarza i porównuje stan reklamacji obecny i poprzedni. Tylko pozytywny test będzie wtedy, gdy stan zamówienia się zmienił i aktualny stan to stan ACCEPTED.

 (function(){
   var currentState =_.get(ctx,"obj.orderState");
   var oldState = _.get(ctx,"oldObj.orderState");
   return (currentState === "ACCEPTED") && (currentState !== oldState);
 })();

prepare

Reguła przygotowująca pobiera email z osoby, która utworzyła powiązane zamówienie (przez dostawę) i sprawdza, czy nie jest pusty i znak "@" pojawia się a drugim lub następnym znaku (indexOf zwraca -1, jeśli w danym ciągu nie ma danego znaku). To nie jest w pełni poprawne sprawdzenie, tylko podstawowe. Jeśli email jest OK, jest dodawany do listy adresów email w obiekcie danych, który zostanie wbudowany do obiektu efektora. Następnie skrypt zakończy działanie. Jeśli nie, wyjątek zostanie rzucony i wiadomość sformatowana zgodnie z wewnętrznym mechanizmem szablonów z informacją, który login użytkownika nie posiada zdefiniowanego adresu email.

Dostępne stany zamówienia: CREATED, READY, ACCEPTED, ORDERED, CONFIRMED, IN_TRANSIT, DELIVERED, CLOSED, REJECTED;

 var createdByMail =_.get(ctx,"obj.createdBy.employeeData.email");

 if(
   (createdByMail!=null) &&
   (createdByMail.indexOf("@")>0)
 ) {
   data.mails.push(createdByMail);
 }
 else {
   logger.info("mail rejected: "+createdByMail);
   throw templating.render("User \"{{obj.createdBy.login}}\" does not have  assigned email address!",ctx);
 }

Powiadomienie o utworzeniu zadania/zlecenia pracy i przypisaniu do danej osoby

Definicje

  • Typ reguły: utwórz (CREATE)

  • Obiekt: zlecenie pracy (mod.AssetApi.model.workorder.WorkOrder)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat: Utworzono nowe zadanie {{obj.name}}.

Wyrażenia skryptowe

prepare

W tym przypadku przesyłamy email do osoby, która jest przypisana do danego zdarzenia. Nie ograniczamy wysyłania do określonych zadań - wszystkie zadania są wysyłane.

var   assignedMail=_.get(ctx,"obj.assignedUser.employeeData.email");

if(
    (assignedMail!=null) &&
    (assignedMail.indexOf("@")>0)
) {
    data.mails.push(assignedMail);
}
else {
   logger.info("mail rejected: "+assignedMail);
   throw templating.render("Użytkownik \"{{obj.assignedUser.login}}\" nie ma ustawionego adresu e-mail!",ctx);
}

check

(function(){
     return true;
 })();

Powiadomienie o przypisaniu do zadania/zlecenia pracy

W tym przypadku przesyłamy dane do osoby przypisanej. Wykonujemy to, gdy rekord będzie aktualizowany. Wykonujemy to tylko wtedy gdy nowo przypisana osoba jest inna niż osoba, która była poprzednio przypisana (przed zapisem zmian w rekordzie). Osoby identyfikujemy przez UUID.

Definicje

  • Typ reguły: aktualizuj (UPDATE)

  • Obiekt: zlecenie pracy (mod.AssetApi.model.workorder.WorkOrder)

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Tytuł: Przypisano cię do zadania {{obj.name}}

Wyrażenia skryptowe

check

(function(){
     var assignedUuid=_.get(ctx,"obj.assignedUser.uuid");
     var oldAssignedUuid=_.get(ctx,"oldObj.assignedUser.uuid");
     return (assignedUuid!=null) && (assignedUuid !== oldAssignedUuid);
 })();

prepare

var assignedMail=_.get(ctx,"obj.assignedUser.employeeData.email");

if(
    (assignedMail!=null) &&
    (assignedMail.indexOf("@")>0)
) {
    data.mails.push(assignedMail);
}
else {
   logger.info("mail rejected: "+assignedMail);
   throw templating.render("Użytkownik \"{{obj.assignedUser.login}}\" nie ma ustawionego adresu e-mail!",ctx);
}

Powiadomienie o utworzeniu i przypisaniu do osoby rejestru ISO

Nowe działanie korygujące → do przypisanego, jeśli inny niż zgłaszający. System sprawdzi nowe rekordy - w tym przypadku działania korygujące i wyśle email do osoby, która jest przypisana. System NIE wyśle emaila w przypadku, gdy osoba zgłaszająca to ta sama osoba co przypisana. Zobacz skrypt check do weryfikacji tej osoby.

Definicje

  • Operacja: CREATE (Utwórz)

  • Typ obiektu: mod.AssetApi.model.special.energyenvironment.CorrectionAction

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Tytuł: Nowe działanie korygujące o numerze protokołu {{obj.protocolNumber}}

Treść email: Numer protokołu {{obj.protocolNumber}}. Zgłaszający login: {{obj.entryUser.login}}

Wyrażenia skryptowe

check

(function(){
    var responsibleUserUuid=_.get(ctx,"obj.responsibleUser.uuid");
    var entryUserUuid=_.get(ctx,"obj.entryUser.uuid");
    return (responsibleUserUuid != null) && (entryUserUuid != null) && (responsibleUserUuid !== entryUserUuid);
})();

prepare

var assignedMail=_.get(ctx,"obj.responsibleUser.employeeData.email");

if(
    (assignedMail!=null) &&
    (assignedMail.indexOf("@")>0)
) {
    data.mails.push(assignedMail);
}
else {
    logger.info("mail rejected: "+assignedMail);
    throw templating.render("Użytkownik \"{{obj.responsibleUser.login}}\" nie ma ustawionego adresu e-mail!",ctx);
}

Powiadomienie o zmianie przypisania rejestru ISO

Aktualizacja działania korygującego → wysłanie email-a do osoby przypisanej, jeśli się zmieniła. Automat wyśle email w przypadku aktualizacji rekordu ORAZ gdy osoba przypisana się zmieniła.

Definicje

  • Operacja: UPDATE (Aktualizuj)

  • Typ obiektu: mod.AssetApi.model.special.energyenvironment.CorrectionAction

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat email: Przypisano cię do działania korygującego o numerze protokołu {{obj.protocolNumber}}

Wiadomość email: Zostałeś przypisany do działania korygującego. Numer protokołu {{obj.protocolNumber}}. Zgłaszający login: {{obj.entryUser.login}}

check

(function(){
    var responsibleNewUserUuid=_.get(ctx,"obj.responsibleUser.uuid");
    var responsibleOldUserUuid=_.get(ctx,"oldObj.responsibleUser.uuid");
    return (responsibleNewUserUuid != null) && (responsibleOldUserUuid != null) && (responsibleNewUserUuid !== responsibleOldUserUuid);
})();

prepare

var assignedMail=_.get(ctx,"obj.responsibleUser.employeeData.email");

if(
    (assignedMail!=null) &&
    (assignedMail.indexOf("@")>0)
) {
    data.mails.push(assignedMail);
}
else {
    logger.info("mail rejected: "+assignedMail);
    throw templating.render("Użytkownik \"{{obj.responsibleUser.login}}\" nie ma ustawionego adresu e-mail!",ctx);
}

Przekroczenie wartości MIN/MAX dla parametru

Definiowane dla wybranego ustawienia parametru w systemie tj. definiujemy regułę dla parametru "Temperatura" w zasobie "Czujnik temperatury nr 1". Za pomocą reguły, możemy wygenerować powiadomienie, gdy wartość parametru zmieni się i przekroczy wartość MIN/MAX.

Definicje

  • Operacja: UPDATE (Aktualizuj)

  • Typ obiektu: Ustawienia parametru

  • Efektor: powiadomienie email (Email Notification)

Efektor powiadomienia mailowego

Temat email: Wartość parametru temperatury przekroczyła wartość maksymalną. Parametr: {{obj.parameter.name}}

Wiadomość email: Wartość parametru temperatury przekroczyła wartość maksymalną. Parametr: {{obj.parameter.name}}. Aktualna wartość {{obj.value}}.

check

(function(){
    var value =_.get(ctx,"obj.value");
    val floatValue = parseFloat(value.replace(",", "."));
    return floatValue > 10.50;
})();

prepare

<puste>
Howto powstało na bazie wersji systemu 1.22.0.0 (07.2023) oraz przedstawia funkcje, które mogą nie być dostępne w Twoim systemie. Zapytaj AMAGE o udostępnienie tej funkcjonalności.
Ze względu na ciągły rozwój systemu niektóre ekrany lub pliki konfiguracji mogą wyglądać nieznacznie inaczej, ale zachowają nadal pełną funkcjonalność tutaj opisaną. Nie wpływa to na zasadnicze funkcje opisywane w tym dokumencie.