高度なカスタマイズ > ビジネスロジックのカスタマイズ > Windchill ProjectLink のカスタマイズ > カスタム Windchill ProjectLink アルゴリズムの作成 > 期限と進行状況の計算に登録されているイベントリスナー
  
期限と進行状況の計算に登録されているイベントリスナー
以下のイベントは、StandardEPPCustomEventHandlerService クラスを受信し、指定されたアクティビティタイプのハンドラに基づいて期限または進行状況を処理するよう設定されています。
指定されたアクティビティタイプのハンドラを使用できない場合、適切な親タイプ (「期限モード」または「進行状況モード」「自動計算」に設定されているタイプ) のハンドラが読み込まれ、そのハンドラによって期限または進行状況が計算およびロールアップされます。
計画アクティビティの状態変化
説明
アクティビティの状態の変化を取り込みます。
イベント定数
ProjectManagementEvent.PLANACTIVITY_STATE_CHANGE
計画アクティビティの完了率
説明
アクティビティの作業の完了率の変化を取り込みます。
イベント定数
ProjectManagementEvent.EPP_PERCENT_CHANGE
計画アクティビティの終了予定日
説明
アクティビティの終了予定日の変化を取り込みます。
イベント定数
ProjectManagementEvent.EPP_FINISH_CHANGE
計画アクティビティの期限の変化
説明
アクティビティの期限の日付の変化を取り込みます。
イベント定数
ProjectManagementEvent.EPP_DEADLINE_CHANGE
計画アクティビティの進行状況の変化
説明
アクティビティの進行状況の変化を取り込みます。
イベント定数
ProjectManagementEvent.EPP_STATUS_CHANGE
計画アクティビティの成果物の対象の変化
説明
成果物対象オブジェクトに変化が生じた場合にカスタムコードによって発生します。
* 
成果物対象オブジェクト内のなんらかの変更に基づいてカスタムアルゴリズムを呼び出すには、その変更の原因となる操作でこのイベントを発生させます。
イベント定数
ProjectManagementEvent.EPP_DELIVERABLE_SUBJECT_CHANGE
カスタム期限ハンドラによる期限変更
説明
ALAP アクティビティに合わせた計画の再スケジュール化。
* 
このイベントを発生させるには CustomDeadlineImplementation クラスが必要です。詳細については、個々のアクティビティに使用する期限アルゴリズムの作成の例を参照してください。
イベント定数
ProjectManagementEvent.EPP_CUSTOM_DEADLINE_CHANGE
現在の日付の変化
説明
毎日の経過を取り込みます。
* 
このイベントは追加設定の後でのみ使用できます。後述の「」セクションを参照してください。
イベント定数
ProjectManagementEvent.EPP_DATE_CHANGE
現在の日付の変化
現在日付変化イベント (ProjectManagementEvent.EPP_DATE_CHANGE) は、以下のプロパティで設定されている時刻に基づいて毎日の経過を取り込みます。
<Property default="24:00" name="com.ptc.projectmanagement.plan.dailyDeadlineAndHealthStatusUpdateTimeStamp"/>
デフォルトでは、このプロパティは設定されていません。これを wt.properties.xconf に追加する必要があります。
毎日特定の時刻に現在日付変化イベントを呼び出す場合、H24:MM というフォーマットを使用した任意のタイムスタンプを指定してこのプロパティを追加できます。
* 
既成では、現在日付変化イベントリスナーは何も行いません。以下の情報を参考にしてこのリスナーを拡張できます。
イベントリスナーの拡張
既存のイベントリスナーの機能を拡張する場合や、上でリストされていないイベントを登録する場合、以下のように指定することで StandardEPPCustomEventHandlerService を拡張して performStartupProcess() API をオーバーライドできます。
@Override
protected synchronized void performStartupProcess() throws ManagerException {
super.performStartupProcess();
getManagerService().addEventListener(new ServiceEventListenerAdapter(CLASSNAME) {
@Override
public void notifyVetoableMultiObjectEvent(Object event){
//Event handling code goes here
}
},
ProjectManagementEvent.generateEventKey(<登録するイベント>));
}
* 
最良事例として、既存のリスナー設定を維持するため、オーバーライドされる performStartupProcess() 内で super.performStartupProcess() を呼び出すようにしてください。
期限計算のアルゴリズムを実装する場合、カスタム用のエントリを projectmanagement.wt.properties.xconfcom.ptc.projectmanagement.plan.EPPCustomEventHandlerService の下に追加します。

<Property default="com.ptc.projectmanagement.plan.EPPCustomEventHandlerService/com.ptc.projectmanagement.plan.StandardEPPCustomEventHandlerService" name="wt.services.service.3715" />
期限計算のアルゴリズムを実装する場合、カスタム用のエントリを projectmanagement.wt.properties.xconfcom.ptc.projectmanagement.plan.HealthStatusEventHandlerService の下に追加します。

<Property default="com.ptc.projectmanagement.plan.HealthStatusEventHandlerService/com.ptc.projectmanagement.plan.StandardEPPCustomEventHandlerService" name="wt.services.service.3715" />
* 
ロールアップハンドラ
現在のところ、リスナーコードはサマリーアクティビティのコレクションを受け取り、それらの進行状況または期限を計算し、StandardEPPCustomEventHandlerService クラスのロールアップ API を呼び出します。
ロールアップ API は各レベルで子アクティビティのサマリーをフェッチし、ボトムアップで進行状況または期限をロールアップします。つまり、トップレベルアクティビティとしてのサマリーアクティビティはその子からロールアップされます。各サマリーアクティビティをロールアップするため、各タイプのロールアップハンドラアルゴリズムが呼び出されます。