申請プロセッサの開発
このトピックでは、既成の承認申請プロセッサクラスを拡張し、承認申請サブミットメソッドを機関固有の処理メソッドによってオーバーライドする方法について説明します。このトピックでは、監督官庁に送信するコンテンツを設定する方法についても説明します。
ソリューション
• 既成の承認申請プロセッサを拡張するカスタムクラスを作成します。
• getTransmissionPayloadCategory() メソッドをオーバーライドするカスタム承認申請プロセッサクラスを作成します。
• カスタムメッセージボディの生成を実装します。getTransmissionPayloadCategory() メソッドがオーバーライドされた新しいカスタムクラスの例を参照してください。
• カスタムクラスを登録する xconf エントリを作成します。
• カスタムクラスを登録する services.xconf エントリを作成します。
ソリューションエレメント
次のテーブルで、各種ソリューションエレメントについて説明します。
エレメント
|
タイプ
|
説明
|
submitRegulatorySubmission(RegulatorySubmission regulatorySubmission)
|
API
|
承認申請タイプに対して登録されている承認通信委任を使用して承認申請をサブミットします。
|
postSubmissionProcessing(Regulatory Submission regulatorySubmission)
|
API
|
通信後に必要な承認申請属性を修正します。
|
getTransmissionPayloadCategory()
|
API
|
監督官庁に送信するコンテンツを決定します。
|
デフォルトの動作
submitRegulatorySubmission メソッドのデフォルトの動作では、承認申請タイプに対して登録されている承認通信委任が取得され、委任の transmit メソッドが呼び出されてから、使用されている承認申請プロセッサに対して postSubmissionProcessing が呼び出されます。AbstractRegulatorySubmissionProcessor クラスのデフォルトの postSubmissionProcessing メソッドは、submittedDate を現在の日付に設定し、submissionStage を getSubmittedStage() メソッドによって返されるサブミット済み段階に設定します。このメソッドは AbstractRegulatorySubmissionProcessor クラスの SubmissionStage.SUBMITTED を返します。
デフォルトの実装では、AER、ER、RPS、UDI の承認申請のメッセージボディのコンテンツが送信されます。
カスタムクラスの作成
通信処理をカスタマイズするには、SimpleRegulatorySubmissionProcessor または適切な改訂可能なサブタイププロセッサを拡張する Java クラス (独自のプロセッサ) を作成してから、submitRegulatorySubmission メソッドをオーバーライドします。改訂可能なサブタイププロセッサには、AERSubmissionProcessor、ERSubmissionProcessor、RPSSubmissionProcessor,、UDISubmissionProcessor などがあります。
以下の例は、デフォルトの submitRegulatorySubmission および postSubmissionProcessing メソッドを示しています。
@Override
public RegulatorySubmission submitRegulatorySubmission(RegulatorySubmission regulatorySubmission) throws Exception {
if (!AccessControlHelper.manager.hasAccess(regulatorySubmission, AccessPermission.MODIFY)) {
throw new WTException(accessResource.class.getName(), accessResource.NOT_AUTHORIZED_EXCEPTION, null);
}
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);
}
ContentItem regulatoryContent = RegulatoryContentHelper.getService().getRegulatoryContent(
regulatorySubmission,
RegulatoryContentCategory.REGULATORY_SUBMISSION_PAYLOAD);
if (regulatoryContent == null) {
Object[] errorMessageObjects = new Object[2];
errorMessageObjects[0] = RegulatoryContentCategory.REGULATORY_SUBMISSION_PAYLOAD;
errorMessageObjects[1] = regulatorySubmission.getDisplayIdentifier();
throw new WTException(regmstrResource.class.getName(), regmstrResource.NO_CONTENT_FOR_CATEGORY,
errorMessageObjects);
}
try {
RegulatoryTransmissionDelegateInterface delegate = getTransmissionDelegate(regulatorySubmission);
delegate.transmit(regulatorySubmission);
} catch (WTException e) {
throw e;
} catch (Exception exp) {
throw new WTException(exp);
}
return postSubmissionProcessing(regulatorySubmission);
}
@Override
public RegulatorySubmission postSubmissionProcessing(RegulatorySubmission regulatorySubmission) throws Exception {
return new TransactionRunner<RegulatorySubmission>() {
@Override
public RegulatorySubmission performBusinessProcess() throws Exception {
return new ConditionalAutoCheckoutRunner<RegulatorySubmission>(regulatorySubmission) {
@Override
public RegulatorySubmission performBusinessProcess(RegulatorySubmission regulatorySubmission)
throws Exception {
regulatorySubmission.setSubmittedDate(new Timestamp(System.currentTimeMillis()));
regulatorySubmission.setSubmissionStage(getSubmittedStage());
return regulatorySubmission = (RegulatorySubmission) PersistenceHelper.manager
.save(regulatorySubmission);
};
}.invoke();
}
}.invoke();
}
監督官庁に送信するコンテンツをカスタマイズするには、getTransmissionPayloadCategory() メソッドをオーバーライドします。このメソッドは、RegulatoryContentCategory の内部名または定数 USE_PRIMARY_CONTENT_AS_TRANSMISSION_PAYLOAD の値を返します。
次の例は、getTransmissionPayloadCategory() メソッドがオーバーライドされた新しいカスタムクラスを示しています。
@Override
public String getTransmissionPayloadCategory() {
return RegulatoryContentCategory.REGULATORY_SUBMISSION_PAYLOAD.getValue();
}