拡張のガイドライン
これらのガイドラインに従って拡張を作成することで、拡張が今後のリリースの Creo Elements/Direct Model Manager でも引き続き動作する可能性が高くなります。
コードを編集せずに拡張する
Creo Elements/Direct Model Manager のコードは、自由に拡張できます。Java および XML を使用すると、
Creo Elements/Direct のコードを編集しなくても
Creo Elements/Direct Model Manager を比較的簡単に拡張できます。複数のカスタマ向けにカスタマイズを作成する場合は、
属性用のビジネスオブジェクトを使用することによって、他のカスタマイズと容易に統合することの可能なカスタマイズを作成できます。
Creo Elements/Direct Model Manager で拡張クラスを呼び出す方法には、次の 2 つがあります。
• 拡張クラスを XML 設定ファイルに直接登録する
• XML 設定ファイルに登録されたクラスを介して拡張クラスを呼び出す
データベースクラスを制御する Java クラス名を Creo Elements/Direct Model Manager および Creo Elements/Direct Drawing Manager で定義するには、<BusinessObjectClass> タグを使用します。次の例では、カスタムビジネスロジックが AcmeModel3D として com/acme/biz ディレクトリに作成されています。
<Class extends="DMModel, DMReleaseProcess">
<Name catalog="awm_stda" msg_num="258">MODEL_3D</Name>
<BusinessObjectClass>com.acme.biz.AcmeModel3D</BusinessObjectClass>
</Class>
新規ウィンドウおよびダイアログに com.osm.action.util のクラスを使用する
*.ui.* ディレクトリにあるメソッドを拡張および使用することは避けてください。これらのディレクトリにあるクラスのメソッドを拡張または使用して作成したカスタマイズは、新しいバージョンの Creo Elements/Direct Model Manager では動作しなくなる可能性があります。
ポップアップウィンドウおよびダイアログを作成する場合は、代わりに com.osm.action.util.* のクラスを拡張してください。
リスナーの使用
リスナーを使用することで、ビジネス オブジェクト クラスを拡張しなくても数多くのアクションを実行できます。
PreApply リスナーは、データがデータベースに保存される前に実行されます。データの整合性を確認したり、データを保存する前に修正する際に役立ちます。
PostApply リスナーは、オブジェクトが正常にデータベースに保存された場合にのみ適用されます。外部システムとの統合を行ううえで役立ちます。たとえば、PostApply リスナーを使用して、パーツに関する情報を SAP システムに送信できます。この方法では、データは正常に保存されない限り送信されません。PostApply リスナーは、PreApply コードからのデータをキャッシュするようシステムに要求します。このキャッシュプロセスはパフォーマンスに影響を与える場合があります。
トランザクションリスナーは OneSpace Manager 2005 で追加されました。このリスナーは PostApply リスナーに似ていますが、Web サービスによって実行されるため、Creo Elements/Direct Model Manager の使用時にパフォーマンスの低下が生じません。Creo Elements/Direct Model Manager は、トランザクションリスナーを実行するために、トランザクションに関する情報を持つ Web サービスと通信します。Web サービスがトランザクションリスナーを実行している間も、Creo Elements/Direct Model Manager は引き続き稼働しています。Creo Elements/Direct Model Manager リリース 18.0 以降の変更通知ツールでは、PostApply リスナーに代わってトランザクションリスナーを使用します。
CoCreate Model Manager 13.20A において、以下の 4 つのリスナーが新たに追加されました。
• OSMXferDataModel リスナー: 「保存」ダイアログが表示される直前に呼び出されます。
• TransactionPreApply リスナー: トランザクションが適用される直前に呼び出されます。PreApply リスナーがトランザクション内のそれぞれのオブジェクトごとに呼び出されるのに対し、このリスナーはトランザクションに対して一度だけ呼び出されます。
• InitAttributeValues リスナー: initAttributeValues が呼び出された直後に呼び出されます。
• StateChange リスナー: 状態トランザクションが適用される直前に呼び出されます。
リスナーの登録方法については、「XML のカスタマイズ」セクションを参照してください。Web サービスおよびトランザクションリスナーの詳細については、「Web サービス」セクションを参照してください。
クラスの命名規則に従う
Java では任意のディレクトリ名を使用できますが、後でコードを見つけやすいように、Creo Elements/Direct は一貫したディレクトリ構造を使用することをお勧めします。最初に「com」、次に製品名または会社名、その次にクラスのタイプを示すディレクトリ、というディレクトリ構造を作成する規則を使用します。クラスを拡張する場合は、拡張と同じディレクトリ名を使用してください。たとえば、com.yourcompany.biz のクラスを拡張した場合は、拡張を com.osm.biz に置いてください。
action
|
アクション メニューまたはメニューバーのメニューに表示されるアクション
|
actionmenu
|
ユーザがオブジェクトをマウスの右ボタンでクリックするか、メニュー バーのアクションメニューを選択した際にポップアップ表示されるアクションメニュー
|
biz
|
ビジネス オブジェクト
|
editor
|
属性または要素エディタ
|
editormodel
|
要素エディタのエディタ モデル
|
event
|
オブジェクトが編集される時に生成されるイベントおよび各種の監査イベント
|
exception
|
例外
|
media
|
gif および jpg ファイル
|
renderer
|
属性のレンダリング (ユーザ インターフェイスでの値の表示方法)
|
tcm
|
ワークスペース、ロードおよび保存のユーザインターフェイスで使用されるテーブル列モデル
|
test
|
ユニットテスト
|
util
|
その他のユーティリティ クラス
|
セマフォに関する注意事項
pdm.semaphore は、pdm 関連のビジネスロジックをスレッドセーフにしておく場合にのみ使用してください。クリティカルセクションの使用は最小限にとどめてください。pdm.semaphore は以下の場合に使用します。
• 同時にカーネルに入るスレッドを 1 つに限定する。
• ビジネス ロジックのクリティカル セクションをスレッド セーフにする。たとえば、Java- カーネル関連のハッシュマップとキャッシュの同期を維持したり、複数の pdm 呼び出しを単一のアトミックオペレーションにグループ化する場合、pdm.semaphore を使用する必要があります。
すべてのユーザインターフェイスオペレーションは、これらのクリティカルセクションの外部に配置する必要があります。内部で行った場合はデッドロックが発生する可能性があります。デッドロックの詳細については、Creo Elements/Direct Model Manager ヘルプを参照してください。他のセマフォを作成および使用して、ユーザ インターフェイスオペレーションのフローを制御することができます。新規のセマフォを作成する場合は、セマフォの依存関係に注意してください。デッドロックを回避するために、すべてのセマフォ依存関係を一定の方向にする必要があります。特に、pdm 呼び出しをセマフォに依存させないでください。
getChildren() ではなく getDisplayChildren() を拡張する
ユーザに対して表示されるアイテムを編集する場合は、getChildren() ではなく getDisplayChildren() を拡張します。getChildren() によって返されるアイテムのリストを変更すると、モデルロードコードが破壊される可能性があります。