API Walidatorów skryptowych
Przykładowy kod walidatora
Poniżej znajduje się przykładowy kod, który pokazuje w jaki sposób można korzystać z wejścia oraz jak należy zwrócić dane:
function callService(context) {
let input1 = context.getFirstParameter("input1");
if (input1 === "api") {
return [{
'key': 'pl.error',
'parameters': [input1, "parametr {0} jest błędny"]
}
];
} else if (input1 != null && input1 !== "") {
return [{
'key': 'pl.error',
'parameters': [input1, "inny hardcode parameter"]
}];
} else {
return [];
}
}Wejście do walidatora skryptowego
Jako wejście (parametr context w powyższym kodzie) znajduje się obiekt, który udostępnia następujące metody:
List<String> getParameters(final String name) - pobiera konkretną listę z mapy danych wejściowych,
String getFirstParameter(final String name) - pobiera pierwszy element z konkretnej listy z mapy danych wejściowych lub zwraca wartość "null",
String getFirstParameter(final String name, final String defaultIfEmpty) - pobiera pierwszy element z konkretnej listy z mapy danych wejściowych, a jeśli go nie ma lub jest pusty to zwraca wartość "defaultIfEmpty",
Map<String, List<String>> getInputParameters() - zwraca całą mapę danych wejściowych, którą przechowuje,
String isVisible(final String id) - pobiera informację, czy komponent o wskazanym id jest widoczny,
String getValue(final String id) - pobiera wartość komponentu (również zmiennej sesyjnej) o wskazanym id,
String getData(final String id, final String attribute) - pobiera wartość konkretnego atrybutu dla komponentu o wskazanym id (UWAGA! Możliwe do pobrania atrybuty są zależne od komponentu),
List<Map<String, String>> callService(String name, Map<String, List<String>> input) - umożliwia wołanie ServiceProxy,
ValidatorOutput validate(String name, Map<String, List<String>> input) - umożliwia wołanie walidatora,
Przykład pobrania listy (np. dla pól w sekcji powtarzalnej):
function callService(context) {
let inputFromRepeatableSection = context.getParameters("inputFromRepeatableSection").toArray();
}Wyjście z walidatora
Lista map: tablica obiektów zawierających pola "key" oraz "parameters".
Opcjonalne pola:
type - typ walidatora domyślnie ustawiony jest INLINE, inna opcja to POPUP,
parameters - zmienne które możemy wysłać do komunikatu walidacyjnego skryptu
attributes - np. atrybuty POPUPa dodający przycisk 'dalej' oraz zmieniający np. wartość komponentu po naciśnięciu 'dalej':
return [{
'key': 'pl.errorPopup',
'parameters': [input, 'Podana wartość jest błędna'],
'type': 'POPUP',
'attributes': {
'componentUpdateId': componentID,
'componentUpdateValue':'ziemniak'
}
}];np. atrybuty dla walidacji wiersza GesTable:
Przykładowa walidacja typu INLINE - wiersze GesTable
return [{
'key': 'pl.errorGesTable',
'parameters': [input, 'Podana wartość jest błędna'],
'type': 'INLINE',
'attributes': {
'colName': 'nazwaKolumny',
'rowId':id
}
}];Logowanie
Logowanie danych wejściowych jest automatyczne.
Logowanie ręczne powinno być zgodne z opisem w Logowanie w ScriptCode
Rzucanie wyjątków biznesowych
Istnieje możliwość rzucenia wyjątku biznesowego z poziomu skryptu. Przykładowy kod:
function callService(context) {
let firstArgument = context.getFirstParameter('firstArgument');
let builder = context.getErrorPageDefinitionBuilder();
builder.bodyTextContent("textContentName-*"); // komponent Treść (TextContent) jako strona błędu
builder.logobarTitleKey("form.title"); // Treść górnej belki (jeśli występuje)
context.throwBusinessException(builder);
...
}Możliwe metody, które można wywołać na obiekcie 'context':
context.getErrorPageDefinitionBuilder()
.body(string)
.styleName(string);
.msg(string)
.pageTitle(string)
.pageTitleKey(string)
.sidebarSlot2TextContent(string);
.sidebarSlot2(string);
.sidebarSlot1TextContent(string);
.sidebarSlot1(string);
.retryButtonAvailable(string)
.retryButtonAvailable(boolean);
.logobarTitle(string);
.logobarTitleKey(string)
.logobarDescription(string);
.bodyTextContent(string);
.parameter(String key, String value)
.cause(Throwable cause)
.redirectUrl(string)
.redirectDelayInMillis(string)
.businessFormIdentifier(string)Uwaga: na tym obiekcie nie należy wywoływać metody build() !!!
Last updated
Was this helpful?
