Skip to main content

Skrypty formularza

Typy Skryptów

W narzędziu docuRob®eForms występują dwa rodzaje skryptów formularza:

  • Skrypty przygotowania formularza – uruchamiane w module wypełniania formularzy przed wyświetleniem formularza użytkownikowi, umożliwia przeprowadzenie inicjalizacji formularza zanim użytkownik przystąpi do wypełniania lub przeglądania formularza.
  • Skrypty weryfikacji danych formularza – uruchamiane w module wypełniania formularzy po wybraniu przez użytkownika operacji zapisania danych formularza, umożliwia wykonanie kompleksowej weryfikacji danych wprowadzonych przez użytkownika.

Edytor Skryptów

Edytor skryptów jest częścią składową edytora formularzy otwieraną przy użyciu przycisku dostępnego na pasku narzędziowym okna formularza. Edytor skryptów umożliwia definiowanie skryptów przygotowania i weryfikacji formularza.

Okno Edytora Skryptów

Okna edytora skryptów składa się z menu górnego, zakładek za pomocą których przełączany jest obszar edycji skryptów (wybierany jest rodzaj skryptu do edycji), obszaru edycji skryptów i paska zawierającego numer wiersza.

Menu górne składa się z dwóch podmenu: Plik oraz Edycja (Rysunek 3). Podmenu Plik zawiera podstawowe operacje Zapisz i Zamknij. Natomiast podmenu Edycja zawiera podstawowe operacje dostępne w standardowych edytorach tekstów (Cofnij, Kopiuj, Wytnij, Wklej, Zaznacz wszystko, Znajdź, Zamień, Idź do wiersza, Odśwież) ponadto zawiera operację wklejenia szablonowego skryptu (Wklej szablonowy skrypt) przy użyciu którego w miejsce, w którym aktualnie znajduje się kursor zostanie wklejony szablonowy skrypt utworzony na podstawie aktualnej definicji formularza. Szablonowy skrypt zawiera przykłady następujących operacji:

  • pobranie wartości każdego pola formularza dla którego zdefiniowano powiązanie z atrybutem typu lub nazwę pola,
  • pobranie wszystkich zdefiniowanych w formularzu obszarów,
  • modyfikację atrybutów jednego z obszarów,
  • przykład zgłaszania komunikatów błędów dla formularza.

Wszystkie pozycje menu mogą być wywołane za pomocą skrótów klawiszowych.

Środkową część okna zajmuje obszar edycji skryptów w którym projektant formularza może zdefiniować kod źródłowy skryptu formularza. Aby zapisać modyfikacje kodu źródłowego skryptu należy wybrać pozycję Zapisz z menu Plik.

Rysunek 3. Menu funkcji wspomagających edycję skryptów formularza

Predefiniowane elementy skryptów

Skrypt formularza jest programem w języku Java™ w którym projektant formularza może deklarować klasy, metody oraz właściwy kod skryptu. W celu pobrania danych zawartych w formularzu projektant skryptu może korzystać z predefiniowanych obiektów, które pozwalają w łatwy sposób pobrać dowolną informację o formularzu oraz danych zawartych na formularzu, dodatkowo możliwa jest modyfikacja stanu formularza.

Znacznie predefiniowanych obiektów w skrypcie formularza jest następujące:

  • cells – mapa (java.util.Map) obiektów reprezentujących pola formularza, dla pól powielanych jest to tablica obiektów o typie zależnym od typu pola (np. dla pola typu data w wierszu powielanym jest to pl.rodan.eforms.cell.DateCell[] ), dla pól zwykłych jest to obiekt o typie zależnym od typu pola (np. dla pola liczbowego całkowitego jest to obiekt typu pl.rodan.eforms.cell.IntegerCell ).
  • form – obiekt reprezentujący formularz (typu pl.rodan.eforms.Form ).
  • attributes – mapa (java.util.Map) atrybutów przekazanych do formularza w aplikacji w której osadzony jest formularz (nazwy atrybutów przekazywanych do formularza są zależne od aplikacji w której użyty jest Produkt).
  • logger – obiekt pozwalający na zgłaszanie komunikatów błędów dla formularza (przy użyciu metody addError(String) ), komunikaty błędów zostaną zaprezentowane użytkownikowi wypełniającemu formularz.
  • TmHelper – obiekt pozwalający na dostęp do danych TopicMapy bieżącego formularza

