複数の集計呼び出しを含む集計定義式の例
このトピックでは、1 つの定義式で複数の集計呼び出しを使用する例と、同じイベントが 2 回発生するのを防ぐ方法を示します。
参照ワークフロー
TallyExpressionWithTwoTallyCalls.xml
説明
1 つの定義式内に複数の集計呼び出しを指定できます。ただしこの場合は、同じルーティングイベントがイベントリストに複数回追加されるリスクが発生します。これを防ぐには、この例にあるように setEvents() メソッドを使用します。このメソッドにより、複製でないルーティングイベントが集計されるので、リスト内のルーティングイベントはそれぞれ 1 回だけ発生します。下記の定義式により、"Test" が選択された回数が集計され、結果がベクトル tallyResults に保存されます。続いて、3 つのうち "Modify," を選択したタスク実施者の割合が集計されます。この集計の結果はベクトル tallyResults に追加されます。setEvents メソッドを使用することにより、"Modify" イベント (両方の集計呼び出しで表示) が、発生するイベントのリストに 2 回表示されるのを防げます。さらに、結果はベクトル tallyResults に設定されます。
指示
このアクティビティのルーティングイベントの個数はいくつでもかまいません。ワークフロー定義で必須として選択されているタスク実施者の投票のみを集計に使用します。
以下のコードをコピーします。
//Create a vector that will hold all the non-duplicated UserEvents chosen for this activity.
Vector tallyResults = new Vector( );
//Get the object representing this activity.
wt.workflow.work.WfAssignedActivity mySelf = (( wt.workflow.work.WfAssignedActivity ) self.getObject( ));
//Get all the UserEvents for this activity. The resulting Vector may hold duplicate values of some events.
Vector userEvents = (Vector) mySelf.getUserEventList( );
//If "Test" receives 2 or more of the required votes, get "Test", else get "Modify".
//Collect the non-duplicated events into the Vector tallyResults ( i.e add only those events that do not already exist in the vector.
WfTally.setEvents(tallyResults , wt.workflow.work.WfTally.number(self , WfTally.GTE, 2, "Test", "Modify"));
//If "Modify" receives more than 35% of the required votes, get "Modify" else get "Approve and Release".
//Collect the non-duplicated events into the Vector tallyResults ( i.e add only those events that do not already exist in the vector.
WfTally.setEvents(tallyResults , wt.workflow.work.WfTally.percent(self , WfTally.GT, 35, "Modify", "Approve and Release"));
//set result to the tallyResults Vector.
result= tallyResults