WorkItems (ワークフロー内では ManualActions と表示されています) の数とサイズによって、メモリーとシステムパフォーマンスが著しく影響を受けることがあります。デフォルトでは、WorkItem に Identity Manager が全体ワークフローのコンテキストをコピーしてから、送信後にこのワークフローコンテキストを書き戻します。
WorkItems と ManualActions のパフォーマンスを向上させるには、次の手順に従ってください。
WorkItems のサイズを減らします。
デフォルトでは、ManualAction が WorkItem を作成してから、そのタスクコンテキストのそれぞれの変数を WorkItem.variables にコピーします。タスクコンテキスト変数を制限すると、並列承認から上書きされなくなります。
WorkItem へコピーし直される変数を制限するには、ExposedVariables を使用します。たとえば、次のようにします。
<ExposedVariables><List><String>user ...
WorkItem から実行中のタスクへ解析し直される変数を制限するには、EditableVariables を使用します。たとえば、次のようにします。
<EditableVariables><List><String>user ...
承認フラグ、フォームボタンの値、および実際の承認者名を必ず含めてください。
確認ページとバックグラウンド処理を変更し、ユーザーインタフェースの応答時間を向上させます。
設定プログラムなどの別ユーザーが所有している、確認の ManualAction またはバックグラウンドの ManualAction を作成します。
タスクが実行されて WorkItems が削除されてからユーザーがアクションを送信する場合にエラーメッセージが表示されないようにするには、timeout=’-5’ (5 秒) と ignoreTimeout=’true’ を設定します。
値のマップやリストなどの大きな属性値を送信時に null に設定してメモリー使用を最適化します。または、スコープからすばやく排出されるようにそれらを Activity スコープ指定変数としてインスタンス化します。
完了したタスクの有効期間を短くします。
各 WorkItem に Timeout を指定してそのワークフローが Timeout を WorkItem ごとに予測するようにして、デッドエンドのタスクがなくなるようにします。
タスク完了後のスケジューラによるタスクの処理方法がわかるよう、TaskDefinition の resultLimit と resultOption オプションを使用するようにします。
resultLimit を使用して、タスク完了後のタスクの有効期間を秒単位で制御します。デフォルトのサイズはゼロ (0) です。つまり、タスク完了後にタスクインスタンスが即時削除されます。
resultOption を使用して、タスクの繰り返しインスタンスが開始されたときに行うべき動作を指定します (wait、delete、rename、または terminate など)。デフォルトは delete です。
正常に完了したタスクを即時削除するとはいえ、デバッグできるまでエラーを含むタスクを残しておくには、条件付きで完了したタスクを削除することもできます。
TaskDefinition の resultLimit に、問題をデバッグするのに十分な期間を設定します。WorkflowServices 呼び出し後に、実行時にエラーが何も報告さければ(WF_ACTION_ERROR が <null/> など)、resultLimit を 0 (または 小さい値) に設定できます。
うまくスコープ指定されていない変数を評価して修正します。次のように、宣言された場所に応じて変数をスコープ指定します。
Global 変数は、多くの動作 (ケース所有者やビューなど) に使用され、サブプロセス内で承認フラグとして使用されるべき値です。
<TaskDefinition> の要素として宣言されている変数があれば、その変数をグローバルにスコープ指定してください。external に宣言されている変数があれば、その値はスタックの呼び出し時に解決されます。
負荷の掛かる値の Activity 変数 (リソースのフェッチを必要としたり、大きなリストやマップの値を格納する Activity 変数など) が、WorkItem で参照されることがあります。
<Activity> 要素として宣言されている変数があれば、その変数を Activity 内の動作と遷移要素に表示されるようにします。
Identity Manager Version 2005Q3M1 SP1 以降は、WorkItem の作成に値がコピーされないよう、ワークフローではなくフォームに <Activity> 変数値を使用してください。
Activity 変数は、遷移ロジックで使用される値です。
<Action> の要素として宣言されている変数があれば、動作の完了時にその変数がスコープを配るはずです。Action 変数は通常、アプリケーションから設定された変数名 (View -> User など) を「変更」するために WorkflowApplication の呼び出しで使用されます。
ウィザードのワークフローの最終ページには、同期実行 (syncExec='true') を指定しないでください。
true に設定すると、ユーザーがタスクを実行したときに、そのタスクが完了するまで実行されます。そのタスクが完了するか、別の停止点 (別の ManualAction など) に達するまでインタフェースがハングしてしまいます。
不要な承認チェックを削除します。
Active Sync には、viewOptions.Process から指定されたシステム指定のプロビジョニングタスクの代わりに、能率的なプロビジョニングタスクを使用します。
Identity Manager に用意されているプロビジョニングタスクは変更しないでください。
(リストされていないタスクである限り、) タスクを新規作成してから、フォームと処理マッピング構成の中でそのタスクを指定します。