List
説明
リストを表すクラスです。
リストは、FlexSimにおいて多くの用途を持つ強力なツールです。1番の基本として、リストは単純に値の一覧になります。リストの各値は数値、文字列、またはシミュレーションモデル内のオブジェクトへの参照にすることができます。リストでは、SQLの表現能力を駆使してリスト上の値について検索、フィルタリング、および優先順位付けを行います。リスト内のエントリはユーザー定義のフィールドを持つことができます。これらのフィールドは実質的にリストを動的データベーステーブル内に作成します。さらに、SQLクエリを使用して、標準データベーステーブルを照会するかのようにリストにフィルタを適用したり優先順位付けすることができます。
プロパティ
stats | オブジェクトの統計が利用可能になります。 |
メソッド
backOrders | 特定パーティション上のバックオーダーの配列を取得します。 |
entries | 特定パーティション上のエントリの配列を取得します。 |
getEntryFromValue | 値と関連付けられたエントリを返します。 |
pull | リストから値のプルを試行します。 |
push | リスト上の値をプッシュします。 |
reevaluateBackOrders | すべてのエントリまたは特定エントリに対してバックオーダーを再評価します。 |
コンストラクター
List | グローバルリストへの参照を作成します。 |
詳細
List.stats
readonly stats
説明
オブジェクトの統計が利用可能になります。
TrackedVariableオブジェクトとしてのリストの統計が利用可能になります。このプロパティは、次のプロパティおよびメソッドを提供します。
プロパティ
input - 入力追跡変数を返します
output - 出力追跡変数を返します
content - 容量追跡変数を返します
staytime - 滞在時間追跡変数を返します
backOrderInput - backOrder用の入力追跡変数を返します
backOrderOutput - backOrder用の出力追跡変数を返します
backOrderContent - backOrder用の容量追跡変数を返します
backOrderStaytime - backOrder用の滞在時間追跡変数を返します
// Get the input of a List
List("MyList").stats.input.value;
メソッド
fieldTotal(Variant field)
fieldTotalInput(Variant field)
fieldTotalOutput(Variant field)
partitionBackOrderContent(Variant partition)
partitionBackOrderInput(Variant partition)
partitionBackOrderOutput(Variant partition)
partitionBackOrderStaytime(Variant partition)
partitionContent(Variant partition)
partitionInput(Variant partition)
partitionOutput(Variant partition)
partitionStaytime(Variant partition)
List.backOrders()
backOrders( Variant partitionID = 0 ) |
パラメータ
startValue | バックオーダーの取得対象となるパーティションのIDです。 |
説明
特定パーティション上のバックオーダーの配列を取得します。
この配列は読み取り専用ですが、配列長さを照会したり、個別のバックオーダーにアクセスしてそれらのデータを照会することができます。詳細については、List.BackOrderクラスを参照してください。List("ItemList").backOrders().length
List("ItemList").backOrders(3)[1].puller
List.entries()
entries( Variant partitionID = 0 ) |
パラメータ
startValue | エントリの取得対象となるパーティションのIDです。 |
説明
特定パーティション上のエントリの配列を取得します。
この配列は読み取り専用ですが、配列長さを照会したり、個別のエントリにアクセスしてそれらのデータを照会することができます。詳細については、List.Entryクラスを参照してください。List("ItemList").entries().length
List("ItemList").entries(3)[1].value
List.getEntryFromValue()
List.Entry getEntryFromValue( Variant value , Variant partitionID = 0 ) |
パラメータ
value | リストにプッシュされた値です。 |
partitionID | 値がプッシュされたパーティションのIDです。 |
説明
値と関連付けられたエントリを返します。
値と関連付けられたエントリをパーティションで検索します。値と関連付けられたエントリが存在しない場合、メソッドはnullを返します。[一意の値のみ]が偽の場合、このメソッドは常にnullを返します。
List stations = List("StationList");
List.Entry entry = stations.getEntryFromValue(current);
stations.reevaluateBackOrders(entry);
List.pull()
List.PullResult pull( string sqlQuery , double requestNum , double requireNum = 0 , Variant puller = nullvar , Variant partitionID = nullvar , int flags = 0 ) |
List.PullResult pull( treenode object , double requestNum = 1 , double requireNum = 0 , Variant puller = nullvar , Variant partitionID = nullvar , int flags = 0 ) |
List.PullResult pull( Array matchValues , string sqlQuery , double requestNum = 1 , double requireNum = 0 , Variant puller = nullvar , Variant partitionID = nullvar , int flags = 0 ) |
パラメータ
object | リストからプルしたいオブジェクトまたはノード。 |
matchValues | エントリ値と一致する一連の値です。プル操作によって、matchValues配列で定義された一連の値のみをプルします。この操作は、sqlQueryパラメータで定義されたWHERE句として以外に、プル対象の一連の値に対する追加フィルタとして動作します。 |
sqlQuery | リストからプルする対象を定義するSQLクエリ。 |
requestNum | リストからプルする対象の最大数。 |
requireNum | リストからプルする対象の最小数。 |
puller | リストからプルする対象。 |
partitionID | プル対象となるパーティションのID。 |
flags | プル動作を変更するフラグ。 |
説明
リストから値のプルを試行します。
SQLクエリの要件を満足するリストから対象をプルします。List.PullResultを返します。List.PullResult pullResult = List("ItemList").pull("", 1, 1);
Object item = List("ItemList").pull("WHERE type = 3 ORDER BY age", 3, 2, current, current.station);
sqlQuery - プルに使用するSQLクエリを定義します。SQLクエリでは、WHERE、ORDER BY、SELECT、およびLIMIT句のみを使用する必要があります。デフォルトでは、フィールド名はオブジェクトラベル名と相関関係を持ちます。たとえば、クエリが
WHERE type > 5 ORDER BY priority DESC
の場合、リストは、「タイプ」ラベルを持ち値が5を超えるオブジェクトをリスト上で検索し、たとえば「優先」ラベル値が高いものを優先するなどして、オブジェクトの「優先」ラベル値を降順にします。単なるラベル以上の柔軟性が必要な場合、プロパティウィンドウからリストの定義済みフィールドへ追加できます。
requestNum - リストからプルするようリクエスト中のエントリ数を定義します。requestNumが0を上回る場合、クエリを満足するエントリは即座にリストから削除されます。requestNumが0の場合、リストがクエリを実行して結果を返しますが、クエリを満足するエントリを削除することはありません。限定された数のエントリに対して照会しつつもエントリを削除したくない場合、0をrequestNumとして渡してからプルクエリのLIMIT句を使用します。
requireNum - リストからプルする必要があるエントリ数を定義します。この数はrequestNum未満または等しい必要があります。requireNumが0より大きく、必要数が満足されない場合、バックオーダーがプル要求に対して作成され、また、アイテムがリストにプッシュされる際、バックオーダーのrequireNumが満足されてバックオーダーが削除されるポイントまでそれらのアイテムはバックオーダーによってプルオフされます。バックオーダーキューの方法がリストで定義されている場合、バックオーダーは、オールオアナッシング方式で割り当てられていないと想定し、FIFO順で処理されます。
バックオーダーが作成され、そのバックオーダーが処理された際に通知を受けたい場合、次のようにeventlisten()コマンドを使用します。
eventlisten(pullResult.backOrder, "OnFulfill", callbackNode, 0, ...)
このコマンドで、バックオーダーが処理された際にcallbackNodeのコードが評価されます。バックオーダーが複数回増加処理される場合、部分的な処理が行われるたびにcallbackNodeのコードが評価されます。追加のパラメータ(...オプションパラメータ)がcallbackNodeのparam(1)やparam(2)などに対して定義されます。これらのパラメータは、次のマクロで置換することで、コールバックが実行された際に処理依存値と置き換えることができます。
LIST_ON_FULFILL_VALUE
プルされたエントリの値。LIST_ON_FULFILL_NUM_FULFILLED
この処理の一環として処理された数量。クエリにSELECT句がない限り、通常は1です。LIST_ON_FULFILL_TOTAL_FULFILLED
この時点までバックオーダーのために処理された総量。LIST_ON_FULFILL_NUM_REQUESTED
プル要求が最初に行われたときの要求数。LIST_ON_FULFILL_NUM_REQUIRED
プル要求が最初に行われたときの必要数。
たとえば、次のコマンドを使用した場合、
eventlisten(pullResult.backOrder, "OnFulfill", callbackNode, 0, LIST_ON_FULFILL_VALUE)
処理を実行する際、callbackNodeのコードのparam(1)が、処理を満足するエントリに対する値と置き換わります。
puller - リストからエントリをプルしている主体を定義します。0に設定することが可能です。プラーを使用する理由としては、次の点が考えられます。
- プラーのクエリ内ラベルにアクセスできます。たとえば、
WHERE Type = puller.Type
のクエリは、プラーの「タイプラベル」と等しい「タイプ」ラベルを持つエントリと一致します。 - リストのプッシャは、リストからプッシャをプルオフしようとしている主体を判断できます。push()メソッドは、リストからアイテムをプルオフしたバックオーダープラーを返します。
- リストのカスタムクエリフィールドを使用する場合、一部のフィールドではプロパティを評価するために有効なプラーを必要とします。
partitionId - IDのプル先となるパーティションを定義します。partitionIdを使用することで、リストを複数の分割リストのように機能させることができます。各分割リストはそのpartitionIdで一意に識別されます。定義されたパーティションIDを使用してエントリをリストにプッシュする場合、同じパーティションIDを持つエントリをプルオフする必要があります。
flags - プルに関する動作フラグを定義します。次に示す値のうち、1つ以上が有効となります。
LIST_PULL_ALL_OR_NOTHING
すべての必要エントリをプルできる場合、プルリスエストはエントリのみプルします。この値が指定されない場合、プル/バックオーダーはリストから利用可能なエントリをプルオフします。LIST_PARSE_QUERY
実際にプル操作を行う代わりに、リストは単に定義されたクエリを解析します。キャッシュされたクエリを保持するノードへの参照を返します。その後、このノードはクエリパラメータとして以降のpull()呼び出しに渡されます。pull()呼び出しのたびに解析するのではなく一度だけ解析すればよくなるため、シミュレーションの実行速度を向上することができます。ノードの所有権は呼び出し元に与えられます。つまり、ノードを使用したユーザーは、そのノードの保管およびその後の削除を行う責任を負います。アクセス可能な場所にノードを移動する際には、transfernode()を使用する必要があります。LIST_PULL_ENTRY_NODES
コマンドは、プルされた値を返す代わりとして、それらプルされた値を参照する一連のエントリノードを返します。これは主に、エントリがリストにプッシュされた時間を知りたい場合においてのみ役立ちます(getsdtvalue(entryNode, "pushTime"))。リストはエントリをリストから削除するか判断する際と同じルールを使用します(requestNum > 0)。この状況でエントリを削除する場合、エントリを一時ロケーションに配置してから、破棄することなく返します。(エントリを削除した場合、)必要な情報を取得した後にユーザー自身で破棄する必要があります。LIST_DO_NOT_REMOVE
このコマンドによってリスト上エントリの照合結果が返されますが、エントリはリスト上に残ります。このコマンドは、動的に変化しないディレクトリやルーティングを作成する際に役立ちます。LIST_DO_NOT_BACK_ORDER
一致したエントリ数が必要数未満の場合、バックオーダーは作成されません。LIST_PULL_BACK_ORDERS
このコマンドは、リスト上エントリを照会する代わりとしてバックオーダーを照会して特定クエリと一致するすべてのバックオーダーのリストを返します。クエリに順番が格納されている場合、バックオーダーは並べ替えられます。また、このコマンドはバックオーダーの再評価および処理済みバックオーダーの削除も行います。LIST_DO_NOT_FULFILL
LIST_PULL_BACK_ORDERSとあわせて使用され、バックオーダーが再評価されたり削除されたりしないようにします。これによって、リストのバックオーダーを単に照会したり、もしくはバックオーダーを処理することなく並び替えることができるようになります。LIST_RETURN_BACK_ORDER_IF_NOT_FULFILL
LIST_PULL_ALL_OR_NOTHINGとあわせて使用されます。プル処理が無効化されている場合、バックオーダーが作成されます。このバックオーダーノードへの参照は、pull()メソッドによって返されます。その後、eventlisten()を使用してバックオーダーのonFulfillに対してリスナーを追加する際に、この参照を使用します。
戻り値 - プルに成功した場合、コマンドはList.PullResultを返します。これはプルされた値を保持するバリアントです。複数の値がプルされた場合、その値は配列を構成します。プルが完全には成功せずバックオーダーが作成された場合、プル結果のバックオーダーにアクセスできます。
pullResult.backOrder
List.push()
Variant push( Variant value ) |
Variant push( Variant value , Variant partitionID ) |
Variant push( Variant value , Variant partitionID , Variant pushArg1 , Variant pushArg2 , Variant pushArg3 , Variant pushArg4 , Variant pushArg5 , Variant pushArg6 , Variant pushArg7 , Variant pushArg8 ) |
パラメータ
value | リストにプッシュされた値。 |
partitionID | プッシュ先となるパーティションのID。 |
pushArgs | 値を使用してプッシュする引数。 |
説明
リスト上の値をプッシュします。
値をリストに配置して、リストからプルして利用可能にします。List("ItemList").push(item);
partitionIdが指定されてリストが複数リストのように機能する場合、各リストはpartitionIdによって一意に識別されます。指定partitionIdを使用して値をリストにプッシュする場合、その後同じpartitionIdを使用してその値をリストからプルオフする必要があります。
List("ItemList").push(item, item.type);
nullvar値をプッシュすると、リストに何もプッシュすることなく、すべてのバックオーダーを単純に再評価することができます。
List("ItemList").push(nullvar);
アイテムをリストにプッシュする際にバックオーダーによって即座にプルされない場合、コマンドはアイテムをリストからプルオフしたプラーを返します。そうでない場合、コマンドは0を返します。リストにプッシュされたエントリを表すノードを利用する際、多くの場合このコードは次をプッシュ後に使用できます。
list.entries(pID)[list.entries(pID).length]
ですが、[一意の値のみ]チェックボックスがオンになっていてプッシュされた値がリストに存在している場合、エントリはリスト内で以前のランクを維持します。エントリの検索には、リストエントリのコンテンツを手動で検索する必要があります。
var entries = List("MyList").entries();
for (int i = 1; i <= entries.length; i++) {
if (entries[i].value == pushedValue) {
//Found entry
}
}
リストには値の配列をプッシュする場合もあります。これは、各値を単にループしてリストにプッシュする動作に似ていますが、すべてのエントリがバックオーダー評価前のリストにプッシュされる点が異なります。つまり、「すべてプルまたはプルしない」プルリクエストを持つ複数エントリに関するバックオーダーを、「すべてプルまたはプルしない」リクエストを持たないバックオーダーもしくは少ない数のエントリをリクエストしているバックオーダーによって「盗まれる」前に処理できることを意味します。
List.reevaluateBackOrders()
void reevaluateBackOrders( ) |
void reevaluateBackOrders( List.Entry entry ) |
パラメータ
entry | バックオーダーを再評価する際の対象となるエントリです。 |
説明
すべてのエントリまたは特定エントリに対してバックオーダーを再評価します。
エントリを指定する場合、同じパーティション内のすべてのバックオーダーがそのエントリに対して再評価されます。エントリが指定しない場合、各パーティション内のすべてのバックオーダーが同じパーティションのすべてのエントリに対して再評価されます。List("ItemList").reevaluateBackOrders()
List("ItemList").reevaluateBackOrders(List("ItemList").entries()[1])