Criando uma nova condição XML avançada
Depois de criar o arquivo *.greex, é possível definir uma condição XML avançada ou regra Greex.
- Condição XML avançada normal
- Tabela de Decisão baseada na condição XML avançada.
Condição XML avançada normal
Depois de criar o arquivo *.greex, é possível definir uma condição XML avançada normal ou regra Greex.
A condição XML avançada normal é útil em cenários onde é necessário definir diversos critérios de condição para uma condição XML avançada, necessária para definir diversos critérios de condição, e cada critério de condição é associado a diferentes atributos. Esses diversos critérios de condição são definidos usando construções IF e ELSE aninhadas. Por exemplo, pode ser que você deseje criar uma condição XML avançada normal para os critérios de condição, como:
If Ordertype="WEB" and OrderQty="100", then TaxExemptFlag="N".
Else
If OriginalTotalAmount="1000" and OrderLine>"5", then
discount="10" TaxExemptFlag="Y".
Else TaxExemptFlag="N".Neste caso, temos diversos critérios de condição e cada critério de condição possui diferentes atributos associados a ele. O primeiro critério de condição possui Ordertype, OrderQty e Discount associados a ele. Enquanto que o segundo critério de condição possui OriginalTotalAmount, OrderLine e TaxExemptFlag associados a ele.
Esses critérios de condição são definidos no arquivo *.greex usando construções IF E ELSE aninhadas. A seguir um arquivo *.greex de amostra para a condição XML avançada:
<GreexRule desc="Determine Discount and Tax Exemption based on
various attributes"
id="getDiscountTaxExempt"
name="Get Discount and Tax Exempt"
returnType="Xml"
type="">
<If>
<Condition name="isDiscount20?">
<Group op="and">
<Expression>fn:equals(@orderType, "WEB")</Expression>
<Expression>fn:equals(@orderQty, "100")</Expression>
</Group>
</Condition>
<Return>
<Value output="<Order TaxExemptFlag="N"/>"/>
</Return>
</If>
<Else>
<If>
<Condition name="TaxExempted?">
<Group op="and">
<Expression>fn:equals(@OriginalTotalAmount, "1000")</Expression>
<Expression>fn:intGreater(@orderLine,"5")</Expression>
</Group>
</Condition>
<Return>
<Value output="<Order discount="10"
TaxExemptFlag="Y"/>"/>
</Return>
</If>
<Else>
<Return>
<Value output="<Order discount="20"
TaxExemptFlag="N"/>"/>
</Return>
</Else>
</Else>
</GreexRule>Tabela de decisão baseada na condição XML avançada
Depois de criar o arquivo *.greex, é possível definir uma condição XML avançada normal ou regra Greex.
A tabela de Decisão baseada em condições XML avançadas são úteis em cenários onde existem diversos critérios de condição aninhados a serem definidos para uma condição XML avançada, mas cada critério de condição possui os mesmos atributos associados a ele. Nesses casos, é possível gravar apenas uma condição e ter uma tabela de parâmetros que funciona como uma instrução de comutação. Na tabela de decisão baseada em condição XML avançada é possível definir diversos critérios de condição aninhados em uma construção IF. Assim, não há construção ELSE no caso da tabela de decisão baseado em condições XML avançadas. A construção IF contém uma matriz de valores constantes, ao invés de um valor constante como costumava ser em caso de condições XML avançadas normais. A construção IF possui uma tabela de parâmetros que funciona como uma instrução de comutação.
If Ordertype="WEB" and OrderLineQty="200", then Discount="5".
Else
If Ordertype="STORE" and OrderLineQty="500", then Discount="7"
Else
If Ordertype="CALL" and OrderLineQty="250", then Discount="3".
Else
default="0"A seguinte tabela de decisão descreve o cenário anterior:
Tipo de Ordem |
Quantidade de Linha de Pedido |
Desconto |
|---|---|---|
WEB |
200 |
5 |
Loja |
500 |
7 |
CALLCENTER |
250 |
3 |
padrão 0 |
||
Neste caso, temos diversos critérios de condição, mas cada critério de condição possui os mesmos atributos associados a ele. Todos os casos de condição possuem os atributos Ordertype, OrderLineQty e Discount associados a ele. Portanto, esta condição XML avançada possui somente uma construção IF e ela contém uma matriz de valores constantes.
Esses critérios de condição são definidos no arquivo *.greex usando construções IF. A seguir um arquivo *.greex de amostra para a condição XML avançada baseada na tabela de decisão:
<GreexRule desc="Determine Discount based on some attributes"
id="getDiscount"
name="Get Discount"
returnType="String"
type="DecisionTable">>
<If>
<Condition name="isDiscount5?">
<Group op="and">
<Expression>fn:equals(@orderType,
"WEB|STORE|CALLCENTER")</Expression>
<Expression>fn:equals(@orderLineQty, "200|500|250")</Expression>
</Group>
</Condition>
<Return>
<Value default="0" output="5|7|3"/>
</Return>
</If>
</GreexRule>