Dokumentacja API obiektów dostępnych w skryptach jest dostępna w formacie JavaDoc™ na stronach aplikacji repozytorium formularzy. Aby uzyskać adres dokumentacji należy do adresu repozytorium formularzy (dostępny w menu konfiguracja Edytora Formularzy) dodać /docs/api/index.html. Przykładowo dla adresu repozytorium formularzy Adres_repozytorium, adres dokumentacji jest następujący: Dokumentacja.

Przykłady skryptów

Ukrywanie Obszarów formularza

Na formularzu zdefiniowano obszary o nazwach „lista” i „daty”. System może przekazać do formularza atrybut o nazwie „frontoffice”, w przypadku przekazanie tego atrybutu o wartości true obszar o nazwie lista” powinien zostać ukryty, a obszar o nazwie daty powinien przejść w tryb tylko do odczytu.

Skrypt przygotowania formularza

String frontoffice = (String)attributes.get("frontoffice");
if ("true".equals(frontoffice)) {
    FormArea lista = form.getFormAreas().getFormArea("lista");
    lista.setHidden(true);
    FormArea daty = form.getFormAreas().getFormArea("daty");
    daty.setReadOnly(true);
}

Wypełnianie pola bieżącą datą

Na formularzu zdefiniowano pole typu data o nazwie „data złożenia”, należy zapewnić aby pole to było automatycznie wypełniane bieżącą datą gdy nie jest ono wypełnione .

Skrypt przygotowania formularza

DateCell dateCell = (DateCell)cells.get("data zlozenia");
if (dateCell.getTypedValue() == null) {
dateCell.setDate (new java.util.Date ());
}

Kontrola zgodności pól formularza

Na formularzu zdefiniowano następujące pola typu data powiązane z atrybutami typu o nazwach Harmonogram.DataPoczatkowa oraz Harmonogram.DataKoncowa. Dodatkowo zdefiniowano pola typu liczbowego o nazwach „kwota netto”, „vat” oraz „kwota brutto”. Należy zapewnić aby data początkowa była wcześniejsza od daty końcowej, a suma kwoty netto i vat była równa kwocie brutto, w przypadku nie spełnienia tych warunków należy przekazać użytkownikowi komunikat błędu.

Skrypt weryfikacji danych formularza

Date dataPocz = (Date)cells.get("Harmonogram.DataPoczatkowa")
.getTypedValue ();
Date dataZak = (Date)cells.get("Harmonogram.DataZakonczenia")
.getTypedValue ();
if (dataPocz.getTime() > dataZak.getTime()) {
logger.addError(„Data początkowa musi być wcześniejsza od daty końcowej”);
}
Double kwotaNetto = (Double)cells.get("kwota netto").getTypedValue ();
Double vat = (Double)cells.get("vat").getTypedValue ();
Double kwotaBrutto = (Double)cells.get("kwota brutto").getTypedValue ();

if (kwotaNetto.doubleValue() + vat.doubleValue() != kwotaBrutto.doubleValue()) {
logger.addError(„Suma kwoty netto i vat nie jest równa kwocie brutto”);
}

Pobranie parametrów przekazywanych do formularza

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

java.util.Map extraParamsForForm = (java.util.Map)attributes.get("extraParamsForForm");
if (extraParamsForForm != null) {
java.lang.String newCellValue = (java.lang.String) extraParamsForForm.get("nr_sprawy");
}

Pobieranie wartości pól formularza

Pobieranie wartości komórki formularza. Szablonowy skrypt, który można wygenerować w oknie definiowania skryptów zawiera przykłady pobrania wartości wszystkich typów komórek obecnych w danym formularzu.

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

StringCell nameCell = (StringCell)cells.get("nazwaSprawy");
DictionaryCell nameCell_zw = (DictionaryCell)cells.get("zwrot_doMK_FR");
BooleanCell boolCellE2 = (BooleanCell)cells.get("elektronicznie_EM"); extraParamsForForm.get("nr_sprawy");
...

Pobieranie i ustawianie widoczności Obszaru formularza

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

FormArea pom = form.getFormAreas().getFormArea("Pomoc");
pom.setHidden(true);

Ustawianie wartości pola słownikowego

Ustawienie pola słownikowego określoną wartością pobraną ze słownika (Topic Maps)

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

