Kroki Edycja danych
Kroki Edycja danych udostępniają obszar o formacie swobodnym, w którym można wprowadzać polecenia sterujące przetwarzaniem skryptu.
W polu Edycja tekstu danych należy wprowadzić polecenia skryptu. Kliknąć sąsiadującą ikonę, aby otworzyć okno z większym obszarem służącym do definiowania kroku edycji danych.
Co do zasady składnia obowiązująca w obszarze edycji danych jest odzwierciedleniem poleceń dostępnych w jawnie określanych typach kroków. Istnieje jednak kilka poleceń dostępnych tylko w obszarze edycji danych. Przykładem są dwa polecenia strukturalne: For (Dla) orazIf (Jeżeli).
W tematach tej sekcji opisano szczegóły składni obsługiwane przez typ kroku "Edycja danych".
Omawiane tematy
Instrukcja "conditional branch"
Funkcje służące do przetwarzania listy
Deklarowanie i wywoływanie obiektów opartych na schemacie
Wykonywanie skryptu i przekazanie
Deklarowanie obiektu biznesowego z grupą obiektu biznesowego
Komentarze
Można wstawiać komentarze do skryptu, używając dwóch ukośników // jako dwóch pierwszych znaków kroku edycji danych. Przykład:
//
// quit with error
//
if ("not(customer/securityEnabled)")
terminate with error (8000, 1001 %1="customer/id" %2='not allowed');
end-if;
Zmienne tymczasowe
Zmienne tymczasowe można deklarować we wszystkich typach skryptów. Należy przed nimi umieścić pojedynczy znak dolara ("$"). Jednakże zmienne tymczasowe działają odmiennie w różnych typach skryptów:
-
W skryptach APB zmienne tymczasowe przechodzą z jednego skryptu APB do drugiego (patrz Instrukcje "Wykonywanie skryptu" i "Przekazanie kontroli"), co oznacza, że można używać zmiennych tymczasowych do komunikacji między skryptami APB.
-
Zmiennych tymczasowych nie można przekazywać ze skryptu BPA do skryptu usługi ani wtyczki. Między tymi typami skryptów można przekazywać wyłącznie elementy obszaru danych.
-
W skryptach usługi i wtyczki zmienne tymczasowe istnieją jedynie przez czas wykonywania konkretnego skryptu, w którym zmienna została zadeklarowana. Oznacza to, że zmiennych tymczasowych nie można przekazywać między skryptami wtyczki i usługi. Między tymi rodzajami skryptów można przekazywać tylko zmienne globalne, zmienne kontekstowe oraz elementy obszaru danych.
Deklarowanie/inicjowanie/ustawianie wartości domyślnych zmiennych tymczasowych
Zmienną tymczasową należy zadeklarować lub zainicjować odpowiednią wartością przed jej użyciem. Typową metodą deklarowania zmiennej jest przykładowo przeniesienie do niej danych za pośrednictwem instrukcji move.
move "0" to $index;
W przypadku skryptów APB, jak wspominano wyżej, zmienne tymczasowe można przekazywać z jednego skryptu APB do drugiego. W związku z tym często odwołuje się do zmiennej tymczasowej w skrypcie APB, która powinna być zainicjowana w poprzednim skrypcie APB. Jeśli jednak z jakiejkolwiek przyczyny zmienna tymczasowa nie została zainicjowana w poprzednim skrypcie APB, odwołanie do niej spowoduje wystąpienie błędu. Dobrym nawykiem jest używanie instrukcji default, która będzie inicjować zmienne tymczasowe jeszcze nie utworzone lub nie zainicjowane.
-
Następująca instrukcja spowoduje zainicjowanie zmiennej tymczasowej $InputAction, ale tylko jeśli zmienna tymczasowa nie została jeszcze zainicjowana:
default $InputAction;
-
Poniższa instrukcja spowoduje ustawienie wartości zmiennej tymczasowej $InputAction na "read", ale tylko jeśli zmienna nie została jeszcze zainicjowana:
default $InputAction as 'read';
Słowo kluczowe |
---|
add |
as |
asError |
bpa |
branch |
data |
declareBO |
declareBS |
declareDA |
declareMap |
declareSS |
default |
delete |
edit |
element |
else |
end-edit |
end-for |
end-if |
error |
escape |
evaluate |
fastAdd |
fastUpdate |
for |
goto |
if |
in |
invokeBO |
invokeBS |
invokeMap |
invokeSS |
label |
map |
move |
navigate |
navigateAndReloadDashboard |
null |
page |
performScript |
popup |
read |
readWithoutVersion |
replace |
suppress |
target |
terminate |
to |
transferControl |
update |
using |
warn |
with |
Zmienne kontekstowe
Zmienne kontekstowe są dostępne tylko w skryptach usługi. Zmienna kontekstowa jest dostępna tylko przez czas wykonywania skryptu usługi i wszystkich wywoływanych przez niego elementów. W związku z tym można używać zmiennej kontekstowej w skrypcie usługi, aby przekazywać informacje do skryptu usługi niższego poziomu lub schematu. Należy przed nimi umieścić podwójny znak dolara ("$$").
Deklarowanie/inicjowanie/ustawianie wartości domyślnych zmiennych kontekstowych
Zmienną kontekstową należy zadeklarować lub zainicjować odpowiednią wartością przed jej użyciem. Typową metodą deklarowania zmiennej jest przykładowo przeniesienie do niej danych za pośrednictwem instrukcji move.
move 'context variable' to $$contextVariable;
Instrukcja "move"
Instrukcja move umożliwia skopiowanie wartości źródłowej do celu. W poniższej tabeli przedstawiono różne opcje obsługiwane przez instrukcję move.
Instrukcja | Opis przykładu | Składnia przykładu |
---|---|---|
Przenoszenie do elementu move "xpath" to "xpath"; Uwaga: Wyrażenie XPath jest ujęte w podwójne cudzysłowy.
|
Instrukcja move z prostym odwołaniem XPath. |
|
Instrukcja move z funkcją łączenia XPath. |
|
|
Instrukcja move z funkcją substring-before XPath. |
|
|
Instrukcja move z funkcją substring-after XPath. |
|
|
Instrukcja move z funkcją substring XPath. |
|
|
Przenoszenie do elementu move 'literal' to "xpath"; Uwaga: Wartość literału jest ujmowana w pojedyncze cudzysłowy.
|
Instrukcja move z ciągiem literałowym. |
|
Przenoszenie do elementu move 'Boolean' to "xpath"; |
Instrukcja move z wartością logiczną jako ciągiem literałowym. |
|
Przenoszenie wyrażenia, które zwraca wartość logiczną. Należy pamiętać, że filtr w poniższym przykładzie jest w węźle grupy. |
|
|
Przenoszenie do grupy move "xpath" to "xpath"; |
Przenoszenie zestawu elementów z jednej grupy do drugiej. System dopasowuje początkowy poziom nazw elementów i nazw grup/list ze schematu źródłowego do schematu docelowego. W przypadku list i grup domyślnym zachowaniem jest przenoszenie wszystkich elementów w obrębie grupy/listy źródłowej do grupy/listy docelowej (nawet jeśli nie zostały one zdefiniowane w grupie/na liście docelowej). Do bardziej szczegółowej kontroli przenoszenia (bez konieczności definiowania poszczególnych instrukcji przenoszenia) może zostać użyta usługa biznesowa F1-MoveByName. |
Ta instrukcja jest odpowiednikiem następujących instrukcji:
|
Przenoszenie przy użyciu zmiennej tymczasowej |
Przenosząc do lokalnej zmiennej tymczasowej, nie ujmuje się jej w podwójne cudzysłowy. move "xpath" to $variable; |
|
Przenosząc ze zmiennej tymczasowej, zmienną ujmuje się w podwójne cudzysłowy. move "$variable" to "xpath"; |
|
|
Przenoszenie przy użyciu zmiennej kontekstowej move "xpath" to $$variable; move $$variable to "xpath"; |
Odwołań do zmiennych kontekstowych, źródłowych lub docelowych, nie ujmuje się w podwójne cudzysłowy. |
|
Przenoszenie przy użyciu dynamicznej lokalizacji move "xpath" | 'literal' to evaluate("xpath" | $variable); move evaluate("xpath" | $variable) to "xpath" | $variable; |
Instrukcja evaluate umożliwia dynamiczne wyznaczanie lokalizacji źródłowej lub docelowej instrukcji move na podstawie zmiennej lub lokalizacji elementu schematu. |
|
Przenoszenie z funkcją escape move escape("xpath" | $variable) to "xpath" | $variable; |
Funkcji escape można używać w instrukcji move tylko w przypadku skryptów usługi i wtyczki. Funkcja escape umożliwia skanowanie źródłowej wartości tekstowej w poszukiwaniu zawartości HTML i wstawia przed nią znak zmiany znaczenia, tj. zmienia wszelkie znaki HTML na znaki specjalne, które nie będą renderowane jako kod HTML. W ten sposób tekst będzie wyświetlany jako zwykły tekst, gdy będzie wyświetlany jako część elementu HTML. Uwaga: Tej funkcji należy używać tylko, jeśli tekst ma być wyświetlany w elemencie HTML i może zawierać znaki HTML lub nawet złośliwy kod HTML, który nie powinien być renderowany jako kod HTML. Jeśli znaki specjalne zmiany znaczenia są wyświetlane niepoprawnie przy użyciu elementu bez renderowania kodu HTML, będą widoczne jako część tekstu. Więcej informacji o definiowaniu elementów do wyświetlania zawartości HTML można znaleźć w sekcji Atrybuty i funkcje odwzorowania interfejsu użytkownika.
|
|
Przenoszenie wartości null move null to "xpath"; |
Możliwe jest usuwanie informacji z dokumentu wystąpienia XML za pomocą specjalnej składni instrukcji move 'null'. Należy pamiętać, że można określić albo nazwę węzła w wyrażeniu XPath, albo nazwę grupy. W przypadku określenia grupy, grupa i wszystkie jej elementy podrzędne zostaną wykluczone z przetwarzania. |
Usuwanie węzła i wszystkich jego węzłów podrzędnych:
Wszystkie węzły podrzędne węzła grupy można usunąć za pomocą przyrostka "/*".
|
Instrukcja "go to"
Krok edycji danych umożliwia korzystanie z funkcji podobnej do typu kroku Przechodzenie do. Składnia jest następująca: goto etykieta;, gdzie etykieta reprezentuje inną lokalizację w polu tekstowym edycji danych (identyfikowaną przez tę etykietę) lub reprezentuje inny krok w tym skrypcie.
Poniżej przedstawiono przykład przechodzenia do innej lokalizacji w tym samym kroku określanej przez etykietę addSpouse.
if ("string(parm/spouse/name) != $BLANK")
goto addSpouse;
end-if;
addSpouse: invokeBO 'Person' using "parm/spouse" for add;
W tym przykładzie przedstawiono przechodzenie do innego kroku wewnątrz tego samego skryptu. Liczba porządkowa kroku jest odwołaniem używanym jako etykieta.
if ("string(parm/spouse/name) != $BLANK")
goto 110;
end-if;
.
.
.
110: invokeBO 'Person' using "parm/spouse" for add;
Instrukcja "conditional branch"
Krok edycji danych umożliwia korzystanie z funkcji podobnej do typu kroku Przechodzenie warunkowe. Składania jest następująca branch ("xpath") goto etykieta else etykieta;, gdzie:
-
Warunek XPath w instrukcji branch musi mieć wartość logiczną prawda lub fałsz.
-
Celami instrukcji goto i else są etykiety reprezentujące inną lokalizację w polu tekstowym edycji danych (identyfikowaną przez tę etykietę) lub reprezentujące inny krok w tym skrypcie.
W poniższym przykładzie użyto etykiet addSpouse i addAccount
branch ("string(parm/spouse/name) != $BLANK") goto addSpouse else addAccount;
Instrukcja "if"
Instrukcja if jest podobna do instrukcji "conditional branch". Można ich używać do tworzenia wyborów logicznych w skrypcie. Ta instrukcja może opcjonalnie zawierać instrukcję else, ale powinna zawsze się kończyć instrukcją end-if.
Składnia jest następująca: if ("xpath") else end-if;. Warunek XPath musi mieć wartość logiczną prawda lub fałsz. Poniżej przedstawiono kilka przykładów.
Przykład, w którym ścieżka XPath zawiera prosty warunek logiczny.
if ("string(parm/spouse/name) != $BLANK")
//
// Create spouse since spouse name present
goto addSpouse;
else
//
// Create account without spouse
goto addAccount;
end-if;
Przykład, w którym ścieżka XPath zawiera złożony warunek.
if ("string(parm/spouse/name) != $BLANK and string(parm/hasSpouse) = true or boolean(parm/requireSpouse)")
//
// Create spouse since spouse name present
goto addSpouse;
end-if;
Przykład stosu zbioru instrukcji służącego do oceny wielu możliwych wartości pola.
if ("parm/rowCount = 0")
//
// no rows found
goto quit;
end-if;
if ("parm/rowCount = 1")
//
// one row found
goto process;
end-if;
if ("parm/rowCount > 1")
//
// more than one row found
goto quit;
end-if;
quit: terminate;
Następująca ścieżka XPath przedstawia wartość logiczną na podstawie informacji o tym, czy węzeł istnieje. W tym przykładzie, jeśli węzeł istnieje w przetwarzanym dokumencie wystąpienia XML, instrukcja zwróci wartość prawda. Jeśli żaden element nie zostanie znaleziony, instrukcja zwróci wartość fałsz.
if ("boolean(parm/spouse/name)")
goto addSpouse;
else
//
// Create account without spouse
goto addAccount;
end-if;
if ("not(parm/spouse/name)")
//
// Create account without spouse
goto addAccount;
else
goto addSpouse;
end-if;
Instrukcja "for"
Instrukcja for umożliwia tworzenie listy węzłów lub wartości w zależności od wyrażenia XPath. Jeśli zostanie określony węzeł listy, wtedy wszystkie węzły podrzędne tej listy, wraz z ich zawartością, będą dostępne wewnątrz tej pętli. W przypadku określenia bezpośrednio węzła podrzędnego wewnątrz pętli będzie dostępna tylko lista wartości.
Składnia jest następująca: for ($variable in "xpathList") end-for;. Warunek XPath musi mieć wartość logiczną prawda lub fałsz.
Następujące przykłady są oparte na tym prostym schemacie:
<schema>
<SAList type="list">
<id/>
<balance/>
</SAList>
<SAContributor type="list">
<id/>
</SAContributor>
</schema>
W tym przykładzie w wyrażeniu XPath określono węzeł listy, co powoduje że można przetwarzać wszystkie węzły podrzędne.
move "0" to $AccountBalance;
move "0" to $index;
for ($SAList in "SAList")
move "$SAList/balance + $AccountBalance" to $AccountBalance;
//
// keep track of each SA contributing to the balance in the SA Contributor list
move "1 + $index" to $index;
move "$SAList/id" to "SAContributor[$index]/id";
end-for;
Przykład, w którym w wyrażeniu XPath określono węzeł podrzędny z węzła listy. W takim przypadku można przetwarzać tylko wartości z tego węzła.
move "0" to $AccountBalance;
for ($SABalance in "SAList/balance")
move "$SABalance + $AccountBalance" to $AccountBalance;
end-for;
Przykład przedstawiający użycie filtra do ograniczenia liczby wybieranych wierszy na potrzeby pętli for.
move "0" to $AccountDebitBalance;
for ($SAList in "SAList[Balance>0]")
move "$SAList/balance + $AccountDebitBalance" to $AccountDebitBalance;
end-for;
Przykład przedstawiający użycie filtra w trakcie określania węzłów podrzędnych.
move "0" to $AccountCreditBalance;
for ($SABalance in "SAList[Balance<0]/balance")
move "$SABalance + $AccountCreditBalance" to $AccountCreditBalance;
end-for;
Przetwarzanie listy
W tej sekcji opisano szczegółowo przetwarzanie list. Przykłady użyte w tej sekcji odnoszą się do następującego schematu:
<schema>
<parm type="group">
<name/>
</parm>
<Person type="group">
<names type="list">
<type/>
<name/>
</names>
</Person>
</schema>
Odwoływanie się do elementu listy. Możliwe jest przeniesienie wartości do konkretnego wystąpienia listy, odwołując się w filtrze do identyfikującego węzła z listy. Składnia jest następująca: move "xpath" to "xpathList[filtr]/element"; Przykład:
move "parm/name" to "Person/names[type='main']/name";
Tworzenie nowego wystąpienia listy. Można użyć specjalnego zapisu w docelowej instrukcji move, aby wskazać, że konieczne jest utworzenie nowego wystąpienia listy. Znak "+" wskazuje procesorowi skryptu, że w odniesieniu do docelowego elementu należy zainicjować nowe wystąpienie listy. Składnia jest następująca: move "xpath" to "+xpathList"; Przykład:
move "parm/name" to "Person/+names/name";
Kasowanie wystąpienia listy. Wpis listy XML można skasować z bazy danych, przenosząc atrybut czynności "delete" do nazwy elementu. Aby spowodować skasowanie z bazy danych wpisu listy, wymagany jest atrybut action="delete" w węźle docelowym i kolejna aktualizacja interakcji obiektu biznesowego. Składania jest następująca: move 'delete' to "xpathList@action"); Przykład:
if ("parm/action = 'd'")
move "0" to $index;
for ($CCList in "CCList")
move "1 + $index" to $index;
if ("$CCList/id = parm/id")
move 'delete' to "CCList[$index]@action";
goto update;
end-if;
end-for;
end-if;
Poniżej przedstawiono wynikowy kod XML.
<root>
<CCList>
<id>9876538976</id>
<balance>309.98</balance>
</CCList>
<CCList action="delete">
<id>4321125899</id>
<balance>87.45</balance>
</CCList>
</root>
Funkcje służące do przetwarzania listy
Język XPath udostępnia kilka funkcji przydatnych do przetwarzania elementów listy, w tym count, sum i last.
Następujące przykłady są oparte na tym prostym dokumencie XML:
<xml>
<ft>
<type>bill</type>
<date>20100101</date>
<amt>30.30</amt>
<cat>tax</cat>
</ft>
<ft>
<type>adj</type>
<date>20100301</date>
<amt>20.20</amt>
<cat>int</cat>
</ft>
<ft>
<type>bill</type>
<date>20100201</date>
<amt>10.10</amt>
<cat>tax</cat>
</ft>
</xml>
Poniżej przedstawiono przykład funkcji sum. Składnia jest następująca move "sum(xpathList/element)" to $variable; Przykład przedstawia sumowanie łącznego salda.
move "sum(ft/amt)" to $TotalBalance;
Poniżej przedstawiono przykład funkcji sum wykorzystującej filtr w celu uzyskania sumy częściowej. W tym przykładzie sumowane są wpisy z kategorii "tax".
move "sum(ft[cat='tax']/amt)" to $TaxBalance;
Poniżej przedstawiono przykład funkcji count. Składania jest następująca: move "count(xpathList)" to $variable; W tym przykładzie znajdowana jest liczba wpisów FT na liście.
move "count(ft)" to $TranCount;
Poniżej przedstawiono przykład funkcji "last", która służy do znajdowania ostatniego wpisu. Składnia jest następująca: move "last(xpathList)" to $variable; W tym przykładzie znajdowana jest ostatnia kwota z listy FT.
move "ft[last()]/amt" to $LastAmount;
Deklarowanie i wywoływanie obiektów opartych na schemacie
W kroku "Edycja danych" można wywoływać obiekt biznesowy, usługę biznesową lub skrypt usługi. Aby umożliwić dynamiczne wywoływanie, można zadeklarować nazwę obszaru danych dynamicznych.
Deklarowanym schematem może być schemat obiektu biznesowego (OB), schemat usługi biznesowej (UB), schemat skryptu usługi (SU), schemat obszaru danych (OD) lub schemat odwzorowania interfejsu użytkownika. Instrukcja "declare" będzie się różnić w zależności od typu schematu, ale składnia jest podobna.
-
declareBO 'nazwa obiektu biznesowego' | $variable | "xpath" as 'DynamicDataArea';
-
declareBS "nazwa usługi biznesowej" | $variable | "xpath" as 'DynamicDataArea';
-
declareSS 'nazwa skryptu usługi' | $variable | "xpath" as 'DynamicDataArea';
-
declareDA 'nazwa obszaru danych' | $variable | "xpath" as 'DynamicDataArea';
-
declareMap 'nazwa odwzorowania' | $variable | "xpath" as 'DynamicDataArea';
Podczas wywoływania obiektu biznesowego, usługi biznesowej lub skryptu usługi nazwę obiektu można określić jako literał albo za pomocą wartości elementu lub zmiennej. Każde wywołanie musi zawierać odwołanie XPath do nazwy grupy.
W przypadku wywoływania obiektu biznesowego należy określić czynność. Składnia jest następująca: invokeBO 'nazwa obiektu biznesowego' | $variable | "xpath" używając "xpath" dla czynności;. Poniżej podano poprawne czynności:
-
read. Ta czynność umożliwia odczytanie bieżącego widoku danych obiektu biznesowego.
-
add. Ta czynność spowoduje dodanie obiektu oraz wczytanie i zwrócenie wynikowego widoku obiektu biznesowego.
-
fastAdd. Ta czynność spowoduje dodanie obiektu, ale nie powoduje wykonania kolejnej czynności "read" w celu zwrócenia wynikowego widoku obiektu biznesowego. Opcja ta jest lepsza niż czynność "add" pod względem wydajności, jeżeli nie ma powodu do ponownego odczytania nagrania.
-
update. Ta czynność spowoduje zaktualizowanie obiektu oraz wczytanie i zwrócenie wynikowego widoku obiektu biznesowego. Ta czynność spowoduje wykonanie funkcji "merge" na informacjach określonych w dokumencie XML żądania instrukcji "invoke" z istniejącymi danymi obiektu biznesowego. Użycie tej czynności pozwala skryptowi na wskazywanie tylko elementów, które się zmieniają.
-
fastUpdate. Ta czynność spowoduje zaktualizowanie obiektu, ale nie powoduje wykonania kolejnej czynności "read" w celu zwrócenia wynikowego widoku obiektu biznesowego. Opcja ta jest lepsza niż czynność "update" pod względem wydajności, jeżeli nie ma powodu do ponownego odczytania nagrania.
-
delete. Ta czynność umożliwia skasowanie obiektu.
-
replace. Ta czynność jest zamiennikiem czynności "update". Czynność "replace" całkowicie zastępuje istniejące dane obiektu biznesowego informacjami z dokumentu żądania. Zwykle czynność "replace" jest używana, gdy obiekt biznesowy zawiera listę, ponieważ łatwiej jest zastąpić wszystkie wystąpienia listy niż podejmować próbę scalenia listy, co wymaga specjalnej logiki do jawnego skasowania wystąpienia listy.
Uwaga: Czynności "replace" należy używać w przypadku funkcji odwzorowania interfejsu użytkownika na potrzeby ładowania pliku CSV.Uwaga: Czynność "replace" nie jest obecnie obsługiwana w przypadku obiektów obsługi, które są obsługiwane na "stałej" stronie wykorzystującej metaforę listy do jednoczesnego wyświetlania wszystkich rekordów na stronie. Przykładem strony tego typu jest "Waluta".
Przykłady:
invokeBO 'BusinessObject' using "dataArea" for fastAdd;
invokeBO $variableBO using "dataArea" for fastUpdate;
invokeBO "daName/boElement" using "dataArea" for replace;
Składnia instrukcji "invoke" jest podobna dla usługi biznesowej i skryptu usługi. Usługa biznesowa/skrypt usługi są określane wraz z odwołaniem XPath do nazwy grupy:
-
invokeBS 'nazwa usługi biznesowej' | $variable | "xpath" using "xpath";
-
invokeSS 'nazwa skryptu usługi' | $variable | "xpath" using "xpath";
W przykładach użyto instrukcji invokeBS, ale instrukcje są podobne do instrukcji invokeSS.
invokeBS 'BusinessService' using "dataArea";
invokeBS $variableBS using "dataArea";
invokeBS "daName/bsElement" using "dataArea";
Ostrzeżenia obiektu biznesowego. Należy pamiętać, że w przypadku skryptów APB instrukcje invoke mogą też wskazywać sposób obsługi ostrzeżeń.
Składnia | Opis | Przykłady |
---|---|---|
with warn asError |
Umożliwia wskazywanie, że ostrzeżenia powinny być traktowane jako błąd wyświetlany w odwzorowaniu interfejsu użytkownika. Tekst asError jest opcjonalny. |
|
with warn popup |
Umożliwia wskazywanie, że ostrzeżenia powinny być przedstawiane w standardowym okienku framework. W tym scenariuszu użytkownikowi wyświetlane są standardowe przyciski OK i Anuluj. Naciśnięcie przycisku OK oznacza kontynuację procesu. Naciśnięcie przycisku Anuluj oznacza przerwanie procesu. Jest to zalecane ustawienie. |
|
with warn suppress |
Umożliwia wskazywanie, że ostrzeżenia powinny być pomijane. To jest ustawienie domyślne, jeśli składnia bez ostrzeżenia zostanie dodana do instrukcji invoke. |
|
W przypadku skryptów APB należy również użyć logiki stosowanej po wywołaniu do obsługi błędów i ostrzeżeń (w przypadku użycia składni with warn as popup). Jeśli użytkownik kliknął przycisk "Anuluj" w wyskakującym ostrzeżeniu, w zmiennej systemowej $WARNING jest ustawiana wartość true. Jeśli wyświetlono odwzorowanie, logika powinna ponownie wyświetlić odwzorowanie (w którym powinien zostać ponownie wyświetlony komunikat ostrzegawczy). Umożliwia to użytkownikowi wprowadzenie ewentualnych zmian i ponowne zapisanie. Jeśli przed ostrzeżeniem nie wyświetlono odwzorowania, powinno nastąpić zakończenie przetwarzania logiki.
Zmienna systemowa $ERROR wskazuje, że wystąpił błąd. Jeśli przed błędem wyświetlono odwzorowanie, logika powinna ponownie wyświetlić odwzorowanie, w którym będzie widoczny błąd. Jeśli nie wyświetlono odwzorowania, w produkcie udostępniono skrypt APB F1–HandleErr, którego należy użyć do wyświetlenia błędu. Poniżej przedstawiono przykład typowej logiki obsługi błędu.
invokeBO "F1-DetermineBo/output/bo" using "boSchema" for update with warn popup;
if ("$WARNING")
if ("map_schema/action = 'DEL'")
terminate;
else
goto maintMap;
end-if;
end-if;
if ("$ERROR")
if ("map_schema/action != 'DEL'")
goto maintMap;
else
transferControl 'F1-HandleErr';
end-if;
end-if;
Zmienne systemowe i globalne
W poniższych tabelach przedstawiono zmienne systemowe i globalne, których można używać w skryptach.
Zmienne systemowe - wszystkie typy skryptów
Poniższych zmiennych systemowych można używać we wszystkich typach skryptów (skrypty usługi, skrypty wtyczki i skrypty APB).
Zmienna | Opis | Przykład |
---|---|---|
$BLANK | Reprezentuje pusty węzeł. |
|
$CURRENT-DATE | Reprezentuje bieżącą datę. W przypadku skryptów APB jest to data przeglądarki. W przypadku skryptów po stronie serwera jest to data serwera(i wpływa na nią logika nadpisania daty systemowej). |
|
$CURRENT-STD-DTTM | Reprezentuje bieżącą datę i godzinę wyrażone w czasie standardowym (tj. bez żadnych opłat dodatkowych wynikających z czasu letniego/zimowego). |
|
$DEVICE-OS | Reprezentuje system operacyjny urządzenia użytkownika. |
|
$DEVICE-BROWSER | Reprezentuje przeglądarkę urządzenia użytkownika. |
|
$DEVICE-DISPLAY-TYPE | Reprezentuje typ wyświetlacza urządzenia użytkownika, tj. czy jest rozmiaru stacjonarnego, średniego, czy małego. Zwracanymi wartościami mogą być oraDesktop, oraTablet i oraPhone. |
|
$DEVICE-INFO | Umożliwia uzyskanie dostępu do wszystkich trzech właściwości urządzenia (DEVICE-OS, DEVICE-BROWSER i DEVICE-DISPLAY-TYPE). Każda wartość właściwości jest rozdzielona średnikiem. |
|
Zmienne systemowe - tylko skrypty APB
Poniższe zmienne systemowe są dostępne / dotyczą tylko skryptów APB.
Zmienna | Opis | Przykład |
---|---|---|
$DOUBLE_QUOTE | Reprezentuje podwójny cudzysłów. |
|
$SINGLE_QUOTE | Reprezentuje apostrof. |
|
$SPACE | Zawiera pojedynczą spację. |
|
$SYSTEM-DATE | Reprezentuje datę serwera. Należy pamiętać, że na datę wpływa logika nadpisania daty systemowej. |
|
Zmienne systemowe - tylko skrypty serwera
Poniższe zmienne systemowe są dostępne / dotyczą tylko skryptów usługi i skryptów wtyczki.
Zmienna | Opis | Przykład |
---|---|---|
$ADDITIONAL-IP-INFO | Żądanie HTTP zawiera pole nagłówka "Dodatkowy adres IP". Może być wypełnione przez wdrożenie, jeśli dostępne są jakieś informacje o serwerze proxy lub moduł równoważenia obciążenia, np. początkowy adres IP. |
|
$CURRENT-DTTM | Reprezentuje bieżącą datę i godzinę. |
|
$F1-INSTALLATION-TIMEZONE | Reprezentuje kod strefy czasowej zdefiniowany w opcjach instalacji. |
|
$LANGUAGE | Reprezentuje kod języka wykorzystywany przez skrypt. Zwykle jest to domyślny język użytkownika. |
|
$PROCESS-DATE | Reprezentuje datę procesu. Data procesu różni się od bieżącej daty, ponieważ data procesu jest stała w całym czasie wykonywania procesu. Na przykład, jeżeli skrypt usługi zapisze kilka obiektów biznesowych - data procesu jest inicjowana na początku wykonywania skryptu usługi, a każdy obiekt biznesowy będzie mieć domyślnie tę samą datę procesu. Bieżąca data, szczególnie bieżąca dat i godzina, będą odzwierciedlać rzeczywistą godzinę przetworzenia. |
|
$PROCESS-DTTM | Reprezentuje datę i godzinę procesu. Należy pamiętać, że data i godzina procesu są inicjowane na początku konkretnego procesu i nie będą odzwierciedlać dokładnej daty i godziny aktualizacji. |
|
$REQUESTING-IP-ADDRESS | Reprezentuje adres IP z żądania HTTP. Należy pamiętać, że jeżeli żądanie jest przekazywane przez serwer proxy lub moduł równoważenia obciążenia, ten adres IP będzie adresem IP serwera proxy lub modułu równoważenia obciążenia, a nie adresem IP użytkownika. Więcej informacji można znaleźć w opisie zmiennej $ADDITIONAL-IP-INFO. |
|
$USER | Reprezentuje identyfikator użytkownika wykonującego skrypt. |
Informacje na temat skryptów APB, które muszą znać ID bieżącego użytkownika, znajdują się w sekcji Przydatne wskazówki i porady. |
Zmienne globalne
Skrypty APB i skrypty usługi mają dostęp do wartości definiowanych w zmiennych kontekstowych.
Po uruchomieniu skryptu APB z interfejsu użytkownika te zmienne są inicjowane automatycznie. Można się do nich odwoływać, umieszczając jeden znak dolara przed nazwą pola. Na przykład, jeśli PER_ID jest obsługiwaną zmienną globalną, wtedy w skrypcie APB można użyć odwołania $PER_ID:
move "$PER_ID" to "schema/customerId";
W przypadku skryptów usługi do zmiennych globalnych można się odwoływać, tylko jeśli skrypt usługi został wywołany bezpośrednio ze skryptu APB lub strefy w portalu. Jeśli skrypt usługi zostanie wywołany ze skryptu APB lub strefy portalu, będzie mieć dostęp do zestawu globalnych zmiennych kontekstowych wypełnionych w sesji interfejsu użytkownika. W przypadku tworzenia skryptów usługi pola globalne należy poprzedzić dwoma znakami dolara (zamiast jednego jak w skryptach BPA). Na przykład, jeśli PER_ID jest obsługiwaną globalną zmienną kontekstową, wtedy w skrypcie usługi można użyć odwołania $$PER_ID:
move $$PER_ID to "schema/customerId";
Wykonywanie skryptu i instrukcje przekazywania sterowania
Krok edycji danych umożliwia korzystanie z funkcji podobnej do typu kroku Wykonywanie skryptu i Przekazywanie sterowania. Dotyczy to tylko skryptów APB.
Składnia | Poprawne wartości | Komentarze |
---|---|---|
performScript |
"Nazwa skryptu APB" | Jawne zadeklarowanie skryptu do wykonania. |
$Zmienna | Skrypt do wykonania jest określany za pomocą zmiennej. | |
"XPath" | Skrypt do wykonania jest określany za pomocą odwołania do ścieżki XPath w elemencie. | |
transferControl |
Analogiczne do instrukcji performScript |
Deklarowanie obiektu biznesowego z grupą obiektu biznesowego
Ta instrukcja jest przeznaczona do skryptów APB, w których ma być używany skrypt podstawowy przetwarzania obsługi głównego obiektu biznesowego (F1–MainProc) na potrzeby instrukcji "generate edit map". Skrypt oczekuje, że dane używane do wyświetlania w odwzorowaniu jest w znaczniku boGroup.
Składnia | Poprawne wartości | Komentarze |
---|---|---|
declareBOWithBOGroup |
"Nazwa OB" | Jawne zadeklarowanie obiektu biznesowego. |
$Zmienna | Obiekt biznesowy jest określany za pomocą zmiennej. | |
"XPath" | Obiekt biznesowy jest określany za pomocą odwołania do ścieżki XPath w elemencie. |
W poniższej tabeli przedstawiono informacje dotyczące składni tej instrukcji.
Składnia | Poprawne wartości |
---|---|
as |
"Nazwa dynamicznego schematu" |
Przykłady:
declareBOWithBOGroup 'BusinessObject' as 'newMapSchema';
declareBOWithBOGroup $variableBO as 'newMapSchema';
declareBOWithBOGroup "daName/boElement" as 'newMapSchema';
Instrukcja "invoke map"
Krok edycji danych umożliwia korzystanie z funkcji podobnej do typu kroku Wywoływanie odwzorowania. Dotyczy to tylko skryptów APB.
Składnia | Poprawne wartości | Komentarze |
---|---|---|
invokeMap |
"Nazwa odwzorowania" | Jawne zadeklarowanie odwzorowania interfejsu użytkownika. |
$Zmienna | Odwzorowanie interfejsu użytkownika jest określane za pomocą zmiennej. | |
"XPath" | Odwzorowanie interfejsu użytkownika jest określane za pomocą odwołania do ścieżki XPath w elemencie. |
W poniższej tabeli przedstawiono informacje dotyczące składni tej instrukcji.
Składnia | Poprawne wartości | Komentarze |
---|---|---|
using |
"Nazwa grupy obszaru danych" | Wskazuje obszar danych, który ma być przekazywany do i z serwera podczas wyświetlania formularza HTML powiązanego z odwzorowania. |
target |
bpa |
|
page |
||
popup |
Więcej informacji o wartościach celu można znaleźć w sekcji typu kroku Wywoływanie odwzorowania.
Jeśli odwzorowanie interfejsu użytkownika ma zwracać wartość, może być szacowane przy użyciu zmiennej $MAP-VALUE.
invokeMap 'UI Map' using "dataArea";
invokeMap $variableMap using "dataArea";
invokeMap "daName/mapElement" using "dataArea" target bpa;
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
goto 300;
else
terminate;
end if;
Instrukcje "generate edit map"
Instrukcje 'generate edit map' służą do dynamicznego generowania i uruchamiania odwzorowań edycji interfejsu użytkownika na podstawie definicji schematu. Może być używany schemat obiektu biznesowego, schemat usługi biznesowej, schemat skryptu usługi lub schemat obszaru danych. Dotyczy to tylko skryptów APB. Instrukcja "generate" będzie się różnić w zależności od typu schematu, ale składnia jest podobna.
Składnia |
---|
generateBOEditMap |
generateBSEditMap |
generateSSEditMap |
generateDAEditMap |
Kod obiektu biznesowego/kod usługi biznesowej/kod skryptu usługi/kod obszaru danych można określać za pomocą literału (ujętego w pojedyncze cudzysłowy), jako zmienną tymczasową lub odwołując się do lokalizacji schematu XPath (ujętej w podwójne cudzysłowy).
W poniższej tabeli przedstawiono informacje dotyczące składni tej instrukcji.
Składnia | Poprawne wartości | Komentarze |
---|---|---|
using |
"Nazwa grupy obszaru danych" | Wskazuje obszar danych, który ma być przekazywany do i z serwera podczas wyświetlania formularza HTML powiązanego z odwzorowania. |
target |
bpa |
|
page |
||
popup |
Wartości docelowe wskazują, gdzie generowane odwzorowanie ma być wyświetlane zgodnie z opisem w sekcji typu kroku Wywoływanie odwzorowania. Jeśli odwzorowanie interfejsu użytkownika ma zwracać wartość, może być szacowane przy użyciu zmiennej $MAP-VALUE.
W przykładach użyto instrukcji generateBOEditMap, ale instrukcje są podobne w innych typach schematów.
generateBOEditMap 'BO Name' using "dataArea";
generateBOEditMap $variableMap using "dataArea";
generateBOEditMap "daName/mapElement" using "dataArea" target bpa;
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
goto 300;
else
terminate;
end if;
Instrukcja "terminate"
Krok edycji danych umożliwia korzystanie z funkcji podobnej do typu kroku Zakończenie.
Poniżej przedstawiono przykład prostego kroku Zakończenie, który spowoduje zatrzymanie skryptu.
if ("not(parm/spouse/name)")
terminate;
else
goto addSpouse;
end-if;
Instrukcja terminate with error jest dostępna tylko w skrypcie usługi.
Składnia | Atrybuty | Komentarze |
---|---|---|
terminate with error (x, y %n= element= ) |
"x" reprezentuje kategorię komunikatu | Wymagane. |
"y" reprezentuje numer komunikatu | Wymagane. | |
%n="Element XPath" lub %n="literał" | Należy określić parametry zamienne obsługiwane przez komunikat, używając wartości literałowych lub odwołań XPath. Jeśli wartość do zastąpienia jest elementem listy, należy użyć XPath elementu z listy zakwalifikowanej przez wystąpienie listy. | |
element="Element XPath" lub element=$variable | Opcjonalnie można określić nazwę elementu w odwzorowaniu interfejsu użytkownika do wyróżnienia jako część błędu. Jeśli błędny element znajduje się na liście, należy użyć XPath elementu z listy zakwalifikowanej przez wystąpienie listy. |
Przykład pola prostego:
if ("string(customer/lastName) = $BLANK")
terminate with error (8000, 1001 %1="customer/lastName" %2='Last name required' element='customer/lastName');
end-if;
Przykład zakończenia, gdy element do oznaczenia znajduje się na liście:
for ($list in "parm/hard/newBusinessObject/listName")
if //** check some condition for elementName
terminate with error (11000, 11000 %1="$list/elementName" element='$list/elementName');
end-if;
end-for;
Wywoływanie kodu Groovy
Jeśli istnieje skrypt wtyczki lub skrypt usługi, który zawiera zarówno skrypty XPath, jak i skrypty Groovy, w kroku Edycja danych obsługiwana jest możliwość wywoływania kodu Groovy przy użyciu składni invokeGroovy 'method'; gdzie "method" to nazwa metody zdefiniowana w kroku Elementy Groovy w ramach skryptu. W ten sposób można wywoływać tylko metody, które nie otrzymują argumentów i zwracają puste wartości. Natomiast metoda wywołana z kroku edycji danych może być obsługiwana przez dodatkowy kod Groovy w innych typach kroku Elementy Groovy.
Przykładowy krok Edycja danych:
invokeGroovy 'invoke';
Przykładowy krok Elementy Groovy:
void invoke() {
initParms()
readBO()
initConfig()
retrieve()
updateBO()
}
Debugowanie skryptu APB
Jeśli skrypt APB ma wysokość większą niż zero, wtedy zaznaczone węzły obszaru danych skryptu można wyświetlać w czasie wykonywania. Dane XML są wyświetlane w trakcie wykonywania skryptu wewnątrz obszaru wyświetlania skryptu APB. Należy określić ścieżkę XPath węzła XML z dowolnego obszaru danych skryptu APB między parą znaków: "%+" i "+%".
Na przykład całą zawartość węzła grupy schematu o nazwie "input" i konkretna zawartość elementu schematu o nazwie "output/status" będą wyświetlane w obszarze wyświetlania skryptu APB. Tekst debugowania należy wprowadzić w obszarze tekstu skryptu APB, a nie w polu edycji danych skryptu. Tekst debugowania można deklarować dla dowolnego jawnego kroku skryptu.
display input: %+input+% , and output status: %+output/status+%
Przydatne wskazówki i porady
W tej sekcji przedstawiono kilka sugestii dotyczących sposobu wdrażania często stosowanej logiki.
Wyszukiwanie zalogowanego użytkownika w APB
W przypadku skryptów serwerowych zmienna $USER jest wypełniana danymi aktualnie zalogowanego użytkownika. Ta zmienna jest niedostępna dla skryptów APB. W razie potrzeby APB może wywołać skrypt usługi F1-GetUser.
Zgłaszanie błędu przez skrypt APB
W przypadku skryptów serwerowych należy użyć instrukcji terminate with error w celu zwrócenia komunikatu o błędzie wyświetlanego użytkownikowi. APB może wyświetlić ten błąd, przekazując kontrolę do F1-HandleErr zgodnie z opisem w sekcji Deklarowanie i wywoływanie obiektów opartych na schemacie. Nie jest to obsługiwane w przypadku skryptu APB. Techniką dostępną dla APB w celu zgłaszania błędu jest wywołanie usługi biznesowej F1-RethrowError z przekazaniem szczegółów błędu. Ta usługa biznesowa służy do wypełniania odpowiednich pól błędów systemowych wymaganych do zgłoszenia błędu. Następnie należy przekazać kontrolę do F1-HandleErr.
if ("string($assignedToUser) != string(F1-GetUser/user)")
declareBS 'F1-RethrowError' as 'errorMsg';
move '11010' to "errorMsg/messageCategory";
move '11511' to "errorMsg/messageNumber";
move "$toDoEntryId" to "errorMsg/messageParameters/+parameters/parameterValue";
invokeBS 'F1-RethrowError' using "errorMsg";
transferControl 'F1-HandleErr';
end-if;