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