高度なカスタマイズ > ビジネスロジックのカスタマイズ > Windchill ProjectLink のカスタマイズ > 期限の自動計算の設定 > 個々のアクティビティに使用する期限アルゴリズムの作成
  
個々のアクティビティに使用する期限アルゴリズムの作成
個々のアクティビティ ("リーフアクティビティ") の期限計算に使用するカスタムアルゴリズムを作成するには、以下のステップを実行します。
開始する前に:
期限モードの設定で作成したアクティビティサブタイプの内部名が必要になります。
登録済みのイベントリスナーを確認します: 期限と進行状況の計算に登録されているイベントリスナー
サポートされている API を確認します: アクティビティ計算でサポートされる API
カスタムハンドラのガイドラインを確認します: 進行状況と期限の計算に使用するカスタムハンドラのガイドライン
ステップ 1: ハンドラクラスの作成
EPPDeadlineHandler インタフェースを使用することでカスタム計算アルゴリズムを作成できます。
EPPDeadlineHandler.java
calculateDeadline(<リーフアクティビティオブジェクトのコレクション>, event);
カスタムアルゴリズムを利用するため、このインタフェースを拡張して特定の API をオーバーライドできます。たとえば、以下のサンプルコードでは、アクティビティの開始日に基づいて期限が計算されます。

package com.ptc.projectmanagement.plan.EPPDeadlineHandler;
public class CustomDeadlineImplementation implements EPPDeadlineHandler {
@Override
public void calculateDeadline(ArrayList<PlanActivity> activitiesCollection, Object event)
throws WTException, WTPropertyVetoException {
try{
WTCollection leafAct = new WTArrayList();
WTCollection leafActivities = new WTArrayList(activitiesCollection);
leafActivities = CollectionsHelper.manager.refresh(leafActivities);
for (Object activity: leafActivities){
if(activity instanceof PlanActivity){
PlanActivity pActivity = (PlanActivity)activity;
Timestamp tmStart = pActivity.getStartDate();
pActivity.setDeadline(addDays(10, tmStart));
}
leafAct.add(pActivity);
}
PersistenceHelper.manager.save(leafAct);
//After saving the activities, the EPP_CUSTOM_DEADLINE_CHANGE event must be thrown
//so that the subsequent health status recalculations and notification emails are triggered.
PlanHelper.service.dispatchMultiEvent(ProjectManagementEvent.EPP_CUSTOM_DEADLINE_CHANGE,leafAct);
} catch(Exception ae){
ae.printStackTrace();
}
}
}
ステップ 2: ハンドラクラスの設定
期限計算のカスタムアルゴリズムを作成した後は、これを projectmanagement.service.properties.xconf に追加する必要があります。
1. 期限モードの設定で作成したアクティビティサブタイプの内部名をコピーします。
2. 次の場所に移動します。
${WT_HOME}/Windchill/codebase/com/ptc/projectmanagement/projectmanagement.service.properties.xconf
3. 以下のエントリを編集して、そのアクティビティサブタイプの内部名とハンドラクラス名を追加します。
<Service context="default" name="com.ptc.projectmanagement.plan.EPPDeadlineHandler">
<Option cardinality="singleton" requestor= "null"
selector = "<タイプの内部名>"
serviceClass="<ハンドラクラスの完全修飾名>"/>
</Service>
たとえば、上記のサンプルハンドラクラスと内部名 "org.rnd.Custom_Engineering_Activity" を使用する場合、以下のようになります。
<Service context="default" name="com.ptc.projectmanagement.plan.EPPDeadlineHandler">
<Option cardinality="singleton" requestor= "null"
selector = "org.rnd.Custom_Engineering_Activity"
serviceClass="com.ptc.projectmanagement.plan.CustomDeadlineImplementation"/>
</Service>
4. Windchill シェルから次のコマンドを実行します。
xconfmanager -p
* 
PlanActivity タイプには以下のような既成のハンドラが定義されています。このハンドラには効力がありません。
<Service context="default" name="com.ptc.projectmanagement.plan.EPPDeadlineHandler">
<Option cardinality="singleton" requestor= "null"
selector = "com.ptc.projectmanagement.plan.PlanActivity"
serviceClass="com.ptc.projectmanagement.plan.PlanActivityDeadlineHandler"/>
</Service>