特殊な管理 > ビジネスオブジェクトの調整 > タイプおよび属性の管理 > タイプ/属性管理のコマンドラインツール > TypeAttributeMoveTool ユーティリティの使用
  
TypeAttributeMoveTool ユーティリティの使用
TypeAttributeMoveTool コマンドラインユーティリティでは、あるタイプとそのすべてのサブタイプの属性値を、ある属性から別の属性にコピーできます。属性値をコピーした後、このツールはソース属性とその値を削除する際に役立ちます。
タイプの属性間で値をコピーするこの機能は、実質的に属性の名前を変更したり、タイプの階層内でサブタイプから親タイプに、または親タイプからサブタイプに属性を移動したりするために使用することもできます。これらの特殊な使用事例については、以降のセクションで説明します。
* 
EPM ドキュメントまたは CAD ドキュメントに com.ptc.core.lwc.server.TypeAttributeMoveTool を使用することはお勧めしません。ファミリーテーブルオブジェクトの IBA 値に不一致が生じる可能性があるからです。
ソースおよびターゲットの属性は、ローカル属性またはグローバル属性のどちらでも構いません。したがって、以下の 4 つのケースが考えられます。
グローバル属性からローカル属性への値のコピー - パフォーマンスを向上させることができます。ローカル属性の値は、タイプと同じデータベーステーブルに存在するからです。
グローバル属性からグローバル属性への値のコピー - 属性を結合または分割できます。
ローカル属性からローカル属性への値のコピー - 属性を結合または分割するか、1 つのテーブル列から別のテーブル列へデータを移動することができます。
ローカル属性からグローバル属性への値のコピー - 属性に複数の値を設定し、グローバル範囲を指定できます。
ユーティリティを実行する前に、以下の事項を確認してください。
指定されたタイプとソースおよびターゲットの属性は、システムに存在している必要があります。
両方の属性は同じタイプのものであり、データタイプが同じである必要があります。
文字列属性の場合、ソース属性のデータサイズがターゲット属性のデータサイズと同じか、それよりも小さくなければなりません。
計算属性や取得された制約などにおける元のソース属性への参照は、ターゲット属性への参照に変更する必要があります。
ツールを実行する際は、指定されたタイプのすべてのインスタンスが、以下の状態になっている必要があります。
ターゲット属性の現在の値がすべて削除されている。
ソース属性からのすべての値がターゲット属性にコピーされている。
コピー処理中に、複数の値を持つ属性が見つかった場合には、特定の値だけがコピーされます。
複数の値を持つグローバル属性からローカル属性にコピーする場合、複数のグローバル属性値の中から 1 つの値だけがコピーされます。
コピーが実行された後、オブジェクトの情報ページに属性値を表示して、必要な属性値がコピーされたことを確認する必要があります。
複数の値を持つグローバル属性から別のグローバル属性にコピーする場合、複数の値すべてがコピーされます。
ソース属性に「不変」制約が設定され、新しいインスタンスが作成されたり、既存のインスタンスが変更されないようになっている。
すべてのソース属性値がターゲット属性にコピーされた後、「タイプおよび属性の管理」ユーティリティまたは TypeAttributeMoveTool コマンドラインユーティリティを使用して、元のソース属性をシステムから削除しなければなりません。これによって、ソース属性のすべての既存のインスタンスと、その値が削除されます。
* 
ターゲット属性の既存の値が永久的に削除されるので、このユーティリティは十分注意して使用する必要があります。
このユーティリティを実行するための構文を示します。
属性値をコピーするには、次を使用します。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool -u > -p <パスワード>
ソース属性値とその定義をシステムから削除するには、次を使用します。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool -d -u > -p <パスワード>
ここで、
<タイプ名> はタイプの内部名です。
<ソース属性名> はソース属性の内部名です。
<ターゲット属性名> はターゲット属性の内部名です。
<ユーザー_ID> はサイトの管理者ユーザーのユーザー名です。
<パスワード> はサイトの管理者ユーザーのパスワードです。
* 
ローカル属性は、基本となるオブジェクトクラスの列に直接保存されます。クラスに新しいローカル属性で利用できる列がない場合は、新しい標準属性の作成を完了しようとしたときにエラーメッセージが表示されます。デフォルトの状態では、オブジェクトクラスにはローカル属性のための列がありません。
ローカル属性の列を追加する方法の詳細については、タイプへの列の追加を参照してください。
詳細なヘルプを表示するには、コマンドラインユーティリティで windchill com.ptc.core.lwc.server.TypeAttributeMoveTool -h を実行します。
属性の名前変更
属性の内部名は変更できませんが、TypeAttributeMoveTool ユーティリティを使用して、変更前の内部名を持つ属性から、目的の内部名を持つ別の属性に値を移動することによって、同じ結果を得ることができます。
たとえば、内部名 "ABC" を持つ属性がある場合に、この名前を "XYZ" に変更する場合は、次の手順に従ってこの変更を行うことができます。
1. 「タイプおよび属性の管理」ユーティリティで、内部名 "XYZ" を持つ属性を作成し、内部名 "ABC" を持つ属性と同じタイプおよび同じデータタイプを指定します。
2. Windchill シェルから、TypeAttributeMoveTool ユーティリティを実行します。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool <タイプ名> "ABC" "XYZ" -u <ユーザー_ID> -p <パスワード>
これにより、内部名 "ABC" を持つ属性から内部名 "XYZ" を持つ属性に、すべての属性値インスタンスがコピーされます。
3. 内部名 "XYZ" を持つ属性のインスタンス値がすべて正しいことを確認した後、内部名 "ABC" を持つ属性を削除できます。
サブタイプから親タイプまたは親タイプからサブタイプへの属性の移動
あるタイプから別のタイプへと属性を移動することはできませんが、TypeAttributeMoveTool ユーティリティを使用すると、タイプ階層内で結果的にこの移動を実現できます。サブタイプに対して作成した属性の値を、親タイプまたはその他の祖先タイプから継承した属性へと移動するか、親タイプまたはその他の祖先タイプから継承した属性の値を、サブタイプに対して作成した属性へと移動します。
タイプ階層内で、サブタイプから親タイプまたはその他の祖先タイプへと属性定義を上方に移動するには、以下の手順に従います。
1. 「タイプおよび属性の管理」ユーティリティで、サブタイプの属性と同じデータタイプを指定して、親またはその他の祖先タイプの新しい属性を作成します。サブタイプは、親タイプからこの新規属性を継承します。
2. TypeAttributeMoveTool を使用して、属性の名前変更で説明したとおり、サブタイプの属性の値を親タイプから継承した属性に移動します。
3. 結果が予期したとおりであることを確認します。
4. 子タイプからの属性の削除
タイプ階層内で、親タイプまたはその他の祖先タイプからサブタイプへと属性定義を下方に移動するには、以下の手順に従います。
1. 「タイプおよび属性の管理」ユーティリティで、親タイプまたはその他の祖先タイプの属性と同じデータタイプを使用して、サブタイプに新しい属性を作成します。この子タイプは、新たに作成した属性と、親タイプまたはその他の祖先タイプから継承した属性の両方を持つ状態になります。
2. TypeAttributeMoveTool を使用して、属性の名前変更で説明したとおり、親タイプまたはその他の祖先タイプから継承した属性の値を、サブタイプに新たに作成した属性へと移動します。
3. 結果が予期したとおりであることを確認します。
4. 親タイプの属性を削除します。
* 
属性の内部名は、タイプのすべてのサブタイプおよび親タイプにわたって一意であることが必要です。元のタイプの属性の内部名を、属性の移動先であるターゲットタイプの属性の内部名として使用する場合は、まず一時的な属性をターゲットタイプに作成します。タイプ階層内で属性定義を上方または下方に移動する前述の手順に従って、属性の値をターゲットタイプの一時属性に移動します。
元の属性を削除した後、目的の内部名を持つ新規属性をターゲットタイプに作成し、属性の名前変更で説明したとおり、属性インスタンスの値を一時属性から新しく作成した属性に移動できます。
詳細については、以下の具体例を参照してください。
タイプ階層内でのローカル属性定義の下方移動
タイプ階層内でのローカル属性定義の上方移動
タイプ階層内でのグローバル属性定義の下方移動
タイプ階層内でのグローバル属性定義の上方移動
タイプ階層内でのその他のタイプの属性の上下移動
* 
これらの例では、すべてのタイプおよび属性で、内部名に表示名と同じ値を使用しています。
タイプ階層内でのローカル属性定義の下方移動
Nigel の会社では、Part タイプのサブタイプを MyPart という名前で作成し、そのサブタイプとして MySubPart を作成しました。MyPart サブタイプには Color というローカル属性が定義されており、MySubPart タイプによって継承されています。MyPartMySubPart の両方で Color 属性に値が保持されていますが、同社は、MySubPart タイプのみで色を指定することを決定します。結果として、Nigel は、MyPart サブタイプの Color 属性定義をタイプ階層下方の MySubPart サブタイプまで移動して、MySubPart サブタイプで Color 属性を定義し、MySubPartColor 属性にすでに定義されている値のみが保持されるようにすることを検討します。
* 
MyPart タイプに、MySubPart サブタイプの子ではなくピアであるサブタイプがほかに存在している場合、MyPart タイプで定義され MyPart タイプから継承される、元の Color 属性で指定されていた値は、元の Color 属性がこのプロセスの最後で削除されるときに削除されます。
この設定を実行するには、以下の手順に従います。
1. 「タイプおよび属性の管理」ユーティリティで、Nigel は、データタイプを含め、MyPart サブタイプで定義されている Color 属性の詳細情報を記録します。
2. Nigel は、元の Color 属性と同一のローカル属性を ColorCopy という名前で MyPart サブタイプに新規作成します。ColorCopy 属性も、MySubPart サブタイプによって継承されるようになります。
3. Windchill シェルで、Nigel は以下のコマンドを実行して Color 属性の値を MyPart サブタイプの ColorCopy 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MyPart Color ColorCopy
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
MySubPart サブタイプの Color 属性は MyPart サブタイプから継承されるため、MySubPart サブタイプの Color 属性のすべての値も、継承先の ColorCopy 属性にコピーされます。
4. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MyPart サブタイプの Color 属性を削除します。この属性のすべてのインスタンスも、属性値を含めて削除されます。
5. Nigel は、元の Color 属性と同一のローカル属性を Color という名前で MySubPart サブタイプに新規作成します。
6. Windchill シェルで、Nigel は以下のコマンドを実行して、継承された ColorCopy 属性の値を MyPart サブタイプに定義された Color 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart ColorCopy Color
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
7. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MyPart サブタイプの ColorCopy 属性を削除します。
タイプ階層内でのローカル属性定義の上方移動
Nigel は、MySubPart サブタイプにある Size というローカル属性を、タイプ階層内で MyPart サブタイプへと上方に移動して、この属性が MySubPart サブタイプおよびその他すべての MyPart のサブタイプによって継承されるようにすることを検討しています。MySubPart サブタイプの Size 属性にはすでに値が存在しているため、Size 属性が MyPart サブタイプへと上方に移動された後も、これらの値をそのまま保持することが目標です。
この設定を実行するには、以下の手順に従います。
1. 「タイプおよび属性の管理」ユーティリティで、Nigel は、データタイプを含め、MySubPart サブタイプで定義されている Size 属性の詳細情報を記録します。
2. Nigel は、MySubPart サブタイプの元の Size 属性と同一のローカル属性を SizeCopy という名前で MyPart サブタイプに新規作成します。SizeCopy 属性も、MySubPart サブタイプによって継承されるようになります。
3. Windchill シェルで、Nigel は以下のコマンドを実行して Size 属性の値を MySubPart サブタイプの継承先 SizeCopy 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart Size SizeCopy
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
4. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MySubPart サブタイプの Size 属性を削除します。
5. Nigel は、元の Size 属性と同一のローカル属性を Size という名前で MyPart サブタイプに新規作成します。MySubPart サブタイプは、Size 属性を MyPart サブタイプから継承するようになります。
6. Windchill シェルで、Nigel は以下のコマンドを実行して、継承された SizeCopy 属性の値を MyPart サブタイプの新しい Size 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MyPart SizeCopy Size
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
7. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MyPart サブタイプの SizeCopy 属性を削除します。
タイプ階層内でのグローバル属性定義の下方移動
MyPart サブタイプに Shape というグローバル属性が定義され、MySubPart サブタイプによって継承されます。MyPart サブタイプと MySubPart サブタイプの両方で Shape 属性に値が保持されていますが、同社は、MySubPart タイプのみで形状を指定することを決定します。結果として、Nigel は、MyPart サブタイプの Shape 属性定義をタイプ階層下方の MySubPart サブタイプまで移動して、MySubPart サブタイプで Shape 属性を定義し、MySubPartShape 属性にすでに定義されている値のみが保持されるようにすることを検討します。
* 
MyPart タイプに、MySubPart サブタイプの子ではなくピアであるサブタイプがほかに存在している場合、MyPart タイプで定義され MyPart タイプから継承される、元の Shape 属性で指定されていた値は、元の Shape 属性がこのプロセスの最後で削除されるときに削除されます。
この設定を実行するには、以下の手順に従います。
1. 「タイプおよび属性の管理」ユーティリティで、Nigel は、MyPart サブタイプで定義されている Shape 属性の詳細情報を記録します。
2. Nigel は、1 つの点を除いて元の Shape 属性と同一のグローバル属性を、ShapeCopy という名前で MyPart サブタイプに新規作成します。ある特定の再利用可能属性を参照できるグローバル属性は、タイプ階層内で 1 つのみです。したがって、新しい ShapeCopy 属性は、Shape 属性とは別の再利用可能属性をベースとしている必要があります。移動の操作を正常に完了するには、両方の再利用可能属性のデータタイプが同一である必要があります。
ShapeCopy 属性も、MySubPart サブタイプによって継承されるようになります。
3. Windchill シェルで、Nigel は以下のコマンドを実行して Shape 属性の値を MyPart サブタイプの ShapeCopy 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MyPart Shape ShapeCopy
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
MySubPart サブタイプの Shape 属性は MyPart サブタイプから継承されるため、MySubPart サブタイプの Shape 属性のすべての値も、継承先の ShapeCopy 属性にコピーされます。
4. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MyPart サブタイプの Shape 属性を削除します。この属性のすべてのインスタンスも、属性値を含めて削除されます。
5. Nigel は、元の Shape 属性が参照していたものと同一の再利用可能属性を参照していることを含め、元の Shape 属性と同一の新しいグローバル属性を、Shape という名前で MySubPart サブタイプに作成します。
6. Windchill シェルで、Nigel は以下のコマンドを実行して、継承された ShapeCopy 属性の値を MySubPart サブタイプに定義された Shape 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart ShapeCopy Shape
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
7. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MySubPart サブタイプの ShapeCopy 属性を削除します。
タイプ階層内でのグローバル属性定義の上方移動
Nigel は、MySubPart サブタイプにある Material というグローバル属性を MyPart サブタイプまでタイプ階層内で上方に移動して、この属性が MySubPart サブタイプおよびその他すべての MyPart のサブタイプによって継承されるようにすることを検討しています。MySubPart サブタイプの Material 属性にはすでに値が存在しているため、Material 属性が MyPart サブタイプへと上方に移動された後も、これらの値をそのまま保持することが目標です。
この設定を実行するには、以下の手順に従います。
1. 「タイプおよび属性の管理」ユーティリティで、Nigel は、MySubPart サブタイプで定義されている Material 属性の詳細情報を記録します。
2. Nigel は、1 つの点を除いて MySubPart サブタイプの元の Material 属性と同一のグローバル属性を、MaterialCopy という名前で MyPart サブタイプに新規作成します。ある特定の再利用可能属性を参照できるグローバル属性は、タイプ階層内で 1 つのみです。したがって、新しい MaterialCopy 属性は、Material 属性とは別の再利用可能属性をベースとしている必要があります。移動の操作を正常に完了するには、両方の再利用可能属性のデータタイプが同一である必要があります。
3. Windchill シェルで、Nigel は以下のコマンドを実行して Material 属性の値を MySubPart サブタイプの継承先 MaterialCopy 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart Material MaterialCopy
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
4. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MySubPart サブタイプの Material 属性を削除します。
5. Nigel は、元の Material 属性が参照していたものと同一の再利用可能属性を参照していることを含め、元の Material 属性と同一の新しいグローバル属性を、Material という名前で MyPart サブタイプに作成します。
6. Windchill シェルで、Nigel は以下のコマンドを実行して、MySubPart サブタイプの MaterialCopy 属性の値を、MySubPart サブタイプから継承される新しい Material 属性へとコピーします。
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart MaterialCopy Material
ユーザー名とパスワードの入力を求められた Nigel は、自身の管理者情報を入力します。
7. Nigel は、「タイプおよび属性の管理」ユーティリティに戻り、MyPart サブタイプの MaterialCopy 属性を削除します。
タイプ階層内でのその他のタイプの属性の上下移動
エイリアス属性、計算された属性、翻訳されたテキスト属性は、「タイプおよび属性の管理」ユーティリティで直接計算することにより、タイプ階層内の各レベル間で移動できます。エイリアス属性、計算された属性、翻訳されたテキスト属性にはインスタンスデータが存在しないため、これらの属性を削除した後、必要な位置に再作成した場合も、インスタンスデータが失われることはありません。
エイリアス属性、計算された属性、翻訳されたテキスト属性をタイプ階層内で上方または下方に移動するには、以下の手順に従います。
1. エイリアス属性、計算された属性、翻訳されたテキスト属性の現在の定義を正確に記録します。
2. 属性を削除します。
3. タイプ階層内で、必要なタイプの属性を再作成します。