データ管理機能 > 変更の管理 > 変更管理の管理 > 変更関連付け規則の管理 > フレキシブル変更リンクの変換 > カスタムリンクからフレキシブル変更リンクへの変換
  
カスタムリンクからフレキシブル変更リンクへの変換
カスタムの変更管理オブジェクトまたは変更リンクが存在する場合は、さらに以下の手順に従って、フレキシブル変更管理オブジェクトに変換する必要があります。
変更プロセスのリンクを更新 - 追加の属性を持つカスタム変更リンクが存在する場合のみ必須です。
カスタムリンクタイプごとに、コンバータ委任を作成します。
カスタムリンクタイプごとに、コンバータ規則ファイルを作成します。
カスタム準備委任を作成 - 提供されている準備委任が要件を満たしていない場合のみ必須です。


変更プロセスのリンクを更新
カスタムリンクに追加の属性がある場合、カスタムリンクを変更プロセスリンクに変換することはできません。
この作業は、AddColumns ユーティリティを使用して実行できます。詳細については、AddColumns ツールの実行を参照してください。
追加の属性を持つカスタムリンクの例については、次のセクションを参照してください。


カスタムリンクタイプのコンバータ委任
この委任を使用すると、カスタムレガシーリンクの固有値を使用して、変更プロセスのリンクを更新できます。新しい委任を登録するには、プロパティとプロパティファイルを参照してください。
Windchill では、以下のリンクコンバータ委任を登録できます。
<!-- Delegates for converting legacy change link to flexible links. -->
<Service context="default" name="wt.change2.flexible.FlexibleChangeLinkConverterDelegate">
<Option selector="wt.change2.FormalizedBy" cardinality="singleton"
serviceClass="wt.change2.flexible.DefaultFlexibleChangeLinkConverterDelegate"
requestor="null"/>
<Option selector="wt.change2.AddressedBy2" cardinality="singleton"
serviceClass="wt.change2.flexible.DefaultFlexibleChangeLinkConverterDelegate"
requestor="null"/>
</Service>
以下の例では、カスタムレガシーリンクが追加の属性を持っているため、変更プロセスのリンクに追加する必要があります。この例では、AddColumns ユーティリティがすでに実行されていると仮定します。
委任によって、カスタムレガシーリンクから属性が取得され、変更プロセスリンクに追加されます。
package com.myCompany;
public class CustomLinkConverterDelegate extends FlexibleChangeLinkConverterDelegate {
@Override
public void postStoreUpdate(WTValuedMap legacyToFlexibleLinkMap) throws WTException {
Locale locale = SessionHelper.getLocale();
//Go through individual legacy links
for(Object obj: legacyToFlexibleLinkMap.entrySet()){
WTValuedEntry entry = (WTValuedEntry) obj;
ObjectReference legacyLinkRef = (ObjectReference) entry.getKey();
ObjectReference changeProcessRef = (ObjectReference) entry.getValue();

//Get value of custom attribute
CustomFormalizedBy formalizedBy = (CustomFormalizedBy) legacyLinkRef.getObject();
String customLinkValue = formalizedBy.getValue().toString();

//Set value of attribute on Change Process Link
ChangeProcessLink changeProcessLink = (ChangeProcessLink) changeProcessRef.getObject();
PersistableAdapter perAdapter = new PersistableAdapter(changeProcessLink,null,locale,new UpdateOperationIdentifier());
perAdapter.load("CustomLinkValue");
perAdapter.set("CustomLinkValue",customLinkValue);
perAdapter.apply();
try {
changeProcessLink.getPersistInfo().setVerified(true);
} catch (WTPropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PersistenceHelper.manager.modify(changeProcessLink);
}
}
}
CustomLinkConverterDelegate クラスは、以下のように登録されます。
<Service context="default" name="wt.change2.flexible.FlexibleChangeLinkConverterDelegate">
<Option selector="wt.change2.FormalizedBy" cardinality="singleton"
serviceClass="com.myCompany.CustomLinkConverterDelegate"
requestor="null"/>
</Service>


カスタムリンクタイプのコンバータ規則ファイル
システム内のカスタムリンクごとに、カスタムリンクのコンバータ規則ファイルを作成する必要があります。
たとえば、以下の場所に、以下の名前で com.myCompany.CustomFormalizedBy のリンクコンバータ規則ファイルを作成します。
<Windchill></Windchill>/codebase/wt/change2/flexible/LinkConverterRule.com.myCompany.CustomFormalizedBy.csv
詳細については、リンクコンバータ規則の設定を参照してください。


カスタム準備委任
準備委任は、変更管理オブジェクトに関して、要件に基づいて変換する準備が整っているかどうかを判定するものです。
Windchill では、以下のデフォルト委任が提供されています。
WorkflowReadinessDelegate
ResolutionDateReadinessDelegate
TerminalStateReadinessDelegate
* 
TerminalStateReadinessDelegate は既成の状態では登録されていませんが、使用できます。詳細については、変更管理オブジェクトのターミナル状態の管理を参照してください。
デフォルトの準備委任は、変更管理オブジェクトに関して、変換する準備が整っているかどうかを判定するものです。オブジェクトは、1 つの評価に合格した場合、別の準備委任による評価に不合格であったかどうかにかかわらず、変換の準備が整っているものと見なされます。
変更管理オブジェクトタイプのこの動作を変更するには、ReadinessInfo オブジェクトの API setShouldContinueProcessing() を呼び出します。この API が false に設定されている場合、変換の準備が整っていないと判定されたオブジェクトに関しては、ほかの委任の確認が停止されます。
Windchill では、以下の変更管理オブジェクトの準備委任が提供されています。それぞれの委任は、0 より大きい一意の selector 整数値を使用して登録する必要があります。2 つ以上の準備委任が登録されている場合は、増分されるセレクタ値の順序に従って使用されます。
既成の登録では、変更管理オブジェクトについて ResolutionDateReadinessDelegate が最初に呼び出されます。変更管理オブジェクトの変換準備が整っていないと判定された場合は、WorkflowReadinessDelegate が呼び出されます。
<!-- Delegates for computing readiness state for converting legacy change items.
The selector attribute must be unique and must be an integer as the delegates
are called in order based on the selector value -->
<Service context="default" name="wt.change2.flexible.FlexibleChangeItemReadinessDelegate">
<Option serviceClass="wt.change2.flexible.ResolutionDateReadinessDelegate"
selector="10"
requestor="wt.change2.FlexibleChangeItem"
cardinality="singleton"/>
<Option serviceClass="wt.change2.flexible.WorkflowReadinessDelegate"
selector="20"
requestor="wt.change2.FlexibleChangeItem"
cardinality="singleton"/>
</Service>
新しい委任を登録するには、プロパティとプロパティファイルを参照してください。
以下の委任の例では、2 つの操作を実行しています。
変更管理オブジェクトが「実装」状態であるかどうかを確認します。
オブジェクトが不適切な状態の場合は、その他の委任を無視します。
package com.myCompany;
public class CustomReadinessDelegate extends FlexibleChangeItemReadinessDelegate {

protected static final String CUSTOM_RESOURCE = CustomConverterResource.class.getName();
private static final Logger logger = Logger.getLogger(CustomReadinessDelegate.class.getName());
@Override
public WTKeyedMap determineReadiness(WTCollection changeItems) throws WTException {
WTKeyedMap changeItemToReadinessMap = new WTKeyedHashMap();
Map<FlexibleChangeItem, Boolean> shouldContinueMap = new HashMap<FlexibleChangeItem, Boolean>();
for (Object object : changeItems) {
ObjectReference changeItemRef = (ObjectReference) object;
ChangeRequest2Custom changeItem = (ChangeRequest2Custom) changeItemRef.getObject();
ReadinessInfo readinessInfo = null;
WTMessage reasonMsg;
boolean isReady = true;
boolean shouldContinue = true;
if (((VersionableChangeItem) changeItem).getState().getState() != State.toState("IMPLEMENTATION")) {
reasonMsg = new WTMessage(CUSTOM_RESOURCE, CustomConverterResource.INCORRECT_STATE,
new Object[] { FlexibleChangeConverterHelper.getDisplayIdentity(changeItem) });
isReady = false;
shouldContinue = false;
} else {
reasonMsg = new WTMessage(CUSTOM_RESOURCE, CustomConverterResource.CORRECT_STATE,
new Object[] { FlexibleChangeConverterHelper.getDisplayIdentity(changeItem) });
}
readinessInfo = new ReadinessInfo(isReady, changeItemRef, reasonMsg);
readinessInfo.setShouldContinueProcessing(shouldContinue);
changeItemToReadinessMap.put(changeItem, readinessInfo);
}
return changeItemToReadinessMap;
}
}
既成の委任よりも前に CustomReadinessDelegate を実行するには、既成の委任よりも小さい selector 値で登録します。
<Service context="default" name="wt.change2.flexible.FlexibleChangeItemReadinessDelegate">
<Option serviceClass=" com.myCompany.CustomReadinessDelegate"
selector="5"
requestor="wt.change2.FlexibleChangeItem"
cardinality="singleton"/>
</Service>