0

drools でのリスト反復の問題に直面しています

GoodsShipmentにはGoodsItemsのリストがあり、 GoodsItemにはDocumentsのリストがあります

私の要件は、少なくとも 1 つのドキュメントが利用可能かどうかを確認する必要があるということです。

私はこれを試しましたが失敗しました

目的をチェックするためにクラスを書きました

public class CheckDocument {

    public boolean flag = false;
    public CheckPreviousDocument() {
    }
    public boolean getPreviousDocument(GoodsShipment goodsshipment) {
        List<GoodsItem> list = goodsshipment.getGoodsItems();
        Iterator<GoodsItem> itr = list.iterator();
        while (itr.hasNext()) {
            GovernmentAgencyGoodsItem document = itr.next();
            if (document.getDocuments().size() > 0) {
                flag = true;
                break;
            }
        }
        return flag;
    }
}




rule "previousDocuments minimum 1"

    when
        $o: GoodsShipment()
        %x: CheckPreviousDocuments(previousDocuments($o) == false)
    then
        insert(-------------)
end

誰でも私を助けてくれませんか..事前に感謝します

4

1 に答える 1

0

あなたのコードはやや変わっていますが、ルールはそうすべきです。Documentによって返されるリスト内の要素の型として使用したことに注意してくださいGovernmentAgencyGoodsItem.getDocuments()

rule atLeastOne
when
    $gs: GoodsShipment()
    List( size > 0 )
    from accumulate ( $gi: GoodsItem() from $gs.getGoodsItems() and
                      $d: Document() from $gi.getDocuments();
                      collectList( $d ) )
then
    // $gs contains at least one Document
end
于 2014-11-27T16:28:40.060 に答える