使用 TypeAttributeMoveTool 公用程式
TypeAttributeMoveTool 指令行公用程式可讓您針對類型及其所有子類型,將屬性值從一個屬性複製到另一個屬性。複製屬性值之後,此工具會協助刪除來源屬性及其值。
基本上,針對類型在屬性之間複製屬性值的能力也可用於重新命名屬性,或在類型階層內移動屬性 (將屬性從子類型移動到父類型,或從父類型移動到子類型)。這些特殊使用案例會在後面幾節進行介紹。
|
不建議針對 EPM 文件/CAD 文件使用 com.ptc.core.lwc.server.TypeAttributeMoveTool,因為它可能會導致族表物件 IBA 值不一致。
|
來源與目標屬性可以是本機屬性或全域屬性,且允許下列四種情境:
• 將值從全域屬性複製到本機屬性 - 以實現效能改善,這是因為本機屬性值位於與類型相同的資料庫表格中,而不是在不同的表格中。
• 將值從全域屬性複製到全域屬性 - 以合併或分割屬性。
• 將值從本機屬性複製到本機屬性 - 以合併或分割屬性,或者將資料從一個表格欄移至另一個表格欄。
• 將值從本機屬性複製到全域屬性 - 以讓屬性擁有多個值並擁有全域範圍。
在執行公用程式之前:
• 指定的類型及來源和目標屬性都必須存在於系統中。
• 兩種屬性的類型必須相同,且必須具有相同資料類型。
• 對於字串屬性,來源屬性的資料大小必須與目標屬性的資料大小相同,或比其更小。
• 必須變更原始來源屬性的任何參考 (例如在已計算屬性或衍生條件約束中) 以參考目標屬性。
在執行工具時,針對指定類型的所有實例:
• 會刪除目標屬性的任何目前值。
• 會將來源屬性中的所有值複製到目標屬性。
• 如果在此複製流程期間遇到多重數值的屬性,則只會複製某些值:
◦ 如果從多重數值的全域屬性複製到本機屬性,則只會複製其中一個多重全域屬性值。
執行複製之後,您必須在物件資訊頁上檢視屬性來確認已複製想要的屬性值。
◦ 如果從多重數值的全域屬性複製到另一個全域屬性,則會複製所有多重值。
• 會在來源屬性上設定「不可變」條件約束,以防止建立新實例或變更現有實例。
將所有來源屬性值都複製到目標屬性之後,您需要使用「類型及屬性管理」公用程式或 TypeAttributeMoveTool 指令行公用程式從系統刪除原始來源屬性。這樣將會刪除來源屬性的所有現有實例及其值。
|
由於會永久刪除目標屬性上的任何現有值,因此請小心使用此公用程式!
|
執行公用程式的語法如下:
• 欲複製屬性值,請使用
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool <typeName> <sourceAttributeName> <targetAttributeName> -u <userID> -p <password>
• 欲從系統中刪除來源屬性值及其定義,請使用
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool <typeName> <sourceAttributeName> <targetAttributeName> -d -u <userID> -p <password>
其中︰
• <typeName> 是類型的內部名稱。
• <sourceAttributeName> 是來源屬性的內部名稱。
• <targetAttributeName> 是目標屬性的內部名稱。
• <userID> 是網站管理員使用者的使用者名稱。
• <password> 是網站管理員使用者的密碼。
|
本機屬性直接儲存在基礎物件類別的欄中。若類別上沒有可供新本機屬性使用的其他欄,則當您試圖完成建立新本機屬性時,系統會顯示錯誤訊息。目前任何物件類別上均無額外的欄可供本機屬性使用。
|
欲取得進一步的說明,您可以在指令行公用程式中執行 windchill com.ptc.core.lwc.server.TypeAttributeMoveTool -h。
重新命名屬性
雖然屬性的內部名稱無法變更,但 TypeAttributeMoveTool 公用程式可用於透過將值從使用舊內部名稱的屬性移動到使用所需內部名稱的另一個屬性,來達到相同的結果。
例如,如果您要將屬性的內部名稱 "ABC" 變更為 "XYZ",您可以藉由完成下列步驟來實現:
1. 在「類型及屬性管理」公用程式中,在與內部名稱為 "ABC" 的屬性相同的類型上建立內部名稱為 "XYZ" 的屬性,且該屬性的資料類型與內部名稱為 "ABC" 的屬性相同。
2. 從 Windchill shell 中,執行 TypeAttributeMoveTool 公用程式:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool <typeName> "ABC" "XYZ" -u <userID> -p <password>
這樣會將所有屬性值實例從內部名稱為 "ABC" 的屬性複製到內部名稱為 "XYZ" 的屬性。
3. 在您確認內部名稱為 "XYZ" 之屬性的實例值一切正常之後,您可以刪除內部名稱為 "ABC" 的屬性。
將屬性從子類型移動到父類型,或從父類型移動到子類型
雖然無法將屬性從一種類型移動到另一種類型,但可以使用 TypeAttributeMoveTool 公用程式來在類型階層內達成此目標,方法是將在子類型上建立之屬性的值移動到繼承自父類型或其他上階類型的屬性,或將值從繼承自父類型或其他上階類型的屬性移動到在子類型上建立的屬性。
欲在類型階層中將屬性定義移動到較高層級,即從子類型移動到父類型或其他上階類型,請完成下列步驟:
1. 在「類型及屬性管理」公用程式中,在具有與子類型上的屬性相同資料類型的父類型或其他上階類型上建立新屬性。現在,子類型會從父類型繼承此新屬性。
2. 使用 TypeAttributeMoveTool 可將值從子類型上的屬性移動到繼承自父類型的屬性,如重新命名屬性所述。
3. 確認結果是否如預期。
4. 從子類型刪除屬性。
欲在類型階層中將屬性定義移動到較低層級,即從父類型或其他上階類型移動至子類型,請完成下列步驟:
1. 在「類型及屬性管理」公用程式中,在具有與父類型或其他上階類型上屬性相同資料類型的子類型上建立新屬性。現在,子類型同時擁有新建立的屬性,以及先前繼承自父類型或其他上階類型的屬性。
2. 使用 TypeAttributeMoveTool 可將值從繼承自父類型或其他上階類型的屬性移動到子類型上新建立的屬性,如重新命名屬性所述。
3. 確認結果是否如預期。
4. 從父類型刪除屬性。
|
屬性的內部名稱在類型的所有子類型與父類型中必須具唯一性。 如果您要將原始類型上屬性的內部名稱,作為目標類型 (要將屬性移動至的目標類型) 上屬性的內部名稱使用,請先在目標類型上建立暫時屬性。使用之前為在類型階層中將屬性定義移動到較高或較低層級提供的步驟,將屬性值移動到目標類型上的暫時屬性。
刪除原始屬性之後,可在目標類型上建立具有所需內部名稱的新屬性,並且屬性實例值會從暫時屬性移動到新建立的屬性,如重新命名屬性所述。
|
如需詳細資訊,請參閱下列詳細範例:
• 在類型階層中將本機屬性定義移動到較低層級
• 在類型階層中將本機屬性定義移動到較高層級
• 在類型階層中將全域屬性定義移動到較低層級
• 在類型階層中將全域屬性定義移動到較高層級
• 在類型階層中將其他類型的屬性移動到較低或較高層級
|
下列範例的目的在於讓所有類型與屬性針對內部名稱與其顯示名稱使用相同的值。
|
在類型階層中將本機屬性定義移動到較低層級
Nigel 的公司已建立名為 MyPart 之「零件」類型的子類型,而該子類型擁有名為 MySubPart 的子類型。目前,已在 MyPart 子類型上定義名為 Color 的本機屬性,且其由 MySubPart 類型繼承。在 MyPart 與 MySubPart 上都有 Color 屬性的值,但是公司已決定只需在 MySubPart 類型上指定顏色。因此,Nigel 要在類型階層中,將 Color 屬性定義從 MyPart 子類型向下移動到 MySubPart 子類型,以便在 MySubPart 子類型上定義 Color 屬性,且只會保留已針對 MySubPart 上的 Color 屬性定義的值。
|
如果 MyPart 類型的某些其他子類型為 MySubPart 子類型的對等項,而不是子項,則當在此流程結尾刪除原始 Color 屬性時,會刪除針對在 MyPart 類型上定義及繼承自此類型之原始 Color 屬性指定的任何值。
|
這可透過完成下列步驟來實現:
1. 在「類型及屬性管理」公用程式中,Nigel 認真記下在 MyPart 子類型上定義之 Color 屬性的詳細資訊,其中包括資料類型。
2. Nigel 在 MyPart 子類型上建立新的本機屬性,名為 ColorCopy,且其與原始 Color 屬性相同。現在,ColorCopy 屬性也會由 MySubPart 子類型繼承。
3. Nigel 從 Windchill shell 執行下列指令,來將 MyPart 子類型上 Color 屬性的值複製到 ColorCopy 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MyPart Color ColorCopy
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
由於 MySubPart 子類型會從 MyPart 子類型繼承 Color 屬性,因此也會將 MySubPart 子類型上 Color 屬性的所有值複製到繼承的 ColorCopy 屬性。
4. 返回「類型及屬性管理」公用程式之後,Nigel 從 MyPart 子類型中刪除 Color 屬性。如此一來,也會刪除該屬性包括屬性值在內的所有實例。
5. 現在,Nigel 在 MySubPart 子類型上建立名為 Color 的新本機屬性,且其與原始 Color 屬性相同。
6. Nigel 從 Windchill shell 執行下列指令,來將繼承之 ColorCopy 屬性的值,複製到目前在 MySubPart 子類型上定義的 Color 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart ColorCopy Color
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
7. 返回「類型及屬性管理」公用程式之後,Nigel 從 MyPart 子類型中刪除 ColorCopy 屬性。
在類型階層中將本機屬性定義移動到較高層級
MySubPart 子類型上有名為 Size 的本機屬性,Nigel 想在類型階層中將其向上移動到 MyPart 子類型,以便由 MySubPart 子類型及 MyPart 的所有其他子類型繼承該屬性。MySubPart 子類型上的 Size 屬性已經有值,且 Nigel 想在將 Size 屬性向上移動到 MyPart 子類型之後,將這些值保持不變。
這可透過完成下列步驟來實現:
1. 在「類型及屬性管理」公用程式中,Nigel 認真記下在 MySubPart 子類型上定義之 Size 屬性的詳細資訊,其中包括資料類型。
2. Nigel 在 MyPart 子類型上建立新的本機屬性,名為 SizeCopy,且其與 MySubPart 子類型上的原始 Size 屬性相同。現在,SizeCopy 屬性會由 MySubPart 子類型繼承。
3. Nigel 從 Windchill shell 執行下列指令,來將 MySubPart 子類型上 Size 屬性的值複製到繼承的 SizeCopy 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart Size SizeCopy
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
4. 返回「類型及屬性管理」公用程式之後,Nigel 從 MySubPart 子類型中刪除 Size 屬性。
5. 現在,Nigel 會在 MyPart 子類型上建立名為 Size 的新本機屬性,且其與原始 Size 屬性相同。現在,MySubPart 子類型會從 MyPart 子類型繼承 Size 屬性。
6. Nigel 從 Windchill shell 執行下列指令,來將繼承之 SizeCopy 屬性的值複製到 MyPart 子類型上的新 Size 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MyPart SizeCopy Size
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
7. 返回「類型及屬性管理」公用程式之後,Nigel 從 MyPart 子類型中刪除 SizeCopy 屬性。
在類型階層中將全域屬性定義移動到較低層級
名為 Shape 的全域屬性已在 MyPart 子類型上定義,且由 MySubPart 子類型繼承。在 MyPart 與 MySubPart 上都有 Shape 屬性的值,但是公司已決定只需在 MySubPart 類型上指定形狀。因此,Nigel 要在類型階層中,將 Shape 屬性定義從 MyPart 子類型向下移動到 MySubPart 子類型,以便在 MySubPart 子類型上定義 Shape 屬性,且只會保留已針對 MySubPart 上的 Shape 屬性定義的值。
|
如果 MyPart 類型的某些其他子類型為 MySubPart 子類型的對等項,而不是子項,則當在此流程結尾刪除原始 Shape 屬性時,會刪除針對在 MyPart 類型上定義及繼承自此類型之原始 Shape 屬性指定的任何值。
|
這可透過完成下列步驟來實現:
1. 在「類型及屬性管理」公用程式中,Nigel 認真記下在 MyPart 子類型上定義之 Shape 屬性的詳細資訊。
2. Nigel 在 MyPart 子類型上建立新的全域屬性,名為 ShapeCopy,且其與原始 Shape 屬性相同,但有一個例外。在指定類型階層內只有一個全域屬性可以參考特定的可重新使用屬性。因此,新 ShapeCopy 屬性必須以與 Shape 屬性不同的可重新使用屬性為基礎。這兩個可重新使用屬性必須擁有相同的資料類型,才能讓移動動作成功。
現在,ShapeCopy 屬性也會由 MySubPart 子類型繼承。
3. Nigel 從 Windchill shell 執行下列指令,來將 MyPart 子類型上 Shape 屬性的值複製到 ShapeCopy 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MyPart Shape ShapeCopy
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
由於 MySubPart 子類型會從 MyPart 子類型繼承 Shape 屬性,因此也會將 MySubPart 子類型上 Shape 屬性的所有值複製到繼承的 ShapeCopy 屬性。
4. 返回「類型及屬性管理」公用程式之後,Nigel 從 MyPart 子類型中刪除 Shape 屬性。如此一來,也會刪除該屬性包括屬性值在內的所有實例。
5. 現在,Nigel 在 MySubPart 子類型上建立名為 Shape 的新全域屬性,且其與原始 Shape 屬性相同,其中包括參考與原始 Shape 屬性相同的可重新使用屬性。
6. Nigel 從 Windchill shell 執行下列指令,來將繼承之 ShapeCopy 屬性的值,複製到目前在 MySubPart 子類型上定義的 Shape 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart ShapeCopy Shape
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
7. 返回「類型及屬性管理」公用程式之後,Nigel 從 MySubPart 子類型中刪除 ShapeCopy 屬性。
在類型階層中將全域屬性定義移動到較高層級
MySubPart 子類型上有名為 Material 的全域屬性,Nigel 想在類型階層中將其向上移動到 MyPart 子類型,以便由 MySubPart 子類型及 MyPart 的所有其他子類型繼承該屬性。MySubPart 子類型上的 Material 屬性已經有值,且 Nigel 想在將 Material 屬性向上移動到 MyPart 子類型之後,將這些值保持不變。
這可透過完成下列步驟來實現:
1. 在「類型及屬性管理」公用程式中,Nigel 認真記下在 MySubPart 子類型上定義之 Material 屬性的詳細資訊。
2. Nigel 在 MyPart 子類型上建立新的全域屬性,名為 MaterialCopy,且其與 MySubPart 子類型上的原始 Material 屬性相同,但有一個例外。在指定類型階層內只有一個全域屬性可以參考特定的可重新使用屬性。因此,新 MaterialCopy 屬性必須以與 Material 屬性不同的可重新使用屬性為基礎。這兩個可重新使用屬性必須擁有相同的資料類型,才能讓移動動作成功。
3. Nigel 從 Windchill shell 執行下列指令,來將 MySubPart 子類型上 Material 屬性的值複製到繼承的 MaterialCopy 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart Material MaterialCopy
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
4. 返回「類型及屬性管理」公用程式之後,Nigel 從 MySubPart 子類型中刪除 Material 屬性。
5. 現在,Nigel 在 MyPart 子類型上建立名為 Material 的新全域屬性,且其與原始 Material 屬性相同,其中包括參考與原始 Material 屬性相同的可重新使用屬性。
6. Nigel 從 Windchill shell 執行下列指令,來將 MySubPart 子類型上 MaterialCopy 屬性的值,複製到現在繼承自 MyPart 子類型的新 Material 屬性:
windchill com.ptc.core.lwc.server.TypeAttributeMoveTool MySubPart MaterialCopy Material
當出現提示時,Nigel 輸入其管理員使用者名稱與密碼。
7. 返回「類型及屬性管理」公用程式之後,Nigel 從 MyPart 子類型中刪除 MaterialCopy 屬性。
在類型階層中將其他類型的屬性移動到較低或較高層級
透過在「類型及屬性管理」公用程式中直接操作,可以將別名、已計算及已翻譯文字屬性從一個層級移動到類型階層內的另一個層級。由於別名、已計算或已翻譯文字屬性沒有實例資料,因此刪除它們並在所需位置重新建立,並不會導致遺失實例資料。
欲在類型階層內將別名、已計算或已翻譯文字屬性移動到較高或較低層級,請完成下列步驟:
1. 準確記錄目前定義別名、已計算或已翻譯文字屬性的方式。
2. 刪除屬性。
3. 在類型階層內的所需類型上重新建立屬性。