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

Joe Ammann joe at pyx.ch
Tue Aug 13 09:10:34 EDT 2013


On 08/13/2013 03:02 PM, Joe Ammann 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?
>
BTW: Just realized that those 2 rules would - in some cases - result in
and endless loop. Fixed that with a guard fact, but still my original
question remains.

-- 
CU, Joe



More information about the rules-users mailing list