カスタムリンクからフレキシブル変更リンクへの変換
カスタムの変更管理オブジェクトまたは変更リンクが存在する場合は、さらに以下の手順に従って、フレキシブル変更管理オブジェクトに変換する必要があります。
変更プロセスのリンクを更新
カスタムリンクに追加の属性がある場合、カスタムリンクを変更プロセスリンクに変換することはできません。
この作業は、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
AdministrativeLockReadinessDelegate
デフォルトの準備委任は、変更管理オブジェクトに関して、変換する準備が整っているかどうかを判定するものです。オブジェクトは、1 つの評価に合格した場合、別の準備委任による評価に不合格であったかどうかにかかわらず、変換の準備が整っているものと見なされます。
変更管理オブジェクトタイプのこの動作を変更するには、ReadinessInfo オブジェクトの API setShouldContinueProcessing() を呼び出します。この API が false に設定されている場合、変換の準備が整っていないと判定されたオブジェクトに関しては、ほかの委任の確認が停止されます。
Windchill には、準備委任を設定するための以下のサービスが用意されています。
• wt.change2.flexible.FlexibleChangeItemReadinessDelegate.convertLinks
• wt.change2.flexible.FlexibleChangeItemReadinessDelegate.convertReplicatedLinks
それぞれの委任は、0 より大きい一意の selector 整数値を使用して登録する必要があります。2 つ以上の準備委任が登録されている場合は、増分されるセレクタ値の順序に従って使用されます。
wt.change2.flexible.FlexibleChangeItemReadinessDelegate.convertLinks サービスは、まず AdministrativeLockReadinessDelegate を呼び出して、変更管理オブジェクトが管理者によってロックされているかどうかをチェックします。ロックされている場合、委任によって以下の値を含む ReadinessInfo オブジェクトが返されます。
• false に設定された isReady フラグ
• false に設定された shouldContinueProcessing フラグ
管理者によってロックされている現在のオブジェクトの処理が停止し、さらなる準備チェックは行われません。
オブジェクトがロックされていない場合は、ResolutionDateReadinessDelegate が呼び出され、変更管理オブジェクトの変換の準備が完了しているかどうかを決定します。準備が完了していない場合は、WorkflowReadinessDelegate が呼び出されます。
wt.change2.flexible.FlexibleChangeItemReadinessDelegate.convertReplicatedLinks サービスは AdministrativeLockReadinessDelegate を呼び出しません。
次の例は、既成の準備委任のコンフィギュレーションを示しています。
<!-- Delegates for computing readiness state for converting legacy change items.
The selector attribute must be unique and must be an integer because the delegates
are called in a particular order which is based on the selector value. -->
<Service context="default" name="wt.change2.flexible.FlexibleChangeItemReadinessDelegate.convertLinks">
<Option serviceClass="wt.change2.flexible.AdministrativeLockReadinessDelegate"
selector="10"
requestor="wt.change2.FlexibleChangeItem"
cardinality="singleton"/>
<Option serviceClass="wt.change2.flexible.ResolutionDateReadinessDelegate"
selector="20"
requestor="wt.change2.FlexibleChangeItem"
cardinality="singleton"/>
<Option serviceClass="wt.change2.flexible.WorkflowReadinessDelegate"
selector="30"
requestor="wt.change2.FlexibleChangeItem"
cardinality="singleton"/>
</Service>
<Service context="default" name="wt.change2.flexible.FlexibleChangeItemReadinessDelegate.convertReplicatedLinks">
<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>