Przejdź do głównej zawartości

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();
}