[rules-users] Binding a variable with an OR pattern

Wolfgang Laun wolfgang.laun at gmail.com
Tue Aug 13 09:18:05 EDT 2013


rule "R7012: UpdateInstrumentsIssuerFrom700[01]"
agenda-group "TRANSFER_TO_LIVE"
salience 100
when
    sirole : SourcingInstitutionRole(sourcing_Status ==
SourcingStatus.IMPORTED,
                                     roleCd == "7000"  || == "7001")

and minor changes in the then part.

-W


On 13/08/2013, Joe Ammann <joe at pyx.ch> wrote:
> Hi all
>
> Trying to do the following: as one pattern of a rule, I want to bind a
> variable to a fact with code "7001", or (if such a fact does not exist)
> to one with the value "7000".
>
> Until now, I haven't been able to formulate this in one single rule, as
> simple as it sounds - probably I'm just overlooking something basic ...
>
> Currently I have 2 rules:
>
> rule "R7012: UpdateInstrumentsIssuerFrom7001"
> agenda-group "TRANSFER_TO_LIVE"
> salience 100
> when
>     sirole : SourcingInstitutionRole(sourcing_Status ==
> SourcingStatus.IMPORTED,
>                                      roleCd == "7001" )
>     insti  : Institution ( ids != null, ids.sspFI ==
> sirole.institutionProviderId )
>     instr  : Instrument ( ids != null, ids.sspFI == sirole.providerId,
> issuer.issuerId != insti.id )
> then
>     tlog.info("Modify issuer of {} to {} (from role code 7001)", instr,
> insti);
>     modify (instr) {
>         issuer.issuerId = insti.id
>     }
> end
>
> rule "R7012: UpdateInstrumentsIssuerFrom7000"
> agenda-group "TRANSFER_TO_LIVE"
> salience 100
> when
>     sirole : SourcingInstitutionRole(sourcing_Status ==
> SourcingStatus.IMPORTED, roleCd == "7000" )
>     insti  : Institution ( ids != null, ids.sspFI ==
> sirole.institutionProviderId )
>     instr  : Instrument ( ids != null, ids.sspFI == sirole.providerId,
> issuer.issuerId != insti.id )
>     not SourcingInstitutionRole(sourcing_Status == SourcingStatus.IMPORTED,
>                                 providerId == instr.ids.sspFI,
>                                 institutionProviderId == instr.ids.sspFI,
>                                 roleCd == "7001" )
> then
>     tlog.info("Modify issuer of {} to {} (from role code 7000)", instr,
> insti);
>     modify (instr) {
>         issuer.issuerId = insti.id
>     }
> end
>
> This seems to work, but I would have expected that it should be easy to
> do this in one single rule !? But I just can't come up with a rule that
> does what I want...
>
> How would I formulate such as rule?
>
> --
> CU, Joe
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>


More information about the rules-users mailing list