イベントリスニング

イベントリスニングとは

イベントリスニングは、主に次の2つの用途に使用されます。

  1. イベントにロジックを追加する - 処理フローツールには、イベントリスニングアクティビティがあり、3Dモデル内の特定のイベントをリッスンし、このイベントが発生したときに実行されるカスタムロジックを追加できます。FlexScriptを使用しても、3Dモデルイベントにカスタムロジックを追加できます。イベントリスニングは、処理フローを3Dモデルにリンクする最も一般的な方法の1つです。
  2. 統計を収集する - 統計コレクターは、3Dモデルと処理フローツールの両方のイベントをリッスンし、それらのイベントからデータを収集できます。このツールを使用すると、独自のビジネスシステムの分析ニーズに合わせたカスタム統計を作成できます。

イベントリスニングの要件

いずれかのイベントリスニングツールを使用している場合、次の2つの基本的な質問に答える必要があります。

  1. このアクティビティはどのオブジェクトをリッスンしますか?
  2. そのオブジェクトのどのイベントがトークンの作成、リリースをトリガーしますか?

つまり、イベントリスニングアクティビティを設定するには、オブジェクトとイベントの両方が必要になります。これら2つの要件は通常、イベントリスニングツールのプロパティと相関します。

オブジェクト

リンク先のオブジェクトを決定する際、いくつかの選択肢があります。

  • 静的オブジェクト - 3Dオブジェクトや処理フロー内の別のアクティビティなど、シミュレーションモデル内の特定の静的オブジェクトにリンクできます。
  • 動的オブジェクト - オブジェクトを状況依存型、つまり、特定の条件に基づいて変化するように設定できます。
  • オブジェクトのグループ - オブジェクトのグループにリンクできます。アクティビティは、そのグループのいずれかのメンバーでイベントが起動するとリッスンします。
  • フローアイテムまたはトークン - フローアイテムまたはトークンに動的にリンクできます。たとえば、フローアイテムが固定リソースから出たり、トークンがアクティビティから離れたりするのをリッスンできます。
  • モデリングツール - ツールボックスにあるツールの多くは、リッスンできるイベントに関連付けられています。これは特に、ダウンタイムやアップタイムをリッスンできるタイムテーブルのようなオブジェクトに便利です。

イベント

一般に、2つの異なるタイプのイベントがあります。

  • 標準イベント - シミュレーション実行中に発生する通常のシミュレーションイベントで、固定リソースに入るアイテムや処理フローのアクティビティに入るトークンなどがあります。各イベントにはトリガーが関連付けられており、そのイベントが発生したときに起動します。シミュレーションイベントとトリガーのより詳しい説明については、「イベントについての主要な概念」を参照してください。
  • 統計イベント - 統計イベントは、オブジェクトの統計値が変更されたとき、またはオブジェクトが特定の状態になったときに発生します。たとえば、キュー内のアイテム数が変化するタイミングやプロセッサがアイドル状態になるタイミングなどをリッスンできます。

選択したアクティビティがシミュレーションモデルで発生するたびに、イベントリスニングアクティビティは、トークンを作成、リリースします。

イベントパラメータとラベルの割り当て

標準のオブジェクトベースのイベントには、特定のパラメータが関連付けられています。これらのパラメータには、イベントをトリガーしたフローアイテムやトークンなど、イベントに関する基本情報が含まれています。通常、この情報の一部を保持するには、他の処理フローアクティビティから参照できるラベルに入れたり、統計コレクターのデータテーブルに値を入れたりします。

この情報を保持する最善の方法は、イベントリスニングツールで使用できる[ラベルの割り当て]または[ラベルマッチング]テーブルを使用することです。このテーブルについては、「ラベルマッチング」のトピックで詳しく説明します。

戻り値をオーバーライドする

イベントリスニングの処理フローアクティビティには、サブフローで使用される際に、リッスンするイベントの戻り値をオーバーライドできる機能があることに注意してください。たとえば、「処理フローチュートリアル3 - サブフロー」に示すように、プロセッサの処理時間を定義するために、処理フローツールを使用して何らかの複雑なロジックを実行してもいいかもしれません。

イベントリスニングを設定する

イベントリスニングの設定に使用する方法は、1)使用しているツールと、2)リッスン対象のオブジェクトのタイプによって異なります。

処理フローのイベントリスニング

