Code: Definicja regul pol obowiazkowych: Różnice pomiędzy wersjami
Linia 15: | Linia 15: | ||
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Key | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Key | ||
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Default | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Default | ||
+ | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Comment | ||
|- | |- | ||
Linia 22: | Linia 23: | ||
| style="text-align:left; border: 1px solid #888888; "| PRI | | style="text-align:left; border: 1px solid #888888; "| PRI | ||
| style="text-align:left; border: 1px solid #888888; "| NULL | | style="text-align:left; border: 1px solid #888888; "| NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
Linia 29: | Linia 31: | ||
| style="text-align:left; border: 1px solid #888888; "| UNI | | style="text-align:left; border: 1px solid #888888; "| UNI | ||
| style="text-align:left; border: 1px solid #888888; "| | | style="text-align:left; border: 1px solid #888888; "| | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888; "| [[coreid]] | | style="text-align:left; border: 1px solid #888888; "| [[coreid]] | ||
Linia 35: | Linia 38: | ||
| style="text-align:left; border: 1px solid #888888; "| MUL | | style="text-align:left; border: 1px solid #888888; "| MUL | ||
| style="text-align:left; border: 1px solid #888888; "| | | style="text-align:left; border: 1px solid #888888; "| | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888; "| rule_operator | | style="text-align:left; border: 1px solid #888888; "| rule_operator | ||
Linia 41: | Linia 45: | ||
| style="text-align:left; border: 1px solid #888888; "| | | style="text-align:left; border: 1px solid #888888; "| | ||
| style="text-align:left; border: 1px solid #888888; "| | | style="text-align:left; border: 1px solid #888888; "| | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888; "| rule_mode | | style="text-align:left; border: 1px solid #888888; "| rule_mode | ||
Linia 47: | Linia 52: | ||
| style="text-align:left; border: 1px solid #888888; "| | | style="text-align:left; border: 1px solid #888888; "| | ||
| style="text-align:left; border: 1px solid #888888; "| | | style="text-align:left; border: 1px solid #888888; "| | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | message_if_not_valid | | style="text-align:left; border: 1px solid #888888;" | message_if_not_valid | ||
Linia 53: | Linia 59: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | NULL | | style="text-align:left; border: 1px solid #888888;" | NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | comment | | style="text-align:left; border: 1px solid #888888;" | comment | ||
Linia 59: | Linia 66: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | NULL | | style="text-align:left; border: 1px solid #888888;" | NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|} | |} | ||
Linia 69: | Linia 77: | ||
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Key | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Key | ||
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Default | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Default | ||
+ | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Comment | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | [[idn]] | | style="text-align:left; border: 1px solid #888888;" | [[idn]] | ||
Linia 75: | Linia 84: | ||
| style="text-align:left; border: 1px solid #888888;" | PRI | | style="text-align:left; border: 1px solid #888888;" | PRI | ||
| style="text-align:left; border: 1px solid #888888;" | NULL | | style="text-align:left; border: 1px solid #888888;" | NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | [[GUID]] | | style="text-align:left; border: 1px solid #888888;" | [[GUID]] | ||
Linia 81: | Linia 91: | ||
| style="text-align:left; border: 1px solid #888888;" | UNI | | style="text-align:left; border: 1px solid #888888;" | UNI | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | GUID_NG | | style="text-align:left; border: 1px solid #888888;" | GUID_NG | ||
Linia 87: | Linia 98: | ||
| style="text-align:left; border: 1px solid #888888;" | MUL | | style="text-align:left; border: 1px solid #888888;" | MUL | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | fieldname | | style="text-align:left; border: 1px solid #888888;" | fieldname | ||
Linia 93: | Linia 105: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | rule_order | | style="text-align:left; border: 1px solid #888888;" | rule_order | ||
Linia 99: | Linia 112: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | 0 | | style="text-align:left; border: 1px solid #888888;" | 0 | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | admin | | style="text-align:left; border: 1px solid #888888;" | admin | ||
Linia 105: | Linia 119: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | 0 | | style="text-align:left; border: 1px solid #888888;" | 0 | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | validation_rule_type | | style="text-align:left; border: 1px solid #888888;" | validation_rule_type | ||
Linia 111: | Linia 126: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | NULL | | style="text-align:left; border: 1px solid #888888;" | NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | validation_rule | | style="text-align:left; border: 1px solid #888888;" | validation_rule | ||
Linia 117: | Linia 133: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | NULL | | style="text-align:left; border: 1px solid #888888;" | NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | condition_expr | | style="text-align:left; border: 1px solid #888888;" | condition_expr | ||
Linia 123: | Linia 140: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | condition_ruleset_guid | | style="text-align:left; border: 1px solid #888888;" | condition_ruleset_guid | ||
Linia 129: | Linia 147: | ||
| style="text-align:left; border: 1px solid #888888;" | MUL | | style="text-align:left; border: 1px solid #888888;" | MUL | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|- | |- | ||
| style="text-align:left; border: 1px solid #888888;" | message_if_not_valid | | style="text-align:left; border: 1px solid #888888;" | message_if_not_valid | ||
Linia 135: | Linia 154: | ||
| style="text-align:left; border: 1px solid #888888;" | | | style="text-align:left; border: 1px solid #888888;" | | ||
| style="text-align:left; border: 1px solid #888888;" | NULL | | style="text-align:left; border: 1px solid #888888;" | NULL | ||
+ | | style="text-align:left; border: 1px solid #888888; "| uzupełnić | ||
|} | |} | ||
Wersja z 07:51, 2 kwi 2009
Algorytm walidacji pól
Mechanizm definiowanej walidacji pól aktywowany jest kluczem w Rejestrze systemowym o nazwie walidacja_pol_aktywna.
Procedura walidacji pobiera definicje z tabel sys_fld_validator_ng i sys_fld_validator_po dla danego coreid i przetwarza wszystkie reguły.
Struktury tabel odpowiadających za definicje walidacji pól:
Tabela sys_fld_validator_ng
Field | Type | Null | Key | Default | Comment |
---|---|---|---|---|---|
idn | int(11) | NO | PRI | NULL | uzupełnić |
GUID | varchar(38) | NO | UNI | uzupełnić | |
coreid | varchar(38) | NO | MUL | uzupełnić | |
rule_operator | int(11) | NO | uzupełnić | ||
rule_mode | int(11) | NO | uzupełnić | ||
message_if_not_valid | text | YES | NULL | uzupełnić | |
comment | varchar(250) | YES | NULL | uzupełnić |
Tabela sys_fld_validator_po
Field | Type | Null | Key | Default | Comment |
---|---|---|---|---|---|
idn | int(11) | NO | PRI | NULL | uzupełnić |
GUID | varchar(38) | NO | UNI | uzupełnić | |
GUID_NG | varchar(38) | NO | MUL | uzupełnić | |
fieldname | varchar(38) | NO | uzupełnić | ||
rule_order | int(11) | NO | 0 | uzupełnić | |
admin | int(11) | NO | 0 | uzupełnić | |
validation_rule_type | varchar(20) | YES | NULL | uzupełnić | |
validation_rule | varchar(200) | YES | NULL | uzupełnić | |
condition_expr | varchar(250) | NO | uzupełnić | ||
condition_ruleset_guid | varchar(38) | NO | MUL | uzupełnić | |
message_if_not_valid | text | YES | NULL | uzupełnić |
Reguła może mieć wiele pozycji - np kontrolować wiele pól lub zakładać różne warunki na jedno pole.
Poszczególne reguły w danym zestawie mogą być łączone operatorem AND (rule_operator=0) - czyli wymagają spełnienia wszystkich warunków, lub operatorem OR (rule_operator=1) - czyli wystarczy spełnienie jednego z warunków.
Rule_mode określa metodę walidacji:
0 - na poziomie cds (czyli wykonywana w czasie edycji pola) 1 - Before Post 2 - Before Apply
Reguła definiowana jest przez typ reguły i wartość kontrolowaną:
Pole validation_rule_type przyjmuje wartości:
NOT_NULL, - dla wszystkich typów NOT_EMPTY, - dla stringów: <>"", dla liczb <>0, dla dat <>'0000-00-00' LENGTH_EQ, LENGTH_MAX, LENGTH_MIN - dotyczy pól stringowych - w validation_rule określona jest długość EQ, NOT_EQ, LESS, LESS_EQ, GREATER, GREATER_EQ, - porównanie z polem validation_rule DEFAULT - wartość domyślna pola określona w validation_rule
Przykłady: fieldname='datawystaw' validation_rule_type='GREATER_EQ' validation_rule='2009-01-01' fieldname='opis' validation_rule_type='LENGTH_MIN' validation_rule='10'
Reguły mogą być warunkowe - patrz Przykład 2. W przypadku nie spełnienia warunków zawartych w regule powinien zostać wyświetlony komunikat złożony z zawartości pól message_if_not_valid dla nagłówka i tych pozycji reguły, które nie zostały spełnione.
Przykładowe definicje walidacji:
Przykład 1:
Karta kontrahenta (coreid='K_'), pole katcol0 ma być różne od 0, a długość pola NIP ma być równa 10 lub 12 lub 0 (rule_operator=1 (OR) oznacza, że wystarczy, by jeden z warunków był spełniony). Definicja:
INSERT INTO sys_fld_validator_ng VALUES (0,'K_rule1','K_',0,2,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '), (0,'K_rule2','K_',1,2,'Pole NIP może mieć długość 10,12 znaków bądź być puste'); INSERT INTO sys_fld_validator_po VALUES (0,'K_katcol0_rule1_1','K_rule1','katcol0',0,0,'NOT_EMPTY',"","",""), (0,'K_nip_rule1_1','K_rule2','nip',0,0,'LENGTH_EQ','0',"","",""), (0,'K_nip_rule1_2','K_rule2','nip',0,0,'LENGTH_EQ','10',"","",""), (0,'K_nip_rule1_3','K_rule2','nip',0,0,'LENGTH_EQ','12',"","","");
Jeśli definiowane pole ma być sprawdzane tylko przy spełnieniu warunków dotyczących danego zapisu można takie warunki zdefiniować tworząc kolejny zestaw reguł i przypisując jego guid do pola condition_ruleset_guid.
Przykład 2:
Edycja operacji (coreid='O_') sprzedaży (grupaoper=0), pole katcol0 ma być różne od 0. Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w regule 'O_katcol0_cond1' Definicja:
# reguła walidacji INSERT INTO sys_fld_validator_ng VALUES (0,'O_katcol0_rule1','O_',0,2,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '), INSERT INTO sys_fld_validator_po VALUES (0,'O_katcol0_rule1_1','O_katcol0_rule1','katcol0',0,0,'NOT_EMPTY',"","",'O_katcol0_cond1',""), # reguła warunku walidacji INSERT INTO sys_fld_validator_ng VALUES (0,'O_katcol0_cond1',"",0,2,""); INSERT INTO sys_fld_validator_po VALUES (0,'O_katcol0_cond1_1','O_katcol0_cond1','grupaoper',0,0,'EQ','0',"","","");
Przykład 3:
Edycja operacji (coreid='O_') sprzedaży (grupaoper=0), pole katcol0 ma być różne od 0. Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w polu condition_expr Definicja:
# reguła walidacji INSERT INTO sys_fld_validator_ng VALUES (0,'O_katcol0_rule1','O_',0,2,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '), INSERT INTO sys_fld_validator_po VALUES (0,'O_katcol0_rule1_1','O_katcol0_rule1','katcol0',0,0,'NOT_EMPTY',"",'grupa=0',"",""),