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

Z Motława
Linia 157: Linia 157:
 
   
 
   
 
  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,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '),
Linia 167: Linia 167:
 
   (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.
Linia 175: Linia 176:
 
   
 
   
 
  Definicja:
 
  Definicja:
+
<source lang=sql>
 
   insert into sys_fld_validator_ng values  
 
   insert into sys_fld_validator_ng values  
 
   (0,'O_katcol0_rule1','O_',0,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '),
 
   (0,'O_katcol0_rule1','O_',0,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '),
 
   (0,'O_katcol0_cond1',"",0,"");
 
   (0,'O_katcol0_cond1',"",0,"");
+
 
 
   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',"",'O_katcol0_cond1',""),
 
   (0,'O_katcol0_cond1_1','O_katcol0_cond1','grupaoper',0,0,'EQ','0',"","");
 
   (0,'O_katcol0_cond1_1','O_katcol0_cond1','grupaoper',0,0,'EQ','0',"","");
 
+
</source>
  
 
[[Kategoria: Administracja]]
 
[[Kategoria: Administracja]]
 
[[Kategoria: MySQL]]
 
[[Kategoria: MySQL]]

Wersja z 09:42, 24 mar 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
idn int(11) NO PRI NULL
GUID varchar(38) NO UNI
coreid varchar(38) NO MUL
rule_operator int(11) NO
message_if_not_valid text YES NULL


Tabela sys_fld_validator_po

Field Type Null Key Default
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
admin int(11) NO 0
validation_rule_type varchar(20) YES NULL
validation_rule varchar(200) YES NULL
condition_ruleset_guid varchar(38) NO MUL
message_if_not_valid text YES NULL




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=0) - czyli wystarczy spełnienie jednego z warunków.

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,'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');
 
  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,'NOT EMPTY',"","",""),
  (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:
 
  INSERT INTO sys_fld_validator_ng VALUES 
  (0,'O_katcol0_rule1','O_',0,'Wartosc pierwszej kategorii kolumnowej musi byc okreslona! '),
  (0,'O_katcol0_cond1',"",0,"");
 
  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_cond1_1','O_katcol0_cond1','grupaoper',0,0,'EQ','0',"","");