処理フローツールでイベントをリッスンするには、イベントリスニングアクティビティを使用する必要があります。イベントをリッスンできる処理フローアクティビティは次の2つです。

  • イベントトリガーソース - このアクティビティはシミュレーションモデルで発生する特定のイベントをリッスンします。そのイベントが発生すると、1つ以上の新しいトークンが作成され、処理フローの次のアクティビティにトークンが送信されます。トリガーイベントで処理フローを開始させる場合、イベントトリガーソースを使用します。
  • イベントを待つ - このアクティビティはトークンを受け取った後、トークンを保持しながらシミュレーションモデル(または処理フロー)で特定のイベントが発生するのを待ちます。そのイベントが発生すると、処理フローの次のアクティビティにトークンがリリースされます。必要であれば、「イベントを待つ」を[決定]アクティビティのように動作させることもできます。つまり、「イベントを待つ」アクティビティは、シミュレーションモデルの特定の条件に基づき、次の異なるアクティビティにトークンを送信することがあります。

これら2つのアクティビティには、リッスンするオブジェクトイベントを指定できるプロパティがあります。

統計コレクターのイベントリスニング

統計コレクターツールでイベントリスニングを設定する方法の詳細については、「統計コレクターを使用する - イベントを追加する」を参照してください。

静的オブジェクトをリッスンする

静的オブジェクトのイベントリスニングを設定する前に、リッスンするオブジェクトが3Dモデルまたは処理フローに追加されていることを確認してください。

静的オブジェクトのイベントリスニングを設定するには:

  1. 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
  2. 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
  3. オブジェクト]ボックスの横にある[サンプラー]ボタン をクリックし、サンプリングモードにします。リッスンするオブジェクトをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから適切なイベントを選択します。
  4. 選択したオブジェクトとイベントは、アクティビティのプロパティにある[オブジェクト]ボックスと[イベント]ボックスの両方に表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。

動的オブジェクトをリッスンする

オブジェクトを状況依存型、つまり、特定の条件に基づいて変化するように設定できます。これを行う1つの方法として、一般的な処理フローを除くどのタイプの処理フローにもcurrentキーワードを使用することがあります。イベントリスニングアクティビティは、その処理フローの各インスタンスに関連付けられているオブジェクトをリッスンします(詳細については、「処理フローインスタンス」を参照してください)。

一般的な処理フローでは動的オブジェクトをリッスンできないことに注意してください。ただし、それ以外の3つの処理フローのタイプでは可能です。

動的オブジェクトのイベントリスニングを設定する前に、3Dモデルまたは処理フローをリッスンするオブジェクトのタイプを少なくとも1つ追加できます。このオブジェクトに直接リンクさせない場合でも、このオブジェクトはそのイベントをサンプリングする際に必要になります。

動的オブジェクトのイベントリスニングを設定するには:

  1. 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
  2. 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
  3. このプロパティのデフォルト値であるcurrentが[オブジェクト]ボックスに表示されていることを確認します。違うものが表示されている場合、[オブジェクト]ボックスの隣にある矢印をクリックして、メニューを開きます。メニューから[現在の(インスタンスオブジェクト)]を選択します。
  4. イベント]ボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。リッスンするオブジェクトをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから適切なイベントを選択します。
  5. 選択したイベントは、アクティビティのプロパティの[イベント]ボックスに一覧表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。

グループをリッスンする

グループのイベントリスニングを設定する前に、まずグループを作成する必要があります。グループに少なくとも1つのメンバーが与えられていることを確認します。このオブジェクトに直接リンクさせない場合でも、このオブジェクトはそのイベントをサンプリングする際に必要になります。

グループのイベントリスニングを設定するには:

  1. 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
  2. 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
  3. オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[グループ]をポイントし、リッスンするグループの名前を選択します。
  4. イベント]ボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。リッスンするオブジェクトをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから適切なイベントを選択します。
  5. 選択したイベントは、アクティビティのプロパティの[イベント]ボックスに一覧表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。

フローアイテムとトークンをリッスンする

フローアイテムやトークンをリッスンするには、イベントリスナーで動的参照を作成する必要があります。フローアイテムのイベントリスニングを設定する前に、3Dモデルにソースを追加する必要があります。トークンのイベントリスニングを設定する前に、リスニング対象のアクティビティが処理フローに追加されていることを確認する必要があります。

フローアイテムには次のイベントがあります。

イベント 説明
入るとき フローアイテムが固定リソースに入るとき、またはタスク実行者オブジェクトによってロードされるときに起動。
出るとき フローアイテムが固定リソースから出るとき、またはタスク実行者オブジェクトによってアンロードされるときに起動。

