Creo Elements/Direct Model Manager の拡張
Creo Elements/Direct Model Manager 製品には、Java コード、XML ファイル、およびビルドスクリプトが付属しているため、パートナーは Creo Elements/Direct Model Manager を拡張して、カスタムビジネスルールおよびデータモデルを実装することが可能です。
一般に、Creo Elements/Direct Model Manager のカスタマイズは、Java クラスを記述して新規の動作を実装し、その後で xml ファイルを編集して新規の Java クラスを使用する、というパターンで行います。また、xml ファイルで値を組み込むことによって、カスタム Java クラスの動作を設定することもできます。
XML ファイル
Creo Elements/Direct Model Manager は、起動時に 2 つの XML ファイル (wmconf.xml ともう 1 つの XML ファイル) を読み込みます。3 つ以上の XML ファイルがある場合、ユーザはログイン ダイアログで XML ファイルを選択する必要があります。
wmconf.xml はファイルシステムに配置されなくなり、代わりにクラスパス (WorkManager.jar) からデフォルトの設定が読み込まれます。custom.xml ファイルは Creo Elements/Direct Model Manager のインストール時に作成され、インストールプロセス中に入力された構成が書き込まれています。ユーザは新しい XML ファイルを作成して、カスタマイズ内容を設定することができます。本文書で使用される「カスタム xml ファイル」という用語は、ユーザによりカスタマイズされた XML ファイルを指します。
カスタム XML ファイルには 2 種類の基本タグがあります。
• プロパティ タグ
• Java クラス割り当てタグ
プロパティ タグ
プロパティ タグは、一般的な動作を設定します。プロパティタグは通常、on、true、またはファイル名といった、一定の値を持ちます。
たとえば、以下のタグは、プロジェクト機能を有効にするかどうかを制御します。
<EnableProjects>true</EnableProjects>
プロパティタグの例
• CAD とデータベース属性との間の属性のマッピング
◦ <InstanceNameAttributeName>
◦ <DescriptionAttributeName>
• 動作の切り替え
◦ <EnableCompare>
◦ <EnableHistory>
◦ <EnableProjects>
• クラスおよび属性の設定
◦ <CanCreateInUI>
◦ <ChangeNoteClass>
◦ <DraftingClass>
• デフォルト値の定義
◦ <InitialPositionNumber>
◦ <InitialState>
◦ <DisplayDateFormat>
• 設定の表示
◦ <DisplayName>
◦ <Searchable>
◦ <Visible>
◦ <Protect>
• アイコン ファイルの場所
◦ <DragIconFile>
◦ <FileIcon>
タグの詳細については、「有効な XML タグ」を参照してください。
新しいタグを作成して、カスタム XML ファイルから拡張を設定できます。また、Creo Elements/Direct Model Manager で提供されているタグに基づいて、拡張を設定可能とすることもできます。たとえば、プロジェクト機能を有効化すると拡張の動作が変化する場合には、カスタム Java クラスが <EnableProjects> タグの値にアクセスできます。
Java クラス割り当てタグ
Java クラス割り当てタグは、一連の動作の制御に使用される特定の Java クラスを定義します。たとえば、<BusinessObjectClass> タグは、Creo Elements/Direct Model Manager と特定のデータベースクラスおよび属性との対話の制御に使用する Java クラスの名前を指定します。
Java クラス割り当てタグの値は、Creo Elements/Direct Model Manager の Java コード構造内のクラスです。製品に組み込まれているクラスを指定することも、ユーザ独自のカスタムクラスを使用するように Creo Elements/Direct Model Manager を設定することもできます。
たとえば、製品出荷時には、以下のタグによってデータベースクラス MODEL_3D からのデータの動作を制御する、Java クラスの名前が指定されています。
<BusinessObjectClass>com.osm.dm.biz.DMModel3D</BusinessObjectClass>
このタグで以下のように指定すると、ユーザ独自のカスタムクラスを使用するよう Creo Elements/Direct Model Manager を設定できます。
<BusinessObjectClass>com.custom.dm.biz.CustomDMModel3D</BusinessObjectClass>
Java クラス割り当てタグの例
• データベース クラスおよび属性ビジネス オブジェクト
◦ <AttributeEditorClass>
◦ <BusinessObjectClass>
• テーブル列モデル
◦ <AnnotationLoadTableColumnModel>
◦ <AnnotationSaveTableColumnModel>
• リスナー
◦ <PostApplyListener>
◦ <PreApplyListener>
• メニュー
◦ <MainMenuBarMenu>
◦ <BomManagerMenuBarMenu>
◦ <DefaultSendToMenu>
• エディタ
◦ <EditorClass>
Java コードからの XML の値へのアクセス
Creo Elements/Direct Model Manager は、ユーザのログイン時に XML ファイルを読み込み、com.osm.biz.WMConfig オブジェクトのインスタンスを作成します。WMConfig クラスのメソッドを使用して、XML 設定の値にアクセスできます。
たとえば、getTagValue(String section, String tagValue) は、特定のセクション内の特定のタグの値を返します。
XML タグを読み取るその他の WMConfig メソッドの例
getClassAttributeTagValue (String className, String classType, String attributeName, String tag) - 特定のクラス名の定義内にある特定のタグの値を返します。
getClassTagValue (String className, String tag) - 特定のクラス内の特定のタグの値を返します。
getOption (String tagName) - Option セクション内にある指定されたタグの値を返します。
getOptionList (String tagName) - Option セクション内にある指定されたタグの値のリストを返します。
getTagValueList (String section, String tagValue) - 特定のセクション内の特定のタグについて、タグの値のリストを返します。
XML の値を読み取る Java コードの例
com.osm.biz.WMClass の canCreateInUI メソッドは、クラスタグ <CanCreateInUI> を読み取ります。このタグは、指定されたクラスの要素をワークスペースから作成可能とするかどうかを制御します。タグが xml ファイルに存在しない場合、このメソッドはデフォルトのブール値 false を返します。
wmconf.xml のセクションの例:
<Class extends="DB_PACKET">
<Name>BASE_DBR_DEFAULT_PACKET</Name>
<BusinessObjectClass>com.osm.biz.WMPacket</BusinessObjectClass>
<DisplayName catalog="eprojects" msg_num="1129">Default Packet
</DisplayName>
<CanCreateInUI>true</CanCreateInUI>
<CanCreateInUI> タグを読み取る Java コードの例:
public static boolean canCreateInUI(String className) {
synchronized (pdm.semaphore) {
try {
String canCreateNew =
WMConfig.getInstance().getClassTagValue(className, "CanCreateInUI");
if ((canCreateNew != null) && canCreateNew.equalsIgnoreCase("true")) {
return true;
}
} catch (WMException ignore) {
}
return false;
}
}