永続性データストアシーケンスのカスタマイズ
目的
Windchill で使用するための新しいデータストアシーケンスを作成します。
バックグラウンド
Windchill はデータストアスキーマオブジェクトを使用してシーケンスを実装します。Oracle では、シーケンススキーマオブジェクトとして直接実装されます。SQLServer では、テーブルとアクセスストアドプロシージャとして実装されます。
範囲/適用可能性/前提条件
• このマニュアルでは、Windchill データストアディレクトリ、<Windchill_ホーム>/db にアクセスでき、ターゲットデータストアの DDL スクリプトを実行する権限を持つことを前提としています。
• モデリングされたカスタマイズ手順では、Windchill Java アノテーションのシーケンスのサポートが正常にインストールされ、設定されていることを前提としています。
予測される結果
このソリューションの最終結果は、データストアシーケンスの作成です。
ソリューション
Windchill Java アノテーションを使用して、シーケンスクラスをモデリングします。
ソリューションエレメント
エレメント
|
タイプ
|
説明
|
<MySequence>
|
Java クラス
|
Windchill でデータストアシーケンスを表すクラス。
|
手順 - モデリングされたデータストアシーケンスの作成
1. <MySequence> を拡張するクラス <MySequence> を <MyPackage> に作成します。
2. "GenAsDatastoreSequence" のアノテーションプロパティとシーケンスプロパティをアノテーションの引数として指定します。デフォルトの値が設定されていない場合は、初期シード値および増加値を指定します。たとえば、シード値が 1000 で増分が 100 の場合、結果の Java ソースファイルは次のようになります。
import com.ptc.windchill.annotations.metadata.GenAsDatastoreSequence;
@GenAsDatastoreSequence (objectName="mySequence", seed=1000, increment=100)
public class MySequence extends _MySequence {
}
3. <MyPackage> の <MySequence>.java クラスをコンパイルします。
4. DDL スクリプトを生成します。
5. シーケンス DDL を実行します。Windchill シェルで次を実行します。<WindchillHome>/db/execute_sql_script.bat <MyPackage>/create_<MySequence>_ sequence.sql
カスタマイズポイント
手順 - Oracle でのモデリングされていないデータストアシーケンスの作成
モデリングされていないシーケンスを作成すると、Windchill イントロスペクション情報にデータベーススキーマオブジェクトが含まれません。したがって、この情報に依存するツール (Windu、更新ツールなど) はこれらのオブジェクトを Windchill と無関係として扱います。
1. シーケンス DDL スクリプト "create_<MySequence>_sequence.sql" を "<Windchill_ホーム>/db/sql" ディレクトリに作成します。マルチバイトシステムの場合、ディレクトリ "<Windchill_ホーム>/db/sql3" を使用します。
2. このスクリプトに次の行を追加します。<MySequence>、<MySequenceSeed>、および <MySequenceIncrement> はそれぞれ置き換えます。
exec WTPK.createSequence('<MySequence>', <MySequenceSeed>,
<MySequenceIncrement>)
3. シーケンス DDL を実行します。Windchill シェルで次を実行します。<WindchillHome>/db/execute_sql_script.bat create_<MySequence>_sequence.sql
手順 - SQL サーバーでのモデリングされていないデータストアシーケンスの作成
モデリングされていないシーケンスを作成すると、Windchill イントロスペクション情報にデータベーススキーマオブジェクトが含まれません。したがって、この情報に依存するツール (Windu、更新ツールなど) はこれらのオブジェクトを Windchill と無関係として扱います。
1. シーケンス DDL スクリプト "create_<MySequence>_sequence.sql" を "<Windchill_ホーム>/db/sqlServer" ディレクトリに作成します。
2. このスクリプトに次の行を追加します。<MySequence>、<MySequenceSeed>、および <MySequenceIncrement> はそれぞれ置き換えます。
CREATE TABLE wt_sequence_<MySequence>(dummy
CHAR(1),
value BIGINT IDENTITY(<MySequenceSeed>, <MySequenceIncrement>))
go
CREATE PROCEDURE wt_get_next_sequence_<MySequence>
@returnValue BIGINT OUTPUT
AS
INSERT wt_sequence_<MySequence> (dummy) VALUES ('x')
SELECT @returnValue = SCOPE_IDENTITY()
go
3. シーケンス DDL を実行します。Windchill シェルで <WindchillHome>/db/execute_sql_script.bat create_<MySequence>_sequence.sql <DB_USERNAME> <DB_PASSWORD> を実行します。
手順 - モデリングされたシーケンスの次の値の入手
前述の基本手順では、シーケンスクラスを作成しました。このシーケンスの次の値を入手するには、PersistenceManager.getNextSequence(Class) を渡す <MyPackage>.<MySequence>.class メソッドを使用します。
制限事項
なし。
サンプルコード
Windchill コードでの使用例
シーケンス値は Windchill コード内のさまざまな領域で使用されます。Where-Used Tool および Javadoc の wt.fc.DatastoreSequence のサブクラスに関する記述を参照してください。
パッケージ化されたサンプル
なし。
モデリングされていない場合のスクリプト例
Oracle
次に示すのは、1 で始まり、間隔が 20 の partNumber シーケンスのスクリプト例です。
exec WTPK.createSequence('partNumber', 1, 20)
SQL Server
次に示すのは、1 で始まり、間隔が 20 の partNumber シーケンスのスクリプト例です。
CREATE TABLE wt_sequence_partNumber (dummy
CHAR(1), value BIGINT IDENTITY(1,20))
go
CREATE PROCEDURE wt_get_next_sequence_partNumber @returnValue BIGINT OUTPUT
AS
INSERT wt_sequence_<MySequence> (dummy) VALUES ('x')
SELECT @returnValue = SCOPE_IDENTITY()
go
関連パッケージ/クラスの Javadoc
• 基本モジュール
wt.fc