0

すべての「OpEx」をチェックする配列があります。これらはすべて次のような形式になります。

<opex code = "##">
<nettAmount></nettAmount>
<grossAmount></grossAmount>
<accessibility></accessibility>
</opex>

これらは50ある可能性があるので、特定のもの(「MA」としましょう)を取り、その金額などを設定したいのですが、次のものがありますが、新しいopexを作成してその値を設定する方法しか知りません.
既存の opex の値を変更する方法がわかりません。(配列がアイテムにアクセスしている間はアイテムを編集できないため、ブール値を使用しました。

rule "Testing"
salience 500
when
    $result : Result($opexs : optionalExtras)
    Policy($rType : rtpType)
then
        boolean opexThere = false;
        for (OptionalExtra oe : (ArrayList<OptionalExtra>) $opexs){
        logger.info("Array created – Size = ["+$opexs.size()+"]");
            if (oe.getCode().equals("MA"))
            {
                boolean opexThere = true;
            }
            if (opexThere){
            #OptionalExtra opex = new OptionalExtra();
            logger.info("OpEx MA exists original net/gross = ["+oe.getCode()+"-/-"+oe.getNettAmount()+"-/-"+oe.getGrossAmount());
                opex.setNettAmount(1000);
                opex.setGrossAmount(1000);
                opex.setAccessibility("C");
                $result.addOptionalExtra(opex);
                $result.setOpexFlexed(true);
            }               
        }
end

# を削除して opex.setCode("MA"); を含める場合 これは単に 2 番目の MA opex を作成するだけであり、これは私がやりたいことではありません。既存の Opex を編集する必要があります。

私は通常これに使用するさまざまな手法を試しましたが、何も機能しないように見えるので、どんな助けも大歓迎です。

4

1 に答える 1

0

考えすぎて初心に返って即解決、

rule "modify Opex"
no-loop true
when
    $result : Result($opexList : optionalExtras)
then
       for(OptionalExtra $opex : (ArrayList<OptionalExtra>)$opexList)       {
              if ($opex.getCode().equals("A3")) {
                     $opex.setGrossAmount(1000);
                     logger.info("Amended OPEX " + $opex.getCode());
                     $result.setOpexFlexed(true);
                     $result.setRulesetChanged(true);
              }
       }
end

Java/Drools の混同について申し訳ありません。

于 2013-06-04T13:06:06.513 に答える