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

package com.ptc.projectmanagement.plan.HealthStatusHandler;
public class HealthStatusBasedOnPercentWorkComplete implements HealthStatusHandler, Serializable{
@Override
calculateHealthStatus(ArrayList<PlanActivity> leafActivities, Object event){
for(Object activity : leafActivities){
PlanActivity leafActivity = (PlanActivity)activity;
if(leafActivity.getPercentWorkComplete() < 50){
leafActivity.setHealthStatusType(HealthStatusType.RED);
}
else if(leafActivity.getPercentWorkComplete() == 50){
leafActivity.setHealthStatusType(HealthStatusType.YELLOW);
}
else if(leafActivity.getPercentWorkComplete() > 50){
leafActivity.setHealthStatusType(HealthStatusType.GREEN);
}
}
PersistenceHelper.manager.save(leafActivities);
}
}
ステップ 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.HealthStatusHandler">
<Option cardinality="singleton" requestor= "null"
selector = "<タイプの内部名>"
serviceClass="<ハンドラクラスの完全修飾名>"/>
</Service>
たとえば、上記のサンプルハンドラクラスと内部名 "org.rnd.Custom_Engineering_Activity" を使用する場合、以下のようになります。
<Service context="default" name="com.ptc.projectmanagement.plan.HealthStatusHandler">
<Option cardinality="singleton" requestor= "null"
selector = "org.rnd.Custom_Engineering_Activity"
serviceClass="com.ptc.projectmanagement.plan.HealthStatusBasedOnPercentWorkComplete"/>
</Service>
4. Windchill シェルから次のコマンドを実行します。
xconfmanager -p
* 
PlanActivity タイプには以下のような既成のハンドラが定義されています。このハンドラには効力がありません。
<Service context="default" name="com.ptc.projectmanagement.plan.HealthStatusHandler">
<Option cardinality="singleton" requestor= "null"
selector = "com.ptc.projectmanagement.plan.PlanActivity"
serviceClass="com.ptc.projectmanagement.plan.PlanActivityHealthStatusHandler"/>
</Service>