0

このフローでは、フィルターが「false」を返してもフローが継続することを確認しました。しかし、ペイロードはわずかに異なります。これらのメッセージを完全に停止する必要があります。

<foreach doc:name="For Each">
            <choice doc:name="Choice">
                式="#[payload['event'] に 'delete' が含まれている場合]">
                    <!-- このパスはこの質問とは関係ありません -->  
                </when>  
                <そうでなければ>
                    <flow-ref name="getMessages" doc:name="FlowToGetMessages"/>  
<!-- これ (以下) は、上記のフローから返された配列から単一の行の値 (マップ) を抽出します -->
                    <collection-splitter doc:name="コレクション スプリッター"/>
                    <expression-filter 式="#[ペイロード['アクティビティ'] != null && ペイロード['アクティビティ'] != "" ]" doc:name="空の行をブロック"/>
                    <custom-filter class="package.BlockNullAnnouncementEvents" doc:name="Block null"/>
                </それ以外の場合>  
            </選択>
...

次のプロセッサ (選択後) は、A) メッセージがフィルタ テスト BlockNullAnnouncementEvents に合格した場合は単一の値、または B) null が存在し、フィルタが同じテストに失敗した場合は 1 つの値の配列を取得します。

これは、メッセージがフィルター テストに失敗した場合、フロー getMessages への呼び出しの結果が for-each の先頭に返され、choice ブランチの後のフローの次の部分に渡されるように見えます。フィルターが含まれています。

4

1 に答える 1

1

実行後、ここで説明されているように、foreach は元のメッセージを復元します。

実行を停止したい場合は、メッセージ フィルタを使用し、Throw On Unaccepted を true に設定する必要があります。

于 2013-10-09T12:20:10.240 に答える