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

Z Motława
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',"",""),