Regras. Conhecemos essa palavra desde a infância. Primeiro, os pais nos ensinam como fazer a coisa certa, depois vamos para a escola, onde os professores ditam suas próprias regras. Na universidade, somos novamente confrontados com as regras que os professores e a reitoria nos estabeleceram. À medida que crescemos, começamos a seguir as leis que são desenvolvidas pelo estado. O que todas essas regras têm em comum? O fato de que eles foram verificados ao longo dos anos, décadas e algumas até gerações. Imagine como seria a nossa vida se as regras fossem alteradas com frequência: todas as semanas ou todos os dias!

, Mediascope, : , . . -. , , .
?
, . ( ) - . BRMS Business Rule Management System. ,
- , -. , - , - .
, , «», . . : , , , , . , !
BRMS . : IBM, Red Hat, Agiloft, SAS Bosch. – , . JBoss Drools. , , , , - DRL, Excel-. UI- . , UI Excel-.
- ?
- , . , , , . .
, (gender). (SEX). , gender = male, «» 1. 2. DRL :
rule "Rule 1 Example 1"
when
$s: Respondent($s.gender == "male")
then
$s.addResult("SEX", "1");
end
rule "Rule 2 Example 2"
when
$s: Respondent($s.gender == "female")
then
$s.addResult("SEX", "2");
end
, , Gherkin. , ( when) , ( then). Drools Left Hand Side ( LHS), - Right Hand Side ( RHS). : Respondent. fact, Drools, . gender result. , , framework . $.
Excel-:

?
, , , , . , Drools , Miscrosoft Excel OpenOffice, CSV. DRL-.
: . RuleSet, – RuleTable. , .

DRL- . - . . :
RuleSet – DRL.
Import – , Java-, , , java.lang.Math
Functions – , RuleSet’. DRL-.
, RuleTable, , , Drools DRL-. . nameforRuleTable.

:
NAME – . .
DESCRIPTION – . . , .
CONDITION – Left Hand Side , ACTION. .
ACTION – , . addResult, Map . . ACTION Java-, . .
, CONDITION ACTION .
, $s Respondent. , , , Import. CONDITION , . CONDITION-: , Import.
, , CONDITION ACTION, . , . . (Text-Parameter-Result ). . /, , Drools . .
?
, , . .
, Respondent. – , . (, , ). , , Drools, Respondent. , Map<String, String> result, . , Respondent :
public class Respondent {
public int id;
public String gender;
public Boolean isActive;
public Integer age;
public List<String> pets;
public String city;
public List<String> devices;
public Map<String, String> properties;
public Car car;
public MobileBrand mobileBrand;
public Household household;
public Map<String, String> result = new HashMap<>();
public void addResult(String key, String value) {
result.put(key, value);
}
// getters, setters, constructor
}
, , . , , ? isActive. true – , false – .

, : . , , , . Respondent. DRL:
rule "name_for_RuleTable_20"
when
$s: Respondent(isActive == true, gender == "male")
then
$s.addResult("SEX", "M");
end
rule "name_for_RuleTable_21"
when
$s: Respondent(isActive == true, gender == "female")
then
$s.addResult("SEX", "F");
end
$param - . isActive == $param isActive == true. . Drools , . , gender.
. :

, - 17 18 . , .
, – . , . , , PHONE_SALES_PER 2019 . , $param . , MobileBrand Import .

, . , ACTION $param, . . in:

: SAMSUNG APPLE, PREMIUM. , HUAWEI XIAOMI, NOT_PREMIUM. ( , :) ) , .
, ? contains. java.util.Collection. Respondent pets. , . , , . « » – , $param .

: forall(<>){<>}. . , . , , . . , , , param. , – ($s). , , Drools , - (city devices), CONDITION .

, – . size:

- , , . «-». Drools :

, . . , Car c : , , . , , . , -, . from:

, . , , Car, Respondent, Map<String, String> properties . POWER. Drools getValue. Functions :

:

, . : , PlayStation. , Household Respondent TVDevices PlayStation. :

?
. ACTION? , Java. . , , ACTION .
Drools, :
set – , Drools ;
update – , set;
modify – , , ;
insert – .
modify.

RuleTable , - 99 0. , $r, Respondent’a false. RuleTable isActive REJECTED TRUE.
CONDITION. , . , , . . Drools . , , , .
Drools (https://github.com/sxexesx/drools-decision-table).
Obrigado pela atenção! Espero que este artigo seja útil para aqueles que desejam mergulhar no maravilhoso mundo do BRMS!