Code: Definicja regul pol obowiazkowych: Różnice pomiędzy wersjami
(Nie pokazano 67 wersji utworzonych przez 5 użytkowników) | |||
Linia 1: | Linia 1: | ||
'''Algorytm walidacji pól''' | '''Algorytm walidacji pól''' | ||
+ | |||
+ | Mechanizm definiowanej walidacji pól aktywowany jest kluczem w [[Edytor_kluczy_rejestru|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'' | ''Tabela sys_fld_validator_ng'' | ||
− | {| class="prettytable" cellspacing= | + | {| class="prettytable" cellspacing=1 cellpadding=3 style="border: 1px solid #888888; border-collapse: collapse; padding: 5px;" |
− | ! style="text-align: | + | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Field |
− | ! style="text-align: | + | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Type |
− | ! style="text-align: | + | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Null |
− | ! style="text-align: | + | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Key |
− | ! style="text-align: | + | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Default |
+ | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Comment | ||
|- | |- | ||
− | | style="border: 1px solid #888888; "| idn | + | | style="text-align:left; border: 1px solid #888888; "| [[idn]] |
− | | style="border: 1px solid #888888; "| int(11) | + | | style="text-align:left; border: 1px solid #888888; "| int(11) |
− | | style="border: 1px solid #888888; "| NO | + | | style="text-align:left; border: 1px solid #888888; "| NO |
− | | style="border: 1px solid #888888; "| PRI | + | | style="text-align:left; border: 1px solid #888888; "| PRI |
− | | style="border: 1px solid #888888; "| NULL | + | | style="text-align:left; border: 1px solid #888888; "| NULL |
+ | | style="text-align:left; border: 1px solid #888888; "| | ||
|- | |- | ||
− | | style="border: 1px solid #888888; "| [[GUID]] | + | | style="text-align:left; border: 1px solid #888888; "| [[GUID]] |
− | | style="border: 1px solid #888888; "| varchar(38) | + | | style="text-align:left; border: 1px solid #888888; "| varchar(38) |
− | | style="border: 1px solid #888888; "| NO | + | | style="text-align:left; border: 1px solid #888888; "| NO |
− | | style="border: 1px solid #888888; "| UNI | + | | style="text-align:left; border: 1px solid #888888; "| UNI |
− | | style="border: 1px solid #888888; "| | + | | style="text-align:left; border: 1px solid #888888; "| |
+ | | style="text-align:left; border: 1px solid #888888; "| | ||
|- | |- | ||
− | | style="border: 1px solid #888888; "| [[coreid]] | + | | style="text-align:left; border: 1px solid #888888; "| [[coreid]] |
− | | style="border: 1px solid #888888; "| varchar(38) | + | | style="text-align:left; border: 1px solid #888888; "| varchar(38) |
− | | style="border: 1px solid #888888; "| NO | + | | style="text-align:left; border: 1px solid #888888; "| NO |
− | | style="border: 1px solid #888888; "| MUL | + | | style="text-align:left; border: 1px solid #888888; "| MUL |
− | | style="border: 1px solid #888888; "| | + | | style="text-align:left; border: 1px solid #888888; "| |
+ | | style="text-align:left; border: 1px solid #888888; "| | ||
|- | |- | ||
− | | style="border: 1px solid #888888; "| rule_operator | + | | style="text-align:left; border: 1px solid #888888; "| rule_operator |
− | | style="border: 1px solid #888888; "| int(11) | + | | style="text-align:left; border: 1px solid #888888; "| int(11) |
− | | style="border: 1px solid #888888; "| NO | + | | style="text-align:left; border: 1px solid #888888; "| NO |
− | | style="border: 1px solid #888888; "| | + | | style="text-align:left; border: 1px solid #888888; "| |
− | | style="border: 1px solid #888888; "| | + | | style="text-align:left; border: 1px solid #888888; "| |
+ | | style="text-align:left; border: 1px solid #888888; "| 0 - AND 1 - OR | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888; "| rule_mode | ||
+ | | style="text-align:left; border: 1px solid #888888; "| int(11) | ||
+ | | style="text-align:left; border: 1px solid #888888; "| NO | ||
+ | | 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 - cds, 1 - BeforePost, 2 - BeforeApply | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | message_if_not_valid | ||
+ | | style="text-align:left; border: 1px solid #888888;" | text | ||
+ | | style="text-align:left; border: 1px solid #888888;" | YES | ||
+ | | 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; "| | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | comment | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(250) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | YES | ||
+ | | 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; "| | ||
+ | |} | ||
+ | ''Tabela sys_fld_validator_po'' | ||
+ | {| class="prettytable" cellspacing=1 cellpadding=3 style="border: 1px solid #888888; border-collapse: collapse; padding: 5px;" | ||
+ | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Field | ||
+ | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Type | ||
+ | ! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Null | ||
+ | ! 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;" | Comment | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | [[idn]] | ||
+ | | style="text-align:left; border: 1px solid #888888;" | int(11) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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; "| | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | [[GUID]] | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(38) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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;" | GUID_NG | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(38) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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;" | fieldname | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(38) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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;" | rule_order | ||
+ | | style="text-align:left; border: 1px solid #888888;" | int(11) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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; "| kolejność sprawdzania | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | admin | ||
+ | | style="text-align:left; border: 1px solid #888888;" | int(11) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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; "| | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | validation_rule_type | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(20) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | YES | ||
+ | | 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; "| | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | validation_rule | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(200) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | YES | ||
+ | | 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; "| | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | condition_expr | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(250) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888;" | | ||
+ | | style="text-align:left; border: 1px solid #888888; "| jeszcze nie działa | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | condition_ruleset_guid | ||
+ | | style="text-align:left; border: 1px solid #888888;" | varchar(38) | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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;" | message_if_not_valid | ||
+ | | style="text-align:left; border: 1px solid #888888;" | text | ||
+ | | style="text-align:left; border: 1px solid #888888;" | YES | ||
+ | | 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; "| | ||
+ | |- | ||
+ | | style="text-align:left; border: 1px solid #888888;" | level | ||
+ | | style="text-align:left; border: 1px solid #888888;" | int | ||
+ | | style="text-align:left; border: 1px solid #888888;" | NO | ||
+ | | 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; "| | ||
|} | |} | ||
− | + | ---- | |
− | + | ||
− | | | + | |
− | + | 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 -- UWAGA! to jeszcze nie działa! | ||
+ | |||
+ | Przykłady: | ||
+ | fieldname='datawystaw' | ||
+ | validation_rule_type='GREATER_EQ' | ||
+ | validation_rule='2009-01-01' | ||
+ | |||
+ | fieldname='opis' | ||
+ | validation_rule_type='LENGTH_MIN' | ||
+ | validation_rule='10' | ||
+ | |||
+ | fieldname='rodzaj' | ||
+ | validation_rule_type='EQ' | ||
+ | validation_rule='10|11|12' - odpowiednik rodzaj in (10,11,12) | ||
+ | |||
+ | |||
+ | 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. | ||
+ | |||
+ | Pole level określa poziom kontroli: 0 - restrykcyjnie (nie pozwala zapisać wartości niepoprawnej), 1 - tylko komunikat, 2 - komunikat z pytaniem czy na pewno zapisać | ||
+ | (zmiana w wersjach od 2017-07-14) | ||
+ | ---- | ||
+ | |||
+ | Obsługiwane core_id (miejsca w systemie): | ||
+ | nagłówek operacji: 'O_n_' | ||
+ | pozycje operacji : 'O_p_' | ||
+ | towar 'T_'; | ||
+ | kontrahent 'K_' | ||
+ | nagłówek zamówienia 'ZM_n_' | ||
+ | pozycje zamówienia 'ZM_p_' | ||
+ | nagłówek kancelarii 'Kancelaria_' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | '''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: | ||
+ | |||
+ | |||
+ | <source lang="sql"> | ||
+ | |||
+ | 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","","","",""); | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | 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 - nagłówek (coreid='O_n_') sprzedaży (grupaoper=0), pole katcol0 ma być różne od 0. | ||
+ | Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w regule 'O_katcol0_cond1' | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | <source lang=sql> | ||
+ | # reguła walidacji | ||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'O_katcol0_rule1','O_n_',0,2,'Określ handlowca! ',''); | ||
+ | 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','','',''); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | '''Przykład 3:''' | ||
+ | Edycja zamówień (coreid='ZN_n_') od odbiorców i ex (rodzaj in (27,52), pole katcol0 ma być różne od 0. | ||
+ | Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w polu condition_expr | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | |||
+ | |||
+ | <source lang=sql> | ||
+ | # wersja uproszczona wykorzystuje operator | | ||
+ | |||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_rule1','ZM_n_',0,2,'Określ handlowca! ',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_rule1_1','Z_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','','Z_katcol0_cond1',''); | ||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_cond1','',0,2,'',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_cond1_1','Z_katcol0_cond1','rodzaj',0,0,'EQ','27|52','','',''); | ||
+ | |||
+ | # wersja pełna wykorzystuje kolejny ruleset z OR | ||
+ | |||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_rule1','ZM_n_',0,2,'Określ handlowca! ',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_rule1_1','Z_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','','Z_katcol0_cond1',''); | ||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_cond1','',1,2,'',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_cond1_1','Z_katcol0_cond1','rodzaj',0,0,'EQ','27','','',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_cond1_2','Z_katcol0_cond1','rodzaj',0,0,'EQ','52','','',''); | ||
+ | </source> | ||
+ | |||
+ | '''Przykład 4:''' | ||
+ | |||
+ | Kontrola wypełnienia dwu kategorii kolumnowych w towarach: | ||
+ | |||
+ | <source lang=sql> | ||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'T_katcol0_rule1','T_',0,2,'Określ kategorię LED ',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'T_katcol0_rule1_1','T_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','','',''); | ||
+ | |||
+ | INSERT INTO sys_fld_validator_ng VALUES (0,'T_katcol1_rule1','T_',0,2,'Określ kategorię KJB ',''); | ||
+ | INSERT INTO sys_fld_validator_po VALUES (0,'T_katcol1_rule1_1','T_katcol1_rule1','katcol1',0,0,'NOT_EMPTY','','','',''); | ||
+ | </source> | ||
+ | |||
+ | '''Przykład 5:''' | ||
+ | |||
+ | Edycja operacji (coreid='O_n_') sprzedaży (grupaoper=0), pole katcol0 ma być różne od 0. | ||
+ | Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w polu condition_expr | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | <source lang=sql> | ||
+ | # UWAGA! to jeszcze nie działa! | ||
+ | # reguła walidacji | ||
+ | insert into sys_fld_validator_ng values | ||
+ | (0,'O_katcol0_rule1','O_n_',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','','grupaoper=0','','',''), | ||
+ | </source> | ||
+ | |||
+ | |||
+ | [[Kategoria: Administracja|Definicja regul pol obowiazkowych]] | ||
+ | [[Kategoria: MotlawaTech|Definicja regul pol obowiazkowych]] | ||
+ | [[Kategoria: MySQL|Definicja regul pol obowiazkowych]] | ||
+ | [[Kategoria: Programowanie|Definicja regul pol obowiazkowych]] |
Aktualna wersja na dzień 07:23, 15 wrz 2017
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 | |
GUID | varchar(38) | NO | UNI | ||
coreid | varchar(38) | NO | MUL | ||
rule_operator | int(11) | NO | 0 - AND 1 - OR | ||
rule_mode | int(11) | NO | 0 - cds, 1 - BeforePost, 2 - BeforeApply | ||
message_if_not_valid | text | YES | NULL | ||
comment | varchar(250) | YES | NULL |
Tabela sys_fld_validator_po
Field | Type | Null | Key | Default | Comment |
---|---|---|---|---|---|
idn | int(11) | NO | PRI | NULL | |
GUID | varchar(38) | NO | UNI | ||
GUID_NG | varchar(38) | NO | MUL | ||
fieldname | varchar(38) | NO | |||
rule_order | int(11) | NO | 0 | kolejność sprawdzania | |
admin | int(11) | NO | 0 | ||
validation_rule_type | varchar(20) | YES | NULL | ||
validation_rule | varchar(200) | YES | NULL | ||
condition_expr | varchar(250) | NO | jeszcze nie działa | ||
condition_ruleset_guid | varchar(38) | NO | MUL | ||
message_if_not_valid | text | YES | NULL | ||
level | int | NO | 0 |
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 -- UWAGA! to jeszcze nie działa!
Przykłady: fieldname='datawystaw' validation_rule_type='GREATER_EQ' validation_rule='2009-01-01' fieldname='opis' validation_rule_type='LENGTH_MIN' validation_rule='10' fieldname='rodzaj' validation_rule_type='EQ' validation_rule='10|11|12' - odpowiednik rodzaj in (10,11,12)
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.
Pole level określa poziom kontroli: 0 - restrykcyjnie (nie pozwala zapisać wartości niepoprawnej), 1 - tylko komunikat, 2 - komunikat z pytaniem czy na pewno zapisać (zmiana w wersjach od 2017-07-14)
Obsługiwane core_id (miejsca w systemie):
nagłówek operacji: 'O_n_' pozycje operacji : 'O_p_' towar 'T_'; kontrahent 'K_' nagłówek zamówienia 'ZM_n_' pozycje zamówienia 'ZM_p_' nagłówek kancelarii 'Kancelaria_'
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 - nagłówek (coreid='O_n_') 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_n_',0,2,'Określ handlowca! ',''); 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 zamówień (coreid='ZN_n_') od odbiorców i ex (rodzaj in (27,52), pole katcol0 ma być różne od 0. Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w polu condition_expr
Definicja:
# wersja uproszczona wykorzystuje operator | INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_rule1','ZM_n_',0,2,'Określ handlowca! ',''); INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_rule1_1','Z_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','','Z_katcol0_cond1',''); INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_cond1','',0,2,'',''); INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_cond1_1','Z_katcol0_cond1','rodzaj',0,0,'EQ','27|52','','',''); # wersja pełna wykorzystuje kolejny ruleset z OR INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_rule1','ZM_n_',0,2,'Określ handlowca! ',''); INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_rule1_1','Z_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','','Z_katcol0_cond1',''); INSERT INTO sys_fld_validator_ng VALUES (0,'Z_katcol0_cond1','',1,2,'',''); INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_cond1_1','Z_katcol0_cond1','rodzaj',0,0,'EQ','27','','',''); INSERT INTO sys_fld_validator_po VALUES (0,'Z_katcol0_cond1_2','Z_katcol0_cond1','rodzaj',0,0,'EQ','52','','','');
Przykład 4:
Kontrola wypełnienia dwu kategorii kolumnowych w towarach:
INSERT INTO sys_fld_validator_ng VALUES (0,'T_katcol0_rule1','T_',0,2,'Określ kategorię LED ',''); INSERT INTO sys_fld_validator_po VALUES (0,'T_katcol0_rule1_1','T_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','','',''); INSERT INTO sys_fld_validator_ng VALUES (0,'T_katcol1_rule1','T_',0,2,'Określ kategorię KJB ',''); INSERT INTO sys_fld_validator_po VALUES (0,'T_katcol1_rule1_1','T_katcol1_rule1','katcol1',0,0,'NOT_EMPTY','','','','');
Przykład 5:
Edycja operacji (coreid='O_n_') sprzedaży (grupaoper=0), pole katcol0 ma być różne od 0. Definicja z wykorzystaniem dodatkowego warunku zdefiniowanego w polu condition_expr Definicja:
# UWAGA! TO jeszcze nie działa! # reguła walidacji INSERT INTO sys_fld_validator_ng VALUES (0,'O_katcol0_rule1','O_n_',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','','grupaoper=0','','',''),