[調整]アクティビティは、トークンを複数のトークンに分割し、複数のトークン間のタイミングを調整するための簡単な方法です。また、コネクターを使用して、トークンが作成されたとき、お互いに待機しているとき、一緒に戻ってきたときに視覚的にレイアウトすることによって、ロジックの可視性を向上させます。
[調整]アクティビティで可能なアプリケーションには、次のようなものがあります。
次のセクションで説明するように、3つの[調整]アクティビティがあります。
トークンが[分割]アクティビティに入ると、トークンは複数のトークンに分割され、送信コネクターを通じてリリースされます。リリースされるトークンの数は、送信コネクターの数に基づいています。
[分割]アクティビティを使用する場合の重要な考慮事項:
このアクティビティのプロパティの詳細については、「分割」を参照してください。
[結合]アクティビティは、1つのトークンを解放する前に、それぞれの着信コネクターからのトークンがあるまで待機します。
[結合]アクティビティを使用する場合の重要な考慮事項:
このアクティビティのプロパティの詳細については、「結合」を参照してください。
[同期]アクティビティは、各着信コネクターからのトークンがあるまで待機し、同時にすべてのトークンをリリースします。[同期]アクティビティは[結合]アクティビティに似ていますが、トークンを1つだけリリースするのではなく、すべてのトークンを同時にリリースします。
[同期]アクティビティを使用する場合の重要な考慮事項:
このアクティビティのプロパティの詳細については、「同期」を参照してください。
処理フローの使用時は、アクティビティのプロパティ(設定)を編集することによってアクティビティのロジックと動作を制御していました。これは[調整]アクティビティの場合には当てはまりません。[調整]にはカスタマイズできるプロパティがいくつかありますが、[調整]アクティビティの動作は通常、着信コネクターと送信コネクターによって決まります。
処理フローアクティビティでは通常、トークンが入るとき、アクティビティへの入力にどの着信コネクターが使われたかはまったく問題になりません。たとえば、[遅延]アクティビティでは、すべての入るトークンに同じ処理を行います。トークンがどのコネクターに由来していても、[遅延]アクティビティは、各入力トークンに対して同じ遅延時間または統計分布を適用します。対照的に、[結合]アクティビティは、トークンをリリースする前に、各着信コネクターからトークンが入るまで待機します。つまり、到着するトークンが[結合]アクティビティで待機する時間は、次のように決定されます。
着信コネクターの数によってこれらのアクティビティが待つべきトークンの数が決まるため、着信コネクターの数も重要です。
送信コネクターの数は、[分割]アクティビティと[同期]アクティビティの動作に影響します。これらのアクティビティでは、複数の送信コネクターが許可されます。ほとんどの処理フローアクティビティでは複数の送信コネクターは許可されませんが、これが許可される処理フローでは、一度に1つの送信コネクターからしかトークンをリリースできません。
たとえば、[決定]アクティビティに3つの送信コネクターがあるとしても、アクティビティのプロパティを使用して、3つの送信コネクターの1つにトークンを送信します。対照的に、[分割]アクティビティと[同期]アクティビティは同時にすべての送信コネクターを介してトークンをリリースします。このため、送信コネクターの数は重要です。これは、同時にアクティビティからリリースされるトークンの数に影響するためです。
3つの調整アクティビティを使用する際に注意すべき最も重要なことは、持っている着信コネクターと送信コネクターの数です。使用するアクティビティに応じて、コネクターは次に影響します。
次の表は、コネクターが調整アクティビティの動作にどのように影響を与えるかをまとめたものです。
アクティビティ | 着信コネクター | 発信コネクター |
---|---|---|
分割 |
|
|
結合 |
|
|
同期 |
|
|
[結合]アクティビティと[同期]アクティビティを使用する場合、着信および送信コネクターのランクを確認することが重要です。[結合]アクティビティでは、1番目の着信コネクター(ランク1のコネクター)を介して入ったトークンをリリースするのみで、他のトークンは破棄されます。このため、リリースする必要のあるトークンが[結合]アクティビティの最初のコネクターを介して入ってくるトークンであることを確認します。
[同期]アクティビティでは、1番目の着信コネクター(ランク1のコネクター)から入ったトークンを、1番目の送信コネクター(同様にランク1)からリリースします。2番目の着信コネクターに入ったトークンは、2番目の送信コネクターからリリースされます。
たとえば、次の画像は、ランク1~3の3つの着信コネクターが左から右へ並んだ[同期]アクティビティを示しています。送信コネクターは、異なるランキングパターンを有します。赤いトークンは、左側のランク1のコネクターから入ってきて、右側のランク1のコネクターから出てきます。
コネクターのランク番号編集の詳細については、「発信コネクターのランク番号または名前を変更する」を参照してください。
前のセクションで説明したように、[結合]アクティビティと[同期]アクティビティには、任意の数の着信コネクターを含めることができます。ただし、これらのアクティビティが持つコネクターの数は、その動作に影響します。これらの両方のアクティビティは、各着信コネクターにトークンがあるまで待機します。各着信コネクターにトークンが1つずつある場合、これらのトークンは1つの波でリリースされます。波とは、同時にリリースされるトークンのグループです。
[結合]アクティビティまたは[同期]アクティビティが1つの着信コネクターから複数のトークンを受信すると、追加の波が作成されます。次の画像は、トークンを受け取り、波を作成するときに結合アクティビティ内で何が起きるかを視覚化したものです。
[結合]アクティビティおよび[同期]アクティビティでは、パーティションIDを使用して共通の属性を共有するトークンを使用して波を作成することもできます。パーティションIDは、入るトークンのラベルによって定義され、オブジェクトまたはノードの番号、文字列、または参照がこれになることがあります。[結合]アクティビティと[同期]アクティビティは、トークン上のラベルからのデータに基づいて、入るトークンを並べ替えて波にできます。
たとえば、次の画像ではAとBという2つの異なる製品タイプを持つシステムをシミュレートしています。各入るトークンにはproductTypeという名前のラベルが付いています。[ラベルを割り当てる]アクティビティは、「A」または「B」のいずれかの値を割り当てます。トークンが[結合]アクティビティに入ると、それは1)どのコネクターから来たのか、2)パーティションID([productType]ラベルに基づく)に基づいて、それらを波に割り当てます。一致するパーティションIDを持つ各コネクターからのトークンを取得した後、波をリリースします。
必要に応じて、パーティションIDラベルの値を混合データタイプで使用できます。つまり、値の一部が数値で、値の一部が文字列やオブジェクト参照などであっても問題ありません。[結合]アクティビティと[同期]アクティビティは、新しいパーティションに一意の値を持つトークンを割り当てるだけです。たとえば、[結合]アクティビティと[同期]アクティビティでは、数値5のトークンを1つのパーティションに入れ、文字列の値が「5」のトークンを別のパーティションに配置します。
[パーティションID]プロパティを使用して、[結合]アクティビティと[同期]アクティビティがどのラベルを使用してパーティションを作成するかを定義できます。たとえば、前の画像で使用された[結合]アクティビティは、[パーティションID]ボックスで[productType]ラベルを使用するように設定されていました。
[分割]アクティビティは、作成したすべてのトークンに分割IDを作成します。分割IDは、分割された元のトークンへの参照を含むラベルです。デフォルトでは、このラベルの名前は[SplitID]ですが、必要に応じてそのラベルをカスタマイズできます。
分割IDラベルを[結合]アクティビティまたは[同期]アクティビティで使用して、分割されたトークンを処理フローの下流でお互いに待機させることができます。たとえば、次の処理フローでは、[分割]アクティビティがトークンに分割IDを割り当てます。次に、[同期]アクティビティが、入るトークンを分割IDラベルに基づいてパーティションに入れます。