
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import com.sap.it.api.pd.PartnerDirectoryService;
import com.sap.it.api.ITApiFactory;
import groovy.json.*;
def Message processData(Message message) {
def service = ITApiFactory.getApi(PartnerDirectoryService.class, null)
if (service == null){
throw new IllegalStateException("Partner Directory Service not found")
}
// Read partner data, and EDI message information for conversion and
// communication purposes
def headers = message.getHeaders()
def SenderPid = headers.get("SenderPid")
def rcvprn = headers.get("SAP_IDoc_RCVPRN")
def ReceiverPid = service.getPartnerId("SAP SE", "IDOC", rcvprn)
message.setHeader("ReceiverPid", ReceiverPid)
def mestyp = headers.get("SAP_IDoc_MESTYP")
def idoctyp = headers.get("SAP_IDoc_IDOCTYP")
def std = headers.get("SAP_IDoc_STD")
def stdmes = headers.get("SAP_IDoc_STDMES")
def stdvrs = headers.get("SAP_IDoc_STDVRS")
def test = headers.get("SAP_IDoc_TEST")
// Retrieve our qualifier and id for ISA envelope and pass usage indicator,
// and also read receiving partner information
def our_x12qual = service.getParameter("x12_qualifier", SenderPid, java.lang.String.class)
message.setProperty("OurX12Qualifier", our_x12qual)
def our_x12id = service.getParameter("x12_id", SenderPid, java.lang.String.class)
message.setProperty("OurX12Id", our_x12id)
message.setProperty("UsageIndicator", test == "X" ? "T" : "P")
def x12qual = service.getParameter("x12_qualifier", ReceiverPid, java.lang.String.class)
message.setProperty("X12Qualifier", x12qual)
def x12id = service.getParameter("x12_id", ReceiverPid, java.lang.String.class)
message.setProperty("X12Id", x12id)
def x12SegmentTerminator = service.getParameter("x12_segment_terminator", ReceiverPid, java.lang.String.class)
message.setProperty("X12SegmentTerminator", x12SegmentTerminator)
def x12CompositeSeparator = service.getParameter("x12_composite_separator", ReceiverPid, java.lang.String.class)
message.setProperty("X12CompositeSeparator", x12CompositeSeparator)
def x12ElementSeparator = service.getParameter("x12_element_separator", ReceiverPid, java.lang.String.class)
message.setProperty("X12ElementSeparator", x12ElementSeparator)
def x12RepetitionSeparator = service.getParameter("x12_repetition_separator", ReceiverPid, java.lang.String.class)
message.setProperty("X12RepetitionSeparator", x12RepetitionSeparator)
// Read extra parameters for message handling - e.g. archiving, message target, etc.
def slurper = new JsonSlurper()
def isArchivingActive = service.getParameter("isArchivingActive", SenderPid, java.lang.String.class)
if(isArchivingActive == "true") {
def msgParamsBinary = service.getParameter(stdmes, SenderPid, com.sap.it.api.pd.BinaryData)
if(msgParamsBinary != null) {
def msgParameters = slurper.parse(msgParamsBinary.getData(), "UTF-8")
if(msgParameters.Outbound?.ArchiveMessage == "true") {
message.setHeader("ArchiveMessage", msgParameters.Outbound.ArchiveMessage)
def folder = headers.get("ArchiveFolder")
message.setHeader("ArchiveFolder", folder + ReceiverPid + "/")
} else {
message.setHeader("ArchiveFolder", null)
}
}
}
// Setup header variables from PD for conversion handling (AT items)
def msgInfo = "ASC-X12_" + stdmes + "_" + stdvrs
def preproc, mapping, postproc, rec_conversion
preproc = mestyp + "." + idoctyp + "_preproc"
if(std == "X") {
mapping = mestyp + "." + idoctyp + "_to_" + msgInfo
postproc = msgInfo + "_postproc"
rec_conversion = msgInfo
}
message.setHeader("PREPROC_XSLT", "pd:" + SenderPid + ":" + preproc + ":Binary")
message.setHeader("MAPPING_XSLT", "pd:" + SenderPid + ":" + mapping + ":Binary")
message.setHeader("POSTPROC_XSLT", "pd:" + SenderPid + ":" + postproc + ":Binary")
message.setHeader("REC_CONVERSION_XSD", "pd:" + SenderPid + ":" + rec_conversion + ":Binary")
// Retrieve partner specific information regarding agreement information for
// extended post processing and acknowledgements
def agreementParamsBinary = service.getParameter("Agreements", ReceiverPid, com.sap.it.api.pd.BinaryData)
if(agreementParamsBinary != null) {
def agreementParameters = slurper.parse(agreementParamsBinary.getData(), "UTF-8")
def msgAgreement = agreementParameters.Agreements.Outbound.find{ it.Message == msgInfo }
if(msgAgreement == null) {
throw new IllegalStateException("Partner agreement not maintained")
}
// 997 datastore can be disabled per landscape like feature flag and 997 data will not be stored
// if datastore is not marked as active
def is997DatastoreActive = service.getParameter("is997DatastoreActive", SenderPid, java.lang.String.class)
message.setProperty("AcknowledgementRequired", is997DatastoreActive == "true" ? msgAgreement?.AcknowledgementRequired : "false")
message.setProperty("AcknowledgementRequested", msgAgreement?.AcknowledgementRequired == "true" ? "1" : "0")
if(msgAgreement?.DoExtendedPostProcessing == "true") {
message.setProperty("DoExtPostprocessing", msgAgreement.DoExtendedPostProcessing)
message.setHeader("EXT_POSTPROC_XSLT", "pd:" + ReceiverPid + ":ext_" + msgInfo + "_postproc:Binary")
}
} else {
throw new IllegalStateException("Partner agreement not maintained")
}
return message
}
{
"Outbound": {
"ArchiveMessage": "true"
},
"Inbound": {
"Target": "INVOIC.INVOIC02"
}
}
{
"Agreements": {
"Inbound": [],
"Outbound": [
{
"Message": "ASC-X12_856_004010",
"AcknowledgementRequired": "true",
"DoExtendedPostProcessing": "false"
}
]
}
}
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="*"/>
</xsl:template>
<!-- ============================================================================================= -->
<!-- Template: Enter the count of segments -->
<!-- ============================================================================================= -->
<xsl:template match="D_97">
<D_97>
<xsl:value-of select="count(//*[name() = 'S_ST'])"/>
</D_97>
</xsl:template>
<!-- ============================================================================================= -->
<!-- Template: Pad IDs for both sender and receiver in ISA envelope-->
<!-- ============================================================================================= -->
<xsl:template match="D_I06">
<xsl:variable name="Sid" select="."/>
<D_I06><xsl:call-template name="padStr">
<xsl:with-param name="str" select="$Sid"/>
<xsl:with-param name="chr" select="' '"/>
<xsl:with-param name="len" select="15"/>
</xsl:call-template></D_I06>
</xsl:template>
<xsl:template match="D_I07">
<xsl:variable name="Rid" select="."/>
<D_I07><xsl:call-template name="padStr">
<xsl:with-param name="str" select="$Rid"/>
<xsl:with-param name="chr" select="' '"/>
<xsl:with-param name="len" select="15"/>
</xsl:call-template></D_I07>
</xsl:template>
<!-- ============================================================================================= -->
<!-- Template: Determine Transaction Set Control Number -->
<!-- ============================================================================================= -->
<xsl:template match="D_329">
<D_329><xsl:value-of select="format-number(count(../../preceding-sibling::*)+1, '000000000')"/></D_329>
</xsl:template>
<!-- ============================================================================================= -->
<!-- Template: Consume and produce remaining nodes -->
<!-- ============================================================================================= -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- ============================================================================================= -->
<!-- Template: String Padding on Right -->
<!-- ============================================================================================= -->
<xsl:template name="padStr">
<xsl:param name="str"/>
<xsl:param name="chr"/>
<xsl:param name="len"/>
<xsl:variable name="pad">
<xsl:for-each select="1 to $len">
<xsl:value-of select="$chr" />
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="substring(concat($str,$pad),1,$len)"/>
</xsl:template>
</xsl:stylesheet>
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import com.sap.it.api.pd.PartnerDirectoryService;
import com.sap.it.api.ITApiFactory;
def Message processData(Message message) {
def service = ITApiFactory.getApi(PartnerDirectoryService.class, null)
if (service == null){
throw new IllegalStateException("Partner Directory Service not found")
}
// Merge Partner Directory data into message header
def headers = message.getHeaders()
def pid = headers.get("pid")
def stdmes = headers.get("SAP_EDI_Message_Type")
def intchg = headers.get("SAP_EDI_Interchange_Control_Number")
def adapter = service.getParameter("AdapterType", pid, java.lang.String.class)
message.setProperty("adapter", adapter)
if(adapter == "AS2") {
def url = service.getParameter("ReceiverUrl", pid, java.lang.String.class)
message.setProperty("Url", url)
def recipientAS2 = service.getParameter("AS2_id", pid, java.lang.String.class)
message.setProperty("RecipientAS2", recipientAS2)
def publicKey = service.getParameter("PublicKeyAlias", pid, java.lang.String.class)
message.setProperty("PublicKeyAlias", publicKey)
def compress = service.getParameter("SAP_AS2_Outbound_Compress_Message", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Compress_Message", compress)
def signMessage = service.getParameter("SAP_AS2_Outbound_Sign_Message", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Sign_Message", signMessage)
def signAlgorithm = service.getParameter("SAP_AS2_Outbound_Signing_Algorithm", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Signing_Algorithm", signAlgorithm)
def encryptMessage = service.getParameter("SAP_AS2_Outbound_Encrypt_Message", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Encrypt_Message", encryptMessage)
def encryptAlgorithm = service.getParameter("SAP_AS2_Outbound_Encryption_Algorithm", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Encryption_Algorithm", encryptAlgorithm)
def mdnType = service.getParameter("SAP_AS2_Outbound_Mdn_Type", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Mdn_Type", mdnType)
def mdnRequestSign = service.getParameter("SAP_AS2_Outbound_Mdn_Request_Signing", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Mdn_Request_Signing", mdnRequestSign)
def mdnSignAlgorithm = service.getParameter("SAP_AS2_Outbound_Mdn_Signing_Algorithm", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Mdn_Signing_Algorithm", mdnSignAlgorithm)
def mdnVerifySign = service.getParameter("SAP_AS2_Outbound_Mdn_Verify_Signature", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Mdn_Verify_Signature", mdnVerifySign)
def mdnRequestMic = service.getParameter("SAP_AS2_Outbound_Mdn_Request_Mic", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Mdn_Request_Mic", mdnRequestMic)
def mdnVerifyMic = service.getParameter("SAP_AS2_Outbound_Mdn_Verify_Mic", pid, java.lang.String.class)
message.setHeader("SAP_AS2_Outbound_Mdn_Verify_Mic", mdnVerifyMic)
} else if(adapter == "SFTP" || adapter == "FTP") {
def host = service.getParameter("host", pid, java.lang.String.class)
message.setHeader("host", host)
def directory = service.getParameter("directory", pid, java.lang.String.class)
message.setHeader("directory", directory)
def credentials = service.getParameter("credentials", pid, java.lang.String.class)
message.setHeader("credentials", credentials)
message.setHeader("CamelFileNameOnly", stdmes + "_" + intchg + ".edi")
if(adapter == "FTP") {
def encryption = service.getParameter("SAP_FtpEncryption", pid, java.lang.String.class)
if(encryption == "ftps" || encryption == "ftpes") {
message.setProperty("SAP_FtpEncryption", encryption)
} else {
message.setHeader("adapter", "")
}
}
}
// Set archive file name if archiving is activated for message
def archive = headers.get("ArchiveMessage")
if(archive == "true") {
message.setHeader("ArchiveFile", stdmes + "_" + intchg + ".edi")
}
return message
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
21 | |
19 | |
9 | |
7 | |
5 | |
5 | |
5 | |
4 | |
4 | |
4 |