Administracja systemem Xpertis

Transkrypt

Administracja systemem Xpertis
Praca zbiorowa
Podręcznik administratora
Dla systemu Windows—Linux
Wydanie piętnaste
Macrologic SA, Warszawa, luty 2014
Praca zbiorowa
Xpertis: Podręcznik administratora; Dla systemu Windows—Linux
Wydanie piętnaste
© Copyright by Macrologic SA, luty 2014
Macrologic SA
ul. Kłopotowskiego 22
03-717 Warszawa
tel. +48 222-566-222
http://www.macrologic.pl
Podręcznik administratora jest jednym z najstarszych wydawnictw firmy MacroSoft — Macrologic. Przez dwadzieścia lat życia był wielokrotnie aktualizowany. Dziś trudno jest ustalić,
kto i w jakim stopniu przyczynił się do powstania tego dzieła.
Redakcja: Krzysztof Zawisławski, Artur Żak , Grzegorz Śliwka
Skład: Andrzej Odyniec, Krzysztof Odyniec
Druk: Niniejszy podręcznik został przygotowany w wersji elektronicznej i nie jest publikowany przez wydawcę w postaci papierowej a jedynie na nośnikach komputerowych oraz przez
Internet.
Macrologic oraz Xpertis są znakami handlowymi Macrologic SA.
Prawa do wszystkich występujących tutaj znaków handlowych należą do odpowiednich właścicieli. Ze względu na
charakter publikacji i niekiedy częste używanie w tekście znaków handlowych, zamiast umieszczania po każdym
wystąpieniu takiego znaku — symbolu znaku handlowego (TM ) lub zastrzeżonego znaku handlowego (®) utrudniającego czytanie, wszystkie znaki handlowe wyróżniamy pisząc je z wielkiej litery w trosce o przejrzysty styl
wydawniczy i bez intencji jakiegokolwiek ingerowania w znak lub naruszania praw z nim związanych.
Informacja o licencjach na wykorzystywane oprogramowanie stron trzecich znajduje się na płycie dystrybucyjnej
w folderze: „Xpertis Dokumentacja” podfolder: „Licencje obce”.
ISBN: Publikacjom elektronicznym nie przydziela się
Spis treści
Uwagi wstępne
1
I
Wymagania systemowe
1 Opis ogólny systemu MacroBASE . . . . . . . . . . . . . . . . .
2 System Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Systemy Windows NT/2000/2003/2008/XP/Vista/7 . . . . . . .
3
3
4
5
II
Instalacja
1 System Linux . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1 Zakładanie konta administratorowi bazy danych . . . .
1.2 Wariant A. Instalowanie systemów użytkowych . . . . .
1.3 Wariant B. Zainstalowanie samych programów . . . . .
1.4 Wariant C. Instalowanie klienta serwera aplikacji jTerm .
2 System Windows . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 Instalacja pakietu Xpertis wielofirmowy z danymi demonstracyjnymi . . . . . . . . . . . . . . . . . . . . . .
2.2 Instalacja pakietu Xpertis z Serwerem Aplikacji . . . . .
2.2.1 Instalacja na serwerze . . . . . . . . . . . . . . .
2.2.2 Instalacja na końcówce użytkownika . . . . . . .
2.3 Środowisko MacroBASE dla Windows . . . . . . . . . .
2.3.1 Xpertis Server . . . . . . . . . . . . . . . . . . .
2.3.2 Instalacja klienta serwera aplikacji — jTerm . . .
2.3.3 Instalacja środowiska MacroBASE . . . . . . . .
.
.
.
.
.
.
.
.
13
14
15
15
17
17
19
20
III Architektura systemu
1 Elementy systemu . . . . . . . . . . . . . . . . . . . . . . . . .
2 Definicja systemu . . . . . . . . . . . . . . . . . . . . . . . . .
3 Podprogramy zewnętrzne . . . . . . . . . . . . . . . . . . . . .
23
23
26
26
i
7
. 7
. 7
. 8
. 9
. 11
. 12
ii
Spis treści
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
3.1 Formuły . . . . . . . . . . . . . . . . . . . . . .
3.2 Wzorce wydruków . . . . . . . . . . . . . . . .
Maszyna bazy danych . . . . . . . . . . . . . . . . . .
Serwer aplikacji . . . . . . . . . . . . . . . . . . . . .
Plik konfiguracyjny cluster.cfg . . . . . . . . . . . . .
6.1 Sekcje aplikacji . . . . . . . . . . . . . . . . . .
6.2 Sekcje specjalne . . . . . . . . . . . . . . . . . .
Klient serwera aplikacji jTerm . . . . . . . . . . . . . .
Katalog kopii . . . . . . . . . . . . . . . . . . . . . . .
Program administratora . . . . . . . . . . . . . . . . .
Konsola serwera aplikacji . . . . . . . . . . . . . . . .
Administrator serwera aplikacji . . . . . . . . . . . . .
Serwer wiadomości . . . . . . . . . . . . . . . . . . .
Program komunikacyjny . . . . . . . . . . . . . . . .
Poufność dostępu do bazy . . . . . . . . . . . . . . . .
Konwersja danych . . . . . . . . . . . . . . . . . . . .
15.1 Konwersja struktury danych . . . . . . . . . . .
15.2 Konwersja formatu danych . . . . . . . . . . . .
15.3 Naprawa danych . . . . . . . . . . . . . . . . .
15.4 Weryfikacja pliku macro.use . . . . . . . . . . .
Porównanie definicji systemów . . . . . . . . . . . . .
Pisanie do portów zdalnych komputerów . . . . . . . .
Praca z systemem z poziomu przeglądarki internetowej
18.1 Plik macrocgi.ini . . . . . . . . . . . . . . .
18.2 Uruchomienie z linii komend . . . . . . . . . .
18.3 Kodowanie polskich znaków . . . . . . . . . . .
Biblioteka mbasic.dll . . . . . . . . . . . . . . . .
Przeglądarka raportów z Crystal Reports . . . . . . . .
Program do testowania sieci . . . . . . . . . . . . . . .
Konfigurowanie systemu . . . . . . . . . . . . . . . .
Deklaracja ścieżek . . . . . . . . . . . . . . . . . . . .
Indeksy z reprezentantem z tabeli maskowalnej . . . .
Historia systemu . . . . . . . . . . . . . . . . . . . . .
Fizyczna organizacja danych . . . . . . . . . . . . . .
Pliki graficzne (*.bmp, *.png) . . . . . . . . . . . .
Ustawienia użytkownika . . . . . . . . . . . . . . . . .
Zapisywanie warunków dla okienek wertowania . . . .
Autoraporty . . . . . . . . . . . . . . . . . . . . . . .
Parametry wydruków . . . . . . . . . . . . . . . . . .
Dziennik systemu . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
26
27
29
33
33
36
39
43
44
46
49
50
52
52
72
73
77
79
80
80
98
100
104
105
107
108
116
118
118
126
133
134
141
141
143
147
147
149
150
iii
Spis treści
33 Wykorzystanie bibliotek zewnętrznych . . . . . . . . . . . . . .
33.1 Tworzenie bibliotek dll . . . . . . . . . . . . . . . . . . .
33.2 Tworzenie bibliotek jar . . . . . . . . . . . . . . . . . . .
33.3 Biblioteka MacroLAF.jar . . . . . . . . . . . . . . . . . .
34 Wykorzystanie kontrolek w oknach . . . . . . . . . . . . . . . .
34.1 Przykład kontrolki . . . . . . . . . . . . . . . . . . . . .
34.2 Przykład przesyłania danych . . . . . . . . . . . . . . . .
34.3 Kontrolki dostarczane z systemem . . . . . . . . . . . . .
35 Weryfikacja licencji . . . . . . . . . . . . . . . . . . . . . . . .
36 Sterownik ODBC dla MacroBASE . . . . . . . . . . . . . . . .
36.1 System operacyjny Windows . . . . . . . . . . . . . . . .
36.2 Sterownik ODBC dla MacroBASE w systemie Linux . . .
36.2.1 Instalowanie sterownika (wersja 32-bitowa) . . . .
36.2.2 Definiowanie źródeł danych . . . . . . . . . . . .
36.2.3 Przykład instalacji . . . . . . . . . . . . . . . . . .
36.2.4 Instalowanie sterownika (wersja 64-bitowa) . . . .
36.3 Procedury wbudowane . . . . . . . . . . . . . . . . . . .
36.4 Sterownik JDBC . . . . . . . . . . . . . . . . . . . . . . .
37 Sposoby wymiany danych z innymi systemami . . . . . . . . .
38 Szyfrowanie połączenia z serwerem aplikacji . . . . . . . . . . .
39 Uwierzytelnianie certyfikatem . . . . . . . . . . . . . . . . . .
39.1 Uwierzytelnianie za pomocą SmartCard . . . . . . . . . .
39.2 Uwierzytelnianie certyfikatem z pliku . . . . . . . . . . .
40 Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40.1 Uruchamianie profilera . . . . . . . . . . . . . . . . . . .
40.1.1 Włączanie profilera za pomocą wpisu w pliku konfiguracyjnym . . . . . . . . . . . . . . . . . . . . .
40.1.2 Włączanie profilera za pomocą opcji z linii poleceń
40.1.3 Włączanie i wyłączanie profilera za pomocą przycisków na pasku narzędzi . . . . . . . . . . . . . .
40.1.4 Profilowanie pojedynczej formuły . . . . . . . . .
40.2 Analiza wyników profilowania w obiekcie klasy DEBUG .
40.3 Rejestrowanie liczby wywołań procedur, metod, raportów i zapytań SQL . . . . . . . . . . . . . . . . . . . . . .
41 Automatyczne aktualizacje . . . . . . . . . . . . . . . . . . . .
41.1 MacroUPDATE . . . . . . . . . . . . . . . . . . . . . . .
41.2 Automatyczna aktualizacja jTerma . . . . . . . . . . . . .
41.3 Aktualizacja sterownika ODBC . . . . . . . . . . . . . .
42 Pobieranie kluczy licencyjnych z portalu Xpertis 24 . . . . . . .
153
154
156
161
161
162
164
167
170
172
172
179
179
180
182
184
185
188
189
190
193
193
196
196
197
197
198
198
199
199
200
204
204
205
206
206
iv
Spis treści
IV Obsługa drukarek
1 Język opisu drukarki graficznej
2 Język opisu drukarki tekstowej
2.1 driver . . . . . . . . . .
2.2 bottomline . . . . . . . .
2.3 cr . . . . . . . . . . . . .
2.4 dataseton . . . . . . . .
2.5 ffl . . . . . . . . . . . . .
2.6 ffr . . . . . . . . . . . .
2.7 firstempty . . . . . . . .
2.8 fontstd . . . . . . . . . .
2.9 height . . . . . . . . . .
2.10 init . . . . . . . . . . . .
2.11 lpcmd . . . . . . . . . .
2.12 nl . . . . . . . . . . . . .
2.13 nopanel . . . . . . . . .
2.14 pagel . . . . . . . . . . .
2.15 pager . . . . . . . . . . .
2.16 printon . . . . . . . . . .
2.17 spacestd . . . . . . . . .
2.18 translate . . . . . . . . .
2.19 viewon . . . . . . . . . .
2.20 width . . . . . . . . . .
2.21 font . . . . . . . . . . .
2.22 space . . . . . . . . . . .
V
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
207
207
211
213
213
213
213
213
213
213
213
214
214
214
214
214
215
215
215
215
215
215
215
216
216
Kopie bezpieczeństwa
1 Opis ogólny . . . . . . . . . . . . . . . . . . . . .
2 Scenariusz wykonywania . . . . . . . . . . . . . .
3 Wykorzystywane polecenia . . . . . . . . . . . . .
3.1 System operacyjny Windows NT/2000/2003 .
3.2 System operacyjny Linux . . . . . . . . . . .
4 Ograniczenia systemu . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
219
219
219
220
220
221
222
VI Kody błędów
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
223
Uwagi wstępne
W opisie zastosowano poniższe konwencje typograficzne ułatwiające odszukanie i identyfikację materiału.
— Na marginesach umieszczono gdzieniegdzie następujące ikony:
Ta ikona wskazuje przytoczone w podręczniku przykłady.
Ta ikona wskazuje szczególnie istotne wskazówki i ostrzeżenia przed błędami najczęściej popełnianymi przez użytkowników.
Ta ikona wskazuje fragmenty podręcznika, które odnoszą się do przepisów prawa oraz praktycznych rozwiązań proponowanych przez autorów
oprogramowania.
Ta ikona wyróżnia odsyłacze wskazujące podrozdziały, gdzie szerzej zostało opisane wybrane zagadnienie.
— Opisy funkcji oraz ich działania w wielu miejscach zostały zilustrowane
przykładami. Wykorzystane w nich dane mają na celu zademonstrowanie działania funkcji i algorytmów, nie stanowią żadnego odniesienia do
danych rzeczywistych.
1
2
Uwagi wstępne
Rozdział I
Wymagania systemowe
1 Opis ogólny systemu MacroBASE
System MacroBASE przeznaczony jest do pracy wielodostępnej. Składa się
z serwera bazy danych, serwera aplikacji oraz programów klienckich.
Serwer bazy danych jest odpowiedzialny za dostęp do danych. Może być
zainstalowany na komputerach z zainstalowanymi systemami:
— Linux,
— Windows,
Serwer aplikacji wykonuje aplikację, umożliwiając pracę z nią w sieci lokalnej i rozległej. Komunikuje się on z serwerem bazy danych w celu odczytu
i zapisu danych do bazy. Może być zainstalowany na komputerach z zainstalowanymi systemami:
— Linux (przy założeniu, że serwer bazy danych uruchomiony jest także na
tym samym komputerze),
— Windows.
Końcówka użytkownika jTerm służy do uruchamiania systemów na komputerach zarówno w sieci lokalnej jak i rozległej. Odpowiada za pobranie akcji
użytkownika oraz prezentację przetworzonych danych. Może być zainstalowana na komputerach z systemem Windows lub Linux.
W systemie jest możliwość dostępu do danych z poziomu przeglądarki
internetowej. Idea polega na uruchomieniu skryptu CGI — (programu MacroCGI dla systemu Linux lub mhtmlcgi.exe w wersji dla Windows) —
3
4
Rozdział I. Wymagania systemowe
który łączy się bezpośrednio z serwerem bazy danych i wykonuje zadane procedury. Wyniki są zwracane poprzez stronę w formacie HTML.
Dla systemów Linux i Windows istnieje również możliwość dostępu do danych systemu MacroBASE z wykorzystaniem sterownika ODBC łączącego się
z serwerem bazy danych bezpośrednio lub przez serwer aplikacji.
2 System Linux
Xpertis Server działający pod systemem Linux wymaga jądra systemu w wersji
2.4.0 lub nowszej oraz zainstalowania biblioteki glibc w wersji niestarszej niż
2.3.2.
W pakiecie MacroBASE dostępny jest sterownik ODBC dla systemów Linux (w wersji 32 oraz 64 bitowej) współpracujący z menadżerem unixODBC.
Umożliwia on korzystanie z danych systemów MacroBASE przez programy
działające w środowisku Linux. Przed przystąpieniem do instalacji sterownika należy zadbać, aby w systemie był obecny menadżer unixODBC. Jeśli
nie jest dostarczony z systemem operacyjnym, to należy pobrać go ze strony
http://www.unixodbc.org i zainstalować zgodnie z instrukcją producenta.
Do poprawnego działania graficznej końcówki jTerm oprócz zainstalowanego środowiska X-Windows, konieczne jest zainstalowanie oprogramowania
Java dystrybuowanej przez ORACLE (dawniej Sun Microsystems) w wersji 32
bitowej oznaczonej co najmniej Version 7. Programu nie można uruchomić
wykorzystując Javę w wersji Version 6 ani w wersji 64-bitowej. Aby się dowiedzieć, jaka jest aktualnie zainstalowana wersja, wystarczy wywołać polecenie:
java -version
Dla wspomnianej wymaganej wersji może to być wynik postaci:
java version "1.7.0_13"
Jeśli w systemie zostanie zdefiniowana zmienna MACRO_JAVA_HOME, to
programy będą uruchamiać Javę ze ścieżki:
$MACRO_JAVA_HOME/bin/java
W przypadku jTerma, jeśli wersja Javy będzie wcześniejsza niż 7, to również
zostanie uruchomiona Java, którą wskazuje zmienna MACRO_JAVA_HOME.
I.3. Systemy Windows NT/2000/2003/2008/XP/Vista/7
5
3 Systemy Windows NT/2000/2003/2008/XP/Vista/7
Zarówno serwer bazy danych jak i serwer aplikacji mogą być zainstalowane na
serwerze z systemem Windows NT/2000/2003/2008/XP/Vista/7.
Do poprawnego działania graficznej końcówki jTerm konieczne jest zainstalowanie oprogramowania Java dystrybuowanej przez ORACLE (dawniej
Sun Microsystems) w wersji 32 bitowej oznaczonej co najmniej Version 7,
a co za tym idzie, systemu Windows XP/Vista/2000/2003/2008/7. Programu
nie można uruchomić wykorzystując Javę w wersji Version 6 ani w wersji 64bitowej. Aby się dowiedzieć, jaka jest aktualnie zainstalowana wersja, wystarczy wywołać polecenie:
java -version
Dla wspomnianej wymaganej wersji może to być wynik postaci:
java version "1.7.0_13"
W przypadku braku właściwej wersji istnieje możliwość automatycznego
pobrania i zainstalowania odpowiedniej wersji z serwera www.macrologic.pl.
Jeśli jTerm będzie uruchomiony nieprawidłową wersją, zostanie wyświetlone
pytanie, czy ma być pobrana właściwa wersja Javy. W przypadku odpowiedzi
Tak, program instalacyjny będzie pobrany poprzez Internet, a następnie zainstalowany w systemie. Pobrana wersja Javy będzie instalowana obok bieżącej
wersji, nie zmieniając domyślnej wersji Javy. Wspomniana funkcjonalność jest
dostępna tylko dla końcówek działających w systemie Windows. Jeśli w systemie zostanie zdefiniowana zmienna MACRO_JAVA_HOME, to programy będą
uruchamiać Javę ze ścieżki:
%MACRO_JAVA_HOME%\bin\java.exe
W przypadku jTerma, jeśli wersja Javy będzie wcześniejsza niż 7, to również
zostanie uruchomiona Java, którą wskazuje zmienna MACRO_JAVA_HOME.
6
Rozdział I. Wymagania systemowe
Rozdział II
Instalacja
1 System Linux
Instalacja systemu składa się z instalacji programów wykonawczych, systemu
użytkowego i wykonania pewnych czynności administracyjnych. Zakłada się,
że za działanie systemu użytkowego jest odpowiedzialny jeden użytkownik systemu Linux — administrator bazy danych, który jednak nie jest administratorem systemu operacyjnego (root). Fizycznie wszystkie te funkcje może pełnić
jedna osoba bądź grupa osób. Instalację wykonuje się w następujących etapach:
1. założenie konta administratorowi bazy danych,
2. zainstalowanie systemów użytkowych wraz z programami wykonawczymi lub samych programów wykonawczych w zależności od wybranego
wariantu.
Zbiory konieczne do instalacji są dostarczane dla wszystkich pracowników
i klientów poprzez portal Xpertis 24 lub na życzenie na płycie jako archiwa
utworzone programem tar.
1.1 Zakładanie konta administratorowi bazy danych
Czynności opisane w tym punkcie wykonuje administrator systemu Linux. Jego zadaniem jest utworzenie konta administratorowi bazy danych.
Zwyczajowo identyfikatorem jest macroadm, a katalogiem macierzystym
/home/macro.
7
8
Rozdział II. Instalacja
1.2 Wariant A. Instalowanie systemów użytkowych wraz z programami wykonawczymi
Czynności opisane w tym punkcie wykonuje administrator bazy danych. Instalacja całego pakietu zintegrowanego zawierającego pakiet Xpertis wraz z programami wykonawczymi składa się z następujących czynności:
1. Pobrania pakietów instalacyjnych.
Pakiety dostępne są dla wszystkich pracowników i klientów poprzez
portal Xpertis 24 (w portalu należy wybrać z menu pozycje:
[Dystrybucja|Wersje instalacyjne] – wyświetlona zostanie strona umożliwiająca wskazanie wersji oprogramowania i wybór właściwego pakietu do pobrania wraz ze zaserializowanym plikiem środowiska programistycznego). Jeśli zostanie wybrany pakiet Linux Xpertis Xpertis wielofirmowy z danymi demonstracyjnymi (z numerem seryjnym PRAC000030) lista będzie zawierać dwa pliki do pobrania:
— instalator Xpertis wielofirmowy z danymi demonstracyjnymi (plik
xpertis_w_demo_1240.tar),
— zaserializowany plik środowiska instalacyjnego Xpertis (plik xpertis_1240_prac000030.ser.zip).
Pierwszy z nich służy do zainstalowania oprogramowania i zawiera wszystkie elementy instalowanego pakietu, które są niezależnie od
numeru seryjnego. Można go zatem pobrać raz i używać na rzecz
wszystkich instalacji niezależnie od tego na jaki numer seryjny jest
wystawiona licencja. Drugi plik jest unikalny dla danego numeru seryjnego (stąd w nazwie pliku znajduje się numer seryjny oraz rozszerzenie .ser.zip). Obydwa pliki należy pobrać np. do katalogu
/home/macroadm/xpertis.
2. Zainstalowania oprogramowania.
Aby zainstalować oprogramowanie należy:
— rozpakować plik xpertis_w_demo_1240.tar w katalogu, w
którym ma być zainstalowane oprogramowanie:
$ tar xf /home/macroadm/xpertis/xpertis_w_demo_1240.tar
— zadbać, aby plik serializacyjny (w omawianym przykładzie plik
xpertis_1240_prac000030.ser.zip) znajdował się w tym
samym katalogu co instalowane oprogramowanie,
II.1. System Linux
— wywołać program instalacyjny poprzez wydanie polecenia:
sh config
dla wersji 32-bitowej serwera bazy danych, lub
sh config -64
dla wersji 64-bitowej.
Program instalacyjny utworzy strukturę katalogów oraz nada odpowiednie prawa dostępu do plików. Zainstalowane zostaną również moduły wykonawcze (podkatalog server) wraz ze skryptami do ich obsługi
(start, stop).
1.3 Wariant B. Zainstalowanie samych programów wykonawczych
Czynności opisane w tym punkcie wykonuje administrator bazy danych. Aby
zainstalować programy wykonawcze, należy wykonać następujące kroki:
1. Przeznaczyć jeden pusty katalog na programy wykonawcze.
Standardowo jest to /home/macroadm/server. Dopuszcza się
umieszczenie w tym katalogu zbiorów ukrytych, z kropką na początku
nazwy (np. .profile, .cshrc).
2. Pobrać pakiety instalacyjne.
Pakiety dostępne są dla wszystkich pracowników i klientów poprzez
portal Xpertis 24 (w portalu należy wybrać z menu pozycje:
[Dystrybucja|Wersje instalacyjne] – wyświetlona zostanie strona umożliwiająca wskazanie wersji oprogramowania i wybór właściwego pakietu do pobrania wraz ze zaserializowanym plikiem środowiska programistycznego). Jeśli zostanie wybrany pakiet Linux MacroBASE MacroSERVER (z numerem seryjnym PRAC000030) lista będzie zawierać dwa pliki do pobrania:
— instalator Xpertis MacroSERVER (plik xpertis_server_1240.tar),
— zaserializowany plik środowiska instalacyjnego Xpertis MacroSERVER (plik xpertis_server_1240_prac00030.ser.zip).
9
10
Rozdział II. Instalacja
Pierwszy z nich służy do zainstalowania oprogramowania i zawiera wszystkie elementy instalowanego pakietu, które są niezależnie od
numeru seryjnego. Można go zatem pobrać raz i używać na rzecz
wszystkich instalacji niezależnie od tego na jaki numer seryjny jest
wystawiona licencja. Drugi plik jest unikalny dla danego numeru seryjnego (stąd w nazwie pliku znajduje się numer seryjny oraz rozszerzenie .ser.zip). Obydwa pliki należy pobrać np. do katalogu
/home/macroadm/server.
3. Zainstalowć oprogramowanie.
W tym celu należy:
— rozpakować plik xpertis_server_1240.tar w katalogu, w
którym ma być zainstalowane oprogramowanie:
$ tar xvf /home/macroadm/server/xpertis_server_1240.tar
Podanie opcji v powoduje, że na ekranie będą się pokazywać nazwy kopiowanych zbiorów.
— zadbać, aby plik serializacyjny (w omawianym przykładzie plik
xpertis_server_1240_prac00030.ser.zip) znajdował
się w tym samym katalogu co instalowane oprogramowanie,
— wywołać program instalacyjny poprzez wydanie polecenia:
sh config
dla wersji 32-bitowej serwera bazy danych, lub
sh config -64
dla wersji 64-bitowej.
Program instalacyjny utworzy strukturę katalogu, nada odpowiednie
prawa dostępu do zbiorów oraz utworzy dwa zbiory wykonawcze:
server_start
polecenie rozpoczęcia serwera bazy danych,
server_stop
polecenie zakończenia pracy serwera.
Zawierają one polecenia uruchamiające serwer bazy danych oraz serwer
aplikacji (MacroAppSERVER). W niektórych konfiguracjach uruchamianie wszystkich modułów może być nadmiarowe i należy wtedy odpowiednio zmodyfikować skrypty.
II.1. System Linux
Powyższe skrypty musi uruchamiać administrator bazy danych. Jeśli
chcemy, aby serwer bazy danych był uruchamiany podczas startu systemu operacyjnego, to można wykorzystać polecenie su w skryptach
startowych, dzięki czemu podana komenda będzie wywołana z prawami podanego użytkownika. Np.
echo "Uruchamianie systemu MacroBASE"
su - macroadm -c "/home/macro/server_start"
sleep 4
1.4 Wariant C. Instalowanie klienta serwera aplikacji jTerm
Czynności opisane poniżej pozwalają na zainstalowanie klienta jTerm działającego w środowisku graficznym systemu Linux.
1. Pobranie pakietów instalacyjnych.
Pakiety dostępne są dla wszystkich pracowników i klientów poprzez
portal Xpertis 24 (w portalu należy wybrać z menu pozycje:
[Dystrybucja|Wersje instalacyjne] – wyświetlona zostanie strona umożliwiająca wskazanie wersji oprogramowania i wybór właściwego pakietu do pobrania). W omawianym przykładzie należy wskazać pakiet
Linux MacroBASE - jTerm zawierający plik jterm_1240.tar,
który należy pobrać do katalogu przeznaczonego na instalację np. do
katalogu /home/macroadm/jTerm.
2. Zainstalowanie oprogramowania.
W tym celu należy:
— rozpakować plik jterm_1240.tar w katalogu, w którym ma
być zainstalowane oprogramowanie:
$ tar xvf /home/macroadm/jTerm/jterm_1240.tar
Podanie opcji v powoduje, że na ekranie będą się pokazywać nazwy kopiowanych zbiorów.
— wywołać program instalacyjny poprzez wydanie polecenia:
sh config.sh
Pojawi się prośba o podanie numeru IP lub nazwy serwera, na
którym działa serwer aplikacji a instalowany klient ma się komunikować. Program instalacyjny utworzy strukturę katalogów oraz
skrypty:
11
12
Rozdział II. Instalacja
jterm.sh
uruchamiający klienta jTerm,
jconsole.sh
uruchamiający konsolę serwera aplikacji jConsole
pass.sh
uruchamiający aplikację MacroPASS.
Do poprawnego działania graficznej końcówki jTerm konieczne jest zainstalowanie oprogramowania Java dystrybuowanej przez ORACLE (dawniej
Sun Microsystems) w wersji 32 bitowej oznaczonej co najmniej Version 7. Programu nie można uruchomić wykorzystując Javę w wersji Version 6 ani w wersji 64-bitowej. Jeśli pakiet był już wcześniej zainstalowany, jego wersję można
sprawdzić wywołując polecenie:
java -version
Dla wspomnianej wymaganej wersji może to być wynik postaci:
java version "1.7.0_13"
Jeśli w systemie zostanie zdefiniowana zmienna MACRO_JAVA_HOME, to
programy będą uruchamiać Javę ze ścieżki
$MACRO_JAVA_HOME/bin/java
W przypadku jTerma, jeśli wersja Javy będzie wcześniejsza niż 7, to również
zostanie uruchomiona Java, którą wskazuje zmienna MACRO_JAVA_HOME.
2 System Windows
Proces instalacji oprogramowania na komuterach ze środowiskiem Windows
sporowadza się zasadniczo do dwóch czynności: zgrania wymaganego pakietu
instalacyjnego oraz uruchomienia instalatora i postępowania zgodnie z jego
wskazówkami. Pakiety instalacyjne dostępne są dla wszystkich pracowników i
klientów poprzez portal Xpertis 24. W portalu należy wybrać z menu pozycje: [Dystrybucja|Wersje instalacyjne] – wyświetlona zostanie strona umożliwiająca wskazanie wersji oprogramowania i wybór właściwego pakietu do pobrania wraz ze zaserializowanym plikiem środowiska programistycznego (w
przypadku gdy instalator takiego pliku wymaga). Przykładowo, jeśli zostanie
wybrany pakiet Windows MacroBASE - MacroSERVER (z numerem seryjnym PRAC000030) lista będzie zawierać dwa pliki do pobrania:
II.2. System Windows
13
— instalator Xpertis MacroSERVER (plik xpertis_server_1240.exe),
— zaserializowany plik środowiska instalacyjnego Xpertis MacroSERVER
(plik xpertis_server_1240_prac000030.ser.zip).
Pierwszy z nich służy do zainstalowania oprogramowania i zawiera wszystkie
elementy instalowanego pakietu, które są niezależnie od numeru seryjnego.
Można go zatem pobrać raz i używać na rzecz wszystkich instalacji niezależnie
od tego na jaki numer seryjny jest wystawiona licencja. Drugi plik jest unikalny
dla danego numeru seryjnego (stąd w nazwie pliku znajduje się numer seryjny
oraz rozszerzenie .ser.zip).
Aby zainstalować oprogramowanie należy uruchomić instalator (plik xpertis_server_1240.exe) i postępować zgodnie ze wskazówkami programu. W
przypadku niektórych pakietów niezbędne są pliki z rozszerzeniem .ser.zip –
w przypadku ich braku w bieżącym katalogu, instalator poprosi o wskazanie
ścieżek do tych plików. Niektóre pakiety są niezależne od numeru seryjnego i
pliki *.ser.zip nie są dla nich wymagane, np. pakiet jTerm oraz ODBC.
2.1 Instalacja pakietu Xpertis wielofirmowy z danymi demonstracyjnymi
Pakiet instalacyjny zawiera:
— wszystkie systemy użytkowe wchodzące w skład pakietu Xpertis z danymi demonstracyjnymi w wersji wielofirmowej, przystosowane do pracy
z serwerem aplikacji,
— serwer bazy danych Xpertis Server dla systemu Windows,
— serwer aplikacji MacroAppSERVER,
— klient serwera aplikacji jTerm,
— program MacroPASS służący do kontroli dostępów i uprawnień,
— dodatkowe programy systemowe i narzędziowe, zestaw fontów MacroBAR do druku kodów kreskowych w układzie 128,
— komponenty MacroCRview do uruchamiania raportów Crystal Reports,
— sterownik ODBC
— Java(TM) SE Runtime Environment
14
Rozdział II. Instalacja
— Graphviz — Graph Visualization Software
Zainstalowane zostaną (bez możliwości wyboru wariantów przez użytkownika) wszystkie powyższe komponenty oraz sterownik ODBC. Jeśli sterownik
ODBC jest już zainstalowany w innej wersji, zostanie wyświetlone ostrzeżenie z pytaniem, czy zastąpić istniejący sterownik nowym. Zamiana spowoduje
utratę zdefiniowanych wcześniej źródeł danych, innych niż źródła plikowe. Po
zakończeniu instalacji automatycznie uruchamiany jest serwer bazy danych
i serwer aplikacji. Użytkownik może również uruchomić serwery korzystając
ze skrótów utworzonych w menu Start systemu Windows: [Start|Macrologic
Xpertis|System]. Znajdują się tam również skróty uruchamiające klienta serwera aplikacji [Start|Macrologic Xpertis|Xpertis jTerm].
2.2 Instalacja pakietu Xpertis z Serwerem Aplikacji
Pakiet instalacyjny zawiera:
— wszystkie systemy użytkowe wchodzące w skład pakietu Xpertis (opcjonalnie z danymi demonstracyjnym) przystosowane do pracy w architekturze trójwarstwowej z serwerem aplikacji,
— serwer baz danych Xpertis Server dla systemu Windows (podczas instalacji możliwy wybór między wersją 32 i 64-bitową),
— serwer aplikacji MacroAppSERVER,
— klient serwera aplikacji jTerm,
— program MacroPASS służący do kontroli dostępów i uprawnień,
— dodatkowe programy systemowe i narzędziowe, zestaw fontów MacroBAR do druku kodów kreskowych w układzie 128,
— komponenty MacroCRview do uruchamiania raportów Crystal Reports,
— sterownik ODBC.
— Java(TM) SE Runtime Environment
— Graphviz — Graph Visualization Software
Pakiet posiada dwa predefiniowane warianty instalacji:
— Instalacja oprogramowania na serwerze,
— Instalacja oprogramowania na końcówce użytkownika.
II.2. System Windows
2.2.1 Instalacja oprogramowania na serwerze
W tym wariancie zainstalowany zostanie pełny pakiet Xpertis wraz z serwerem
bazy danych, serwerem aplikacji i klientami. Instalację należy przeprowadzać
lokalnie na komputerze, na którym ma działać system MacroBASE. Dowolny z komponentów można pominąć usuwając zaznaczenie przy odpowiedniej
pozycji. W trakcie instalacji na serwerze użytkownik może wybrać dodatkowo
następujące opcje:
— utworzenie skrótu do programu jTerm na pulpicie,
— utworzenie skrótów do aplikacji w menu Start,
— podać parametry połącznia z serwerem: adres, port oraz grupę roboczą,
— nadać hasło do konsoli serwera aplikacji.
Dla systemów Windows NT/2000/2003/2008/XP/Vista/7 zalecane jest uruchomienie serwera aplikacji i serwera bazy danych jako usługi.
Instalacja usług i ich uruchomienie odbywa się automatycznie po zaznaczeniu odpowiednich opcji w instalatorze. Skróty do późniejszego uruchamiania
i zatrzymywania tych usług znajdują się w menu [Macrologic Xpertis|System].
Domyślnie usługi uruchamiane są na konto systemu operacyjnego. Nadawanie poszczególnym użytkownikom uprawnień do zainstalowanych aplikacji
nie jest dla tej konfiguracji potrzebne. W trybie pracy jako usługa, ewentualne błędy występujące podczas uruchomienia serwerów nie są zgłaszane na
ekranie, tylko raportowane do plików server.log (maszyna bazy danych)
i error.log (serwer aplikacji).
Plik konfiguracyjny cluster.cfg, niezbędny do prawidłowego działania serwera aplikacji, tworzony jest automatycznie w czasie instalacji wybranych systemów użytkowych. Jego standardowa lokalizacja to:
<katalog_instalacji>\system\cfg
Jeśli chcemy uniemożliwić uruchamianie niektórych aplikacji lub dodać
nowe, należy zmodyfikować ten właśnie plik.
2.2.2 Instalacja oprogramowania na końcówce użytkownika
W tym wariancie zainstalowane zostaną jedynie komponenty przeznaczone
dla komputera klienckiego — klient serwera aplikacji jTerm, komponenty MacroCRview do uruchamiania raportów Crystal Reports, zestaw fontów MacroBAR do druku kodów kreskowych w układzie 128 oraz sterownik ODBC. Jeśli sterownik ODBC jest już zainstalowany w innej wersji, zostanie wyświetlone ostrzeżenie z pytaniem, czy zastąpić istniejący sterownik nowym. Zamiana
15
16
Rozdział II. Instalacja
spowoduje utratę zdefiniowanych wcześniej źródeł danych, innych niż źródła
plikowe. W trakcie instalacji użytkownik ma możliwość wybrania opcji utworzenia skrótu do aplikacji na pulpicie oraz w menu Start.
Dla pakietu instalacyjnego jTerm wprowadzono możliwość zapisu i odtwarzania parametrów instalacji. Oznacza to, że możliwe jest np. przeprowadzenie ”pilotażowej” instalacji jTerma na pierwszej końcówce klienta, a
następnie powtórzenie jej automatycznie, bez przechodzenia przez wszystkie
okna kreatora instalacji, z identycznymi parametrami i opcjami. Służą do tego
różne przełączniki wywołania, np. dla pakietu jTerm.exe wywołanie:
jterm.exe /SAVEINF="param.cfg"
zapisze w pliku param.cfg parametry i opcje wybrane w trakcie procesu
instalacji. Na kolejnym komputerze wystarczy wgrać plik param.cfg obok
jterm.exe i uruchomić pakiet z przełącznikiem:
jterm.exe /LOADINF="param.cfg"
a wybrane opcje, ścieżki itp. podpowiedzą się z pliku. Aby uzyskać efekt bezinterwencyjnej instalacji można użyć dodatkowo przełącznika /SILENT (będzie widoczny tylko pasek postępu instalacji) lub /VERYSILENT (nie będzie
nawet paska postępu). Czyli wywołanie na drugim i kolejnych komputerach:
jterm.exe /LOADINF="param.cfg" /SILENT
powinno dać efekt pełnej automatyzacji instalacji. Dodano również obsługę
dodatkowych przełączników modyfikujących niektóre parametry dostępne w
oknach instalatora:
/ADRES=adres
/PORT=port
/GRUPA=grupa
/CERT=”ścieżka do pliku certyfikatu”
Wywołanie całkowicie automatycznej instalacji, ale z drobną modyfikacją
w zakresie grupy (przełączniki mają wyższy priorytet niż ustawienia ładowane
przez LOADINF) wyglądałoby np. tak:
jterm.exe /LOADINF="param.cfg" /SILENT /GRUPA=prezesi
a z wprowadzeniem wskazania na plik certyfikatu test.der:
II.2. System Windows
17
jterm.exe /LOADINF="param.cfg" /SILENT /GRUPA=prezesi /CERT="c:\tajne\test.der"
Parametr ze ścieżką do pliku z certyfikatem można wprowadzać także jawnie w oknie instalatora, pod parametrami na adres, port i grupę. Zmodyfikowane okno z tym nowym polem pojawi się we wszystkich pakietach zawierających klienta MacroBASE (jTerm). Inne dostępne dla pakietów przełączniki
to:
jterm.exe /DIR="c:\alamakota"
zmienia podpowiadany zwykle w pakietach instalacyjnych katalog c:\macrologic
na wskazany przełącznikiem,
jterm.exe /GROUP="SuperPakiet"
zmienia podpowiadaną nazwę folderu w menu Start z domyślnego ”Macrologic” na ”Superpakiet”.
2.3 Środowisko MacroBASE dla Windows
2.3.1 Xpertis Server
Pakiet instalacyjny zawiera:
— serwer baz danych Xpertis Server dla systemu Windows (podczas instalacji możliwy wybór między wersją 32 i 64-bitową),
— serwer aplikacji MacroAppSERVER,
— klient serwera aplikacji jTerm,
— dodatkowe programy systemowe i narzędziowe, zestaw fontów MacroBAR do druku kodów kreskowych w układzie 128,
— komponenty MacroCRview do uruchamiania raportów Crystal Reports,
— Java(TM) SE Runtime Environment
— sterownik ODBC.
Jest to pakiet zawierający się również w opisanych powyżej instalacjach
całego pakietu Xpertis. Umożliwia zainstalowanie tylko modułów wykonawczych, czyli maszyny bazy danych, serwera aplikacji oraz klienta serwera aplikacji. Jeśli na liście komponentów do instalacji zaznaczony jest klient serwera
aplikacji jTerm, instalator poprosi o podanie parametrów połączenia z serwerem:
18
Rozdział II. Instalacja
adres serwera
nazwa (domenowa albo zadeklarowana w pliku /etc/hosts) albo
wprost adres IP serwera osiągalny z lokalizacji klienta,
port TCP/IP
numer portu na którym odbywać się będzie komunikacja,
grupa robocza
nazwa grupy roboczej której aplikacje będą dostępne do wyboru po uruchomieniu programu jTerm bez podania parametru -a. Jeśli pole pozostawimy puste, dostępna będzie lista aplikacji grupy default,
ścieżka do pliku z certyfikatem
wskazanie katalogu jest konieczne jesli połaczenia z serwerem aplikacji
maja byc szyfrowane przy uzyciu protokołu SSL.
W trakcie instalacji na serwerze użytkownik może wybrać dodatkowo następujące opcje:
— utworzenie skrótu do programu jTerm na pulpicie,
— utworzenie skrótu do aplikacji systemowych w menu Start (programu
[MacroPASS] służącego do kontroli dostępów i uprawnień)
— przypisanie rozszerzenia *.rpc do przeglądarki raportów CR (Crystal
Reports)
Dla systemów Windows NT/2000/2003/2008/XP/Vista/7 zalecane
jest uruchomienie serwera bazy danych jako usługi. Żeby program pracował
jako usługa należy ją zainstalować poprzez wywołanie z parametrem -i. Polecenie może mieć więc postać:
nserv32.exe -i -wpath
dla wersji 32-bitowej, lub
nserv64.exe -i -wpath
dla wersji 64-bitowej.
gdzie: path — ścieżka określająca katalog roboczy serwera bazy danych
Powinna zostać utworzona usługa systemowa o nazwie MacroBASE. Można ją uruchomić z linii komend poprzez wywołanie z parametrem -bv czyli:
nserv32.exe -bv
II.2. System Windows
dla wersji 32-bitowej, lub
nserv64.exe -bv
dla wersji 64-bitowej.
Domyślnie usługa uruchamiana jest na konto systemu operacyjnego.
W trybie pracy jako usługa, ewentualne błędy występujące podczas uruchomienia serwera nie są zgłaszane na ekranie tylko raportowane do pliku server.log w katalogu roboczym serwera. W przypadku wybrania
opcji instalacji sterownika ODBC, dla systemów operacyjnych w wersjach 64bitowych sterownik będzie zainstalowany w wersjach 32 i 64-bitowej.
2.3.2 Instalacja klienta serwera aplikacji — jTerm
Pakiet instalacyjny zawiera:
— klienta serwera aplikacji — jTerm,
— zestaw czcionek MacroBAR do druku kodów kreskowych w układzie
128,
— komponenty MacroCRview do uruchamiania raportów Crystal Reports,
— sterownik ODBC.
— Java(TM) SE Runtime Environment
Pakiet instaluje jedynie komponenty przeznaczone dla komputera klienckiego oraz sterownik ODBC. Jeśli sterownik ODBC jest już zainstalowany w innej wersji, zostanie wyświetlone ostrzeżenie z pytaniem, czy zastąpić istniejący
sterownik nowym. Podczas instalacji należy podać następujące parametry połączenia z serwerem:
adres serwera
nazwa (domenowa albo zadeklarowana w pliku /etc/hosts) albo
wprost adres IP serwera osiągalny z lokalizacji klienta,
port TCP/IP
numer portu na którym odbywać się będzie komunikacja,
grupa robocza
nazwa grupy roboczej której aplikacje będą dostępne do wyboru po uruchomieniu programu jTerm bez podania parametru -a. Jeśli pole pozostawimy puste, dostępna będzie lista aplikacji grupy default,
19
20
Rozdział II. Instalacja
ścieżka do pliku z certyfikatem
wskazanie katalogu jest konieczne jesli połaczenia z serwerem aplikacji
maja byc szyfrowane przy uzyciu protokołu SSL.
W trakcie instalacji użytkownik może wybrać dodatkowo następujące
opcje:
— utworzenie skrótu do programu jTerm na pulpicie,
— utworzenie skrótu do programu jTerm w menu Start,
— przypisanie rozszerzenia *.rpc do przeglądarki raportów CR (Crystal
Reports).
2.3.3 Instalacja środowiska programistycznego MacroBASE
Pakiet instalacyjny zawiera zestaw narzędzi służących do tworzenia, modyfikacji i pielęgnowania systemów użytkowych w technologii MacroBASE. W jego
skład wchodzą:
— MacroBASE Developer,
— MacroBUILDER — graficzny generator aplikacji,
— MacroEYTOR — edytor wspomagający pisanie aplikacji w technologii
MacroBASE,
— MacroBASE jTerm — klient serwera aplikacji jTerm (grafczna koncówka),
— MacroPASS —- aplikacja służąca do kontroli dostępów i uprawnień,
— Zestaw czcionek MacroBAR do druku kodów kreskowych w układzie
128,
— Komponenty MacroCRview do uruchamiania raportów Crystal Reports,
— Sterownik ODBC.
— Java(TM) SE Runtime Environment
— Aplikacja demonstracyjna
II.2. System Windows
Pakiet instalacyjny dostępny jest dla wszystkich pracowników i klientów poprzez portal Xpertis 24 (w portalu należy wybrać z menu pozycje:
[ Dystrybucja|Wersje instalacyjne] – wyświetlona zostanie strona umożliwiająca wskazanie wersji oprogramowania i wybór właściwego pakietu do pobrania
wraz ze zaserializowanym plikiem środowiska programistycznego – plik ten
jest unikalny dla danego numeru seryjnego (stąd w nazwie pliku znajduje się
numer seryjny oraz rozszerzenie .ser.zip)).
21
22
Rozdział II. Instalacja
Rozdział III
Architektura systemu
1 Elementy systemu
W skład systemu zarządzania bazą danych MacroBASE wchodzą następujące
elementy:
— programy i biblioteki:
MacroSERVER, MacroSERVER64 (nserv32.exe, nserv64.exe dla Windows)
serwer bazy danych w wersjach odpowiednio 32 oraz 64-bitowej,
MacroAppSERVER (mblaunch.exe)
serwer aplikacji. Jeśli serwer aplikacji pracuje w systemie Linux,
do obsługi każdego nowego klienta bazy danych tworzona jest kopia procesu MacroAppSERVER. Dla Windows dla każdego klienta
uruchamiany jest program mblogics.exe,
jTerm.jar
klient serwera aplikacji dla systemów Windows oraz Linux,
MacroADMIN (nserv32.exe -v)
program administracyjny,
MacroCOMM
odpowiada za komunikację pomiędzy windowsowym serwerem
komunikacyjnym, a serwerem bazy danych działającym pod Linuxem,
MacroCGI (mhtmlcgi.exe)
możliwość dostępu do danych z poziomu przeglądarki internetowej,
23
24
Rozdział III. Architektura systemu
MacroDEVICE (mdevice.exe)
umożliwia programom działającym w sieci dostęp do portów komputera, na którym program MacroDEVICE został uruchomiony,
MacroPRINTER (printer.exe)
kompilator opisu drukarki,
MacroREPORT (report.exe)
translator języka REPORT,
MacroTRANSFER (transfer.exe)
umożliwia konwersję istniejącej bazy danych do nowego formatu,
MacroIM.jar
serwer wiadomości,
MacroIMClient.jar
klient serwera wiadomości,
jConsole.jar
konsola serwera aplikacji dla systemów Windows oraz Linux
mbasic.dll
umożliwia zewnętrznym programom wykonanie formuł w wybranym systemie użytkowym,
crview.exe
przeglądarką sprawozdań stworzonych programem Crystal Reports w wersji 10 dla systemu Windows,
CRView.jar
przeglądarką sprawozdań stworzonych programem Crystal Reports w wersji 10 dla systemów Windows oraz Linux,
MacroUPDATE (mupdate.exe dla Windows)
program do pobierania i nanoszenia poprawek udostępnionych w
systemie SPIS,
MacroAppLOCKER (mblocker.exe dla Windows)
program służący do bezdialogowego wyrejestrowywania użytkowników oraz blokowania dostępu nowym użytkownikom,
MacroCliDOWN (mclidown.exe dla Windows)
program służący do pobrania aktualniej wersji oprogramowania
klienta bez uruchamiania jTerma,
MacroCliSYNC (mclisync.exe dla Windows)
program służący do naniesiena pobranych aktualizacji klienta pobranych przy pomocy programu MacroCliSYNC na bieżącą wersję,
III.1. Elementy systemu
— opisy drukarek (zbiory *.prt, źródła drs),
— zbiory konfiguracyjne (pliki *.cfg),
— formuły, procedury wbudowane oraz skompilowane wzorce sprawozdań
i sterowniki drukarek używane przez runtime, pasujące do maski __*.*, wyszukiwane w katalogu sysfml względem katalogu, w którym
znajduje się program obsługujący klienta (dla aplikacji uruchomionych
poprzez serwer aplikacji będzie to ścieżka do katalogu z uruchomionym
serwerem aplikacji),
— standardowe biblioteki (zbiory _*.*).
System użytkowy zawiera:
— deklarację ścieżek (zbiór *.pth),
— definicje systemu (zbiór *.def),
— ochrony systemu (zbiór *.psw),
— podprogramy zewnętrzne (zbiory *.fml),
— podprogramy zewnętrzne w wersji standardowej (zbiory *.fml.std),
— procedury wbudowane (zbiory *.prc),
— procedury wbudowane w wersji standardowej (zbiory *.prc.std),
— wzorce sprawozdań (zbiory *.rpt, źródła *.rpm),
— wzorce sprawozdań w wersji standardowej (zbiory *.rpt.std, źródła
*.rpm.std),
— pliki z aktualizacjami podprogramów zewnętrznych, porcedur, wzorców
sprawozdań (zbiory *.*.numer_rewizji.spis,
— dane (zbiory *.mdb, pliki indeksowe *.ndx i *.del),
— historię dostępu (zbiory *.log).
— system pomocy do aplikacji, dla użytkownika (zbiory *.chm, *.jhm).
25
26
Rozdział III. Architektura systemu
2 Definicja systemu
Definicja systemu użytkowego (inaczej słownik bazy danych) jest tworzona
przez projektanta-programistę przy pomocy generatora zastosowań MacroBUILDER. Program ten wchodzi w skład pakietu Środowisko Programistyczne. Jego opis jest zamieszczony w dołączanym do tego pakietu podręczniku.
Definicja systemu zawiera w szczególności:
— schemat bazy danych,
— sposoby prezentacji bazy danych,
— przepływ sterowania programu,
— podprogramy w języku Formula.
Nazwa zbioru zawierającego definicję utworzona jest z nazwy systemu
z rozszerzeniem .def, np. demo.def.
W systemie Linux plik definicji systemu musi mieć prawa tylko do odczytu
oraz ustawiony bit S. Należy zatem nadać uprawnienia 4400, 4440 lub 4444, w
zależności, czy plik ma być dostępny do czytania również dla grupy i pozostałych użytkowników systemu.
3 Podprogramy zewnętrzne
System zarządzania bazą danych MacroBASE pozwala dołączać zewnętrzne
podprogramy w postaci formuł zapisanych w zbiorach *.fml, pod warunkiem, że definicja systemu dopuszcza taką możliwość.
3.1 Formuły
Interpreter języka Formula wykonuje procedury zawarte w zbiorach tekstowych z rozszerzeniem .fml. Opis tego języka znajduje się w oddzielnym podręczniku (Język Formula+).
3.2 Wzorce wydruków
Wzorce wydruków są przygotowywane w postaci plików tekstowych (.rpm)
zgodnie ze składnią języka generowania sprawozdań Report. Wzorce sprawozdań są wstępnie przetwarzane przy pomocy translatora MacroREPORT
III.4. Maszyna bazy danych
(report.exe dla wersji windowsowej). Skompilowane sprawozdania przechowywane są w zbiorach z rozszerzeniem .rpt. Opis programu MacroREPORT jest zamieszczony w odrębnym podręczniku (Język wydruków Report+).
4 Maszyna bazy danych
Serwer bazy danych jest odpowiedzialny za dostęp do danych i kolejkowanie
zadań. Wykonuje kolejno elementarne komendy dostępu do bazy danych pełniąc zarazem funkcję arbitra. Uruchomienie tego programu musi być wcześniejsze niż pierwsze wywołanie programu wykonawczego. Zakończenie jego
pracy uniemożliwia dalszą pracę systemom użytkowym. Serwer bazy danych
może być uruchomiony z poniższymi opcjami:
-ppath
podanie ścieżki dostępu path do katalogu z plikiem konfiguracyjnym
o nazwie macro.cfg. Jeśli w podanym katalogu nie ma pliku konfiguracyjnego, to przyjmowane są wartości domyślne dla parametrów programu. Dodatkowo w wersji linuxowej we wskazanym katalogu będzie
zapisywany plik server.log, w którym znajdują się informacje o uruchomieniu, zatrzymaniu, wyrejestrowaniu użytkowników poprzez program MacroADMIN oraz ewentualnych błędach w działaniu.
-wpath
podanie ścieżki dostępu path do katalogu roboczego maszyny bazy
danych. Tu będą również trzymane pliki z opisem przeprowadzanych
transakcji (*.bi?), wykorzystywane przy uruchamianiu serwera bazy
danych po awarii. Jeśli parametr zostanie pominięty, to pliki robocze będą w zależności od systemu trzymane:
— Linux: w katalogu wywołania,
— Windows: w katalogu wskazywanym przez wartość klucza rejestru \SOFTWARE\macrosoft\nserv32\workdir w gałęzi
HKEY_CURRENT_USER rejestru systemowego. Jeśli klucz nie jest
zdefiniowany, to w katalogu wskazywanym zmienną systemową
TEMP.
-i
wywołąnie z opcją pozwala na wprowadzenie klucza. Dodatkowo w wersji windowsowej serwer bazy danych instaluje się jako usługa o nazwie
MacroBASE. Podczas instalacji usługi nie jest przyjmowana żadna domyślna lokalizacja katalogu roboczego, więc konieczne jest w tym wypadku, określenie parametru -w,
27
28
Rozdział III. Architektura systemu
Dodatkowo dla serwera dla systemu Windows dostępne są opcje wywołania:
odinstalowanie usługi MacroBASE,
-u
-uv
odinstalowanie usługi MacroBASE tylko z katalogu instalacji usługi,
uruchomienie usługi MacroBASE,
-b
-bv
uruchomienie usługi MacroBASE tylko z katalogu instalacji usługi,
zatrzymanie usługi MacroBASE,
-e
-ev
zatrzymanie usługi MacroBASE tylko z katalogu instalacji usługi,
zatrzymanie usługi MacroBASE z zarejestrowanymi użytkownikami,
-f
-fv
zatrzymanie usługi MacroBASE z zarejestrowanymi użytkownikami tylko z katalogu instalacji usługi,
-n
pominięcie dialogów, umożliwia wraz z opcjami -b i -e uruchomienie
i zatrzymanie usługi w przetwarzaniu wsadowym,
-v
uruchomienie programu umożliwiającego administrowanie serwerem
działającym jako usługa,
-? (lub nieprawidłowe wywołanie)
pomoc.
Program maszyny bazy danych zawiera między innymi mechanizmy:
— blokowania tabel na trzech poziomach wyłączności,
— definiowania transakcji z gwarancją zachowania spójności danych zarówno przy jej wycofaniu, jak i awarii systemu,
— blokowania zapisu i odczytu rekordów.
III.5. Serwer aplikacji
29
Proces serwera bazy danych komunikuje się z procesami serwera aplikacji
uruchomionymi na tym samym komputerze poprzez mechanizmy synchronizacyjne systemu operacyjnego.
W przypadku, gdy serwer bazy danych działa w systemie Linux, natomiast
serwer aplikacji uruchomiony jest na innym komputerze z systemem Windows, komunikacja między nimi odbywa się przez sieć, za pośrednictwem dodatkowego programu o nazwie MacroCOMM po stronie systemu Linux oraz
serwera komunikacyjnego po stronie systemu Windows.
Program MacroCOMM wykorzystywany jest również do komunikacji z
serwerem bazy danych zainstalowanym na komputerze z systemem Linux
w przypadku wykonywania programów przez MacroCGI lub wykorzystania
biblioteki mbasic.dll na stanowiskach z zainstalowanym systemem Windows.
W przypadku łączenia się z serwerem bazy danych przez sieć, wymagane jest wskazanie w pliku z deklaracją ścieżek (plik pth aplikacji) ścieżki do
zbiorów z danymi zawierającej pomiędzy znakami | nazwę lub numer IP komputera, na którym znajdują się zbiory z danymi. Dla lokalnego połączenia taki
wpis w pliku z deklaracją ścieżek determinuje połączenie sieciowe. Komunikacja odbywać się będzie przez dodatkowy serwer komunikacyjny, w efekcie
czego zostanie zużyte dodatkowe stanowisko z puli dostępnych w ramach licencji.
5 Serwer aplikacji
MacroAppSERVER (mblaunch.exe dla Windows) umożliwia pracę z systemami w sieci lokalnej i rozległej w środowisku graficznym. Po uruchomieniu, serwer aplikacji w pierwszej kolejności poszukuje pliku konfiguracyjnego o nazwie launcher.cfg. Plik ten będzie szukany:
— w katalogu podanym po opcji -p. Ścieżka dostępu do tego katalogu nie
może zawierać spacji
— w katalogu, w którym znajduje się uruchamiany plik, o ile nie podano
opcji -p przy wywołaniu
Plik launcher.cfg ma postać:
cluster_conf_file = ścieżka_do_cluster.cfg
tcp_port = nr_portu
net_error_delay = czas_wznawiania_połączenia
auto_update = mechanizm_automatycznej_auktualizacji_klienta_jest_wlaczony
macroim = serwer_wiadomosci_bezposrednich_uruchamiany_przy_starcie_serwera_aplikacji
macroim_port = nr_portu
macroim_descr = nazwa_serwera_komunikacyjnego
30
Rozdział III. Architektura systemu
gdzie znaczenia parametrów są następujące:
cluster_conf_file
przypisuje się ścieżkę, do katalogu, w którym ma być poszukiwany plik
cluster.cfg. Jeśli linia ta zostanie pominięta, to plik cluster.cfg
będzie poszukiwany w tym samym katalogu, w którym był poszukiwany
plik launcher.cfg,
tcp_port
przypisuje się numer portu protokołu TCP/IP, po którym będzie następować komunikacja. Jeśli linia zostanie pominięta, to przyjęty zostanie
port 5580,
net_error_delay
parametr określający czas (w sekundach), w ciągu którego, po stwierdzeniu zerwania komunikacji pomiędzy klientem a serwerem aplikacji, możliwe jest jej wznowienie w ramach tej samej sesji. Po zerwaniu
połączenia serwer przechodzi w stan oczekiwania na nowe połączenie,
przez czas określony parametrem. Domyślną wartością parametru jest
30 sekund. Wartość zero oznacza wyłączenie mechanizmu powtórnego nawiązywania połączenia. Klient po zerwaniu połączenia próbuje je
ponownie nawiązać przez czas określony parametrem powiększonym
o jedną minutę. Po zerwaniu połączenia z serwerem aplikacji na końcówce pojawi się w linii statusu ikona o tym informująca. Jeśli połączenie
uda się zestawić ponownie, to ikona nie będzie już wyświetlana,
auto_update
określa czy mechanizm automatycznej auktualizacji klienta jest włączony. Przyjmuje wartosci 0 lub 1, wartością domyślną jest 1,
macroim
(opcjonalny) określa czy serwer wiadomości bezpośrednich ma być uruchamiany przy starcie serwera aplikacji. Przyjmuje wartosci 0 lub 1, wartością domyślną jest 1,
macroim_port
(opcjonalny) numer portu serwera wiadomosci bezposrednich, wartością domyślną jest 7777,
macroim_descr
(opcjonalny) opis serwera wiadomości bezpośrednich, wartością domyślną jest pusty string.
III.5. Serwer aplikacji
31
Wszystkie linie, w których pierwszym znakiem różnym od spacji i tabulacji
jest hash (#), są ignorowane.
Serwer aplikacji przy starcie czyta ten właśnie plik, a następnie obsługuje zgłoszenia od klientów (jTerm). Serwer aplikacji może uruchomić
jedynie te programy, które są wyszczególnione w pliku konfiguracyjnym
cluster.cfg. Struktura tego pliku jest opisana w odrębnym rozdziale. Po
wybraniu przez użytkownika aplikacji opisanej w pliku cluster.cfg, serwer aplikacji weryfikuje nazwę użytkownika i hasło, a następnie uruchamia
proces, który będzie wykonywał aplikację. Jeśli serwer aplikacji pracuje w systemie Linux, do obsługi każdego nowego klienta bazy danych tworzona jest
kopia procesu MacroAppSERVER. Zatem procesów o nazwie MacroAppSERVER powinno być o jeden więcej, niż pracujących klientów. Dla Windows
dla każdego klienta uruchamiany jest program mblogics.exe. Proces wykonujący aplikację, komunikuje się już bezpośrednio z programem klienckim,
w celu pobierania akcji użytkownika i przekazywania danych do wyświetlenia,
oraz z drugiej strony, z serwerem bazy danych w celu odczytu i zapisu danych
do bazy.
Dzięki odciążeniu końcówki klienckiej możliwa jest praca z systemem również w sieci rozległej. Do wymiany danych pomiędzy końcówką, a serwerem
aplikacji wystarczy łącze modemowe — przesyłane są tylko wprowadzane dane
i teksty do wyświetlania. Umieszczenie serwera aplikacji na tym samym komputerze, na którym działa serwer bazy danych pozwala znacząco zmniejszyć
liczbę przesyłanych pakietów sieciowych również w sieci lokalnej, ponieważ
komunikacja odbywać się będzie jedynie pomiędzy końcówkami a serwerem
aplikacji.
Dla serwera aplikacji są dostępne następujące opcje wywołania
— dla Windows:
mblaunch.exe [-ppath] [-wpath] [-cpass] [-kpath] [-i | -u | -uv] [-b | -bv | -e |
— dla Linuxa:
MacroAppSERVER -ppath [-wpath] [-cpass | -stop] [-kpath]
-p path
ścieżka do katalogu z plikiem launcher.cfg lub cluster.cfg
-w path
ścieżka do katalogu, w którym będą zapisywane informacje przez serwer
aplikacji, w szczególności plik error.log z informacjami o błędach.
32
Rozdział III. Architektura systemu
Pominięcie opcji spowoduje, że wspomniany plik będzie tworzony w katalogu, w którym szukany byłby plik cluster.cfg,
-k path
ścieżka do katalogu z plikami server.pem z kluczem prywatnym i
certificate.der zawierającym certyfikat. Wskazanie katalogu jest
konieczne jeśli połączenia z serwerem aplikacji mają być szyfrowane
przy użyciu protokołu SSL,
-stop
zatrzymanie serwera aplikacji
-c
ustalenie hasła dla konsoli
Dodatkowo, dla systemów NT/2000/2003/2008/XP/Vista/7 dostępne są opcje wywołania, umożliwiające zainstalowanie, uruchomienie, zatrzymanie i odinstalowanie serwera aplikacji jako usługi:
-i
zainstalowanie serwera aplikacji jako usługi
-u
odinstalowania usługi serwera aplikacji
-uv
odinstalowania usługi serwera aplikacji tylko z katalogu instalacji usługi
-b
uruchomienie usługi serwera aplikacji
-bv
uruchomienie usługi serwera aplikacji tylko z katalogu instalacji usługi
-e
zatrzymanie usługi serwera aplikacji
-ev
zatrzymanie usługi serwera aplikacji tylko z katalogu instalacji usługi
-n
bez komunikatów o ewentualnych błędach i ostrzeżeniach, użycie tej
opcji jest konieczne dla skryptów wsadowych
-? (lub nieprawidłowe wywołanie)
pomoc.
III.6. Plik konfiguracyjny cluster.cfg
6 Plik konfiguracyjny cluster.cfg
Plik cluster.cfg określa jakie aplikacje mają być dostępne na danym serwerze aplikacji, oraz ustala ewentualne limity liczby uruchomień. Plik ten ma
postać tekstową, składa się z sekcji rozpoczynających się od linii, w której w nawiasach kwadratowych podawana jest nazwa. Dalej następują przypisania wartości poszczególnym parametrom. Wyróżniane są dwa rodzaje sekcji. Pierwszy
rodzaj opisuje programy, które mogą być uruchamiane przez serwer aplikacji.
Nazwa takiej sekcji nie może rozpoczynać się od znaku wykrzyknika i procenta, gdyż znaki te zarezerwowane są dla drugiej grupy, czyli sekcji specjalnych.
Wszystkie linie, w których pierwszym znakiem różnym od spacji i tabulacji
jest hash (#), są ignorowane. Rejestr liter w całym pliku cluster.cfg jest
istotny. Plik konfiguracyjny cluster.cfg jest wyszukiwany w katalogu bieżącym dla MacroAppSERVER (mblaunch.exe dla Windows) lub w katalogu
podanym po opcji -p w trakcie uruchomienia. Jego położenie może też być
zdefiniowane w pliku launcher.cfg.
6.1 Sekcje aplikacji
Dla każdej aplikacji, która ma być uruchamiana na serwerze należy wpisać oddzielną sekcję o następującej postaci:
[identyfikator]
name = nazwa
path = ścieżka
caption = opis_w_menu
hidden = ukryta
cgi_html = źródło_cgi
cgi_output = wynik_cgi
max_users = wszyscy_użytkownicy
max_user_connections = jeden_użytkownik
max_fork_users = użytkownicy_fork_hid
max_fork_user_connections = użytkownik_fork_hid
max_mbasic_users = użytkownicy_mbasic
max_mbasic_user_connections = użytkownik_mbasic
W powyższym fragmencie wartości poszczególnych parametrów oznaczają:
identyfikator
nazwa sekcji, dowolny ciąg znaków, poprzez który będzie identyfikowana sekcja. Każda sekcja musi mieć inną nazwę i nie może rozpoczynać
się od znaków ! i %. Wystąpienie parametru jest obowiązkowe,
33
34
Rozdział III. Architektura systemu
nazwa
nazwa aplikacji czyli nazwa definicji systemu bez rozszerzenia. Pominięcie tej linii spowoduje przyjęcie nazwy identycznej z nazwą sekcji.
Wartość parametru nie może zawierać wielkich liter,
ścieżka
ścieżka do katalogu, w którym znajduje się zbiór z deklaracją ścieżek
(nazwa.pth). Nie dopuszcza się używania względnych ścieżek. Wystąpienie parametru jest obowiązkowe,
opis_w_menu
tekst do menu wyboru aplikacji. Pojawia się również w opisie aplikacji
przy podawaniu hasła. Pominięcie linii z caption spowoduje przyjęcie
jako tekstu do menu nazwy sekcji,
ukryta
jeśli przyjmie wartość 1, to aplikacja nie będzie dostępna do wyboru
z menu. Przypisanie innej wartości lub pominięcie linii z hidden oznacza, że będzie do wyboru z menu,
źródło_cgi
zaznaczenie, że aplikacja ma być automatycznie uruchamiana przez MacroCGI. Po zakończeniu uruchomionego w ten sposób programu będzie
on ponownie uruchamiany. Wartości parametru przypisuje się nazwę
pliku, która ma być przypisana do parametru HTML_TEMPLATE_PTH
w momencie uruchomienia programu,
cgi_output
nazwa pliku, do którego ma zostać przekierowane standardowe wyjście MacroCGI uruchomionego gdy zadeklarowany jest parametr
zrodlo_cgi. Plik ten będzie wyszukiwany zgodnie z deklaracją
ścieżek. Domyślnie: standardowe wyjście będzie zapisywane do pliku
appcgi.log w katalogu z programami wykonawczymi,
wszyscy_użytkownicy
maksymalna liczba dostępów licencyjnych jaka może być zajęta przez
dany element klastra (cały serwer, grupa, aplikacja). Przypisanie wartości -1 (lub pominięcie parametru) oznacza brak ograniczeń na łączenie
się z aplikacją. Wartość 0 powoduje zablokowanie odpowiednich połączeń,
III.6. Plik konfiguracyjny cluster.cfg
35
jeden_użytkownik
maksymalna liczba dostępów licencyjnych jaka może być zajęta przez
pojedynczego użytkownika dla danego elementu klastra. Przypisanie
wartości -1 (lub pominięcie parametru) oznacza brak ograniczeń na łączenie się z aplikacją. Wartość 0 powoduje zablokowanie odpowiednich
połączeń,
użytkownicy_fork_hid
maksymalna liczba interaktywnych dostępów, nie wliczanych do puli
licencji, jaka może być zajęta przez dany element klastra (cały serwer,
grupa, aplikacja). Przypisanie wartości -1 (lub pominięcie parametru)
oznacza brak ograniczeń na łączenie się z aplikacja. Wartość 0 powoduje zablokowanie odpowiednich połączeń,
użytkownik_fork_hid
maksymalna liczba interaktywnych dostępów, nie wliczanych do puli licencji, jaka może być zajęta przez pojedynczego użytkownika dla danego elementu klastra. Przypisanie wartości -1 (lub pominięcie parametru)
oznacza brak ograniczeń na łączenie się z aplikacja. Wartość 0 powoduje
zablokowanie odpowiednich połączeń,
użytkownicy_mbasic
maksymalna liczba jednoczesnych połączeń poprzez bibliotekę mbasic.dll
(czyli w szczególności sterownik ODBC). Przypisanie wartości -1 (lub
pominięcie parametru) oznacza brak ograniczeń na łączenie się z aplikacja. Wartość 0 powoduje zablokowanie odpowiednich połączeń,
użytkownik_mbasic
maksymalna liczba jednoczesnych połączeń poprzez bibliotekę mbasic.dll
(czyli w szczególności sterownik ODBC) pochodzących od jednego
użytkownika. Przypisanie wartości -1 (lub pominięcie parametru) oznacza brak ograniczeń na łączenie się z aplikacja. Wartość 0 powoduje zablokowanie odpowiednich połączeń.
Znaki spacji przylegające do znaku równości są ignorowane. Przykładowa definicja sekcji aplikacji może wyglądać:
[fiks dw]
name = fiks
path = c:\dw\fiks
caption = Xpertis Finanse i księgowość
max_users = 3
36
Rozdział III. Architektura systemu
max_user_connections = 1
max_fork_users = 2
max_mbasic_user_connections = 0
Powyższy wpis oznacza, że z aplikacji Xpertis Finanse i księgowość będzie mogło korzystać naraz maksymalnie trzech różnych użytkowników oraz żaden
z użytkowników nie będzie mógł się zarejestrować więcej niż jeden raz. Dodatkowo, użytkownicy aplikacji nie będą mogli mieć więcej niż dwóch połączeń
poprzez fork_hid naraz (zatem będą mogli zużyć naraz co najwyżej dwa
stanowiska z puli fork_users na serwerze). Żaden z użytkowników nie będzie mógł korzystać z połączeń poprzez mbasic.dll, czyli w szczególności
pobierać danych poprzez sterownik ODBC.
W opisie sekcji aplikacji można zaznaczyć, że ma ona być automatycznie
uruchamiana poprzez MacroCGI. Po zakończeniu uruchomionego w ten sposób programu, będzie on ponownie uruchamiany. Uruchamianie programu
MarcroCGI będzie miało miejsce wtedy, gdy zdefiniowany będzie parametr
cgi_html. Przypisuje się do niego nazwę pliku, która ma być przypisana
do parametru HTML_TEMPLATE_PTH w momencie uruchomienia programu.
Dodatkowo można zdefiniować parametr cgi_output, do którego przypisana będzie nazwa pliku, do którego będzie zapisywane standardowe wyjście z
programu. Plik ten będzie wyszukiwany zgodnie z deklaracją ścieżek. Jeśli parametr nie zostanie zdefiniowanym, to standardowe wyjście będzie zapisywane
w pliku appcgi.log w katalogu z programami wykonawczymi. Przykładowo, po zdefiniowaniu aplikacji alert1 będzie ona automatycznie uruchamiana poprzez MacroCGI zaraz po starcie serwera aplikacji:
[alert1]
name=alert
path=c:\alert
cgi_output = alert1.log
cgi_html = alert1.htm
6.2 Sekcje specjalne
Sekcje specjalne mogą wystąpić opcjonalnie i można je podzielić na dwa rodzaje: definicje grup aplikacji i ograniczenia dostępów do grup aplikacji i serwera.
Jeśli w pliku cluster.cfg będzie sekcja [!Groups], to podział na grupy nastąpi zgodnie z podanymi definicjami. Umożliwia to tworzenie menu
z wyborem aplikacji z grupy przy starcie programu. W przypadku, jeśli nie
III.6. Plik konfiguracyjny cluster.cfg
zdefiniuje się żadnej grupy, to wszystkie aplikacje zostaną przypisane do grupy
o nazwie default. Każdy niepusty wiersz opisuje nową grupę. Musi się zaczynać od nazwy grupy (może składać się z małych liter łacińskich, cyfr oraz
znaku podkreślenia). Po znaku równości następuje wyliczenie aplikacji należących do danej grupy. Aplikacje określa się poprzez podanie nazwy sekcji.
Kolejne nazwy sekcji oddzielane są średnikami. Spacje dokoła znaku równości są ignorowane, zaś pozostałe są traktowane jako część nazwy grupy. W sekcji [!Groups] można wielokrotnie przypisywać systemy do tej samej grupy.
W grupie będą wtedy dostępne systemy ze wszystkich przypisań. Np. w poniższej definicji do grupy personel zostaną przypisane systemy kali, rcp i zzl
[!Groups]
personel = kali;rcp
personel = zzl
W grupie mogą występować aplikacje o identycznych nazwach. Jeśli istnieje potrzeba dodania drugiej aplikacji o takiej samej nazwie, to można za
nazwą sekcji podać w nawiasach nową nazwę. Nazwa, podobnie do definiowanych w MacroBUILDERZE, może składać się jedynie z małych liter łacińskich,
cyfr oraz znaku podkreślenia. Od tej pory, nazwa podana w nawiasach będzie
identyfikować aplikację w grupie.
Dla przykładu, przypuśćmy, że dana osoba obsługuje dwie kopie systemu
Xpertis Kadry i Płace (np. dla dwóch różnych firm). Można wtedy umieścić
oba systemy w jednej grupie, jednak przynajmniej jeden z nich musi zostać
przenazwany. Zbiór cluster.cfg mógłby zatem wyglądać:
[Firma 1]
name = kali
path = c:\f1\kali
[Firma 2]
name = kali
path = c:\f2\kali
[!Groups]
default = Firma 1[kali_f1];Firma 2[kali_f2]
Korzystając z faktu, iż domyślny alias dla aplikacji w grupie pokrywa się
z identyfikatorem sekcji opisującej aplikację, w przypadku kilku aplikacji o
tej samej nazwie nie trzeba zawsze definiować aliasów. Zatem powyższy zbiór
cluster.cfg mógłby wyglądać również tak:
37
38
Rozdział III. Architektura systemu
[kali_f1]
name = kali
path = c:\f1\kali
[kali_f2]
name = kali
path = c:\f1\kali
[!Groups]
default =kali_f1;kali_f2
Drugi typ sekcji specjalnych to sekcje definiujące ograniczenia dostępu do
poszczególnych grup aplikacji i całego serwera aplikacji. Dla każdej zdefiniowanej grupy można zapisać nową sekcję o nazwie powstającej z dopisania znaku % na początku nazwy grupy. Sekcja taka ma postać:
[%nazwa_grupy]
caption = menu
hidden = ukryta
max_users = wszyscy_użytkownicy
max_user_connections = jeden_użytkownik
max_fork_users = użytkownicy_fork_hid
max_fork_user_connections = użytkownik_fork_hid
max_mbasic_users = użytkownicy_mbasic
max_mbasic_user_connections = użytkownik_mbasic
W powyższym fragmencie wartości poszczególnych parametrów oznaczają:
menu
określa pod jaką nazwą bieżąca grupa ma być dostępna w dialogu do
wyboru grupy,
ukryta
określa, czy bieżąca grupa ma być dostępna w dialogu do wyboru grupy
(jeśli przyjmie wartość 1, to grupa nie będzie dostępna).
Znaczenie pozostałych ograniczeń jest takie samo jak dla aplikacji. Dla przykładu, po zdefiniowaniu w cluster.cfg:
[%finanse]
max_users = 3
max_mbasic_user_connections = 1
III.7. Klient serwera aplikacji jTerm
w grupie finanse naraz zarejestrowanych będzie mogło być trzech użytkowników. Żaden z użytkowników nie będzie mógł mieć naraz więcej niż jednego
połączenia poprzez mbasic.dll, czyli np. nie będzie mógł otworzyć więcej niż jednego sprawozdania Crystal Reports. Nie ma natomiast nakładanych
żadnych ograniczeń dla użytkowników systemów w grupie na połączenia poprzez fork_hid.
Podobne ograniczenia można wprowadzić również dla serwera aplikacji. Powyższe parametry należy wtedy zdefiniować w sekcji o nazwie
!AppSERVER. Np. po zapisaniu:
[!AppSERVER]
max_mbasic_users = 0
zabroni się jakichkolwiek połączeń poprzez bibliotekę mbasic.dll, niezależnie od ustawień parametru w obrębie grupy. Zatem użytkownicy nie będą
mogli poprzez serwer aplikacji korzystać ze sterownika ODBC, a co za tym
idzie, nie mogą uruchamiać sprawozdań Crystal Reports.
Wszystkie ograniczenia dostępu można również modyfikować przy uruchomionym serwerze aplikacji, jednak wtedy nie można modyfikować pliku
wprost, tylko pośrednio, poprzez program MacroCONSOLE. Należy wybrać zasób, do którego dostęp chcemy zmodyfikować (serwer, grupę, aplikację) i wybrać Ograniczenia. Uwaga: po uruchomieniu konsoli wczytywana jest do niej
taka zawartość pliku cluster.cfg, jaka obowiązywała w momencie uruchomienia serwera aplikacji. Jeśli po starcie serwera plik cluster.cfg był
modyfikowany w inny sposób niż za pośrednictwem konsoli, to zmiany te zostaną utracone po zapisaniu zmian konfiguracji w konsoli.
W cluster.cfg polskie znaki diakrytyczne są traktowane tak jakby ich
kodowanie było w standardzie windows-1250.
7 Klient serwera aplikacji jTerm
Klient serwera aplikacji — cienki klient (jTerm.jar) służy do uruchamiania systemów na komputerach z zainstalowanym systemem operacyjnym
Windows lub Linux zarówno w sieci lokalnej jak i rozległej. Po nawiązaniu
łączności z serwerem aplikacji, tworzony jest nowy proces obsługujący aplikację po stronie serwera. Właśnie te procesy komunikują się z maszyną bazy
danych i wykonują formuły. Pomiędzy klientem a serwerem aplikacji przesyłane są tylko wprowadzane dane i teksty do wyświetlania. Do przesłania takiej
ilości danych wystarczy łącze modemowe. Klient jest wspólny dla serwera aplikacji dla Windows i dla Linuxa.
39
40
Rozdział III. Architektura systemu
Do poprawnego działania graficznej końcówki jTerm konieczne jest zainstalowanie oprogramowania Java dystrybuowanej przez ORACLE (dawniej
Sun Microsystems) w wersji 32 bitowej oznaczonej co najmniej Version 7. Programu nie można uruchomić wykorzystując Javę w wersji Version 6 ani w wersji 64-bitowej. Aby się dowiedzieć, jaka jest aktualnie zainstalowana wersja, wystarczy wywołać polecenie:
java -version
Dla wspomnianej wymaganej wersji może to być wynik postaci:
java version "1.7.0_13"
W przypadku braku właściwej wersji istnieje możliwość automatycznego
pobrania i zainstalowania odpowiedniej wersji z serwera www.macrologic.pl.
Jeśli jTerm będzie uruchomiony nieprawidłową wersją, zostanie wyświetlone
pytanie, czy ma być pobrana właściwa wersja Javy. W przypadku odpowiedzi
Tak, program instalacyjny będzie pobrany poprzez Internet, a następnie zainstalowany w systemie. Pobrana wersja Javy będzie instalowana obok bieżącej
wersji, nie zmieniając domyślnej wersji Javy. Wspomniana funkcjonalność jest
dostępna tylko dla końcówek działających w systemie Windows. Jeśli w systemie zostanie zdefiniowana zmienna MACRO_JAVA_HOME, to programy będą
uruchamiać Javę ze ścieżki:
%MACRO_JAVA_HOME%\bin\java.exe
dla systemu Windows, lub
$MACRO_JAVA_HOME/bin/java
dla systemu linux. W przypadku jTerma, jeśli wersja Javy będzie wcześniejsza niż 7, to również zostanie uruchomiona Java, którą wskazuje zmienna
MACRO_JAVA_HOME.
W systemie Linux wymagane jest dodatkowo zainstalowanie środowiska
X-Windows.
Końcówkę jTerm należy uruchamiać poprzez wywołanie w katalogu, w którym jest zainstalowana, poleceniem:
java [-Djava.library.path=path] -jar jTerm.jar [adres[:port]] [-g]
[-a] [-kpath] [-q |-qcard |-qfile |-qldap] [-d | -v[nazwa] |-v2] [-ud] [-ec czas] [-?]
lub
javaw.exe [-Djava.library.path=path] -jar jTerm.jar [adres[:port]] [-g]
[-a] [-kpath] [-q |-qcard |-qfile |-qldap] [-d |-v[nazwa] |-v2] [-ud] [-ec czas] [-?]
III.7. Klient serwera aplikacji jTerm
gdzie drugie wywołanie jest dla systemu Windows, bez konsoli Javy. Poszczególne argumenty oznaczają odpowiednio:
Djava.library.path= -path
ścieżka do katalogu z biblioteką termnet,
adres
numer IP lub nazwa komputera z serwerem aplikacji, domyślnie adres
komputera, na którym uruchamiany jest program,
port
numer portu protokołu TCP/IP, po którym będzie następować komunikacja, domyślnie 5580,
-g group
jako group podaje się nazwę grupy, z której ma być uruchomiona aplikacja, domyślnie jest to nazwa default. W wywołaniu jTerma, można
przekazać jako parametr opcję -g bez podania nazwy grupy, pojawi się
wówczas dialog, w którym będą do wyboru wszystkie nieukryte grupy
zdefiniowane w pliku cluster.cfg,
-a appl
jako -a appl podaje się nazwę aplikacji, która ma być uruchomiona.
Jeśli w definicji grupy, aplikacja jest przenazwana (określona została nowa nazwa w grupie), to jako appl podaje się tę właśnie nazwę. Pominięcie opcji oznacza, że zostanie wyświetlone menu wyboru aplikacji dostępnych w grupie. Jeśli w grupie byłaby dostępna tylko jedna aplikacja
zdefiniowana bez cechy hidden=1, to zostanie ona automatycznie uruchomiona, bez wyświetlania menu wyboru,
-k path
ścieżka do pliku z certyfikatem serwera aplikacji, z nazwą pliku włącznie,
-q
domyślnym sposobem uwierzytelniania będzie karta SmartCard,
-qcard
domyślnym sposobem uwierzytelniania będzie karta SmartCard,
-qfile
domyślnym sposobem uwierzytelniania będzie certyfikat z pliku,
-qldap
domyślnym sposobem uwierzytelniania będzie Active Directory,
41
42
Rozdział III. Architektura systemu
-d
włączona będzie możliwość użycia debuggera,
-v
profiler formuli włączony przez czas działania programu,
-v nazwa
zapis działania profilera do pliku o nazwie składającej się z małych liter
alfabetu łacińskiego, cyfr, znaku podkreślenia,
-v2
profiler formuli włączany opcjonalnie przez użytkownika,
-ud
nie pobieraj aktualizacji z serwera aplikacji,
-ec czas
rejestrowanie liczby wywołań procedur, z wyrażonym liczbowo czasem
w minutach, co ile ma nastąpić zapis cząstkowy
-?
wyświetlone zostanie okno pomocy prezentujące parametry wywołania
programu.
Ustawienia adresu serwera aplikacji, numeru portu oraz ścieżkę do pliku z certyfikatem można zmienić za pomocą funkcji MacroAppSERVER:
Ustawienia dostępnej w menu Plik.
W przypadku pracy z kilkoma programami naraz (lub jeśli się pojawi błąd
o braku pamięci), należy wywołać program dodatkowo z opcją -Xmx — zwiększającą pamięć dostępną dla programu. Np. wywołanie programu mogłoby
wyglądać:
javaw.exe -Djava.library.path=. -Xmx512M -jar
jTerm.jar
serwer -g firma -a fiks
Dla ułatwienia rejestrowania w systemie można ustawić domyślną nazwę użytkownika. Jeśli zostanie zdefiniowana zmienna systemowa o nazwie
MACROLOGIN, to jej wartość będzie traktowana jako domyślna nazwa użytkownika.
Aby dostępny był debugger Formuli+ należy dodać do opcji wywołania
klienta parametr -d. Tak uruchomiony system udostępni dodatkową ikonę na
pasku pod menu. Pracę z debuggerem rozpoczyna się przez wybór tej właśnie ikony lub naciśnięcie klawiszy Ctrl+D. Uruchomienie debuggera będzie
jednak możliwe tylko wtedy, gdy zarejestrowany użytkownik będzie w grupie
ochron o nazwie wdrożenia.
III.8. Katalog kopii
W debuggerze można wykonywać formułę bez kontroli struktur hierarchicznych i unikalności indeksów. Opcja ma wpływ na działanie funkcji put
i umożliwia modyfikowanie rekordów bez konieczności zachowania poprawności struktury hierarchicznej dla tabel z polem typu TREE_REF, przez co
umożliwia naprawę ewentualnych uszkodzeń tej struktury. Dodatkowo funkcja put sprawdza, czy indeks z atrybutem Drzewo nie jest unikatowy, jeśli tak
to zgłasza błąd. Jeśli w tabelach jest podwojony klucz dla indeksu oznaczonego
jako unikalny, wykorzystując powyższą opcję można poprawić dane poprzez
usunięcie lub modyfikację błędnych rekordów.
8 Katalog kopii
W celu poprawy efektywności pracy, klient serwera aplikacji przechowuje kopie niektórych plików pobieranych z serwera na dysku lokalnym. W katalogu:
%appdata%\MacroBASE
dla wersji działającej pod Windows,
~/.MacroBASE
dla wersji działającej pod Linuxem.
zakładany jest katalog jMacroBASE dla klienta jTerm lub MacroBASE dla połączeń ODBC, w których tworzone są podkatalogi identyfikujące serwer aplikacji, grupę i nazwę systemu, w których przechowywane będą pliki. W przypadku, gdy po raz kolejny program ściąga ten sam plik i nie zmienił się rozmiar
ani data modyfikacji pliku, to zamiast oryginału będzie użyta przechowywana
kopia. W katalogu przechowywane są kopiowane mapy bitowe, zbiory z pomocą oraz pliki uruchamiane poprzez polecenie sys_exec.
Dodatkowo w katalogu z kopiami tworzony jest plik printer.ini
z ustawieniami sprawozdań. Nie jest on jednak przesyłany na serwer aplikacji. Jedyny egzemplarz pliku znajduje się w tym właśnie katalogu.
W przeciwieństwie do katalogu roboczego (@!Tmp), zawartość katalogu
z kopiami pozostaje po zakończeniu programu i może być użyta przy kolejnym
uruchomieniu. Położenie katalogu z kopiami można zmienić poprzez przypisanie ścieżki do parametru dir w sekcji [!Cache] pliku winterm.ini dla
połączeń ODBC lub jterm_12.30.ini dla klienta jTerm. Plik powinien się
znajdować w katalogu:
%appdata%\MacroBASE
dla wersji działającej pod Windows,
43
44
Rozdział III. Architektura systemu
~/.MacroBASE
dla wersji działającej pod Linuxem.
Domyślną wartością parametru dir jest katalog roboczy systemu operacyjnego. Przypisanie parametrowi wartości pustej ma analogiczne znaczenie. Innym
sposobem zdefiniowania położenia katalogu z kopiami jest przypisanie zmiennej systemowej MACROCACHE stosownej ścieżki. Jeśli zmienna jest zdefiniowana, to ustawienie ścieżki do katalogu w pliku winterm.ini/jterm_12.30.ini jest ignorowane.
W wersji ODBC dla systemu Linux, katalog z kopiami ustawia się wyłącznie poprzez zmienną MACROCACHE. Jeśli zmienna nie jest zdefiniowana
przyjmowana będzie wartość /tmp. W katalogu z kopiami, zamiast katalogu
MacroBASE (jak to ma miejsce w wersji dla Windows), będą tworzone katalogi macrobase-user, gdzie user będzie zastąpione nazwą użytkownika w
systemie operacyjnym. Katalog będzie własnością użytkownika user i tylko on
będzie miał dostęp do niego.
9 Program administratora
W pakiecie MacroBASE dla systemu Linux dostępny jest program MacroADMIN. Służy on administratorowi do komunikowania się z maszyną bazy
danych. Umożliwia zakończenie pracy serwera bazy danych, wyrejestrowanie
użytkownika oraz pobieranie informacji o działaniu systemu.
Wywołanie programu ma następującą postać:
MacroADMIN [-p path] command
gdzie path oznacza ścieżkę dostępu do katalogu, w którym będzie poszukiwany zbiór macro.cfg (domyślnie w bieżącym katalogu). Na podstawie parametru synchr_num określony będzie numer zasobów synchronizacyjnych,
który musi być identyczny dla serwera bazy danych.
Pod command możemy podstawić jedną z poniższych wartości:
-stop
zakończenie pracy serwera bazy danych,
-c
wyświetlenie listy zarejestrowanych użytkowników. Wypisywany jest
przydzielony numer, nazwa użytkownika z numerem procesu oraz nazwa terminala lub komputera (w przypadku klienta w systemie Windows), na którym pracuje,
III.9. Program administratora
-c num
wyświetlenie dodatkowych informacji o kliencie z numerem num.
W pierwszych trzech kolumnach powtórzone są informacje opisane
w poprzednim punkcie. Po nich następuje data i czas wykonania ostatniego rozkazu,
-f
wyświetlenie listy otwartych zbiorów z tabelami. Wypisywany jest przydzielony numer, nazwa zbioru,
-f num
wyświetlenie dodatkowych informacji o zbiorze z numerem num. W kolejnych wierszach wypisywane jest:
— numer zbioru i pełna ścieżka dostępu,
— lista użytkowników korzystających ze zbioru. Format jest identyczny jak przy użyciu opcji -c,
— lista indeksów tabeli — numer oraz ścieżka dostępu do zbioru,
-d num
wyrejestrowanie użytkownika z numerem num,
-u
usunięcie zasobów komunikacyjnych. Jeśli system nie zakończył działania w sposób prawidłowy, to w systemie operacyjnym mogą pozostać
zasoby synchronizacyjne, uniemożliwiające ponowny start serwera bazy danych. W takim przypadku przed uruchomieniem systemu należy
usunąć pozostałe w systemie zasoby synchronizacyjne.
Dla serwera działającego w systemie Windows, po wybraniu odpowiedniego
przycisku, można wywołać funkcje odpowiedzialne za: prezentującą listę zalogowanych użytkowników, możliwość wyrejestrowania użytkownika, podgląd
ścieżek do plików konfiguracyjnych i parametry pracy. W przypadku serwera bazy danych, uruchomionego jako usługa, okienko z przyciskami dostępne
będzie po wywołaniu:
nserv32.exe -v
dla wersji 32-bitowej serwera bazy danych, lub
nserv64.exe -v
dla wersji 64-bitowej.
45
46
Rozdział III. Architektura systemu
10 Konsola serwera aplikacji
jMacroCONSOLE - konsola serwera aplikacji jest narzędziem dedykowanym dla
administratorów bazy danych. Może ona działać zarówno na końcówkach z
systemem Windows jak i Linux. Z serwerem aplikacji łączy się przez sieć, przy
użyciu protokołu TCP/IP. Konsola umożliwia:
— wyrejestrowanie użytkowników z serwera aplikacji,
— wysyłanie wiadomości do wybranych użytkowników,
— ograniczanie liczby dostępów do poszczególnych aplikacji, grup aplikacji i całego serwera aplikacji,
— blokowanie przyjmowania nowych połączeń przez serwer aplikacji
Ta sama wersja może pracować z serwerem aplikacji dla Windows i dla
Linuxa. Program konsoli uruchamia się poprzez wykonanie polecenia:
javaw.exe -Djava.library.path=. -jar jConsole.jar
[adres[:port]] [-k cert]
adres
nazwa komputera (lub numer IP), na którym pracuje serwer aplikacji,
domyślnie localhost,
port
port do komunikacji, domyślnie 5580,
cert
ścieżka do pliku z certyfikatem serwera aplikacji, z nazwą pliku włącznie.
Przed pierwszym uruchomieniem konsoli należy zdefiniować hasło dostępu, w przeciwnym razie praca nie będzie możliwa. Hasło ustala się wywołując
MacroAppSERVER (mblaunch.exe dla Windows) z parametrem -c. Zostanie utworzony plik launcher.psw, w którym zostanie zapisane zaszyfrowane hasło. Wywołanie może mieć następującą postać:
MacroAppSERVER -ppath [-wpath] -cpass
gdzie:
-ppath
ścieżka do plików konfiguracyjnych,
III.10. Konsola serwera aplikacji
-wpath
ścieżka do katalogu w którym powstanie plik launcher.psw. Jeśli nie
jest podana launcher.psw zostanie zapisany w -ppath,
W systemie Linux określenie parametru -p jest obowiązkowe. Dla Windows domyślną wartością parametru jest ., czyli katalog bieżący dla programu mblaunch.exe. Jeśli parametr -w jest niezdefiniowany, to przyjmuje taka samą wartość jak parametr -p. Należy pamiętać, żeby parametr
-w przy uruchomieniu serwera aplikacji i tworzeniu pliku z hasłem konsoli
(launcher.psw) wskazywał ten sam katalog. W przeciwnym wypadku proces uwierzytelnienia użytkownika konsoli nie powiedzie się. Ustalone hasło
można zmieniać już w samej konsoli, w menu Administracja.
Hasło konsoli może zawierać jedynie znaki o kodach ASCII od 32 do 127.
Jeśli hasła z poprzednich wersji zawierają znaki spoza tego przedziału to nie
zostaną poprawnie zweryfikowane w jConsole.jar.
Główne okno jest podzielone na dwie części — po lewej w strukturze drzewiastej prezentowane są grupy i aplikacje, zaś po prawej właściwości aktualnie wskazanej grupy lub aplikacji (liczba aplikacji w grupie, liczba podłączonych użytkowników z podziałem na używane licencje i połączenia dodatkowe
oraz ograniczenia dostępu). Ikonki grup i aplikacji, w których aktualnie nikt
nie pracuje są wyszarzane. Tylko dla aktywnych grup i aplikacji dostępne są
akcje Wiadomość i Użytkownicy, natomiast zawsze można modyfikować
ograniczenia dostępu i blokować przyjmowanie połączeń. Należy w tym celu,
po zaznaczeniu serwera aplikacji (MacroAppSERVER) albo wybranej grupy
lub aplikacji, wybrać Zmień ograniczenia z menu Akcje (lub przycisk
Ograniczenia). Nowe parametry będą uwzględnione w bieżącej sesji serwera aplikacji. Nawiązane wcześniej połączenia, które łamią nowe reguły ograniczania dostępu, nie będą automatycznie zrywane. Żeby ograniczenia działały
również po ponownym uruchomieniu serwera aplikacji, należy zapisać ustawienia w pliku cluster.cfg wybierając z menu Administracja funkcję
Zapisz ograniczenia lub przycisk o tej samej nazwie w głównym oknie
konsoli. Po zapisie zmian do pliku cluster.cfg, kopia poprzedniej wersji
pliku będzie dostępna pod nazwą cluster.cfg.bak.
Niezależnie od ograniczenia liczby dostępów do serwera, można zablokować przyjmowanie nowych połączeń. W zależności od potrzeb blokadę można ustawiać na poziomie serwera, grup lub poszczególnych aplikacji. Należy
w tym celu dla wybranego elementu wybrać Zmień ograniczenia z menu Akcje (lub przycisk Ograniczenia) i zaznaczyć opcję Tymczasowa
blokada tworzenia nowych połączeń. Zablokowany zasób zostanie
zaznaczony na liście specjalną ikoną. Blokada tymczasowa nie wymaga zapi-
47
48
Rozdział III. Architektura systemu
su konfiguracji i obowiązuje od momentu zatwierdzenia zmiany, do momentu
odblokowania w konsoli lub zakończenia pracy serwera aplikacji. Przy ponownym połączeniu konsoli stany blokad dla serwera, grup i aplikacji będą ustawione zgodnie z obowiązującym stanem serwera aplikacji.
Listę zalogowanych użytkowników w ramach grupy/aplikacji otrzymujemy
po wywołaniu z menu Akcje/Pokaż użytkowników. W ramach prezentowanej listy grupowane są połączenia związane z tym samym dostępem licencyjnym. Ponadto może być wyświetlona dodatkowa grupa użytkowników niezalogowanych. Istnieje możliwość ograniczenia widoku do określonego typu
połączeń, możliwe wybory to: jTerm (interaktwne) lub MBASIC (np. ODBC).
Jeśli są zarejestrowani użytkownicy to dostępne stają się funkcje wysyłania wiadomości (menu Akcje, funkcja Wyślij wiadomość lub przycisk
Wiadomość). Wiadomości będą wysyłane do wszystkich aktualnie zarejestrowanych użytkowników jednocześnie. Po wysłaniu komunikatu pojawi się
okienko z listą użytkowników, do których był on adresowany. Komunikat powinien pojawić się na monitorach użytkowników po czasie nie przekraczającym minuty. Jeśli użytkownik wykonuje czynności wymagające kontaktu z serwerem aplikacji (np. wertuje okienko) to wiadomość pojawi się niemal natychmiast. Natomiast wyrejestrowywać z serwera aplikacji można tylko pojedynczych użytkowników. Należy najpierw wyświetlić listę zarejestrowanych
użytkowników a po wybraniu i zatwierdzeniu funkcji Usuń z listy wskazany użytkownik zostanie wyrejestrowany z serwera aplikacji. W okienku z prezentującym listę użytkowników można też wysyłać komunikaty do wybranych
użytkowników (przycisk Wiadomość). Wysyłanie wiadomości do użytkownika powoduje wysłanie jej do pierwszej aplikacji w grupie licencyjnej. Dla zarejestrowanego użytkownika dostępna jest funkcja Szczegóły, prezentująca
dodatkowe informacje:
— identyfikator aplikacji
— grupa
— zarejestrowany użytkownik
— numer procesu
— czas uruchomienia aplikacji
— typ klienta/połączenia
— adres klienta
— nazwa NTEBIOS komputera klienta
III.11. Administrator serwera aplikacji
49
— nazwa, pod jaką użytkownik jest zarejestrowany w systemie operacyjnym.
11 Administrator serwera aplikacji
Do bezdialogowego wyrejestrowywania użytkowników oraz blokowania dostępu nowym użytkownikom służy program MacroAppLOCKER (lub mblocker.exe dla wersji windowsowej). Można uruchomić go tylko w systemie, w
którym pracuje serwer aplikacji i może być wykorzystywany w procedurach
backupowych. Wywołanie programu ma postać:
MacroAppLOCKER [-l2|-l|-u] [-cs|-cr] [-ims|-imr] [port] [-k certificate_path]
gdzie:
-l2
nakłada tymczasową blokadę rejestrowania użytkowników i wyrejestrowuje wszystkich użytkowników (nie dotyczy mhtmlcgi.exe i
MacroCGI automatycznie uruchamianych przez serwer aplikacji),
-l
nakłada tymczasową blokadę rejestrowania użytkowników (nie dotyczy mhtmlcgi.exe i MacroCGI automatycznie uruchamianych przez
serwer aplikacji),
-u
zdejmuje tymczasową blokadę rejestrowania użytkowników (nie dotyczy mhtmlcgi.exe i MacroCGI automatycznie uruchamianych przez
serwer aplikacji),
-cs
nakłada tymczasową blokadę na logowanie użytkowników i wyrejestrowuje wszystkich użytkowników (dotyczy wyłącznie procesów
mhtmlcgi.exe oraz MacroCGI uruchamianych przez serwer aplikacji),
-cr
zdejmuje tymczasową blokadę na logowanie użytkowników (dotyczy
wyłącznie procesów mhtmlcgi.exe oraz MacroCGI uruchamianych
przez serwer aplikacji),
-ims
zatrzymuje serwer wiadomości MacroIMSERVER
50
Rozdział III. Architektura systemu
-imr
uruchamia serwer wiadomości MacroIMSERVER (o ile był wcześniej
zatrzymany). Powiadomienia będą wysyłane do końcówek, z których nastąpi zarejestrowanie do systemu (do działających po zatrzymaniu serwera wiadomości przysyłanie komunikatów będzie wznowione dopiero
po otworzeniu nowej aplikacji),
-port
port na którym pracuje serwer aplikacji, można pominąć jeśli jest to domyślny port 5580,
-k certificate_path
ścieżka do certyfikatu serwera aplikacji (jeśli wymagane jest połączenie
SSL).
Jeśli chcemy wyrejestrować wszystkich użytkowników i zablokować dostęp do
serwera aplikacji bez zatrzymywania usługi serwera aplikacji, to należy wywołać program z opcjami:
mblocker.exe
-l2 -cs
wznowienie obsługi klientów nastąpi po wywołaniu:
mblocker.exe
-u -cr
12 Serwer wiadomości
W ramach środowiska MacroBASE istnieje możliwość przesyłania wiadomości pomiędzy użytkownikami systemu oraz powiadomień z systemu.
Za przesyłanie komunikatów odpowiedzialny jest serwer wiadomości —
MacroIMSERVER. Jest on uruchamiany automatycznie przy starcie serwera
aplikacji. Do uruchomienia potrzebne jest oprogramowanie Java w wersji 7.
Końcówki jTerm oraz konsola administratora jConsole komunikują się z
serwerem wiadomości domyślnie poprzez port 7777. Poprzez wpisy w pliku
launcher.cfg można zmienić domyślny numer portu, wymusić aby serwer
wiadomości nie był uruchamiany przy starcie serwera aplikacji oraz nadać nazwę serwera komunikacyjnego:
macroim = on
macroim_port = nr_portu
macroim_descr = nazwa
III.12. Serwer wiadomości
gdzie:
on
może przyjmować wartości:
0
serwer wiadomości nie będzie uruchamiany,
1
serwer wiadomości będzie uruchamiany podczas startu serwera
aplikacji, domyślną wartością jest 1,
nr_portu
numer portu przez który będzie się odbywać komunikacja między jTermem a serwerem wiadomości. Domyślną wartością jest 7777,
nazwa
nazwa serwera komunikacyjnego. Będzie ona wyświetlana w tytule
okienka komunikatora oraz w dymkach z nim związanych. Domyślna
wartość (pusta) oznacza, że serwer nie ma nazwy.
Po połączeniu z serwerem wiadomości, użytkownik może wysyłać wiadomości tekstowe, pliki lub zrzuty ekranu do innych użytkowników zarejestrowanych w serwerze wiadomości. Użytkownik jTerma będzie widoczny pod nazwą taką, jaka została zdefiniowana w opisie użytkownika w programie MacroPASS. Użytkownik jConsole będzie widoczny pod nazwą
Administrator serwera.
Drugim zadaniem serwera wiadomości jest dostarczanie powiadomień
wysyłanych z aplikacji poprzez funkcję ntc_send. Wiadomości przechowywane są w tabeli SYSSALRT. Po zarejestrowaniu się pierwszego użytkownika
jTerma, do systemu w którym jest zdefiniowana tabela SYSSALRT rejestrowani są dwaj użytkownicy (typu ODBC/MBASIC) o nazwie #macroim, którzy pozostają zalogowany do momentu zamknięcia jTerma. Wszyscy kolejni
użytkownicy systemów współdzielących tabelę SYSSALRT będą otrzymywali
powiadomienia składowane w tej tabeli. Użytkownicy identyfikowani są przez
nazwę użytkownika podawaną przy rejestrowaniu (niezależnie od aplikacji ani
grupy do której należy). Należy zatem pamiętać przy uruchamianiu systemów
zintegrowanych, aby:
— wszystkie systemy wpółdzieliły tabele SYSSALRT oraz SYSMEMO,
— nie tworzyć różnych użytkowników o tych samych nazwach we współdzielonych systemach. Użytkownik o danej nazwie powinien być tym
samym użytkownikiem we wszystkich zintegrowanych systemach.
51
52
Rozdział III. Architektura systemu
Można zabronić wysyłania komunikatów poprzez wpis w pliku *.cfg (aplikacji lub macro.cfg). Mówi o tym parametr ntc_disable. Jeśli będzie
miał wartość liczbową różną od 0, to komunikaty z aplikacji wysyłane nie będą. Komunikaty będą dostępne w jTermie, jeśli zostanie otworzona przynajmniej jedna aplikacja, z której można wysyłać komunikaty. Dla pojedynczego
użytkownika może być zdefiniowanych maksymalnie 10 000 nieobsłużonych
powiadomień.
13 Program komunikacyjny
Za komunikację pomiędzy windowsowym serwerem komunikacyjnym, a serwerem bazy danych działającym pod Linuxem odpowiedzialny jest program
MacroCOMM. Po uruchomieniu, program czeka na zgłoszenia nowych klientów. Po zarejestrowaniu klienta tworzona jest kopia procesu przeznaczana do
obsługi nowego klienta bazy danych. Zatem procesów o nazwie MacroCOMM
powinno być o jeden więcej, niż pracujących klientów. Wywołanie programu
wygląda następująco:
MacroCOMM -ppath [-wpath] [[-stop] | [-stop_f]]
Obowiązkowym argumentem jest -ppath, gdzie po -p podajemy ścieżkę
dostępu do katalogu z plikiem macro.cfg. Z pliku odczytywany jest parametr tcp_udp_port, mówiący o numerze portu. Dodatkowo po opcji -w
można podać ścieżkę dostępu do katalogu roboczego.
W celu zakończenia pracy programu komunikacyjnego należy wywołać
program z opcją -stop (argument -ppath jest również obowiązkowy, program komunikuje się z działającą kopią też poprzez port, którego numer jest
określany w pliku). Jeśli chcemy zatrzymać program komunikacyjny również
wtedy, gdy są zarejestrowani klienci, należy użyć opcji -stop_f.
14 Poufność dostępu do bazy
Możliwość zapewnienia poufności danych daje system ochrony uprawnień
przy pomocy haseł. Ochrona jest realizowana poprzez blokowanie dostępu do
poszczególnych elementów aplikacji. Domyślnie więc, wszystkie funkcje programu są dostępne. Do modyfikacji uprawnień przeznaczony jest, dostarczany w pakiecie, system MacroPASS. Jest to aplikacja napisana w MacroBASE.
Efektem działania systemu MacroPASS jest plik zawierający powiązania nazw
III.14. Poufność dostępu do bazy
użytkowników z ich uprawnieniami i sposobami uwierzytelniania. Nazwa tego zbioru jest tworzona z nazwy systemu użytkowego i rozszerzenia .psw, np.
demo.psw.
Przy pierwszym uruchomieniu MacroPASSA następuje załadowanie domyślnych parametrów pracy aplikacji dotyczących domyślnych okresów ważności haseł oraz ustawień ostrzeżeń o przedawnieniu haseł i certyfikatów. Ustawienia domyślne można zawsze zmodyfikować w trakcie użytkowania aplikacji wybierając pozycję Parametry pracy w menu Administracja.
Ustawienia dotyczą:
— okresu ważności hasła — częstotliwość z jaką użytkownik będzie musiał
zmieniać hasło. Wartością domyślną jest 30. Liczba dni nie może przekraczać 365,
— ostrzeżenia o przedawnieniu hasła — parametr, określający liczbę dni do
przedawnienia hasła, przy której program wyświetla ostrzeżenie. Wartością domyślną jest 14. Liczba dni nie może przekraczać 365,
— ostrzeżenia o przedawnieniu certyfikatu — parametr określający liczbę
dni do przedawnienia certyfikatu, przy której program wyświetla ostrzeżenie. Wartością domyślną jest 30. Liczba dni nie może przekraczać 365.
Po uruchomieniu programu należy wskazać system, w którym będziemy zmieniać system ochron. Wyboru dokonujemy poprzez wywołanie funkcji Wybierz system dla wskazanej z listy zdefiniowanych aplikacji prezentowanych w oknie Systemy użytkowe. Dla wskazanej aplikacji, po wybraniu akcji wyświetl szCzegóły (lub wciśnięciu klawisza spacji) prezentowane są dla niej szczegółowe informacje: Nazwa definicji, Nazwa
aplikacji, Numer seryjny, Plik *.pth (ścieżka do pliku pth), Plik
*.psw (scieżka do pliku pws), Plik *.def (scieżka do pliku definicji systemu) oraz Okres ważności hasła (wyrażana w dniach wartość domyślna
dla nowych grup). Dodatkowo może się pojawić lista podsystemów w przypadku, gdy takowe zostały zdefiniowane we wskazanym pliku DEF. Lista podsystemów aktualizowana jest podczas aktualizacji definicji (pierwsze załadowanie
definicji w programie MacroPASS, akcja System/ Aktualizacja).
Dodając nowy system (przez wybór z menu Dołącz/na poDstawie
pliku PTH) podajemy ścieżkę do jego pliku deklaracji ścieżek *.pth (jeśli
względną, to względem pliku pass.pth). Po naciśnięciu klawisza F3 istnieje
możliwość wyboru pliku z listy aplikacji (lista ta wyświetla się także przy drugim sposobie dodawania nowego systemu przez wybór Dołącz/z serwera
Aplikacji). Istnienie tego pliku jest obowiązkowe. Wszystkie pozostałe pliki istotne w procesie ustalania ochron są wyszukiwane na jego podstawie.
53
54
Rozdział III. Architektura systemu
Przed dodaniem definicji nowej aplikacji, MacroPASS aktualizuje dane (PSW,
DEF, numery seryjne) już zdefiniowanych aplikacji, aby były one zgodne z zawartością ich plików PTH. Dodanie nowej aplikacji zostanie uniemożliwione,
jeśli wybrany plik PTH jest już zdefiniowany w MacroPASS oraz kiedy lokalizacja pliku PSW nowej aplikacji pokrywa się z jedną z już istniejących (wskazywanych przez jeden ze zdefiniowanych plików PTH). MacroPASS nie pozwoli
także na pracę z niekompletną wersją definicji wygenerowanej warunkowo z
MacroBUILDERa (gdy nie wszystkie okienka były gotowe podczas generowania).
Jeśli wybieramy już istniejący system a od ostatniego uruchomienia zmianie uległa definicja systemu, którego ochrony modyfikujemy, należy wykonać
Aktualizację. W przypadku niewykonania tej operacji, nowe elementy
programu mogą być niedostępne na liście obiektów, które możemy chronić.
Wszystkie poprzednie ustawienia (zapisane w pliku *.psw) zostaną zachowane, poza ochronami pozycji, które zostały usunięte z definicji systemu.
Przed wyborem pracy z aplikacją aktualizowane zostaną ścieżki do pliku PSW i nazwa obsługiwanego pliku DEF. Jeśli plik PSW będzie nieunikalny
w MacroPASS, użytkownik otrzyma ostrzeżenie, ale będzie mógł kontynuować
pracę. W przypadku użycia definicji aplikacji z podsystemami, warunkiem koniecznym, aby dany użytkownik mógł korzystać z określonego podsystemu jest
przypisanie go do tego podsystemu. Przypisanie to odbywa się z poziomu aplikacji MacroPASS:
— w menu głównym pozycja Podsystemy, która pozwala na przypisywanie
użytkowników do poszczególnych podsystemów,
— w oknie użytkowników systemu istnieje dostęp do podsystemów pozwalając na przypisywanie podsystemów do poszczególnego użytkownika.
Dla aplikacji bez podsystemów akcje dotyczące podsystemów będą niedostępne.
Ochrony wybranego systemu może w danej chwili zmieniać lub przeglądać tylko jeden użytkownik. System wybrany wcześniej przez innego użytkownika jest wyróżniony kolorem i jest niedostępny do wybrania. Po wskazaniu
systemu użytkownik zostanie poproszony o podanie klucza do pliku definicji
(*.def) aplikacji, której ochrony chce modyfikować. Po zatwierdzeniu plik
z ochronami zostanie wczytany lub, jeśli jeszcze nie istnieje, utworzony. Jeśli
MacroPASS działa na komputerze z systemem operacyjnym Linux, na którym
nie jest zainstalowany pakiet OpenSSL, nie będzie możliwe wczytywanie plików *.psw zawierających certyfikaty.
Po wyborze systemu można przystąpić do definiowania ochron. Zarządzanie ochronami, czyli przypisywanie do grup poszczególnych elementów
III.14. Poufność dostępu do bazy
ochron w aplikacji, jest dostępne po wybraniu akcji Grupy. Wyświetlony widok prezentuje w lewej części listę zdefiniowanych grup, natomiast w prawej
atrybuty wybranej grupy w zdefiniowanych zakładkach:
— Właściwości grupy,
— Członkowie grupy,
— Grupy składowe,
— Ochrony w grupie.
W przypadku definiowania nowej grupy oprócz nazwy, należy podać również:
— minimalną wymaganą długość hasła,
— okres ważności hasła (będzie wartością domyślną dla członków grupy,
podanie wartości 0 oznacza hasło bezterminowe),
— czy hasło spełniać podwyższone kryteria bezpieczeństwa (ma zawierać
wielkie i małe litery oraz znaki specjalne lub cyfry),
— liczbę haseł trzymanych w historii,
— maksymalną dopuszczalną liczbę nieudannych logowań,
— czas blokady logowania użytkownika.
Dla każdej grupy można zdefiniować opis tekstowy Opis(do 255 znaków). Opisy poszczególnych grup są dostępne z poziomu FORMULI za pomocą funkcji zwracających listę grup (prot_key(1) i prot_all). Dodatkowo do grupy można przypisać notatkę Notatka, która pozwoli na bardziej
szczegółowy opis grupy.
Maksymalna liczba haseł przechowywanych w historii dla użytkownika
jest określana w MacroPASS w ustawieniach jego grupy podstawowej (podobnie jak jest dla minimalnej liczby znaków w haśle, czy dla poziomu bezpieczeństwa hasła). Maksymalna dopuszczalna wartość to 999. Wartość 0 oznacza
brak przechowywania historii haseł użytkownika. Historia haseł będzie brana
pod uwagę tylko przy zmianie hasła przez użytkownika, np. po wygaśnięciu
hasła lub przy zmianie za pomocą funkcji passwd. W momencie zmiany hasła system pozwoli na zatwierdzenie nowego hasła tylko w przypadku, gdy będzie się ono różniło od ustalonej liczby poprzednich haseł. Historia haseł nie
55
56
Rozdział III. Architektura systemu
będzie brana pod uwagę w przypadku zmiany hasła z poziomu MacroPASS
oraz przy logowaniu certyfikatem lub przez Active Directory.
Maksymalna dopuszczalna liczba nieudanych logowań dla użytkownika
jest określana w MacroPASS w ustawieniach jego grupy podstawowej. Maksymalna dopuszczalna wartość to 999. Wartość 0 oznacza brak blokowania użytkownika po nieudanych logowaniach. W przypadku ustawienia tego parametru, system zlicza wszystkie kolejne nieudane próby logowania. Po
przekroczeniu ustalonej liczby takich logowań konto użytkownika (możliwość
logowania) zostanie zablokowane. Czas blokady użytkownika jest określany
także w MacroPASS w ustawieniach jego grupy podstawowej. Czas blokady jest wyrażony w minutach i może być wartością z zakresu <0..1440>.
Wartość 0 oznacza blokadę bezterminową, która może być zdjęta tylko przez
Administratora przy użyciu modułu MacroPASS. Pozostałe wartości
(czyli od 1 minuty do 24 godzin) określają w minutach czas blokady użytkownika. Po upłynięciu określonej liczby minut od ostatniego nieudanego logowania, system zezwoli na podjęcie kolejnej próby logowania. Poprawne logowanie
do systemu usuwa informacje o wszystkich poprzednich nieudanych logowaniach użytkownika.
Administracyjne odblokowanie konta użytkownika jest konieczne w przypadku blokady bezterminowej (jest także możliwe podczas trwania blokady
czasowej). Aby odblokować użytkownika należy w MacroPASS wybrać dla
użytkownika akcję uWierzytelnianie/ Hasło/ Administracyjne
odblokowanie użytkownika i zapisać plik PSW. W tym momencie system zezwoli użytkownikowi na podjęcie próby logowania niezależnie od aktualnego stanu blokady. Nieudana próba logowania spowoduje jednak ponowne
założenie blokady.
MacroPASS umożliwia włączanie grup do innych grup, a przez to możliwość zbudowania hierarchii ochron. Wyjątkiem jest grupa wdrożenia, która
nie może być składową i sama nie może zawierać innych grup. Ochrony danej
grupy wynikają z sumy jej ochron i ochron grup składowych. Jeśli w grupie
lub jej składowych są powielone ochrony tych samych elementów to obowiązują te z najwyższego poziomu hierarchii. W przypadku składania ochron z
grup na tym samym poziomie, obowiązuje zwykłe sumowanie (z uwzględnieniem ochron i uprawnień). Uznaje się, że użytkownik należy do grupy, jeśli jest
do niej przypisany lub do jednej z jej grup składowych. Możliwość zbudowania hierarchii ochron realizowana jest w widoku przentowanym na zakładce
Grupy składowe, gdzie akcjami Dołącz grupę składową i Usuń realizujemy omawianą finkcjonalność.
Grupy standardowe to grupy zdefiniowane na etapie tworzenia aplikacji,
są one dostarczane wraz z pakietem Xpertis. Podczas wdrożenia modyfika-
III.14. Poufność dostępu do bazy
cja tych grup jest ograniczona, nie jest więc możliwa modyfikacja listy ochron,
zmiana nazwy lub opisu grupy. Można określić domyślny okres ważności hasła,
minimalną długość hasła oraz jego poziom bezpieczeństwa. Można też przypisywać użytkowników do tych grup i dodawać je do innych jako podgrupy. Nazwy grup standardowych rozpoczynają się od znaku wykrzyknika (!). System
uniemożliwi użycie znaku wykrzyknika w nazwach nowych grup. Wczytanie
pliku *.psw z poprzednich wersji z wykrzyknikiem w nazwie grupy spowoduje
ich zamianę na znak podwójny wykrzyknik (wynik ˆ8252). Aby zapis pliku
*.psw był możliwy konieczna jest zmiana nieprawidłowych znaków.
Ochrony przypisane do poszczególnych grup wyświetlane są w okienku
prezentowanym w zakładce Ochrony w grupie po wybraniu przełącznika ZDEFINIOWANE, w odróżnieniu do widoku prezentowanego po wybraniu
przełącznika OBOWIZUJĄCE, gdzie wyświetlana jest lista ochron zdefiniowana dla grupy jak i wynikająca z ochron. Prezentowane listy można ograniczyć
do poszczególnych typów poprzez wybór przycisku z nazwą typu chronionego
elementu.
Oprócz definiowania elementów chronionych możliwe jest również nadawanie uprawnień. Można zatem udostępniać elementy aplikacji, które są chronione w innych grupach. Nie ma więc konieczności tworzenia nowej grupy z
prawie identycznym zestawem ochron w celu odblokowania jednego elementu, wystarczy udostępnić ten konkretny element. Zwiększa to również łatwość
stosowania grup standardowych. Przy sumowaniu ochron na tym samym poziomie hierarchii, nałożenie ochrony ma niższy priorytet niż udzielenie dostępu. Domyślnie w aplikacji bez żadnych ochron nadal wszystkie elementy są
dostępne, a zatem udostępnianie elementów będzie miało znaczenie tylko w
przypadku istnienia ochron dla tych samych elementów.
System pozwala chronić następujące elementy programów:
Menu
Ochrony menu przypisujemy poprzez zaznaczenie odpowiednich pozycji, których dana grupa może/nie może wykonywać. Funkcjonalność
dostępna po wyborze akcji dołącz chroniony Element/Menu i
wskazaniu dla wybranej pozycji menu określonego poziomu ochrony:
Domyślnie, Zabroń lub Zezwalaj.
Akcje okienek wertowania
Ochrony akcji okienek definiuje się podobnie jak ochrony menu, z tym
że najpierw wybieramy, którego okienka akcje chcemy chronić.
57
58
Rozdział III. Architektura systemu
Pola okienek wertowania
Dla wybranej tabeli, wskazać okienko wertowania i włączyć lub wyłączyć
ochrony dla poszczególnych pól okienka. Jeśli pole typu prostego jest
umieszczone kilkakrotnie w okienku, to w systemie ochron będzie dostępne raz, a ustawiona ochrona będzie obowiązywała dla każdego wystąpienia w okienku. To samo dotyczy pól złączeniowych z tym samym
reprezentantem. Dostępne są następujące możliwości ochrony:
Domyślnie
ustawienie domyślnego poziomu ochrony,
Pełny dostęp
dostęp do pola okienka bez ograniczeń,
Brak zapisu
żaden użytkownik danej grupy nie będzie mógł zmienić wartości
pola. Pole będzie pomijane przy redagowaniu, tak jakby było zaznaczone w definicji systemu jako nieredagowalne,
Dostęp do odczytu
żaden użytkownik danej grupy nie będzie mógł zmienić wartości
pola. Pole będzie pomijane przy redagowaniu, tak jakby było zaznaczone w definicji systemu jako nieredagowalne,
Brak dostępu
pole będzie nieredagowalne i dodatkowo wartość pola będzie reprezentowana w okienku poprzez same kropki.
Dla użytkownika poziomy ochrony Brak zapisu i Dostęp do
odczytu są identyczne: można odczytać wartość pola, ale zawsze będzie ono nieredagowalne. Istotna różnica w tych poziomach występuje w
przypadku składania ochron (wyliczania efektywnej ochrony elementu
na danym poziomie w hierarchii grup):
— dostęp do odczytu + brak dostępu = dostęp do odczytu,
— dostęp do odczytu + brak zapisu = dostęp do odczytu,
— dostęp do odczytu + pełny dostęp = pełny dostęp.
Z powyższych zależności wynika wniosek, że nowy poziom ochrony tylko w złożeniu z pełnym dostępem jest zastępowany. Dzięki temu będzie
możliwość wymuszenia dostępu tylko do odczytu także w przypadku,
gdy podczas składania ochron trafimy na „brak dostępu” a nie chcemy
dawać użytkownikowi dostępu pełnego.
III.14. Poufność dostępu do bazy
Drag & Drop w okienkach wertowania
Funkcja pozwala zdefiniować listę okienek wertowania, dla których
możliwość upuszczania elementów (a co za tym idzie, także wykonywania stosownych formuł z tym związanych) będzie zablokowana. W kliencie wykonanie funkcji dnd_sel dla chronionego okienka ma działanie
puste.
Przyciski w okienkach wertowania
Możliwość definiowania ochron dla przycisków w okienkach wertowania. Jeśli przycisk jest chroniony, będzie w okienku wyszarzony. Próba
zmiany stanu przycisku z poziomu Formuli+ nie zgłosi błędu, ale stan takiego przycisku nie zmieni się. Ochrony można nakładać tylko dla przycisków zdefiniowanych w MacroBUILDERZE.
Pola okienek redagowania
Zasady definiowania ochron dla pól okienek redagowania są identyczne
jak dla okienek wertowania.
Przyciski w okienkach redagowania
Zasady definiowania ochron dla przycisków w okienkach redagowania
są identyczne jak dla przycisków w okienkac wertowania.
Tabele/Zmienne
Każda tabela lub zmienna strukturalna i każde pole może mieć przypisany jeden ze stanów:
Domyślnie ustawienie domyślnego poziomu ochrony,
Brak dostępu zabroniony odczyt i zapisywanie dla wszystkich pól tabeli/zmiennej,
Brak zapisu można odczytać wartości wszystkich pól tabeli/zmiennej pola, ale
zawsze będą one nieredagowalne,
Dostęp do odczytu można odczytać wartości wszystkich pól tabeli/zmiennej pola, ale
zawsze będą one nieredagowalne,
Dostęp pełny pełny dostęp do wszystkich pól tabeli/zmiennej.
Dla użytkownika poziomy ochrony Brak zapisu i Dostęp do
odczytu są identyczne: można odczytać wartość pola, ale zawsze będzie ono nieredagowalne. Istotna różnica w tych poziomach występuje w
przypadku składania ochron (wyliczania efektywnej ochrony elementu
na danym poziomie w hierarchii grup):
— dostęp do odczytu + brak dostępu = dostęp do odczytu,
59
60
Rozdział III. Architektura systemu
— dostęp do odczytu + brak zapisu = dostęp do odczytu,
— dostęp do odczytu + pełny dostęp = pełny dostęp.
Z powyższych zależności wynika wniosek, że nowy poziom ochrony tylko w złożeniu z pełnym dostępem jest zastępowany. Dzięki temu będzie
możliwość wymuszenia dostępu tylko do odczytu także w przypadku,
gdy podczas składania ochron trafimy na „brak dostępu” a nie chcemy
dawać użytkownikowi dostępu pełnego.
Przypisanie ochrony dla tabeli lub zmiennej strukturalnej powoduje
ochronę wszystkich jej pól w co najmniej takim samym trybie. Poziom
ochrony pola można jednak zwiększyć przypisując mu wyższy stopień
ochrony,
Pola tabel/zmiennych
Polom tabeli można przypisać takie same poziomy ochrony jak tabelom.
Przypisanie niższego poziomu ochrony dla pola niż dla tabeli lub zmiennej, z której pochodzi, nie ma znaczenia. Podobnie, każde chronione
pole będzie chronione w co najmniej takim samym trybie w każdym
okienku. Poprzez przypisanie ochrony pola w okienku można więc jedynie zwiększyć poziom zabezpieczenia pola w okienku. Należy pamiętać, że przypisanie ochrony dla tabeli, zmiennej strukturalnej lub pola,
poza blokadą poprawiania lub wyświetlania w okienku, nie ma wpływu
na możliwość odczytu pola z poziomu Formuli+. Na powyższe ochrony
wrażliwe są tylko funkcje:
psql i psql_exec
wersje funkcji sql i sql_exec, jednak wykonujące się tylko wtedy, gdy użytkownik ma dostęp do czytania wszystkich tabel i pól
użytych w zapytaniu,
tab_mod i fld_mod
metody zwracające wartość różną od 0 wtedy, gdy użytkownik
nie ma zabronionego odczytu i zapisu do odpowiednio tabeli lub
zmiennej strukturalnej albo pola,
tab_read i fld_read
metody zwracające wartość różną od 0 wtedy, gdy użytkownik nie
ma zabronionego dostępu do czytania odpowiednio tabeli lub pola
Maska procedur wbudowanych
Można zabronić danej grupie użytkowników wywoływania procedur
wbudowanych. Mechanizm ochrony działa w oparciu o listę masek pro-
III.14. Poufność dostępu do bazy
61
cedur. Dozwolone jest użycie w maskach metaznaków. Maska procedury
dotyczy całej jej nazwy, czyli postaci procedura@plik. Przykładowo:
’*@plik1’
maska dotyczy wszystkich procedur z pliku plik1,
’proc1@*’
maska dotyczy procedur o nazwie proc1 we wszystkich plikach,
’proc1@plik1’
maska dotyczy tylko procedury proc1 z pliku plik1.
Do danej maski procedur będzie można przypisać rodzaj ochrony:
Domyślnie, Zabroń, Zezwalaj. Istnieje możliwość określenia kolejnosci masek niezależnie od typu ochrony. Ustalenie kolejności odbywa
się w okienku dodawania masek (Grupy / Ochrony w grupie /
Dołącz chroniony element / Maski procedur wbudowanych)
lub (Grupy / Ochrony w grupie / Dołącz chroniony element
/ Maski sprawozdań). Ustalona kolejność masek jest wspólna dla
wszystkich grup. W przypadku, gdy taki sam zbiór masek miałby być
sprawdzany w różnej kolejności w różnych grupach, tę samą maskę można zdefiniować więcej niż raz. Kolejność masek jest zapisywana do pliku
PSW.
Maska sprawozdań
Mechanizm ochrony raportów działa analogicznie do ochrony procedur
wbudowanych. Maska jest dopasowywana do nazwy pliku *.rpt bez
rozszerzenia. W przypadku wywołania funkcji rep_exec z metaznakami w argumencie, na liście nie pojawią się chronione raporty. Raport
skompilowany z pliku plik1.rpm może być uruchomiony tylko z pliku plik1.rpt. W przypadku wykonania raportu z pliku o zmienionej
(po kompilacji) nazwie, system wyświetli błąd.
Dostęp poprzez ODBC
Można wprowadzić ograniczenia w dostępie poprzez sterownik ODBC.
Istnieją trzy poziomy ochron:
Brak dostępu
użytkownicy z grupy nie będą mieli prawa dostępu do bazy danych
poprzez sterownik ODBC,
62
Rozdział III. Architektura systemu
Procedury wbudowane
dostęp do danych poprzez ODBC będzie możliwy wyłącznie poprzez procedury wbudowane. Próba pobrania danych w inny sposób zakończy się błędem,
Bez ograniczeń
dopuszczalne są wszystkie sposoby dostępu do danych poprzez
ODBC. Ewentualne ograniczenia mogą wynikać z ustawionych
niezależnie ochron tabel lub procedur wbudowanych.
Usuwanie ochron może się odbywać z poziomu okienka z widokiem
ochron zdefiniowanych w grupie. Akcja Usuń dla dla widoku ochron obowiązujących w grupie jest niedostępna. Maksymalna liczba grup w aplikacji
wynosi 1024.
Do nowych grup można również kopiować ochrony grup już istniejących (funkcja Inne funkcje/Kopiuj grupę). Dodatkowo istnieje mechanizm importu grup lub grup razem z ochronami z plików *.psw (funkcja Inne funkcje/Kopiuj grupę). Po wskazaniu pliku odczytywane są
grupy i przypisane do nich ochrony. Pod uwagę brane są tylko ochrony elementów, które są zdefiniowane w bieżącej aplikacji. W przypadku ochron z
grup, które są już zdefiniowane w aplikacji, pod uwagę są brane tylko ochrony, które nie są przypisane do danej grupy. W przypadku, gdy istniejąca grupa
w aplikacji nie ma żadnej ochrony do zaimportowania (albo jest pusta, albo
zawiera już przypisane ochrony), jest ona pomijana. Następnie użytkownik w
okienku zawierającym informacje o wczytanym pliku *.psw wybiera, które z
grup i ochron chce zaimportować do systemu. Gdy importujemy nową grupę
do aplikacji, jest ona dodawana wraz ze wszystkimi odczytanymi parametrami
(w przypadku braku niektórych parametrów są one uzupełniane wartościami
domyślnymi). System nie pozwoli na dodanie grupy o nieprawidłowej nazwie,
ani na dodanie grupy standardowej (z nazwą rozpoczynającą się od znaku wykrzyknika). W takim przypadku akcja dodawania zostanie anulowana. Gdy
importujemy grupę już istniejącą w aplikacji, importowane są tylko ochrony,
parametry grupy nie są zmieniane. W przypadku prawidłowego zaimportowania ochrony jest ona usuwana z listy, zatem do wyboru pozostaną tylko ochrony, których nie ma jeszcze w aplikacji.
Po zdefiniowaniu grup i ochron można przystąpić do dodawania lub modyfikowania opisów użytkowników. Wybieramy w tym celu z menu głównego
funkcję Użytkownicy. Każdemu użytkownikowi przypisujemy nazwę, opis,
grupę podstawową, do której ma należeć oraz dozwolone sposoby uwierzytelniania. W nazwie użytkownika zabronione jest wykorzystanie znaków:
˜ \ / [ ] ( ) { } * ? : | % $ < > . " ;
III.14. Poufność dostępu do bazy
Dodatkowo nazwy nowoutworzonych użytkowników muszą składać się wyłącznie z małych liter. Nazwy użytkowników zawierające wielkie litery wcześniejszymi wersjami nadal mogą być używane, jednakże MacroPASS uniemożliwi utworzenie nowego użytkownika z nazwą identyczną z istniejącą bez
uwzględnienia wielkości liter (np. jeśli zdefiniowany jest użytkownik o nazwie
Szef to nie będzie można zdefiniować użytkownika o nazwie szef).
Grupa podstawowa, to grupa określona dla użytkownika w momencie jego definiowania i jest widoczna w okienku użytkowników. Z niej też pochodzą
obowiązujące użytkownika parametry hasła jak: minimalna liczba znaków w
haśle i poziom bezpieczeństwa hasła. Grupa podstawowa użytkownika może
być później zmieniona z poziomu listy grup przypisanych do danego użytkownika.
Istnieje możliwość dodawania użytkowników do więcej niż jednej grupy
ochron. Ochrony przypisane do poszczególnych grup są sumowane po zalogowaniu użytkownika. Oznacza to, że danego użytkownika obowiązują łącznie wszystkie ochrony, które są zdefiniowane w grupach, do których należy. W
przypadku ochron stopniowanych (takich jak dostęp do pól okienek czy dostęp do ODBC) i gdy ten sam element jest chroniony w różnych grupach na
różnym poziomie użytkownika obowiązuje najbardziej restrykcyjny poziom
ochrony.
Grupa wdrożenia jest specjalnie traktowana w przypadku przynależności
do wielu grup: Jeśli użytkownik należy do grupy wdrożenia, zawsze będzie ona
jego grupą podstawową. Zmiana grupy podstawowej takiego użytkownika będzie skutkować usunięciem go z grupy wdrożenia.
Możliwość dodawania i usuwania użytkowników do/z poszczególnych
grup dostępna jest z poziomu okienka z grupami (akcja Grupy zakładka
Członkowie grupy z głównego menu). Możliwość dodawania i usuwania
użytkownika do/z poszczególnych grup, a także określenia grupy podstawowej
dostępna jest dla okienka z użytkownikami (akcja Użytkownicy z głównego
menu).
Dostępne są cztery sposoby uwierzytelniania:
— za pomocą hasła,
— z użyciem karty SmartCard,
— bez podania hasła,
— z wykorzystaniem zintegrowanego uwierzytelniania usługi Active Directory.
63
64
Rozdział III. Architektura systemu
Można udostępnić dowolną kombinację sposobów uwierzytelniania. Możliwość logowania bez podania hasła jest tożsama z ustawieniem dla użytkownika pustego hasła, bez aktywacji sposobu logowania bez podania
hasła. W przypadku wykorzystywania biblioteki mbasic.dll, dla użykowników mających ustawione puste hasło lub ustawiony sposób logowania
bez podania hasła, jako parametry dotyczące haseł dla funkcji odpowiedzialnych za logowanie należy przekazać wartości puste. Jeśli użytkownik nie
ma wybranego sposobu uwierzytelniania, jego dane zostaną zapisane w pliku
*.psw, ale nie będzie mógł zarejestrować się w systemie. Dla wybranego sposobu uwierzytelniania odpowiednio w kolumnach Hasło, Karta, Bez hasła oraz
Act.Directory pojawią się litery H, K, B oraz A.
Po zaznaczeniu opcji uwierzytelniania hasłem pojawi się okienko w którym należy ustawić hasło i podać okres jego ważności. Podawana liczba (od
0 do 365) określa liczbę dni, po upływie których, użytkownik będzie musiał
zmienić hasło. Jeśli podamy zero, hasło będzie ważne bezterminowo. Termin
ważności jest wyznaczany automatycznie i mówi którego dnia wpisane hasło
ulegnie przeterminowaniu. Hasło musi spełniać kryteria określone dla bieżącej
grupy użytkowników odnośnie długości i rodzaju wymaganych znaków, oraz
nie może być dłuższe niż 20 znaków i zawierać średnika (;). Jeśli podane hasło nie spełnia wymogów danej grupy, wyświetlane jest ostrzeżenie z możliwością powrotu do edycji lub akceptacji hasła w obecnej postaci. Przy dodawaniu
użytkownika uwierzytelnianego hasłem (którego grupa podstawowa ma niezerową wartość w polu Okres ważności hasła) można od razu wybrać
opcję dla pierwszego hasła: puste, takie jak login i wymusićjego zmianę przy
pierwszym logowaniu.
Po zaznaczeniu opcji uwierzytelniania kartą należy przypisać użytkownikowi certyfikat. Certyfikat można wczytać z karty SmartCard (widoczne są tylko te certyfikaty, które z aktualnie używanej karty zostały zarejestrowane w
systemie przy pomocy menedżera tej karty i dodatkowo posiadają na karcie
powiązany klucz prywatny) lub z pliku w formacie PEM. Wczytywany certyfikat musi być ważny i nie może być przypisany do innego użytkownika systemu
(każdy użytkownik musi mieć inny certyfikat).
Jeśli do zmiennej systemowej MACROLOGIN będzie przypisana nazwa
użytkownika uwierzytelniającego się bez hasła, to użytkownik będzie automatycznie zarejestrowany, bez wyświetlenia dialogu. Możliwość logowania bez
podania hasła jest tożsama z ustawieniem dla użytkownika pustego hasła bez
aktywacji sposobu logowania B. Oznacza to, że dla użytkownika z pustym hasłem także może wystąpić logowanie automatyczne nawet bez ustawionej opcji
logowania B.
III.14. Poufność dostępu do bazy
Wybór logowania z wykorzystaniem zintegrowanego uwierzytelniania
usługi Active Directory do rejestracji w aplikacjach MacroBASE pozwala na
wykorzystanie kont użytkowników domeny z dowolnych kontenerów usługi.
Dzięki takiemu podejściu zarządzanie hasłami może odbywać się poza systemem MacroBASE. Kontroler domeny będzie pilnował odpowiedniej złożoności hasła, historii zmian, okresów aktualizacji itp. Zmiana hasła do systemu
operacyjnego jest jednocześnie zmianą hasła do systemu MacroBASE i użytkownik wykonuje ją tylko raz. Dostęp do usługi odbywa się na poziomie serwera aplikacji a więc użytkownik nie musi być w tej samej sieci co serwer udostępniający usługę Active Directory. Serwer aplikacji może działać zarówno
pod Windows jak i pod Linux.
Aby użytkownik mógł zarejestrować się w systemie MacroBASE nową metodą, należy przyporządkować mu taki sposób uwierzytelniania w programie
MacroPASS. Służą do tego funkcje menu Active Directory w oknie przeglądania użytkowników.
Aby odczytać listę kont użytkowników z serwera, należy najpierw skonfigurować parametry połączenia z serwerem. Służy do tego opcja zmień
Ustawienia. Należy podać:
— adres serwera z usługą Active Directory,
— nazwę i hasło użytkownika zdefiniowanego w Active Directory,
— opcjonalnie można podać nazwę grupy, z której informacje o użytkownikach mają być pobierane.
Powyższe parametry (poza hasłem) ustawia się dla każdej z aplikacji i są
zapamiętywane dla niej w zasobach programu MacroPASS. Hasło jest pamiętane dla wybranej aplikacji na czas trwania danej sesji lub do czasu wybrania w
programie MacroPASS innej aplikacji.
Po połączeniu z serwerem można przypisywać użytkownikom aplikacji
konta z Active Directory. Dostępne w Active Directory konta wybieramy z listy.
Specjalnym atrybutem wyróżnione są:
— konto przypisane do aktualnie wybranego użytkownika systemu MacroBASE (kolor szary),
— konta przypisane do innych użytkowników MacroBASE (kolor czerwony),
— konta przypisane w innych aplikacjach zarządzanych z tej samej instalacji programu MacroPASS (kolor niebieski).
65
66
Rozdział III. Architektura systemu
Jeśli podana została nazwa grupy, to na liście dostępni będą tylko użytkownicy do niej należący. Po wskazaniu konta z Active Directory przypisanie go
użytkownikowi MacroBASE odbywa się analogicznie, jak przypisanie certyfikatu do uwierzytelniania kartą. Konto z Active Directory może być przypisane
tylko do jednego użytkownika MacroBASE. Użytkownicy z opcją uwierzytelniania Active Directory wyróżnieni są w programie MacroPASS symbolem A w
kolumnie Act.Directory. Jeśli wskazane jest również konto z Active Directory,
to dodatkowo pole wyróżnione jest kolorem niebieskim.
W celu ułatwienia zarządzania kontami użytkowników powiązanymi z Active Directory dodana została funkcja Przypisanie zbiorowe, która służy do
przypisania grupy kont Active Directory do określonej grupy (klucza protekcji) zdefiniowanej programem MacroPASS. Funkcja tworzy nowe i aktualizuje
istniejące konta użytkowników systemu na podstawie danych z Active Directory, z zachowaniem unikalności nazw użytkowników. Jeśli nazwa z Active Directory powtarza się z już istniejącą, to będzie zmodyfikowana tak, aby zachować unikalność. Jeśli konto z Active Directory zostało już wcześniej założone,
to aktualizowane są wtedy dane użytkownika.
Aby MacroCLIENT użył uwierzytelniania Active Directory należy w
okienku logowania zaznaczyć opcję Uwierzytelnianie Active Directory.
Uruchomienie klienta z parametrem -qldap spowoduje, że opcja uwierzytelniania Active Directory będzie domyślnie zaznaczona. Gdy opcja uwierzytelniania Active Directory jest włączona, w pola nazwy użytkownika i hasła można wpisać do 127 znaków. System dopuszcza wprowadzanie nazwy użytkownika w formach:
— nazwa domenowa Windows:
[email protected]
— nazwa domenowa dla systemów starszych niż Windows 2000:
NAZWA_DOMENY\nazwa_konta
Dla ułatwienia procesu uwierzytelniania, dla pierwszego z formatów, część z
nazwą domeny (od znaku @) może zostać pominięta.
Użytkownik, który zarejestrował się w programie z wykorzystaniem usługi
Active Directory nie będzie mógł zmienić hasła przy użyciu funkcji passwd.
Opcja uwierzytelniania Active Directory została także dodana do definiowania źródeł ODBC. W oknie dialogowym przy konfigurowaniu źródła danych
III.14. Poufność dostępu do bazy
dostępna jest opcja Uwierzytelnianie Active Directory. Dla sterowników ODBC działających pod Linuxem uwierzytelnianie poprzez Active
Directory jest niedostępne.
Na liście użytkowników kolorem czerwonym oznaczeni są użytkownicy,
dla których zdefiniowano przynajmniej jedną metodę logowania, ale z powodu niewystarczającej konfiguracji użytkownik nadal nie będzie miał możliwości zalogowania się do aplikacji. Przyczynami niewystarczającej konfiguracji
uwierzytelniania użytkownika mogą być:
— użytkownik nie przypisany do żadnego podsystemu,
— użytkownik ma dostępną metodę uwierzytelniania kartą, ale nie ma
przypisanego certyfikatu,
— użytkownik ma dostępną metodę uwierzytelniania przez Active Directory, ale nie ma przypisanego użytkownika Active Directory.
Kolorem szarym oznaczano użytkowników bez żadnej metody logowania.
Po wybraniu z menu okna użytkowników aplikacji MacroPASS istnieje
możliwość importu użytkowników z plików tekstowych. Funkcjonalność ta
pozwala na łatwe zaimportowanie użytkowników z innego pliku PSW, a także
na import z plików tekstowych o innym formacie. Daje to możliwość szybkiego i wygodnego przygotowania dużej listy użytkowników aplikacji. Zaimportować można:
— nazwę użytkownika,
— opis użytkownika,
— hasło użytkownika.
Import użytkowników odbywa się w 3 krokach:
Wskazanie pliku do importu i opcji importu
Plik do importu wskazujemy wpisując ścieżkę do pliku ręcznie lub dialogowo za pomocą dialogu wyboru pliku. Domyślnie system wskazuje pliki PSW, ale można wskazać dowolny plik tekstowy (PSW, TXT, CSV, ...).
Jeśli wskazany plik nie jest plikiem PSW, należy określić dodatkowe parametry: znak separatora oraz stronę kodową pliku źródłowego. Separatorem może być dowolny znak (najczęściej używane separatory są do
wyboru jako pole radiowe). Dostępne strony kodowe (do wyboru jako
pole radiowe): Mazovia, Windows-1250, ISO-8859-2, UTF-8. Oczekiwany format wiersza w pliku tekstowym (jeśli nie jest to PSW) to:
67
68
Rozdział III. Architektura systemu
login<separator>nazwa<separator>hasło
Pole login jest obowiązkowe, pole nazwa zostanie zastąpione loginem,
gdy nie występuje. Hasło należy podać otwartym tekstem, zastępowane jest loginem w przypadku jego braku. Dodatkowe opcje importu to
automatyczne pominięcie użytkowników o nieprawidłowych, z punktu
widzenia MacroBASE, nazwach i/lub pominięcie użytkowników o nazwach już zdefiniowanych w aplikacji.
Lista zaimportowanych użytkowników
Wszyscy zaimportowani użytkownicy trafiają do okienka importu. Tutaj możemy dodać użytkowników z kolejnych plików (powtórzyć poprzedni krok), możemy także poprawić niezbędne dane. W tym okienku
użytkownicy już zdefiniowani w aplikacji oznaczeni są na szaro, a użytkownicy o nieprawidłowych nazwach oznaczeni są na czerwono (żadnego z nich nie da się zaimportować do aplikacji, ale można poprawiać
te dane). W okienku dostępne są akcje „czyszczące”, takie jak usunięcie wszystkich użytkowników już zdefiniowanych w systemie, usunięcie
tych o niepoprawnych nazwach, albo importowanych z określonego źródła. Można też przed importem ustalić hasło użytkownika na takie, jak
nazwa użytkownika.
Import do listy użytkowników aplikacji
Z przygotowanej listy importu możemy importować użytkowników do
aplikacji. Import dotyczy zaznaczonych użytkowników z listy importu. Przed importem należy określić do jakiej grupy (podstawowej) będą
należeć importowani użytkownicy oraz czy ich hasło ma być unieważnione, aby wymusić jego zmianę przy kolejnym logowaniu. Trzeci krok
można powtarzać dla kolejnych zbiorów użytkowników wybierając na
przykład inną grupę podstawową.
Należy pamiętać, że nowododani użytkownicy są przypisani tylko do jednej
grupy - grupy podstawowej i nie są przypisani do żadnego podsystemu.
Wybierając z menu okna prezentującego listę użytkowników akcję Inne
funkcje/ Kopiuj z innego użytkownika dostępna jest możliwość
kopiowania ustawień użytkownika. Funkcjonalność pozwala dla zaznaczonych użytkowników i jednego wskazanego użytkownika na:
dla grup:
— zastąpienie istniejących grup, grupami kopiowanego użytkownika,
III.14. Poufność dostępu do bazy
— dodanie do istniejących grup, grup kopiowanego użytkownika,
— zmianę grupy podstawowej na grupę podstawową kopiowanego użytkownika,
dla podsystemów:
— zastąpienie istniejących podsystemów, podsystemami kopiowanego
użytkownika,
— dodanie do istniejących podsystemów, podsystemów kopiowanego
użytkownika.
Znaczenie pozostałych niestandardowych funkcji dostępnych po wybraniu
menu uWierzytelnianie jest następujące:
typ uWierzytelniania
służy do grupowej zmiany sposobu uwierzytelniania użytkowników,
Hasło
zmiana parametrów uwierzytelniania hasłem
zmiana Hasła
zmienia hasło użytkownika. Do zmiany hasła użytkowników nie
jest wymagana znajomość starego hasła,
Okres ważności
zmiana okresu ważności hasła, może działać jako funkcja grupowa,
Termin ważności
zmiana terminu ważności hasła, może działać jako funkcja grupowa,
karTa(SmartCard)
zmiana parametrów uwierzytelniania kartą
Zmiana certyfikatu
pozwala na przypisanie użytkownikowi certyfikatu z pliku lub
z karty, bądź na usunięcie certyfikatu wcześniej przypisanego. Dla
programu działającego w systemie Linux certyfikat można wczytać
tylko z pliku,
Eksport certyfikatu
zapisuje certyfikat bieżącego użytkownika do pliku w formacie
PEM,
69
70
Rozdział III. Architektura systemu
Zestawienia — Hasła i Certyfikaty
zestawienie umożliwiające sprawdzenie stanu certyfikatów i haseł na dany, wybrany przez użytkownika, dzień. Do zestawienia możemy wybrać
certyfikaty lub hasła ważne, bliskie przedawnienia i nieważne. Wynik jest
prezentowany w okienku tymczasowym.
Jeśli ustawienia ochron, użytkowników lub grup wybranego systemu uległy zmianie, to w linii tytułu programu, za nazwą systemu, pojawi się gwiazdka sygnalizująca potrzebę zapisania pliku *.psw. Należy wtedy z głównego
menu wybrać opcję Systemy i Zapisanie zmian. Wywoływany jest wtedy program do zapisu zmian ochron (MacroPROTECT dla systemu Linux
lub protect.exe dla systemu Windows). Żeby zmiany zostały zapisane konieczne jest podanie klucza do definicji systemu, którego ochrony modyfikujemy.
Istnieje możliwość wyświetlenia efektywnych ochron danego użytkownika w postaci okienka analogicznego do sposobu wyświetlania ochron dla poszczególnych grup. Funkcjonalność ta jest dostępna z poziomu menu okienka użytkowników (akcja Ochrony/Obowiazujące dla Użytkownika).
Oprócz listy elementów dostępna jest dodatkowa informacja, z jakiej grupy
(lub grup) pochodzi ochrona danego elementu. Lista elementów chronionych
dla użytkownika dostępna jest po wybraniu z menu Ochrony/elementy
Chronione natomiast lista elementów dozwolonych po wybraniu Ochrony/elementy
Dozwolone.
Czasami, na przykład ze względów polityki bezpieczeństwa, konieczne jest
udokumentowanie aktualnego stanu ochron w aplikacjach. Z tego powodu w
MacroPASS istnieje możliwość przygotowania zestawienia dozwolonych lub
chronionych elementów aplikacji dla użytkownika. Zestawienie to jest dostępne z menu Zestawienia / Elementy dozwolone/chronione. Zestawienie to jest parametryzowane, użytkownik określa dialogowo poniższe parametry:
Listę użytkowników, którzy mają być uwzględnieni w sprawozdaniu
można zrobić zestawienie zarówno dla pojedynczego użytkownika jak i
dla wszystkich użytkowników aplikacji.
Typ elementów uwzględnionych w sprawozdaniu
można wybrać do zestawienia albo elementy dozwolone (nie chronione)
albo chronione.
Rodzaje elementów ochron, które mają być uwzględnione
można wybrać do zestawienia albo elementy dozwolone (nie chronione)
albo chronione:
III.14. Poufność dostępu do bazy
- menu,
- akcje okienek wertowania,
- pola okienek wertowania,
- drag’n’drop w okienkach wertowania,
- przyciski w okienkach wertowania,
- pola okienek redagowania,
- przyciski w okienkach redagowania,
- tabele i zmienne,
- pola tabel i zmiennych,
- maski procedur wbudowanych,
- maski sprawozdań,
- dostęp przez ODBC.
W przypadku zestawienia elementów dozwolonych, w zestawieniu znajdą
się te elementy systemu ochron, które nie są chronione w żadnej z grup danego
użytkownika. Wydruk elementów dozwolonych dla użytkownika uwzględnia
także przypisanie użytkownika do podsystemów. Jeśli w definicji jest zdefiniowane menu, które jest przypisane wyłącznie do podsystemów niedostępnych
dla użytkownika, to nie będzie się ono pojawiało na liści elementów dla niego
dozwolonych. W przypadku zestawienia elementów chronionych uwzględnione zostaną wszystkie chronione elementy zdefiniowane w każdej z grup użytkownika – jeśli dany element jest chroniony w więcej niż jednej grupie, na liście
pojawi się tylko raz. Dodatkowe założenia uwzględnione w zestawieniu:
— jeśli nałożona jest ochrona na plik z procedurami wbudowanymi, to
zestawienie uwzględnia to także na liście procedur z tego pliku,
— jeśli nałożona jest ochrona na tabelę/zmienną, to zestawienie
uwzględnia to także na liście pól tabel/zmiennych i na liście pól okienek wertowania i redagowania,
— jeśli nałożona jest ochrona na pole tabelo/zmiennej, to zestawienie
uwzględnia to także na liście pól okienek wertowania i redagowania.
Powyższe warunki nie dotyczą jednak pól reprezentantów pól złączeniowych,
ponieważ zbiór *.psw nie przechowuje informacji o relacjach. Korzystając z
wyżej opisanego zestawienia, w szczególności w odniesieniu do elementów dozwolonych należy pamiętać, że w przypadku Xpertis liczba takich elementów
71
72
Rozdział III. Architektura systemu
jest bardzo duża (m.in. dlatego, że niektóre struktury nie są dostępne z poziomu użytkownika, nie muszą być chronione). Zestawienie elementów dozwolonych dla jednego użytkownika i standardowej konfiguracji Xpertis może mieć
ponad 1000 stron!. Dlatego proces przygotowania struktur, analizy i generacji zestawienia może być długi. Najlepiej zatem wykonywać tego typu wydruki
wtedy, kiedy praca nad systemem ochron w danym momencie jest zakończona
a zmiany obowiązujące.
Załóżmy, że firma ma wiele oddziałów, użytkownicy aplikacji łączą się
z serwerem aplikacji przez sieć Internet, uwierzytelnianie odbywa się przy pomocy SmartCard. Certyfikaty wystawia zaufany urząd certyfikacji. Systemem
ochron zarządza administrator w centrali firmy. Proces uaktualnienia certyfikatu i pliku *.psw mógłby przebiegać następująco:
Korzystając z oprogramowania dostarczonego przez producenta karty,
użytkownik w oddziale generuje na karcie klucz prywatny i żądanie certyfikacji lub, jeśli certyfikat utracił ważność, tylko żądanie ponownej certyfikacji.
Żądanie certyfikacji zostaje wysyłane do urzędu certyfikacji, z którego w odpowiedzi wraca aktualny certyfikat. Użytkownik zapisuje certyfikat na karcie,
usuwając uprzednio stary jeśli było to odnowienie certyfikatu. Jeśli otrzymany
certyfikat jest w formacie PEM, można go od razu wysłać do centrali, w celu
zaimportowania go do MacroPASSA i uaktualnienia pliku *.psw. Jeśli format
pliku certyfikatu jest inny, można wyeksportować certyfikat z karty — wszystkie karty obsługiwane w MacroBASE udostępniają taką funkcjonalność. Należy w tym celu otworzyć podgląd certyfikatu i na zakładce Szczegóły wybrać
Kopiuj do pliku. Dalej należy postępować według wskazówek kreatora eksportu, wybierając po drodze format X.509 szyfrowany algorytmem Base-64.
Uzyskany w ten sposób plik można zaimportować do MacroPASSA, używając
funkcji Zmiana certyfikatu z menu karTa w okienku użytkowników.
15 Konwersja danych
W związku z ciągłym rozwojem oprogramowania i wynikającymi z niego
zmianami struktur bazy jak i programów wykonawczych, nieodzowna staje
się możliwość konwersji istniejącej bazy danych do nowego formatu. Można
tu wyróżnić następujące rodzaje operacji:
konwersja struktury danych
związana z modyfikacją definicji systemu
konwersja formatu danych
związana z nową wersją maszyny bazy danych
III.15. Konwersja danych
techniczne
naprawa danych i czynności pomocnicze
15.1 Konwersja struktury danych
Generator zastosowań pozwala na szybkie i skuteczne dostosowanie istniejącej
definicji do wymagań końcowego użytkownika. Może się to okazać konieczne
podczas adaptacji standardowej wersji oprogramowania, a także wówczas, gdy
pojawią się nowe potrzeby po pewnym okresie eksploatacji. Użytkownik ma
prawo oczekiwać, że dane wprowadzone poprzednio będą dostępne również
przy użyciu zaktualizowanej wersji definicji. Powinno to być możliwe nawet
po daleko idących zmianach w schemacie bazy danych. Jest to jedno z zastosowań programu MacroTRANSFER (transfer.exe dla systemu Windows).
Można przy jego pomocy dokonać, na podstawie starej i nowej definicji, aktualizacji struktury zbiorów danych łącznie z wykonaniem konwersji związanej
ze zmianami typów. Możliwe są następujące zmiany formatu:
REAL
INTEGER, STRING
DATE
STRING
INTEGER
REAL, STRING
TIME
STRING
STRING
REAL, DATE, INTEGER, MEMO, TIME, SYS_MEMO
MEMO
STRING, SYS_MEMO
SYS_MEMO
STRING, MEMO
REFERENCE
typ złączeniowy.
73
74
Rozdział III. Architektura systemu
Konwersja typu STRING na dowolny inny (z wyjątkiem: MEMO, SYS_MEMO) możliwa jest tylko pod warunkiem, że pole zawiera znaki dopuszczalne
dla formatu, na który konwertujemy. W przeciwnym wypadku wartości pól są
zerowane.
Przy wykonywaniu transferu pola typu REFERENCE na typ złączeniowy,
pole nie będzie zerowane, jeśli przynajmniej jedna maska słownika zapisana w
nagłówku tabeli będzie zgodna z maską słownika zapisaną w nowej definicji.
W przeciwnym przypadku wartości pola będą zerowane (czyli tak, jak przy
zmianie typu złączeniowego).
Możliwe jest wstępne uzyskanie raportu o zakresie potencjalnych zmian.
Wywołanie jest następujące:
MacroTRANSFER [-t] nazwa_systemu
Umieszczenie opcji -t spowoduje, że nie będą dokonywane żadne zmiany
w bazie danych, a na wyjściu pojawi się lista koniecznych zmian w strukturach.
Program musi być uruchomiony w katalogu, w którym znajduje się zbiór z deklaracją ścieżek. Zbiory z danymi i definicją systemu będą poszukiwane w katalogach wskazanych w deklaracji ścieżek. Może istnieć konieczność zmiany
istniejącego zbioru *.pth na czas transferu. Zbiór ten musi spełniać warunki:
— nie może zawierać odwołań do danych poprzez serwer, czyli należy usunąć nazwę serwera wraz ze znakami | ze wszystkich wierszy rozpoczynających się od dwukropka (:),
— wszystkie ścieżki do danych muszą być poprawne w systemie plików
komputera, na którym jest uruchamiany program.
Dodatkowo w katalogu z definicją systemu musi się znajdować nowa definicja z końcówką .new (oprócz starej z końcówką .def). Po zakończonej
konwersji danych oryginalne zbiory z danymi i definicją systemu będą zachowane na dysku ze zmienionymi końcówkami na .old. Dane będą konwertowane tylko wtedy, jeśli nie będzie na dysku archiwalnych zbiorów z końcówkami .old. W przypadku błędu w trakcie działania programu MacroTRANSFER (błędny dostęp do zbioru lub brak miejsca na dysku) wszystkie zmiany
w bazie są automatycznie wycofywane.
Program MacroTRANSFER nie dokonuje żadnych zmian w zbiorach indeksowych. Po starcie systemu wszystkie indeksy modyfikowanych tabel będą
odtwarzane. Na czas dokonywania transferu należy zatrzymać serwer bazy danych. Zmiana pliku wykorzystywanego aktualnie przez maszynę bazy danych
może doprowadzić do awarii systemu.
III.15. Konwersja danych
Transfer danego zbioru można wykonywać wielokrotnie (pod warunkiem
usuwania tworzonych plików *.old). Jeśli zbiór jest już w formacie wskazywanym przez nową definicję, pomija się transfer pliku.
Jeśli w starej i w nowej definicji są tabele o różnych akronimach i jednakowych nazwach lub nazwach zgodnych (mających przynajmniej jedną maskę
wspólną) i nie ma więcej tabel o zgodnej nazwie w nowej definicji, to tabele traktowane są, jako te same (zmiana akronimu tabeli). W takim przypadku
złączenia do tabeli w nowym systemie będą uznane za te same, co złączenia
do tabeli w starym (pola złączeniowe nie będą zerowane). W nowej definicji
może występować tabela o takim samym akronimie, jak zmieniany ze starej
definicji. Taka tabela będzie traktowana, jako dodana do definicji.
Wszystkie zintegrowane systemy, które mają być uwzględnione w transferze, można wyszczególnić w pliku transfer.itg. Każda linia pliku musi
zawierać ścieżkę dostępu do zbioru z deklaracją ścieżek zintegrowanego systemu (względnych lub bezwzględnych). Oprócz systemów wskazanych w zbiorze *.pth uwzględnione będą również te, które są wyszczególnione w pliku
transfer.itg. Plik jest wyszukiwany zgodnie z deklaracją ścieżek. Przykładowa zawartość pliku transfer.itg może wyglądać nastęująco:
../f000.pth/xpertis.pth
../f001.pth/xpertis.pth
../f002.pth/xpertis.pth
../f003.pth/xpertis.pth
Jeśli systemy zintegrowane maja tę samą definicję (zbiór *.def jest wspólny),
to wywołanie transferu struktury jednego z nich spowoduje również transfer
struktury pozostałych.
Program MacroTRANSFER umożliwia również zmianę nazwy pliku z danymi (zbioru *.mdb). Po wywołaniu:
MacroTRANSFER -nnazwa nowa_nazwa nazwa_systemu
zostaje zmieniona nazwa tabeli oraz wszystkie powiązania w nagłówkach tabel. W czasie transferu w definicji systemu powinna być już zapisana nowa
nazwa. W zbiorze z deklaracją ścieżek muszą być wpisane ścieżki do zbiorów
*.pth wszystkich zintegrowanych systemów. Wtedy będą odnalezione pliki,
które muszą być zmodyfikowane, ze wszystkich zintegrowanych systemów.
Jeśli tabela w nowym i starym systemie (z uwzględnieniem ewentualnej
zmiany akronimu tabeli) ma inną nazwę, to fakt ten będzie odnotowany w pliku *.trn. Dodatkowo, jeśli przynajmniej jeden plik ma nazwę niepasującą
75
76
Rozdział III. Architektura systemu
do nazwy tabeli w nowej definicji, to zostanie wypisana informacja o wymaganym transferze zmieniającym nazwy plików (transfer -n). Po akronimie tabeli
z nowej definicji pojawi się lista niedostępnych zbiorów *.mdb. Dla nich konieczne jest wykonanie transferu zmieniającego nazwy tak, aby pasowały do
maski tabeli w nowej definicji.
Transfer służący do zmiany nazw plików ma możliwość zmiany nazw wielu
zbiorów jednocześnie. Można to osiągnąć poprzez podanie masek zbiorów do
zamiany lub umieszczeniu listy zbiorów do zmiany w pliku. Skorzystanie z pliku może być przydatne przy jednoczesnej zmianie nazw kilku powiązanych ze
sobą tabel (w takim przypadku transfer pojedynczego pliku może się nie udać,
jeśli drugi zmieniany plik będzie niedostępny w definicji systemu). Wywołanie
może mieć postać:
MacroTRANSFER -n maska maska_def system
gdzie:
maska
może zawierać znaki zapytania. Przenazywane będą wszystkie zbiory pasujące do maski, znalezione zgodnie z deklaracją ścieżek,
maska_def
musi zawierać tyle samo znaków zapytania co maska. Dodatkowo
maska_def musi się dopasować do nazwy tabeli w systemie system.
Nazwa się dopasowuje, jeśli dla każdego znaku zapytania z maska_def
na tej samej pozycji jest znak zapytania w nazwie tabeli oraz dla każdego
stałego znaku z nazwy tabeli na tej samej pozycji w maska_def jest ten
sam znak.
Dla przykładu, jeśli w systemie system jest tabela o nazwie dane????, to
wtedy poniższe wywołanie jest prawidłowe:
MacroTRANSFER -n d07?? dane08?? system
gdyż każdy zbiór pasujący do maski dane08?? pasuje do dane???? oraz
d07?? ma tyle samo znaków zapytania co dane08??. Każdy zbiór, który dopasowuje się do maski maska będzie zamieniany na maska_def z zamienionymi kolejnymi znakami zapytania na znaki z nazwy zbioru, które są na
kolejnych wystąpieniach znaków zapytania w nazwa.
Transfer nie dojdzie do skutku, jeśli już istnieje plik o nazwie na jaką miałby
być zapisany jeden ze zbiorów pasujących do maska. Podobnie transfer zostanie przerwany, jeśli jeden ze zbiorów ma inną strukturę niż tabela do której
III.15. Konwersja danych
nazwy dopasowała się maska_def. Jeśli żaden zbiór nie pasuje do maska, to
zostanie wypisane ostrzeżenie o braków zbiorów.
Możliwe jest wykonanie kilku zmian nazw naraz. Wtedy wywołanie ma
postać:
MacroTRANSFER -n plik system
gdzie plik o nazwie plik będzie wyszukiwany zgodnie z deklaracją ścieżek
(*.pth), zaś kolejne wiersze mają postać:
maska maska_def
Znaczenie maska i maska_def jest identyczne jak dla wywołania w linii komend. W tym przypadku transfer może nie dojść do skutku jeśli:
— dla jednego z wierszy, jeden z plików zmieniałby nazwę na już istniejącą
na dysku,
— nazwa jednego pliku dopasowuje się do maski maska w różnych liniach,
ale miałaby być zmieniana na dwie różne nazwy,
— dwa pliki zmieniałyby nazwę na tę samą (możliwe przy dwóch liniach w
pliku dotyczących tej samej tabeli).
Dla każdej linii w pliku, dla której nie dopasował się żaden plik do maski
maska, będzie wypisane ostrzeżenie.
W wyniku transferu zmieniającego nazwę pliku, nowy plik powstaje w katalogu wskazanym przez plik z deklaracją ścieżek.
Program MacroTRANSFER (transfer.exe) można uruchamiać w trybie
wsadowym. Opcja -b powoduje, że na wszystkie pytania pochodzące z programu, będzie automatycznie udzielana odpowiedź umożliwiająca kontynuowanie transferu.
15.2 Konwersja formatu danych
Aby możliwe było uruchomienie z bieżącą wersją programów, bazy danych
pracującej do tej pory z wersjami 5.xx i 6.xx konieczne jest przekonwertowanie
bazy do wymaganego, nowego formatu. Oprócz programu MacroTRANSFER,
potrzebny jest do tego celu plik z formułami wykorzystywany w trakcie jego
trwania. Dla każdego pola złączeniowego do tabeli maskowanej trzeba napisać formułę o nazwie:
\TABELA.POLE
77
78
Rozdział III. Architektura systemu
gdzie TABELA zamieniamy na akronim tabeli z której pochodzi, a POLE —
na akronim pola. Wynikiem takiej formuły musi być nazwa zbioru maskowanego, do którego odnosi się złączenie. Formuła będzie wykonana dla każdego
rekordu zawierającego niezerową wartość w polu. W treści formuły można
odwoływać się do wartości pól rekordu (bez prefiksowania nazwą tabeli). Odwołania do innych tabel (w szczególności podczytanie złączeń) są zabronione.
Dostępne są dwa argumenty. Pierwszy zawiera proponowaną nazwę maski. Jeśli przetwarzana tabela i tabela do której jest złączenie są maskowane i mają
taką samą liczbę znaków zapytania w masce, to zwracana jest maska słownika
z zamienionymi znakami zapytania na te same znaki, co w bieżącym zbiorze.
W przeciwnym przypadku zwracany jest pusty ciąg znaków. Drugim argumentem jest nazwa przetwarzanej tabeli.
Wynikiem zwracanym przez formułę może też być nazwa pliku z końcówką .ref. W takim przypadku nazwa pliku maskowanego będzie pobierana
z wskazanego pliku. Plik poszukiwany jest zgodnie z deklaracją ścieżek. Każdy
wiersz pliku musi zawierać dwie wartości oddzielone przecinkiem. Pierwsza
to numer rekordu, drugi to nazwa zbioru maskowanego, do którego jest złączenie. Fragment takiego pliku może wyglądać:
234,dokum_01
235,dokum_02
237,dokum_01
Wszystkie powyższe formuły należy zapisać w jednym pliku z rozszerzeniem .fml, umieszczonym zgodnie z deklaracją ścieżek.
W celu wykonania transferu należy wywołać:
MacroTRANSFER -5671form syst
gdzie form zastępujemy przez nazwę pliku z formułami (bez wpisywania
rozszerzenia .fml), zaś syst — nazwą systemu.
Jeśli w danych które transferujemy, wystąpią złączenia do nieistniejących
rekordów, pojawi się pytanie o usunięcie wszystkich błędnych złączeń. Odpowiedź twierdząca spowoduje, że w przeniesionym systemie wszystkie odwołania do nieistniejących rekordów będą wyzerowane. Lista wszystkich zmian
będzie dostępna w pliku *.trc. Odpowiedź negatywna spowoduje przerwanie
działania programu i anulowanie wszystkich zmian.
Transfer -5671 można wykonywać wielokrotnie dla tych samych zbiorów
— jeśli zbiór jest już w nowym formacie, to pozostanie bez zmian. Modyfikacjom mogą jednak ulec wartości liczników i nagłówek pliku.
III.15. Konwersja danych
Po zakończeniu transferu danych do nowej wersji, w pliku z rozszerzeniem
.tr7 będą zapisane powiązania tabel ze słownikami maskowanymi — wartości
zwracane przez formułę wykorzystywaną przy transferze.
15.3 Naprawa danych
Jeśli dane uległy uszkodzeniu (np. pojawił się komunikat mówiący o błędnej
wartości licznika lub plik z danymi uległ uszkodzeniu), to można próbować
naprawić dane wywołując program MacroTRANSFER z opcją -c i nazwą systemu jako argumentem. Powoduje on obliczenie wartości liczników i wyzerowanie wartości pól złączeniowych do nieistniejących rekordów i zbiorów. Jeśli
system jest zintegrowany, to w deklaracji ścieżek trzeba uwzględnić dostęp do
wszystkich zbiorów *.pth zintegrowanych systemów.
Jeśli w trakcie transferu program nie będzie mógł znaleźć zbioru z danymi
słownika (o danej nazwie i sygnaturze), to pojawi się pytanie o usunięcie powiązania między zbiorami. Po wybraniu Nie, wszystkie zmiany zostaną anulowane. Należy wtedy sprawdzić, czy w deklaracji ścieżek została umieszczona
ścieżka dostępu do zbioru *.pth systemu, z którego pochodzi słownik. Drugą
przyczyną powstania powyższego błędu może być usunięcie pliku tabeli słownika lub zastąpienie go zbiorem o takiej samej nazwie, powstałym w innym
systemie (z inną sygnaturą).
W przypadku, gdy nie możemy odtworzyć właściwego zbioru słownika,
można odpowiedzieć podczas transferu Tak. Wtedy straci się powiązania pomiędzy zbiorem, a słownikiem, ale będziemy mogli uruchomić system. Po
transferze, w pliku z rozszerzeniem .trc będzie zawarta lista zerowanych złączeń oraz zmienianych wartości liczników.
Działanie transferu naprawczego składa się z następujących czynności, wykonywanych dla każdego zbioru:
1. pobranie z nagłówka słownika listy zbiorów *.mdb, które z niego korzystają. Zbiory są wyszukiwane według *.pth. Jeśli nie zostaną znalezione (nie ma takiej nazwy lub jest, ale z inną sygnaturą), to są wyszukiwane
według *.pth innych systemów,
2. odtworzenie liczników na podstawie pobranych zbiorów,
3. nadanie nowej sygnatury (zostanie również zapisana we wszystkich powiązanych zbiorach),
Dodatkowo dostępna jest opcja -cl oznaczająca zwykły transfer z opcją
-c z dodatkową naprawą błędnych danych (zbiory o nieprawidłowych długo-
79
80
Rozdział III. Architektura systemu
ściach są powiększane zerowymi wartościami tak, aby miały poprawną długość).
Podczas transferu naprawczego usuwane są wszystkie zbiory *.ndx oraz
*.del umieszczone w katalogu z danymi (zbiorami *.mdb). Od wersji 11.20
wszystkie zbiory indeksowe przechowywane są w podkatalogu ind. Zwróćmy uwagę, że po transferze naprawczym zbiory zmieniają sygnatury, czyli są
niezgodne z żadnymi wcześniej zapisanymi w archiwum. Oznacza to, że po
wykonaniu transferu należy stworzyć nową kopię archiwalną.
W związku z wprowadzeniem od wersji 12.10 standardu Unicode i zwiazanej z tym zmiany formatu zbiorów z danymi (plików *.mdb), MacroTRANSFER z opcją -c oprócz naprawy danych może posłuzyć do niezbędnej konwersji danych z poprzednich wersji systemu na bieżacą.
15.4 Weryfikacja pliku macro.use
Wywołując MacroTRANSFER z opcją -m można zweryfikować, czy wszystkie
potrzebne procedury są zdefiniowane w pliku macro.use. Na standardowe
wyjście będą wypisane brakujące wpisy. Przykładowe wywołanie:
MacroTRANSFER -m system > macro.use
16 Porównanie definicji systemów
Pomocny przy wprowadzaniu zmian i aktualizacji systemów może być program compdef.exe służący do porównywania definicji. Jest on dostarczany
ze wszystkimi pozostałymi programami wykonawczymi i korzysta z tych samych wspólnych zbiorów *.dll. Można nim porównywać definicje systemów
ze wszystkich wersji, które są obsługiwane przez system.
Działanie programu polega na wypisaniu zmian pomiędzy dwoma wersjami tego samego systemu. Każda różnica — usunięcie, dodanie lub zmodyfikowanie elementu będzie rejestrowana w pliku wynikowym. W przypadku dodania lub usunięcia, elementy zagnieżdżone nie są uwzględnione w raporcie.
Wywołanie programu ma postać:
compdef.exe [-l[separator]] [-u] nazwa_systemu
W katalogu wywołania muszą znajdować się porównywane definicje systemu – jedna z końcówką .def, druga z końcówką .new. Wynik porównania będzie dostępny jako plik tekstowy, wypisywany na standardowe wyjście programu. Oprócz standardowego wyjścia, program compdef.exe tworzy zgodnie
III.16. Porównanie definicji systemów
z deklaracją ścieżek (*.pth) plik o nazwie systemu z rozszerzeniem *.mcd z całą
zawartością wypisywaną na konsolę. Plik kodowany jest w standardzie UTF-8.
Opis każdej z różnic rozpoczyna się w nowym wierszu znakiem # z następującym po nim kodem różnicy. Dalej dostępne będzie wskazanie elementu w systemie. Następnie w przypadku usunięcia i modyfikacji znaki <- i stara wartości
elementu. Potem, dla dodania i modyfikacji, znaki -> i nowa wartość. Wszystkie opisane wartości wypisywane są domyślnie w oddzielnych wierszach. Użycie opcji -l powoduje, że będą umieszczone w jednym wierszu, oddzielane znakiem tabulacji. Można ustalić inny znak separujący, podając go przy wywołaniu bezpośrednio po opcji -l. Z kolei parametr -u powoduje, że w wyniku nie
pojawiają się informacje o zmianach położenia i rozmiaru okienek, zmianach
położenia i kolejności pól w okienku oraz o zmianie kolejności pól w tabeli.
Kod składa się z napisu zakończonego znakiem:
- (minus) --- usunięcie
+ (plus) --- dodanie
! (wykrzyknik) --- modyfikacja
Pozostałe litery w kodzie określają następujące elementy:
S
system,
SS
ochrona systemu,
SN
nazwisko wpisane w okienku generowania,
SI
imię wpisane w okienku generowania,
SD
opis systemu,
SF
SB
formułę startowa,
podsystem,
SBF
formułę startową podsystemu,
SBK
opis podsystemu,
SBM
menu przypisane do podsystemu,
T
tabelę,
81
82
Rozdział III. Architektura systemu
TA
zmiana akronimu tabeli,
TSI
nazwę indeksu z przypisania tabeli do systemu,
TSW
akronim okienka wertowania z przypisania do systemu,
TSR
akronim okienka redagowania z przypisania do systemu,
TSZ
akronim okienka wzorca z przypisania do systemu,
TSS
akronim okienka złączenia z przypisania do systemu,
TSC
szyfrowanie tabeli,
TSL
dziennik systemu,
TTAB
formułę triggera add() przed,
TTABK
komentarz triggera add() przed,
TTAA
formułę triggera add() po,
TTAAK
komentarz triggera add() po,
TTPB
formułę triggera put() przed,
TTPBK
komentarz triggera put() przed,
TTPA
formułę triggera put() po,
TTPAK
komentarz triggera put() po,
TTDB
formułę triggera del() przed,
III.16. Porównanie definicji systemów
TTDBK
komentarz triggera del() przed,
TTDA
formułę triggera del() po,
TTDAK
komentarz triggera del() po,
TTMB
formułę triggera memo_put() przed,
TTMBK
komentarz triggera memo_put() przed,
TTMA
formułę triggera memo_put() po,
TTMAK
komentarz triggera memo_put() po,
TP
pole tabeli,
TPN
nazwę pola tabeli,
TPT
typ pola,
TPL
długość pola,
TPK
komentarz pola tabeli,
TPW
formułę Wzorzec dla pola,
TPB
formułę Wartość początkowa,
TPC
znacznik Kolumny z przypisania do systemu
TPD
formułę Przed Wyświetleniem,
TPE
formułę Przed redagowaniem,
83
84
Rozdział III. Architektura systemu
TPF
formułę Klawisz F3,
TPA
formułę Po redagowaniu,
TPG
formułę Format redagowania,
TPH
formułę Format wyświetlania,
TI
indeks tabeli,
TIA
akronim indeksu tabeli,
TIU
zaznaczenie jako unikalny,
TIH
zaznaczenie jako ukryty,
TID
znacznik Drzewo w opisie indeksu,
TIT
tekst do menu,
TIP
pole indeksu,
TIPZ
złączenie pola indeksu,
TIPK
kolejność względem pola,
TR
okienko redagowania tabeli,
TRT
tytuł okienka redagowania,
TRA
zaznaczenie jako automatyczne,
TRK
komentarz okienka redagowania tabeli,
TRX
współrzędną X położenia okienka,
III.16. Porównanie definicji systemów
TRY
współrzędną Y,
TRW
szerokość okienka,
TRH
wysokość okienka,
TRM
znacznik wyrównania dla okienka redagowania,
TRC
wyrównanie przycisków,
TRM
dopasowanie szerokości okna do tytułu,
TRP
pole w okienku,
TRPN
wyświetlaną etykietę pola,
TRPR
pole w złączeniu,
TRPI
indeks wyszukiwania pola w złączeniu,
TRPL
szerokość pola,
TRPD
precyzja (Dł.)
TRPE
zaznaczenie jako modyfikowalne,
TRPW
wyrównanie etykiet,
TRPP
podpowiedź,
TRPK
rodzaj pola,
TRPX
współrzędną X etykiety pola,
TRPY
współrzędną Y etykiety pola,
85
86
Rozdział III. Architektura systemu
TRPZ
współrzędną X zawartości pola,
TRPV
współrzędną Y zawartości pola,
TRPM
wyrównanie wpisane dla okienka redagowania,
TRPT
nazwa zakładki,
TRPC
ikona zakładki okna redagowania,
TRPB
znacznik filtra dla pola okienka redagowania tabeli,
TRPS
znacznik Dołączanie dla pola okienka redagowania tabeli,
TRPO
rozszerzone edytowanie pola typu memo tabeli,
TRPBB
przycisków pola okna redagowania tabeli,
TRPBBI
ikona,
TRPBBN
pozycja,
TRPBBT
tytuł,
TRPBBP
podpowiedź,
TRPBBF
formuła,
TRBB
przycisk okienka redagowania tabeli,
TRBS
rozmiar sekcji z przyciskami,
TRBBT
tytuł,
TRBBI
ikona,
III.16. Porównanie definicji systemów
TRBBP
podpowiedź,
TRBBF
formuła,
TRBBX
położenie X,
TRBBY
położenie Y,
TRBBW
szerokość,
TRBBC
wyrównanie,
TRBBK
wybór klawisza,
TRBBD
domyślny,
TRBBN
pozycja,
TRB
kody związane z panelami przycisków w okienkach redagowania
TRBL
rozmiar lewego panelu z przyciskami,
TRBR
rozmiar prawego panelu z przyciskami,
TRBT
rozmiar górnego panelu z przyciskami,
TRBS
rozmiar dolnego panelu z przyciskami,
TWBBL
panel, na którym znajduje się przycisk,
TWBBZ
dorównanie przycisku w panelu,
TW
okienko wertowania tabeli,
TWT
tytuł okienka wertowania,
87
88
Rozdział III. Architektura systemu
TWI
obsługę indeksów tymczasowych (Ndx.),
TWN
tekst dla wybierania,
TWB
znacznik Filtr dla okna wertowania,
TWC
znacznik Odśw. dla okna wertowania,
TWD
znacznik Zaznacz war. dla okna wertowania,
TWE
znacznik Kopiowanie dla okna wertowania,
TWK
komentarz okienka wertowania,
TWM
znacznik wyrównania okienka wertowania,
TWX
współrzędną X położenia okienka,
TWY
współrzędną Y,
TWW
szerokość okienka,
TWH
wysokość okienka,
TWS
wysokość części wertowania,
TWR
znacznik Drzewo dla okna wertowania,
TWP
pole okienka,
TWPN
wyświetlaną etykietę pola,
TWPR
pole w złączeniu,
III.16. Porównanie definicji systemów
TWPB
znacznik filtra dla pola okienka wertowania,
TWPI
indeks wyszukiwania pola w złączeniu,
TWPL
szerokość pola,
TWPD
precyzja (Dł.)
TWPE
zaznaczenie jako modyfikowalne,
TWPW
wyrównanie etykiet,
TWPP
podpowiedź,
TWPK
rodzaj pola,
TWPF
zaznaczenie jako wolne,
TWPX
współrzędną X etykiety pola,
TWPY
współrzędną Y etykiety pola,
TWPZ
współrzędną X zawartości pola,
TWPV
współrzędną Y zawartości pola,
TWPM
wyrównanie wpisane dla okienka wertowania,
TWPA
szerokość kolumny zależna od etykiety,
TWPS
sposób dodawania do słownika,
TWPO
rozszerzone edytowanie pola typu MEMO tabeli,
TWA
akcję okienka wertowania,
TWAC
rodzaj akcji,
89
90
Rozdział III. Architektura systemu
TWAN
nazwę akcji,
TWAN
nazwę akcji,
TWAE
ikona akcji niepustej dziedziny,
TWAB
formułę Przed akcją,
TWAA
formułę Po akcji,
TWAD
zaznaczenie jako domyślna,
TWAG
akcja grupowa,
TWAI
formuła Przed akcją dla akcji grupowej,
TWAJ
formuła Po akcji dla akcji grupowej,
TWBB
przycisk okienka wertowania tabeli,
TWBS
rozmiar sekcji z przyciskami,
TWBBT
tytuł,
TWBBI
ikona,
TWBBP
podpowiedź,
TWBBA
akcja,
TWBBFB
formuła Przed,
TWBBFA
formuła Po,
TWBBFD
formuła Grupa przed,
III.16. Porównanie definicji systemów
TWBBFC
formuła Grupa po,
TWBBM
dziedzina,
TWBBW
szerokość,
TWBBG
grupy,
TWBBC
wyrównanie,
TWBBX
położenie X,
TWBBY
położenie Y,
TWBBK
klawisz,
TWBBU
wybór z menu (ścieżka do akcji),
TWBBD
domyślny (znacznik wyróżnienia przycisku),
TWBBN
pozycja,
TWB
kody związane z panelami przycisków w okienkach wertowania,
TWBL
rozmiar lewego panelu z przyciskami,
TWBS
rozmiar prawego panelu z przyciskami,
TWBT
rozmiar górnego panelu z przyciskami,
TWBX
rozmiar dolnego panelu z przyciskami,
TWBBL
panel, na którym znajduje się przycisk,
TWBBZ
dorównanie przycisku w panelu,
TG
okienko grupowe,
91
92
Rozdział III. Architektura systemu
TGH
wysokość okienka,
TGI
formułę Wypełnienie,
TGK
komentarz okienka grupowego,
TGT
tytuł okienka,
TGW
szerokość okienka,
TGX
współrzędną X położenia okienka,
TGY
współrzędną Y położenia okienka,
TGE
element okienka grupowego,
TGZ
formułę Zamykanie,
TGR
formułę Odświeżanie,
TGEO
formułę Po odświeżeniu,
TGEU
formułę przed lub po obsłudze okienka w grupie,
TGET
zakładkę, na której umieszczony element okienka,
TGEI
ikona zakładki okna grupowego,
TGEX
współrzędną X położenia elementu okienka,
TGEY
współrzędną Y położenia elementu okienka,
TGEH
wysokość elementu okna grupowego,
TGEW
szerokość elementu okna grupowego,
III.16. Porównanie definicji systemów
TGEA
aktywowanie okienka po zmianie zakładki,
TGEP
umieszczenie okienka w części stałej,
TGEM
tryb wyświetlania okna składowego,
TGEN
identyfikator dodawanego panelu,
TGEZ
sposób ułożenia panelu,
TGED
identyfikator panelu, który ma być dzielony,
TK
komentarz tabeli,
Z
zmienną,
ZA
zmiana akronimu zmiennej,
ZSR
akronim okienka redagowania z przypisania do systemu,
ZP
pole zmiennej,
ZPN
nazwę pola zmiennej,
ZPT
typ pola,
ZPL
długość pola,
ZPK
komentarz pola zmiennej,
ZPW
formułę Wzorzec dla pola,
ZPB
formułę Wartość początkowa,
ZPD
formułę Przed Wyświetleniem,
93
94
Rozdział III. Architektura systemu
ZPE
formułę Przed redagowaniem,
ZPF
formułę Klawisz F3,
ZPA
formułę Po redagowaniu,
ZPG
formułę Format redagowania zmiennej strukturalnej,
ZPH
formułę Format wyświetlaniazmiennej strukturalnej,
ZR
okienko redagowania zmiennej,
ZRT
tytuł okienka redagowania,
ZRK
komentarz okienka redagowania zmiennej,
ZRA
zaznaczenie jako automatyczne,
ZRX
współrzędną X położenia okienka,
ZRY
współrzędną Y,
ZRW
szerokość okienka,
ZRH
wysokość okienka,
ZRM
znacznik wyrównania dla okienka redagowania zmiennej,
ZRBB
przycisk okna redagowania zmiennej,
ZRBS
rozmiar sekcji z przyciskami,
ZRBBT
tytuł,
ZRBBI
ikona,
III.16. Porównanie definicji systemów
ZRBBP
podpowiedź,
ZRBBF
formuła,
ZRBBX
położenie X,
ZRBBY
położenie Y,
ZRBBW
szerokość,
ZRBBC
wyrównanie,
ZRBBK
wybór klawisza,
ZRBBD
domyślny,
ZRBBN
pozycja,
ZRP
pole w okienku,
ZRPN
wyświetlaną etykietę pola,
ZRPR
pole w złączeniu,
ZRPB
znacznik Filtr pola okienka redagowania zmiennej,
ZRPI
indeks wyszukiwania pola w złączeniu,
ZRPL
szerokość pola,
ZRPD
precyzja (Dł.)
ZRPE
zaznaczenie jako modyfikowalne,
ZRPW
wyrównanie etykiet,
95
96
Rozdział III. Architektura systemu
ZRPP
podpowiedź,
ZRPK
rodzaj pola,
ZRPX
współrzędną X etykiety pola,
ZRPY
współrzędną Y etykiety pola,
ZRPZ
współrzędną X zawartości pola,
ZRPV
współrzędną Y zawartości pola,
ZRPM
wyrównanie wpisane dla okienka redagowania,
ZRPT
nazwa zakładki,
ZRPS
znacznik Dołączanie dla pola okienka redagowania zmiennej,
ZRPO
rozszerzone edytowanie pola typu MEMO zmiennej,
ZRPBB
przycisk pola okna redagowania zmiennej,
ZRPBBI
ikona,
ZRPBBN
pozycja,
ZRPBBT
tytuł,
ZRPBBP
podpowiedź,
ZRPBBF
formuła,
panele przycisków w okienkach redagowaniach zmiennych,
ZRBL
rozmiar lewego panelu z przyciskami,
III.16. Porównanie definicji systemów
ZRBR
rozmiar prawego panelu z przyciskami,
ZRBT
rozmiar górnego panelu z przyciskami,
ZRBS
rozmiar dolnego panelu z przyciskami,
ZWBBL
panel, na którym znajduje się przycisk,
ZWBBZ
dorównanie przycisku w panelu,
ZWBBZ
dorównanie przycisku w panelu,
ZK
komentarz zmiennej,
M
menu,
MK
komentarz menu,
MP
pozycję menu,
MPI
ikona pozycji menu,
MPP
podpowiedź do pozycji menu,
MPF
przypisana formułę do pozycji menu,
F
formułę,
FT
treść formuły.
Przykładowo, jeśli dodamy pole do tabeli z przypisaną formułą Przed
redagowaniem i umieścimy je w okienku wertowania, to otrzymamy w wyniku informację o dodaniu pola (bez informacji o przypisanej formule), zmianie szerokości okienka wertowania i dodaniu pola do okienka:
# TP+
Tabela: a [A]
97
98
Rozdział III. Architektura systemu
Pole: POLE
Pozycja
->
2
# TWW!
Tabela: a [A]
Okienko wertowania: A
Szerokość
<22
->
43
# TWP+
Tabela: a [A]
Okienko wertowania: A
Pole: A.POLE
Pozycja
->
2
Wykorzystując opcję -l; otrzymamy te same informacje w bardziej zwięzłej formie. Każda różnica będzie zapisana w jednym wierszu. Powyższy przykład wyglądałby następująco:
# TP+;Tabela: a [A];Pole: POLE;Pozycja;->;2 ;
# TWW!;Tabela: a [A];Okienko wertowania: A;
Szerokość;<-;22 ;->;43 ;
# TWP+;Tabela: a [A];Okienko wertowania: A;
Pole: A.POLE;Pozycja;->;2
;
17 Pisanie do portów zdalnych komputerów
MacroDEVICE umożliwia wysyłanie i pobieranie znaków z urządzeń przyłączonych do portów komputerów dostępnych w sieci z protokołem TCP/IP, na
których program MacroDEVICE (dostarczany z pakietem MacroBASE) został
uruchomiony. Pośredniczy on w komunikacji pomiędzy serwerem aplikacji,
działającym na odległym komputerze, a urządzeniem podłączonym do portu
szeregowego lub równoległego.
III.17. Pisanie do portów zdalnych komputerów
Przy uruchomieniu programu MacroDEVICE można podać następujące
parametry:
-p numer
numer portu, poprzez który będą odbierane zgłoszenia. Domyślną wartością (w przypadku pominięcia argumentu) jest 5777
-n nazwa
nazwa którą trzeba będzie podać przy odwołaniu się do portu komputera w funkcji fopen. W przypadku pominięcia parametru, program sam
wygeneruje nazwę (będzie ona wypisana na ekranie w wersji linuxowej
i dostępna w okienku w wersji windowsowej). Nazwa nie może przekraczać 31 znaków
-t czas
maksymalna liczba minut, która może upłynąć od ostatniego dostępu
do urządzenia. Po tym czasie, połączenie zostaje zamykane. Domyślną
wartością jest 20
-l plik
nazwa pliku, w którym będą zapisywane komunikaty o błędach w działaniu MacroDEVICE. Pominięcie argumentu oznacza, że plik nie będzie
tworzony.
Przykładowe wywołanie w systemie Windows:
mdevice.exe -n drukarka
oznacza, że dostęp do urządzeń będzie poprzez nazwę drukarka, komunikacja odbywać będzie się poprzez port 5777 i nie będzie tworzony plik z rejestrowanymi błędami.
Do tak zdefiniowanego urządzenia odwołujemy się za pomocą funkcji
fopen. Jeśli w pierwszym parametrze, bezpośrednio przed nazwą, podamy
specjalny adres komputera z uruchomionym programem MacroDEVICE, to
wszystkie polecenia pisania i czytania będą się odnosić do urządzenia na tym
właśnie komputerze. Adres ma następującą postać:
|nazwa@adres_ip:port_nasłuchu|
gdzie:
— nazwa — nadana nazwa przy uruchomieniu MacroDEVICE (parametr
-n)
99
100
Rozdział III. Architektura systemu
— adres_ip — adres komputera, na którym działa MacroDEVICE,
— port_nasłuchu — numer portu podany przy uruchomieniu MacroDEVICE (parametr -p). Część po dwukropku można pominąć — będzie
wtedy przyjęty domyślny port — 5777.
Przykładowe wywołanie może mieć postać:
fopen(’|[email protected]|com2:’, ’d’)
Po przyciśnięciu prawego przycisku myszy na ikonce programu, dostępne będą aktualne ustawienia programu oraz przycisk Zakończ umożliwiający
zakończenie udostępniania portów w komputerze. W wersji linuxowej zakończenie działania programu MacroDEVICE nastąpi po ponownym wywołaniu
z opcją -s lub -sf. W drugim przypadku program zakończy działanie również
przy aktywnych połączeniach. MacroDEVICE może obsługiwać kilku użytkowników jednocześnie pod warunkiem, że nie otwierają tych samych zasobów.
18 Praca z systemem z poziomu przeglądarki internetowej
W systemie jest możliwość dostępu do danych z poziomu przeglądarki internetowej. Idea polega na uruchomieniu skryptu CGI — programu MacroCGI
(w wersji dla Windows mhtmlcgi.exe) — który uruchamia system i wykonuje zadane procedury. Wyniki są zwracane poprzez stronę w formacie
HTML. Uruchomienie programu MacroCGI pod Linuksem wymaga biblioteki libstdc++.so.6. W przypadku, gdy opcja WWW dla serwera nie jest
dostępna, wówczas biblioteka nie jest wymagana.
Aby umożliwić dostęp do danych przez przeglądarkę internetową należy:
1. przekopiować zbiór mhtmlcgi.exe (lub MacroCGI dla wersji linuxowej) do katalogu, z którego mogą być wykonywane skrypty CGI,
2. utworzyć plik o nazwie macrocgi.ini, definiujący które pliki mogą
być wykorzystane jako szablony. Plik macrocgi.ini jest wyszukiwany według deklaracji ścieżek (*.pth). System nie posiadający pliku deklaracji ścieżek (*.pth) nie może być udostępniany przez MacroCGI.
3. uruchomić serwer bazy danych,
III.18. Praca z systemem z poziomu przeglądarki internetowej
4. udostępnić stronę, z której uruchamiany będzie program MacroCGI.
Do programu MacroCGI powinny być przekazane następujące zmienne:
SYSTEM_NAME
nazwa systemu,
SYSTEM_PATH
ścieżka dostępu do katalogu z plikiem *.pth,
HTML_TEMPLATE
ścieżka do pliku z szablonem strony,
HTML_TEMPLATE_PTH
nazwa pliku z szablonem strony. Plik będzie wyszukiwany zgodnie z deklaracją ścieżek.
Po wywołaniu skryptu interpretowany jest wskazany szablon i na jego podstawie powstaje strona wynikowa. Tekst z szablonu kopiowany jest do strony
wynikowej. Dodatkowo interpretowane są następujące konstrukcje:
{FSTR: formuła}
spowoduje wykonanie formuły w systemie. Jej wynik będzie wpisywany
na stronę. Jeśli chcemy w obrębie danej formuły wypisać więcej niż jedną
linię, możemy posłużyć się funkcją h_echo. Argumentem funkcji powinien być tekst, który ma być wypisany na stronie wynikowej. Funkcja
ta jest szczególnie wygodna, gdy chcemy korzystać z formuł zapisanych
w zewnętrznych plikach *.fml.
{FREPORT: nazwa}
wykona sprawozdanie o nazwie przekazanej poprzez argument nazwa.
Konstrukcja będzie zastąpiona wynikiem sprawozdania — samym tekstem, bez uwzględnienia zmiany czcionki, odstępu międzywierszowego
i podziału na strony. Ze względu na to, że sprawozdania są przygotowywane zawsze czcionką nieproporcjonalną, to warto powyższą konstrukcję ująć pomiędzy znaczniki wymuszające pismo maszynowe:
<PRE>
{FREPORT: ’ceny’}
</PRE>
konstrukcja iteracyjna pozwalająca na wypisanie serii fragmentów strony. Pętla przyjmuje postać:
101
102
Rozdział III. Architektura systemu
{FLOOP: war_pocz--war_nast--wyk}
........
{/FLOOP}
gdzie
— war_pocz — warunek początkowy pętli,
— war_nast — warunek kolejnego obrotu,
— wyk — czy wykonać (wypisać) ciało pętli dla bieżącego obrotu.
Cała konstrukcja jest zamieniana na tekst wypisywany w jej wnętrzu,
stosowną liczbę razy. Konstrukcje iteracyjne mogą być zagnieżdżone.
Konstrukcja iteracyjna może być stosowana jako konstrukcja warunkowa jeżeli ustali się drugi argument na 0, trzeci na 1:
{FLOOP:warunek--0--1}
.........
{/FLOOP}
Poniżej przedstawiony jest przykład konstrukcji zwracającej tabelkę
z wartościami pól tabeli:
<TABLE border="1">
{FLOOP: TAB.prefix(SLO.ref);
TAB.first--TAB.next--1}
<TR>
<TD>{FSTR: TAB.POLE1}</TD>
<TD>{FSTR: TAB.POLE2}</TD>
</TR>
{/FLOOP}
</TABLE>
Jak wcześniej wspomniano, koniecznie trzeba przekazać do skryptu parametry mówiące o systemie i szablonie. Można również zdefiniować dodatkowe
wartości. Po zatwierdzeniu strony:
<HTML><HEAD>
<TITLE>Baza danych</TITLE>
</HEAD>
III.18. Praca z systemem z poziomu przeglądarki internetowej
<BODY>
<H1>Szukanie w bazie</H1>
<FORM ACTION="/cgi-bin/MHTMLCGI.EXE"
METHOD=POST>
<INPUT TYPE="text" NAME="Wzorzec">
<INPUT TYPE=SUBMIT NAME="Ok"
VALUE="Szukaj">
<INPUT TYPE=HIDDEN NAME="SYSTEM_PATH"
VALUE="c:/fiks">
<INPUT TYPE=HIDDEN NAME="SYSTEM_NAME"
VALUE="fiks">
<INPUT TYPE=HIDDEN NAME="HTML_TEMPLATE"
VALUE="szukaj.html">
</FORM>
</BODY>
do skryptu będą przekazane wszystkie zdefiniowane w formularzu zmienne.
W szczególności będzie dostępna wartość zredagowana przez użytkownika
w polu Wzorzec. Przed interpretowaniem szablonu deklarowana jest klasa
o nazwie HTML_OBJ. Klasa zawiera pola o nazwach takich jak nazwy zmiennych przekazywanych do skryptu. Nazwy są skracane do 8 znaków, jeśli są
dłuższe. Potem wykonywana jest formuła startowa systemu (z pominięciem
funkcji zawierających konwersację — np. menu). Po zakończeniu wykonywania formuły startowej interpretowany jest szablon.
Do programu MacroCGI można przekazać do 16383 argumentów (klasa HTML_OBJ może mieć maksymalnie tyle pól po zwiększeniu liczby argumentów w funkcji obj_decl). Zmienne, które pokrywają się na pierwszych
8 znakach ze wcześniej zdefiniowanymi, są ignorowane. W pierwszej kolejności rozpatrywane są zmienne: SYSTEM_PATH, SYSTEM_NAME, PARAMS,
HTM_TEMPLATE_PTH, HTML_TEMPLATE. Dalsze w kolejności wystąpienia
na liście argumentów. Poniżej przedstawiony jest przykład odwołania się do
zmiennych w szablonie:
<H1>Wynik szukania</H1>
<HR>
{FSTR: HTML:=obj_new(@.CLASS.HTML_OBJ); ’’}
{FSTR: SLO.find_key(-HTML.Wzorzec);
{? SLO.SL = HTML.Wzorzec || SLO.SL
|| ’Nie znaleziono: ’+-HTML.Wzorzec
?}
}
103
104
Rozdział III. Architektura systemu
Zwróćmy uwagę na drugi sposób uruchomienia skryptu CGI — nie poprzez formularz, tylko bezpośrednie wywołanie z parametrami. Fragment dla
pola Szukaj przybierającego wartość fiks może wyglądać:
<A HREF=
"/cgi-bin/MHTMLCGI.EXE?Wzorzec=fiks&
SYSTEM_PATH=c:\fiks&
SYSTEM_NAME=fiks&HTML_TEMPLATE=szukaj.htm"
>Szukaj fiks</A>
Istnieje możliwość włączania fragmentów do szablonu strony poprzez jedną z dwóch konstrukcji:
{FINCLUDE: ’plik’}
{FINCLUDE_PTH: ’plik’}
Argumentem jest wyrażenie zwracające nazwę włączanego pliku. W pierwszym przypadku plik jest wyszukiwany względem katalogu z szablonem, w
drugim — względem deklaracji ścieżek.
Uruchomienie programu MacroCGI (mhtmlcgi.exe) z opcją --header_html
spowoduje, że na standardowe wyjście nie będzie wypisywany nagłówek. Oto
przykładowa postać nagłówka:
Content-type: text/html; charset=iso-8859-2
Wraz ze standardowymi bibliotekami (katalog _libfml) dołączone są przykładowe pliki sql.htm oraz _ressql.htm, pozwalające na zadawanie z poziomu przeglądarki zapytań SQL w dowolnym wybranym systemie. W efekcie
otrzymujemy w przeglądarce prezentację tabeli wynikowej zapytania.
18.1 Plik macrocgi.ini
Plik macrocgi.ini definiuje, które pliki mogą być wykorzystane jako szablony. Jest wyszukiwany według deklaracji ścieżek (*.pth) i może zawierać
dwie sekcje:
[masks] — w kolejnych wierszach sekcji podawane będą kolejne maski plików. Każdy otwierany szablon (wskazany poprzez HTML_TEMPLATE
lub HTML_TEMPLATE_PTH) oraz włączany plik konstrukcją FINCLUDE lub
FINCLUDE_PTH musi pasować do przynajmniej jednej podanej maski,
[paths] — w kolejnych wierszach sekcji podawane będą kolejne ścieżki dostępów do katalogów. Nie dopuszcza się używania względnych ścieżek. Każdy
III.18. Praca z systemem z poziomu przeglądarki internetowej
szablon wskazany poprzez HTML_TEMPLATE oraz plik włączany konstrukcją FINCLUDE musi znajdować się w jednym z wymienionych katalogów. Dla
szablonów otwieranych poprzez HTML_TEMPLATE_PTH oraz włączanych plików poprzez FINCLUDE_PTH sekcja nie ma żadnego znaczenia.
Przykładowo, jeśli wszystkie pliki otwieranych szablonów mają końcówkę
.cgi lub .htm i są umieszczone w katalogu c:\www\szablony, zaś nazwy
wszystkich włączanych plików rozpoczynają się od litery m, mają końcówkę .inc i znajdują się w katalogu c:\www\szablony\include, to plik
macrocgi.ini powinien mieć zawartość:
[masks]
*.cgi
*.htm
m*.inc
[paths]
c:\www\szablony
c:\www\szablony\include
Jeśli w programie wskazuje się szablony wyłącznie poprzez zmienną
HTML_TEMPLATE_PTH i włącza pliki wyłącznie konstrukcją FINCLUDE_PTH, to cała sekcja [paths] może być pominięta. W tym przypadku wszystkie
katalogi z szablonami będą opisane w deklaracji ścieżek (zbiorze *.pth).
Dodatkowo, w nazwach plików wyszukiwanych z wykorzystaniem deklaracji ścieżek, nie można używać metaznaków (czyli znaków / \ * ? : [
] { } ( )). Dotyczy to zmiennej HTML_TEMPLATE_PTH oraz konstrukcji
FINCLUDE_PTH.
18.2 Uruchomienie z linii komend
Możliwe jest również wywołanie programu MacroCGI bezpośrednio z linii komend. Zastosowanie może być dwojakie:
— można sprawdzić działanie przygotowanego szablonu bez konieczności
kopiowania go do katalogu wirtualnego serwera webowego,
— MacroCGI może służyć jako narzędzie do eksportu zawartości bazy danych do plików tekstowych.
Są dwie metody wywołania. Pierwsza polega na przygotowaniu pliku
MacroCGI.cfg. Powinien on zawierać parametry niezbędne do działania
105
106
Rozdział III. Architektura systemu
MacroCGI (nazwa systemu, ścieżka, nazwa szablonu) oraz ewentualne parametry przekazywane do szablonu. Plik MacroCGI.cfg należy umieścić
w tym samym katalogu co MacroCGI. Następnie należy wywołać MacroCGI
z parametrem -d. Wynik jest wypisywany na standardowe wyjście programu.
Przykładowy eksport dla systemu bibliotecznego pól ID, TYTUŁ i AUTOR
z tabeli KATAL mógłby wyglądać następująco:
1. przygotowanie pliku MacroCGI.cfg o treści:
QUERY_STRING=SYSTEM_PATH="/home/macro/demo
&SYSTEM_NAME=demo
&HTML_TEMPLATE_PTH=export.htm"
2. przygotowanie szablonu export.htm o treści:
{FSTR:
_res:=KATAL.first;
{! |? _res |!
h_echo(KATAL.ID+’;’+KATAL.TYTUŁ+’;’+
KATAL.AUTOR+’\n’);
_res:=KATAL.next
!}; ’’}
Plik należy umiejscowić według deklaracji ścieżek (demo.pth),
3. uruchomienie MacroCGI
MacroCGI -d > wynik.txt
W pliku wynik.txt powinna zostać zapisana zawartość tabeli KATAL.
Drugą metodą jest zdefiniowanie dwóch zmiennych systemowych:
REQUEST_METHOD
na wartość GET oraz
QUERY_STRING
na wartość taką, jaką zpisywałoby się w pliku MacroCGI.cfg.
i wywołaniu MacroCGI bez argumentów. Dla powyższego przykładu, wywołanie miałoby postać:
III.18. Praca z systemem z poziomu przeglądarki internetowej
REQUEST_METHOD=GET
export REQUEST_METHOD
QUERY_STRING=SYSTEM_PATH="/home/macro/demo
&SYSTEM_NAME=demo
&HTML_TEMPLATE_PTH=export.htm"
export QUERY_STRING
/home/macro/run/MacroCGI
(przypisanie wartości do zmiennej musi być w jednej linijce — w przykładzie podzielony jest na trzy wiersze, aby zmieściło się na stronie).
Dla systemu Windows proces wygląda bardzo podobnie, z tą różnicą, że
odpowiednie pliki mają nazwy mhtmlcgi.exe i mhtmlcgi.cfg. Wywołanie powyższego przykładu z linii komend wyglądałoby zatem:
set REQUEST_METHOD=GET
set "QUERY_STRING=SYSTEM_PATH=c:\macro\demo
&SYSTEM_NAME=demo
&HTML_TEMPLATE_PTH=export.htm"
c:\macro\xpertis\mhtmlcgi.exe
18.3 Kodowanie polskich znaków
Można wpłynąć na sposób kodowania polskich znaków poprzez umieszczenie
w pierwszej linii wzorca konstrukcji:
{FCHARSET: szablon, html, parametry}
Każdy z parametrów może przyjmować jedną z wartości określających stronę
kodową:
— iso-8859-2 (domyślna w przypadku pominięcia parametru),
— UTF-8,
— windows-1250,
— mazovia.
Kolejne parametry oznaczają zaś stronę kodowania:
— szablonu, który piszemy,
— wyjściowej strony w formacie HTML,
107
108
Rozdział III. Architektura systemu
— parametrów przekazywanych do szablonu.
Strona kodowa przekazywana jest w nagłówku strony, zbędne jest więc
ustawianie strony kodowej konstrukcją META.
Zatem, jeśli pierwsza linijka pliku z szablonem będzie miała postać:
{FCHARSET: UTF-8}
oznacza to, że plik jest kodowany w formacie UTF-8 (na początku może wystąpić znacznik BOM). Jeśli wyjściową stroną kodową nie jest UTF-8, to wszystkie wyprowadzane znaki spoza standardu Mazovii będą zastąpione znakami
zapytania.
19 Biblioteka mbasic.dll
Biblioteka mbasic.dll umożliwia zewnętrznym programom wykonanie
formuły w wybranym systemie użytkowym. Poprzez mbasic.dll mogą być
wywołane tylko procedury zapisane w plikach o masce mbasic??.fml. Ma
to na celu zabezpieczenie przed wykonaniem dowolnej formuły przez dowolnego użytkownika, który ma konto w systemie. Do uruchamiania formuł służą funkcje ExecString oraz ExecNumber umożliwiające wywołanie poprzez exec wskazanej procedury z pliku. Pierwsza przeznaczona jest dla formuł zwracających napis (przy niezgodności typu wynikiem będzie napis pusty), druga dla formuł zwracających liczby (przy niezgodności typu wynikiem
będzie 0). Do funkcji przekazywany jest jeden parametr tekstowy. W wyniku działania ExecString wypełniana jest tablica znaków reprezentująca zwrócony napis, zaś wynikiem jest numer zgłoszonego błędu w wykonywanej formule lub 0, jeśli formuła wykonała się bezbłędnie. Z kolei wynikiem ExecNumber jest liczba zmiennoprzecinkowa zwrócona przez wywołaną procedurę.
W wyniku wywołania funkcji może być niejawnie wywołany program
mbasic.exe, który powinien znajdować się w tym samym katalogu, co biblioteka mbasic.dll.
Poniżej przedstawiona jest deklaracja funkcji udostępnianych przez bibliotekę:
void _stdcall Done( void );
int _stdcall LoadSystem(
const byte * pPath,
const byte * pSystemName);
III.19. Biblioteka mbasic.dll
int _stdcall LoadSystemWithUser(
const byte * pPath,
const byte * pSystemName,
const byte * pUsrName,
const byte * pPswUsr );
int _stdcall LoadSystemCard(
const byte * pPath,
const byte * pSystemName );
int _stdcall LoadRemoteSystem(
const byte * pLanAddr,
int pPort,
const byte * pGroupName,
const byte * pSystemName);
int _stdcall LoadRemoteSystemWithUser(
const byte * pLanAddr,
int pPort,
const byte * pGroupName,
const byte * pSystemName,
const byte * pUsrName,
const byte * pPswUsr);
int _stdcall LoadRemoteSystemCard(
const byte * pLanAddr,
int pPort,
const byte * pGroupName,
const byte * pSystemName);
int _stdcall LoadRemoteSystemSSL(
const byte * pCertDerFileName,
const byte * pLanAddr,
int pPort,
const byte * pGroupName,
const byte * pSystemName);
int _stdcall LoadRemoteSystemWithUserSSL(
const byte * pCertDerFileName,
const byte * pLanAddr,
int pPort,
const byte * pGroupName,
const byte * pSystemName,
const byte * pUsrName,
const byte * pPswUsr );
int _stdcall LoadRemoteSystemSSLCard(
109
110
Rozdział III. Architektura systemu
const byte * pCertDerFileName,
const byte * pLanAddr,
int pPort,
const byte * pGroupName,
const byte * pSystemName);
int _stdcall ExecString(
byte * pOut, unsigned len,
const byte * Rule,
const byte * Sufix,
const byte * Param);
double _stdcall ExecNumber(
const byte * Rule,
const byte * Sufix,
const byte * Param);
int _stdcall LastError(void);
int _stdcall GetMsgLevel(void);
int _stdcall SetMsgLevel(int);
int _stdcall GetNoOfParam();
int _stdcall GetParamType(int par_no);
void _stdcall GetParamString(
int par_no,
byte * result,
unsigned buf_len);
double _stdcall GetParamNum(int par_no);
Znaczenia funkcji są następujące:
Done
zamyka system. Po wywołaniu funkcji można otworzyć kolejny,
LoadSystem
otwiera system z podanej ścieżki. Wynik równy 0, oznacza, że system
został prawidłowo uruchomiony,
LoadSystemWithUser
również otwiera system z dodatkową możliwością przekazania nazwy
użytkownika i hasła poprzez parametry,
LoadSystemCard
identyczne jak funkcji LoadSystem, z tym że domyślnym sposobem
uwierzytelniania będzie karta SmartCard,
III.19. Biblioteka mbasic.dll
LoadRemoteSystem
otwiera system poprzez serwer aplikacji. Poprzez parametr pLanAddr
przekazuje się nazwę lub numer IP komputera z działającym serwerem
aplikacji, pPort to numer portu, po którym odbywa się komunikacja
z serwerem aplikacji, pGroupName to nazwa grupy,
LoadRemoteSystemWithUser
otwiera system poprzez serwer aplikacji, z dodatkową możliwością przekazania nazwy użytkownika i hasła poprzez parametry,
LoadRemoteSystemCard
identyczne jak funkcji LoadRemoteSystem, z tym że domyślnym sposobem uwierzytelniania będzie karta SmartCard,
LoadRemoteSystemSSL
otwiera system poprzez serwer aplikacji, połączenie będzie szyfrowane
z wykorzystaniem protokołu SSL,
LoadRemoteSystemWithUserSSL
otwiera system poprzez serwer aplikacji z dodatkową możliwością przekazania nazwy użytkownika i hasła poprzez parametry, połączenie będzie szyfrowane z wykorzystaniem protokołu SSL,
LoadRemoteSystemSSLCard
tak jak funkcji LoadRemoteSystemSSL, z tym że domyślnym sposobem uwierzytelniania będzie karta SmartCard,
ExecString
wykonuje procedurę o nazwie przekazanej przez argument Rule z pliku którego końcówka nazwy podana jest w parametrze Sufix. Jeśli
parametr Sufix jest pustym napisem, formuły będą wołane z pliku
mbasic.fml. Do procedury można przekazać jeden parametr typu
STRING argumentem param. Jeśli potrzebujemy przekazać więcej parametrów należy je połączyć w jeden napis oddzielając separatorami
a następnie odpowiednio zinterpretować w formule. Wynik typu napisowego wywołanej funkcji exec, będzie umieszczany w tablicy wskazanej w pierwszym argumencie pOut. Jeśli wynik jest innego typu niż
STRING, to w tablicy będzie umieszczony napis pusty. Zmienna musi
być powołana w programie i mieć rozmiar w bajtach taki, jak podaje
drugi argument len,
111
112
Rozdział III. Architektura systemu
ExecNumber
wykonuje formułę i zwraca jej wynik liczbowy. Z wyjątkiem, zbędnego
w tym wypadku, argumentu pOut znaczenie pozostałych jak dla funkcji
ExecString
LastError
zwraca numer ostatniego błędu, który wystąpił przy ostatnim wywołaniu funkcji FormulaString lub FormulaNumber. Jeśli wywołana formuła nie powodowała błędów, to funkcja zwróci wartość 0. Jeśli
w formule było wywołanie funkcji errno, to na wynik funkcji mają tylko wpływ błędy, które się pojawiły po ostatnim wywołaniu errno. Jeśli
zatem po wywołaniu errno nie było błędów, funkcja zwróci wartość 0,
GetMsgLevel
zwraca liczbę, będącą poziomem obsługi błędów ustawioną funkcją
SetMsgLevel,
SetMsgLevel
ustawia poziom obsługi komunikatów. Dostępne są trzy wartości argumentu:
0
standardowa obsługa. Pojawiają się wszystkie komunikaty o błędach oraz dialogi pochodzące z funkcji msg, ask oraz popup,
1
zablokowane wyświetlanie komunikatów o błędach. Będą one zapisywane w pliku .log, zaś numer błędu będzie dostępny poprzez
wywołanie LastError,
2
zablokowane wyświetlanie komunikatów o błędach oraz wywołania wszystkich funkcji dialogowych. Po ustawieniu tego poziomu
obsługi komunikatów nie będą się pojawiały żadne komunikaty
podczas wykonywania formuł.
Wynikiem SetMsgLevel jest liczba oznaczająca poziom obsługi komunikatów, jaki obowiązywał przed wywołaniem funkcji,
GetNoOfParam
zwraca liczbę przekazywanych parametrów. Aby program zewnętrzny mógł pobrać parametry należy go wywołać z MacroBASE funkcją
sys_exec. Dostęp do listy i wartości argumentów odbywa się poprzez
funkcje opisane poniżej,
III.19. Biblioteka mbasic.dll
GetParamType
zwraca typ parametru o numerze par_no. Numery argumentów liczone są od zera, zatem pierwszy argument ma numer 0. Możliwe są dwa
wyniki:
1
typ NUMBER,
2
typ STRING,
GetParamString
pobiera parametr o numerze par_no. Wynik, który musi być typu
STRING jest przekazywany poprzez drugi argument funkcji. Maksymalną długość zwracanego napisu (rozmiar zmiennej) określa trzeci argument,
GetParamNum
zwraca wartość argumentu liczbowego o numerze par_no.
Poniżej zamieszczona jest treść modułu w języku Delphi, w którym zadeklarowane są wszystkie dostępne funkcje z biblioteki mbasic.dll:
unit mbasic;
interface
type
ChTab = array[0..1024] of char;
PChTab = ˆChTab;
var
SBUF: ChTab;
function LoadSystem(
Path: PChar; System: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadRemoteSystem(
Addr: PChar; Port: Integer;
Group: PChar; System: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadSystemWithUser(
113
114
Rozdział III. Architektura systemu
Path: PChar; System: PChar;
User: PChar; Password: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadSystemCard(
Path: PChar; System: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadRemoteSystemWithUser(
Addr: PChar; Port: Integer;
Group: PChar; System: PChar;
User: PChar; Password: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadRemoteSystemCard(
Addr: PChar; Port: Integer;
Group: PChar; System: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadRemoteSystemSSL(
Cert: PChar; Addr: PChar; Port: Integer;
Group: PChar; System: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadRemoteSystemWithUserSSL(
Cert: PChar; Addr: PChar; Port: Integer;
Group: PChar; System: PChar;
User: PChar; Password: PChar): Integer;
stdcall; external ’mbasic.dll’;
function LoadRemoteSystemSSLCard(
Cert: PChar; Addr: PChar; Port: Integer;
Group: PChar; System: PChar): Integer;
stdcall; external ’mbasic.dll’;
procedure Done(); stdcall; external ’mbasic.dll’;
function ExecString(
Res: PChTab; len: Cardinal; Proc: PChar;
Sufix: PChar; Params: PChar): Integer;
III.19. Biblioteka mbasic.dll
stdcall; external ’mbasic.dll’;
function ExecNumber(
Proc: PChar; Sufix: PChar;
Params: PChar): Double; stdcall;
external ’mbasic.dll’;
function LastError(): Integer;
stdcall; external ’mbasic.dll’;
function GetMsgLevel(): Integer;
stdcall; external ’mbasic.dll’;
function SetMsgLevel(Level: Integer): Integer;
stdcall; external ’mbasic.dll’;
function GetNoOfParam(): Integer;
stdcall; external ’mbasic.dll’;
function GetParamType(Param: Integer): Integer;
stdcall; external ’mbasic.dll’;
function GetParamNum(Param: Integer): Double;
stdcall; external ’mbasic.dll’;
procedure GetParamString(Param: Integer;
Res: PChTab; len: Cardinal);
stdcall; external ’mbasic.dll’;
implementation
end.
Jeśli zadeklarujemy użycie modułu, wtedy można będzie korzystać z funkcji biblioteki. Dla przykładu wywołanie poniższego fragmentu uruchomi system kali z grupy Xpertis, na komputerze o nazwie macro, komunikując się
przez domyślny port, czyli 5580, rejestrując się na użytkownika szef z hasłem
szef. Następnie wykonana zostanie procedura proc z pliku mbasic01.fml,
zaś wynik, czyli ciąg znaków zakończony znakiem o kodzie zero, będzie zapi-
115
116
Rozdział III. Architektura systemu
sany w tablicy znaków SBUF, zadeklarowanej w wykorzystywanym module.
Procedura Done wyrejestruje z systemu.
LoadRemoteSystemWithUser(’macro’, 5580,
’Xpertis’, ’kali’, ’szef’, ’szef’);
ExecString(@SBUF, 1024, ’proc’,’01’,’’);
Done;
20 Przeglądarka raportów z Crystal Reports
Pakiet MacroBASE zawiera program MacroCRview, będący przeglądarką sprawozdań stworzonych programem Crystal Reports w wersji 10. Dostarczona przeglądarka ma podobne wymagania sprzętowo-systemowe, co sam program Crystal Reports, czyli można ją uruchomić tylko na systemach operacyjnych Windows 2000(z SP4)/XP/2003/Vista/2008/7 z zainstalowanym sterownikiem ODBC systemu MacroBASE dla wersji crview.exe oraz systemach
Linux dla wersji CRView.jar. W wersji windowsowej, jeśli w pliku jterm_12.30.ini będzie wpis:
[!crview]
viewer = java
będzie uruchomiona wersja przeglądarki ta sama, jaka działa w wersji linuxowej. Zaletą przeglądarki jest to, że nie wymaga ona instalowania komponentów
Crystal Reports. Wpis w pliku jterm_12.30.ini w wersji windowsowej:
[!crview]
viewer = activex
spowoduje uruchamianie przeglądarki dedykowanej dla systemów windows
(crview.exe).
Podczas tworzenia i przeglądania wydruku w przeglądarce, zużywane jest
jedno stanowisko z puli mbasic_users. Użytkownik jest wyrejestrowywany
z serwera dopiero po zamknięciu okna przeglądarki.
Do uruchamiania i obsługi raportów z poziomu MacroBASEa służy zestaw
funkcji: cr_decl, cr_param, cr_call i cr_cancel. Ich składnia i działanie są opisane w podręczniku do Formuli+. Przygotowany raport nie może
być zapisany z danymi, w przeciwnym przypadku będzie zgłoszony błąd przy
próbie uruchomienia. Plik ze sprawozdaniem jest wyszukiwany zgodnie z deklaracją ścieżek. Nie dopuszcza się sprawozdań umieszczanych lokalnie (tzn.
III.20. Przeglądarka raportów z Crystal Reports
z nazwą poprzedzoną znakiem @). Do raportu mogą być dołączone pliki wykorzystywane w sprawozdaniu jak np. bitmapa zawierająca logo firmy. Pliki te
muszą znajdować się w tym samym katalogu co plik ze sprawozdaniem. Jeśli
program jest uruchomiony poprzez serwer aplikacji, to plik ze sprawozdaniem
oraz wszystkie dodatkowe pliki są kopiowane do katalogu z kopiami (parametr
dir w sekcji [!Cache] pliku winterm.ini lub jterm_12.30.ini).
Przeglądarkę sprawozdań w wersji crview.exe można uruchomić również spoza aplikacji, wywołując ją z linii komend i podając nazwę sprawozdania jako argument. Jeśli raport ma zdefiniowane parametry, podczas uruchomienia będą się pojawiać stosowne dialogi, w których można je podać. Aby
wykonanie sprawozdania było możliwe muszą być dodatkowo spełnione następujące warunki:
— w systemie zdefiniowane musi być źródło danych o identycznej nazwie
jak nazwa źródła użytego podczas definiowania sprawozdania,
— w ustawieniach źródła danych musi być zapisana nazwa użytkownika
i hasło.
Jeśli któryś z warunków nie będzie spełniony, to wykonanie sprawozdania, albo
odświeżenie jego zawartości nie będzie możliwe.
Przeglądarkę w wersji CRView.jar można uruchamiać jedynie z klienta
serwera aplikacji jTerm za pośrednictwem funkcji cr_call, nie jest dozwolone uruchamianie spoza systemu MacroBASE jako niezależnej aplikacji. Ponadto dla wersji CRView.jar:
— funkcją cr_call nie można wyeksportować raportu do pliku tekstowego ani w formacie XML. Zatem dostępne formaty to PDF, XLS, XL2,
DOC, RTF, RPC.
— Komponenty JAVA Crystal Reports zawierają błąd rzutowania argumentów, jeśli formuła selekcji w raporcie odwołuje się do pól z bazy danych
po prawej stronie operatora porównania. Dotyczy to raportów z ręcznie
zdefiniowaną formułą selekcji. Przykład takiej formuły:
{ZM.KZ} = "Z" and
{N.OD}>= {?DATAOD} and
(IsNull({H.DO}) or {N.OD}<={H.DO}) and
{H.OD}<={N.OD}
Problem można rozwiązać dopisując na początku formuły selekcji linijkę zawierającą rzutowanie pola:
117
118
Rozdział III. Architektura systemu
dateVar v :={H.DO};
{ZM.KZ} = "Z" and
{N.OD}>= {?DATAOD} and
(IsNull({H.DO}) or {N.OD}<={H.DO}) and
{H.OD}<={N.OD}
— w razie problemów z połączeniem przez ODBC w systemie Linux, warto sprawdzić czy zainstalowane biblioteki ODBC mają odpowiednie
(wymagane przez sterownik MacroBASE) nazwy: libodbcinst.so
i libodbc.so. Jeśli nie, to należy utworzyć odpowiednie dowiązania
symboliczne. Przykładowo dla systemu Ubuntu 6.06 i najnowszego pakietu unixODBC dla tego systemu w wersji 2.2.11 należy z prawami użytkownika root wykonać polecenia:
ln -s /usr/lib/libodbcinst.so.1.0.0 /usr/lib/libodbcinst.so
ln -s /usr/lib/libodbc.so.1.0.0 /usr/lib/libodbc.so
21 Program do testowania sieci
Zadaniem programu nettest.exe (nettest w wersji dla systemu Linux) jest
badanie sieci komputerowej. Wynikiem jest czas potrzebny do przesłania pakietów protokołem udp. Wielkość pakietu jest zbliżona do średniej wielkości
pakietu przesyłanego pomiędzy klientem i serwerem bazy danych. Na jednym
komputerze w sieci uruchamiany jest jako serwer (bez argumentów), na drugim jako klient — z parametrem będącym numerem IP pierwszego komputera.
W ramach testu 10000 razy przesyłany jest pakiet 100 bajtowy. Wynik poniżej
10 sekund można uznać za zadowalający. Jeśli w trakcie testu były informacje o zgubionych pakietach (wypisywany komunikat Timeout), to należy się
liczyć ze znacznymi spowolnieniami w pracy systemów. Każdy zgubiony pakiet powoduje sekundową przerwę w działaniu programu. Program umożliwia
również testowanie przesyłania pakietów protokołem ipx oraz ze zmienionym
rozmiarem pakietu. Szczegóły są dostępne po wywołaniu z opcją -h.
22 Konfigurowanie systemu
W systemie MacroBASE można konfigurować system poprzez zmianę standardowych wartości parametrów. Po uruchomieniu serwera bazy danych i programu administratora wczytywane są parametry z pliku o nazwie macro.cfg.
III.22. Konfigurowanie systemu
Poszukiwany jest on w katalogu określonym parametrem wywołania. Dla programu klienckiego odczytywane są wartości parametrów najpierw z pliku
macro.cfg, a następnie z pliku o nazwie takiej jak nazwa systemu, z końcówką .cfg. Wartości parametrów ustawionych w drugim z plików przysłaniają ustawienia zarówno standardowe, jak i te z pliku macro.cfg. Pliki są
poszukiwane zgodnie z deklaracją ścieżek.
Wiersze w pliku konfiguracyjnym mają następującą postać:
nazwa_parametru = wartość
Część wiersza począwszy od znaku średnika (;) jest traktowana jako komentarz. Puste wiersze, podobnie jak wszystkie nierozpoznane parametry, są ignorowane.
Możemy zmienić standardowe wartości poniższych parametrów. Litera A
umieszczona w nawiasie za nazwą parametru oznacza, że parametr wykorzystywany jest przez program MacroADMIN, litera C — serwer aplikacji lub grubego klienta, litera S — serwer bazy danych.
busy_tmo (C)
maksymalny czas oczekiwania na zwolnienie zasobów w trakcie trwania
transakcji. Domyślną wartością jest 10 sekund.
busy_try_cnt (C)
liczba prób dostępu do zablokowanego zasobu przed wyświetleniem
okienka oczekiwania. Po wyświetleniu okienka próby dostępu do zasobu
są powtarzane co sekundę. Domyślną wartością jest 2, czyli po drugim
nieudanym dostępie pojawia się okienko oczekiwania. Parametr musi
być większy od 0,
class_cnt (C)
maksymalna liczba zadeklarowanych klas. Wartością domyślną jest 50.
Jeśli przypiszemy parametrowi wartość mniejszą, to zostanie ona powiększona do domyślnej. Wartość maksymalna to 136,
cli_mem_size (C)
rozmiar pamięci wyrażony w MB, używanej do przechowywania tabel
tymczasowych i ich indeksów. Parametr nie może przyjmować wartości
mniejszej niż 2. Wartość domyślna to 4. Jeśli rozmiar tabel tymczasowych i ich indeksów przekroczy wartość określoną poprzez parametr
cli_mem_size, to wykorzystywany będzie plik macrosrv.swp
tworzony w katalogu użytkownika z katalogu server. Oznacza to, że jeśli tymczasowe tabele z indeksami mają mniejszy rozmiar niż rozmiar
119
120
Rozdział III. Architektura systemu
pamięci określonej poprzez cli_mem_size, to przy ich obsłudze nie
będą wykonywane żadne operacje dyskowe.
copy_delay (C)
czas (w sekundach), po którym pojawi się okienko z postępem kopiowania pliku pomiędzy serwerem aplikacji i klientem. Wartość maksymalna
to 5,
cr_max_files (C)
określa maksymalną liczbę zainicjowanych jednocześnie sprawozdań
przygotowanych w Crystal Reports (domyślnie 10),
cr_max_params (C)
maksymalna liczba wywołań funkcji cr_param dla pojedynczego sprawozdania. Domyślną wartością jest 1000,
debug_time (S)
uaktywnia opcję zapisu przez serwer bazy danych czasu wykonania niektórych operacji. Nowe informacje będą zapisywane w plikach *.log,
jeśli wartość parametru będzie większa od -1 (wartość -1 oznacza
wyłączenie rejestrowania). Rejestrowanie dotyczy wybranych operacji,
które trwają więcej milisekund niż wartość przypisana do parametru
debug_time Dla 0 będą rejestrowane wszystkie operacje danej klasy. Szczegóły dotyczące rejestrowanych danych znajdują się w rozdziale
III.25
def_name (C)
nazwa skojarzonego pliku definicji systemu (*.def) i pliku przechowującego ochrony systemu (*.psw)
exp_assign_check (C)
włącza sprawdzanie błędów wykonania formuły, polegających na:
— podstawieniu na wyrażenie,
— prefiksowaniu zmiennej lokalnej.
Jeśli parametr przyjmie wartość 1, to w powyższych przypadkach zostanie zgłoszony błąd. Dopuszczalny będzie tylko wyjątek podstawienia na
wynik formuły, jeśli ostatnią instrukcją w treści formuły jest:
— podstawienie na zmienną lub
— nazwa zmiennej (czyli formuła zwraca wartość zmiennej),
III.22. Konfigurowanie systemu
oraz instrukcja ta zostanie wykonana. Wtedy podstawienie dotyczyć będzie użytej zmiennej. Wartość 0 dla parametru oznacza brak kontroli
powyższych błędów.
Wartość domyślna jest zależna od wersji pliku definicji systemu. Dla
wersji starszych od 11.20 (inaczej do wersji 11.11) wartością domyślną
jest 0, dla pozostalych wersji jest 1.
files (CS)
maksymalna liczba plików otwartych przez proces. Wartością domyślną
jest 20. Parametr nie może przyjmować wartości mniejszych niż 10,
fork_users (S)
maksymalna liczba dostępów dodatkowych dla wszystkich użytkowników serwera. Suma wartosci max_mbasic_users, fork_users, max_cgi_users max_builder_users oraz liczby licencji serwera nie może przekroczyc 255 dla wersji 32 bitowej i 1023 dla wersji 64 bitowej serwera. Domyślna wartość wynosi 25,
formula_recursion (C)
parametr określa maksymalną liczbę zagnieżdżonych wywołań funkcji
języka Formula. Przekroczenie liczby wywołań spowoduje przerwanie
wykonywanej formuły i wyświetlenie komunikatu o błędzie (przekroczono głębokość rekurencji). Wartością domyślną jest 100,
login_try_max (C)
maksymalna liczba powtórzeń prób rejestrowania w serwerze bazy danych, w przypadku przekraczania maksymalnej liczby użytkowników.
Domyślna wartość to 50.
Wartość parametru warto zmienić w przypadku korzystania z bazy danych poprzez przeglądarkę internetową i skrypt MacroCGI. Klient w takim przypadku zarejestrowany jest na krótką chwilę, stąd duże prawdopodobieństwo, że zwolni dostęp do danych przed powtórnym rejestrowaniem. Uniknie się w ten sposób komunikatu o błędzie: zbyt wielu
użytkowników,
login_try_wait (C)
czas, liczony w setnych częściach sekundy, pomiędzy powtórzeniami
prób rejestrowania w serwerze bazy danych, w przypadku przekraczania maksymalnej liczby użytkowników. Domyślna wartość wynosi 1,
121
122
Rozdział III. Architektura systemu
macro_profiler (C)
wartość 1 oznacza, że klient będzie uruchomiony z profilerem, w trybie
śledzenia całej aplikacji. Ustawienie jest ważniejsze od przełączników -v
i -v2 jTerma. Wartością domyślną jest 0,
sys_log_1122 (C)
Wartość 1 oznacza, że w tabeli SYSLOG dla rozkazów inlog, outlog
nie będzie zapisywany odpowiednio: numer sesji uzytkownika w
MacroSERVERRZE w polu RECNO oraz SYSLOG.ses_id w polu
DESCR. Wartością domyślną jest 0,
exec_count (C)
Wartość 1 oznacza, że klient będzie uruchomiony z rejestrowaniem liczby wywolań procedur. Wartością domyślną jest 0,
exec_count_timeout (C)
Zapis cząstkowy rejestrowananej liczby wywolań procedur co okresloną
w minutach wartosc czasu. Domyślna wartość 0 oznacza odpisanie tylko
jednego pliku na zakończenie działania programu,
ntc_disable (C)
Wyłączenie obsługi powiadomień. Jeśli będzie miał wartość liczbową
różną od 0, to komunikaty z aplikacji wysyłane nie będą. Komunikaty
będą dostępne w jTermie, jeśli zostanie otworzona przynajmniej jedna
aplikacja, z której można wysyłać komunikaty,
err_mail_enable (C)
Włączenie możliwości wysłania zgloszenia błędu pocztą elektroniczną,
domyślną wartością jest 0,
err_mail_address (C)
Dla włączonej możliwości wysyłania zgłoszeń o błędzie pocztą elektroniczną (err_mail_enable = 1) adres, wpisywany do programu pocztowego jako odbiorca wiadomości, dobyślna wartość to [email protected],
max_cgi_users (S)
maksymalna liczba użytkowników, którzy mogą być jednocześnie zarejestrowani w serwerze bazy danych poprzez wywołanie programu MacroCGI (lub mhtmlcgi.exe dla wersji windowsowej). Liczbę większą od zera można określić tylko dla wersji oprogramowania obsługującą dostęp poprzez skrypt CGI. Parametr mówi zatem o maksymalnej
liczbie użytkowników pracujących z poziomu przeglądarki internetowej,
III.22. Konfigurowanie systemu
którzy w tym samym czasie odwołują się do serwera bazy danych. Wartością domyślną jest 10,
max_cntx_psh (C)
maksymalna liczba odłożonych (i nie pobranych) kontekstów dla tabeli.
Domyślną wartością jest 1000,
max_mbasic_users (S)
maksymalna liczba użytkowników, którzy mogą być zarejestrowani
w serwerze bazy danych poprzez wywołanie biblioteki mbasic.dll.
Suma wartosci max_mbasic_users, fork_users, max_cgi_users max_builder_users oraz liczby licencji serwera nie może przekroczyc 255 dla
wersji 32 bitowej i 1023 dla wersji 64 bitowej serwera.Domyślna wartość
to 25,
max_builder_users (S)
maksymalna liczba użytkowników, którzy mogą być zarejestrowani w
serwerze bazy danych z MacroBUILDERa - nie zużywają wówczas dostępów do serwera z puli dostępów licencjonowanych. Suma wartosci
max_mbasic_users, fork_users, max_cgi_users max_builder_users oraz
liczby licencji serwera nie może przekroczyc 255 dla wersji 32 bitowej i
1023 dla wersji 64 bitowej serwera. Domyślna wartością jest 2,
mem_size32 (S)
rozmiar pamięci wyrażony w MB, używanej przez MacroSERVER do
buforowania odczytow danych i indeksów dla wersji 32 bitowej serwera
bazy danych. Jeśli parametr nie będzie zdefiniowany, to przyjmie wartość
20% pamięci operacyjnej. Parametr ten może przyjmować maksymalnie wartość 1400, podanie większej wartości jest równoważne podaniu
maksymalnej,
mem_size (S)
rozmiar pamięci wyrażony w MB, używanej przez MacroSERVER do
buforowania odczytow danych i indeksów dla wersji 64 bitowej serwera
bazy danych.Jeśli parametr nie będzie zdefiniowany, to przyjmie wartość
20% pamięci operacyjnej,
net_error_delay (CS)
parametr określający czas (w sekundach), w ciągu którego, po stwierdzeniu zerwania komunikacji pomiędzy klientem a serwerem, możliwe jest
jej wznowienie w ramach tej samej sesji. Dotyczy to połączenia pomiędzy końcówką i serwerem aplikacji oraz serwerem aplikacji a serwerem
123
124
Rozdział III. Architektura systemu
bazy danych. Po zerwaniu połączenia serwer przechodzi w stan oczekiwania na nowe połączenie, przez czas określony parametrem. Domyślną
wartością parametru jest 30 sekund. Wartość zero oznacza wyłączenie
mechanizmu powtórnego nawiązywania połączenia. Po zerwaniu połączenia następuje próba ponownego jego nawiązania przez czas określony
parametrem powiększonym o jedną minutę,
net_idle_timeout (S)
okres (w minutach), w ciągu którego użytkownik musi mieć kontakt
z serwerem. Jeśli w ciągu ustalonego czasu użytkownik nie wyśle do serwera żadnego rozkazu, to zostanie automatycznie wyrejestrowany. Domyślnie przyjmowana jest zerowa wartość parametru, czyli brak wyrejestrowywania. Maksymalna wartość parametru wynosi 2000. Parametr
jest czytany przez serwer bazy danych w systemie Windows, zaś w systemie Linux przez program MacroCOMM. Zasada dotyczy tylko użytkowników łączących się z serwerem bazy danych przez sieć, czyli dotyczy pracy poprzez cienkiego klienta, o ile serwer aplikacji jest uruchomiony na innej maszynie niż serwer bazy danych. Dla przykładu, jeśli ustawimy wartość parametru na 60 a użytkownik pracujący poprzez
serwer aplikacji znajdujący się na innym komputerze niż serwer bazy
danych przez godzinę nie będzie odwoływał się do danych na serwerze
(np. będzie wertował tabelę tymczasową, przeglądał sprawozdania lub
redagował zawartość pola typu MEMO), to zostanie automatycznie wyrejestrowany z serwera bazy danych. W związku z powyższym, należy
tak dobierać wartość parametru, aby nie groziło to utratą nie zapisanych
danych (np. notatki MEMO), z powodu wcześniejszego zakończenia połączenia przez serwer,
net_proto (CS)
protokół wykorzystywany do komunikacji pomiędzy klientem a serwerem (dla wersji linuxowej z programem komunikacyjnym MacroCOMM).
Można przypisać mu wartość tcp lub domyślną udp. W przypadku protokołu TCP/IP cała komunikacja sieciowa odbywa się poprzez wskazany
port. Dla protokołu UDP podany numer portu służy jedynie do nawiązywania połączeń. Komunikacja z klientem odbywa się już po nowym
porcie, przydzielanym przez system z puli portów dynamicznych, Aby
komunikacja doszła do skutku, serwer musi być uruchomiony z identycznymi parametrami co klient,
III.22. Konfigurowanie systemu
obj_cnt (C)
maksymalna liczba powołanych zmiennych słownikowych. Domyślna
wartość to 1000. Jeśli przypiszemy parametrowi wartość mniejszą, to
zostanie ona powiększona do domyślnej. Jednocześnie wartość parametru powiększona o wartość parametru obj_cnt+4 nie może przekraczać
65000,
obj_meth_par_type (C)
wartość 1 oznacza, że argumenty wywolania obj_meth, obj_virt
powyzej czwartego są interpretowane, przy wartości 0 parametry są
ignorowane. Dodatkowo obj_meth, obj_virt w przypadku użycia
trzech argumentów wywołania definiują metodę z niezamkniętą listą argumentów. Wartość domyślna jest zależna od wersji pliku definicji systemu. Dla wersji starszych od 11.20 (inaczej do wersji 11.11) wartością
domyślną jest 0, dla pozostałych wersji jest 1,
sort_progress_delay (C)
czas po którym pojawi się okienko z postępem sortowania. Przypisanie
wartości 0 oznacza, że okienko z postępem będzie się pojawiać zawsze.
Domyślna wartość to 10 sekund,
sql_delay (C)
czas (liczba sekund), po którym pojawi się okienko umożliwiające przerwanie wykonania zapytania SQL. Domyślna wartość to 10 sekund,
synchr_num (ACS)
liczba określająca zasoby synchronizacyjne. Jeśli wystąpi konflikt zasobów synchronizacyjnych z innymi programami w systemie, to zgłoszony zostanie błąd przy tworzeniu tych zasobów podczas uruchamiania
serwera bazy danych (plik server.log). W takim przypadku należy
zdefiniować tę wartość przypisując jej liczbę naturalną mniejszą od 100.
Domyślną wartością jest 0,
tab_tmp_cnt (C)
gwarantowana liczba tabel tymczasowych w ramach jednej sesji. Po
przekroczeniu limitu zgłaszany jest błąd. Domyślna wartość to 50,
tcp_udp_port (CS)
numer portu, poprzez który komunikuje się program kliencki z serwerem (dla wersji linuxowej z programem komunikacyjnym MacroCOMM).
Domyślną wartością jest 5557,
125
126
Rozdział III. Architektura systemu
var_cnt (C)
maksymalna liczba zmiennych globalnych. Wartością domyślną jest 100.
Jeśli przypiszemy parametrowi wartość mniejszą, to zostanie ona powiększona do domyślnej. Jednocześnie wartość parametru powiększona o liczbę funkcji globalnych (np. sin(), log()) nie może przekroczyć
32767.
Możliwy jest podgląd zinterpretowanych przez system wartości parametrów. Pierwszy zestaw parametrów odpisywany jest w pliku server.log
(macro.log dla systemu Linux) podczas uruchamiania serwera bazy danych. Drugi, odpisywany jest w pliku *.log programu użytkowego po zalogowaniu użytkownika do niego.
23 Deklaracja ścieżek
Informacja o rozmieszczeniu zbiorów tworzących system użytkowy w systemie
plików systemu operacyjnego jest zapisana w zbiorze z deklaracjami ścieżek.
Ma on nazwę taką jak nazwa systemu i rozszerzenie .pth, np. demo.pth.
Kolejne wiersze zbioru ścieżek są utworzone z dwóch części oddzielonych ciągiem białych znaków. Pierwsza z nich podaje ścieżkę do katalogu, w którym
będą poszukiwane zbiory zgodne z maskami zawartymi w części drugiej. Wyjątkiem od tej reguły jest jedynie sytuacja gdy białe znaki występują w cudzysłowach (na przykład "d:\Moje Dokumenty"). Znaki spacji i tabulacji zawarte między nimi, nie są traktowane jako separatory, tylko jak fragmenty ścieżek lub masek. Nie można umieścić nieparzystej liczby znaków cudzysłowu
w wierszu — zostanie wtedy zgłoszony błąd. Znak cudzysłowu nie może zatem wystąpić ani w ścieżce, ani w masce zbioru. Nie można również używać
polskich znaków w nazwach katalogów. Maska opisuje zbiory lub klasy zbiorów określane przy pomocy następujących metaznaków:
?
dowolny jeden znak,
*
dowolny ciąg znaków (również zero znaków),
[...]
dowolny ze znaków zawartych pomiędzy nawiasami [ i ]. Dopuszczalne
jest użycie zakresów ze znakiem - (minus) jako łącznik. Dla przykładu
[_1-9] może dopasować się do znaku podkreślenia lub dowolnej cyfry.
Umieszczenie na początku linii tekstu rem lub znaku ; powoduje potraktowanie jej jako komentarza. Plik z deklaracją ścieżek nie może (poza komentarzami) zawierać znaków o kodach ASCII wyższych niż 127. W deklaracjach
III.23. Deklaracja ścieżek
127
ścieżek, można odwoływać się do zmiennych środowiskowych. Zbiór z deklaracjami ścieżek jest poszukiwany w katalogu bieżącym i analizowany przez serwer aplikacji a także program MacroTRANSFER oraz w przypadku podania
opcji -P przez MacroREPORT. Pliki których nazwy nie pasują do żadnej maski, będą wyszukiwane w katalogu bieżącym dla pliku deklaracji ścieżek, tak
jakby na końcu deklaracji był wpis:
. *
Jeśli nie ma pliku z deklaracjami ścieżek, to wszystkie zbiory będą poszukiwane i tworzone w bieżącym katalogu.
W przypadku pracy z serwerem aplikacji, plik deklaracji ścieżek jest poszukiwany w lokalizacji wskazanej w pliku konfiguracyjnym cluster.cfg.
W systemie Linux jest analizowany przez proces serwera aplikacji i jego procesy potomne, zaś w systemie Windows przez program mblaunch.exe i procesy mblogics.exe.
Poniżej podana jest lista wszystkich zasobów, które wyszukiwane są z wykorzystaniem deklaracji ścieżek:
— definicje systemu (*.def),
— zbiory z hasłami (*.psw),
— zbiory z historią dostępów do bazy (*.log),
— zbiory konfiguracyjne systemu (macro.cfg, *.cfg),
— tło programu (zbiory front.bmp, back.bmp, front.png, back.png),
— przyciski na listwie narzędziowej, obrazki przed wartościami pól rekordów oraz grafiki użyte w sprawozdaniach (zbiory *.bmp),
— dane systemu (*.mdb) — ścieżka dostępu do katalogu z danymi musi być poprzedzona dwukropkiem. Dla wersji sieciowych, po dwukropku musi być jeszcze wpisana pomiędzy znakami | nazwa lub numer IP
komputera, na którym znajdują się zbiory. W tym samym katalogu przechowywane będą zbiory indeksowe przypisane do zbioru z danymi —
pliki *.ndx oraz *.del. Opcjonalnie po numerze IP można określić
na którym porcie nasłuchuje serwer bazy danych. Numer portu można
128
Rozdział III. Architektura systemu
podać po dwukropku, bezpośrednio za nazwą (lub numerem IP) serwera, przed kreską zamykającą opis. Dodatkowo można określić protokół komunikacyjny. Dodając po dwukropku umieszczonym bezpośrednio za numerem portu słowo tcp, wybieramy protokół TCP/IP. Pomijając ten fragment, albo umieszczając słowo udp, wskazuje się protokół UDP. Podany numer portu i protokół nie wpływa na parametry
serwera komunikacyjnego uruchomionego lokalnie. Umożliwia to pracę z jednej końcówki z serwerami nasłuchującymi na różnych portach
i wykorzystujących różne protokoły. W szczególności, można z końcówki windowsowej pracować z dwoma programami obsługiwanymi przez
dwa programy serwera bazy danych działające w środowisku Linux. Aby
komunikacja doszła do skutku, serwer musi być uruchomiony z identycznymi parametrami. Parametr tcp_udp_port ustawiany w pliku
macro.cfg musi określać ten sam numer portu,
— pliki użytkownika — pliki, które dla każdego użytkownika będą poszukiwane w oddzielnym katalogu. Wpisy takie rozpoczyna się od znaku >
a bezpośrednio po nim następuje ścieżka do katalogu, w którym będą
tworzone podkatalogi. Dla każdego użytkownika, będzie założony podkatalog z nazwą taką, jak nazwa użytkownika. W nim będą zapisywane
i z niego odczytywane wszystkie zbiory o nazwach pasujących do masek
podanych za ścieżką dostępu po katalogu. Można w ten sposób wskazywać wszystkie pliki, oprócz plików bazy danych (*.mdb),
— pliki lokalne — pliki na komputerze, na którym działa terminal. Ścieżka dostępu musi rozpoczynać się znakiem @. Każdy wiersz, który będzie
poprzedzony znakiem @, będzie wykorzystywany wyłącznie przy wyszukiwaniu plików lokalnych, czyli takich których nazwa będzie również
poprzedzona znakiem @. Pliki lokalne mogą być otwierane przez następujące funkcje i metody języka formula: bl_put, bl_get, cr_call,
export, ferase, fopen, fcopy, import, sql_log, txt_edit
oraz txt_view,
— katalog roboczy — domyślnie jest zakładany jest w katalogu roboczym
systemu. Dla systemu Linux można zmienić jego położenie poprzez
przypisanie do zmiennej systemowej MACRO_TEMP ścieżki do katalogu,
w którym mają być zakładane katalogi robocze programu. Po zakończeniu działania programu, katalog razem z zawartością jest usuwany.
Dostęp do katalogu odbywa się przez symbol @!Tmp, który musi wystąpić na początku napisu określającego katalog. Jeśli po nim wystąpi
znak backslash (\), to w wersji linuxowej zostanie zamieniony na znak
III.23. Deklaracja ścieżek
slash (/). Symbol może być również użyty na początku wiersza w deklaracji ścieżek. W katalogu roboczym są tworzone pliki tymczasowe
podczas przeglądania sprawozdań. Katalog jest również wykorzystywany przy wywołaniu funkcji sys_exec,
— katalog server — zawiera zbiory związane z obsługą tabel tymczasowych. Jeśli katalog o takiej nazwie nie istnieje to zostanie utworzony.
W nim z kolei, dla poszczególnych użytkowników, powstają podkatalogi o nazwach będących numerem użytkownika w serwerze bazy danych.
Zatem wpis:
c:\tmp server
spowoduje przy tworzeniu pierwszej tabeli tymczasowej utworzenie katalogu c:\tmp\server, a w nim podkatalogu z numerem użytkownika. Należy zatem zadbać, aby katalog server:
– mógł być utworzony przez klienta (w przeciwnym przypadku zostanie zgłoszony błąd),
– ze względów efektywnościowych znajdował się na dysku lokalnym
(nie sieciowym),
– nie był współdzielony przez użytkowników pracujacych w konfiguracji z wykorzystaniem serwera komunikacyjnego przy połączeniu
sieciowym z serwerem bazy danych.
Tabele tymczasowe i ich indeksy przechowywane są w pamięci operacyjnej. Jeśli ich rozmiar przekroczy wartość określoną poprzez parametr
cli_mem_size, to wykorzystywany będzie plik macrosrv.swp
tworzony w katalogu użytkownika z katalogu server. Oznacza to, że jeśli tymczasowe tabele z indeksami mają mniejszy rozmiar niż rozmiar
pamięci określonej poprzez cli_mem_size, to przy ich obsłudze nie
będą wykonywane żadne operacje dyskowe.
— katalog sysblob — zawiera wszystkie pliki powiązane z polami typu
BLOBIMAGE i BLOBRAW. Jeśli katalog o takiej nazwie nie istnieje, to zostanie utworzony. Przykładowa lokalizacja katalogu może być określona
w następujący sposób:
c:\xpertis\pliki sysblob
129
130
Rozdział III. Architektura systemu
Taki zapis oznacza, że w katalogu c:\xpertis\pliki utworzony zostanie katalog sysblob, gdzie zapisywane będą pliki. Każdy z plików będzie zapisany pod nazwą będącą tekstową reprezentacją wyniku funkcji
SHA-1 obliczonej dla zawartości pliku. Pliki o identycznej zawartości będą miały zatem identyczne nazwy. W takim przypadku na dysku będzie
przechowywana tylko jedna kopia takiego pliku. Jeśli zdarzyłoby się, że
pomimo tej samej wartości funkcji sha-1 pliki są różne, to nowy plik
będzie miał doklejoną do nazwy końcówkę w postaci numeru porządkowego zapisanego w systemie heksadecymalnym. Nazwy plików będą
miały 30 znaków, a w przypadku doklejania znaków, długość nazwy nie
będzie przekraczała 38 znaków. Pliki będą umieszczane w podkatalogach katalogu sysblob. Każdy podkatalog stanowi dwa początkowe znaki
wartości funkcji SHA-1, znaki te nie zostaną już użyte w nazwie samego
pliku,
— zbiory z formułami (*.fml),
— wzorce sprawozdań (*.rpm),
— pliki włączane do wzorców sprawozdań (*.rpi),
— skompilowane wersje wzorców sprawozdań (*.rpt),
— skompilowane opisy drukarek (*.prt),
— kopie utworzonych sprawozdań (*.k??),
— deklaracje ścieżek innych systemów (*.pth),
— pliki włączane do deklaracji ścieżek (*.pti),
— opisem konfiguracji okienek i używanych czcionek (*.ini) (dla wersji
Linuxowej odpisywana jest tylko inforamcja o zawijaniu wierszy w edytorze),
— warunki zapisane dla okienek (*.cnd),
— importowane i eksportowane dane funkcjami import i export,
— pliki obsługiwane funkcjami fopen, fcopy, ferase jeśli stosowne argumenty określają działanie tych funkcji z uwzględnieniem deklaracji
ścieżek,
— pliki wyświetlane i redagowane za pośrednictwem funkcji txt_edit
i txt_view, jeśli drugi parametr wywołania jest różny od zera,
III.23. Deklaracja ścieżek
— definicje wydruków uniwersalnych (*.un?),
— pliki związane z tabelą SYSBLOB, jeśli trzeci argument funkcji bl_get
i bl_put jest różny od zera,
— zapytania SQL (*.sql),
— procedury wbudowane (*.prc),
— historia wywołań formuł za pośrednictwem biblioteki _debug.fml
i zapytań SQL — za pośrednictwem biblioteki _sql.fml,
— pliki związane z obsługą MacroCGI — plik macrocgi.ini oraz szablony stron.
— plików, dla których uruchamiany jest skojarzony program poprzez wywołanie funkcji sys_exec,
— definicji wydruków Crystal Reports (*.rpt),
— zapisanych wyników wydruków Crystal Reports powstałych przy
pomocy metody cr_call (pliki *.pdf, *.xls, *.doc, *.rtf,
*.txt, *.xml, *.rpc, *.x12),
— definicji autoraportów (*.aut),
— bibliotek ładowanych dynamicznie (*.jar, *.dll),
— plików technicznych z informacjami o warstwach i błędach spisowych(*.file, *.revi, *.info).
W celu znalezienia konkretnego pliku analizowane są kolejne wiersze deklaracji ścieżek. Plik będzie poszukiwany w pierwszym katalogu, dla którego
nazwa pliku pasuje do jednej z podanych masek. Zatem kolejność wierszy może mieć istotne znaczenie. Dla przykładu, przy deklaracji ścieżek
lib _*.fml
fml *.fml
plik o nazwie _string.fml będzie poszukiwany tylko w katalogu lib. Jeśli
linie byłyby wpisane w odwrotnej kolejności, to plik byłby poszukiwany tylko
w katalogu fml.
Jeśli system poszukuje listy plików (np. wzorców sprawozdań), to przeszukiwane są wszystkie katalogi, których maska pasuje do poszukiwanych nazw.
131
132
Rozdział III. Architektura systemu
Ścieżki dostępu poprzedzone dwukropkiem (czyli dostęp do danych i indeksów), są przekazywane do maszyny bazy danych. Nie powinny zatem zawierać odwołań względnych, gdyż będą traktowane jako odwołania względem
katalogu, w którym została uruchomiona maszyna bazy danych.
Do pliku z deklaracją ścieżek można włączać pliki z rozszerzeniem *.pti.
Służy do tego konstrukcja #include, po której podaje się nazwę pliku (bez
rozszerzenia). Plik będzie wyszukiwany zgodnie z deklaracją ścieżek, na podstawie wierszy poprzedzających konstrukcję #include. Konstrukcja musi
być umieszczona w osobnym wierszu i nie może zawierać nic poza #include,
nazwą pliku oraz białymi znakami. Nazwa pliku nie może zawierać znaków \
(backslash) i / (slash). W plikach włączanych nie dopuszcza się już konstrukcji
#include.
Dla przykładu, jeśli w pliku *.pth znajdują się linie:
ptidir *.pti
#include Xpertis
to do deklaracji ścieżek zostanie włączony plik ptidir\Xpertis.pti.
W Wersji działającej pod systemem Linux wszystkie katalogi podane w deklaracji ścieżek (poza poprzedzonymi dwukropkiem), muszą być dostępne
w systemie plików. Inaczej system zgłosi błąd i zakończy działanie.
W deklaracjach ścieżek można użyć zmiennych systemowych. Odwołanie
do wartości zmiennej jest takie, jak w systemie operacyjnym (np.
${HOME}
dla Linuxa i
%TEMP%
dla Windows).
Oto przykładowa deklaracja ścieżek w systemie Linux:
:/home/demo/mdb *.mdb *.ndx
/home/macro/cfg macro.cfg
/home/macro/prt *.prt
/home/macro/term *.tdc
/home/macro/libfml _*.fml _*.rpm _*.rpt
/home/macro/run Macro*
system *.def *.psw *.log *.cfg
fml *.fml *.rpm
rpt *.rpt
${HOME}/kopie *.k??
imex *
III.24. Indeksy z reprezentantem z tabeli maskowalnej
W deklaracji ścieżek użyliśmy zmiennej środowiskowej HOME. Zatem pliki
z kopiami sprawozdań będą umieszczane w katalogu kopie znajdującym się
w katalogu domowym użytkownika.
Zgodnie z powyższą deklaracją ścieżek w katalogu bieżącym muszą być
podkatalogi system, fml, rpt i imex. Do katalogu imex przypisaliśmy maskę * — czyli pasująca do wszystkich plików (oprócz ukrytych). Linia została
umieszczona jako ostatnia, zatem w katalogu imex będą wyszukiwane wszystkie pliki, które nie pasują do masek umieszczonych w poprzednich wierszach.
W nim będą poszukiwane zbiory do importu i eksportu, o ile ich nazwa nie
będzie pasowała do masek we wcześniejszych liniach.
W wersji linuxowej właściciel zbiorów wykonawczych musi mieć prawo
odczytu zbioru z deklaracją ścieżek, zaś użytkownicy systemu nie powinni
mieć praw dostępu do tego zbioru.
W deklaracji ścieżek dla systemu Windows dostęp do katalogu poprzedzamy nazwą dysku. Oto przykład:
:|NT:5559:tcp|c:\systemy\demo *.mdb *.ndx
>%TEMP% *.ini
@c:\imex *.imp *.exp
h:\demo *.*
Zbiory z danymi będą przechowywane na serwerze NT (tam też będzie uruchomiona maszyna bazy danych). Podana ścieżka dostępu oznacza katalog
na dysku c: serwera. Serwer nasłuchuje na porcie 5559 a protokół komunikacyjny to TCP/IP. Pliki wymiany danych (*.imp i *.exp) będą poszukiwane
w katalogu c:\imex komputera na którym działa klient, pod warunkiem, że
odwołamy się do nich poprzedzając nazwę pliku znakiem @ (w przeciwnym
przypadku będą wyszukiwane w katalogu h:\demo). Zbiory z ustawieniami użytkownika (*.ini) umieszczone będą w katalogu wskazywanym przez
zmienną systemową TEMP,w podkatalogach o nazwach takich jak nazwy użytkowników. Wszystkie pozostałe zbiory będą trzymane na dysku h: w katalogu
demo.
24 Indeksy z reprezentantem z tabeli maskowalnej
Jeśli w programie zdefiniowane są indeksy z polami złączeniowymi z reprezentantem ze słownika maskowanego, to konieczne jest istnienie pliku
macro.use. Brak takiego pliku (lub odpowiedniego w nim wpisu dla któregoś ze zdefiniowanych indeksów) spowoduje, że program zgłosi błąd i zakończy działanie. Brak stosownych wpisów w pliku macro.use może ogra-
133
134
Rozdział III. Architektura systemu
niczyć możliwość definiowania nowych indeksów tego typu. W szczególności, dla wszystkich pól bez poprawnego wpisu funkcja Pokaż/ukryj pola
złączenia w oknie definiowania indeksów będzie niedostępna. Plik ma podobną konstrukcję do tworzonego pliku z formułami koniecznymi do transferu systemu z wersji 5.xx i 6.xx do 7.xx. Dla każdego pola złączeniowego do
tabeli maskowanej, które występuje w indeksie z reprezentantem, trzeba napisać formułę o nazwie:
\TABELA.POLE
gdzie TABELA zamieniamy na akronim tabeli z której pochodzi, POLE —
na akronim pola. Wynikiem takiej formuły musi być nazwa zbioru maskowanego, do którego odnosi się złączenie. Formuła będzie wykonana dla każdego
rekordu zawierającego niezerową wartość w polu. W treści formuły można odwoływać się jedynie do funkcji i operatorów wbudowanych i zmiennych lokalnych procedury. Metody słownika głównego i zmienne globalne programu są
niewidoczne. Dostępne są natomiast dwa argumenty. Pierwszy zawiera proponowaną nazwę maski. Jeśli tabela, z której pochodzi pole i tabela do której jest
złączenie są maskowane i mają taką samą liczbę znaków zapytania w masce, to
zwracana jest maska słownika z zamienionymi znakami zapytania na te same
znaki, co w bieżącym zbiorze. W przeciwnym przypadku zwracany jest pusty
ciąg znaków. Drugim argumentem jest maska tabeli z polem złączeniowym.
Wywołując program MacroTRANSFER (transfer.exe dla Windows)
z opcją -m można zweryfikować, czy wszystkie potrzebne procedury są zdefiniowane w pliku macro.use. Na standardowe wyjście będą wypisane brakujące wpisy.
25 Historia systemu
Podczas działania systemu MacroBASE zachodzą zdarzenia, których znajomość jest konieczna dla jego prawidłowej obsługi. Istnieje potrzeba tworzenia
ich historii wraz z opisem kontekstu wystąpienia. Służy do tego szereg plików
z rozszerzeniem .log:
plik programu użytkowego
plik *.log o nazwie identycznej jak nazwa uruchomionego programu,
tworzony przy pierwszym uruchomieniu aplikacji w katalogu wskazanym w deklaracji ścieżek, lub jeśli brak wskazania w deklaracji ścieżek
— w katalogu bieżącym dla pliku *.pth.
Każdy zapis do pliku *.log posiada następujący zestaw informacji:
III.25. Historia systemu
— datę i czas zdarzenia,
— nazwę użytkownika,
— nazwę terminala na którym pracuje użytkownik,
— jeśli użytkownik nie pracuje w terminalu tekstowym, adres IP
komputera na którym uruchomiony jest klient serwera aplikacji,
— rodzaj zdarzenia. W przypadku zarejestrowania użytkownika w
systemie pojawiają się również informacje o parametrach (pobranych z plików *.cfg), z jakimi aplikacja została uruchomiona.
Najczęściej pojawiające się zapisy dotyczą:
— zarejestrowań i wyrejestrowań użytkowników,
— błędów w programie,
— wybranych poleceń Formuli+ takich jak usuwanie i tworzenie tabel, usuwanie zawartości tabel, sortowanie,
— nieudanych prób dostępu do zasobów (tabel, rekordów) zablokowanych przez innych użytkowników. W pliku pojawi się nazwa
użytkownika oraz lokalizacja, skąd uruchamia program, oraz informacja o założonej blokadzie na rekord, która uniemożliwiła wykonanie akcji. Poniżej opisane są znaczenia wystąpienia poszczególnych znaków w kodzie określającym blokadę:
T
F
M
R
L
E
0
1
2
blokowanie w wyniku przeczytania lub zapisania rekordu w
transakcji,
blokowanie funkcją lock lub r_lock,
blokowanie tabeli,
blokowanie rekordu,
blokowanie licznika,
blokowanie pola typu MEMO,
zasób zablokowany w wyniku lock lub r_lock z parametrem 0 lub zasób odczytany w transakcji,
zasób zablokowany w wyniku lock lub r_lock z parametrem 1 lub zasób zapisany w transakcji,
zasób zablokowany w wyniku lock lub r_lock z parametrem 2,
— wywołań funkcji dialogowych w transakcji,
— zapisy związane z ustawieniem parametru debug_time czyli:
135
136
Rozdział III. Architektura systemu
– kontekst formuł, z którego została wywołana funkcja put powodująca zniszczenie indeksu z polem w złączeniu,
– kontekst wywołania funkcji undo.
import.log
zawiera wszystkie błędy, które wystąpią podczas importowania danych
funkcją import, umieszczony zgodnie z deklaracją ścieżek. Każdy
wiersz w pliku zawiera opis jednego błędu. Kolejne informacje są oddzielone znakiem | i zawierają następujące dane:
— datę w formacie rrrr/mm/dd,
— czas w formacie gg:mm,
— akronim tabeli do której importowane są dane,
— aktualna maska tabeli (lub nazwa dla tabel niemaskowanych),
— nazwa importowanego pliku,
— numer wiersza w pliku z danymi, przy którym wystąpił błąd,
— akronim pola, które przyczyniło się do błędu (np. nie odnaleziono
stosownej wartości w słowniku lub pole miało niepoprawny format
zapisu),
— opis błędu,
— użytkownik, który wywołał funkcję importującą,
— terminal (lub nazwa komputera) na którym pracował.
error.log
zawiera informacje o błędach serwera aplikacji, tworzony w następujących lokalizacjach:
— Windows — w katalogu roboczym serwera aplikacji (parametr wpath). Jeśli nie został określony to w katalogu konfiguracyjnym
(parametr -ppath). W wypadku braku wyżej wymienionych —
w katalogu bieżącym pliku mblaunch.exe,
— Linux — w katalogu roboczym serwera aplikacji (parametr wpath). Jeśli nie został określony to w katalogu konfiguracyjnym
(parametr -ppath),
server.log
zawiera historię pracy serwera bazy danych. Każdy wpis zawiera informacje:
III.25. Historia systemu
— datę i czas zdarzenia,
— identyfikator procesu,
— rodzaj zdarzenia.
Do pliku zapisywane są informacje o uruchomieniach i zatrzymaniach
oraz ewentualnych problemach związanych z pracą serwera bazy danych. W przypadku systemu Windows przy starcie zapisywane są dodatkowo informacje o wersji, numerze seryjnym, okresie ważności licencji,
liczbie dostępnych stanowisk oraz wartości parametrów, z jakimi serwer
został uruchomiony. Dla systemu Linux powyższe dane można znaleźć
w pliku macro.log. To rozróżnienie dotyczy również informacji zapisywanych po ustawieniu parametru debug_time w pliku konfiguracyjnym macro.cfg na wartość większą od -1 (wartość -1 oznacza
wyłączenie działania). Zapisywane wtedy informacje można podzielić
na dwie grupy. Pierwsza z nich to dane o następujących operacjach:
— wycofanie transakcji — z podaniem nazwy użytkownika i czasu
trwania operacji. W pliku *.log aplikacji zapisywany będzie kontekst wywołania funkcji undo z formuły,
— sortowanie — z podaniem:
– nazwy dyskowej tabeli,
– nazwy indeksu dla indeksów stałych, lub schematu dla indeksu tymczasowego,
– ilości sortowanych rekordów,
– czasu trwania operacji,
— transfery nagłówka tabeli,
— usuwanie plików z dysku na skutek rozkazu erase,
— opóźnienie zapisu zmodyfikowanych danych,
— informacja o wymiatanych stronach z bufora mem_size. Częste odpisy mogą świadczyć o tym, że należy zwiększyć rozmiar bufora
mem_size.
Rejestrowane będą informacje o operacjach, które trwają więcej milisekund niż wartość przypisana do parametru debug_time. Dla parametru debug_time równego zero, będą rejestrowane wszystkie operacje
danej klasy. Druga grupa to operacje put dla słowników, które powodują zniszczenie indeksu z polem w złączeniu. W pliku server.log
(macro.log dla Linuxa) zapisywane będą:
137
138
Rozdział III. Architektura systemu
— nazwa dyskowa słownika,
— akronim pola, którego wartość uległa zmianie,
— nazwa dyskowa tabeli, w której indeks został uszkodzony,
— nazwa dyskowa indeksu z reprezentantem.
W pliku *.log aplikacji zapisywany będzie w takiej sytuacji kontekst formuł, z którego put został wywołany.
Przy zamykaniu serwera bazy danych w pliku server.log zapisywane
są informacje (o ile przyjmują niezerowe wartości):
Transferow naglowka tabeli
liczba wykonanych transferów nagłówka dla zbioru *.mdb,
Indeksy usuniete przez algorytm uaktualniania
liczba indeksów, które nie zostały uaktualnione, tylko usunięte (z
przeznaczeniem do sortowania),
Maksymalna wartosc licznika wznowien wykonywania rozkazow
maksymalna liczba przerywania wykonywania rozkazu w oczekiwaniu na podczytanie danych,
Rozkazow wykonanych z przelaczeniem na tryb blokujacy
liczba rozkazów, w których podczytywanie danych blokowało wykonywanie rozkazów od innych użytkowników,
Maksymalna liczba zablokowanych rekordow przez jednego uzytkownika w ramach jednej maski tabeli
maksymalna liczba zablokowanych rekordów w jednej masce tabeli przez jednego użytkownika,
Maksymalny czas przebywania uzytkownika w transakcji
najdłuższy czas trwania transakcji. Od wykonania do do zerwania
lub zakończenia poprzez end. Długi czas trwania transakcji oznaczać może więcej konfliktów w dostępie do danych (przeczytane i
zapisane rekordy będą dłużej blokowane),
Maksymalny czas trwania operacji wycofania transakcji
najdłuższy czas wycofania transakcji. Ponieważ w trakcie wycofywania transakcji nie są wykonywane żadne inne rozkazy przez serwer, więc podana wartość jest również najdłuższym czasem przestoju serwera związanym z wycofaniem pojedynczej transakcji,
Liczba opoznien zwiazanych z odpisaniem buforow (mem_size)
liczba wstrzymań wykonywania rozkazów użytkowników ze względu na przekroczenie dopuszczalnej liczby nieodpisanych buforów,
III.25. Historia systemu
Liczba opoznien zwiazanych z odpisaniem buforow (pojedynczy plik)
liczba wstrzymań wykonywania rozkazów użytkowników ze względu na przekroczenie dopuszczalnej liczby nieodpisanych buforów
dla pojedynczego zbioru,
Sortowanych indeksow z powodu bledow w danych
liczba sortowań, które zakończyły się niepowodzeniem z powodu
błędu w danych (np. podwojenie klucza). Należy usunąć błędy w
danych na podstawie wcześniejszych zapisów w pliku *.log (będzie
podana nazwa indeksu i numer pierwszego rekordu psującego kolejność),
Sortowanych indeksow stalych
pod powyższym wpisem umieszczane są kategorie:
po zmianie wartosci pola reprezentanta
liczba sortowanych indeksów, które nastąpiły w wyniku zmiany pola reprezentanta w słowniku,
z powodu braku indeksu po polu zlaczeniowym
liczba sortowań po zmianie pola reprezentanta w słowniku
na skutek braku indeksu po tym samym polu złączeniowym
bez reprezentanta. Dodanie stosownego indeksu (z pierwszym
polem złączeniowym) może wpłynąć na zastąpienie sortowania uaktualnianiem indeksu, co powinno poprawić wydajność
systemu,
z powodu cyklu w indeksach z reprezentantem
po zmianie wartości w słowniku, do uaktualnienia indeksu z
polem reprezentantem jest wykorzystywany indeks również z
polem w złączeniu do tej samej tabeli i również musi być uaktualniony. Jeśli kolejne wykorzystywane indeksy do uaktualnienia tworzą cykl (któryś wymaga pierwszego indeksu), to
uaktualnienie indeksu nie będzie możliwe — nastąpi sortowanie. W celu uniknięcia sortowania w takim przypadku należy
dodać indeks z pierwszym polem złączeniowym bez reprezentanta i bez pól w złączeniu do tej samej tabeli.
Lokalizacja pliku server.log dla poszczególnych systemów jest następująca:
— Windows — w katalogu roboczym serwera (parametr -wpath). Jeśli nie jest podany, domyślnie przyjmowany jest katalog roboczy
systemu operacyjnego,
139
140
Rozdział III. Architektura systemu
— Linux — w katalogu z plikiem konfiguracyjnym macro.cfg (parametr -ppath),
macro.log
plik tworzony przez programy wykonawcze, zawierający informacje
techniczne, na ogół nie przydatne dla użytkownika. Wyjątkiem jest
macro.log dla serwera bazy danych na platformie Linux, w którym
zapisane są informacje o wersji, numerze seryjnym, okresie ważności
licencji i liczbie dostępnych stanowisk oraz informacje zapisywane po
ustawieniu parametru debug_time w pliku macro.cfg na wartość
większą od -1 (opis w sekcji dla pliku server.log).
Jeśli modyfikacja danych powoduje zmianę indeksu stałego niewystępującego w definicji systemu użytkownika (indeks jest zdefiniowany tylko
systemach używanych aktualnie przez innych użytkowników), to w pliku macro.log pojawi się wpis postaci:
[command] zmienia nieotwarty indeks
tabela [table] indeks [index]
gdzie
command
rozkaz add, put lub del,
table
pełna ścieżka do maski tabeli,
index
nazwa brakującego indeksu w systemie.
W takiej sytuacji dodatkowo pojawi się wpis w pliku *.log aplikacji:
Modyfikacja nieotwartego indeksu.
od otwarcia do zamknięcia tabeli pojawia się co najwyżej jeden wpis dla
każdego z indeksów.
Wystąpienie wpisu oznacza błąd w integrowaniu aplikacji. Jeśli nie byłyby uruchomione inne systemy, to wpisu by nie było, zaś używane w
innych systemach indeksy uległyby zepsuciu (byłyby odtwarzane przy
uruchomieniu). W celu zlikwidowania błędu należałoby dodać brakujący indeks do systemu (w przeciwnym przypadku mogą występować
odtwarzania indeksów, co skutkuje spowolnieniem pracy systemu),
III.26. Fizyczna organizacja danych
log analizy zapytań SQL
plik programu użytkowego utworzony poleceniem sql_log rejestrujący przebieg oraz czas wykonania zapytań SQL. Więcej informacji na jego temat dostępnych jest w podręczniku Zapytania SQL w rozdziale
dotyczącym optymalizacji.
jterm.log
plik tworzony przez klienta jTerm, zawierający informacje o błędach komunikowanych przez wirtualną maszynę Javy. Powstaje w katalogu:
%appdata%\MacroBASE
dla wersji działającej pod Windows,
~/.MacroBASE
dla wersji działającej pod Linuxem.
26 Fizyczna organizacja danych
Dane użytkownika zapisywane są w zbiorach z rozszerzeniem .mdb, np.
katalog.mdb czy też czyteln.mdb. Każdy taki zbiór odpowiada tabeli
bazy danych zgodnie ze schematem zapisanym w definicji systemu.
Dodatkowe informacje związane z uporządkowaniem zapisów w każdej tabeli przechowywane są w zbiorach indeksowych. Zbiory te mają rozszerzenia
.ndx i .del, np. kat_tyt.ndx, kat_num.ndx czy też katalog.del.
Dla każdego zbioru z danymi *.mdb, jest tworzony katalog o takiej samej
nazwie, ze zmienionym rozszerzeniem na ind, w którym są przechowywane
indeksy danej maski tabeli. Katalog ten jest umieszczony w katalogu o nazwie
będącej pierwszą literą pliku z danymi. Jednoliterowe katalogi będą tworzone
z kolei w katalogu ndx. Katalog ndx zaś w tym samym katalogu co zbiór z
danymi. Dotyczy to również tworzonych indeksów tymczasowych.
Program wykonawczy potrafi odtworzyć zawartość zbiorów indeksowych
na podstawie zawartości danych użytkownika.
27 Pliki graficzne (*.bmp, *.png)
Program wykorzystuje pliki graficzne (*.bmp, *.png) w następujących sytuacjach:
— do wypełnienia tła okna programu. Zgodnie z deklaracją śceiżek
(*.pth) wyszukiwane są dwa pliki: back.bmp oraz front.bmp. W
141
142
Rozdział III. Architektura systemu
obu mapach bitowych musi być wykorzystana ta sama paleta kolorów
(maksymalnie 256 kolorów). Pierwsza z nich będzie przeskalowana do
rozmiarów okna. Druga wyświetlana na pierwszej, bez skalowania, z
dosunięciem do prawego dolnego rogu okna. Jeśli nie będzie zbioru
back.bmp, tło będzie szare. Brak front.bmp spowoduje, że będzie
wyświetlane tylko tło pochodzące z back.bmp. Obsługa tła może zostać zmodyfikowana w oparciu o pliki front.png oraz back.png.
Jeżeli:
– nie ma przynajmniej jednego z plików front.bmp lub back.bmp
lub
– jest przynajmniej jeden z plików front.png lub back.png
wówczas wyświetlane będzie standardowe tło dostarczane z klientem
jTerm, na którym w prawym dolnym rogu nałożona będzie grafika zapisana w pliku front.png (o ile istnieje), zaś na środku nałożona będzie grafika zapisana w pliku back.png (o ile istnieje). Wspomniane
pliki będą wyszukiwane zgodnie z deklaracją ścieżek,
— do wyświetlania na dołączanych przez użytkownika przyciskach na listwie narzędziowej. Możliwe do wyboru obrazki pobierane są z wszystkich plików z rozszerzeniem *.bmp, *.png odnalezionych zgodnie z
deklaracją ścieżek, których wymiar poziomy nie przekracza 50 pikseli
i nie jest mniejszy niż 24 piksele, zaś pionowy jest wielokrotnością 24
pikseli. W każdym zbiorze *.bmp może być zapisanych kilka obrazków,
każdy o wysokości 24 pikseli. Informacja o zdefiniowanych przyciskach
na listwie narzędziowej jest zapisywana w zbiorze *.ini,
— w sprawozdaniach, w wyniku konstrukcji {BITMAP:} lub {COLOR:}
dla zbiorów *.bmp,
— przy wyświetlaniu obrazka przed wartością pola (na skutek formuły
Przed ikoną), pozycji menu, w nazwie zakładki oraz na przycisku
przed etykietą. Można umieszczać ikony — grafiki o rozmiarze 16x16
pikseli w formacie BMP lub PNG zapisane w plikach lub polach typu
BLOBIMAGE lub BLOBRAW (podobnie jak w przypadku ikon dla pól).
Dla formatu BMP kolor o współrzędnych RGB równych (192, 192, 192)
traktowany jest jako przezroczysty. W przypadku pliku w formacie PNG
kolor o współrzędnych RGB (192, 192, 192) jest traktowany jako zwykły
kolor, zaś przezroczystość jest obsługiwana na podstawie informacji zapisanych w grafice.
III.28. Ustawienia użytkownika
Wspomniane zbiory *.bmp są wyszkukiwane zgodnie z deklaracją ścieżek. Na końcówce jTerm błędnie są obsługiwane skompresowane pliki *.bmp.
Zarówno na wydrukach, jak i w okienkach mogą pojawić się zniekształcenia
— należy używać nieskompresowanych bitmap *.bmp.
28 Ustawienia użytkownika
Podczas pracy na końcówce dopuszcza się dowolne przemieszczanie okien
przez użytkownika. Po zakończeniu działania informacje o rozmiarach i położeniach okien zapisane są w pliku tekstowym. Dla klienta jTerm nazwa tego pliku to nazwa systemu poprzedzona ciągiem znaków ”ju-” z dodaną końcówką
.ini np. ju-kali.ini. Plik będzie umieszczony w katalogu, który wynika z deklaracji ścieżek. W pliku zapisane są informacje o każdym podzbiorze okien,
który pojawił się na ekranie. Dla każdej rozdzielczości ekranu prowadzona jest
oddzielna ewidencja. Po ponownym uruchomieniu systemu, każde okienko
będzie pojawiać się w miejscu, którego współrzędne są zapisane w pliku, zależnym od rozdzielczości i okienek, które są aktualnie na ekranie. Dla klienta
jTerm rozdzielczość ekranu może być ustawiana w pliku jterm_12.30.ini
(powinien się znajdować w katalogu MacroBASE w katalogu roboczym systemu operacyjnego). Jeśli parametr dpi z sekcji [!Screen] nie ma przypisanej wartości, to rozdzielczość ekranu pobierana jest z systemu. Jeśli jest ona
niepoprawna (za małe czcionki), można ją wpisać w pliku. Im większa będzie
wartość, tym czcionki będą większe. Przykładowy wpis może wyglądać:
[!Screen]
dpi = 96
Ponadto w pliku *.ini aplikacji dla użytkownika umieszczana jest również informacja o następujących elementach:
— dołączonych przez użytkownika przyciskach na listwie narzędziowej,
— rodzaju i wielkości czcionki W omawianym pliku można zmodyfikować
parametr z sekcji [!Czcionka], wskazujące czcionkę, która ma być
używana przez program. Dla przykładu zmodyfikowanie linii
[!Czcionka]
Czcionka = Verdana, 10 0, N
143
144
Rozdział III. Architektura systemu
spowoduje, że będzie wykorzystywana czcionka o nazwie Verdana
i rozmiarze 10. Czcionkę (typ, krój i wielkość) można zmieniać konwersacyjnie z poziomu programu (menu Okno, funkcja Ustawienia
użytkownika). Do wyboru dostępne są czcionki niesymboliczne
o rozmiarach od 1 do 72. Domyślne wartości przyjmowane są z ustawień systemu operacyjnego (czcionka zdefiniowana dla menu),
— ogólnych ustawieniach dla wszystkich okienek
– liczbie kolumn, jaką możemy dodać do okienka wertowania
– dymkach podpowiedzi — możemy określić czy w programie mają
pokazywać się podpowiedzi (dymki) z wartością lub opisem pola.
Przypisując parametrowi wartość 0 można wyłączyć tę funkcjonalność,
– sposobie kopiowania do schowka zawartości okienek wertowania
i redagowania
– edycji pól typu data — dla pól typu data, do których nie ma przypisanych formuł Klawisz F3, wyświetlenia okienka z historią wprowadzanych danych, pojawia się kontrolka z kalendarzem, umożliwiająca konwersacyjne wskazanie stosownej daty. Istnieje możliwość wyłączenia tej funkcjonalności, poprzez zmianę wartości parametru z 1 na 0,
– kolorach strzałki kolejności i wyróżnienia rekordów — Wskazujemy kolor, w jakim są wyświetlane zaznaczenia kolumny, która ustala kolejność w okienku wertowania i kolor wyróżnienia rekordów.
Po znaku # wypisywane są po dwie cyfry szesnastkowe, określające
kolejne współrzędne RGB,
– sposobie prezentacji okienek — Max = 1 oznacza, że okienka
programu będą zmaksymalizowane
Powyższe parametry definiujemy w sekcji [!Okno]. Domyślnie ma ona
postać:
[!Okno]
Maksymalna liczba dodawanych kolumn = 10
Dymki dostępne = 1
Kolor wyróżniania rekordów = #00ffff
Kolor strzałki kolejności = #00ffff
Parametry schowka = 0 1 1
III.28. Ustawienia użytkownika
Kalendarz przy redakcji daty = 1
Max = 0
Wszystkie parametry z wyjątkiem dotyczącego maksymalizacji okien,
można modyfikować konwersacyjnie z poziomu programu (menu
Okno, funkcja Ustawienia użytkownika).
— ustawieniach Debuggera Możemy zmienić czcionkę i kolory używane
w debuggerze oraz sposób zatrzymywania (przed lub po instrukcji).
Użytkownik korzystający z końcówki jTerm ma możliwości modyfikacji
ustawień stylu wyglądu okienek aplikacji oraz zakładek aplikacji otwieranych
w tej samej sesji klienta. Definiowalne parametry odpisywane są w pliku w sekcji [!Layout] i mogą przyjmują postać:
[!Layout]
appTabsPermanent = true
closeProgWithLastTab = true
l&f = Macrologic
theme = Macrologic
gdzie:
appTabsPermanent
po przyjęciu wartości true pasek zakładek jest wyświetlany zawsze,
również dla jednej otwartej aplikacji,
closeProgWithLastTab
po przyjęciu wartości true zamknięcie ostatniej zakładki z aplikacją zamyka klienta jTerm,
l&f
okeśla wyglądu okienek aplikacji, może przyjąć wartości: System (dostępny tylko dla systemu Windows — okienka aplikacji będą miały wygląd dziedziczony z ustawień systemu), Ocean (kolorystyka niebieska),
Macrologic (kolorystyka pomarańczowa),
theme
temat.
Zmiana tych ustawień będzie obowiązywać po ponownym uruchomieniu programu jTerm.
Podczas wywołania programu skojarzonego z plikiem w wersji jTerm działającej w systemie Linux, przeszukiwany jest plik jterm_12.30.ini. Jeśli
145
146
Rozdział III. Architektura systemu
będzie w nim sekcja odpowiadająca rozszerzeniu pliku, to będą w niej wyszukiwane wartości open i edit. Jeśli takich wpisów nie ma, to zostanie zadane
pytanie o wybór programu skojarzonego. Oprócz ścieżki do programu należy podać przekazywane argumenty (spacje oddzielają kolejne argumenty, zaś
napis %s oznacza ścieżkę dostępu do otwieranego pliku). Wpisany program
z argumentami wywołania zostaje zapisany w pliku jterm_12.30.ini do
wartości open lub edit w zależności od użytej funkcji:
bl_view, sys_exec
z trzecim argumentem różnym od 2 (bez zastępowania oryginału) —
przypisują wywołanie do wartości open. Przy otwieraniu w pierwszej
kolejności poszukują wpisu open, a jeśli go nie ma — wpisu edit,
bl_edit, sys_exec
z trzecim argumentem równym 2 (z zastępowaniem oryginału), w
pierwszej kolejności poszukują wpisu edit, a jeśli go nie ma — wpisu open.
[*.jpg]
open = /usr/bin/eog %s
Po uruchomieniu programu skojarzonego plikiem z oczekiwaniem na zakończenie (zarówno do przeglądania, jak i redagowania) w okienku z informacją o tym, dostępny jest przycisk, umożliwiający przerwanie oczekiwania.
W przypadku redagowania, po wybraniu przycisku plik zostanie niezwłocznie
odesłany. Dodatkowo można określić minimalny czas działania uruchomionego programu skojarzonego. Jeśli program zakończyłby się w krótszym czasie, to w aplikacji pojawi się informacja o tym. Może to być szczególnie istotne np. dla programu Word — jeśli był już wcześniej uruchomiony, to kolejne
wywołanie poprzez sys_exec zakończy się niemal natychmiast, zaś plik będzie
można redagować w procesie wcześniej już uruchomionym. Po pojawieniu się
ostrzeżenia, można zapisać redagowany plik, zaś po zatwierdzeniu komunikatu, plik zostanie odesłany. Działanie powyższe jest jednak niewskazane dla programów, które się szybko kończą i nie przekazując zadań do innych procesów
(np. wywołanie programu skojarzonego z plikiem *.jar). Dlatego można również podać rozszerzenia plików, dla których wspomniany powyżej dialog nie
będzie się pojawiał. Oba parametry określa się w pliku jterm_12.30.ini
w sekcji [!SystemExec]. Znaczenia ich są następujące:
processExecTime
przypisana liczba oznacza liczbę sekund jaką musi się wykonywać uruchomiony program, aby nie było komunikatu z ostrzeżeniem. Domyślną
wartością jest 2,
III.29. Zapisywanie warunków dla okienek wertowania
noMsgExtensions
w przypisanej wartości umieszcza się listę rozszerzeń (kolejne oddzielone od siebie znakiem średnika). Dla uruchomionych programów dla
plików o wskazanych rozszerzeniach nie będzie pojawiało się ostrzeżenie, jeśli program wykona się krócej niż wskazana w parametrze
processExecTime liczba sekund. Domyślną wartością argumentu
jest jar, czyli domyślnie dla uruchomionych programów napisanych w
Javie, nie będzie ostrzeżeń.
Pliki *.ini aplikacji jak i jTerma kodowane są w standardzie UTF-8.
29 Zapisywanie warunków dla okienek wertowania
Po wybraniu zaznaczania warunkowego w okienku wertowania dostępna jest
możliwość zapisania utworzonego warunku i wczytania jednego z wcześniej
zapisanych. Zapisanie warunku będzie możliwe po utworzeniu poprawnego
warunku, wpisaniu jego nazwy i wybraniu przycisku Zapisz. Podanie zapisanej wcześniej nazwy warunku spowoduje zastąpienie obecnego warunku
zapisanym. Zapamiętane warunki będą dostępne w okienku, niezależnie od
kontekstu, w jakim się pojawi. Warunki są zapamiętywane pomiędzy sesjami
dla okienek stałych oraz tymczasowych nazwanych. Jeśli pole użyte w warunku zmieni swój typ, od czasu zapisania (np. dokonano transferu systemu lub
dotyczy innej tabeli tymczasowej), to warunek taki jest automatycznie usuwany. Dla okienek tymczasowych nienazwanych, zapisane warunki są pamiętane tylko w obrębie sesji. Po wywołaniu zaznaczania warunkowego, wstępnie
warunek będzie wypełniany tak, jak ostatnio wywołany w danym kontekście
okienek. Treść warunków zapamiętywana jest w pliku o nazwie takiej, jak nazwa systemu, z końcówką cnd. Zapisywany jest zgodnie z deklaracją ścieżek w
pliku *.pth. Dodatkowo dodano skrót klawiszowy (ctrl-W) do wywołania
akcji zaznaczania warunkowego w okienku. Zaleca się używania innej kopii
pliku *.cnd przez każdego użytkownika (np. poprzez poprzedzenie znakiem
> linii w deklaracji ścieżek). Uniknie się wtedy po zapisie kasowania warunków
utworzonych przez innych użytkowników,
30 Autoraporty
Autoraporty umożliwiają w szybki sposób przygotowanie zestawienia z danych
wyświetlanych w oknie wertowania. W raporcie znajdą się wartości wszystkich zaznaczonych rekordów w kolejności widocznej w okienku. Jeśli nie ma
147
148
Rozdział III. Architektura systemu
zaznaczonych rekordów, raport uwzględni tylko bieżący rekord. Kreator raportów można uruchomić funkcją w menu Okno pozycją Konstruktor
autoraportów lub przyciskiem na pasku narzędziowym. Pierwsze wywołanie autoraportu dla danego okienka zawsze otwiera okno konstruktora, kolejne wywołania będą rozwijać menu, z którego można uruchomić kreatora
bądź zapisane raporty. Konstruktor autoraportów służy do definiowania nowych raportów lub modyfikacji istniejących. W pierwszej kolejności do raportu pobierane są kolumny z części wertowania (również te dodane w oknie), a
następnie pola wolne. Kolejność pól w raporcie, podobnie jak szerokość i treść
nagłówka można zmieniać a ich domyślne wartości pobierane są z okienka.
Dla pól liczbowych można dodatkowo utworzyć podsumowanie (po każdej
stronie i na końcu wydruku). Format wyjściowy raportu ustala się na zakładce
Ustawienia.
Dostępne formaty raportów to:
— wydruk na drukarkę lub ekran,
— plik CSV (dane oddzielone przecinkiem),
— plik tekstowy (dane oddzielone tabulacją),
— plik tekstowy (dane oddzielone wybranym separatorem),
— plik HTML,
— plik XHTML,
— plik XML,
— plik PDF.
Oprócz tego dostępne są opcje:
— dwa układy autoraportu: tabelaryczny i kolumnowy,
— formatowanie liczb daty i czasu w raporcie: takie jak w oknie lub zgodne
z ustawieniami Windows,
— krój, styl i rozmiar czcionki,
— numerowanie wierszy raportu,
— tytuł sprawozdania,
— orientacja papieru,
III.31. Parametry wydruków
— czy wyświetlać w stopce numery stron,
— czy wyświetlać w stopce datę i czas wykonania autoraportu,
— czy po eksporcie danych do pliku uruchomić aplikację skojarzoną z danym typem pliku. Opcja ta dostępna jest tylko dla końcówek pracujących
w środowisku Windows.
W zależności od wybranego formatu raportu nie wszystkie opcje mogą być
w nim uwzględniane i dostępne (np. nie ma znaczenia wielkość i krój czcionki
dla formatu tekstowego). Jeżeli w środowisku serwera aplikacji (Windows, Linux), czcionka wybrana przez użytkownika z listy dostępnych na komputerze
klienta nie będzie dostępna, zostanie ona zastąpiona przez czcionkę domyślną
(Helvetica).
Zdefiniowany raport można zapisać aby był dostępny w przyszłości. Służy
do tego funkcja Zapisz jako w konstruktorze. Każdy wykonany raport jest
też automatycznie zapisywany jako ostatnio wykonany autoraport.
Można go, jak każdy inny zapisany raport, wykonać ponownie lub zmienić w
kreatorze. Definicje autoraportów są zapisywane w pliku o nazwie takiej, jak
nazwa aplikacji z rozszerzeniem .aut. Jego lokalizacja jest ustalana na podstawie wpisu w pliku deklaracji ścieżek *.pth. Jeśli od momentu zapisu definicji
raportu zostaną usunięte kolumny dodane wcześniej przez użytkownika lub
zmieni się definicja okienka w ten sposób, że użyte pole w raporcie zmieni typ
lub zostanie usunięte z okienka, to raport nie będzie mógł zostać wykonany
— zostanie zgłoszony błąd. Raport będzie znów dostępny, jeśli doda się brakujące pola albo uruchomi kreatora. Po wczytaniu raportu, błędne pola będą
z niego usunięte. Podobna sytuacja ma miejsce, gdy na pola zostanie nałożona
ochrona przed odczytem w systemie MacroPASS. Jeśli pole jest chronione przed
odczytem formułą przed wyświetleniem, to na wydruku będą one wykropkowane, podobnie jak podsumowania, w których skład takie pola wchodzą.
31 Parametry wydruków
Dla końcówek windowsowych ustawienia parametrów wykonywanych wydruków zapisywane są w pliku printer.ini. Dla wersji pracujących poprzez
serwer aplikacji jest tworzony i przechowywany wyłącznie w katalogu z kopiami.
Pamiętane są następujące wartości:
— nazwa drukarki na którą przesyłany był wydruk,
149
150
Rozdział III. Architektura systemu
— nazwa sterownika,
— ustawienia marginesów,
— ustawienie papieru (orientacja pozioma lub pionowa),
— rozmiary okienka do przeglądania wydruku,
— domyślne powiększenie
— tryb wydruku (tekstowy lub graficzny)
Parametry dla każdego sprawozdania są zapisywane po wydruku w sekcji
o nazwie [system_sprawozdanie]. Przy kolejnym wykonaniu sprawozdania program odczytuje parametry z odpowiedniej sekcji. Można je zmienić
w panelu wydruku, jeśli panel jest dostępny.
32 Dziennik systemu
Jeśli zależy nam na kontrolowaniu dostępu do danych oraz zachowaniu historii
modyfikacji wybranych danych, możemy posłużyć się mechanizmem dziennika systemowego. Po wywołaniu metody syslog każde dodanie, usunięcie, zapisanie rekordu lub modyfikacja jego licznika będzie powodowało wpis do tabeli o akronimie SYSLOG. Mogą w niej również być zapisywane wszystkie akcje rejestrowania i wyrejestrowania użytkowników systemu. Należy w tym celu,
przed wygenerowaniem definicji systemu w programie MacroBUILDER, ustawić pole Dziennik systemu na T (jest to wartość domyślna). Można tam
również określić długość pola opisu dziennika systemu. Dopuszczalne wartości to liczby od 50 do 900 (domyślnie 50). W przypadku zmiany tej wartości
w istniejącym systemie wymagany będzie transfer. Tabela SYSLOG jest tabelą
maskowaną z możliwym do wyboru sposobem nadawania nazw zbiorom:
0log????
pierwsze dwa znaki zapytania są zastępowane numerem miesiąca, zaś
ostatnie dwa — dwoma ostatnimi cyframi roku.
1l??????
pierwsze cztery znaki zapytania będą zastępowane przez ostatnie dwie
cyfry roku i numer miesiąca. Dodatkowe dwa znaki będą rozwijane na
numer maski w obrębie miesiąca (00 dla pierwszej 01 dla drugiej, aż do
99 dla setnej). Nowa maska w obrębie miesiąca będzie otwierana wtedy,
III.32. Dziennik systemu
gdy zapis do wcześniejszej jest niemożliwy (rozmiar pliku *.mdb osiągnął maksymalny rozmiar lub w masce jest już maksymalna dopuszczalna liczba rekordów).
W przypadku zmiany maski tabeli z 0log???? na 1l?????? transfer rozpozna tę operację jako zmiana nazwy tabeli. W celu przeniesienia danych do
nowej wersji, należy dla każdego z wypisanych zbiorów wykonać transfer z
opcją -n.
Innych parametrów struktury tabeli SYSLOG nie można modyfikować,
gdyż jest ona niedostępna na liście tabel systemu i dodawana do definicji systemu w trakcie jej generowania. Dostępne są następujące pola:
COMMAND (STRING[8])
rodzaj wykonywanej operacji,
DBF (STRING[8])
maska tabeli której dotyczyła operacja,
DESCR (STRING[nn])
historia zmian wartości wskazanych pól, Długość pola nn podajemy jako
parametr generowania definicji systemu,
MUTATCOD (STRING[10])
nazwa użytkownika wykonującego operację,
MUTATSOR (REAL)
znacznik czasowy operacji, sortowanie według tego pola zapewnia chronologiczność zdarzeń,
MUTATDAT (DATE)
data zdarzenia,
MUTATTIM (TIME)
czas zdarzenia,
RECNO (INTEGER)
numer modyfikowanego rekordu.
W polu DESCR zapisywane są wartości pól podanych jako argumenty wywołania metody syslog. Wartości poszczególnych pól będą oddzielane od
siebie znakiem |.
W dzienniku rejestrowane są następujące zdarzenia (wartości z pola
COMMAND):
151
152
Rozdział III. Architektura systemu
del
usunięcie rekordu z tabeli, dodatkowo w polu DESCR zapisywane są wartości wskazanych pól usuniętego rekordu,
add
dodanie rekordu do tabeli, dodatkowo w polu DESCR zapisywane są
wartości wskazanych pól dodanego rekordu,
bput
modyfikacja rekordu tabeli (również zmiana wartości licznika odwołań
do rekordu), dodatkowo w polu DESCR zapisywane są wartości wskazanych pól sprzed modyfikacji,
put
modyfikacja rekordu tabeli (również zmiana wartości licznika odwołań
do rekordu), dodatkowo w polu DESCR zapisywane są nowe wartości
wskazanych pól,
bmem_put
modyfikacja treści notatki (dodanie, usunięcie lub modyfikacja), dodatkowo w polu DESCR zapisywany będzie początek notatki sprzed operacji
poprzedzany akronimem modyfikowanego pola notatki
memo_put
modyfikacja treści notatki, dodatkowo w polu DESCR zapisywany będzie
początek nowej wartości notatki,
memo_del
usunięcie rekordu z niepustą notatką, dodatkowo w polu DESCR zapisywany będzie początek notatki przypisanej do usuwanego rekordu poprzedzany akronimem pola notatki.
create
wywołanie metody erase dla tabeli
inlog
zarejestrowanie użytkownika w systemie
outlog
wyrejestrowanie użytkownika z systemu
Historia zmian będzie dostępna po wywołaniu formuły SYSLOG.select.
Zakończenie rejestrowania zmian nastąpi po wywołaniu metody syslog bez
III.33. Wykorzystanie bibliotek zewnętrznych
argumentów. Zmiana rejestrowanych pól — po wywołaniu z inną listą argumentów. Przy pomocy funkcji syslogop istnieje możliwość modyfikacji sposobu rejestrowania zmian w tabeli SYSLOG.
Przy rejestrowaniu w tabeli SYSLOG rozkazów inlog oraz outlog pole
RECNO będzie wypełniane wynikiem:
ses_info(SYSLOG.ses_id, ’log_num’)
czyli numerem użytkownika w serwerze bazy danych, zaś pole DESCR wynikiem SYSLOG.ses_id. Wypełnianie pól można wyłączyć (czyli działanie
będzie takie jak we wcześniejszej wersji) po przypisaniu parametrowi sys_log_1122 w pliku konfiguracyjnym aplikacji (lub macro.cfg) wartości 1.
Domyślną wartością argumentu jest 0.
Posługując się obiektem SQL ze standardowych bibliotek, w łatwy sposób
możemy na przykład sprawdzić kto w ostatnim czasie rejestrował się w systemie. Zapytanie SQL pokazujące rejestrowania do systemu może mieć następującą postać:
select MUTATCOD as Użytkownik,
MUTATDAT as Data,
MUTATTIM as Czas
from SYSLOG
where COMMAND=’inlog’
33 Wykorzystanie bibliotek zewnętrznych
Istnieje możliwość wywoływania funkcji zawartych w bibliotekach ładowanych dynamicznie (zbiorach *.dll dla serwera aplikacji pod Windows albo
klasy MacroDll zapisanej w pliku *.jar dla końcówki jTerm). Wywoływane funkcje muszą mieć specyficzny zestaw argumentów, dlatego do wywołania
funkcji z istniejących bibliotek będzie trzeba stworzyć nowy moduł, pośredniczący przy przekazywaniu parametrów i wyniku pomiędzy klientem serwera
aplikacji (ewentualnie serwerem aplikacji oraz grubym klientem) a funkcją biblioteczną.
Dla serwera aplikacji uruchomionego pod systemem Linux funkcje do obsługi bibliotek ze zbiorów *.dll nie wykonują żadnych akcji, ich wynikiem
jest zawsze liczba 0 (dotyczy wywołań przez sterownik ODBC oraz graficznego
klienta serwera aplikacji, gdy biblioteka nie jest poprzedzona znakiem @).
Do obsługi biblioteki z poziomu języka Formula+ służą poniższe funkcje:
153
154
Rozdział III. Architektura systemu
lib_load
włączenie biblioteki dynamicznej
lib_decl
deklaracja funkcji bibliotecznej
lib_call
wywołanie funkcji z biblioteki
lib_free
usunięcie włączonej biblioteki
33.1 Tworzenie bibliotek dll
Deklarowana funkcja biblioteczna musi mieć dokładnie dwa argumenty, z których pierwszy jest typu int, zaś drugi jest wskaźnikiem. Przy wywołaniu funkcji, program tworzy strukturę o rozmiarze przekazanym w pierwszym parametrze. Można tę wartość użyć przy uruchamianiu programu, dla sprawdzenia,
czy rozmiar zadeklarowanej struktury w języku programowania jest równy
rozmiarowi struktury utworzonej przed wywołaniem funkcji. Pierwsze pole
struktury odpowiada wynikowi funkcji, zaś kolejnymi polami są pola odpowiadające kolejnym argumentom. Struktura ma zatem takie typy pól, jakie
były podane w wywołaniu lib_decl, z przypisanymi wartościami z argumentów wywołania. Wskaźnik do tak utworzonej struktury jest przekazywany
do funkcji bibliotecznej poprzez drugi argument. Jeśli w ładowanej bibliotece
jest eksportowana funkcja o nazwie LibLoad, to zostanie ona automatycznie
wywołana. Do funkcji przekazany będzie jeden parametr, będący uchwytem
(wartością typu HWND) okienka programu. Wartość tę można wykorzystać
do ustawienia okienka nadrzędnego dla okienek, które pojawiają się w wyniku
wywołań funkcji z biblioteki. Jeśli biblioteka ładowana jest na serwerze aplikacji, to do funkcji przekazana będzie wartość 0. W przykładzie umieszczonym
poniżej, w funkcji LibLoad jako okienko programu zostaje przypisane okienko aplikacji, z której wywoływana zostaje biblioteka. Dzięki temu, dialog do
wyboru czcionki, który pojawia się po wywołaniu GetFont, będzie związany
z tym samym okienkiem, co aplikacja. Bez funkcji LibLoad pojawiało by się
nowe okienko na listwie zadań.
Wywołana funkcja biblioteczna może korzystać z przekazywanych argumentów, nie może jednak ich usuwać. Przed zakończeniem działania funkcja
powinna wpisać zwracany wynik do pierwszego pola struktury.
Łatwo zauważyć, że do wywołania funkcji z bibliotek dostępnych w systemie Windows, potrzebne będzie napisanie nowej biblioteki, która będzie po-
III.33. Wykorzystanie bibliotek zewnętrznych
średniczyć przy przekazaniu parametrów i pobraniu wyniku. Dla przykładu,
jeśli chcielibyśmy umożliwić w języku Formula+ konwersacyjny wybór czcionki przy pomocy standardowego dialogu windowsowego, to możemy to uczynić
pisząc następującą bibliotekę w języku Delphi:
library font;
uses
SysUtils, Dialogs, Classes, Forms, Windows;
var
FontDialog: TFontDialog;
type
TCallSS = record
Result: PChar;
Param1: PChar;
end;
PCallSS = ˆTCallSS;
procedure GetFont(
size: Integer; ParRec: PCallSS); stdcall;
begin
FontDialog.Font.Name:= ParRecˆ.Param1;
if FontDialog.Execute then
ParRec.Result:= PChar(FontDialog.Font.Name)
else
ParRec.Result:= #0;
end;
procedure LibLoad(Handle: HWND); stdcall;
begin
Application.Handle:= Handle;
end;
exports GetFont, LibLoad;
begin
FontDialog:= TFontDialog.create(Nil);
end.
Typ TCallSS opisuje strukturę dla funkcji zwracającej wartość typu
STRING (dla udostępnionej funkcji GetFont będzie to nazwa wskazanej
155
156
Rozdział III. Architektura systemu
czcionki) oraz przyjmującej jeden parametr typu STRING (dla GetFont będzie to początkowa nazwa czcionki w dialogu).
Utworzoną bibliotekę z powyższego programu możemy wykorzystać na
przykład w formule Klawisz F3 dla pola, w którym użytkownik ma podać nazwę czcionki, którą ma być sporządzone sprawozdanie:
_lib:=lib_load(’mbutil.dll’,1);
{? _lib=0 || return(˜˜) ?};
_fnt:=lib_decl(_lib,,’char *’,’GetFont’,’char *’);
_wyn:=lib_call(_fnt, fld());
lib_free(_lib);
{? _wyn=’’ || ˜˜ || _wyn ?}
33.2 Tworzenie bibliotek jar
Wywołanie funkcji obsługujących biblioteki zewnętrzne (lib_*) ma inne
znaczenie w przypadku końcówki jTerm. Biblioteka ładowana lokalnie odnosić
się będzie nie do zbioru *.dll, tylko do klasy MacroDll zapisanej w pliku
*.jar. Wywołanie funkcji lib_load ma w takim przypadku postać:
lib_load(nazwa,1)
Jeśli nazwa nie zawiera rozszerzenia, to będzie doklejone .jar. Jeśli ma rozszerzenie .dll, to zostanie zamienione na .jar Plik *.jar będzie wyszukiwany zgodnie z deklaracją ścieżek.
Jeśli ładowana klasa wykorzystuje inne, niesystemowe pakiety (pliki
*.jar niedostarczane z dystrybucją Javy), to powinny być one umieszczone w katalogu ext, utworzonym w katalogu lib, znajdującym się w katalogu
z instalacją jTerma lub skopiowane do katalogu roboczego programu (wynik
funkcji tmp_dir). Wywołanie lib_decl ma identyczną postać. Oznacza,
że w programie będzie można używać metody o podanej nazwie z klasy MacroDll.
Funkcja lib_decl deklaruje użycie funkcji z biblioteki dynamicznej, która może być wywołana z programu. Wskazana funkcja w przypadku biblioteki
*.dll musi mieć dokładnie dwa argumenty wywołania:
— pierwszy to liczba całkowita, określająca rozmiar struktury przekazanej
poprzez drugi parametr,
— drugi, to wskaźnik do struktury, w której będą przekazywane argumenty
wywołania funkcji z poziomu języka Formula oraz zwracany wynik.
III.33. Wykorzystanie bibliotek zewnętrznych
157
W przypadku biblioteki *.jar funkcja musi mieć wynik i argumenty takie, jakie wynikają z argumentów lib_decl (począwszy od trzeciego). Do
funkcji lib_decl poprzez pierwszy argument przekazuje się uchwyt do biblioteki zwrócony przez funkcję lib_load.
Jako drugi argument (alignment) oznaczający wyrównanie wartości
w strukturach, można przekazać jedną z liczb: 1, 2, 4, 8. Dla biblioteku *.jar
paramter jest ignorowany. Domyślną wartością jest 4. Należy podać liczbę wykorzystywaną przez kompilator jako wartość wyrównania (alignment). Dla
przykładu w języku Delphi może być konieczne podanie wartości 8 oznaczającej, że liczby rzeczywiste są umieszczane w rekordach tylko od adresów podzielnych przez 8. Obecnie, jeśli nie stosuje się argumentów typu rzeczywistego, to domyślna wartość 4 powinna być zawsze dobra.
Trzeci argument (res_type) określa typ zwracanego wyniku. Dopuszczalne wartości to: ’void’, ’int’, ’unsigned’, ’double’, ’char *’.
Dla bibliotek *.dll odpowiadają typom o takich samych nazwach z języka
C. Typ void oznacza brak zwracanej wartości, czyli odpowiada procedurom
z języka Pascal. Argument typu char * może zawierać jedynie znaki ze standardu Mazovii — wszystkie pozostałe znaki zostaną zastąpione przez znak zapytania (’?’). W przypadku biblioteki *.jar znaczenie jest następujące:
’char *’
typ String lub byte[] w javie, jednak z ograniczeniem, że wszystkie
argumenty funkcji typu char * oraz wynik (o ile jest też typu char *)
muszą być jednakowego typu w javie. Jeśli w deklaracji klasy będą dwie
metody spełniające ten warunek, to wybrana będzie tak, której wszystkie argumenty i wynik typu char * odpowiadają typowi String. Jeśli
funkcja ma argumenty lub wynik typu:
String
konwersja odbywa się przy założeniu, że argument funkcji lib_call
ma polskie znaki zapisane w stronie kodowej windows-1250, zaś
wszystkie pozostałe w standardzie mazovii. Znaki spoza standardu mazovii zostaną zastąpione przez znaki zapytania. Podobnie w
wyniku funkcji wywołanej w javie będzie konwertowany do standardu windows-1250 dla polskich liter oraz do standardu mazovii dla pozostałych znaków. W przypadku błędu konwersji (np. w
wyniku będzie znak, który nie jest polską literą i nie występuje w
standardzie mazovii), funkcja dll_call zakończy się błędem,
byte []
argument jest zamieniany na tablicę bajtów (kolejne bajty, to kody
ascii kolejnych znaków napisu), bez żadnej konwersji. Wynik funk-
158
Rozdział III. Architektura systemu
cji również zamieniany jest bez konwersji, zaś kolejne znaki napisu,
to kolejne bajty zwracanego wyniku. Jeśli któryś znak w zwracanej
tablicy ma wartość 0, to zwracany napis będzie skrócony do pierwszego wystąpienia takiego znaku,
’int’ lub ’unsigned’
typ int w javie,
’double’
typ double w javie.
Dodatkowo dostępny jest typ napisowy ’String’. Różni się on od typu ’char *’ inną konwersją argumentu przekazywanego do biblioteki zewnętrznej i zwracanego wyniku oraz innej obsłudze za długich tekstów:
— do bibliotek *.jar można przekazać dowolne napisy, argumenty będą przekazane jako kodowane w UTF-8. W wyniku nie mogą znaleźć
się ki nieobsługiwane przez program (spoza tablicy zwracanej przez
supp_chr) — w przeciwnym przypadku wywołanie zakończy się błędem,
— w argumentach przekazywanych do bibiotek *.dll i w zwracanym
wyniku wszystkie znaki spoza standardu Mazovii zamieniane są na
znak zapytania. Dodatkowo, polskie znaki są konwertowane ze standardu Mazovii do standardu Windows-1250, zaś w wyniku ze standardu
Windows-1250 do standardu Mazovii,
— jeśli któryś z argumentów lub wynik typu napisowego przekracza 3072
bajty, to po zgłoszeniu błędu przerywane jest wykonywanie formuły. Dla
typu char * dłuższy napis w wyniku jest obcinany do 3072 znaków i
wykonywanie formuły nie jest przerywane.
Domyślną wartością jest ’int’. Wartość wyniku musi być wpisana przez
funkcję do pierwszego pola struktury z argumentami (w przypadku *.dll)
lub zwracana przez metodę (w przypadku biblioteki *.jar).
Czwarty argument (name), to nazwa funkcji (lub metody klasy MacroDll)
udostępnionej w bibliotece. Kolejne argumenty określają typy kolejnych argumentów przekazywanych do funkcji (ich wartości będą wpisane do struktury
wskazywanej przez drugi argument funkcji bibliotecznej (biblioteka *.dll)
lub przekazywane wprost do metody (biblioteka *.jar)). Mogą przyjmować
wartości opisane przy zwracanym wyniku, z pominięciem typu ’void’. Jeśli
III.33. Wykorzystanie bibliotek zewnętrznych
159
nie zostanie podany żaden typ przekazywanego argumentu, to oznaczać to będzie, że funkcja jest bezargumentowa. Wynikiem funkcji jest uchwyt (liczba)
identyfikująca funkcję biblioteczną, do wykorzystania w wywołaniach funkcji lib_call. Zwrócona wartość 0 oznacza, że nie udało się zadeklarować
funkcji o podanej nazwie.
Dla przykładu, wywołanie:
lib:=lib_load(’functions.dll’,1);
{? lib=0 ||
msg(’Błąd załadowania biblioteki functions’)
||
matchlib:=lib_decl(lib,,’int’,’match’,’String’, ’String’)
?};
wymaga zadeklarowania w klasie MacroDll metody o schemacie:
public int match(String text, String patt)
Wartość drugiego argumentu lib_decl (wyrównanie w strukturach) nie
ma w przypadku metod pisanych w Javie znaczenia. Wywołania i znaczenia
lib_call oraz lib_free są identyczne:
wynik:= lib_call(matchlib, ’Tekst’, ’wzór’);
lib_free(lib)
pierwsza wywołuje metodę match z argumentami ’Tekst’ i ’wzór’, druga usuwa
bibliotekę.
W momencie wywołania lib_load wołany jest konstruktor klasy MacroDll z parametrem typu Frame. Jako argument przekazywany będzie obiekt
będący ramką działającego programu jTerm (można ten argument wykorzystywać później do wskazywania elementu nadrzędnego w dialogach). Zatem
w deklaracji klasy musi być konstruktor (np. o pustej treści) typu:
public MacroDll(Frame pParent) {
}
Jeśli funkcja lib_load będzie ładowała po raz kolejny tę samą bibliotekę (bez
wcześniejszego zwolnienia poprzez wywołanie lib_free), to nowy obiekt
nie będzie tworzony. Zwrócony zostanie uchwyt (nowy numer) do utworzonego wcześniej obiektu. Biblioteka zostanie zwolniona dopiero po zwolnieniu
wszystkich uchwytów (poprzez wywołania lib_free).
Jako przykład utworzymy plik functions.jar zawierający w klasie
MacroDll metodę match sprawdzającą, czy wzorzec (wyrażenie regularne
160
Rozdział III. Architektura systemu
przekazane jako drugi argument) dopasowuje się do tekstu przekazanego poprzez pierwszy argument. Błąd w wyrażeniu regularnym będzie zasygnalizowany komunikatem ekranowym. Tworzymy plik MacroDll.java o zawartości:
import java.awt.*;
import javax.swing.*;
import java.util.regex.*;
public class MacroDll {
private Frame jTerm = null;
public MacroDll(Frame pParent) {
jTerm = pParent;
}
public int match(String text, String patt) {
Boolean m = false;
try {
m = text.matches(patt);
} catch (PatternSyntaxException e) {
JOptionPane.showMessageDialog(jTerm,
"match: błąd w wyrażeniu regularnym");
}
if (m)
return(1);
else
return(0);
}
}
kompilujemy go:
javac MacroDll.java
i tworzymy plik functions.jar:
jar cvf functions.jar *.class
Poniższy fragment programu usunie wszystkie rekordy z tabeli S, które w polu
tekstowym LICZBA zawierają inne znaki niż cyfry:
III.34. Wykorzystanie kontrolek w oknach
161
lib:=lib_load(’functions.dll’,1);
{? lib=0 ||
msg(’Błąd załadowania biblioteki functions.dll’)
||
matchlib:=lib_decl(lib,,’int’,’match’,’char *’, ’char *’)
?};
match:="
lib_call(matchlib, _a, _b)
";
S.for_each("
{? ˜match(S.LICZBA, ’ˆ[0-9]*$’) || S.del ?}
")
33.3 Biblioteka MacroLAF.jar
W programach pisanych w Javie i kompilowanych wersją kompilatora co najmniej 1.6, w celu ustawienia tego samego wyglądu (LookAndFeel) jaki jest
ustawiony w programie jTerm (na podstawie pliku jterm_12.30.ini) można
wykorzystać biblioteki MacroLAF.jar oraz ini4j.jar. Należy wówczas zaimportować bibliotekę:
import pl.macrologic.laf.*;
i przed powołaniem pierwszego obiektu GUI wywołać:
LookAndFeelManager.changeLookAndFeel();
Podczas wywołania programu biblioteki MacroLAF.jar oraz ini4j.jar
dostarczane z jTermem muszą się znajdować na ścieżce wyszukiwania.
34 Wykorzystanie kontrolek w oknach
Istnieje rodzaj okienka, w którym można umieścić kontrolkę. Kontrolka jest
to obiekt specjalnej klasy tworzony w języku Java, zawierającej elementy dialogowe. Zatem w utworzonym okienku mogą znaleźć się np. przyciski, pola redagowania, wykresy (i inne elementy możliwe do oprogramowania w Javie). Z
kontrolki można wywołać procedury w Formuli+. Czyli np. po wybraniu przycisku może pojawić się okienko wertowania jakiejś tabeli. Po wywołaniu formuły, kontrolka może dalej wykonywać swoje zadania (np. wyświetlać bieżącą
godzinę w okienku). Nie może natomiast, do czasu zakończenia formuły, wywołać kolejnej. Możliwe jest też wywoływanie metod kontrolki umieszczonej
162
Rozdział III. Architektura systemu
w okienku wyświetlanym w programie instrukcjami języka Formula+. Oprócz
wywołania wprost metody z podanymi argumentami typów prostych, można
też przekazać do kontrolki obiekt zawierający dane z tabeli. Możliwe jest również przenoszenie rekordów na aktywne okienko z kontrolką. W wywoływanej
formule, oprócz standardowych danych dostępnych w funkcji dnd_info, będą dostępne również dodatkowe, zdefiniowane w kontrolce. Zestaw klas i metod użytecznych przy pisaniu kontrolek w języku Java znajduje się w pomocy
javahelp.
34.1 Przykład kontrolki
Jako przykład skonstruujemy kontrolkę, w której wyświetlana jest bieżąca godzina. Dodatkowo są dwa przyciski. Metoda NewColor zmienia kolor wyświetlanej godziny. Poniższa formuła tworzy i wyświetla okienko z kontrolką, w
którym:
— po wybraniu przycisku w kontrolce, wykonywana jest stosowna formuła,
wykorzystująca przekazany argument z kontrolki,
— po wybraniu pozycji z menu Kolor wywoływana jest metoda kontrolki
zmieniająca kolor wyświetlanego tekstu,
— po wybraniu pozycji Zamknij, zamykane jest okienko z kontrolką na
skutek wywołania funkcji sel_exit.
_win_acr:=KATAL.mk_ctr(’Czas’,’ctrl_czas’,1,1,60,6);
KATAL.win_ctr(_win_acr);
KATAL.win_cctr(_win_acr, ’ctr_id’,’ControlExample:example’);
KATAL.win_cfml(_win_acr, ’ctr_id’,’CONTROL_CALLBACK’,"
{? ctr_info(’param’) = ’syslog’ ||
SYSLOG.select
|| msg
?}
");
KATAL.win_act(_win_acr,,’Menu’,’Kolor’,,,,,,,,);
KATAL.win_act(_win_acr,,’Formuła’,’Czerwony’,’Kolor’,,"
ctr_call(,’ctr_id’, ’NewColor’, ’RED’)
",,,,,);
KATAL.win_act(_win_acr,,’Formuła’,’cZarny’,’Kolor’,,"
ctr_set(,’ctr_id’, ’NewColor’, ’BLACK’)
",,,,,);
KATAL.win_act(_win_acr,,’Formuła’,’Zamknij’,,,"sel_exit",,,,,);
KATAL.control()
Plik example.desc ma zawartość:
[control]
files=dll/kontrolki.jar
III.34. Wykorzystanie kontrolek w oknach
163
Zaś w pliku kontrolki.jar z klatalogu dll (względem pliku example.desc)
znajduje się klasa o nazwie ControlExample, której kod źródłowy jest przytoczony poniżej.
import
import
import
import
import
import
import
import
import
import
java.awt.BorderLayout;
java.awt.Color;
java.awt.Component;
java.awt.Font;
java.awt.Graphics;
java.awt.Graphics2D;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
java.text.SimpleDateFormat;
java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Timer;
import
import
import
import
import
import
pl.macrologic.jterm.control.WindowControl;
pl.macrologic.jterm.control.WindowControlCallback;
java.awt.event.KeyAdapter;
java.awt.event.KeyEvent;
java.awt.event.KeyListener;
pl.macrologic.jterm.control.WindowControlFocusTraversalPolicyProvider;
public class ControlExample extends WindowControl {
class CtrlPanel extends JPanel implements
WindowControlFocusTraversalPolicyProvider {};
KeyListener buttonKeyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (KeyEvent.VK_ESCAPE==e.getKeyCode() ||
KeyEvent.VK_TAB==e.getKeyCode()) {
getWindowControlCntx().processKeyPressed(e);
}
}
};
public Component getComponent() {
return panel;
}
public Object getFormulaInterface() {
return this;
}
class FontPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Font f = new Font("Serif", Font.BOLD, 36);
g2.setFont(f);
g2.setColor( act_color ) ;
g2.drawString(message, 10, 30);
}
}
private
private
private
private
String message = "";
Color act_color = Color.YELLOW;
JPanel panel = new CtrlPanel();
JButton button = new JButton("SYSLOG.select");
164
Rozdział III. Architektura systemu
private JButton button2 = new JButton("msg");
private FontPanel panelf = new FontPanel();
public void init() {
super.init();
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent event)
{
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("H:mm:ss");
message = sdf.format(cal.getTime());
panel.repaint();
}
};
final Timer t = new Timer(300, listener);
panel.setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
buttonPanel.setFocusable(false);
panel.add(buttonPanel, BorderLayout.NORTH);
panel.add(panelf, BorderLayout.CENTER);
buttonPanel.add(button);
buttonPanel.add(button2);
panelf.setFocusable(false);
panel.setFocusable(false);
t.start();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
WindowControlCallback callback = getWindowControlCallback();
try {
callback.resetParamsInfo();
callback.addParamInfoString("param", "syslog");
callback.callFormulaAction(ControlExample.this,true, null);
} catch (Exception ex) {
}
}
});
button.addKeyListener(buttonKeyListener);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
WindowControlCallback callback = getWindowControlCallback();
try {
callback.resetParamsInfo();
callback.addParamInfoString("param", "msg");
callback.callFormulaAction(ControlExample.this,true, null);
} catch (Exception ex) {
}
}
});
button2.addKeyListener(buttonKeyListener);
}
public void NewColor(String s) {
if (s.equals("RED")){
act_color = Color.RED;
} else if (s.equals("BLACK")) {
act_color = Color.BLACK;
};
panel.repaint();
};
}
III.34. Wykorzystanie kontrolek w oknach
34.2 Przykład przesyłania danych
W przykładzie okienko z kontrolką zastanie umieszczone w oknie grupowym.
Po wybraniu z menu okienka pozycji Tabela zostanie pobrana tabela z rekordami utworzonymi w kontrolce, zaś wynik wyświetlony w okienku wertowania. Z kolei po przeniesieniu rekordów z okienka wertowania nad okienko
kontrolki, zostaną one przesłane do kontrolki i wyświetlone:
_win_acr:=SYSLOG.mk_ctr(’’,’dnd_ctrl2’,1,1,100,40);
SYSLOG.win_ctr(_win_acr);
SYSLOG.win_cctr(_win_acr,’ctrl_tab’,’Table:example’);
SYSLOG.win_act(_win_acr,0,’Formuła’,’Tabela’,,’Lista towarów’,"","
_tab:=ctr_call(,’ctrl_tab’,’getTableData’ );
_win_acr:=_tab.mk_sel(,,1);
_tab.win_sel(_win_acr);
_tab.select
");
SYSLOG.dnd_ctr(_win_acr,’ctrl_tab’, ’records.SYSLOG’, "
_rec:= dnd_info(’dropped_records’);
_wyn:= sql(’
select MUTATCOD Użytkownik, COMMAND Operacja from syslog where 1=0
’);
{? _rec.first ||
{!|?
SYSLOG.seek(_rec.REF,);
_wyn.UŻYTKOWN:= SYSLOG.MUTATCOD;
_wyn.OPERACJA:= SYSLOG.COMMAND;
_wyn.add;
_rec.next
!}
?};
ctr_tab(’SYSLOG_data’,,’ctrl_tab’,’’,_wyn, ’UŻYTKOWN’, ’OPERACJA’);
ctr_set(,’ctrl_tab’,’initData’, ’SYSLOG_data’)
");
_g:= SYSLOG.grp_make(,"
ctr_tab(’SYSLOG_init’,’:syslog_dnd’,’ctrl_tab’,’’,
sql(’
select MUTATCOD Użytkownik, COMMAND Operacja
from syslog
where 1=0
’),
’UŻYTKOWN’, ’OPERACJA’);
ctr_set(,’ctrl_tab’,’initData’, ’SYSLOG_init’)
");
SYSLOG.win_sel(_g);
SYSLOG.grp_sel(_g,,’SYSLOGS’,,,,,15,,,,,’maximized’);
SYSLOG.grp_splt(_g,,’horizontal’,’p’,);
SYSLOG.grp_ctr(_g,,_win_acr,’syslog_dnd’,,,,,,10,,,,’maximized’);
SYSLOG.select
Poniżej kod używanej kontrolki:
import
import
import
import
import
import
import
import
import
import
java.awt.BorderLayout;
java.awt.Component;
java.awt.dnd.DnDConstants;
java.awt.dnd.DropTarget;
java.awt.dnd.DropTargetListener;
java.awt.event.KeyAdapter;
java.awt.event.KeyEvent;
java.awt.event.KeyListener;
java.awt.event.MouseAdapter;
java.awt.event.MouseEvent;
165
166
Rozdział III. Architektura systemu
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import
import
import
import
import
import
pl.macrologic.jterm.comunication.Worker;
pl.macrologic.jterm.control.WindowControlFocusTraversalPolicyProvider;
pl.macrologic.jterm.control.WindowControl;
pl.macrologic.jterm.control.data.MBDataSet;
pl.macrologic.jterm.control.data.MacroBaseTable;
pl.macrologic.jterm.control.data.MacroBaseTable.ObjToFieldsMap;
public class Table extends WindowControl{
class JCtrlPanel extends JPanel implements WindowControlFocusTraversalPolicyProvider {}
KeyListener tableKeyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (KeyEvent.VK_ESCAPE==e.getKeyCode() ||
KeyEvent.VK_TAB==e.getKeyCode()) {
getWindowControlCntx().processKeyPressed(e);
}
}
};
JPanel panel = new JCtrlPanel();
JTable table = null;
private DropTargetListener dropTargetListener = new DropTargetListener (){
public void dragEnter(java.awt.dnd.DropTargetDragEvent dtde) {
getWindowControlCntx().getStdDropTargetListener().dragEnter(dtde);
};
public void dragExit(java.awt.dnd.DropTargetEvent dte) {
getWindowControlCntx().getStdDropTargetListener().dragExit(dte);
};
public void dragOver(java.awt.dnd.DropTargetDragEvent dtde) {
getWindowControlCntx().getStdDropTargetListener().dragOver(dtde);
};
public void drop(java.awt.dnd.DropTargetDropEvent dtde) {
getWindowControlCntx().getStdDropTargetListener().drop(dtde);
};
public void dropActionChanged(java.awt.dnd.DropTargetDragEvent dtde) {
getWindowControlCntx().getStdDropTargetListener().dropActionChanged(dtde);
};
};
public Component getComponent() {
return panel;
}
public void init() {
super.init();
panel.setFocusable(false);
panel.setLayout(new BorderLayout());
table = new JTable();
table.addKeyListener(tableKeyListener);
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
panel.add(scrollPane, BorderLayout.CENTER);
new DropTarget(table, DnDConstants.ACTION_LINK, dropTargetListener);
table.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
final MouseEvent event = e;
getWindowControlCntx().processMousePressed(e, new Worker() {
@Override
III.34. Wykorzystanie kontrolek w oknach
public void process() {
table.dispatchEvent(event);
}
});
super.mousePressed(e);
}
});
}
public Object getFormulaInterface() {
return this;
}
public void initData(String sourceName) {
MBDataSet model = getWindowControlData().getDataSet(sourceName);
table.setModel(model);
table.repaint();
}
public MacroBaseTable getData(String sourceName) {
MBDataSet model = getWindowControlData().getDataSet(sourceName);
try {
return model.getMacroBaseTable();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static class Towar {
public Towar(String n, int l) {
nazwa = n;
liczba = l;
}
public String getNazwa() { return nazwa; }
public int getLiczba() { return liczba; }
private String nazwa;
private int liczba;
}
public MacroBaseTable getTableData() throws Exception {
MacroBaseTable mbt = new MacroBaseTable(false);
mbt.addField("NAZWA", MacroBaseTable.String, 20);
mbt.addField("LICZBA", MacroBaseTable.Integer, 0);
ObjToFieldsMap mapPoint = mbt.createTypeMaping(Towar.class, null);
mapPoint.mapGetter("NAZWA", "getNazwa");
mapPoint.mapGetter("LICZBA", "getLiczba");
mbt.addRow(new Towar("Książki", 10));
mbt.addRow(new Towar("Zeszyty", 5));
mbt.addRow(new Towar("Ołówki", 7));
return mbt;
}
}
34.3 Kontrolki dostarczane z systemem
W katalogu w którym został zainstalowany jTerm znajduje się katalog o nazwie controls, zaś w nim katalogi z kontrolkami dostarczanymi z systemem.
167
168
Rozdział III. Architektura systemu
W każdym z katalogów znajduje się plik z rozszerzeniem .desc o takiej samej
nazwie, jak nazwa katalogu. Dostarczane kontrolki można dodawać do okienek metodą win_cctr, umieszczając znak @ przed nazwą pliku z opisem.
Kontrolka filechooser
W każdym systemie dostępna jest kontrolka z metodami umożliwiającymi użytkownikowi wskazywanie plików. Użycie metod nie wymaga
tworzenia okienka z kontrolką. W wywoływaniu funkcjami ctr_set lub
ctr_call należy podać jako pierwszy argument wartość ’!application’, zaś
jako drugi ’filechooser’. Szczegółowe informacje dotyczace użycia kontrolki dostępne są w podręczniku Jezyk FORMULA+.
Kontrolka filelistpanel
Kontrolka pozwala na wyświetlanie nazw plików w postaci ikon lub listy.
Umożliwia wykonywanie akcji dla zaznaczonych elementów oraz upuszczonych poprzez akcję drag and drop. Listę plików można dowolnie modyfikować. Pliki o przekazanych nazwach nie muszą istnieć, zaś ikonka
przy nazwie pliku jest wyświetlana na podstawie rozszerzenia. Szczegółowe informacje dotyczace użycia kontrolki dostępne są w podręczniku
Jezyk FORMULA+.
Kontrolka webbrowser
Kontrolka spełnia funkcje przeglądarki internetowej. Można ją umieścić
w okienku za pomocą metody win_cctr, podając jako argument trzeci
argument wartość ’@webbrowser’. Kontrolka nie może być jednak użyta w okienku grupowym. Próba wstawienia do okna grupowego okienka
z kontrolką webbrowser zakończy się błędem. Pod Linuxem do działania przeglądarki konieczna jest biblioteka xulrunner w wersji 1.9.2. Nie
można zatem użyć kontrolki w systemie UBUNTU w wersji 11.10 —
przeglądarka w programie nie będzie wtedy dostępna.
Właściwości przeglądarki można ustawić następującymi metodami
kontrolki:
navigate
przyjmuje jeden argumenty typu napisowego, będący adresem
strony do wyświetlenia,
setHTMLContent
przyjmuje jeden argumenty typu napisowego, będący źródłem
strony do wyświetlenia,
III.34. Wykorzystanie kontrolek w oknach
setButtonBarVisible
ustala, czy przyciski w przeglądarce będą dostępne. Przyjmuje jeden argument typu STRING, który może przyjąć jedną z wartości:
’true’
przyciski nawigacyjne będą wyświetlane w przeglądarce,
’false’
przyciski nie będą dostępne (podobnie jak dla innych wartości
poza ’true’),
setLocationBarVisible
ustala, czy pole z adresem w przeglądarce będzie dostępne. Przyjmuje jeden argument typu STRING, który może przyjąć jedną z
wartości:
’true’
pole z adresem będzie wyświetlane w przeglądarce,
’false’
pole z adresem nie będą dostępne (podobnie jak dla innych
wartości poza ’true’),
setStatusBarVisible
ustala, czy linia statusu przeglądarce będzie dostępna. Przyjmuje
jeden argument typu STRING, który może przyjąć jedną z wartości:
’true’
inia statusu będzie wyświetlana w przeglądarce,
’false’
linia statusu w przeglądarce nie będzie widoczna (podobnie
jak dla innych wartości poza ’true’),
pageLoadingProgress
pobiera procent załadowania strony do wyświetlenia. Wynikiem
jest liczba całkowita z przedziału od 0 do 100. Jeśli strona jest w
całości odczytana, to wynikiem będzie 100,
getCookie
pobiera wartość ciasteczka. Do metody należy przekazać dwa argumenty:
url
adres strony (np. ’http://www.witryna.pl/relacje/spolka.html’),
name
nazwa ciasteczka (np. user),
169
170
Rozdział III. Architektura systemu
Wynikiem będzie zapisana wartość ciasteczka. Jeśli wskazanego
ciasteczka nie ma, to wynik będzie pustym napisem,
setCookie
ustawia wartość ciasteczka. Wymagane są dwa argumenty napisowe:
url
adres strony (np. ’http://www.witryna.pl/relacje/spolka.html’),
value
wartość ustawianego ciasteczka. Np. dla ciasteczka odczytywanego w przykładzie powyżej może mieć wartość ’user=MacroBASE;
expires=Fri, 24 Sep 2038 08:46:30 GMT’
Przykładowo, po poniższych instrukcjach powinno się ukazać okienko
z przeglądarką z otwartą stroną www.macrologic.pl. Powinny być
dostępne przyciski i pasek nawigacji oraz linie statusu. Dodatkowo, po
wciśnięciu klawisza Esc, okienko powinno zostać zamknięte:
_win_acr:=SYSLOG.mk_ctr(’Strona’,’ctrl_webbrowser’);
SYSLOG.win_ctr(_win_acr);
SYSLOG.win_cctr(_win_acr, ’ctr_id’,’@webbrowser’);
SYSLOG.control(,,"
ctr_set(,’ctr_id’, ’setButtonBarVisible’, ’true’);
ctr_set(,’ctr_id’, ’setLocationBarVisible’, ’true’);
ctr_set(,’ctr_id’, ’setStatusBarVisible’, ’true’);
ctr_set(,’ctr_id’, ’closeAfterEscape’, ’true’);
ctr_set(,’ctr_id’, ’navigate’, ’www.macrologic.pl’)
")
35 Weryfikacja licencji
Podczas pierwszego uruchomienia programów użytkowych oraz serwera bazy danych użytkownik zostanie poproszony o wpisanie klucza i danych typu
nazwa firmy, adres itp. Zestawy kluczy są dostarczane wraz z oprogramowaniem i są unikalne dla każdej kopii oprogramowania. Bez podania poprawnego
klucza możliwe jest uruchomienie jedynie wersji demonstracyjnej programu.
Funkcjonalnie nie różni się ona od wersji użytkowej ale może zapisać ograniczoną ilość danych. Po przekroczeniu dozwolonego limitu będzie się pojawiał
stosowny komunikat informujący o zaprzestaniu zapisu danych do bazy.
III.35. Weryfikacja licencji
171
Pierwsze pytanie o klucz pojawi się w trakcie uruchomienia serwera bazy
danych jako aplikacji lub, w przypadku systemów Windows NT/2000/2003/2008/XP/Vista/7,
instalacji usługi MacroBASE. Po podaniu poprawnego klucza powinien zostać
utworzony plik server.nfo. Serwer bazy danych w systemie Linux uruchamia się w trybie demo, jeśli nie ma pliku server.nfo lub wpisany klucz
stracił ważność. Wprowadzenie klucza będzie możliwe po uruchomieniu serwera z opcją -i. Należy przy tym użyć dodatkowo te same parametry, co przy
standardowym uruchomieniu serwera. Dla wersji linuxowej możliwe jest uruchomienie z opcją -i w trakcie działania serwera. Wprowadzony klucz będzie
obowiązywał od ponownego uruchomienia serwera. Po upłynięciu 10 dni od
terminu ważności klucza Xpertis SERVERA, serwer startuje w trybie demonstracyjnym (również w wersji windowsowej).
W zależności od typu systemu operacyjnego plik server.nfo znajduje
się on odpowiednio:
— dla systemu Linux w katalogu z plikami konfiguracyjnymi (ścieżka podana po parametrze -p przy uruchamianiu serwera bazy danych),
— dla systemu Windows w katalogu roboczym serwera bazy danych (ścieżka podana po parametrze -w w trakcie instalacji usługi MacroBASE),
Następnie uruchamiamy program użytkowy. Pojawi się podobny dialog jak
poprzednio ale z weryfikacją kluczy klienta a następnie konkretnej aplikacji.
Po wpisaniu klucza i zatwierdzeniu powinny się utworzyć dwa pliki z rozszerzeniem nfo. Są to odpowiednio client.nfo i plik o nazwie identycznej
jak nazwa aplikacji którą uruchamiamy, czyli np. kali.nfo. Ich położenie
można określić w deklaracji ścieżek (plik *. pth) programu. Jeśli nie ma tam
zdefiniowanej ścieżki dla typu *.nfo to będzie to katalog bieżący pliku *.pth.
Jeżeli przy uruchomieniu kolejnych programów, w katalogu wskazanym w deklaracji ścieżek istnieje już plik client.nfo, od razu pojawi się weryfikacja
aplikacji.
Wszystkie klucze (serwera, klienta i aplikacji) można wprowadzać również
z końcówki, po uruchomieniu aplikacji. Przeznaczone do tego funkcje znajdują się w pozycji O programie z menu Pomoc. Tam też pojawiają się informacje o aktualnych wersjach, numerach seryjnych i datach ważności. Klucz
serwera dotyczy serwera bazy danych, który pierwszy otwierał tabelę. Oznacza
to, że dla serwera komunikacyjnego nie da się wprowadzić kluczą tą metodą
(czyli serwera uruchamianego na tym samym komputerze co serwer aplikacji w przypadku, gdy serwer bazy danych działa na innym komputerze). Nowe
klucze będą obowiązywały po ponownym uruchomieniu programu, którego
dotyczą. Nie potrzeba kasować istniejących plików *.nfo — po podaniu kluczy zostaną zastąpione nowymi.
172
Rozdział III. Architektura systemu
Wśród rodzajów licencji możemy wyróżnić dwa o nieco innej chrakterystyce:
bezterminowe
data wygaśnięcia licencji nie jest określona, w polu ważny do jest wyświetlana wartość bezterminowo,
wersja do użytku służbowego Macrologic SA
pracownicy (do użytku wewnętrznego) będą mogli używać produktów o
numerach seryjnych PRACnnnnnn. Wystąpienie wersji pracowniczej w
którymkolwiek elemencie (serwer, klient, aplikacja) spowoduje wyświetlanie się odpowiedniej informacji na pasku stanu klienta.
W zależności od wpisanego klucza przy instalacji serwera bazy danych, w
inny sposób mogą być liczone użycia licencji. W pierwszym z warriantów, jeśli operator w ramach tej samej instancji jTerm-a uruchamia jako ten sam
użytkownik tę samą aplikację, to zużywany jest tylko jeden dostęp licencyjny,
niezależnie czy jest to Otwórz, czy Otwórz ponownie. Pozostałe dostępy
wliczane są do puli poza licencją. W drugim wariancie połączenia z wszystkich
zakładek uruchomionego jTerm-a będą zużywały licencje na jedno stanowisko.
W podawanej przez serwer bazy danych liście użytkowników za numerem
procesu klienta doklejany jest w nawiasach kwadratowych numer używanej
licencji. Czyli wszystkie połączenia z zakładek jTerm-a przy drugim sposobie liczenia zużycia licencji będą miały ten sam numer licencji. W przypadku
pierwszego sposobu liczenia zużycia licencji ten sam numer będzie tylko dla
połączeń z tych zakładek, które są do tej samej aplikacji, z podaniem takiej
samej nazwy użytkownika.
Połączenia poprzez mbasic (czyli w szczególności ODBC), MacroCGI
oraz uruchomienie systemu MacroBUILDER za numerem procesu będą miały
doklejone [0] — nie zużywają żadnej wykupionej licencji w serwerze bazy
danych.
W konsoli serwera aplikacji w okienku z aktywnymi użytkownikami prezentowane jest drzewko — w węzłach numer dostępu (zużywanej licencji). Po
rozwinięciu dostępna jest lista połączeń korzystających z tego dostępu.
III.36. Sterownik ODBC dla MacroBASE
36 Sterownik ODBC dla MacroBASE
36.1 System operacyjny Windows
W pakiecie MacroBASE dostępny jest sterownik ODBC w wersji 32 oraz 64bitowej. Zaimplementowano w nim część funkcji dotyczących pobierania danych oraz możliwość uruchamiania procedur wbudowanych. Umożliwia to
korzystanie z danych systemów w technologii MacroBASE w trybie ”tylko do
odczytu” przez programy działające w środowisku Windows. Poprzez ODBC
można pobierać pola typu: STRING, DATE, TIME, TREE_REF, INTEGER,
REAL, REFERENCE, BLOBIMAGE, BLOBRAW oraz SYS_MEMO, o ile znajdą się na liście wynikowej zapytania SQL. Nie można jednak pobrać danych typu MEMO. Za pośrednictwem procedur wbudowanych możliwe jest również
modyfikowanie danych. W szczególności możliwy jest import danych do programu Microsoft Excel, zadawanie zapytań poprzez program Microsoft Query,
tworzenie sprawozdań w programach Microsoft Access i Crystal Reports na
podstawie połączonych tabel.
Sterownik ODBC łączy się z bazą danych poprzez bibliotekę
mbasic.dll. Przy uruchomieniu połączenia ODBC wykonywana jest formuła startowa systemu (z pominięciem funkcji pomijanych przez
mbasic.dll). Ewentualne dialogi, pojawią się tylko wtedy, gdy program korzystający ze sterownika jest programem okienkowym. Po zakończeniu formuły startowej wywoływana jest automatycznie formuła lock_tim(20) —
maksymalny czas oczekiwania na zablokowany zasób wynosi 20 sekund. Można zmienić podany czas poprzez zdefiniowanie zmiennej obiektowej o nazwie
ODBCInfo z polem lock_tim. Jeśli do pola będzie przypisana wartość liczbowa, to zostanie ona użyta przy wywołaniu lock_tim zamiast domyślnej
wartości 20. Wszystkie zawracane przez sterownik wartości tekstowe są konwertowane ze standardu Mazovii na standard windows-1250. Dotyczy wartości rekordów, jak również akronimów tabel i pól. Z kolei treści zapytań przekazywanych do sterownika są konwertowane ze standardu windows-1250 na
standard Mazovii. Zatem w programach wykorzystujących sterownik ODBC
wszystkie teksty powinny być pisane w standardzie windows-1250.
Praca z danymi poprzez ODBC jest możliwa na trzech poziomach uprawnień:
Brak dostępu
użytkownicy nie będą mieli prawa dostępu do bazy danych poprzez sterownik ODBC,
173
174
Rozdział III. Architektura systemu
Procedury wbudowane
dostęp do danych poprzez ODBC będzie możliwy wyłącznie poprzez
procedury wbudowane. Próba pobrania danych w inny sposób zakończy się błędem,
Bez ograniczeń
dopuszczalne są wszystkie sposoby dostępu do danych poprzez ODBC.
Ewentualne ograniczenia mogą wynikać z ustawionych niezależnie
ochron tabel lub procedur wbudowanych.
W celu zainstalowania sterownika w systemie Windows należy wywołać
polecenie:
insmodbc.exe -i
dla wersji 32-bitowej, lub
insmodbc64.exe -i
dla wersji 64-bitowej.
Należy zwrócić uwagę aby katalogiem bieżącym wywołania powyższego
polecenia był katalog zawierający plik modbc.dll. W wersji pod Windows
domyślnie instalowane są dwie wersje sterownika ODBC:
MacroBASE
sterownik w wersji UTF-16,
MacroBASE_UTF-8
wersja sterownika dla programów nie pracujących w trybie UTF-16. Dla
programów wykorzystujących JODBC w Javie konieczne jest wybranie
tego sterownika. Dodatkowo konieczne jest ustawienie strony kodowej
na UTF-8.
W wersjach 64-bitowych systemów operacyjnych instalowane są sterowniki
zarówno w wersji 32 jak i 64-bitowej. W celu zainstalowania tylko sterownika
w wersji 32 bitowej można użyć opcji -d.
Możliwa jest instalacja sterownika pod Windows z zachowaniem sterownika z poprzedniej wersji. Dzieje się tak po wywołaniu programu instalującego
sterownik z opcją -v. Zainstalowane zostaną wtedy dwa sterowniki o nazwach:
MacroBASE_{ver} i MacroBASE_{ver}_UTF-8, gdzie {ver} będzie
zastąpione numerem wersji. Sterowniki odpowiadają funkcjonalnie wcześniej
omówionym.
Z kolei, do odinstalowania sterownika służy polecenie:
III.36. Sterownik ODBC dla MacroBASE
insmodbc.exe -u
dla wersji 32-bitowej, lub
insmod64.exe -u
dla wersji 64-bitowej.
Po zainstalowaniu sterownika ODBC można przystąpić do zdefiniowania
źródła danych. Przy dodawaniu nowego źródła należy wybrać sterownik o nazwie MacroBASE. W okienku, które się pokaże, należy wpisać nazwę źródła.
Podawanie nazwy użytkownika i hasła na tym etapie nie jest konieczne. Dostępne są też trzy opcje o następującym znaczeniu:
Zapisz hasło
hasło zostanie zapamiętane w źródle, opcji należy używać tylko wtedy,
gdy z komputera korzysta tylko jeden użytkownik lub nasze źródło należy do grupy źródeł użytkownika,
Bezpieczne uwierzytelnianie
zaznaczenie tej opcji powoduje, że wpisanie hasła w okienku z parametrami źródła jest niemożliwe. Dopiero po uruchomieniu aplikacji korzystającej z tego źródła, hasło jest weryfikowane w standardowym dialogu.
Dzięki temu możemy zapobiec zapisywaniu hasła jawnym tekstem do
plików wynikowych przez niektóre aplikacje korzystające z tego źródła
danych (np. Excel). Nie należy tej opcji używać, jeżeli ze źródła danych
ma korzystać np. program napisany w PHP, ponieważ w tej sytuacji niemożliwe jest wyświetlanie dialogu i uwierzytelnianie nie powiedzie się,
Karta
domyślnym sposobem uwierzytelniania będzie karta SmartCard. Opcja
jest dostępna po wcześniejszym wyborze bezpiecznego uwierzytelniania.
Następnie należy wskazać plik z deklaracją ścieżek systemu, którego dane
mają być dostępne przez sterownik. Druga możliwość, to zaznaczenie opcji
Serwer aplikacji. W takiej sytuacji sterownik będzie pobierał dane poprzez
serwer aplikacji. Należy wtedy wypełnić pola dotyczące nazwy systemu, adresu serwera, grupy, z której pochodzi aplikacja oraz numeru wykorzystywanego portu. W przypadku gdy połączenie ma być szyfrowane, należy zaznaczyć opcję Ścieżka do pliku z certyfikatem dla połączenia
SSL a w polu poniżej wskazać wspomnianą ścieżkę. Po zatwierdzeniu, źródło
danych będzie dostępne dla programów.
175
176
Rozdział III. Architektura systemu
Przypuścmy, że na końcówce Windows XP, na której działa Xpertis z opcją
”cienki klient” chcemy zaimportować dane kontrahentów z Warszawy. Serwer
aplikacji działa na komputerze o numerze IP 172.27.172.10 i standardowym
porcie 5580. Nie ma też zdefiniowanej żadnej grupy aplikacji i nie jest wymagane szyfrowanie połączenia. Możemy to zrealizować za pomocą sterownika
ODBC w następujący sposób:
1. instalujemy sterownik ODBC poprzez wykonanie polecenia:
insmodbc.exe -i
2. Nastepnie definiujemy nowe źródło danych:
— w Panelu sterowania wybieramy Narzędzia administracyjne
i następnie Źródła danych (ODBC),
— wybieramy zakładkę Plikowe DSN, a następnie przycisk Dodaj,
— wskazujemy MacroBASE i wybieramy przycisk Dalej,
— wpisujemy nazwę Fiks i wybieramy przycisk Dalej, a w następnym okienku Zakończ
— w kolejnym okienku, które się pokaże (o tytule ODBC MacroBASE),
wybieramy opcję Serwer aplikacji, co powinno uaktywnić
część okna poniżej. Uzupełniamy pola:
– Nazwa systemu — wpisujemy fiks
– Adres serwera — wpisujemy 172.27.172.10
W pozostałych polach tej sekcji zostawiamy wartości domyślne.
Wypełniamy też oczywiście pola Użytkownik i Hasło. W celu sprawdzenia poprawności zdefiniowanego źródła można skorzystać z dostępnego przycisku Test połączenia. Po jogo wybraniu następuje próba połączenia z systemem. Jeśli zakończy się
pomyślnie, to zostanie wyświetlony komunikat Test źródła
danych zakończony powodzeniem. W przypadku problemów z połączeniem, zostaną wyświetlone stosowne komunikaty o
błędach.
3. uruchamiamy program Excel i wybieramy z menu
Dane/Pobierz dane zewnętrzne/Utwórz nową kwerendę
III.36. Sterownik ODBC dla MacroBASE
4. po wybraniu źródła danych fiks i podaniu hasła do aplikacji, uruchomi
się program MS Query. Teraz korzystając z kreatora można wybrać tabelę KH, wskazać żądane pola i podać stosowny warunek. Wynik zapytania
będzie przesłany potem do programu Excel.
Przy kolejnych pobieraniach danych do programu Excel wykonuje się dwa
ostatnie kroki.
A oto przykład użycia sterownika ODBC w skryptach PHP. W wyniku działania poniższego skryptu utworzona zostanie tabela z wynikiem zapytania SQL. W nagłówku tabeli znajdą się akronimy pól. Wartości typów
nienapisowych są wyrównywane do prawej strony oczka tabelki. Nazwy kolumn, typ danych oraz kolejne wartości rekordów są pobierane poprzez funkcje udostępniane przez sterownik. W nagłówku zwracana jest strona kodowa
windows-1250. W przypadku innej strony kodowej należy zadbać o przekonwertowanie pobieranych wartości. Skrypt wykorzystuje źródło danych nazwane fiks, rejestrując się na użytkownika szef z hasłem szef.
<?php
header("Content-type: text/html;
charset=windows-1250");
$sql="
select miasto, count(naz) liczba
from kh
group by miasto
order by 2 desc, 1";
?>
<body>
<H1>Wynik zapytania</H1>
<HR>
<?php
$conn=odbc_connect(’fiks’,’szef’,’szef’);
if (!$conn) {
exit("Connection Failed: " . $conn);
}
$rs=odbc_exec($conn,$sql);
if (!$rs) {
exit("Error in SQL");
}
177
178
Rozdział III. Architektura systemu
echo "<table border=\"1\"><tr>";
$tab=1;
while ($tab <= odbc_num_fields($rs)){
echo"<th>",odbc_field_name($rs,$tab),"</th>";
$tab++;
}
while (odbc_fetch_row($rs)) {
echo "<tr>";
for ($tab=1;$tab<=odbc_num_fields($rs);$tab++)
{
$value = odbc_result($rs,$tab);
if ($value == "") $value = "&nbsp;";
if (odbc_field_type($rs,$tab) == "STRING")
echo "<td>", $value, "</td>";
else
echo"<td align=\"right\">",$value,"</td>";
}
echo "</tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
Dla przykładu poniżej został zamieszczony program w Javie, wykorzystujący źrodło danych syslog ze sterownikiem z końcówką nazwy UTF-8 i ustawiający stronę kodową UTF-8:
import java.sql.*;
import java.util.*;
import javax.swing.*;
public class odbc_example {
public static void main(String[] args) {
try {
String url = "jdbc:odbc:syslog";
Properties p = new Properties();
p.put("user", "szef");
p.put("password", "szef");
p.put("charSet", "UTF-8");
III.36. Sterownik ODBC dla MacroBASE
179
Connection connection = DriverManager.getConnection(url, p );
Statement statement = connection.createStatement();
ResultSet resultSet =
statement.executeQuery("SELECT count(*) LICZBA FROM SYSLOG");
resultSet.next();
JOptionPane.showMessageDialog( null,
resultSet.getObject("LICZBA"), "Rozmiar tabeli SYSLOG",
JOptionPane.PLAIN_MESSAGE);
statement.close();
connection.close();
}
catch ( SQLException sqlException ) {
JOptionPane.showMessageDialog( null,
sqlException.getMessage(), "Database Error",
JOptionPane.ERROR_MESSAGE );
System.exit( 1 );
}
}
}
36.2 Sterownik ODBC dla MacroBASE w systemie Linux
W pakiecie MacroBASE dostępny jest sterownik ODBC dla systemów Linux (w wersji 32 oraz 64 bitowej) współpracujący z menadżerem unixODBC.
Umożliwia on korzystanie z danych systemów MacroBASE przez programy
działające w środowisku Linux. W szczególności możliwy jest dostęp do danych z poziomu programów dostępnych w pakiecie OpenOffice oraz przez
skrypty pisane w języku PHP. Poprzez ODBC można pobierać pola typu:
STRING, DATE, TIME, TREE_REF, INTEGER, REAL, REFERENCE, BLOBIMAGE, BLOBRAW oraz SYS_MEMO, o ile znajdą się na liście wynikowej
zapytania SQL. Nie można jednak pobrać danych typu MEMO. Sterownik może łączyć się z serwerem aplikacji działającym na innej maszynie (zarówno pod
Windows, jak i pod Linux)lub bezpośrednio z serwerem bazy danych — w takim przypadku, musi być uruchomiony na tym samym komputerze. Sposób
zapisu polskich znaków określa się na podstawie ustawień językowych (polecenie locale). Interpretowane są dwa standardy kodowania — UTF-8 oraz
ISO-8859-2.
Dla źródła danych wykorzystującego połączenie z serwerem aplikacji, sterownik wywołuje program MacroAppBASIC (dla wersji bez serwera aplikacji
jest to program MacroBASIC).
180
Rozdział III. Architektura systemu
36.2.1 Instalowanie sterownika (wersja 32-bitowa)
Przed przystąpieniem do instalacji należy zadbać, aby w systemie był obecny menadżer unixODBC. Jeśli nie jest dostarczony z systemem operacyjnym,
to należy pobrać go ze strony http://www.unixodbc.org i zainstalować
zgodnie z instrukcją producenta.
Zainstalowanie sterownika w systemie Linux polega na uruchomieniu skryptu install_driver.sh (domyślnie znajduje on się w podkatalogu server/run katalogu instalacji) przez administratora systemu
(użytkownik root) lub innego użytkownika, mającego prawa do zapisu
dla pliku odbcinst.ini (jego położenie można sprawdzić poleceniem
odbcinst -j). Wpływ na umiejscowienie pliku ma zmienna środowiskowa
ODBCSYSINI, wskazująca katalog, w którym plik jest wyszukiwany. Jeśli domyślny katalog został zmieniony przy instalacji sterownika, to zmienna powinna być tak samo zdefiniowana dla każdego programu, który wykorzystuje sterownik. Program musi mieć wtedy prawa do czytania pliku odbcinst.ini.
Wywołanie ma postać:
sh install_driver.sh driver_name driver_desc
gdzie
— driver_name określa nazwę sterownika,
— driver_desc, jest komentarzem.
Skrypt ten oprócz zainstalowania sterownika, utworzy także dwa pliki
dsn.ini i as_dsn.ini — szablony definicji źródła danych. Właścicielem
będzie właściciel zbioru libmodbc.so (czyli sterownika). Pliki te będą potrzebne do definiowania źródeł danych.
36.2.2 Definiowanie źródeł danych
Do zdefiniowania źródła danych użytkownika nie potrzeba już uprawnień administratora systemu — może je definiować administrator bazy danych. Źródła danych widoczne dla wszystkich musi jednak definiować administrator
systemu. W takim przypadku, każdy użytkownik, który korzysta ze źródła,
musi mieć dostęp do czytania pliku sterownika (libmodbc.so). Pierwszą
czynnością jaką należy wykonać, jest uzupełnienie szablonu (pliku dns.ini
dla wersji bez serwera aplikacji i pliku as_dsn.ini dla wersji z serwerem
aplikacji). Należy w nich przypisać zmiennym po znaku = wartości parametrów. Należy zwrócić uwagę, że po znaku równości nie może być spacji, a jeśli
181
III.36. Sterownik ODBC dla MacroBASE
wartość parametru zawiera znaki specjalne (np. spacje lub znak $), to wartość
argumentu należy umieścić pomiędzy znakami apostrofu. Dla pliku dsn.ini
należy określić wartości poniższych parametrów.
DSN_NAME
nazwę źródła danych, np. DSN_NAME=fiks
USER_DSN
wartość 1, jeśli źródło danych ma być dostępne tylko dla użytkownika,
który je instaluje lub 0, jeśli ma być dostępne dla wszystkich jeśli dla
wszystkich, np. USER_DSN=1
PTH
ścieżka do pliku z deklaracją ścieżek systemu (*.pth), np.
PTH=/Xpertis/pth/fiks.pth
dodatkowo, można przypisać wartości do zmiennych USER_NAME oraz
USER_PWD, oznaczające odpowiednio domyślną nazwę użytkownika i hasło,
np.
USER_NAME=szef
USER_PWD=’s$f54-PL’
Dla pliku as_dsn.ini, nie definiuje się parametru PTH. Definiuje się
natomiast parametry: DSN_NAME, USER_DSN oraz:
ASNAME
nazwa aplikacji, np. ASNAME=fiks
ASGROUP
grupa, do której należy aplikacja, np. ASGROUP=default,
ASADDRESS
adres
TCP/IP
komputera
ASADDRESS=Xpertis,
z
serwerem
aplikacji,
ASPORT
port używany przez serwer aplikacji, np. ASPORT=5580.
np.
182
Rozdział III. Architektura systemu
Dodatkowo, jeśli serwer aplikacji ma włączoną obsługę połączeń SSL, to
należy podać ścieżkę do pliku z certyfikatem, przypisując ją do parametru
ASCERTPTH.
W celu zainstalowania nowego źródła danych należy po wpisaniu odpowiednich wartości w pliku, wywołać odpowiednio:
sh install_dsn.sh dsn.ini
lub
sh install_dsn.sh as_dsn.ini
W celu odinstalowania sterownika lub źródła danych należy posłużyć się
programem odbcinst z pakietu unixODBC.
36.2.3 Przykład instalacji
Przypuśćmy, że chcemy połączyć się pod Linuxem poprzez sterownik ODBC
z systemem fiks, zainstalowanym w domyślnej grupie na komputerze o nazwie Xpertis. Zakładamy, że serwer aplikacji wykorzystuje domyślny port
do komunikacji. W tym celu, w katalogu z programami wykonawczymi (tam,
gdzie znajduje się plik libmodbc.so), z prawami administratora systemu
(użytkownika root) wykonujemy polecenie:
sh install_driver.sh MacroBASE "MacroBASE ODBC"
Następnie, działając już na konto administratora bazy danych (właściciela
libmodbc.so), w pliku as_dsn.ini dokonujemy trzech zmian:
— w linii z DSN_NAME dopisujemy nazwę źródła danych (fiks),
— w linii z ASNAME dopisujemy nazwę systemu (fiks),
— w linii z ASADDRESS zamiast localhost wpisujemy adres komputera
z serwerem aplikacji (Xpertis).
Poniżej przedstawiona jest zawartość pliku as_dsn.ini po zmianach:
#! /bin/sh
# Nazwa zrodla danych. Parametr wymagany.
DSN_NAME=fiks
III.36. Sterownik ODBC dla MacroBASE
# Zrodlo danych moze byc zainstalowane tylko
# dla biezacego uzytkownika lub moze byc dostepne
# dla wszystkich uzytkownikow.
# Zmienna USER_DSN okresla
# sposob instalacji i moze przyjac wartosci:
# 1 - zrodlo instalowane dla biezacego uzytkownika
# 0 - zrodlo instalowane dla
# wszystkich uzytkownikow
USER_DSN=1
# Opcjonalny uzytkownik zapisany w zrodle danych.
USER_NAME=
# Opcjonalne haslo uzytkownika zapisane
# w zrodle danych.
USER_PWD=
# Nazwa systemu w serwerze aplikacji.
# Parametr wymagany.
ASNAME=fiks
# Nazwa grupy, do ktorej nalezy aplikacja.
# Parametr opcjonalny, pominiecie przypisze
# do domyslnej grupy "default"
ASGROUP=default
# Adres TCP/IP serwera aplikacji.
# Parametr opcjonalny
# pominiecie przypisze wartosc domyslna localhost
ASADDRESS=Xpertis
# Port TCP/IP serwera aplikacji.
# Parametr opcjonalny
# pominiecie przypisze wartosc domyslna 5580
ASPORT=5580
# Opcjonalna sciezka do pliku
# z certyfikatem serwera aplikacji.
# Wymagana jesli serwer ma wlaczona
183
184
Rozdział III. Architektura systemu
# obsluge polaczen SSL.
ASCERTPTH=
# KONIEC KONFIGURACJI
# ZMIANA POZOSTALYCH PARAMETROW ZABRONIONA
# Nazwa sterownika pod jaka,
# zostal zainstalowany w systemie.
DRIVER_NAME=MacroBASE
# Wersja z cienkim klientem.
AS=1
Na koniec instalujemy sterownik (nadal na koncie administratora bazy danych), poprzez wywołanie polecenia:
sh install_dsn.sh as_dsn.ini
Od tego momentu, źródło danych będzie dostępne np. dla programu
OpenOffice lub php.
W razie problemów z połączeniem przez ODBC w systemie Linux, warto
sprawdzić czy zainstalowane biblioteki ODBC mają odpowiednie (wymagane
przez sterownik MacroBASE) nazwy: libodbcinst.so i libodbc.so. Jeśli nie, to należy utworzyć odpowiednie dowiązania symboliczne. Przykładowo
dla systemu Ubuntu 6.06 i najnowszego pakietu unixODBC dla tego systemu
w wersji 2.2.11 należy z prawami użytkownika root wykonać polecenia:
ln -s /usr/lib/libodbcinst.so.1.0.0 /usr/lib/libodbcinst.so
ln -s /usr/lib/libodbc.so.1.0.0 /usr/lib/libodbc.so
36.2.4 Instalowanie sterownika (wersja 64-bitowa)
Instalacja przebiega analogicznie, jak w wersji 32-bitowej, z uwzględnieniem:
— skrypt instalujący sterownik nazywa się install_driver64.sh:
sh install_driver64.sh driver_name driver_desc
— utworzone szablony mają nazwy as_dsn.ini oraz dsn.ini (parametry do
modyfikowania mają takie same nazwy, co w wersji 32-bitowej),
— źródła danych instaluje się na podstawie zmodyfikowanych szablonów:
III.36. Sterownik ODBC dla MacroBASE
sh install_dsn.sh dsn.ini
lub
sh install_dsn.sh as_dsn.ini
Aby wykorzystać tak zdefiniowane źródło danych system musi wspierać
uruchamianie programów 32-bitowych (32-bitowe wersje bibliotek), gdyż sterownik wywołuje program MacroAppBASIC (lub MacroBASIC), które są programami 32-bitowymi. Warto zwróćić uwagę na fakti, iż install_driver64.sh instaluje sterownik który pod tą samą może być jednocześnie 32 jak i 64-bitowy.
Pakiet linuxowego menagera ODBC (unixODBC-2.2.12) w wersji 64 bitowej może być skompilowany z użyciem lub bez użycia zmiennej sterującej kompilacją BUILD_REAL_64_BIT_MODE. W efekcie powstają dwie
wersje menagera ODBC, które nie są ze sobą kompatybilne binarnie.
Libmodbc64.so jest kompilowany w trybie ze zdefiniowaną zmienną
BUILD_REAL_64_BIT_MODE, co uniemożliwia użycie sterownika w systemach, w których manager ODBC jest skompilowany bez zmiennej — użycie
prowadzi do błędów typu naruszenie zakresu pamięci w losowych przypadkach. W takich przypadkach należy wykorzystać libmodbc64_legacy.so
— kompilat wersji 64 bitowej bez ustawianej stałej BUILD_REAL_64_BIT_MODE. Skrypt instalujący sterownik w tym trybie nazywa się: install_driver64_legacy.sh, a jego wywołanie może mieć postać:
sh install_driver64_legacy.sh driver_name driver_desc
W przypadku zainstalowania nieprawidłowej wersji sterowanika ODBC,
możliwe jest poprawienie wszystkich zainstalowanych sterowników na odpowiednią wersję wykorzystując skrypty:
switch_drivers64.sh
którego zadaniem jest poprawienie wszystkich zainstalowanych sterowników na wersję z libmodbc64.so,
switch_drivers64_legacy.sh
którego zadaniem jest poprawienie wszystkich zainstalowanych sterowników na wersję z libmodbc64_legacy.sh.
185
186
Rozdział III. Architektura systemu
36.3 Procedury wbudowane
Procedura wbudowana to podprogram pisany w języku Formula+, który można wywołać funkcją sterownika ODBC. Procedura może utworzyć tabelę tymczasową, której zawartość będzie dostępna do pobrania funkcjami sterownika. Do procedury można przekazywać parametry, wpływając w ten sposób na
jej wynik. Procedury wbudowane mogą być wywoływane również w języku
Formula+. Wynikiem będzie alias do utworzonej tabeli tymczasowej. Zasady
tworzenia procedur wbudowanych opisane są w podręczniku Formuli+.
Jeśli procedura jest zapisana w pliku odbc.prc, to przy wywołaniu procedury wystarczy podać jej nazwę. Gdy nazwa pliku jest inna, to nazwę procedury należy rozszerzyć o znak @ i nazwę pliku, z którego pochodzi. Dla przykładu, pierwsza z poniższych instrukcji ODBC wywołuje procedurę suma z pliku
odbc.prc, zaś druga wywołuje procedurę suma z pliku demo.prc:
{call suma}
{call suma@demo}
W pliku z procedurami (plik *.prc) każdy wiersz rozpoczynający się od
znaku # (hash jest pierwszym znakiem w wierszu różnym od spacji i tabulacji)
jest komentarzem i nie ma wpływu na działanie procedury.
Przypuśćmy, że chcemy przenieść do Excela informacje ilu jest kontrahentów w każdym mieście wskazanego kraju. Dodatkowo chcemy, aby zamiast pustej nazwy miasta był tekst NIEZNANE. Wykorzystamy do tego celu procedurę
wbudowaną. Po pobraniu zapytaniem SQL liczby kontrahentów w poszczególnych miastach, zmienimy (o ile istnieje) pustą nazwę na wyraz NIEZNANE.
Poniżej są opisane kolejne kroki rozwiązania:
tworzymy zgodnie z deklaracją ścieżek plik odbc.prc, w którym zapisujemy:
proc miasta
params
Kraj:= ’Polska’ String[20], Nazwa kraju
end params
sql
select miasto, count(naz) liczba
from kh
where Kraj = :Kraj
group by miasto
III.36. Sterownik ODBC dla MacroBASE
order by 2 desc, 1
end sql
formula
{? :RS.find_tab(1, ’MIASTO’, , ’=’, ’’) ||
:RS.MIASTO:= ’NIEZNANE’;
:RS.put
?}
end formula
end proc
w Excelu wybieramy z menu Dane/Pobierz dane zewnętrzne/Utwórz nową
kwerendę,
po wybraniu źródła danych i podaniu hasła do aplikacji, uruchomi się program MS Query,
w celu uzyskania list miast z Włoch, wybieramy przycisk SQL i wpisujemy
polecenie:
{call miasta(’Włochy’)}
po zamknięciu programu MS Query wynik procedury będzie przesłany do
programu Excel.
Procedury wbudowane umożliwiają również modyfikowanie danych. Załóżmy, że chcemy umożliwić dodawanie rekordów poprzez przeglądarkę internetową. Użytkownik ma wpisać swoje nazwisko oraz datę. Wykorzystamy do
tego język PHP, sterownik ODBC oraz procedurę wbudowaną z parametrami.
W zapytaniu SQL zostanie zwrócona pusta tabela z jednym polem typu INTEGER. W formule po zapytaniu będzie dodany rekord do tabeli TAB, z wartościami pól przekazanymi poprzez parametry. Na koniec, do tabeli wynikowej
dodany zostanie rekord z wartością pola 1, jeśli operacja zakończyła się sukcesem i 0, jeśli nie udało się dodać rekordu do bazy danych. W ten sposób
wynik zostanie przekazany do programu wywołującego procedurę. W pliku
odbc.prc możemy umieścić następującą treść:
proc dodaj
desc
Dodanie nowego rekordu do tabeli TAB
end desc
params
187
188
Rozdział III. Architektura systemu
Nazwisko String[25]
Data DATE
end params
sql
# tworzymy pustą tabelę z polem typu INT
select 1 RES from syslog where 2 = 1
end sql
formula
TAB.NAZ:= :Nazwisko;
TAB.DAT:= :Data;
:RS.RES:= TAB.add;
:RS.add
end formula
end proc
Fragment strony z formularzem do wprowadzania danych może mieć postać:
<FORM METHOD=POST ACTION="dodaj.php">
Nazwisko: <INPUT TYPE="TEXT" NAME="NAZ"><BR>
Data (rrrr-mm-dd):
<INPUT TYPE="TEXT" NAME="DATA"><BR>
<INPUT TYPE="submit" VALUE="Dodaj">
</FORM>
Przy założeniu, że użytkownik wpisał datę w formacie rrrr-mm-dd, skrypt
PHP powinien wyglądać (d ’2003-03-11’ to przykładowy zapis daty w zapytaniach wywoływanych przez ODBC):
<?php
header("Content-type: text/html;
charset=windows-1250");
$naz = $HTTP_POST_VARS["NAZ"];
$data = $HTTP_POST_VARS["DATA"];
$sql="{call dodaj(’$naz’, {d ’$data’})}";
$conn=odbc_connect(’system’,’szef’,’szef’);
if (!$conn) {
III.36. Sterownik ODBC dla MacroBASE
189
exit("Błędne połączenie: " . $conn);
}
$rs=odbc_exec($conn,$sql);
if (!$rs) {
exit("Błąd w procedurze wbudowanej.");
}
if (odbc_fetch_row($rs) && odbc_result($rs,1))
echo("Rekord dodany.");
else
echo("Błąd. Nie dodano rekordu.");
odbc_close($conn);
?>
36.4 Sterownik JDBC
Wraz z dostarczonym systemem dodawany jest sterownik JDBC do bazy danych MacroBASE. Aby wykorzystać sterownik należy w zmiennej
CLASSPATH podać wskazanie do pliku mjdbc.jar instalowanego wraz z
systemem. Sterownik JDBC wykorzystuje źródła danych ODBC zdefiniowane
dla sterownika ODBC do MacroBASE. W systemie Linux musi być zainstalowany menadżer ODBC — unixODBC. Sterownik JDBC może być wykorzystywany przez programy zarówno 32 bitowe, jak i 64 bitowe, zaś wykorzystywany
sterownik może być zarówno w wersji zwykłej, jak i UTF-8.
Napis URL przekazywany przy otwieraniu połączenia powinien mieć postać jdbc:mbase:demo, gdzie demo można zastąpić nazwą dowolnego zdefiniowanego źródła danych do bazy MacroBASE. Przykładowe wywołanie może mieć zatem postać:
import java.sql.*;
public class tjdbc {
public static void main(String args[]) {
try {
Connection con = DriverManager.getConnection("jdbc:mbase:demo", "szef", "szef");
Statement stmt = con.createStatement();
ResultSet rs =
stmt.executeQuery("select count(*) D from katal");
rs.next();
java.lang.Integer d = (java.lang.Integer)rs.getObject("D");
System.out.print("Liczba rekordów: ");
System.out.print(d);
System.out.print("\n");
} catch( SQLException ex ) {
ex.printStackTrace();
}
}
190
Rozdział III. Architektura systemu
}
37 Sposoby wymiany danych z innymi systemami
W niektórych sytuacjach zachodzi potrzeba wymiany danych pomiędzy systemami w technologii MacroBASE a innymi programami. W zależności od potrzeb można obrać jedną z kilku ścieżek postępowania. W przypadku eksportu
danych najwygodniejsze narzędzia nie wymagające znajomości Formuli+ to:
ODBC
umożliwia korzystanie z bazy danych MacroBASE przez działające
w środowisku Windows programy potrafiące wykorzystać mechanizm
ODBC np. import danych do programu Microsoft Excel. Opis zastosowania sterownika ODBC znajduje się w oddzielnym rozdziale. Ponadto
wykorzystując funkcje dostępne w języku Formula+ istnieje możliwość
nawiązywania połączeń ODBC z dowolnymi źródłami danych (funkcjonalność klienta ODBC). Łączyć się można jedynie ze sterownikami
ODBC w wersji 32-bitowej. Po ustaleniu połączenia, można wywoływać
zapytania. Wynik może być w formie tabeli tymczasowej lub kursora. W
drugim przypadku, metodą fetch pobiera się kolejne rekordy wyniku,
MacroCGI
wykorzystując szablony _sql.htm i _ressql.htm ze standardowych bibliotek _libfml można, konstruując odpowiednie zapytanie SQL, w dość
prosty sposób otrzymać pożądane dane w przeglądarce,
wydruk uniwersalny
narzędzie dostępne w zestawie standardowych bibliotek _libfml. Pozwala użytkownikowi na wybór tabel i pól, które chce umieścić w zestawieniu oraz nakładanie warunków ograniczających zakres danych. Wynikiem zestawienia może być standardowy wydruk lub pliki w formacie
*.html lub *.xml. Jeśli interesuje nas wynik w formie tekstowej można
przygotować standardowy wydruk a następnie w oknie wydruku wybrać
z menu Plik funkcję Zapisz jako tekst lub ewentualnie skopiować
do schowka (menu Edycja). Uruchomienie wydruku uniwersalnego może przykładowo wyglądać tak:
exec(,’_declall’);
UNV:=obj_new(@.CLASS.UNIVERS);
UNV.univers()
III.38. Szyfrowanie połączenia z serwerem aplikacji
W większości aplikacji pakietu Xpertis jest on jednak standardowo dostępny z poziomu menu,
kopiowanie wprost z okienek wertowania i edycji
interesujące nas dane można czasami znaleźć w jednym z okienek aplikacji i wtedy bezpośrednio z tego okienka skopiować do schowka. Kopiować można zarówno zawartość okienek wertowania jak i edycji, w zależności od wybranej opcji. Możliwość zmiany parametrów kopiowania
i zestaw funkcji pomocnych w zaznaczaniu rekordów do kopiowania są
zawsze dostępne w menu Okno.
38 Szyfrowanie połączenia z serwerem aplikacji
W przypadku pracy w sieci rozległej a zwłaszcza przesyłania danych przez sieć
Internet, warto skorzystać z możliwości szyfrowania połączenia z serwerem
aplikacji z wykorzystaniem protokołu SSL. Protokół SSL (Secure Sockets Layer), to protokół kryptograficzny bezpiecznej transmisji danych, którego zadaniem jest stworzenie wirtualnego, odpornego na próby podsłuchiwania kanału
transmisji dla informacji przesyłanych przez aplikacje. Dzięki jego zastosowaniu mamy pewność że nikt postronny nie może czytać przesyłanych danych
ani w nie ingerować, oraz że nawiązujemy połączenie z właściwym serwerem.
W trakcie połączenia wykorzystywane są dwa rodzaje szyfrowania: symetryczne RC4 (z pojedynczym kluczem) oraz asymetryczne RSA (z kluczem
prywatnym i publicznym). Serwer aplikacji posiada klucz prywatny algorytmu RSA, natomiast klient posiada certyfikat serwera aplikacji. Pierwszą operacją po nawiązaniu połączenia jest uzgodnienie symetrycznego klucza sesyjnego do szyfrowania komunikacji. Uzgodnienie polega na wygenerowaniu przez
cienkiego klienta 128-bitowego klucza sesyjnego dla algorytmu RC4 i zaszyfrowaniu go algorytmem RSA z wykorzystaniem klucza publicznego certyfikatu
serwera aplikacji. Następnie zaszyfrowany klucz sesyjny jest przesyłany do serwera aplikacji. Tylko serwer aplikacji, jako posiadacz klucza prywatnego, jest
w stanie odszyfrować klucz sesyjny. Od tego momentu klucz sesji może już
służyć do deszyfrowania otrzymywanych danych.
Istotną rolę odgrywa długość zaimplementowanych w programie kluczy,
czyli liczba składających się nań bitów. Im klucz jest dłuższy, tym trudniej jest
go złamać. W MacroBASE używane są klucze sesyjne o długości 128-bitów,
długość kluczy publicznych i prywatnych zależy od parametrów ich wygenerowania. Zazwyczaj są długości 1024 bity i ten poziom bezpieczeństwa można
uznać za wystarczający.
191
192
Rozdział III. Architektura systemu
Serwer aplikacji obsługuje szyfrowanie zarówno w wersji działającej pod
systemem Windows, jak i Linux. Klient serwera aplikacji (jTerm) oraz jMacroCONSOLA (jConsole.jar) mogą obsługiwać szyfrowane połączenie
w dowolnej wersji systemu, dla kórego są dedykowane.
Do ustanowienia szyfrowanego połączenia między klientem a serwerem
aplikacji, potrzebny jest plik o nazwie server.pem z kluczem prywatnym,
oraz plik o nazwie certificate.der zawierający certyfikat. Oba wspomniane pliki muszą być umieszczone w jednym katalogu i dodatkowo plik
server.pem nie może mieć praw do modyfikacji oraz nie może być zabezpieczony hasłem. Serwer aplikacji musi być uruchamiany z opcją -k i następującą po niej ścieżce dostępu do katalogu, w którym znajdują się plik z kluczem
i certyfikatem. Kopia pliku certificate.der (może być pod inną nazwą)
będzie potrzebna do uruchomienia klienta.
W celu nawiązania szyfrowanego połączenia z serwerem aplikacji, w zależności od konfiguracji i stosowanego programu należy użyć jednej z niżej
opisanych metod:
jTerm.jar
należy podać po opcji -k ścieżkę do pliku z certyfikatem (z nazwą pliku włącznie). Plik ten można też wskazać konwersacyjnie, po wybraniu opcji MacroAppSERVER: Ustawienia z menu Plik, wypełniając pole Certyfikat,
ODBC
w definicji źródła danych należy zaznaczyć opcję Ścieżka do pliku z certyfikatem dla połączenia SSL i wskazać odpowiedni plik,
jConsole.jar
należy podać po opcji -k ścieżkę do pliku z certyfikatem (z nazwą pliku
włącznie),
mbasic.dll
należy użyć funkcji LoadRemoteSystemSSL lub LoadRemoteSystemWithUserSSL. Ich znaczenie jest identyczne ze znaczeniem funkcji LoadRemoteSystem oraz LoadRemoteSystemWithUser z tą różnicą, że mają dodatkowy pierwszy argument, poprzez który należy przekazać ścieżkę dostępu do pliku z certyfikatem.
Przykładowe uruchomienie szyfrowanego połączenia z serwerem aplikacji
pracującym na serwerze windowsowym może mieć następujący przebieg:
III.38. Szyfrowanie połączenia z serwerem aplikacji
193
1. Wygenerowanie certyfikatu i klucza prywatnego
Klucz prywatny i certyfikat można wygenerować darmowym oprogramowaniem OpenSSL. W celu wygenerowania klucza prywatnego o długości 1024 bitów (pliku server.pem) należy wywołać polecenie:
openssl genrsa -out server.pem 1024
Przed utworzeniem certyfikatu należy przygotować plik konfiguracyjny np. opcje.cfg o treści zbliżonej do poniższej (ze zmianą danych
o właścicielu):
[ req ]
distinguished_name = MacroAppServer
prompt = no
[MacroAppServer]
C = PL
O = Nazwa Firmy
CN = Nazwa Serwera
teraz po wywołaniu:
openssl req -new -x509
-config opcje.cfg -key server.pem
-outform DER -out certificate.der -days 365
powstanie plik (certificate.der) z certyfikatem ważnym przez 365
dni.
W katalogu bieżącym pliku mblaunch.exe tworzymy podkatalog
keys, w którym umieszczamy pliki server.pem oraz certificate.der.
Dla pliku server.pem nadajmy atrybut Tylko do odczytu.
2. Instalujemy i uruchamiamy serwer aplikacji jako usługę z opcją -k:
mblaunch.exe -k keys -i
mblaunch.exe -bv
3. W katalogu, w którym wywoływany jest jTerm.jar umieszczamy kopię pliku certificate.der. W parametrze wywołania dodajemy
opcję -k, np.
javaw.exe -jar jTerm.jar serwer -k certificate.der
194
Rozdział III. Architektura systemu
39 Uwierzytelnianie certyfikatem
39.1 Uwierzytelnianie za pomocą SmartCard
W systemach MacroBASE możliwe jest uwierzytelnianie za pośrednictwem
kart SmartCard. Jest to opcja wymagająca posiadania odpowiedniej licencji, w
przeciwnym razie nie jest dostępna. Jeśli wpisany klucz serwera bazy danych
uprawnia do używania tej opcji w logu serwera (server.log dla Windows
i macro.log dla Linuxa) powinien pojawić się zapis:
smart card login - on
Obsługiwane są karty firm CryptoTech, Unizeto i ActivCard. Obsługa SmartCard jest dostępna na końcówkach działających w systemie Windows XP.
Dla końcówek działających w systemach Windows 95/98/ME/2000 oraz Linux
uwierzytelnianie za pośrednictwem kart jest niedostępne.
Uwierzytelnianie polega na wysłaniu przez serwer aplikacji do klienta danych, które są szyfrowane kluczem prywatnym znajdującym się na karcie. Zaszyfrowane dane są potem odsyłane do serwera aplikacji, gdzie są deszyfrowane kluczem publicznym zapisanym w pliku *.psw aplikacji. Jeśli wynik będzie
zgodny z wysłanymi danymi, to proces uwierzytelnienia zakończy się sukcesem.
Do prawidłowego uwierzytelnienia niezbędna jest karta zawierająca klucz
prywatny i właściwy dla niego certyfikat, czytnik kart i zainstalowane oprogramowanie dostarczone przez producenta kart.
Lista dostępnych certyfikatów pobierana nie jest bezpośrednio z karty tylko
z systemowego magazynu certyfikatów. Podczas uwierzytelniania widoczne są
tylko te certyfikaty, które z aktualnie używanej karty zostały zarejestrowane w
systemie przy pomocy menedżera tej karty i dodatkowo posiadają na karcie
powiązany klucz prywatny.
Powiązanie certyfikatu z karty z użytkownikiem systemu MacroBASE odbywa się w systemie MacroPASS. Po wskazaniu użytkownika zmieniamy dla
niego typ uWierzytelniania zaznaczając opcję Karta. Następnie wybieramy kolejno karTa (SmartCard), Zmiana certyfikatu i nowy
certyfikat z Karty lub nowy certyfikat z Pliku.
Jeśli wczytujemy certyfikat z karty i jest na niej więcej niż jeden ważny certyfikat, pojawi się okienko dialogowe umożliwiające wybór właściwego certyfikatu. Jeśli certyfikat jest tylko jeden, zostanie on automatycznie wybrany.
Jeśli certyfikat wczytujemy z pliku, pojawi się dialog umożliwiający wskazanie pliku z certyfikatem w formacie PEM. Jeden certyfikat może być przypi-
III.39. Uwierzytelnianie certyfikatem
195
sany tylko do jednego użytkownika. Po zapisaniu zmian system jest gotowy do
pracy.
Uruchomienie aplikacji przebiega standardowo, z tą różnicą, że w okienku uwierzytelniania po rozwinięciu opcji Rozwiń dostępny będzie przycisk
z karty. Po jego wybraniu, jeśli na karcie jest więcej niż jeden ważny certyfikat, pojawi się okienko dialogowe umożliwiające wybór właściwego certyfikatu spośród tych, które z aktualnie używanej karty zostały zarejestrowane
w systemie przy pomocy menedżera tej karty i dodatkowo posiadają na karcie
powiązany klucz prywatny. Jeśli jest tylko jeden ważny i zarejestrowany certyfikat, to zostanie on automatycznie wybrany. Podanie parametru -q jako jednej
z opcji wywołania programu jTerm.jar spowoduje, że domyślnym sposobem uwierzytelniania będzie uwierzytelnianie kartą. Zamiast standardowego
dialogu weryfikującego nazwę użytkownika i hasło, pojawi się okienko z wyborem certyfikatu. Jeśli na karcie będzie jeden certyfikat, użytkownik zostanie
od razu poproszony o podanie kodu PIN.
W przypadku pracy przez ODBC należy w źródle danych zaznaczyć opcję
Karta. Należy zwrócić uwagę żeby użytkownik wpisany w okienku ODBC był
tym samym dla którego jest wystawiony certyfikat zapisany na karcie, w przeciwnym wypadku uwierzytelnianie zakończy się niepowodzeniem. Nie można
korzystać z uwierzytelniania kartą w programach nie pozwalających na wyświetlanie okienek dialogowych np. PHP.
Aby zapewnić domyślne uwierzytelnianie kartą w programach korzystających z biblioteki mbasic.dll, należy użyć jednej z funkcji: LoadSystemCard, LoadRemoteSystemCard lub LoadRemoteSystemSSLCard. Dokładny
opis funkcji znajduje się w rozdziale tego podręcznika poświęconym bibliotece mbasic.dll.
W celu umożliwienia w programie jTerm uwierzytelniania kartą SmartCard
należy w pliku jterm_12.30.ini wskazać sterownik obsługujący posiadany typ karty. Należy zdefiniować sekcję [!smartcard] o następującej strukturze:
[!smartcard]
provider_1 = name=nazwa_dostawcy|library=nazwa_pliku.dll
gdzie:
nazwa_dostawcy
dowolna nazwa dostawcy oprogramowania karty, jeśli w nazwie jest spacja należy ją wpisać w cudzysłowach,
196
Rozdział III. Architektura systemu
nazwa_pliku.dll
nazwa biblioteki obsługującej daną kartę, dostarczanej przez producenta
karty.
Można zdefiniować maksymalnie 3 różne typy kart wpisując kolejno klucze provider_1 do provider_3. Jeśli zdefiniowana jest tylko jedna karta, dialog
wyboru karty podczas uruchamiania programu jest pomijany. Jeśli katalog z
biblioteką nie jest wpisany w zmiennej środowiskowej PATH, należy podać
pełną ścieżkę do pliku, przy czym ścieżka może zawierać tylko litery łacińskie,
spacje i podkreślenie.
Przykładowo dla kart z firm CryptoTech i Unizeto sekcja wyglądałaby następująco:
[!smartcard]
provider_1 = name=CryptoTech|library=CCPkiP11.dll
provider_2 = name=Unizeto|library=aetpkss1.dll
39.2 Uwierzytelnianie certyfikatem z pliku
Możliwe jest uwierzytelnianie certyfikatem bez konieczności używania urządzeń kryptograficznych. Certyfikat i klucz prywatny może być zapisany w pliku w formacie PKSC#12. W pliku jterm_12.30.ini należy zdefiniować
sekcję:
[!UserCertificates]
cert_file_1 = e:/skid/cert1.p12
cert_file_2 = e:/skid/cert2.p12
cert_file_3 = cert3.p12
Jeśli podana ścieżka jest względna to, plik jest wyszukiwany względem katalogu bieżącego klienta (pth_dir(’@’)). Aby uwierzytelnianie certyfikatem z
pliku było domyślnym należy do wywołania jTerma dodać parametr -qfile.
Jeśli zdefiniowany zostanie jeden certyfikat to zostanie automatycznie wybrany do uwierzytelniania. Jeśli certyfikatów jest więcej, pojawi się lista wyboru.
Maksymalnie można podać trzy certyfikaty. Uruchomienie aplikacji przebiega
standardowo, z tą różnicą, że w okienku uwierzytelniania po rozwinięciu opcji
Rozwiń dostępny będzie przycisk z pliku. Dalszy ciąg procesu uwierzytelniania jest analogiczny jak przy użyciu karty kryptograficznej.
III.40. Profiler
40 Profiler
W systemie dostępny jest profiler — narzędzie umożliwiające zbadanie
czasów i liczbę wywołań formuł, funkcji i metod. Analiza takich informacji
może pozwolić na optymalizację kodu, znalezienie najbardziej czasochłonnych operacji (np. w celu ich przeprojektowania), znalezienie najczęściej używanych formuł i ich wpływu na czas działania aplikacji, itp. Zbierane informacje zapisywane są w plikach z rozszerzeniem *.mfp. Pliki te zapisywane
są w lokalizacjach określonych zgodnie z deklaracją ścieżek. Domyślną nazwą
pojedynczego pliku z danymi jest RRRRMMDDhhmmssp[n].mfp, czyli napis
zawierający datę i czas rozpoczęcia rejestrowania. W przypadku powtórzenia
nazwy pliku w katalogu, do nazwy pliku będą doklejany kolejny numer (n).
Niektóre sposoby uruchamiania profilera dają możliwość samodzielnego ustalenia nazwy pliku. W takim przypadku przy powtórzonej nazwie pliku także
będą doklejane kolejne numery. Zaleca się, aby w pliku deklaracji ścieżek pliki
*.mfp zapisywane były w katalogach użytkownika (wpis ze znacznikiem ’>’
na początku), ułatwi to przypisanie danego pliku do konkretnej sesji konkretnego użytkownika aplikacji.
40.1 Uruchamianie profilera
Zbieranie informacji przez profilera może być uruchomione na cztery sposoby:
— dla każdej aplikacji i rodzaju połączenia przez cały czas jej działania za
pomocą wpisu w pliku konfiguracyjnym aplikacji,
— dla każdej aplikacji uruchomionej danym klientem przez cały czas jego
działania za pomocą opcji linii poleceń,
— umożliwienie włączania i wyłączania rejestrowanie na żądanie użytkownika za pomocą przycisków na pasku narzędzi,
— profilowanie pojedynczej formuły za pomocą funkcji profile
W danym momencie profilowanie może być włączone tylko jednym sposobem, przy czym priorytet poszczególnych trybów pracy jest zgodny z powyższą
listą. Oznacza to przykładowo, że jeśli włączymy profilowanie za pomocą wpisu w pliku konfiguracyjnym, to próba włączenia (czy wyłączenia) profilowania
w innym trybie albo będzie niedostępna, albo zignorowana, albo zgłosi błąd.
W przeciwieństwie do uruchamiania MacroDEBUGGERA, które jest ograniczone tylko dla użytkowników z grupy „wdrożenia”, nie ma żadnych ograniczeń w uruchamianiu profilera: każdy użytkownik może używać profilera w
197
198
Rozdział III. Architektura systemu
swojej aplikacji, niezależnie od sposobu jego włączania. Można także uruchamiać profilera razem z dostępnym MacroDEBUGGEREM (opcja -d). Jako, że
w tym trybie system wykonuje więcej operacji (np. każdorazowe ładowanie
plików z formułami), wyniki profilera (np. czasy trwania poszczególnych operacji) mogą być obarczone błędem, bo czasy trwania poszczególnych operacji
będą miały narzut związany z działaniem debuggera. W takim przypadku system wyświetli stosowną informację.
40.1.1 Włączanie profilera za pomocą wpisu w pliku konfiguracyjnym
Aby włączyć zbieranie informacji przez profilera przy każdym uruchomieniu aplikacji, należy umieścić w pliku konfiguracyjnym (macro.cfg lub
aplikacja.cfg) poniższy parametr:
macro_profiler = 1
W tym przypadku przy każdym uruchomieniu aplikacji tworzony będzie
plik o nazwie domyślnej (czyli z datą i czasem rozpoczęcia zbierania danych),
w którym będą zapisywane wszystkie informacje do czasu zakończenia aplikacji. W ten sposób można włączyć profilowanie dla wszystkich rodzajów klientów, które uruchamiają aplikację (w szczególności dla wywołań przez ODBC
i MacroCGI). Ten tryb włączania profilera jest nadrzędny względem innych
(opisanych poniżej) trybów.
40.1.2 Włączanie profilera za pomocą opcji z linii poleceń
Aby włączyć zbieranie informacji przez profilera przy każdym uruchomieniu aplikacji z poziomu danego klienta, należy program klienta (jTerm
lub MacroCGI) uruchomić z dodatkową opcją -v [plik]. Argument plik
oznacza nazwę pliku *.mfp, w którym mają być zapisywane dane z profilera.
Kolejne pliki tworzone dla kolejnych aplikacji będą dostawały kolejne numery
dopisywane do nazwy pliku. Pominięcie nazwy pliku spowoduje, że tworzone
będą pliki o nazwach domyślnych (data, czas rozpoczęcia zbierania danych).
Ten parametr nie ma znaczenia dla aplikacji, dla których profiler jest włączony
opcją w pliku konfiguracyjnym.
40.1.3 Włączanie i wyłączanie profilera za pomocą przycisków na pasku narzędzi
Aby umożliwić użytkownikowi włączanie i wyłączanie zbierania danych przez
profilera za pomocą przycisków na pasku narzędzi, należy uruchomić jTerma
III.40. Profiler
z dodatkową opcja -v2. W programie będą dostępne przyciski umożliwiające włączenie
i wyłączenie
rejestrowania. Każdorazowe włączenie rejestrowania powoduje utworzenie nowego pliku z danymi profilera. Nazwa
tworzonego pliku zależy od wartości pola Prefiks nazw tworzonych
plików w oknie ustawień użytkownika (Okno / Ustawienia użytkownika, zakładka Parametry aplikacji). Znaczenie tej wartości jest analogiczne do parametru plik dla opcji -v. Pozostawienie pustej nazwy oznacza, że tworzone będą
pliki o nazwach domyślnych. W przypadku włączenia profilowania za pomocą
parametru w pliku konfiguracyjnym, możliwość „ręcznego” włączania zbierania danych będzie niedostępna.
40.1.4 Profilowanie pojedynczej formuły
MacroBASE umożliwia także profilowanie pojedynczej formuły uruchamianej
przez użytkownika. Można to zrobić za pomocą funkcji FORMULI+ o nazwie
profile.
profile([file], [formula])
file
nazwa pliku (bez końcówki .mfp), w którym maja być zapisane informacje profilera z uruchomienia zadanej drugim argumentem formuły.
Jeśli parametr zostanie pominięty (lub przyjmie pustą wartość), to zostanie utworzony plik tymczasowy (będzie go można odczytać za pomocą
funkcji prof_get).
formula
profilowana formuła. Formuła zostanie uruchomiona, a informacje z jej
uruchomienia zostaną zapisane w pliku określonym pierwszym argumentem funkcji.
Wynikiem funkcji jest wynik uruchomionej formuły. Nie można wywołać
funkcji profile, gdy aktualnie profiler jest włączony (w dowolny inny sposób) jak również nie można wywołać funkcji profile z formuły wywołanej już
funkcją profile.
40.2 Analiza wyników profilowania w obiekcie klasy DEBUG
W obiekcie klasy DEBUG istnieje możliwość analizy wyników profilera. Po wybraniu przycisku Analizy można wskazać plik z wynikami (znalezionymi
zgodnie z deklaracją ścieżek) i wybrać dla niego stosowną analizę. Z kolei po
199
200
Rozdział III. Architektura systemu
wybraniu przycisku Profiluj zostanie wykonana wpisana formuła, a po jej
zakończeniu będzie można wybrać jedną z analiz wykonanej formuły.
Dostępne są następujące analizy:
Zestawienie zbiorcze
w głównym oknie, będą dostępne profilowane elementy. W kolejnych
kolumnach znajdzie się informacja o sumie czasów wywołań z wliczaniem czasu wykonania elementów potomnych (Suma czasu) lub bez wliczania (Bez wywołań) oraz liczba wszystkich wywołań danego elementu.
W górnym okienku po prawej, będą analogiczne informacje, w rozbiciu
na miejsce wywołania. W dolnym zaś znajdą się informacje o elementach potomnych,
Drzewo wywołań
w wyniku będzie prezentowane drzewo, w którym w kolejnych węzłach
będą kolejne profilowane elementy. Po rozwinięciu węzła dostępne będą
elementy wywołane potomnie. W okienku, oprócz sumy czasów i liczby
wywołań, pokazana jest kolumna z minimalnym i maksymalnym czasem wywołania elementu,
z Podziałem na odstępy czasowe
w wyniku prezentowane będzie drzewo, w którym kolejne węzły będą
kolejnymi znacznikami czasowymi (w odstępach co 15 sekund). Po rozwinięciu węzła dostępne będą wywołania, jakie miały miejsce w zadanym odstępie czasowym,
pokrycie wywołań Formuł
w wyniku będzie lista formuł, wraz ze znacznikiem, czy dana formuła była przynajmniej raz wywołana (pole Użycie będzie miało wtedy
wartość 1, zaś w przeciwnym przypadku 0). Jeśli wyniki profilera były
tworzone przy dostępnej opcji włączenia debuggera, to w wyniku będą
wszystkie dostępne w programie formuły, zaś w przeciwnym przypadku
tylko z użytych zbiorów *.fml,
40.3 Rejestrowanie liczby wywołań procedur, metod, raportów i zapytań SQL
Istnieje możliwość rejestrowania liczby wywołań procedur poprzez funkcję
exec, metod zdefiniowanych klas, raportów wywołanych poprzez funkcję
rep_exec oraz zapytań SQL wywołanych poprzez sql_exec lub psql_exe. Wyniki zapisywane są w ustalonych odstępach czasowych oraz na zakończenie programu w plikach tekstowych. Operacja jest zdecydowanie szybsza,
III.40. Profiler
niż wydobywanie analogicznych danych z użyciem profilera. Pliki mają rozszerzenie .mfc, zaś nazwy składają się z pięciu części połączonych znakiem postaci:
system-username-data-początek-koniec
gdzie
system
nazwa uruchomionego systemu,
username
wynik funkcji username,
data
data rozpoczęcia działania programu w formacie rrrrmmdd,
początek
godzina rozpoczęcia rejestrowania kolejnej porcji wywołań zapisana w
formacie ggmmss,
koniec
godzina zakończenia rejestrowania kolejnej porcji wywołań lub godzina
zakończenia programu, zapisana w formacie ggmmss.
Rejestrowanie wywołań procedur można włączyć na dwa sposoby:
— dodając w wywołaniu jTerma opcję -ec min, gdzie min oznacza liczbę
minut, po upłynięciu będzie odpisany plik z kolejna porcją wywołań.
Podanie 0 jako liczby minut oznacza, że powstanie tylko jeden plik, na
zakończenie działania programu,
— umieszczając wpis w pliku *.cfg czytanym przez klienta:
exec_count = 1
Wartość liczbowa różna od 0 spowoduje włączenie rejestrowania wywołań. Jest to jedyny sposób dla wywołań poprzez ODBC lub MacroCGI.
Domyślna wartość 0 oznacza, że pliki *.mfc nie będą tworzone. Dodatkowo można określić liczbę minut, po upływie których będzie odpisywana kolejna porcja:
exec_count_timeout = liczba_minut
201
202
Rozdział III. Architektura systemu
Wartość przypisana do argumentu oznacza co ile minut mają być odpisywane porcje wywołań. Domyślna wartość 0 oznacza odpisanie tylko
jednego pliku na zakończenie działania programu.
Po zakończeniu działania programu, zgodnie z deklaracją ścieżek zostanie odpisany plik z liczbą wywołań procedur, metod, raportów i zapytań SQL. Plik
ma format CSV (pola oddzielane średnikiem) w kodowaniu Mazovia. W kolejnych wierszach będą zapisane kolejno wartości oddzielone średnikami:
1. rodzaj wywołania, dostępne wartości to:
F
wywołanie procedury,
M
wywołanie metody,
R
wywołanie sprawozdania,
S
wywołanie zapytania SQL,
2. nazwa formuły (wartość pierwszego argumentu funkcji exec). Jeśli
pierwsze pole w wierszu ma wartość różną od F, to pole jest puste,
3. nazwa pliku (wartość drugiego argumentu funkcji exec). Jeśli pierwsze
pole w wierszu ma wartość różną od F, to pole jest puste,
4. nazwa pliku sprawozdania (bez rozszerzenia). Jeśli pierwsze pole w wierszu ma wartość różną od R, to pole jest puste,
5. nazwa pliku z zapytaniem SQL (bez rozszerzenia). Jeśli pierwsze pole w
wierszu ma wartość różną od S, to pole jest puste,
6. nazwa metody, wraz z listą typów argumentów umieszczoną w nawiasach []. Poszczególne litery oznaczają typ:
V
typ pusty,
N
typ NUMBER,
S
typ STRING,
R
typ FORMULA,
D
typ DATE,
T
typ TIME,
Z
typ REFERENCE,
A
typ tablicowy,
III.40. Profiler
C
typ obiektowy, zdefiniowany poprzez wywołanie obj_decl,
B
typ TABLE,
F
typ FILE,
O
typ ODBC,
...
opcjonalne parametry dowolnych typów.
203
Jeśli pierwsze pole w wierszu ma wartość różną od M, to pole jest puste,
7. nazwa klasy, do której należy wywołana metoda. Jeśli pierwsze pole w
wierszu ma wartość różną od M, to pole jest puste,
8. liczba wywołań,
9. bezwzględna ścieżka do pliku (razem z rozszerzeniem) z wywoływaną formułą, skompilowanym sprawozdaniem lub zapytaniem SQL. Jeśli
pierwsze pole w wierszu ma wartość M, to pole jest puste,
10. wartość md5 dla uruchamianego pliku *.fml, *.sql. W przypadku
sprawozdania (plik *.rpt) zapisana będzie wartość źródła uruchamianego pliku *.rpt (czyli zbioru *.rpm wraz z włączonymi konstrukcją
INCLUDE: plikami). Wartość ta jest od bieżącej wersji zapisywana w
pliku *.rpt w czasie kompilacji.
W przypadku zmiany wartości md5 w pliku *.sql lub zapisanej w pliku
*.rpt od ostatniego wywołania, pojawi się nowy wpis w pliku wynikowym, z nową wartością md5. Dla plików *.fml (co może mieć miejsce
tylko po uruchomieniu programu z opcją -d — w przeciwnym przypadku przeczytane pliki są buforowane), odpisany zostanie plik z bieżącą
porcją danych, zaś wywołania z nową wartością md5 dla pliku *.fml
będą odpisywane w kolejnej porcji.
W wyniku nie ma listy wszystkich dostępnych procedur, raportów, metod i zapytań SQL — znajdują się tam tylko te, które były przynajmniej raz wywołane.
Przykładowo, poniższa formuła zbiera w tabeli tymczasowej listę procedur,
wraz z liczbą wywołań (suma z wszystkich plików *.mfc):
_FILE:= files(’*.mfc’);
_TABS:=tab_tmp(,’NAZWA’,’STRING[15]’,’Nazwa’,
’PLIK’,’STRING[8]’,’Plik’, ’LICZBA’,’INTEGER’,’Liczba’);
{? _FILE.first ||
{! |?
204
Rozdział III. Architektura systemu
_TABS.import(_FILE.FILENAME,1,,,,,
’NAZWA’,,2,,’PLIK’,,3,,’LICZBA’,,8,);
_FILE.next
!}
?};
_TAB:= sql(’
select NAZWA, PLIK, cast(sum(LICZBA) as integer_type) liczba
from :_a
where PLIK <> \’\’
group by NAZWA, PLIK
order by 3 desc
’, _TABS);
_TAB.win_sel(_TAB.mk_sel(,,1));
_TAB.select
41 Automatyczne aktualizacje
41.1 MacroUPDATE
Do pobierania i nanoszenia poprawek udostępnionych w systemie SPIS można posłużyć się programem MacroUPDATE (lub mupdate.exe dla wersji
windowsowej). Program ten umożliwia pobranie wszystkich dostępnych poprawek z serwera i zapisanie ich do pliku. Plik ten można wykorzystać przy
aktualizacji oprogramowania bez dostępu do Internetu. Podczas pobierania
poprawek, program łączy się z serwerem mupdate.macrologic.pl poprzez port 7000.
Program MacroUPDATE (mupdate.exe) wywołany bez argumentów pobiera wszystkie nie pobrane wcześniej poprawki oraz sprawdza, czy poprawki
były już zastosowane. Program musi być uruchomiony w katalogu, w którym
znajdują się programy wykonawcze, czyli w tym w którym się znajdzie po instalacji systemu. Pobrane poprawki będą zapisywane również w tym samym
katalogu. Dodatkowo tworzony będzie plik mupdate.sta, z listą zastosowanych już poprawek.
Po wywołaniu programu z opcją -u, brakujące poprawki będą automatycznie nanoszone. Uruchomienie z tą opcją wymaga, aby poprawiane programy
były zatrzymane.
Istnieje możliwość pobrania wszystkich poprawek, w celu przeniesienia
ich i zainstalowania na innym komputerze. Służy do tego opcja -g. Program
nie musi być wtedy uruchomiony w katalogu z programami wykonawczymi.
III.41. Automatyczne aktualizacje
W wyniku działania powinien zostać utworzony plik mupdate_11_20.src
(dla wersji 11.20) z wszystkimi dostępnymi poprawkami (zarówno dla systemu
Windows, jak i Linux). Po przeniesieniu go do katalogu z programami wykonawczymi i uruchomieniu programu do aktualizacji z opcją -l sprawdzi, które
z poprawek należy zainstalować. Podanie dodatkowo opcji -u spowoduje, że
poprawki będą nanoszone (należy przed wywołaniem się upewnić, że poprawiane programy nie są uruchomione).
Zatem przed uruchomieniem programu (serwera lub końcówki), można
wywołać
mupdate.exe -u
w celu ściągnięcia i zainstalowania wszystkich nowych poprawek. Jeśli komputer nie ma dostępu do Internetu, wtedy po wywołaniu:
mupdate.exe -g
na komputerze z dostępem do Internetu i przeniesieniu utworzonego pliku
mupdate_11_20.src do katalogu z programami, które mają być zaktualizowane, wystarczy wywołać:
mupdate.exe -l -u
(oczywiście przy zatrzymaniu poprawianych programów).
41.2 Automatyczna aktualizacja jTerma
Programa jTerm posiada właściwość automatycznego nanoszenie poprawek.
Wcześniej wszystkie poprawki muszą być ściągnięte na serwer aplikacji poprzez wywołanie MacroUPDATE. Po połączeniu jTerma z serwerem aplikacji, automatycznie pobierane będą pliki z instalacji, które na serwerze mają
inną zawartość niż używane przez jTerma. Po pobraniu zmienionych plików
jTerm zostanie ponownie uruchomiony, już w zaktualizowanej wersji.
W związku z powyższym, katalog oraz zbiory z katalogu z instalacją
jTerma muszą mieć prawo do zapisu. Dodatkowo w instalacji serwera aplikacji muszą się znaleźć wszystkie zbiory wykonawcze, zarówno z instalacji linuksowych, jak i windowsowych. Brak któregoś z plików uniemożliwi uruchomienie serwera aplikacji. Informacja o brakującym pliku zostanie odpisana w
pliku macro.log.
Jeśli serwer aplikacji został uruchomiony z opcją szyfrowania połączeń,
to plik certificate.der będzie kopiowany do katalogu cert zakładanego automatycznie (jeśli nie istnieje) w katalogu z runtime. Skopiowany plik
205
206
Rozdział III. Architektura systemu
będzie aktualizowany na końcówkach. Jeśli jTerm zostanie uruchomiony z
opcją szyfrowania połączenia, to podany przy wywołaniu plik z certyfikatem
zmieni zawartość na taką, jaką ma plik certificate.der z katalogu cert
umieszczonego w instalacji serwera. Plik certificate.der z katalogu, w
którym znajduje się plik server.pem można aktualizować również wtedy,
jeśli serwer aplikacji jest uruchomiony. Obowiązywać będzie po ponownym
uruchomieniu serwera aplikacji — nowa wersja zostanie wtedy przekopiowana do katalogu cert.
Dostępna jest opcja -ud przy uruchomieniu jTerma, która powoduje, że
jTerm nie będzie automatycznie aktualizowany. Dzięki temu można nadal
mieć instalację jTerma w trybie tylko do odczytu (np. na dysku sieciowym).
Wywołanie bez opcji -ud zakończyłoby się błędem. Należy wtedy pamiętać o
aktualizacji instalacji w inny sposób (np. poprzez wywołanie MacroUPDATE
przez użytkownika posiadającego dostęp do zapisu).
41.3 Aktualizacja sterownika ODBC
W celu aktualizacji sterownika ODBC należy wywołać w katalogu ze sterownikiem następujące programy:
w wersji windowsowej:
mclidown.exe server[:port]
mclisync.exe
w wersji linuksowej:
MacroCliDOWN server[:port]
MacroCliSYNC
gdzie
server
adres serwera z działającym serwerem aplikacji,
port
numer portu (domyślnie w przypadku pominięcia będzie to 5580).
W czasie aktualizacji sterownik nie może być wykorzystywany.
Aktualizacja dotyczy sterownika ODBC wykorzystującego serwer aplikacji. W przypadku grubego połączenia ODBC aktualizacja nie jest potrzebna,
gdyż sterownik powinien znajdować się w tym samym katalogu, co serwer bazy
danych.
III.42. Pobieranie kluczy licencyjnych z portalu Xpertis 24
207
42 Pobieranie kluczy licencyjnych z portalu Xpertis 24
Istnieje możliwość pobrania kluczy licencyjnych poprzez internet z poziomu
jTerma. Z tej możliwości będą mogli skorzystać tylko Ci Klienci, którzy mają
wystawiane klucze na portalu Xpertis 24.
W oknie wprowadzania kluczy z poziomu jTerma (Pomoc/O programie/Wprowadzenie
klucza) dostępny jest przycisk: Pobierz klucz z portalu Xpertis
24. Po jego wybraniu operator zostanie poproszony o podanie nazwy użytkownika i hasła do portalu Xpertis 24. W przypadku, gdy dany użytkownik będzie miał prawo do pobierania kluczy, program automatycznie wypełni wszystkie pola w okienku (pola: klucz, termin ważności i dane licencjobiorcy).
208
Rozdział III. Architektura systemu
Rozdział IV
Obsługa drukarek
Za przesłanie na drukarkę stworzonego w aplikacji wydruku odpowiada klient
serwera aplikacji. W wyświetlonym panelu drukowania istniej możliwość
zmiany domyślnych dla wybranego raportu parametrów drukowania m.in.:
wskazać drukarkę, na którą raport ma zostać skierowany, sterownik, marginesy, tryb wydruku (tekstowy lub graficzny). Parametry te są odpisywane w
pliku printer.ini.
Wydruk przygotowywany jest przez serwer aplikacji m.in. na podstawie
zbiorów prt (zawierających opisy sekwencji sterujących dla drukarki) oraz
informacji o rozmiarach strony przesłanych z drivera drukarki na której raport ma być wydrukowany, po czym przesyłany do klienta serwera aplikacji
i następnie przez niego interpretowany, dając możliwość podglądu wydruku i
wysłania na drukarkę.
Opisy drukarek są dostarczane wraz z każdym pakietem oprogramowania
MacroBASE. Dodatkowo w skład Środowiska Programistycznego wchodzi narzędzie do tworzenia opisu drukarki — translator MacroPRINTER.
1 Język opisu drukarki graficznej
Dla drukarki graficznej informacje o większości cech są pobierane z systemu
operacyjnego. Dla końcówki działającej pod systemem Linux wykorzystywany
jest system druku CUPS. Niektóre ustawienia drukarki są jednak zamieszczane w opisie. Najpierw tworzymy plik tekstowy (z końcówką .drs), który w
wyniku kompilacji programem printer.exe lub MacroPRINTER pod Linuxem tworzy zbiór z końcówką .prt, czytelny dla programu. Przykładowy,
skomentowany opis drukarki można uzyskać po wywołaniu printer.exe
-g. Tekst będzie wypisywany na standardowe wyjście programu. Format pliku źródłowego jest następujący:
209
210
Rozdział IV. Obsługa drukarek
[sekcja]
parametr = wartość
W danej sekcji może być definiowanych kilka parametrów. Dostępne sekcje to:
margin
tu możemy określić wartości dla parametrów:
left
lewy margines, domyślna wartość 0,
right
prawy margines, domyślna wartość 0,
top
górny margines, domyślna wartość 0,
bottom
dolny margines, domyślna wartość 0,
physical_margin
określa sposób wyliczania marginesów. Pominięcie tego parametru lub przypisanie wartości 0 oznacza, że obszar do drukowania,
będzie dodatkowo pomniejszony o obszar nie do drukowania ustawiony dla drukarki w systemie operacyjnym. Dla wartości 1 margines będzie równy większej z liczb — przypisanej wartości marginesu i odpowiadającemu mu wartości obszaru nie do drukowania,
i liczony od brzegu kartki,
output
tu określamy następujące parametry:
printon
czy przesłać wydruk na drukarkę
viewon
czy przesłać wydruk na ekran
copy
czy przesłać wydruk do kopii
nopanel
czy panel jest niedostępny
bottomline
czy wysyłany wiersz na drukarkę wyświetlać w linii statusu
IV.1. Język opisu drukarki graficznej
signatureoff
czy wyłączyć drukowanie sygnatury
graphic
czy dostępne są elementy graficzne
Przypisanie wartości 0 oznacza wyłączenie danej cechy, wartość różna
od zera oznacza, że dana cecha będzie dostępna,
paper
możemy określić domyślną orientację strony ustawiając odpowiednio
parametr landscape na 0 — pionowa, 1 — pozioma lub -1 — domyślne ustawienie ze sterownika systemowego drukarki,
character_set
w tej sekcji można ustawić parametr text_only mówiący czy wydruk
ma być prezentowany w trybie tylko tekst
fonts
określamy jeden parametr fonts, przypisując mu tekst składający się
z liter, które będą nazwami definiowanych później czcionek. Dla przykładu, poniższy fragment
[fonts]
fonts = abc
określa, że będziemy definiować trzy kroje, o nazwach a, b i c.
spaces
określamy jeden parametr Spaces, przypisując mu tekst składający się
z liter, które będą nazwami definiowanych później odstępów międzywierszowych. Dla przykładu, poniższy fragment
[spaces]
spaces = ABC
określa, że będziemy definiować trzy wysuwy, o nazwach A, B i C.
default
określamy dwa argumenty fontstd i spacestd. Przypisujemy im
jednoliterowe nazwy odpowiednio kroju i wysuwu, które będą używane jako domyślne. Domyślną wartością dla obu parametrów jest A.
211
212
Rozdział IV. Obsługa drukarek
font X
określamy czcionkę. Zamiast X podajemy dowolną jednoliterową nazwę
definiowanego kroju. W sekcji możemy zdefiniować poniższe parametry:
name
nazwa czcionki zainstalowanej w systemie. Nie można jednak wybrać czcionki proporcjonalnej. Dodatkowo, po przecinku, możemy
określić stronę kodowa czcionki ( 238 — Eastern Europe, 0 — Ansi, 255 — OEM, 8 – UTF-8, 1 — default ). Domyślną czcionką jest
Courier New, domyślną stroną kodową 238. Przypisywany argumentu nie może mieć więcej niż 30 znaków (dłuższe napisy będą
przycinane),
bold
przypisanie wartości 1 oznacza czcionkę pogrubioną. Domyślną
wartością jest 0, czyli brak pogrubienia,
underline
przypisanie wartości 1 oznacza czcionkę podkreśloną. Domyślną
wartością jest 0, czyli brak podkreślenia,
italic
przypisanie wartości 1 oznacza czcionkę pochyloną. Domyślną
wartością jest 0, czyli brak pochylenia,
unit
określa czy następny parametr wyrażony jest w ilości znaków na
stronę (0) czy w ilości znaków na cal (1). Domyślną wartością jest
0,
chars_per_inch
określa rozmiar czcionki. Przypisujemy liczbę znaków drukowanych na jednym calu lub na jednej stronie, w zależności od ustawienia parametru powyżej. Domyślną wartością jest 10,
space X
określamy odstęp międzywierszowy. Zamiast X podajemy dowolną jednoliterową nazwę definiowanego wysuwu. W sekcji możemy zdefiniować poniższe parametry:
name
nazwa wysuwu. Domyślną wartością jest Normal.
IV.2. Język opisu drukarki tekstowej
unit
określa czy następny parametr wyrażony jest w ilości linii na stronę
(0) czy w ilości linii na cal (1). Domyślną wartością jest 0,
lines_per_inch
określa wysokość wysuwu. Przypisujemy liczbę linii drukowanych
na jednym calu lub na jednej stronie, w zależności od ustawienia
parametru powyżej. Domyślną wartością jest 6,
2 Język opisu drukarki tekstowej
Oprócz drukowania w trybie graficznym, można drukować w trybie tekstowym. Opis drukarki należy skompilować programem printer.exe (dla systemu Windows) lub MacroPRINTER (dla systemu Linux) wywołanym z opcją
-t i nazwą pliku. W panelu drukarki po wybraniu przycisku Sterownik
pojawi się lista wszystkich skompilowanych opisów drukarek, umieszczonych
w katalogach wskazywanych przez plik z deklaracją ścieżek. Sterowniki tekstowe będą identyfikowane poprzez napis przypisany do driver. Graficzne
wyświetlane są jako Sterownik graficzny: z podaną nazwą pliku (bez
rozszerzenia .prt).
Tekst źródłowy opisu jest zbiorem tekstowym, w którym w kolejnych wierszach są definiowane cechy urządzenia. Wiersz
#include "file"
powoduje zastąpienie linii zawartością pliku file. Każde zdanie języka musi być zapisane w jednym wierszu. Znakiem kontynuacji wiersza jest średnik
(;). Tekst od średnika aż do końca wiersza jest ignorowany, a następna linia
jest traktowana jako dalszy ciąg konstrukcji języka. Linie zawierające tylko białe znaki są ignorowane. Każdy wiersz z opisem cechy rozpoczyna się od słowa
kluczowego. W zależności od rodzaju opisywanej właściwości może być wymagany dodatkowy opis. Umieszcza się go w tym samym wierszu po znaku
równości (=). Może on być:
— napisem (tekstem umieszczonym po znaku =),
— liczbą (całkowitą lub rzeczywistą z kropką dziesiętną w zapisie),
— sekwencją.
Sekwencja jest ciągiem znaków ASCII. Wszystkie znaki odstępu, tabulacji,
kontynuacji wiersza (średniki) oraz przecinki użyte przy opisie sekwencji traktowane są jako separatory. W skład sekwencji mogą wchodzić:
213
214
Rozdział IV. Obsługa drukarek
— ciągi znaków ujętych w apostrofy (np. ’[7m’). Znaki poprzedzone \
(backslash) są cytowane, zatem ’z\’apostrofem’ oznacza ciąg znaków z’apostrofem. Jedynym wyjątkiem jest cytowanie \E oznaczające znak Escape.
— liczby naturalne o wartościach mniejszych niż 256 (traktowane są jako
kody ASCII znaków), w zapisie dziesiętnym (rozpoczynające się cyfrą),
ósemkowym (rozpoczynające się od znaku o) lub szesnastkowym (rozpoczynające się od znaku x, wykorzystujące dodatkowo cyfry abcdef).
— ciągi znaków w apostrofach z zakresu ’@’..’_’ poprzedzone znakiem ^ np. ^’ABC’ (traktowane jako ciąg znaków o kodach ASCII
o 64 mniejszych niż podane — w powyższym przykładzie będzie to ciąg
trzech znaków o kodach 1, 2, 3),
— pojedyncze znaki z zakresu ’@’..’_’,
— pojedyncze znaki z zakresu ’@’..’_’ poprzedzone znakiem ^ np. ^[
(traktowane jako znak o kodzie ASCII o 64 mniejszym niż podany —
w przykładzie znak o kodzie 27, czyli Esc).
Opisy niektórych cech wymagają użycia argumentów. W tym przypadku
znak procent (%) zyskuje specjalne znaczenie. Modyfikuje znaczenie następujących po nim znaków:
— %p0, %p1,. . . ,%p9 oznaczają kolejne argumenty używane do opisu cechy. Umieszczenie ich w sekwencji powoduje umieszczenie ich wartości
na stosie,
— %d jest zamieniane w sekwencji na znak o wartości dziesiętnej równej
wartości umieszczonej na stosie. W wyniku tej operacji wartość ze stosu
jest zdejmowana,
— %s jest zamieniane na ciąg znaków o wartości znajdującej się na wierzchołku stosu. W wyniku operacji wartość ze stosu jest zdejmowana,
— %i zwiększa o jeden wartość argumentów %p0 i %p1,
— %% jest zamieniane w sekwencji na jeden znak %.
Poniżej podana jest lista możliwych do opisania cech.
IV.2. Język opisu drukarki tekstowej
2.1 driver
Napis, będący tekstem pojawiającym się w menu podczas wyboru opisu drukarki przez operatora.
2.2 bottomline
Wiersz wysyłany na drukarkę będzie wyświetlany w najniższej linii ekranu.
2.3 cr
Sekwencja sterująca drukarki powodująca powrót do początku wiersza
(np. ^M).
2.4 dataseton
Skierowanie wydruku do kopii dyskowej.
2.5 ffl
Sekwencja sterująca drukarki powodująca wysuw do nowej lewej strony
(np. ^L).
2.6 ffr
Sekwencja sterująca drukarki powodująca wysuw do nowej prawej strony
(np. ^L). Umieszczenie tej sekwencji w opisie oznacza druk dwustronny. Powoduje to, wydrukowanie dodatkowej pustej strony (z ewentualną stopką i nagłówkiem), jeśli wydrukowana została nieparzysta liczba stron.
2.7 firstempty
Wydruk będzie poprzedzony pustą stroną.
2.8 fontstd
Oznaczenie (litera) standardowej odmiany czcionki (jeśli nie wystąpiło zdanie
{FONT}, bądź jeżeli wystąpiło {FONT: @} we wzorcu wydruku, to zostanie
przyjęta ta odmiana).
215
216
Rozdział IV. Obsługa drukarek
2.9 height
Wysokość strony w calach (np. 11.67). Ma znaczenie tylko po wybraniu opcji
Rozmiar strony ze sterownika w panelu drukarki.
2.10 init
Sekwencja sterująca drukarki wysyłana przed każdym rozpoczęciem wydruku.
2.11 lpcmd
Polecenie drukowania dla systemu operacyjnego. Cecha ma znaczenie tylko w
wersji z końcówką pod systemem Linux, po zaznaczeniu Po zaznaczeniu opcji
Tryb tekstowy, Rozmiar strony ze sterownika oraz Używaj lpcmd. W przypisanej
sekwencji należy użyć przekazywanych argumentów:
%p0%d
będzie zastąpione żądaną liczbą kopii,
%p1%s
będzie zastąpione nazwą drukarki logicznej lub klasy drukarek, gdzie
ma być drukowane sprawozdanie. Jeśli nazwa drukarki ( cecha device
z opisu) będzie pusta lub nieokreślona, to %p1%s będzie miało wartość
ustawioną w panelu wydruku,
%p2%s
będzie zastąpione nazwą pliku przeznaczonego do wydruku
Jeśli nie zdefiniujemy własnego polecenia drukowania, zostanie domyślnie
przyjęte
lpcmd = ’lpr -P%p1%s -#%p0%d %p2%s 2>/dev/null 1>/dev/null’
2.12 nl
Sekwencja sterująca drukarki powodująca wysuw wiersza (np. ^J).
2.13 nopanel
Wyłączenie dostępu operatora do dialogu określającego parametry drukowania.
IV.2. Język opisu drukarki tekstowej
217
2.14 pagel
Sekwencja sterująca drukarki: wysyłana na początku lewej strony.
2.15 pager
Sekwencja sterująca drukarki wysyłana na początku prawej strony. Umieszczenie tej sekwencji w opisie oznacza druk dwustronny. Powoduje to, wydrukowanie dodatkowej pustej strony (z ewentualną stopką i nagłówkiem), jeśli
wydrukowana została nieparzysta liczba stron.
2.16 printon
Skierowanie wydruku na drukarkę.
2.17 spacestd
Oznaczenie (litera) wysuwu standardowego (jeśli nie wystąpiło zdanie {SPACE}
lub wystąpiło {SPACE: @} we wzorcu wydruku, to zostanie przyjęta ta odmiana).
2.18 translate
Sekwencja określająca tabelę translacji drukarki. Podana sekwencja powinna
zawierać 256 znaków. Pierwszy znak sekwencji określa znak, na jaki będzie
zamieniany znak o kodzie ASCII 0, drugi określa zamianę znaku o kodzie
ASCII 1 itd. Każdy znak wysyłany na drukarkę będzie zamieniany na przypisany mu znak w tabeli translacji.
2.19 viewon
Skierowanie wydruku na ekran.
2.20 width
Szerokość strony w calach (np. 13.8). Ma znaczenie tylko po wybraniu opcji
Rozmiar strony ze sterownika w panelu drukarki.
218
Rozdział IV. Obsługa drukarek
Właściwości pisma drukarki
Opis różni się od dotychczas omawianych — zajmuje po dwie linie w źródle
opisu.
2.21 font
Opis odmiany czcionki. Definicja przyjmuje następującą postać:
font letter font_name
#cpi
+beg_seq
-end_seq
gdzie:
— letter zastępujemy literą alfabetu łacińskiego. Litera ta, podana jako
argument konstrukcji {FONT: c}, będzie określać odmianę czcionki,
— font_name zastępujemy słownym opisem odmiany czcionki — podany tu tekst będzie dostępny jako pozycja menu podczas określania standardowej odmiany czcionki. Długość tekstu nie może przekraczać 20
znaków (dłuższe będą przycinane),
— cpi zastępujemy liczbą rzeczywistą, określającą liczbę drukowanych
znaków na cal,
— beg_seq zastępujemy sekwencją sterującą drukarki włączającą daną
odmianę czcionki,
— end_seq zastępujemy sekwencją sterującą drukarki wyłączającą daną
odmianę czcionki.
2.22 space
Opis odstępu międzywierszowego. Definicja przyjmuje następującą postać:
space letter space_name
#lpi
+beg_seq
-end_seq
gdzie:
— letter zastępujemy literą alfabetu łacińskiego. Litera ta, podana jako argument konstrukcji {SPACE: c}, będzie określać rodzaj odstępu
międzywierszowego,
IV.2. Język opisu drukarki tekstowej
— space_name zastępujemy słownym opisem odstępu międzywierszowego — podany tu tekst będzie dostępny jako pozycja menu podczas
określania standardowego wysuwu. Długość tekstu nie może przekraczać 20 znaków (dłuższe będą przycinane),
— lpi zastępujemy liczbą rzeczywistą, określającą liczbę drukowanych linii na cal,
— beg_seq zastępujemy sekwencją sterującą drukarki włączającą daną
odmianę odstępu międzywierszowego.
219
220
Rozdział IV. Obsługa drukarek
Rozdział V
Kopie bezpieczeństwa
1 Opis ogólny
Cel wykonywania kopii bezpieczeństwa danych dla każdego systemu bazodanowego jest oczywisty. Musimy mieć możliwość odtworzenia spójnych danych
po awarii systemu. Awaria taka może być spowodowana uszkodzeniem sprzętu, nagłym zanikiem zasilania jak również błędem użytkownika lub samego
programu. Kopie bezpieczeństwa danych powinny być wykonywane jak najczęściej i regularnie. Wtedy mamy pewność, że po awarii będziemy potrafili
odtworzyć dane z jak najbliższej przeszłości i ilość danych do uzupełnienia będzie mała.
2 Scenariusz wykonywania
Aby mieć pewność wykonania spójnej kopii bezpieczeństwa należy zagwarantować zatrzymanie serwera na czas wykonywania kopii bezpieczeństwa. Tak
więc prawidłowy scenariusz postępowania przy tworzeniu kopii zapasowej danych powinien mieć następujący przebieg:
1. zatrzymanie serwera aplikacji, o ile jest używany i uruchomiony na tym
samym komputerze, co serwer bazy danych. Po zatrzymaniu serwera aplikacji, automatycznie zostaną zamknięte uruchomione aplikacje
(procesy mblogics.exe dla Windows i MacroAppSERVER dla systemu Linux),
2. zatrzymanie maszyny bazy danych wraz z automatycznym wylogowaniem aktywnych użytkowników,
221
222
Rozdział V. Kopie bezpieczeństwa
3. wykonujemy kopię bezpieczeństwa danych. Sposób i użyte narzędzie jest
dowolnym wyborem administratora,
4. uruchamiany serwer bazy danych i serwer aplikacji. Możemy ponownie
rozpocząć pracę.
3 Wykorzystywane polecenia
3.1 System operacyjny Windows NT/2000/2003
— zatrzymanie serwera aplikacji (usługi MacroAppSERVER):
mblaunch.exe -ev -n
— uruchomienie serwera aplikacji (usługi MacroAppSERVER):
mblaunch.exe -bv -n
— zatrzymanie maszyny bazy danych (usługi MacroBASE):
W tym przypadku może pojawić się komunikat o ewentualnych zarejestrowanych użytkownikach. Aby wymusić zatrzymanie z automatycznym wylogowaniem użytkowników należy użyć opcji -f.
nserv32.exe -fv -n
dla wersji 32-bitowej, lub
nserv64.exe -fv -n
dla wersji 64-bitowej
— uruchomienie maszyny bazy danych (usługi MacroBASE):
nserv32.exe -bv -n
dla wersji 32-bitowej, lub
nserv32.exe -bv -n
dla wersji 64-bitowej
We wszystkich powyższych poleceniach opcja -n pozwala uniknąć wyświetlania komunikatów potwierdzających wykonanie zadania.
V.3. Wykorzystywane polecenia
3.2 System operacyjny Linux
— zatrzymanie maszyny bazy danych
MacroADMIN -stop
Użytkownicy zostaną automatycznie wyrejestrowani. Gdy pliki konfiguracyjne serwera znajdują się w innym niż MacroADMIN miejscu należy
wskazać je używając opcji -p. Polecenie ma wtedy postać:
MacroADMIN -ppath -stop
Jeśli uruchamiamy także serwer komunikacyjny, to jego także musimy
zatrzymać (z automatycznym odłączeniem wszystkich zarejestrowanych
użytkowników) za pomocą polecenia:
MacroCOMM -ppath -stop_f
— uruchomienie maszyny bazy danych Używając opcji -p należy wskazać
katalog z plikami konfiguracyjnymi serwera. Bez wskazania tej ścieżki
serwer nie zostanie uruchomiony. Gdy katalogiem roboczym serwera
ma być inny niż bieżący, należy wskazać go używając opcji -w.
Tak więc polecenie uruchomienia serwera bazy danych ma postać:
MacroSERVER -ppath -wpath
dla wersji 32-bitowej, lub
MacroSERVER64 -ppath -wpath
dla wersji 64-bitowej. Jeśli uruchamiamy także serwer komunikacyjny
to dodatkowo należy wykonać:
MacroCOMM -ppath
223
224
Rozdział V. Kopie bezpieczeństwa
4 Ograniczenia systemu
Stałe istotne dla pracy systemu MacroBASE:
— Liczba użytkowników — 1023 dla wersji 64-bitowej MacroSERVERA oraz
255 dla wersji 32-bitowej. Określa maksymalną liczbę wszystkich użytkowników jacy mogą zarejestrować się w serwerze bazy danych i jest
niezależna od ilości stanowisk określonej w licencji. Dotyczy ona użytkowników zarejestrowanych poprzez klientów serwera aplikacji oraz inne rodzaje dostępu jak
– mbasic — np. ODBC, przeglądarka Crystal Reports
– MacroCGI — praca przez przeglądarkę internetową
– sesje uruchomione pleceniem fork_hid
Ilości dostępów dla poszczególnych grup określa się w pliku macro.cfg
(sekcja: III.22),
— Maksymalny rozmiar zbioru z danymi (*.mdb) nie może przekraczać
28GB (zarówno w wersji 32, jak i 64 bitowej),
— Długość ścieżki na dysku — 259
Rozdział VI
Kody błędów
Poniżej przedstawiona została lista błędów, które mogą być zgłoszone podczas
pracy systemu:
001 Inny właściciel.
002 Brak takiego pliku lub katalogu.
Wystąpił problem z dostępem do pliku lub katalogu. Błąd może wynikać
z pomylonej nazwy lub braku uprawnień.
003 Brak takiego procesu.
004 Przerwane wywołanie systemowe.
005 Błąd wejścia-wyjścia.
006 Brak takiego urządzenia lub adresu.
007 Za długa linia polecenia.
008 Błąd w kodzie programu.
009 Błędny numer zbioru lub dostęp niezgodny z trybem otwarcia.
010 Brak procesu potomnego.
011 Zasób czasowo niedostępny (zablokowany).
012 Za mało pamięci.
013 Zabroniony dostęp.
014 Niedozwolony adres.
225
226
Rozdział VI. Kody błędów
015 Wymagane urządzenie blokowe.
016 Urządzenie już zajęte.
017 Plik już istnieje.
018 Skrzyżowane połączenie.
019 Brak takiego urządzenia.
020 Oczekiwana nazwa katalogu.
021 Niewłaściwy zapis do katalogu.
022 Niewłaściwy argument.
023 Brak miejsca na nowy plik.
024 Za dużo otwartych plików.
025 Wymagane urządzenie znakowe.
026 Program w użyciu.
027 Za długi plik.
Błąd może się pojawić, jeśli uruchamiany plik z formułami będzie miał
za duży rozmiar (ponad 64k bajtów).
028 Brak miejsca na urządzeniu.
029 Wskaźnik pliku użyty dla potoku.
030 System plików tylko do odczytu.
031 Za dużo dowiązań.
032 Przerwany potok.
033 Niedozwolony argument funkcji matematycznej.
034 Utrata dokładności wyniku.
035 Brak oczekiwanego typu komunikatu międzyprocesowego.
036 Identyfikator został usunięty.
037 Numer kanału spoza zakresu.
227
038 Niezsynchronizowany poziom 2.
039 Poziom 3 zatrzymany.
040 Zainicjowany poziom 3.
041 Numer połączenia spoza zakresu.
042 Niedołączony protokół sterownika.
043 Niedostępna struktura CSI.
044 Poziom 2 zatrzymany.
045 Zakleszczenie wykryte i usunięte.
Błąd taki może wystąpić również w przypadku, przekroczenia parametru systemu, mówiącego o maksymalnej liczbie zablokowanych plików.
W takim przypadku może pomóc zmniejszenie liczby plików otwieranych przez system, poprzez dodanie w pliku konfiguracyjnym (macro.cfg)
linii:
files = 20.
046 Brak wolnych blokad plików.
047 Zbiór jest zablokowany.
048 Element ścieżki nie jest katalogiem.
049 Błąd 49.
050 Błędny deskryptor wymiany.
051 Błędny deskryptor żądania.
052 Pełna tabela wymiany.
053 Przepełniona tabela węzłów.
054 Błędny kod żądania.
055 Niewłaściwe gniazdo.
056 Zakleszczenie blokady plików.
057 Błędny format pliku fontów.
228
Rozdział VI. Kody błędów
058 Błąd 58.
059 Błąd 59.
060 Urządzenie nie jest typu STREAMS.
061 Brak danych.
062 Przekroczony limit czasu.
063 Brak zasobów typu STREAMS.
064 Maszyna nie jest w sieci (RFS).
065 Pakiet programowy niezainstalowany.
066 Obiekt jest zdalny (RFS).
067 Połączenie uszkodzone (RFS).
068 Błąd rejestracji (RFS).
069 Błąd deinstalacji zasobów (RFS).
070 Błąd przy przesyłaniu komunikatu (RFS).
071 Błąd protokołu.
072 Błąd 72.
073 Błąd 73.
074 Urządzenie zdalne niedostępne (RFS).
075 Błąd 75.
076 Błąd 76.
077 Błąd formatu danych dla urządzenia typu STREAMS.
078 Za długa nazwa pliku.
079 Błąd 79.
080 Nazwa jest nieunikalna w sieci.
081 Deskryptor pliku w złym stanie.
229
082 Zmieniony adres zdalny.
083 Dzielona biblioteka niedostępna.
084 Dzielona biblioteka uszkodzona.
085 Uszkodzona sekcja .lib w programie.
086 Próba łączenia większej niż dozwolona liczby bibliotek dzielonych.
087 Wykonanie dzielonej biblioteki niedostępne.
088 Błąd 88.
089 Funkcja nie jest zaimplementowana.
135 System plików wymaga odbudowania.
136 Błąd 136.
137 Oczekiwana nazwa pliku.
138 Niedostępne.
139 Podano nazwę pliku.
140 Błąd wejścia-wyjścia na urządzeniu zdalnym.
141 Błąd 141.
142 Błąd 142.
143 Błąd 143.
144 Błąd 144.
145 Katalog nie jest pusty.
300 Komenda wykonana bez błędu.
301 Błędne wykonanie funkcji podstawowej.
302 Nie znaleziono pliku.
303 Błąd w nazwie pliku.
304 Za mało dostępnej pamięci.
230
Rozdział VI. Kody błędów
305 Za mało dostępnego miejsca na dysku.
306 Błędna wartość parametru.
Błąd może się pojawić przy otwieraniu systemu, jeśli indeks otwieranej
tabeli był wcześniej otwarty i nie ma identycznego schematu — jest inaczej zdefiniowany w systemie już działającym i otwieranym.
Wystąpienie błędu w funkcji OpenIndex może również oznaczać za
długi klucz indeksowy. Nie można definiować kluczy indeksowych o
długości większej niż 244.
307 Brak lub niewłaściwa nazwa użytkownika.
Błąd pojawia się po podaniu błędnej nazwy użytkownika przy rejestrowaniu się do systemu. Podana nazwa użytkownika musi się rozpoczynać
od litery.
308 Niezarejestrowany użytkownik (nieznany uchwyt).
309 Nieotwarta tablica (nieznany uchwyt).
Błąd zgłaszany jest w przypadku, gdy nastąpiło odwołanie do nieotwartej
tabeli. Może to dotyczyć tabel maskowanych, które nie zostały otwarte
w programie funkcją use.
310 Nieotwarty indeks (nieznany uchwyt).
311 Za dużo użytkowników.
Błąd pojawia się po próbie zarejestrowania do systemu, jeśli w serwerze
bazy danych jest zarejestrowany komplet użytkowników. W przypadku,
jeśli liczba użytkowników jest mniejsza od liczby stanowisk w serwerze, należy sprawdzić listę użytkowników serwera i usunąć użytkowników nie korzystających już systemu. Użytkownik może pozostać zarejestrowany w serwerze, jeśli zakończył pracę w sposób nieprawidłowy, np.
przez wyłączenie komputera.
312 Za dużo tablic.
Przekroczono maksymalną dopuszczalną liczbę akronimów tablic używanych w systemie.
313 Za dużo zbiorów indeksowych.
231
314 Wersja demonstracyjna — za dużo rekordów.
Przekroczono maksymalną dopuszczalną liczbę rekordów w jednej tabeli systemu.
315 Brak rekordu.
316 Odwołanie poza bieżący zakres.
Błąd taki pojawia się np. przy próbie dodania rekordu, który nie pasuje
do aktualnego ograniczenia (prefiksu) nałożonego na dziedzinę tabeli.
317 Rekord o już istniejącym kluczu.
Błąd pojawia się po próbie dołączenia rekordu o takim samym kluczu,
co w rekordzie już wcześniej dodanym. Jeśli indeks jest oznaczony jako
unikalny, to system nie dopuszcza do podwajania klucza.
318 Odwołanie do nieistniejącego rekordu.
W programie nastąpiło odwołanie poprzez złączenie do rekordu, który
nie istnieje w bazie danych (np. został usunięty lub błędnie zostało wypełnione pole złączeniowe). Jeśli błąd w danych zapisanych na dysku, to
należy je naprawić poprzez wywołanie programu MacroTRANSFER z
opcją -c.
319 Błędny dostęp.
320 Niedozwolona próba blokady.
321 Zablokowane zapisywanie i blokowanie na wyłączność.
Tabela jest zablokowana przez innego użytkownika.
322 Zablokowane zapisywanie i blokowanie.
Tabela jest zablokowana przez innego użytkownika.
323 Zablokowane odczytywanie, zapisywanie i blokowanie.
Tabela jest zablokowana przez innego użytkownika.
324 Rekord został już poprawiony.
Modyfikowany rekord został poprawiony przez innego użytkownika w
czasie pomiędzy odczytaniem wartości rekordu, a próbą zapisania po
zmodyfikowaniu. W takim przypadku program nie pozwala na wprowadzenie zmian.
232
Rozdział VI. Kody błędów
325 Rekord został usunięty.
Modyfikowany rekord został usunięty przez innego użytkownika w czasie pomiędzy odczytaniem wartości rekordu, a próbą zapisania po zmodyfikowaniu. W takim przypadku program nie pozwala na wprowadzenie zmian.
326 Brak integralności zbiorów indeksowych.
Program nie może odtworzyć w prawidłowy sposób zbiorów indeksowych. Wersja klient-serwer po zgłoszeniu błędu kończy działanie. Należy w takim przypadku uruchomić wersję jednostanowiskową i usunąć przyczynę błędu. W większości przypadków będzie to powtórzony
klucz w indeksie oznaczonym jako unikalny lub odwołanie do nieistniejącego rekordu dla indeksów z polami w złączeniu. W celu uzyskania
listy błędnych rekordów można się posłużyć metodami klasy NDXTEST
(opis pod hasłem _ndxtest).
327 Błąd wewnętrzny systemu.
328 Trwa tworzenie zbioru indeksowego.
329 Brak łączności z maszyną bazy danych.
Błąd pojawia się przy braku komunikacji pomiędzy klientem a serwerem. Przyczyną może być zatrzymanie serwera lub zła konfiguracja sieci.
330 Za dużo zablokowanych rekordów.
Przekroczona została maksymalna liczba zablokowanych jednocześnie
rekordów. Dla pojedynczej maski liczba blokad założona przez wszystkich użytkowników nie może przekraczać 33 milionów.
331 Brak zablokowanych rekordów.
332 Zablokowane zapisywanie bieżącego rekordu.
Rekord lub tabela jest zablokowana przez innego użytkownika.
333 Zablokowane odczytywanie i zapisywanie bieżącego rekordu.
Rekord lub tabela jest zablokowana przez innego użytkownika.
334 Rekord nie jest zablokowany.
335 Zablokowany dostęp do pola.
339 Niemożliwe zwiększenie liczby uchwytów plików aplikacji.
233
340 Nieznany błąd.
341 Licencja nie zezwala na uwierzytelnianie kartą SmartCard.
342 Licencja nie zezwala na połączenie z wykorzystaniem protokołu SSL.
344 Transakcja już rozpoczęta.
Błąd zgłaszany jest przy próbie rozpoczęcia transakcji przed zakończeniem wcześniej rozpoczętej.
345 Tabele złączeniowe umieszczone na różnych serwerach
348 Indeks i tabela umieszczone na różnych serwerach
349 Nieokreślona pozycja rekordu.
350 Serwer nie może załadować pliku typu ’.dll’. Sprawdź plik server.log
351 Brak miejsca w pamięci stronicowanej.
352 Błąd wewnętrzny systemu (deskryptor pamięci).
353 Błąd wewnętrzny systemu (błędny element pamięci).
354 Błąd wewnętrzny systemu (adresowanie pamięci).
355 Błąd wewnętrzny systemu (nieunikalny zapis).
356 Błąd obsługi pamięci stronicowanej.
357 Za długi bufor lub zbyt duża liczba pól tabeli.
358 Zablokowane zapisywanie i blokowanie bieżącego rekordu.
359 Szyfrowanie zbioru — niezgodność z definicją.
360 Rekord wykorzystywany w innych tabelach nie może być usunięty.
362 Niezgodne wersje plików tabeli i słownika.
Sygnatura otwartego pliku słownika jest inna niż sygnatura zapisana w
nagłówku tabeli. Oznacza to, że złączenia były przypisywane do innego
pliku słownika o takiej samej nazwie.
234
Rozdział VI. Kody błędów
363 Niedozwolona modyfikacja
W tabelach z polem typu REFERENCE nie można zmieniać wartości
pola REFERENCE, dodawać lub usuwać rekordów z niezerową wartością pola REFERENCE.
364 Błędna wartość licznika.
Została wykryta nieprawidłowa wartość licznika. Po pojawianiu się błędu należy koniecznie wywołać transfer naprawczy liczników (opcja -c).
365 Niewłaściwa maska słownika.
Przy odczytywaniu wartości pola w złączeniu bieżąca maska słownika
musi odpowiadać masce zapisanej w polu złączeniowym. Należy o to
zadbać poprzez odpowiednie wywołanie metody use.
366 Powtórzona sygnatura pliku
Serwer nie dopuszcza do otwarcia dwóch plików o takiej samej sygnaturze. Sytuacja taka może się pojawić po uruchomieniu drugiej kopii systemu użytkowego. W takiej sytuacji należy wywołać transfer naprawczy liczników (opcja -c) dla jednego z systemów. Po takiej operacji, będą
nadane nowe sygnatury dla wszystkich przetwarzanych plików.
368 Użytkownik udzielający licencji bieżącemu został wyrejestrowany z serwera.
Błąd może wystąpić w programie uruchomionym poprzez wywołanie
funkcji fork_hid(). Ma to miejsce wtedy, gdy zakończy działanie program, z którego został uruchomiany.
369 Tabela otwarta przez inną aplikacje lub niepoprawnie zamknięta.
370 Przekroczona dopuszczalna liczba kontekstów.
Przekroczono maksymalną liczbę odłożonych i nie pobranych kontekstów dla tabeli — parametr max_cnt_psh w pliku konfiguracyjnym.
371 Niepusty stos kontekstów.
Błąd zgłaszany tylko przy uruchomieniu z opcją -d. Oznacza że pozostały niepobrane konteksty dla danej tabeli.
374 Brak praw odczytu pola.
375 Brak praw odczytu tabeli.
235
376 Niepoprawna długość pola napisowego.
377 Wykryty cykl w polu typu TREE_REF.
378 Wartość w polu typu TREE_REF wskazuje na nieistniejący rekord.
379 Zmiana klucza niedozwolona.
Zmiana pola występującego w kluczu indeksowym przed polem typu
TREE_REF jest niedozwolona.
380 Naruszenie struktury hierarchicznej.
381 Operacja na drzewie z indeksem unikatowym niemożliwa.
382 Niedozwolona ścieżka sieciowa.
Zbiory z danymi (pliki *.mdb) nie mogą być umieszczane na dyskach
sieciowych.
383 Błąd obsługi blokowania rekordów.
384 Licznik rekordu osiągnął maksymalną wartość.
400 Nieprawidłowa nazwa użytkownika.
401 Niezarejestrowany użytkownik lub nieprawidłowe hasło.
401 Niezarejestrowany użytkownik AD lub nieprawidłowe hasło.
401 Konto użytkownika zostało zablokowane z powodu przekroczenia dopuszczalnej liczby błędnych logowań.
402 Nieudane uwierzytelnienie za pomocą certyfikatu z karty SmartCard.
403 Nie znaleziono klucza protekcji.
404 Rekord wykorzystywany w innych tabelach.
Błąd pojawia się przy próbie usunięcia rekordu, do którego są odwołania z innych tabel. Przed usunięciem rekordu należy usunąć wszystkie
odwołania do niego.
405 Nie znaleziono zbioru.
406 Nie znaleziono zasobu.
406 Błędne dane w pliku .ini.
236
Rozdział VI. Kody błędów
407 Niewłaściwy typ udostępniony przez formułę.
408 Metoda niedostępna dla zmiennej strukturalnej.
409 Metoda niedostępna podczas transakcji.
409 Funkcja niedostępna podczas transakcji.
410 Niedopuszczalne znaki w nazwie.
410 Niedopuszczalne znaki w nazwie pliku.
411 Nieprawidłowy format zbioru.
Otwierany zbiór ma strukturę niezgodną ze zdefiniowaną. Błąd może
pojawić się na skutek integrowania systemów, w których jest inna definicja tej samej tabeli. Przyczyną może być wcześniejsza awaria systemu,
w wyniku której system operacyjny nieprawidłowo zapisał zbiory (np.
dokleił fragment innego pliku do zbioru z danymi).
412 Nie znaleziono rekordu zgodnego ze wzorcem.
413 Filtr włączony, redagowanie niemożliwe.
414 Brak akcji możliwych do wykonania.
415 Nie wypełnione pole.
416 Nie wypełniony wzorzec.
We wzorcu nie wypełniono żadnego pola pochodzącego z bieżącej tabeli.
Błąd jest zgłaszany, jeśli wypełnimy jedynie pola zmiennej lub z innej
tabeli.
417 Błąd podczas importu danych.
Błąd jest zgłaszany podczas importu danych, jeżeli dodanie rekordu nie
było możliwe (np. podwojenie unikalnego klucza, brak rekordu w słowniku itp).
418 Błąd podczas eksportu danych.
Błąd jest zgłaszany w przypadku, gdy nie udało się zapisać rekordu do
pliku tekstowego (np. separator pól występuje w treści pola).
418 Błąd podczas eksportowania danych. Przekroczenie bufora danych.
419 Niedozwolone rekurencyjne wywołanie funkcji.
237
420 Metoda niedostępna przed otwarciem tabeli.
421 Brak kontekstu do odtworzenia.
422 Nazwa zbioru niezgodna z maską.
423 Błędny format importowanych danych.
424 Za długi rekord w importowanych danych.
425 Nieotwarta połączona tabela.
426 Niedozwolone redagowanie pól.
427 Powrót do nieredagowalnego pola.
428 Akcja niedostępna dla zablokowanego rekordu.
429 Zbyt długi klucz sortowania.
430 Błąd wewnętrzny.
430 Wywołanie funkcji dozwolone tylko w oknie redagowania umiesczonym
w oknie grupowym.
430 Wywołanie funkcji niedozwolone w trakcie redagowania.
431 Akronim pola nie został znaleziony.
432 Indeks nie został znaleziony.
433 Indeks nie jest tymczasowy.
434 Nie zdefiniowano żadnego użytkownika.
435 Za dużo rekordów w liście.
436 Brak zasobów systemu MacroBASE.
437 Nieprawidłowy akronim.
437 Nieprawidłowy identyfikator okienka.
437 Powtórzony identyfikator okienka w grupie.
438 Akronim jest już zadeklarowany.
238
Rozdział VI. Kody błędów
439 Przekroczona liczba zadeklarowana w macro.cfg.
440 Niewłaściwa nazwa typu pola.
441 Wymagany akronim tabeli tymczasowej.
442 Nieprawidłowa długość pola.
443 Przekroczona maksymalna długość nazwy.
444 Utworzenie indeksu tymczasowego nie jest możliwe.
445 Za dużo indeksów tymczasowych.
Błąd jest zgłaszany przy próbie przekroczenia maksymalnej dopuszczalnej liczby rekordów dla tabeli. W celu uniknięcia błędu należy dbać o
usuwanie niewykorzystywanych indeksów tymczasowych.
446 Niewłaściwa maska tabeli.
Błąd pojawia się przy próbie podczytania wartości w złączeniu w przypadku, gdy złączenie jest do innej maski niż obecnie ustawiona. Należy
zadbać o właściwą maskę słownika poprzez wywołanie metody use.
447 Niewłaściwy typ pola.
448 Brak pól w oknie.
449 Brak pola złączeniowego w indeksie.
450 Brak formuły na wartość początkową pola indeksu.
451 Błąd przy tworzeniu menu.
452 Nieistniejąca akcja.
453 Akcja niedostępna dla pustej dziedziny.
454 Akcja o podanym kluczu już istnieje.
455 Niedopuszczalna wartość parametru.
455 Niedopuszczalna wartość argumentu. Błąd przy tworzeniu tymczasowego okienka redagowania.
455 Nieprawidłowe położenie okienka. Błąd przy tworzeniu tymczasowego
okienka redagowania.
239
456 Metoda niedostępna dla otwartego okna.
456 Funkcja niedostępna przy wyświetlonym oknie słownika DEFINE.
456 Metoda niedostępna dla otwartego okna.
457 Przekroczony dopuszczalny rozmiar okna.
458 Przekroczony zakres tablicy
459 Błąd w wyrażeniu SQL.
460 Brak formuły w pliku ’macro.use’.
Dla każdego pola złączeniowego z reprezentantem wchodzącego do indeksu musi być zdefiniowana formuła w pliku macro.use wskazująca
maskę słownika.
461 Nazwa pliku słownika niezgodna z maską.
462 Próba usunięcia ostatniego indeksu.
463 Brak pola w złączeniu.
464 Metoda niedostępna dla okna zdefiniowanego w generatorze aplikacji.
464 Nieprawidłowy identyfikator panelu.
464 Panel o podanym identyfikatorze już istnieje.
464 Przekroczona maksymalna liczba paneli.
Okno można podzielić maksymalnie na 6 paneli.
464 Nieprawidłowe położenie linii podziału. Utworzenie panelu niemożliwe.
464 Metoda niedostępna przy pustym panelu.
464 Metoda niedostępna w oknie z podziałem.
464 Niepusty identyfikator panelu w oknie bez paneli.
464 Próba ukrycia wszystkich okienek w oknie grupowym.
464 Metoda niedostępna w panelu bez zakładki.
464 Metoda niedostępna przy pustym panelu w zakładce.
240
Rozdział VI. Kody błędów
464 Dodanie zakładki przy pustym panelu w zakładce niedozwolone.
464 Brak identyfikatora panelu.
464 Nieprawidłowy numer zakładki.
465 Przekroczenie maksymalnej dopuszczalnej liczby.
466 Akcja dostępna tylko w menu pierwszego poziomu.
467 Przekroczona liczba poziomów menu.
468 Za długa etykieta pola.
469 Błędne dowiązanie do funkcji.
470 Niedozwolone znaki w nazwie systemu.
Długość nazwy systemu nie może przekraczać 8 znaków.
471 Błąd wykonania zewnętrznego polecenia.
472 Niedozwolone znaki w nazwie pliku (wyszukiwanie zgodne z *.pth).
W nazwie pliku szukanego na podstawie deklaracji ścieżek nie mogą wystąpić metaznaki.
472 Niedozwolone znaki w nazwie pliku.
472 Niedozwolone znaki w ścieżce do pliku.
472 Niedozwolone znaki zwracane przez kontrolkę.
472 Zbyt długi text zwracany przez kontrolkę.
473 Zbyt dużo warunków dla jednego pola
474 Export (import) pola podwójnie złączonego jest zabroniony
475 Funkcja zaimplementowana wyłącznie w module MacroCGI.
476 Nieznany typ ikony do wyświetlenia.
477 Błąd przy tworzeniu warunku funkcji ext_tab.
478 Błąd w transakcji. Program zostanie zakończony.
241
479 Niedozwolone odwołanie do katalogu (wyszukiwanie zgodne z *.pth).
Nazwa pliku wyszukiwanego zgodnie z deklaracja ścieżek nie może być
poprzedzona nazwą katalogu.
480 Za długie polecenie.
481 Okienko zawiera elementy z nieistniejącej tabeli.
482 Pola tabeli użyte w aktywnym okienku. Tabeli nie można usunąć.
483 Długość parametru dla ext_tab przekracza 255 znaków.
484 Błąd przy tworzeniu warunku funkcji find_tab.
484 Błąd przy tworzeniu warunku funkcji find_tab. Przekroczony rozmiar bufora.
485 Długość parametru dla find_tab przekracza 255 znaków.
486 Nieznana wersja pliku definicji systemu.
487 Nieprawidłowy numer zakładki.
488 Błąd procedury wbudowanej.
489 Błąd obsługi grup rekordów.
490 Zabronione redagowanie pola.
491 Brak pola w okienku.
492 Akcja nie może być grupowa
492 Akcja w oknie z kontrolką nie może być grupowa.
492 Akcja w oknie redagowania nie może być grupowa.
493 Akcja nie jest grupowa, a określono formułę dla grupy
494 Za dużo pól w okienku
494 Za dużo przycisków przypisanych do pola okienka.
Dla jednego pola można dodać maksymalnie 8 przycisków.
495 Akcja dla pustej dziedziny nie może być grupowa.
242
Rozdział VI. Kody błędów
496 Akcja grupowa niedostępna podczas transakcji.
497 Definicja wygenerowana pośrednią wersją generatora aplikacji.
498 Nieprawidłowe położenie okienka.
498 Okienko z kontrolkami nie może być pierwsze w grupie.
498 Pierwszym oknem w oknie słownika nie jest okienko wertowania tabeli
słownika.
498 Pierwszym oknem w okna grupowego w raporcie nie jest okienko wertowania.
499 Okno z nieprawidłowej tabeli.
500 Bez błędu.
501 Oczekiwany dwukropek.
502 Nieprawidłowa liczba.
503 Oczekiwany symbol ’?}’.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
504 Oczekiwany symbol ’!}’.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
505 Oczekiwany nawias ’)’.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
506 Nierozpoznany symbol.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
507 Nieoczekiwany symbol.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
243
508 Oczekiwany symbol ’——’.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
509 Niespodziewany koniec formuły.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
510 Niespodziewany znak.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
511 Wymagana zmienna.
512 Oczekiwany symbol ’—!’.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
513 Oczekiwany symbol ’|}’.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
514 Nieprawidłowa nazwa zmiennej.
Błąd składniowy języka FORMULA+. Należy poprawić wskazaną formułę.
515 Nieprawidłowa zmienna.
516 Niedozwolone wywołanie.
517 Błąd w procedurze.
518 Niedozwolony dostęp.
519 Niezdefiniowana wartość.
520 Wynik musi być liczbą.
521 Nieprawidłowa data.
522 Niedozwolona zmiana typu.
523 Próba dostępu do pliku niezgodnie z trybem otwarcia.
244
Rozdział VI. Kody błędów
524 Błąd w dostępie do pliku.
526 Zbyt długa stała tekstowa.
527 Brak miejsc na zmienne.
Użyto więcej zmiennych niż maksymalna dopuszczalna liczba zmiennych w programie. Dostępnych jest 26 zmiennych lokalnych oraz tyle
zmiennych globalnych, na ile wskazuje parametr var_cnt w pliku konfiguracyjnym (opis Konfiguracja).
528 Przekroczono głębokość rekurencji.
Przekroczono maksymalną dopuszczalną liczbę rekurencyjnych wywołań funkcji. Jeśli do zakończenia funkcji potrzeba większej liczby wywołań rekurencyjnych należy zwiększyć parametr formula_recursion
w pliku konfiguracyjnym (opis III.22).
529 Liczba poza zakresem.
530 Za długi tekst.
534 Operator w niedopuszczalnym kontekście.
535 Operator niezdefiniowany.
Błąd taki pojawia się również po próbie podstawienia wartości na zmienną typu słownikowego. W takim przypadku niezdefiniowanym operatorem jest operator podstawienia. W celu podstawienia nowej wartości na
zmienną słownikową należy ją najpierw usunąć funkcją obj_del.
539 Wymagana współrzędna numeryczna.
540 Brak współrzędnej.
541 Współrzędna poza zakresem.
542 Błędny typ współrzędnej.
543 Niespodziewana współrzędna.
544 Brak argumentu.
545 Argument poza zakresem.
546 Błędny typ argumentu.
245
547 Niespodziewany argument.
548 Nieprawidłowa lista argumentów.
549 Za dużo otwartych plików.
553 Dzielenie przez zero.
554 Nadmiar arytmetyczny.
555 Niedomiar arytmetyczny.
556 Błąd operacji na liczbie zmiennoprzecinkowej.
557 Argument spoza dziedziny funkcji.
558 Argument spoza dziedziny funkcji.
559 Częściowa utrata dokładności arytmetycznej.
560 Całkowita utrata dokładności arytmetycznej.
562 Niemożliwe otwarcie biblioteki.
563 Błąd w bibliotece.
564 Brak formuły w bibliotece.
565 Nazwa formuły za długa. Maksymalnie 15 znaków.
567 Za dużo zadeklarowanych klas lub klasa o tej nazwie występuje w systemie.
Błąd może się pojawić w dwóch różnych przypadkach:
1. Powtórzenie deklaracji o takiej samej nazwie klasy. Program nie
dopuszcza ponownej definicji tej samej klasy.
2. Przekroczono maksymalną liczbę deklaracji klas. Można zwiększyć liczbę dostępnych klas poprzez zwiększenie parametru class_cnt w pliku konfiguracyjnym (opis III.22).
568 Za dużo zadeklarowanych słowników.
Przekroczono maksymalną liczbę do powołanych obiektów funkcją
obj_new. Należy usuwać nieużywane obiekty lub zwiększyć ograniczenie poprzez ustawienie parametru obj_cnt w pliku konfiguracyjnym
(opis III.22).
246
Rozdział VI. Kody błędów
569 Błąd wykonania funkcji sys_exec.
570 Formuła przerwana.
571 Nieznany rodzaj konwersji znaków.
572 Za dużo parametrów funkcji (max. 16384)
573 Zabronione wywołanie return.
574 Nieprawidłowy akronim pola.
575 Podany parametr jest zbyt długi.
576 Skończyło się miejsce na stosie.
577 Błędny format danych w standardzie UTF8.
578 Niepoprawny typ zwracany przez formułę konwersji.
579 Znak zakodowany w UTF8 nie posiada odpowiednika w MAZOVI.
580 Powtórzona nazwa pola lub metody.
581 Odwołanie do nieistniejącej metody wirtualnej.
582 Za dużo zadeklarowanych klas.
583 Za dużo parametrów formuły. Maksymalnie 26.
584 Brak praw dostępu.
585 Nieprawidłowa nazwa metody.
586 Nieprawidłowa nazwa pola.
600 Bez błędu.
601 Wynik formuły nie jest liczbą.
602 Za mała szerokość strony.
603 Spodziewane {ENTIRE-}.
604 Za długi fragment ENTIRE.
605 Nierozpoznawalne znaki w nazwie.
247
606 Nieprawidłowy nagłówek {HEADER}.
607 Nieprawidłowa stopka {FOOTER}. Zaleca się zmianę orientacji papieru,
zmniejszenie marginesów i/lub czcionki.
Wydruk stopki nie mieści się w zarezerwowanej na nią miejscu. Błąd niekiedy można poprawić poprzez zmianę rozmiaru strony (poszerzenie)
lub zmniejszenie rozmiaru czcionki. W takim przypadku, można unikną ewentualnego załamywania wierszy, powodującego, że stopka zajmuje więcej wierszy.
608 Nieprawidłowy nagłówek {HEADERRIGHT}.
609 Nieprawidłowy nagłówek {HEADERLEFT}.
610 Nieprawidłowa stopka {FOOTERRIGHT}.
Wydruk stopki nie mieści się w zarezerwowanej na nią miejscu. Błąd niekiedy można poprawić poprzez zmianę rozmiaru strony (poszerzenie)
lub zmniejszenie rozmiaru czcionki. W takim przypadku, można unikną ewentualnego załamywania wierszy, powodującego, że stopka zajmuje więcej wierszy.
611 Nieprawidłowa stopka {FOOTERLEFT}.
Wydruk stopki nie mieści się w zarezerwowanej na nią miejscu. Błąd niekiedy można poprawić poprzez zmianę rozmiaru strony (poszerzenie)
lub zmniejszenie rozmiaru czcionki. W takim przypadku, można unikną ewentualnego załamywania wierszy, powodującego, że stopka zajmuje więcej wierszy.
612 Spodziewany {DIRECT}.
613 Spodziewany {DIRECT-}.
614 Fragment DIRECT nie mieści się na stronie.
615 Za dużo zdefiniowanych makrodefinicji.
616 Niezdefiniowana makrodefinicja.
617 Powtórzona nazwa makrodefinicji.
618 Za mało pamięci dynamicznej.
619 Za mały bufor dla DIRECT.
248
Rozdział VI. Kody błędów
620 Blok DIRECT zawarty w bloku ENTIRE.
621 Blok ENTIRE zawarty w bloku DIRECT.
622 Nieprawidłowa wersja kodu pośredniego. Raport wymaga kompilacji.
Uruchamiane sprawozdanie zawiera złą skompilowaną wersję (plik .rpt).
Może pochodzić z innego systemu operacyjnego lub starszej wersji programu. Należy ponownie skompilować uruchamiane sprawozdanie.
623 Nieznany symbol struktury.
624 Błąd w strukturze TOTAL.
625 Błąd otwarcia pliku.
626 Błąd czytania pliku.
627 Błędna nazwa tablicy.
628 Błędna nazwa indeksu.
629 Sprawozdanie przerwane przez użytkownika.
630 Funkcja line() nie jest dostępna.
Funkcja dostępna jest tylko we fragmencie {DIRECT}.
631 Funkcja page() nie jest dostępna.
Funkcja dostępna jest tylko we fragmencie {DIRECT}.
632 Wynik formuły nie jest napisem.
633 Błąd podsystemu drukującego.
634 Przekroczono głębokość rekurencji.
635 Nieprawidłowe parametry polecenia {FONT}
636 Nieprawidłowe parametry polecenia {COLOR}
637 Nieprawidłowe parametry polecenia {BITMAP}
638 Nieprawidłowe parametry polecenia {DEFINEFONT}
639 Nieprawidłowe parametry polecenia {DEFINECONST}
249
640 Nieprawidłowe określenie konstruktora R:G:B.
641 Nieprawidłowa liczba argumentów.
642 Zbyt długa nazwa pliku graficznego
643 Brak nazwy pliku graficznego
644 Zbyt długa nazwa identyfikująca ciąg {DEFINECONST}
645 Brak nazwy identyfikującej ciąg {DEFINECONST}
646 Brak określenia ciągu {DEFINECONST}
647 Określenie ciągu {DEFINECONST} zbyt długie
648 Błędna liczba argumentów {DEFINEFONT}
649 Brak nazwy określającej zasób {DEFINEFONT}
650 Jeden z wymiarów obrazka musi być większy od zera.
651 Funkcja rep_ver() nie jest dostępna.
652 Funkcja rep_name() nie jest dostępna.
653 Za długa sygnatura {SIGNATURE}.
654 Zbyt dużo poleceń i znaków w jednej linii
655 Wykonanie sekwencji MAXPAGE nie powiodło się.
656 Funkcja lineleft() nie jest dostępna.
Funkcja lineleft jest dostępna jedynie przy opracowywaniu sprawozdania, poza frazą {DIRECT}
657 konstrukcja: {REP}
We fragmencie sprawozdania przekazanym w konstrukcji {REP} wystąpił błąd składniowy.
658 Niedozwolone użycie w konstrukcji {REP}.
659 Funkcja charleft() nie jest dostępna.
660 Niedozwolone użycie w konstrukcji {PAGE}.
250
Rozdział VI. Kody błędów
661 Nieprawidłowy format pliku graficznego.
662 Nieprawidłowa sygnatura {SIGNATURE}.
663 Nieprawidłowa wysokość czcionki.
664 Nieprawidłowa nazwa czcionki.
665 Rozmiary bitmapy nie mogą być ujemne.
666 Bitmapa nie mieści się na stronie.
667 MAXPAGE: Liczba stron zawiera więcej cyfr niż przewiduje format.
668 Nieprawidłowy odstęp międzyznakowy.
669 Nieprawidłowa strona kodowa.
670 Fraza SELECT — nieprawidłowe menu dla okienka wertowania.
671 Niezakończona transakcja rozpoczęta w raporcie.
672 Metoda niedostępna dla zmiennej strukturalnej.
673 Wybrana drukarka jest niedostępna.
674 Konstrukcja użyta w złym kontekście
675 Za dużo znaków w wierszu — wydruk nie mieści się na stronie.
676 Wynik formuły nie jest poprawnym złączeniem do tabeli BLOB. Wymagane złączenie do tabeli BLOB lub obiekt FILE.
677 Nieprawidłowe parametry polecenia {IMAGE}
678 Funkcja img_size() jest niedostępna poza sprawozdaniem.
679 Przynajmniej jeden z marginesów jest zbyt duży.
680 Błędny numer obrazka.
681 Spodziewany otwarty obiekt typu FILE.
682 Bład w kodowaniu napisu.
683 Niespodziewany znak w sprawozdaniu.
251
684 Brak uprawnień do wykonania sprawozdania.
685 Nazwa pliku sprawozdania została zmieniona.
686 Fraza SELECT - nieprawidłowy identyfikator przycisku dla okienka wertowania.
687 Wymagana nazwa pliku, złączenie do tabeli BLOB lub obiekt FILE.
688 Brak nazwy czcionki.
689 Nieprawidłowe określenie atrybutów czcionki.
690 Spodziewany GRAPHIC-.
691 Niedozwolone wyprowadzanie tekstu w konstrukcji GRAPHIC.
692 Niedozwolone użycie w konstrukcji GRAPHIC.
693 Niepoprawne określenie rozmiaru papieru.
694 Wymagane określenie rozmiaru papieru w zdaniu PRINTER.
695 Wymagane włączenie trybu graficznego w zdaniu PRINTER.
696 Niepoprawne określenie marginesów w zdaniu PRINTER.
701 Błąd w strukturze zbioru.
701 Błąd w strukturze zbioru. Niepoprawne znaki w kodowaniu UTF-8.
702 Za duży zbiór.
703 Błąd podczas dostępu do katalogu.
703 Błąd podczas dostępu do katalogu tymczasowego (MacroAppSERVER).
704 Błąd podczas pisania do zbioru.
705 Błąd podczas czytania ze zbioru.
706 Nieprawidłowe prawa dostępu do zbioru.
707 Błąd podczas otwierania zbioru.
708 Błędny parametr funkcji obsługi urządzeń zewnętrznych.
252
Rozdział VI. Kody błędów
709 Błąd podczas tworzenia katalogu.
710 Błąd podczas zapisu do zbioru. Nieprawidłowe prawa dostępu.
711 Błąd podczas odczytu zbioru. Nieprawidłowe prawa dostępu.
712 Błąd podczas nadpisywania zbioru. Plik został już otwarty.
713 Błąd podczas zapisu do zbioru. Brak miejsca na dysku.
714 Błąd podczas tworzenia katalogu. Brak miejsca na dysku.
715 Za długa nazwa pliku.
715 Za długa ścieżka do katalogu z runtime.
716 Błąd podczas tworzenia katalogu. Za długa ścieżka.
717 Błąd ustawienia timeout-ów portu.
718 Błędna wersja usługi MacroDEVICE.
719 Przekroczony czas oczekiwania na odpowiedź usługi MacroDEVICE.
720 Niepoprawne kodowanie pliku formuł.
720 Nieznane kodowanie pliku formuł.
720 Niepoprawna nazwa formuły.
720 Za długa nazwa formuły (max. 15 znaków).
721 Błędna nazwa systemu.
722 System niezaładowany.
723 System już załadowany.
724 Wynik nie jest liczbą.
725 Wynik nie jest napisem.
726 Funkcja niedostępna.
727 Brak takiego parametru.
728 Błędny typ parametru..
253
729 Błąd wewnętrzny.
730 Błąd ładowania biblioteki mbasic.dll lub mbasic_r.dll.
730 Błąd uruchomienia programu MacroBASIC.
730 Błąd uruchomienia programu MacroAppBASIC.
731 Zerwane połączenie z serwerem aplikacji.
732 Zbyt długa formuła.
733 Zbyt długa nazwa systemu.
734 Zbyt długa nazwa użytkownika.
735 Zbyt długie hasło.
736 Zbyt długa ścieżka do systemu.
737 Niepoprawny poziom obsługi komunikatów.
738 Zbyt długa nazwa grupy.
739 Zbyt długi adres serwera aplikacji.
740 Zbyt długie lub niepoprawne znaki dopełnienia nazwy pliku formuł.
741 Niedopuszczalne znaki w nazwie grupy.
742 Niedopuszczalne znaki w nazwie aplikacji.
743 Zwracany napis jest zbyt długi.
744 Podany parametr jest zbyt długi.
745 Zbyt długa lub nieprawidłowa nazwa formuły.
746 Zbyt długa lub nieprawidłowa nazwa pliku z certyfikatem.
747 Strona serwera wymaga użycia przez klienta certyfikatu.
748 Strona serwera nie używa protokołu SSL.
749 Niezgodność certyfikatu z kluczem prywatnym.
750 Błąd w czasie interpretacji wzorca.
254
Rozdział VI. Kody błędów
755 Upłynął czas ważności certyfikatu.
756 Błędny format certyfikatu.
757 Niezgodna wersja serwera aplikacji.
758 Nieznana aplikacja w grupie roboczej.
759 Błędny identyfikator grupy.
760 Błąd odczytu pliku z certyfikatem.
761 Klucz algorytmu RSA za długi.
762 Brak klucza algorytmu RSA.
763 Dostęp został zablokowany.
764 Zakończenie programu przez serwera aplikacji.
765 Brak środowiska Java 7 potrzebnego do uruchomienia serwera wiadomości bezpośrednich.
767 Wymagane środowisko Java w wersji 7.
768 Błędna wersja mbasic.exe.
802 Przekroczona maksymalna liczba aktywnych raportów.
803 Błąd podczas uruchomienia przeglądarki raportów.
804 Parametr może przyjmować wartości z zakresu 0:0:0, 23:59:59.
805 Parametr może przyjmować wartości z zakresu 100/01/01, 9999/12/31.
806 Wymagana wersja systemu operacyjnego Windows 2000 lub nowsza.
807 Nierozpoznany typ eksportu.
808 Eksport przerwany przez użytkownika.
809 Przekroczona maksymalna liczba parametrów dla raportu.
810 Niemożliwe otwarcie lub zablokowanie pliku kopii, sugestia: Sprawdź
prawa dostępu do pliku.
255
811 Błąd obsługi zewnętrznej biblioteki. Funkcja nie jest zaimplementowana.
811 Błąd obsługi zewnętrznej biblioteki. Brak nazwy biblioteki.
811 Błąd obsługi zewnętrznej biblioteki. Zbyt długa nazwa biblioteki.
811 Błąd obsługi zewnętrznej biblioteki. Niedozwolone znaki w nazwie biblioteki.
811 Błąd obsługi zewnętrznej biblioteki. Załadowanie biblioteki nie powiodło się.
811 Błąd obsługi zewnętrznej biblioteki. Niepoprawny numer biblioteki.
811 Błąd obsługi zewnętrznej biblioteki. Odłączenie biblioteki nie powiodło
się.
811 Błąd obsługi zewnętrznej biblioteki. Niepoprawne wyrównanie (data
structure alignment).
811 Błąd obsługi zewnętrznej biblioteki. Niepoprawny typ zwracanej wartožci.
811 Błąd obsługi zewnętrznej biblioteki. Niepoprawny typ funkcji.
811 Błąd obsługi zewnętrznej biblioteki. Obsługa funkcji typu ’pascal’ nie
jest zaimplementowana.
811 Błąd obsługi zewnętrznej biblioteki. Brak funkcji w bibliotece.
811 Błąd obsługi zewnętrznej biblioteki. Niepoprawny typ parametru.
811 Błąd obsługi zewnętrznej biblioteki. Tylko pierwszy parametr może być
typu VOID.
811 Błąd obsługi zewnętrznej biblioteki. Przepełniony bufor parametrów
funkcji.
811 Błąd obsługi zewnętrznej biblioteki. Niepoprawny numer funkcji.
811 Błąd obsługi zewnętrznej biblioteki. Zbyt długa nazwa funkcji.
256
Rozdział VI. Kody błędów
812 Wyjątek w kodzie zewnętrznej biblioteki.
Wyjątek w kodzie zewnętrznej biblioteki jest przechwytywany. W trakcie
jego obsługi jest zgłaszany błąd o numerze 812 z podaniem kodu wyjątku. Potem następuje standartowa obsługa wyjątku polegająca na zgłoszeniu ”docktor watson”. Jeśli biblioteka zewnętrza uruchamia nowe wątki,
to wyjątki z nowych wątków nie muszą być przechwytywane.
813 Brak pliku.
814 Klasa nieznaleziona.
815 Brak dostępu do klasy lub konstruktora.
816 Brak dostępu do metody.
817 Błąd wywołania metody.
818 Błąd wywołania metody/funkcji. Za długi zwracany napis.
819 Błąd wywołania metody. Kod znaku poza zakresem:
820 Nie została określona żadna z form raportu — na ekran, eksport do pliku.
821 Wykonanie eksportu nie jest możliwe bez oczekiwania na wynik.
823 Wymagana ścieżka lokalna.
850 Wyjątek w kodzie metody kontrolki.
851 Błąd wywołania metody kontrolki.
Błąd może pojawić się w przypadku podania nieprawidłowej nazwy metody dla funkcji ctr_call lub ctr_set.
851 Błąd wywołania metody kontrolki. Metoda może być wołana tylko za
pomocą funkcji ctr_call.
851 Błąd wywołania metody kontrolki.
852 Nieprawidłowy typ argumentu metody kontrolki.
852 Parametr nie ma zdefiniowanej wartości domyślnej.
852 Nieprawidłowy typ argumentu konstruktora kontrolki.
257
852 Argument konstruktora kontrolki nie ma zdefiniowanej wartości domyślnej.
853 Wyjątek w kodzie metody kontrolki.
854 Nie znaleziono kontrolki.
854 Nie znaleziono okna.
854 Niedozwolone białe znaki w nazwie klasy.
854 Nieprawidłowy schemat tabeli.
854 Wyjątek w kodzie metody kontrolki.
854 Błąd wywołania metody kontrolki.
855 Błąd odczytu pliku .desc.
855 Nieprawidłowe rozszerzenie pliku.
855 Błąd odczytu pliku.
Błąd może się pojawić w przypadku braku dostępu do pliku z ikonami.
855 W oknie już jest kontrolka.
855 Niewłaściwa nazwa domyślnego widoku w kontrolce @filelistpanel.
856 Niedopuszczalna wartość argumentu. Błąd przy tworzeniu okienka tymczasowego.
856 Nieprawidłowe położenie okienka. Błąd przy tworzeniu okienka tymczasowego.
901 Błąd przy wykonywaniu zapytania SQL.
910 Niedozwolone wywołanie win_disp w formule po odświeżeniu.
911 Niedozwolony wynik formuły okienko po w trakcie wykonania grp_disp.
912 Brak elementów w oknie grupowym.
914 Nie zdefiniowano zakładki dla pierwszego okna w grupie.
915 Za długa nazwa zakładki.
258
Rozdział VI. Kody błędów
916 Błąd obsługi certyfikatu.
917 Ważność certyfikatu użytkownika.
918 Ważność certyfikatu serwera aplikacji.
919 Brak okna wertowania w oknie grupowym.
919 Brak okna redagowania w oknie grupowym.
920 Przekroczona maksymalna liczba zakładek.
921 Zmiana hasła użytkownika niedostępna. Użytkownik zalogowany przy
użyciu certyfikatu.
921 Zmiana hasła użytkownika niedostępna. Użytkownik zalogowany przez
Active Directory.,
921 Zmiana hasła użytkownika niedostępna. Użytkownik zalogowany w trybie wsadowym (bez hasłaa).
922 Funkcja dostępna wyłącznie w formule Grupa przed.
923 Wymagany system Windows XP lub nowszy.
924 Nieprawidłowe użycie funkcji grp_disp.
924 Brak aktywnego okna wertowania.
924 Brak wskazanego okna wertowania.
925 Ten format możliwy jest tylko dla czasu krótszego niż 24h i nieujemnego.
926 Nieprawidłowy identyfikator okienka.
927 Nieprawidłowy prefiks przy redagowaniu pola złączeniowego.
Przed redagowaniem pola złaczeniowego formuły na wartość początkową dla pól występujących w kluczu indeksowym przed redagowanym
polem w złączeniu muszą zwracać niezerowe wartości.
928 Brak klucza prywatnego.
929 Nieznany atrybut certyfikatu.
930 Nieznany algorytm wyznaczenia skrótu.
259
931 Błędny format podpisu.
932 Błędne format lub nieprawidłowe hasło pliku PEM.
933 Brak certyfikatu.
934 Niedozwolone wywołanie funkcji.
935 Błąd przy tworzeniu menu. Akcja nie może być wyróżniona.
936 Błędna wartość funkcji skrótu.
937 Błędny format danych wejściowych.
938 Nieprawidłowy indeks przy redagowaniu pola złączeniowego.
938 Brak formuły na wartość początkową.
939 Błędny format danych w standardzie UTF8.
940 Niepoprawny typ zwracany przez formułę konwersji.
941 Metoda niedostępna dla okna wertowania użytego w oknie grupowym.
941 Metoda niedostępna dla okna redagowania użytego w oknie grupowym.
942 Przekroczony maksymalny rozmiar menu.
943 Okno tabeli użyte w elemencie innej tabeli. Tabeli nie można usunąć.
944 Przekroczona maksymalna liczba dostępów.
945 Przekroczona maksymalna liczba dostępów dla użytkownika.
946 Przekroczona maksymalna liczba dostępów.
947 Przekroczona maksymalna liczba dostępów dla użytkownika.
948 Przekroczona maksymalna liczba dostępów.
949 Przekroczona maksymalna liczba dostępów dla użytkownika.
950 Przekroczona maksymalna liczba dostępów.
951 Przekroczona maksymalna liczba dostępów dla użytkownika.
952 Przekroczona maksymalna liczba dostępów.
260
Rozdział VI. Kody błędów
953 Przekroczona maksymalna liczba dostępów dla użytkownika.
954 Przekroczona maksymalna liczba dostępów.
955 Przekroczona maksymalna liczba dostępów dla użytkownika.
956 Przekroczona maksymalna liczba dostępów.
957 Przekroczona maksymalna liczba dostępów dla użytkownika.
958 Przekroczona maksymalna liczba dostępów.
959 Przekroczona maksymalna liczba dostępów dla użytkownika.
960 Przekroczona maksymalna liczba dostępów.
961 Przekroczona maksymalna liczba dostępów dla użytkownika.
962 Błąd podczas kontroli limitów dostępów.
963 Metoda dostępna tylko dla okna ze strukturą hierarchiczną.
964 Brak pola w tabeli.
965 Błąd obsługi filtrów tabeli.
966 Nieprawidłowy prefiks w oknie ze strukturą hierarchiczną.
967 Nieprawidłowy indeks w oknie ze strukturą hierarchiczną.
968 Niedozwolona zmiana prefiksu, indeksu lub maski.
969 Podział okna grupowego nie w pierwszym oknie w grupie.
970 Funkcja niedostępna dla trybu tekstowego.
971 Brak pola typu TREE_REF w tabeli.
972 Dołączany BLOB nie może być prezentowany w oknie.
973 BLOB już istnieje.
974 Tabela SYSBLOB niezdefiniowana w systemie.
975 Puste złączenie lub wskazanie na inną tabelę niż SYSBLOB.
976 Niedozwolona wartość argumentu dla trybu tekstowego.
261
977 Akcja niedostępna dla tabeli SYSBLOB.
979 Brak ikony w pliku.
980 Niedozwolone ograniczenie drzewa (tr_root).
981 Zbyt dużo pól typu TREE_REF w tabeli.
982 Brak pola typu TREE_REF w indeksie.
983 Nie można usunąć elementów podrzędnych.
984 Niepoprawny wynik formuły wzorzec dla pola typu BLOB.
984 Niepoprawne określenie formatu pola.
984 Wartość parametru formatu poza zakresem
984 Niedozwolone przypisanie formuły do pola typu HEADER
984 Niedozwolone przypisanie formuły do pola złączeniowego
985 Okno ze strukturą hierarchiczną nie może być oknem słownika.
986 Błędna wartość złączenia do tabeli SYSBLOB.
987 Nieprawidłowy typ zwracanej wartości.
988 Nieprawidłowy numer ikony.
989 Nieprawidłowa wartość określająca ikonę.
990 Niedopuszczalny typ pola.
991 Błąd systemu buforowania plików BLOB.
992 Niedozwolony znak w nazwie pliku lub katalogu.
993 Nie odnaleziono programu skojarzonego z plikiem.
995 Brak pola w definicji okienka.
996 Zmiany w pliku nie zostaną uwzględnione.
Obsługa redagowanego pliku została przeniesiona z wywołanego programu skojarzonego do innego procesu. Dokonane zmiany w innym
procesie nie będą uwzględniane przez system.
262
Rozdział VI. Kody błędów
997 Brak miejsa na stosie.
998 Niedozwolone wywołanie dla tabeli tymczasowej.
999 Standardowe wejście niedostępne — aplikacja zostanie zakończona.
1000 Błąd funkcji biblioteki libjpeg.
1001 Alias aplikacji nieznaleziony.
Alias aplikacji podany jako pierwszy argument funkcji app_dir nie został znaleziony w grupie aplikacji, do której należy wykonywana.
1002 Niedopuszczalna pusta nazwa pliku.
Jako drugi argument funkcji app_dir należy podać nazwę pliku, która
musi mieć przynajmniej jeden znak, a także nie może zawierać metaznaków oraz separatorów katalogów.
1010 Za mało pamięci dynamicznej.
1012 Niedozwolony znak o kodzie powyżej 127.”,
1020 Brak aktywnego triggera put po lub del po.
Funkcja bfld może być użyta wyłącznie w formułach przypisana do
wykonania po triggerze z akcją put lub del lub formułach z nich wołanych.
1021 Bieżąca pozycja nieokreślona.
1022 Nie można zmienić triggera przypisanego w definicji.
Przypisania formuł dla triggerów można dokonać w formułach, o ile nie
zostaną określone wcześniej w definicji systemu.
1023 Nie można przypisać triggera do tabeli.
Nie można definiować triggerów dla tabel systemowych MEMO, SYSBLOB
oraz SYSLOG.
1024 Metoda bl_put niedostępna w triggerze typu put() przed.
Niedozwolone jest użycie metody bl_put w triggerze wywoływanym
przed akcją put.
1025 Funkcja dialogowa niedostępna w triggerze.
263
1026 Funkcja dialogowa niedostępna w triggerze.
W triggerach nie można używać funkcji end, fork, fork_hid,
sys_exec oraz żadnej dialogowej.
1027 Wycofanie transakcji.
Wycofanie transakcji w wyniku wywołania funkcji undo z wyjaśnieniem przekazanym poprzez argument.
1028 Wynik musi być liczbą.
Wynik formuły przypisanej dla triggera przed akcją musi być liczbą.
1029 Wynik musi być typu VOID.
Wynik formuły przypisanej do triggera po akcji musi być typu pustego.
1030 Funkcja niedostępna w wersji demo.
1031 Niepoprawny klucz.
1032 Niedozwolona zmiana maski tabeli.
W wyniku działania triggera del przed lub del po została zmieniona i
następnie nieprzywrócona bieżąca maska tabeli.
1033 Program przerwany przez operatora.
1034 Nie można aktywować okienka.
1035 Nierozpoznany typ eksportu.
Automatyczne zapisanie sprawozdania do pliku przez wywołanie funkcji
rep_exec możliwe jest w formatach: pdf (format PDF), txt (format
tekstowy, kodowanie w standardzie Windows-1250, z zamianą ramek na
znaki plus, minus i pionowej kreski), maz (format tekstowy, kodowanie
w standardzie mazovii).
1036 Błąd uruchomienia eksportera raportów, lub javy.
1036 Błąd uruchomienia eksportera raportów. Wymagana java w wersji 7.
1037 Nieprawidłowe położenie pól w okienku.
1038 Niedozwolony znak w identyfikatorze triggera.
Identyfikator triggera może być napisem składającym się z małych liter,
cyfr i podkreśleń, o długości nie przekraczającej 15 znaków.
264
Rozdział VI. Kody błędów
1039 Identyfikator triggera może mieć maksymalnie 15 znaków.
Identyfikator triggera może być napisem składającym się z małych liter,
cyfr i podkreśleń, o długości nie przekraczającej 15 znaków.
1040 Za duża notatka.
1041 Funkcja niedostępna w triggerze.
W triggerach nie można używać funkcji end, żadnej dialogowej, funkcji
fork, fork_hid oraz sys_exec. Dodatkowo niedozwolone jest użycie metody bl_put w triggerze wywoływanym przed akcją put. Dopuszczalne jest natomiast użycie funkcji system z niepustym tekstem
polecenia oraz sql_exec, psql_exe i use o ile, nie użyto metaznaku
(czyli wykonują się bezdialogowo).
1042 Plik pdf zabezpieczony hasłem.
1044 Niepoprawne określenie wartości parametru.
1044 Niepoprawne określenie listy parametrów.
1044 Niepoprawny identyfikator przycisku.
1044 Niepoprawne określenie koloru.
1044 Nieprawidłowy akronim.
1044 Brak etykiety przycisku.
1044 Brak pól w oknie.
1044 Metoda niedostępna dla okna zdefiniowanego w generatorze aplikacji.
1044 Metoda niedostępna dla pola rodzaju ’Combo-box’.
1044 Parametr dostępny tylko dla pola złączeniowego.
1044 Brak przycisku o podanym identyfikatorze w okienku tabeli.
1044 Metoda niedost‘pna dla pola rodzaju check-box.
1044 Metoda niedostępna dla pola rodzaju radio-buttons.
1044 Brak pól w oknie.
1044 Niepoprawne określenie dziedziny.
265
1044 Metoda niedostępna dla pól typu: BLOBIMAGE, BLOBRAW, HEADER,
MEMO, REFERENCE, SYS_MEMO, TREE_REF.
1044 Niepoprawne określenie parametru.
1045 Wynik musi być typu STRING.
1045 Niepoprawny format wyniku.
1045 Niepoprawny format wyniku w trybie wyświetlania.
1046 Błąd funkcji menu_act().
Błąd może być wyświetlony gdy ciąg określający ukrywane akcje menu
jest nieprawidłowy.
1046 Błąd funkcji menu_act().
Błąd może być wyświetlony gdy identyfikator menu jest niepoprawny.
1046 Błąd funkcji menu_act().”,
Błąd może być wyświetlony gdy brak określonej pozycji w menu.
1047 Brak pozycji menu.
1048 Metoda niedostępna dla bieżącego okna wertowania.
1048 Metoda niedostępna dla bieżącego okna słownika.
1048 Metoda niedostępna dla bieżącego okna redagowania.
1048 Metoda niedostępna dla bieżącego okna wzorca.
1049 Metoda niedostępna dla okna grupowego.
1050 Błędne przypisanie ikony do pozycji menu.
Ikona nie może być przypisana do pierwszego poziomu menu. Ikona nie
może być przypisana do separatora. Ikona nie może być przypisana do
pozycji posiadającej podmenu.
1051 Błąd definiowania akcji przycisku.
1052 Błąd definiowania akcji przycisku.
1052 Przycisk nie może być dorównany do początku, jeśeli wcześniej zdefiniowano przycisk dorównany do końca.
266
Rozdział VI. Kody błędów
1052 Przyciski muszą być dodawane w sposób ciągły do kolejnych paneli.
1053 Otwarcie kopii pliku dostępne tylko jeśli wynikiem jest obiekt plikowy.
1054 Otwarcie kopii pliku nie jest dostępne dla bloba.
1054 Otwarcie kopii pliku nie jest dostępne dla urządzenia.
1055 Otwarcie kopii pliku niedostępne jeśli ma być wyzerowana jego długość.
1056 Niepoprawny ciąg określający ścieżkę menu.
1057 Za mała wysokość okna wertowania.
1057 Za małaa wysokość okna redagowania.
1100 Brak podsystemu.
Zbiór definicji systemu *.def nie zawiera podsytemu przekazanego w
komunikacie błędu.
1101 Niepoprawnie podpisany plik.
1102 Błąd wewnętrzny.
1103 Niepoprawnie zaszyfrowany plik z kluczem do podpisu pliku DEF.
1104 Za długa nazwa pliku z definicją systemu.
1105 Nieprawidłowa wersja pliku definicji.
Błąd zgłaszany przez funkcję exp_def dla zbiorów definicji (*.def)
utworzonych MacroGENEM poniżej wersji 11.10.
1107 Niekompletna definicja systemu.
Dopuszczalne jest wygenerowanie definicji systemu również w przypadku, gdy nie wszystkie okienka są gotowe. Okienka, które wymagają animacji, nie będą wtedy zapisywane w definicji. Jeśli przynajmniej jedno
okienko będzie pominięte przy generowaniu definicji, to informacja o
tym zostanie wyświetlona przy starcie systemu.
1108 Niekompletna definicja systemu.
Dopuszczalne jest wygenerowanie definicji systemu również w przypadku, gdy nie wszystkie okienka są gotowe. Okienka, które wymagają animacji, nie będą wtedy zapisywane w definicji. Jeśli przynajmniej jedno
okienko będzie pominięte przy generowaniu definicji, to informacja o
tym zostanie wyświetlona przy starcie systemu.
267
1109 Błędna suma kontrolna definicji systemu.
1110 Brak praw dostępu.
1111 Błąd podczas generowania kodu.
1111 Błąd podczas generowania kodu, przekroczona maksymalna pojemność.
1111 Błąd podczas generowania kodu, wymagany niepusty ciąg znaków do
zakodowania.
1112 Błąd otwarcia tabeli.
1113 Błąd wykonania funkcji bl_clean.
Informacja o błędzie dostępna jest w pliku bl_clean.log umieszczonym
zgodnie z deklaracją ścieżek.
1114 Wyniki profilera przy włączonym debuggerze są obarczone błędem.
Wyniki profilera przy dostępnej opcji włączenia debuggera mogą być
obarczone błędami (dodatkowe narzuty na obsługę debuggera).
1115 Niezgodna wersja danych profilera.
1117 Profiler jest już włączony.
1118 Wynik profilera przy obj_meth_par_type = 0 nie uwzględnia wszystkich
metod.
W przypadku uruchomienia z parametrem obj_meth_par_type = 0
w wyniku nie będą uwzględnione wywołania metod zadeklarowanych
bez określonych typów argumentów. Wywołując funkcję obj_left z
argumentem równym obj_meth_par_type można sprawdzić jaką
wartość ma ustawioną wartość parametr obj_meth_par_type. Wynikiem będzie wartość parametru ustawiona w pliku konfiguracyjny
(*.cfg)
1119 Brak plików zgodnych z maską.
1120 Brak takiego pliku lub nieprawidłowa ścieżka do pliku.
1120 Brak takiego pliku na komputerze użytkownika lub nieprawidłowa
ścieżka do pliku.
1121 Niedozwolone odwołanie do katalogu.
268
Rozdział VI. Kody błędów
1122 Wynik profilera nie został w pełni odpisany do pliku.
1123 Plik nie zawiera obrazka o podanym numerze.
1124 Funkcja nie obsługuje ścieżek sieciowych.
1125 Brak tabeli danych profilera do pobrania.
1126 Brak pliku tymczasowego do odczytu danych.
1127 Próba zapisu znaków o kodach spoza standardu Mazovii na urządzenie
lub do pliku binarnego.
1128 Zwracana wartość zmiennej środowiskowej nie jest kodowana w UTF-8.
1129 Zwracana wartość zmiennej środowiskowej jest zbyt długa.
1130 Brak pamięci przy określeniu wartości zmiennej środowiskowej.
1131 Funkcja barcode wymaga do zapisu znaków ze standardu Mazovii.
1132 Błąd przy zapisie danych profilera.
1133 Nazwa pliku może składać się z małych liter alfabetu łacińskiego, cyfr
oraz znaku podkreślenia.
1134 Niepoprawna nazwa źródła danych.
1135 Błąd wewnętrzny.
1136 Maksymalna liczba pól tabeli tymczasowej to ...
1137 Konwersja typu ... niemożliwa.
1138 Błąd połączenia ODBC.
1139 Napis obcięty z prawej strony.
1140 Błędna wartość typu DATE.
1141 Błędna wartość typu TIME.
1142 Przekazany bufor wiersza jest niewłaściwego rozmiaru.
1143 Niepoprawne kodowanie UTF-8 napisu.
1144 Kod znaku poza zakresem funkcji konwersji.
269
1145 Długość napisu przekracza zadeklarowaną w typie.
1146 Ostrzeżenie/informacja połączenia ODBC.
1147 Parametry powiązane z plikami nie mogą zwracać wartości.
1148 Rozmiar danych w kolumnie przekracza maksymalny deklarowany
przez sterownik.
1149 Sterownik ODBC MacroBASE nie obsługuje wartości NULL w parametrach.
1150 Brak pól w wyniku.
1152 Błąd podczas dekompresji. Niespodziewany koniec pliku.
1151 Błąd podczas dekompresji. Niepoprawny plik archiwum.
1151 Błąd podczas dekompresji. Niepoprawna suma kontrolna (CRC).
1151 Błąd podczas dekompresji. Błąd tworzenia katalogu.
1151 Błąd podczas dekompresji. Błąd tworzenia pliku.
1151 Błąd podczas dekompresji. Błąd zapisu do pliku.
1151 Błąd podczas dekompresji. Błąd otwarcia pliku archiwum.
1152 Funkcja niedostępna dla uchwytu do urządzenia.
1153 Niezdefiniowana wartość.
1154 Wartość niepoprawnego typu.
1155 Wartość poza zakresem.
1156 Tablice przekazane w argumentach 2 i 3 muszą mieć taki sam rozmiar.
1157 Błąd wewnętrzny. Niepoprawnie zbudowany prefix.
1158 Tabela SYS_TMP_MEMO niezdefiniowana w systemie.
1158 Błąd tworzenia tabeli SYS_TMP_MEMO.
1159 Niejednoznaczne odwołanie do pola notatnikowego.
1160 Tabela nie zawiera pola notatnikowego o wskazanym akronimie.
270
Rozdział VI. Kody błędów
1161 Wykryto nieunikalny identyfikator formuły.
1162 Wykryto nieunikalny identyfikator formuły.
1163 Sortowanie po polu notatnikowym nie jest dostępne.
1164 Utworzenie tabeli z pojedynczym polem notatnikowym nie jest dozwolone.
1165 Metoda niedostępna dla tabeli SYSMEMO.
1166 Zabronione umieszczanie kontrolki webbrowser w oknie grupowym.
1167 Błąd ładowania biblioteki libodbc.so,libodbc.so.1 w wersji 32-bitowej.
Manager ODBC niepoprawnie zainstalowany.
1168 Błąd ładowania biblioteki libodbc.so,libodbc.so.1 w wersji 64-bitowej.
Manager ODBC niepoprawnie zainstalowany.
1169 Błąd ładowania biblioteki odbc32.dll w wersji 32-bitowej.
Manager ODBC niepoprawnie zainstalowany.
1170 Błąd ładowania biblioteki odbc32.dll w wersji 64-bitowej.
Manager ODBC niepoprawnie zainstalowany.
1171 Brak symbolu dynamicznie linkowanego.
Manager ODBC zainstalowany w niepoprawnej wersji.
1172 Brak pamięci.
1173 Brak dostępu do pliku sterownika ODBC dla MacroBASE.
1174 Brak 32-bitowej wersji sterownika ODBC dla MacroBASE.
1175 Brak 32-bitowej, UTF-8 wersji sterownika ODBC dla MacroBASE.
1176 Brak 64-bitowej wersji sterownika ODBC dla MacroBASE.
1181 Niepoprawna tabela konwersji.
Tablica określająca sposób konwersji musi mieć dokładnie 128 elementów: funkcja.
1182 Niepoprawna tabela konwersji.
Element o pozycji ... nie został zdefiniowany, funkcja: iconv.
271
1183 Niepoprawna tabela konwersji.
Element o pozycji ... jest niepoprawnego typu, funkcja: iconv.
1184 Niepoprawna tabela konwersji.
Element o pozycji ... z wartości ... jest poza zakresem obsługiwanych znaków, funkcja: iconv.
1185 Niepoprawna tabela konwersji.
Elementom o pozycjach ... i ... zostały przypisane te same wartości, funkcja: iconv.
1186 Niepoprawny typ zwracany przez formułę.
Obiekt utworzony funkcją: iconv.
1187 Wartość zwrócona przez formułę niezgodna z wybranym kodowaniem.
Obiekt utworzony funkcją: iconv.
1188 Niepoprawne kodowanie. Obiekt utworzony funkcją: iconv.
1189 Typ TIME niedostępny przy aktywnej opcji połączenia ”time_as_string”.
1190 Wywołanie funkcji debug.
1191 Błąd wewnętrzy podczas eksportowania raportu.
1192 Błąd przy próbie osadzenia czcionki w pliku pdf.
1193 Błąd wywołania polecenia tworzenia listu z załącznikiem.
1200 System nie zawiera tabeli SYSSALRT. Powiadomienia nie są obsługiwane.
Systemu powiadomień można używać jedynie dla systemów wygenerowanych wersją 12.30 MacroBUILDERA
1201 Błąd wewnętrzy obsługi powiadomień.
1202 Liczba powiadomień nieprzetworzonych przez użytkownika osiągneła
liczbę 10000.
Do danego użytkownika może być naraz maksymalnie 10000 nieobsłużonych powiadomień. Przy próbie wysłania kolejnej wiadomości zostanie zgłoszony błąd.
272
Rozdział VI. Kody błędów
1203 System nie zawiera tabeli SYSSALRT. Powiadomienie nie może być obsłużone.
Systemu powiadomień można używać jedynie dla systemów wygenerowanych wersją 12.30 MacroBUILDERA
1204 Nieprawidłowy identyfikator notatki.
1204 Data wygaśnięcia powiadomienia powinna być większa lub równa dacie
jego wywołania.
1206 System zawiera tabelę SYSSALRT o nieprawidłowej budowie.
1207 Data odroczenia powiadomienia powinna być większa od daty wysłania.”,
1208 Data wygaśnięcia powiadomienia powinna być większa lub równa dacie
bieżącej.
1209 Nieprawidłowa instancja tabeli SYSSALRT lub MacroSERVERa.
1210 Obsługa powiadomień wyłączona przez administratora systemu.
Można zabronić wysyłania komunikatów poprzez wpis w pliku *.cfg (
aplikacji lub macro.cfg). Mówi o tym parametr ntc_disable. Jeśli będzie
miał wartość liczbową różną od 0, to komunikaty z aplikacji wysyłane
nie będą. Komunikaty będą dostępne w jTermie, jeśli zostanie otworzona
przynajmniej jedna aplikacja, z której można wysyłać komunikaty.
1220 Brak tabeli SYSLOG w systemie.
1221 Brak zainstalowanego managera odbc w wersji ... -bitowej.
1230 Niepoprawna struktura tabeli SYSSULOG w definicji systemu. Aby korzystać z funkcji historii haseł oraz blokowania użytkownika, należy ponownie wygenerować definicję systemu bieżącą wersją MacroBUILDERa.
1231 Niepoprawna nazwa pliku w katalogu sysblob. Uruchom bl_clean w celu
usunięcia pliku.
1232 Błędny zapis adresu zdalnego urządzenia. Niezgodny ze składnią —nazwa@adres_ip:port_nasluchu—
1233 Otwarcie urządzenia lokalnego poprzez MacroDEVICE niedozwolone.
Zapis postaci @—nazwa@adres_ip:port_nasluchu—
273
1234 Błąd pobrania ścieżki do katalogu z runtime.
1235 Błąd odczytu kodu źródłowego.
1236 Zbyt długi plik kodu źródłowego.
1237 Wymagane kodowanie UTF-8.
1238 Brak formuły w pliku źródłowym.
1239 Powielenie formuły w pliku źródłowym.
1240 form_chk(): wymagany tryb otwarcia pliku ur lub Ur.

Podobne dokumenty