开发提交处理器
本主题介绍如何扩展预设监管提交处理器类,以及如何使用监管部门特定的处理方法来改写提交监管提交方法。此外,本主题还介绍如何配置要传输到监管部门的内容。
解决方案
• 创建一个自定义类来扩展预设监管提交处理器。
• 创建一个自定义监管提交处理器类来改写 getTransmissionPayloadCategory() 方法。
• 实现自定义有效载荷生成。有关使用已改写的 getTransmissionPayloadCategory() 方法的新自定义类,请参见示例。
• 创建一个 xconf 条目来注册自定义类。
• 创建一个 services.xconf 条目来注册自定义类。
解决方案元素
下一张表格介绍各种解决方案元素。
元素
|
类型
|
说明
|
submitRegulatorySubmission(RegulatorySubmission regulatorySubmission)
|
API
|
用于使用监管传输委派 (针对监管提交类型进行注册) 来提交监管提交。
|
postSubmissionProcessing(Regulatory Submission regulatorySubmission)
|
API
|
用于修改传输后所需的任何监管提交属性。
|
getTransmissionPayloadCategory()
|
API
|
用于确定要传输到监管部门的内容。
|
默认行为
submitRegulatorySubmission 方法的默认行为旨在获取针对监管提交类型注册的监管传输委派,调用该委派的 transmit 方法,然后为正在使用的监管提交处理器调用 postSubmissionProcessing。AbstractRegulatorySubmissionProcessor 类中的默认 postSubmissionProcessing 方法将 submittedDate 设置为当前日期,而将 submissionStage 设置为getSubmittedStage() 方法所返回的“已提交”阶段。此方法在 SubmissionStage.SUBMITTED 类中返回 AbstractRegulatorySubmissionProcessor。
默认实施会发送 AER、ER、RPS 和 UDI 监管提交的监管提交有效载荷的监管内容。
创建自定义类
要自定义传输处理方法,请首先创建一个 Java 类 (您的处理器) 来扩展 SimpleRegulatorySubmissionProcessor 或相应的可修订子类型处理器,然后改写 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();
}