完了プロセッサの開発
このトピックでは、既成の承認申請プロセッサクラスを拡張し、postComplete メソッドを機関固有の処理メソッドによってオーバーライドする方法について説明します。
ソリューション
• 既成の承認申請プロセッサを拡張するカスタムクラスを作成します。
• カスタムクラスを登録する xconf エントリを作成します。
ソリューションエレメント
次のテーブルで、ソリューションエレメントについて説明します。
エレメント
|
タイプ
|
説明
|
postComplete(RegulatorySubmission regulatorySubmission)
|
API
|
申請プロセスが正常に完了した後で承認申請を処理します。
|
デフォルトの動作
デフォルトの実装では、「申請の段階」属性が「アクティブ」に設定されます。先行バージョンが存在する場合、そのバージョンの「申請の段階」が「履歴」に設定されます。承認申請に対して「承認日」が設定されていない場合、デフォルトの実装では、完了した承認申請の承認日が現在の日付に設定されます。
デフォルトの実装は、主にデモと説明を目的としています。ただし、これは多くの承認申請タイプに適した一般的なベストプラクティスです。要件に応じて、インプリメンターは提供されているドキュメンテーションと一致する申請固有のプロセッサを作成できます。
カスタムクラスの作成
確認処理をカスタマイズするには、SimpleRegulatorySubmissionProcessor または適切な改訂可能なサブタイププロセッサを拡張する Java クラス (独自のプロセッサ) を作成してから、postComplete メソッドをオーバーライドします。改訂可能なサブタイププロセッサには、AERSubmissionProcessor、ERSubmissionProcessor、RPSSubmissionProcessor、UDISubmissionProcessor などがあります。
オーバーライドされた postComplete メソッドの例を以下に示します。
@Override
public RegulatorySubmission postComplete(RegulatorySubmission regulatorySubmission) throws Exception {
if (!VersionControlHelper.isLatestIteration(regulatorySubmission)) {
Object[] errorMessageObjects = new Object[1];
errorMessageObjects[0] = regulatorySubmission.getDisplayIdentifier();
throw new WTException(vcResource.class.getName(), vcResource.OBJECT_IS_NOT_LATEST, errorMessageObjects);
}
regulatorySubmission = RegulatorySubmissionHelper.setSubmissionStage(regulatorySubmission, getCompleteStage());
// Update approval date when it is null
if (regulatorySubmission.getApprovalDate() == null) {
regulatorySubmission = new ConditionalAutoCheckoutRunner><(regulatorySubmission) {
@Override
public RegulatorySubmission performBusinessProcess(RegulatorySubmission managedObject)
throws Exception {
managedObject.setApprovalDate(new Timestamp(System.currentTimeMillis()));
return (RegulatorySubmission) PersistenceHelper.manager.save(managedObject);
}
}.invoke();
}
// Set the Submission Stage on the previous Revision (RegSub2) or Iteration (Simple RegSub) to Historical
RegulatorySubmission previousVersion = null;
if (regulatorySubmission instanceof RegSubmission2) {
// Find previous Revision
String regSubVersion = ((RegSubmission2) regulatorySubmission).getVersionIdentifier().getValue();
QueryResult qr = VersionControlHelper.service.allVersionsOf((RegSubmission2) regulatorySubmission);
while (qr.hasMoreElements()) {
Versioned next = (Versioned) qr.nextElement();
if (next.getVersionIdentifier().getValue().equals(regSubVersion)) {
previousVersion = qr.hasMoreElements() ? (RegulatorySubmission) qr.nextElement() : null;
break;
}
}
} else {
// Find previous Iteration
previousVersion = (RegulatorySubmission) VersionControlHelper.getPredecessor(regulatorySubmission).getObject();
}
if (previousVersion != null) {
previousVersion = RegulatorySubmissionHelper.setSubmissionStage(previousVersion, getHistoryStage());
}
return regulatorySubmission;
}
関連トピック