Code: Definicja regul pol obowiazkowych: Różnice pomiędzy wersjami

Z Motława
 
(Nie pokazano 47 wersji utworzonych przez 5 użytkowników)
Linia 3: Linia 3:
 
Mechanizm definiowanej walidacji pól aktywowany jest kluczem w [[Edytor_kluczy_rejestru|Rejestrze systemowym]] o nazwie '''walidacja_pol_aktywna'''.
 
Mechanizm definiowanej walidacji pól aktywowany jest kluczem w [[Edytor_kluczy_rejestru|Rejestrze systemowym]] o nazwie '''walidacja_pol_aktywna'''.
  
Struktury tabel odpowaidających za definicje walidacji pól:
+
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=2 cellpadding=5 style="border: 1px solid #888888; border-collapse: collapse; padding: 5px;"   
+
{| 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;" | Field
 
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Type
 
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" | Type
Linia 13: 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 20: 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; "|
  
 
|-
 
|-
Linia 26: Linia 30:
 
| style="text-align:left; border: 1px solid #888888; "| NO
 
| 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; "| 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; "|  
 
|-
 
|-
Linia 32: Linia 37:
 
| style="text-align:left; border: 1px solid #888888; "| NO
 
| 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; "| 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; "|  
 
|-
 
|-
Linia 39: 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; "| 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;" |  message_if_not_valid   
Linia 45: 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; "|
 +
|-
 +
| 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''
 
''Tabela sys_fld_validator_po''
{| class="prettytable" cellspacing=2 cellpadding=5 style="border: 1px solid #888888; border-collapse: collapse; padding: 5px;"   
+
{| 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;" |  Field   
 
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" |  Type   
 
! style="text-align:left; border: 1px solid #888888; background: #eeeeee;" |  Type   
Linia 55: 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 61: 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; "| 
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  [[GUID]]   
 
| style="text-align:left; border: 1px solid #888888;" |  [[GUID]]   
Linia 67: 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; "| 
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  GUID_NG   
 
| style="text-align:left; border: 1px solid #888888;" |  GUID_NG   
Linia 73: 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; "| 
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  fieldname   
 
| style="text-align:left; border: 1px solid #888888;" |  fieldname   
Linia 79: 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; "| 
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  rule_order   
 
| style="text-align:left; border: 1px solid #888888;" |  rule_order   
Linia 85: 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; "|  kolejność sprawdzania
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  admin   
 
| style="text-align:left; border: 1px solid #888888;" |  admin   
Linia 91: 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; "| 
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  validation_rule_type   
 
| style="text-align:left; border: 1px solid #888888;" |  validation_rule_type   
Linia 97: 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; "| 
 
|-
 
|-
 
| style="text-align:left; border: 1px solid #888888;" |  validation_rule   
 
| style="text-align:left; border: 1px solid #888888;" |  validation_rule   
Linia 103: 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; "| 
 +
|-
 +
| 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;" |  condition_ruleset_guid   
Linia 109: 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; "| 
 
|-
 
|-
 
| 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 115: 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; "| 
 +
|-
 +
| 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; "| 
 
|}
 
|}
  
Pole validation_rule przyjmuje wartości:
+
 
  NOT NULL, NOT EMPTY,  
+
----
  EQ, NOT EQ, LESS, LESS EQ, GREATER, GREATER EQ,  
+
 
  LENGTH EQ, LENGTH MAX, LENGTH MIN
+
 
  DEFAULT
+
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ładowe definicje walidacji:'''
  
Przykład 1:
+
'''Przykład 1:'''
  
  Karta kontrahenta, pole katcol0 ma być różne od 0, a długość pola NIP ma być równa 10 lub 12 lub 0
+
  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:
 
  Definicja:
+
 
 +
 
 +
<source lang="sql">
 +
 
 
   insert into sys_fld_validator_ng values  
 
   insert into sys_fld_validator_ng values  
   (0,'K_rule1','K_',0,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '),
+
   (0,"K_rule1","K_",0,2,"Wartosc pierwszej kategorii kolumnowej musi byc okreslona!",""),
   (0,'K_rule2','K_',1,'Pole NIP może mieć długość 10,12 znaków bądź być puste');
+
   (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  
 
   insert into sys_fld_validator_po values  
   (0,'K_katcol0_rule1_1','K_rule1','katcol0',0,0,'NOT EMPTY','','',''),
+
   (0,"K_katcol0_rule1_1","K_rule1","katcol0",0,0,"NOT_EMPTY","","","",""),
   (0,'K_nip_rule1_1','K_rule2','nip',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_2","K_rule2","nip",0,0,"LENGTH_EQ","10","","","",""),
   (0,'K_nip_rule1_3','K_rule2','nip',0,0,'LENGTH EQ','12','','');
+
   (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.
 
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:
+
'''Przykład 2:'''
  
  Edycja operacji sprzedaży (grupaoper=0), pole katcol0 ma być różne od 0.
+
  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:
 
  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:
 +
 
   
 
   
   insert into sys_fld_validator_ng values (0,'O_katcol0_rule1','O_',0),(0,'O_katcol0_cond1','',0);
+
 
 +
<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  
 
   insert into sys_fld_validator_po values  
   (0,'O_katcol0_rule1_1','O_katcol0_rule1','katcol0',0,0,'NOT EMPTY','','O_katcol0_cond1',
+
   (0,'O_katcol0_rule1_1','O_katcol0_rule1','katcol0',0,0,'NOT_EMPTY','','grupaoper=0','','',''),
  'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '),
+
</source>
  (0,'O_katcol0_cond1_1','O_katcol0_cond1','grupaoper',0,0,'EQ','0','','');
+
  
  
[[Kategoria: Administracja]]
+
[[Kategoria: Administracja|Definicja regul pol obowiazkowych]]
[[Kategoria: MySQL]]
+
[[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','','',''),