関数のカテゴリ
テンプレートごとに、Get (get_representing_part) 関数と Create 関数 (create_representing_part) の 2 つの必須の関数があります。Copy および Delete 関数は必要に応じて実装します。
初期化
ターゲットモデル
ターゲットデータモデルは、書き込み用に暗黙的に開かれ、initTemplateAPI の単純な呼び出しによって初期化されます。'with_rdl' パラメータが 'FALSE' に設定されている場合、RDL は不要です。つまり、コンバータ自身が使用する分類の適切性を判断します。'with_rdl' パラメータが 'TRUE' に設定されている場合、templateAPI は <target_model_name>_RDL という RDL か plcsrdl という RDL をデフォルトとして探します。
ソースモデル
ソースモデルは、読み取り用に暗黙的に開かれます。initTemplateAPI 関数は、テンプレート拡張インスタンスを生成します (すでに生成されている場合)。そのため、ソースモデルが PLCS ポピュレーションである場合、初期化段階で書き込み用に一時的に開く必要があります。その後、誤って更新されないように、ソースモデルを読み取り専用で再度開く必要があります。
xpxChangeOpenMode(XPXSOURCEMODELID,xpxRW);
PLCSMODELID := XPXSOURCEMODELID;
initTemplateAPI(TRUE);
xpxChangeOpenMode(XPXSOURCEMODELID,xpxRO);
PLCSMODELID は、templateAPI が対応するモデルの識別子です。デフォルトでは、PLCSMODELID は XPXTARGETMODELID に設定されます。ソースモデルが PLCS ポピュレーションである場合、初期化の際に PLCSMODELID を XPXSOURCEMODELID に切り替える必要があります。XPXSOURCEMODELID および XPXTARGETMODELID は、変数で構築された EDMxpx です。
Init 関数
Init 関数は templateAPI そのものを初期化するだけではなく、API が動作するモデル (PLCS ポピュレーション) も初期化します。representing_part インスタンスは以下の呼び出しで初期化されます。
somestuff := get_representing_part(?,?,?,?,?,?,?,?,?);
init_rep_part := TRUE;
この呼び出しは、representing_part のすべてのインスタンスの総計を返します。まだ生成されていない場合は、representing_part インスタンスが生成されます。ほかのテンプレート拡張エンティティタイプのインスタンスも同様の方法で初期化されます。多くのテンプレートがレイヤー構造になっているため、get_xxxxx がほかの 'get 関数' を呼び出すこともあります。このような依存関係のため、初期化呼び出しの順序には重要な意味があります。同じ理由で、テンプレートによっては、グローバルな初期化フラグ (initialized) に加え、プライベートな初期化フラグがあります。
Get 関数
Get 関数は、以下のように動作します。
• Get 関数を呼び出すと、ヒットが 0 個以上返されます。
• すべての引数を指定すると、ヒットがない場合や、1 個だけ返される場合もあります。
• すべての引数が不定である場合 (値が ? で、Java の Null に相当する)、そのテンプレートタイプのすべてのインスタンスが返されます (0 個であることもあります)。
• 引数を複数指定すると、Get 関数はサーチとして動作します。この場合、関数呼び出しによって、入力パラメータと一致するインスタンスの総計が返されます (0 個であることもあります)。
セクション 1
テンプレート拡張インスタンスが以前に初期化されている (プライベートまたはグローバルフラグにチェックマークが付いている) 場合、サーチセクションが入力されます。推奨されているサーチの実装方法はありません。実装はすべてテンプレートの構造次第です。
セクション 2
セクション 2 は、テンプレート拡張インスタンスがそれまでに初期化されていない場合に入力されます。get_representing_part を見ると、セクション 2 は
xpxGetEntityExtentBN (PLCSMODELID,'Part_view_definition',prod_def_bag);
REPEAT i := 1 TO SIZEOF(prod_def_bag);
.......
で始まっています。
たとえば、ポピュレーションでは 'Part_view_definition' のすべてのインスタンスがループになっています。これはテンプレートの "ルート" であり、'Part_view_definition' インスタンスごとに representing_part が 1 つあります。その他のテンプレートタイプでも、"ルート" と拡張エンティティは同様に 1 対 1 の関係になっています。
適切にインスタンス化されていない 'Part_view_definition' インスタンスは通知なしでスキップされます。ポピュレーションが事前に適切に検証されている場合、このようなイベントは発生しません。例外が発生するか、少なくともそのインスタンスは不適切なものとしてログに記録されます。
representing_part 属性のポピュレーション
• part_id
部品には、プリンシパル Part_identification_code に加えて多数のエイリアス ID (例: Part_name) がある場合がありますが、このコンテキストでは、Part_identification_code または有効なサブタイプとして分類されている ID を見つけるために get_assigning_identification から返されたリストが反復されます。
• part_ver
Part_version の ID は 1 つまでです (1 つのバージョン ID)。そのため、ユーティリティ helper_get_one_assigning_identification を使用してこの 1 つのバージョンを取得します。
• domain
Part_view_definition.initial_context に接続されている分類 (View_definition_context) を取得するには、get_assigning_reference_data 関数を使用します。Discipline_domain (またはそのサブタイプ) に該当するものは、domain に割り当てられます。
• life_cycle_stage
Part_view_definition.initial_context に接続されている分類 (View_definition_context) を取得するには、get_assigning_reference_data 関数を使用します。Life_cycle_stage (またはそのサブタイプ) に該当するものは、life_cycle_stage に割り当てられます。
• prt
Part_view_definition.defined_version.of_product と同じです。
• version
Part_view_definition.defined_version と同じです。
• view
Part_view_definition インスタンスそのものです。
• contxt
Part_view_definition.initial_context と同じです。
• catgy
ポピュレーションで 1 つの製品カテゴリを見つけるには、xpxGetEntityExtentBN を使用します。