トークンには次のイベントがあります。

イベント 説明
入るとき トークンがアクティビティに入るときに起動。
出るとき トークンがアクティビティから出るときに起動。
手動リリース時 releasetoken()コマンドを使用してトークンがアクティビティから手動でリリースされるときに起動。
アセット割り当て時 トークンが共有アセットを割り当てるときに起動。これには、リソースを取得する、リストにプッシュされてゾーンに入る、リストからプルされたときにバックオーダーを作成するなどが相当します。
アセット割り当て解除時 トークンが共有アセットの割り当てを解除するときに起動。これには、リソースをリリースする、リストからプルされてゾーンを出る、バックオーダーを完了するなどが相当します。
ラベル値変更時 ラベル値が変更されるときに起動。これは、ラベルが追跡変数として格納されている場合にのみ使用できます。

フローアイテムやトークンのイベントリスニングを設定するには:

  1. フローアイテムやトークンが少なくとも1つモデルに含まれるようにシミュレーションモデルを実行します。
  2. 処理フロータブがアクティブになっている状態で、イベントを待つを処理フローに追加します。
  3. 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
  4. イベント]ボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。3Dモデルのフローアイテムをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。
  5. オブジェクト]ボックスで、ラベルを使ってフローアイテムやトークンを動的に参照します。

ツールをリッスンする

サンプラーを使用し、ツールボックス内のオブジェクトにカーソルを合わせて目的のイベントを選択できます。あるいは、プロパティウィンドウでピックリストにカーソルを合わせて、これらのイベントの1つを選択できます。

統計イベントまたは変更をリッスンする

3Dオブジェクトまたは処理フローアクティビティで統計イベントをリッスンできます。この処理は、リッスンするオブジェクトをサンプリングする際にメニューから統計イベントを選択する点を除けば、静的イベントの設定と同じです。

次の表は、最も一般的な統計イベントの例です。

イベント 説明
コンテンツ変更時 固定リソース内のフローアイテムの数が変化するとき、またはアクティビティまたはゾーン内のトークンの数が変化するときに起動。
入出力変更時 フローアイテムが固定リソースに出入りするとき、またはトークンがアクティビティに出入りするときに起動。
滞在時間変更時 フローアイテムが固定リソースを出るとき、またはトークンがアクティビティを出るときに起動。このイベントは、アイテムやトークンがアクティビティに留まっていた期間に関するさまざまな統計情報を追跡します。
状態変化時 オブジェクトの状態がアイドルから処理中などに変化するときに起動。
リソース利用可能時 タスク実行者がタスクまたはタスクシーケンスを完了したときに起動。

これらのイベントの1つに対してイベントリスニングを設定した後、次の表に示すように、イベントをトリガーする統計条件をさらに指定できます。

変更ルール 説明
変更 値が変化するとイベントを起動。
増加 値が増加するとイベントを起動。
減少 値が減少するとイベントを起動。
値に到達 ユーザーが定義した特定の値に値が変わると、イベントを起動。
値ちょうどまで増加 ユーザーが定義した特定の値まで値が増加すると、イベントを起動。
値ちょうどまで減少 ユーザーが定義した特定の値まで値が減少すると、イベントを起動。
値以上に増加 ユーザーが定義した特定の値より小さい状態からユーザー定義値と同じか大きくなるまで値が変化すると、イベントを起動。
値以下に減少 ユーザーが定義した特定の値より大きい状態からユーザー定義値と同じか小さくなるまで値が変化すると、イベントを起動。
初回の増加 値が減少から増加に変わるとイベントを起動。
初回の減少 値が増加から減少に変わるとイベントを起動。
更新 値が変化したかどうかに関係なく、値が設定されるとイベントを起動。このイベントは、統計コレクターでのみ使用できます。

さらに考慮すべき事項:

  • 「値に到達」を使用する場合は、到達する値を[]ボックスに指定する必要があります。
  • 最初のトークンが初期値に適合できるようにする場合は、[初期値がルールを満たした場合に起動]チェックボックスをオンにする必要があります。
  • サブスクライブしているイベントによっては、イベントに正しくバインドするために追加のフィールドが必要になることもあります。たとえば、[リスト]のOnContentChangeイベントにバインドする場合、リッスンするパーティションIDを指定する必要があります。該当するフィールドにパーティションIDを入力します。