Regulatory Transmission Delegate Interface
The Regulatory Transmission Delegate Interface provides the ability to customize Windchill interactions with regulatory agencies and implement specific transmission logic and protocols to submit to the regulatory agencies. You can customize the transmission method required and used to communicate with an agency. You can also customize the initialization processing required for transmission to a regulatory agency. The class name of the Regulatory Transmission Delegate Interface is RegulatoryTransmissionDelegateInterface. For every class that implements the RegulatoryTransmissionDelegateInterface class, the initialize() method is invoked in the Method Server startup process for that class.
The AbstractTransmissionDelegate class checks the payload category returned from the getTransmissionPayloadCategory() API and uses it to decide if the payload uses the primary content or the regulatory content associated with that payload category. The OOTB ContentWriterTransmissionDelegate class implementation of the transmit() API writes the content returned by the getPayloadStream(RegulatorySubmission regulatorySubmission, Logger transmissionLogger) API to the file-based or azure-based locations.
Scope, Applicability, or Assumptions
• Assumes that you have general knowledge of Java classes and concepts such as a class extension
• Assumes that you have general knowledge of the xconf mechanism to register service classes
Prerequisites
To apply this best practice, you need to understand the following:
• Java class extension
• Xconfmanager
Solution Elements
The next table describes the various solution elements.
Element
|
Type
|
Description
|
void initialize()
|
API
|
Method to override any initialization required for the transmission method.
|
boolean transmit(RegulatorySubmission regulatorySubmission)
|
API
|
Method to override the code to transmit submission information to the agencies.
|
getPayloadStream(RegulatorySubmission regulatorySubmission, Logger transmissionLogger)
|
API
|
Method to return the payload to be transmitted to the agencies.
|
Default Behavior
The default configuration registers a class called SimulateTransmissionDelegate that implements RegulatoryTransmissionDelegateInterface as the default delegate. This delegate can be used to simulate transmission operations during development. In production, customized transmission delegates should be registered for each type of regulatory submission (RPS, UDI, AER, and ER) to enable the transmit functionality. The SimulateTransmissionDelegate does not perform the initialize functionality. It logs error messages in the transmit method to display the entry information and the existing regulatory submission payload content. The message also indicates that the SimulateTransmissionDelegate class is being invoked.
The default delegate is defined as an xconf entry for the SimulateTransmissionDelegate class in the REGMSTR.service.properties.xconf file:
<Service name="com.ptc.qualitymanagement.regmstr.impl.RegulatoryTransmissionDelegateInterface">
<Option requestor="null" serviceClass="com.ptc.qualitymanagement.regmstr.impl.SimulateTransmissionDelegate"
selector="default" cardinality="duplicate" />
</Service>
The actual content that is sent to the regulatory agency is configurable in the
getTransmissionPayloadCategory API available on the
Regulatory Submission Processor Interface. The default implementation sends the regulatory content of a regulatory submission payload for AER, ER, RPS, and UDI.
Creating Custom Classes
To customize the transmit functionality, create a Java class that extends the RegulatoryTransmissionDelegateInterface class. Override the initialize() and transmit(RegulatorySubmission regulatorySubmission) methods, and provide your custom code to initialize the transmission functionality to transmit content to the regulatory agency.
The following example shows an xconfiguration entry for a custom delegate called CustomTransmissionDelegate that is registered for the AdverseEventRegulatorySubmission:
<Service name="com.ptc.qualitymanagement.regmstr.impl.RegulatoryTransmissionDelegateInterface">
<Option requestor="null" serviceClass="com.ptc.qualitymanagement.regmstr.impl.CustomTransmissionDelegate"
selector="com.ptc.qualitymanagement.regmstr.AdverseEventRegulatorySubmission" cardinality="duplicate" />
</Service>
If a service class does not exist for a subtype, the parent types of the subtype are scanned until a service class is found. If a service class is not found, the default SimulateTransmissionDelegate class is used.
For more information on the areas of customization for regulatory submissions that call the delegate and perform the transmit, see
Developing a Submission Processor.