新しい計算属性の拡張を作成する演習
推定所要時間
Creo Elements/Direct Model Manager のクラスをカスタマイズして、新しい属性を追加します。
このレッスンでは、Java ビジネスロジックで計算される新しい属性を含めるよう、Creo Elements/Direct Model Manager のクラスを拡張します。
説明:
1 分
演習:
20 分
説明
ここまでで、基本的なカスタマイズと配布の演習XML のカスタマイズの演習が終了しました。この演習は、NetBeans 11.0 に基づいています。ほかの Java 開発環境を使用している場合は、説明の内容をご使用の IDE に合わせて読み替えてください。
クラスのビジネスロジックをカスタマイズすることにより、クラスのオブジェクトの機能をカスタマイズできます。この方法は、1 つまたは 2 つの新しい属性を追加する必要がある場合に最も一般的です。これらの属性をデータベースに保存すると、コードを変更することなく属性を表示できます。
データベースに値を保存するのではなく、いくつかの Java コードに基づいて属性を計算する場合は、属性ビジネスオブジェクトを作成する必要があります。
以下の演習を活用して、Creo Elements/Direct Model Manager の属性ビジネスロジックを拡張する方法を学習してください。
演習
この演習では、現在時刻をミリ秒単位で返すカスタム属性ビジネスクラスを追加します。
この演習は、基本的なカスタマイズと配布の演習XML のカスタマイズの演習が終了していることを前提としています。
Creo Elements/Direct Model Manager のビジネスロジックを拡張するための主な手順は、次のとおりです。
Java コードの拡張
まず、基本クラスを拡張するクラスを作成し、ビジネスロジックに合わせてコードを追加します。
属性クラスの作成
1. Windows エクスプローラを使用して、Java ファイル用の biz ディレクトリ (com\acme\biz) を作成します。
* 
Java では任意のディレクトリ名を使用できますが、後でコードを見つけやすいように、Creo Elements/Direct は一貫したディレクトリ構造を使用することをお勧めします。このガイドでは、ディレクトリ構造として、最初に com を使用し、次に会社名、その次にクラスのタイプを示すディレクトリを使用します。この演習で拡張するクラスは dm\biz ディレクトリにあり、ここでビジネスロジックが保持されます。
2. NetBeans で、AcmeTimeAttribute クラスを作成します。
3. AcmeTimeAttribute を以下のように編集します。
package com.acme.biz;
import com.osm.biz.*;
import com.osm.exception.*;
public class AcmeTimeAttribute extends DefaultAttribute {
public AcmeTimeAttribute(Object value, WMAttribute att, WMObject wmObject)
throws WMException {
super(value, att, wmObject);
}
public AcmeTimeAttribute(WMAttribute att, WMObject wmObject)
throws WMException {
super(att, wmObject);
}
@Override
public Object getValue() throws WMException {
return System.currentTimeMillis();
}
@Override
public void setValue(Object obj) throws WMException {
// don’t support set.
}
}
4. F9 キーで新しいクラスコードをコンパイルします。
XML ファイルへの拡張の追加
Creo Elements/Direct Model Manager では、データベースデータの処理方法を制御するために XML ファイルを使用します。属性を制御する Java クラスの名前を定義するには、<BusinessObjectClass> タグを使用します。
1. NetBeans で、XML のカスタマイズの演習で作成した acme.xml ファイルを開きます。
2. <ClassDefs> セクションに以下のコードのクラスを追加します。大文字と小文字の区別に十分に注意してください
Data Management スキーマ:
<Class extends="DMModel, DMReleaseProcess">
<Name catalog="awm_stda" msg_num="258">MODEL_3D</Name>
<Attribute>SimpleAttribute
<DisplayName>Simple Attribute</DisplayName>
<BusinessObjectClass>com.acme.biz.AcmeTimeAttribute</BusinessObjectClass>
<Visible>true</Visible>
</Attribute>
</Class>
Desktop スキーマ:
<Class extends="DTModel, DTReleaseProcess">
<Name catalog="awm_stda" msg_num="10">me_model</Name>
<Attribute>Attribute
<DisplayName>Simple Attribute</DisplayName>
<BusinessObjectClass>com.acme.biz.AcmeTimeAttribute</BusinessObjectClass>
<Visible>true</Visible>
</Attribute>
</Class>
拡張のテスト
コードは、インストールしなくても、NetBeans から実行できます。Java コードのデバッグを行う場合は、Creo Elements/Direct Model Manager に NetBeans デバッガを接続する方法について、NetBeans デバッガの起動方法を参照してください。
1. NetBeans で dev.properties ファイルを表示し、run.modeStandalone に変更します。
2. 主プロジェクトを実行スクリプトを実行します。Creo Elements/Direct Model Manager Standalone が起動します。
3. 「検索」をクリックして、モデルを検索します。
4. Creo Elements/Direct Model Manager ワークスペースの空白部分を右クリックし、「レイアウト」 > 「モデル」の順に選択します。「モデル属性」ダイアログボックスが開きます。
5. 新しい「Simple Attribute」をクリックします。Creo Elements/Direct Model Manager ワークスペースに列が表示されるようになりました。Simple Attribute の値はユーザインターフェイスを更新するたびに異なることに注意してください。
属性エディタの作成
属性ビジネスオブジェクトを作成するだけでは、この属性が参照される可能性のあるすべての場所に十分に対応することができません。属性エディタクラスを作成して、この属性をすべてのユーザインターフェイスで参照できるようにしてください。
1. Windows エクスプローラを使用して、Java ファイル用のエディタディレクトリ (com\acme\editor) を作成します。
2. AcmeTimeAttributeEditor を以下のように編集します。
package com.acme.editor;import com.osm.biz.*;
import com.osm.exception.*;
import com.osm.editor.WMAttEditorTextField;.
public class AcmeTimeAttributeEditor extends WMAttEditorTextField {
public AcmeTimeAttributeEditor(WMAttribute wmAttribute)
throws WMException {
super(wmAttribute);
}
public AcmeTimeAttributeEditor(WMAttribute wmAttribute, boolean enabled)
throws WMException {
super(wmAttribute, enabled);
}
@Override
public void setAttributeVal(Object val) {
if (val instanceof AcmeTimeAttribute) {
AcmeTimeAttribute att = (AcmeTimeAttribute) val;
try {
setText(String.valueOf(att.getValue()));
} catch (WMException ex) {
ex.printStackTrace();
}
}
}
@Override
public Object getAttributeVal() {
return getText();
}
}
3. F9 キーで新しいクラスコードをコンパイルします。
XML ファイルへのエディタの登録
属性エディタを登録するには、以下のように、AttributeEditorClass タグを xml ファイルに追加しなければなりません。
Data Management スキーマ:
<Class extends="DMModel, DMReleaseProcess">
<Name catalog="awm_stda" msg_num="258">MODEL_3D</Name>
<Attribute>SimpleAttribute
<DisplayName>Simple Attribute</DisplayName>
<BusinessObjectClass>com.acme.biz.AcmeTimeAttribute</BusinessObjectClass>
<AttributeEditorClass>com.osm.datamgmt.editor.AcmeTimeAttributeEditor</AttributeEditorClass>
<Visible>true</Visible>
</Attribute>
</Class>
Desktop スキーマ:
<Class extends="DTModel, DTReleaseProcess">
<Name catalog="awm_stda" msg_num="10">me_model</Name>
<Attribute>SimpleAttribute
<DisplayName>Simple Attribute</DisplayName>
<BusinessObjectClass>com.acme.biz.AcmeTimeAttribute</BusinessObjectClass>
<AttributeEditorClass>com.osm.datamgmt.editor.AcmeTimeAttributeEditor</AttributeEditorClass>
<Visible>true</Visible>
</Attribute>
</Class>
拡張のテスト
テストを行う方法については、拡張のテストを参照してください。新しい属性の正しい値が「DB プロパティ」属性パネルとその他すべてのユーザインターフェイスに表示されるようになったことに注意してください。
拡張の配布
まず、ローカルの Software Distribution Server でパッケージを作成し、テストを行います。次に、最終的な Software Distribution Server で配布用パッケージを準備します。
1. NetBeans で dev.properties を開き、mm.force.updatetrue に設定し、sds.host にローカルマシンの完全修飾名を指定します。
2. 「プロジェクトの構築とパッケージ化」スクリプトを実行します。ローカルマシンでビルドとパッケージのインストールが行われます。
3. スタンドアロンクライアントの Model クラスに属性が表示されるかどうかを確認することによって、拡張をテストします。
4. dev.properties を開き、sds.host に最終的なソフトウェア配布サーバの完全修飾名を設定します。これで、作業ディレクトリに zip ファイルが作成されます。
5. zip ファイルをソフトウェア配布サーバに移動し、インストールディレクトリのルートで解凍します。ユーザが Creo Elements/Direct Model Manager を起動すると、拡張を含む Creo Elements/Direct Model Manager の新しいバージョンが強制的にインストールされます。
備考
属しているクラスからほとんど独立した属性が作成されました。新しい属性を定義する基本クラスを以下のように作成できます。
<Class>
<Name>SIMPLE_ATT_DEF</Name>
<Attribute>SimpleAttribute
<DisplayName>Simple Attribute</DisplayName>
<AttributeEditorClass>com.osm.datamgmt.biz.SimpleAttributeEditor</AttributeEditorClass>
<BusinessObjectClass>com.osm.datamgmt.biz.SimpleAttribute</BusinessObjectClass>
<Visible>true</Visible>
<SendPseudoAttributeTextReferencesToCad>true</SendPseudoAttributeTextReferencesToCad>
</Attribute>
</Class>
これで、SIMPLE_ATT_DEF 定義が定義されました。次に、以下のように extends 分節を使用して、多くのクラスでこの属性を使用できます。
<Class extends="DMModel, DMReleaseProcess, SIMPLE_ATT_DEF">
<Name catalog="awm_stda" msg_num="258">MODEL_3D</Name>
</Class>
<Class extends="DMMasterdata, DMReleaseProcess, SIMPLE_ATT_DEF">
<Name catalog="awm_stda" msg_num="251">MASTERDATA</Name>
</Class>
<Class extends="DMDrawing, DMReleaseProcess, SIMPLE_ATT_DEF">
<Name catalog="awm_stda" msg_num="254">DRAWING_2D</Name>
</Class>
<Class extends="BASE_CHANGENOTE_2D, SIMPLE_ATT_DEF">
<Name catalog="awm_stda" msg_num="255">CHANGENOTE_2D</Name>
</Class>
この手法を使用することによって、非常に簡単に新しい属性を既存クラスに追加し、計算から値を得ることができます。
この方法で、Drawing クラスに新しい属性を作成し、SendPseudoAttributeTextReferencesToCad xml タグを使用して Drafting に送信することもできます。すると、Java コードをほとんど作成することなく、新しいテキスト参照を Drafting/Annotation に転送できます。
これは役に立ちましたか?