DictionaryCell dictCell = (DictionaryCell)cells.get("wniosek_o_zbycie.RODZAJ_ZWROTU_Z_ZATW_WSTEP");
pl.rodan.topicmaps.TMTopic item = tmHelper.findTopicByIndicator("http://www.rodan.pl/psi/obsl.-dow.-ksiegowych-zatwierdzenie-wstepne,-rodzaj-zwrotu/przekazanie-do-zatwierdzenia-ostatecznego");
dictCell.setSelectedDictionaryItemId(item.getId());

Kasowanie wartości logicznej pól formularza

Kasowanie wartości pól typu logicznego i tekst wieloliniowy o podanej nazwie

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

((BooleanCell)sheet.getCellByName("potwierdzenieProcedury")).setBooleanValue(Boolean.FALSE);
((MultilineTextCell)sheet.getCellByName("uwagiDoProcedury")).setStringValue("");

Uzupełnianie wiersza danymi

Pobiera wiersz o indeksie 69 i wstawia w odpowiednie jego pola (osoba, potwierdzenie, uwagi) łańcuchy znaków (uwagiString, potwierdzenieString, osobaString).

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

String uwagiString = "Chciałbym zauważyć że..."
String potwierdzenieString = "Chciałbym potwierdzić że..."
String osobaString = "Freddy Mercury"
int rowIndex = 69;
HorizontalCellLine row = sheet.getRow(rowIndex);
Iterator it = row.getCells().iterator();
while (it.hasNext()) {
Cell cell = (Cell)it.next();
String cellName = cell.getCellName();
if ("osoba".equals(cellName) ) {
((StringCell)cell).setStringValue(osoba);
} else if ("potwierdzenie".equals(cellName) ) {
((StringCell)cell).setStringValue(potwierdzenie);
} if ("uwagi".equals(cellName) ) {
((StringCell)cell).setStringValue(uwagi);
}
}

Ustawianie nowego słownika

W polu słownikowym o nazwie NAZWA ustawiony zostaje słownik określony za pomocą PSI.

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

DictionaryCell dc = (DictionaryCell)cells.get("NAZWA");
dc.setDictionaryId("http://www.rodan.pl/psi/kategoria-parametrow/dane-adresowe");

Wycinanie pozycji ze słownika

Ograniczenie liczby pozycji w słowniku jedynie do pozycji o PSI podanych w neededPSIList.

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

try {
// zamiana psi na id liczbowe
HashMap neededKeys = new HashMap();
for (int i=0; i<neededPSIList.size(); i++ ) {
String psi = (String)neededPSIList.get(i);
String key = getTopicIdFromPSI(psi);
neededKeys.put(key, key);
}
FormDictionariesList dictionaries = form.getFormDictionaries();
if (dictionaries != null) {
// Mapa pozycji słownikowych do odania do słownika
HashMap items = new HashMap();
// pobranie oryginalnego slownika
FormDictionary dictionary = dictionaries.getFormDictionary(dictionaryId);
// przepisanie tylko pozadanych pozycji
Map map = dictionary.getValues();
java.util.Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
if (neededKeys.containsKey(key)) {
items.put(key, map.get(key));
}
}
dictionaries.removeItem(dictionary);
dictionary = new pl.rodan.eforms.impl.DefaultFormDictionary(dictionaryId, items);
dictionaries.registerFormDictionary(dictionary);
}
} catch (Exception e) {
logger.addError("ERROR:"+e.getMessage());
}
DictionaryCell dc = (DictionaryCell)cells.get("d1");
if (dc != null) {
String dictionaryId = dc.getDictionaryId();
ArrayList neededPSIList = new ArrayList();
neededPSIList.add("PSI");
reduceDict(dictionaryId, neededPSIList);
}

Konwersja PSI obiektu TMTopic

Konwersja PSI obiektu TMTopic na jego id.

Skrypt weryfikacji danych formularza/Skrypt przygotowania formularza

String getTopicIdFromPSI(String psi) {
pl.rodan.topicmaps.TMTopicMap tm = pl.rodan.topicmaps.TMManagerFactory.getManager().getDefaultProvider().getDefaultTopicMap();
pl.rodan.topicmaps.TMTopic item = tm.findTopicByIndicator(psi);
if (item == null) {
logger.addError("Nie znaleziono pozycji:"+psi);
return null;
}
return item.getId();
}