s4 hana and erp direct integration with ariba examples

 

idoc 2 soap


allow chunking enable;
cleanup request headers enable;




import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.util.*;
import java.util.Map.Entry;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.ITApi;
import com.sap.it.api.mapping.ValueMappingApi;
import com.sap.it.spi.ITApiHandler;
import com.sap.xi.mapping.camel.valmap.VMStore;
import com.sap.xi.mapping.camel.valmap.VMValidationException;
import com.sap.xi.mapping.camel.valmap.ValueMappingApiHandler;
import com.sap.it.api.exception.InvalidContextException;

def Message processData(Message message) {


def map = message.getHeaders();
def messageLog = messageLogFactory.getMessageLog(message);

String eccURL=null;
def cigAddress;
def credentialName;
def docType = map.get("docType");

try{

            def service = ITApiFactory.getApi(ValueMappingApi.class, null);

            if( service != null)
            {
            cigAddress = service.getMappedValue("HCI", "Solution", "Sourcing_Direct", "CIG", "Address");
cigCredential = service.getMappedValue("HCI","Connection","Connection","CIG","Credentials");

      }
      eccURL = cigAddress;
      credentialName = cigCredential;

      }
      catch(Exception e)
      {
        messageLog.setStringProperty("Exception",e.toString())
        return null;
      }

      message.setHeader("eccURL",eccURL);
      message.setHeader("credentialName",credentialName);
  //addCustomHeader(message,"eccURL",eccURL);


return message;
}


def addCustomHeader(Message message, String key, String val) {
def messageLog = messageLogFactory.getMessageLog(message)
if (val != null) {
messageLog.addCustomHeaderProperty(key, val);
}
}

---------------------


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:hci="http://sap.com/it/" 
    version="2.0">
    <xsl:param name="exchange" />
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" />
    <xsl:template match="@* | *">
        <xsl:copy>
            <xsl:apply-templates select="@* | *" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/">
        
        <xsl:variable name="docType">
            <xsl:choose>
                <xsl:when test="ARBCIGR_CHRMAS">AppsIDOC</xsl:when>
                <xsl:when test="ARBCIGR_CLSMAS">AppsIDOC</xsl:when>
                <xsl:when test="ARBCIGR_WMERCAT">AppsIDOC</xsl:when>
                <xsl:when test="ARBCIGR_BOMMAT">AppsIDOC</xsl:when>
                <xsl:when test="ARBCIGR_ARTMAS">AppsIDOC</xsl:when>
                <xsl:when test="ARBCIGR_ALEAUD">AppsIDOC</xsl:when>
                <xsl:otherwise>IDOC</xsl:otherwise>
            </xsl:choose>
            
        </xsl:variable>
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:copy-of select="." />
        </xsl:copy>

        <!-- Output Variables -->
        <xsl:value-of select="hci:setHeader($exchange, 'docType', $docType)" />
    </xsl:template>
</xsl:stylesheet>

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.util.*;
import java.util.Map.Entry;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.ITApi;
import com.sap.it.api.mapping.ValueMappingApi;
import com.sap.it.spi.ITApiHandler;
import com.sap.xi.mapping.camel.valmap.VMStore;
import com.sap.xi.mapping.camel.valmap.VMValidationException;
import com.sap.xi.mapping.camel.valmap.ValueMappingApiHandler;
import com.sap.it.api.exception.InvalidContextException;

def Message processData(Message message) {
def map = message.getHeaders();
def messageLog = messageLogFactory.getMessageLog(message);
String eccURL=null;
def cigAddress;
def credentialName;
def docType = map.get("docType");
try{  
            def service = ITApiFactory.getApi(ValueMappingApi.class, null);
      
            if( service != null)
            {
            if (docType == 'AppsIDOC')
            {
                  cigAddress = service.getMappedValue("HCI", "Solution", "Apps", "CIG", "Address");
cigCredential = service.getMappedValue("HCI","Connection","Connection","CIG","Credentials");
            }
            else 
            {
cigAddress = service.getMappedValue("HCI", "Solution", "Network", "CIG", "Address");
cigCredential = service.getMappedValue("HCI","Connection","Connection","CIG","Credentials");
    }
      }
      eccURL = cigAddress;
      credentialName = cigCredential;
     
      }
      catch(Exception e)
      {
        messageLog.setStringProperty("Exception",e.toString())
        return null;
      }
      
      message.setHeader("eccURL",eccURL);
      message.setHeader("credentialName",credentialName);
  //addCustomHeader(message,"eccURL",eccURL);
     
            
return message;
}


def addCustomHeader(Message message, String key, String val) {
def messageLog = messageLogFactory.getMessageLog(message)
if (val != null) {
messageLog.addCustomHeaderProperty(key, val);
}
}




-----------------


import com.sap.gateway.ip.core.customdev.util.Message;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.mapping.ValueMappingApi;
import com.sap.it.api.mapping.ValueMappingApi;
import com.sap.it.spi.ITApiHandler;
import com.sap.xi.mapping.camel.valmap.VMStore;
import com.sap.xi.mapping.camel.valmap.VMValidationException;
import com.sap.xi.mapping.camel.valmap.ValueMappingApiHandler;
import com.sap.it.api.exception.InvalidContextException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.sap.it.api.*;
import com.sap.it.api.pd.*;
import java.lang.StringBuilder;
import com.sap.it.api.pd.BinaryData;
import java.lang.Exception;
import org.w3c.dom.Element
import org.w3c.dom.Node;
import java.io.Reader;
import com.sap.jdsr.passport.DSRPassport;
import com.sap.jdsr.passport.EncodeDecode;
import com.sap.jdsr.util.ConvertHelper;
import org.apache.commons.codec.DecoderException;
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Hex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.text.SimpleDateFormat;

def Message processData(Message message) {

def messageLog = messageLogFactory.getMessageLog(message);
def map = message.getHeaders();

//Read the exchange Headers
  // def anProductName = map.get("product");
   def anRealmId = map.get("anRealmId");
   def anLanguage = map.get("sap-language")
   def anAPIType = map.get("anAPIType");
   def anDocId = map.get("anDocId");
   def anDocType = map.get("anDocType");
   def anContentType = map.get("Content-Type");
   String anSenderID = map.get("anid");
   def anOperation = map.get("anOperation");
   def BusinessSystemID = map.get("anSystemId");
   def anIsAttachment = "false";
   message.setHeader("anOperation", anOperation)
   def xclientid = map.get("x-client-id");

   def anMetadataCall
   
   
   message.setHeader("X-client-ID", xclientid);
   addCustomHeader(message,"X-client-ID", xclientid);
   
   def  anid = service.getMappedValue("Ariba","ANID", 'AribaNetworkID', "ECC", "ANIdentifier");
   
   message.setHeader("anid", anid)
   addCustomHeader(message,"anid",anid);
   
   String xcheck = false;
   if(xclientid)
   {
       xcheck = (anid.contains(xclientid));
       message.setHeader('xcheck', xcheck);
       addCustomHeader(message,"xcheck",xcheck);
   }
   
   
   if( xcheck == 'true' || anid == "ANID")
   {
       def anContinue = 'TRUE'; 
   }
   else
   {
       throw new  Exception("Please maintain ANID in the Value Mapping correctly")
   }
   // HTTP POST Operation is only supported in this call. Rest of the methods are not allowed and if received should fail the request and retrun proper HTTP Error Response code
   
   if (anContinue == 'TRUE')
    {
        def anCamelHTTPMethod = map.get("CamelHttpMethod")
        //addCustomHeader(message,"Inbound HTTPMethod", anCamelHTTPMethod);

        if (anCamelHTTPMethod != "POST") {
        message.setHeader("SAP_MessageType",anDocType);
       message.setHeader("SAP_Sender", anSenderID);
       message.setHeader("SAP_Receiver", anRealmId);
       message.setHeader("CamelHttpResponseCode","405")
       throw new IllegalStateException("Incoming HTTP Method"+anCamelHTTPMethod+"is not allowed");
   }

   // Check for any unwatned HTML Tags under PR Doc ID.
   if (anDocId)
   {
        Pattern ansearchHTMLPattern = Pattern.compile("\\<.*?\\>");
        Matcher anMatchHTMLTags = ansearchHTMLPattern.matcher(anDocId);
        boolean anInvalidDocID = anMatchHTMLTags.find();
        if (anInvalidDocID) {
           message.setHeader("SAP_MessageType",anDocType);
           message.setHeader("SAP_Sender", anSenderID);
           message.setHeader("SAP_Receiver", anRealmId);
           message.setHeader("anExceptionCode","CIG-PLT-00675")
           throw new IllegalStateException("Incoming Request might be missing mandatory HTTP Headers");
        }
   }

    message.setHeader("anTokenReady", "false")
    message.setHeader("anRequestReady", "false")
    message.setHeader("anBatchReady", "false")

       if (!anSenderID || !anRealmId)  {
       message.setHeader("anExceptionCode","CIG-PLT-00674")
       throw new IllegalStateException("Incoming Request might be missing mandatory HTTP Headers");
   }

    String[] anS4ResourceList = anAPIType.split('/')
   def anS4ResourceAPI = anS4ResourceList[0]
   def anS4ResourceType = anS4ResourceList[1]
    if (anAPIType.contains('batch'))  {
       message.setHeader("anPayloadContentType","multipart/mixed; boundary=batch")
       message.setProperty("payload", message.getBody(java.lang.String));
    }
    else if (anAPIType.contains('ATTACHMENT'))
    {
       anIsAttachment = "true"
       message.setHeader("anIsAttachment", anIsAttachment)
       addCustomHeader(message,"anIsAttachment", anIsAttachment);
       if (!anOperation) {
            message.setHeader("anExceptionCode", "CIG-PLT-00674");
    throw new IllegalStateException("Incoming Request might be missing mandatory HTTP Headers");
       }
       message.setProperty("anOperation", anOperation)
       if (anOperation.equalsIgnoreCase('POST'))
        {
            message.setProperty("slug",map.get("Pslug"));
        message.setProperty("LinkedSAPObjectKey", map.get("PLinkedSAPObjectKey"));
        message.setProperty("BusinessObjectTypeName", map.get("PBusinessObjectTypeName"));
        message.setHeader("anPostAttachmentReady", "false")
        }
       else if (anOperation.equalsIgnoreCase('DELETE'))
       {
            message.setHeader("anDeleteAttachmentReady", "false")
   }
    }
    else if (anAPIType.contains('metadata'))
    {
        anMetadataCall = 'True'
        message.setHeader("anMetadataCall", anMetadataCall)
        anDocId = anDocId+"_metadata"
    }
    else {
       message.setHeader("anPayloadContentType","application/json")
       message.setProperty("payload", message.getBody(java.lang.String));
    }


   //Set transactional headers for exchange
   message.setHeader("SAP_ApplicationID",anDocId);
   message.setHeader("SAP_MessageType",anDocType);
   message.setHeader("SAP_Sender", anSenderID);
   message.setHeader("SAP_Receiver", anRealmId);
   message.setHeader("anLanguage", anLanguage);
   message.setHeader("anS4ResourceType",anS4ResourceType);

   try{

           def service = ITApiFactory.getApi(ValueMappingApi.class, null);


            if( service != null)
            {
address = service.getMappedValue("Ariba", "SystemID", BusinessSystemID, "S4HANA", "Address");
      clientID = service.getMappedValue("Ariba", "SystemID", BusinessSystemID, "S4HANA", "ClientID");
      ccLocationID = service.getMappedValue("Ariba", "SystemID", BusinessSystemID, "S4HANA", "CCLocationID");
      credentialName = service.getMappedValue("Ariba", "SystemID", BusinessSystemID, "S4HANA", "Credentials");
      }
   }
      catch(Exception e)
      {
        messageLog.setStringProperty("Exception",e.toString())
        return null;
      }
        String anDestinationURL
    String anTokenURL = address+"sap/opu/odata/sap/"+anS4ResourceAPI+"/";
   
    if (anMetadataCall && anMetadataCall.equalsIgnoreCase("True"))
        {
            anTokenURL = anTokenURL+"\$metadata"
        }
    anTokenURL = anTokenURL.trim();

    anDestinationURL = address+"sap/opu/odata/sap/"+anAPIType;
    message.setHeader("anDestinationURL",anDestinationURL);
    message.setHeader("ccLocationID",ccLocationID);
    message.setHeader("credentialName",credentialName);
    message.setHeader("anTokenURL",anTokenURL);

        return message;

}
}
def addCustomHeader(Message message, String key, String val) {
def messageLog = messageLogFactory.getMessageLog(message)
if (val != null) {
messageLog.addCustomHeaderProperty(key, val);
}
}
   


reading all headers using groovy



import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;

def Message processData(Message message) {
    //In case of exception at the HTTP Adapter level, retrive the cached exchage headers from Property
    def headersFromCache = message.getProperty("Original_Exchange_Headers");
    if (headersFromCache != null)
    {
        for (header in headersFromCache)  {
            message.setHeader(header.getKey().toString(), header.getValue())
        }
    }

    return message;
}




-----------------------

SOAP Inbound Pass Through Content for Ariba


copying content as it is,
prepare variables for exchange;
checking input message structure i.e. datatype and puting into variables and ;


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:hci="http://sap.com/it/"
    xmlns:n0="http://sap.com/xi/ARBCIG1" xmlns:ns0="http://sap.com/xi/ARBCIG2" xmlns:sapg20="http://sap.com/xi/SAPGlobal20/Global"  xmlns:n1="urn:sap-com:document:sap:rfc:functions" xmlns:ns2="http://ariba.com/s4/dms/schema/pir"  xmlns:ns3="http://sap.com/xi/Procurement" xmlns:ns4="urn:Ariba:Buyer:vsap"
    version="2.0" exclude-result-prefixes="hci n0 ns0 sapg20 n1 ns2 ns3 ns4">
    <xsl:param name="exchange"/>
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
    <xsl:template match="@* | *">
        <xsl:copy>
            <xsl:apply-templates select="@* | *"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/">
        <!-- TODO: Auto-generated template -->
        <!-- For SP01 through SP03 use RCVPRN for Inbound ERP IDOC System ID reference-->
        <xsl:param name="idocSysId" select="normalize-space(//IDOC/EDI_DC40/RCVPRN)"/> 
        <!--For SP04 onwards Use E1ARBCIG_ADDITIONAL_DATA/ERPSYSTEMID for Inbound ERP IDOC System ID reference-->
        <xsl:param name="idocSysId_Addl" select="normalize-space(//E1ARBCIG_ADDITIONAL_DATA/ERPSYSTEMID)"/>
        
        <xsl:param name="idocType" select="normalize-space(//IDOC/EDI_DC40/IDOCTYP)"/>
        
        <xsl:param name="soapSysId" select="normalize-space(//RecipientParty/InternalID)"/>
        <xsl:param name="soapSysIdQuote" select="normalize-space(//MESSAGEHEADER/RECIPIENTBUSINESSSYSTEMID)"/>
        
        <!--Use RecipientBusinessSystemID for SLP inbound documents-->
        <xsl:param name="slpSysId"  select="normalize-space((//MessageHeader/RecipientBusinessSystemID)[1])"/>
         <!--Use RecipientBusinessSystemID for Sourcing Contracts inbound documents-->
        <xsl:param name="srcContractSysId"  select="normalize-space((//n0:PurchasingContractERPCreateRequest/MessageHeader/RecipientBusinessSystemID)[1])"/>
        <xsl:param name="srcContractServicesSysId"  select="normalize-space((//ns0:PurchasingContractERPRequest_V1/MessageHeader/RecipientBusinessSystemID)[1])"/>
        <!-- Status Update scenario -->
<xsl:param name="surSoapSysId" select="normalize-space(//RecipientParty/InternalID)" />
        <xsl:param name="surSoapSysId1" select="normalize-space(//n0:DocumentStatusUpdateRequest/LogicalSystem)" />
        <xsl:param name="buyerCatalogSURSysId" select="normalize-space(//n0:BuyerCatalogStatusResponseMsg/Item/SystemID)"/>
<!-- p2p/sourcing scenario -->
        <xsl:param name="soapRealmId" select="normalize-space(//VARIANT)" />
        <xsl:param name="sesSoapRealmId" select="normalize-space(//@variant)" />
        <xsl:param name="buyerSURSoapRealmId" select="normalize-space(//n0:BuyerStatusUpdateRequest/MessageHeader/variant)"/>
        <xsl:param name="buyerCatalogSURSoapRealmId" select="normalize-space(//n0:BuyerCatalogStatusResponseMsg/Item/RealmID)"/>
        <!-- stock check request, only ID ex: 100  -->
        <xsl:param name="stockRealmId" select="normalize-space(//@RealmName)" />
        <xsl:param name="pirSysId" select="normalize-space(ns2:PIRPushRequest/ns2:ERPId)" />
        <xsl:param name="bomSysID" select="normalize-space(n0:BOMConfirmation/MessageHeader/ERPID)"/>
        <xsl:variable name="docType">
            <xsl:choose>
                <xsl:when test="n0:DsptchdDelivNotifMsg">DsptchdDelivNotifMsg</xsl:when>
                <xsl:when test="n0:ComponentAcknowledgement">ComponentAcknowledgement</xsl:when>
                <xsl:when test="n0:ComponentConsumption">ComponentConsumption</xsl:when>
                <xsl:when test="n0:CreditMemoMsg">CreditMemoMsg</xsl:when>
                <xsl:when test="n0:DocumentStatusUpdateRequest"
                    >DocumentStatusUpdateRequest</xsl:when>
                <xsl:when test="n0:LiabilityTransfer">LiabilityTransfer</xsl:when>
                <xsl:when test="n0:ProductReplenishment">ProductReplenishment</xsl:when>
                <xsl:when test="n0:RemittanceAdvice">RemittanceAdvice</xsl:when>
                <xsl:when test="n0:ServiceEntrySheetRequest">ServiceEntrySheetRequest</xsl:when>
                <xsl:when test="n0:QualityIssueNotificationMessage"
                    >QualityIssueNotificationMessage</xsl:when>
                <xsl:when test="n0:PurchasingContractERPCreateRequest"
                    >PurchasingContractERPCreateRequest</xsl:when>
                <xsl:when test="n1:ARBCIG_QUOTE">QuoteMessageOrder</xsl:when>
                <xsl:when test="ns0:PurchasingContractERPRequest_V1"
                    >PurchasingContractERPRequest_V1</xsl:when>
<xsl:when test="sapg20:BusinessPartnerSUITEBulkReplicateRequest"
                    >BusinessPartnerSUITEReplicateRequest</xsl:when>
                <xsl:when test="sapg20:BusinessPartnerSUITEBulkReplicateConfirmation"
                    >BusinessPartnerSUITEReplicateConfirmation</xsl:when>
                <xsl:when test="sapg20:KeyMappingBulkReplicateConfirmation"
                    >KeyMappingBulkReplicateConfirmation</xsl:when>
                  <xsl:when test="sapg20:BusinessPartnerRelationshipSUITEBulkReplicateRequest"
                    >BusinessPartnerRelationshipSUITEBulkReplicateRequest</xsl:when>
                <xsl:when test="sapg20:BusinessPartnerRelationshipSUITEBulkReplicateConfirmation"
                    >BusinessPartnerRelationshipSUITEBulkReplicateConfirmation</xsl:when>
                <xsl:when test="n0:SpendVisibilityConfirmation">SpendAnalysisConfirmation</xsl:when>
                <xsl:when test="ARBCIGR_ARTMAS">ArticleMaster</xsl:when>
                <xsl:when test="ARBCIGR_BOMMAT">ArticleComponents</xsl:when>
                <xsl:when test="n0:AssetRequisitionAsyncExportRequest">AssetRequisitionAsyncExportRequest</xsl:when>
                <xsl:when test="n0:QualityInspectionResult">qualityinspectionresultrequest</xsl:when>
                <xsl:when test="n0:OrdConfAppReqMsg">ordconfappreqmsg</xsl:when>
                <xsl:when test="n0:ReplenishmentOrderRequest">ReplenishmentOrderRequest</xsl:when>
                <xsl:when test="n0:SchedulingAgreementERPRequest">schedulingagreementerprequest</xsl:when>
                <xsl:when test="n0:InvoiceERPRequest">InvoiceERPRequest</xsl:when>
                <xsl:when test="n0:PaymentReceiptConfirmationRequest">paymentreceiptconfrequest</xsl:when>
                <xsl:when test="n0:FileAttachRequest">fileattachrequest</xsl:when>
                
                <!--  P2P documents -->
        <xsl:when test="n1:ARBCIG_BAPI_PO_CREATE1">PurchaseOrderExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_BAPI_PO_CHANGE">PurchaseOrderChangeExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_BAPI_PO_CANCEL">PurchaseOrderCancelExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_BAPI_PO_CLOSE">PurchaseOrderCloseStatusExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_GOODS_RECEIPT_CREATE">ReceiptExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_ADV_PAYMENT_POST">AdvancePaymentExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_ADV_PAYMENT_REV_POST">CancelAdvancePaymentExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_BAPI_INVOICE_CREATE">PaymentExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_BAPI_ASSET_CREATE">AssetRequisitionExportRequest</xsl:when>
<xsl:when test="n1:ARBCIG_BATCH_PURREQ_DELETE">AggregatedRequisitionRevertBudgetRequest</xsl:when>
<xsl:when test="n0:BuyerStatusUpdateRequest">BuyerStatusUpdateRequest</xsl:when>
<xsl:when test="n0:BuyerCatalogStatusResponseMsg">CatalogStatusResponse</xsl:when>
<!-- includes stock create and delete -->
<xsl:when test="n1:ARBCIG_STK_RESERVATION">ReservationAsyncExportRequest</xsl:when>
<xsl:when test="n0:StockCheckRequest">StockCheckRequest</xsl:when>
<!-- Sourcing Master data -->
<xsl:when test="ns2:PIRPushRequest">PurchaseInfoRecord</xsl:when>
<xsl:when test="n0:BOMConfirmation">BomConfirmation</xsl:when>
                
            </xsl:choose>
        </xsl:variable>
        
        <xsl:variable name="systemId">
            <xsl:choose>
                <xsl:when test="$idocSysId_Addl != ''">
                    <xsl:value-of select="$idocSysId_Addl"/>
                </xsl:when>
                <xsl:when test="$idocSysId != ''">
                    <xsl:value-of select="$idocSysId"/>
                </xsl:when>
                <xsl:when test="$soapSysId != ''">
                    <xsl:value-of select="$soapSysId"/>
                </xsl:when>
                 <xsl:when test="$soapSysIdQuote != ''">
                    <xsl:value-of select="$soapSysIdQuote"/>
                </xsl:when>
                 <xsl:when test="$srcContractSysId != ''">
                    <xsl:value-of select="$srcContractSysId"/>
                </xsl:when>
                <xsl:when test="$srcContractServicesSysId != ''">
                    <xsl:value-of select="$srcContractServicesSysId"/>
                </xsl:when>  
                <xsl:when test="$slpSysId != ''">
                    <xsl:value-of select="$slpSysId"/>
                </xsl:when>
                 <xsl:when test="$pirSysId != ''">
                    <xsl:value-of select="$pirSysId"/>
                  </xsl:when>
                <xsl:when test="$bomSysID != ''">
                    <xsl:value-of select="$bomSysID"/>
                  </xsl:when>  
                <xsl:when test="$surSoapSysId1 != ''">
                    <xsl:value-of select="$surSoapSysId1"/>
                </xsl:when>
                 <xsl:when test="$buyerCatalogSURSysId != ''">
                    <xsl:value-of select="$buyerCatalogSURSysId"/>
                </xsl:when>
<xsl:otherwise>
<xsl:value-of select="$surSoapSysId" />
</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:variable name="docStd">
            <xsl:choose>
                <xsl:when test="$idocSysId_Addl != ''">IDoc</xsl:when>
                <xsl:when test="$idocSysId != ''">IDoc</xsl:when>
                <xsl:otherwise>SOAP</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
    <xsl:variable name="realmId">
         <xsl:choose>
            <xsl:when test="$sesSoapRealmId != ''">
               <xsl:value-of select="$sesSoapRealmId" />
            </xsl:when> 
            <xsl:when test="$soapRealmId != ''">
               <xsl:value-of select="$soapRealmId" />
            </xsl:when>
            <xsl:when test="$stockRealmId != ''">
               <xsl:value-of select="$stockRealmId" />
            </xsl:when>
            <xsl:when test="$buyerSURSoapRealmId != ''">
                <xsl:value-of select="$buyerSURSoapRealmId"/>
            </xsl:when>
            <xsl:when test="$buyerCatalogSURSoapRealmId != ''">
                <xsl:value-of select="$buyerCatalogSURSoapRealmId"/>
            </xsl:when>
         </xsl:choose>
        </xsl:variable>  
  
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:copy-of select="."/>
        </xsl:copy>

        <!-- Output Variables -->
        <xsl:value-of select="hci:setHeader($exchange, 'docType', $docType)"/>
        <xsl:value-of select="hci:setHeader($exchange, 'systemId', $systemId)"/>
        <xsl:value-of select="hci:setHeader($exchange, 'documentStandard', $docStd)"/>
        <xsl:value-of select="hci:setHeader($exchange, 'realmId', $realmId)" />

    </xsl:template>
</xsl:stylesheet>




import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.util.*;
import java.util.Map.Entry;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.ITApi;
import com.sap.it.api.mapping.ValueMappingApi;
import com.sap.it.spi.ITApiHandler;
import com.sap.xi.mapping.camel.valmap.VMStore;
import com.sap.xi.mapping.camel.valmap.VMValidationException;
import com.sap.xi.mapping.camel.valmap.ValueMappingApiHandler;
import com.sap.it.api.exception.InvalidContextException;

def Message processData(Message message) {
def map = message.getHeaders();
def messageLog = messageLogFactory.getMessageLog(message);
def docType = map.get("docType");
def systemID = map.get("systemId");
def documentStandard = map.get("documentStandard");
def realmID = map.get("realmId");
def xclientid = map.get("x-client-id");
message.setHeader("DocumentType",docType);
addCustomHeader(message,"Documenttype",docType);
message.setHeader("X-client-ID", xclientid);
addCustomHeader(message,"X-client-ID", xclientid);
message.setHeader("SystemID",systemID);
addCustomHeader(message,"SystemID",systemID);
message.setHeader("DocumentStandard",documentStandard);
addCustomHeader(message,"documentStandard",documentStandard);
addCustomHeader(message,"RealmID",realmID);
String eccURL=null;
def address;
def clientID;
def ccLocationID;
def credentialName;
try
{  
                def service = ITApiFactory.getApi(ValueMappingApi.class, null);
                def  anid = service.getMappedValue("Ariba","ANID", 'AribaNetworkID', "ECC", "ANIdentifier");
            
                message.setHeader("anid", anid)
                addCustomHeader(message,"anid",anid);
            
                String xcheck = false
                if (xclientid) {
                    xcheck = (anid.contains(xclientid));
                    message.setHeader('xcheck', xcheck);
                    addCustomHeader(message,"xcheck",xcheck);
                }
                
                if( xcheck == 'true' || anid == "ANID")
                {
                    if( service != null)
                    {
            if ( systemID == null || systemID == '' || systemID == 'SystemID')
                        {
                  address = service.getMappedValue("Ariba", "RealmID", realmID, "ECC", "Address");
                  clientID = service.getMappedValue("Ariba", "RealmID", realmID, "ECC", "ClientID");
                  ccLocationID = service.getMappedValue("Ariba", "RealmID", realmID, "ECC", "CCLocationID");
                  credentialName = service.getMappedValue("Ariba", "RealmID", realmID, "ECC", "Credentials");
                  
                  }
                  else
                  {
            address = service.getMappedValue("Ariba", "SystemID", systemID, "ECC", "Address");
            clientID = service.getMappedValue("Ariba", "SystemID", systemID, "ECC", "ClientID");
            ccLocationID = service.getMappedValue("Ariba", "SystemID", systemID, "ECC", "CCLocationID");
            credentialName = service.getMappedValue("Ariba", "SystemID", systemID, "ECC", "Credentials");
            
            }
              }
     
              if(documentStandard == 'IDoc')
              {
                  eccURL = address+"sap"+"/bc"+"/srt"+"/IDoc"+"?sap"+"-"+"client"+"="+clientID;
              }
              else
              {
                eccURL = address+"sap"+"/bc"+"/srt"+"/xip"+"/arba"+"/"+docType+"/"+clientID;
     
              }
              docType
                }
                else
                {
                    throw new  Exception("Please maintain ANID in the Value Mapping correctly")
                }
}    
    
                catch(Exception e)
                {
                    messageLog.setStringProperty("Exception",e.toString())
                    return null;
                }
      
                message.setHeader("eccURL",eccURL);
            addCustomHeader(message,"eccURL",eccURL);
     
                message.setHeader("ccLocationID",ccLocationID);
                message.setHeader("credentialName",credentialName);
     
                 //addCustomHeader(message,"ccLocationID",ccLocationID);
                //addCustomHeader(message,"credentialName",credentialName);
      
            return message;
            }


def addCustomHeader(Message message, String key, String val) {
def messageLog = messageLogFactory.getMessageLog(message)
if (val != null) {
messageLog.addCustomHeaderProperty(key, val);
}
}



reading value mapping content in groovy script
and prepare content for soap receiver from it(after looking values from )
------------------------
SOAP Inbound Pass Through Content S4HANA API


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:hci="http://sap.com/it/"
    xmlns:n0="http://sap.com/xi/EDI" xmlns:n1="http://sap.com/xi/Procurement" xmlns:pp="http://sap.com/xi/EDI/Creditor"
    version="2.0" exclude-result-prefixes="hci n0 n1 pp">
    <xsl:param name="exchange"/>
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
    <xsl:template match="@* | *">
        <xsl:copy>
            <xsl:apply-templates select="@* | *"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/">
        <!-- TODO: Auto-generated template -->
        <!--Use RecipientBusinessSystemID for IES 42K Inbound Documents-->
        <xsl:param name="orderconfirmationrequest" select="normalize-space((//n0:OrderConfRequest/MessageHeader/RecipientBusinessSystemID))"/>
        <xsl:param name="deliveryrequest" select="normalize-space((//n0:DeliveryRequest/MessageHeader/RecipientBusinessSystemID))"/>
        <xsl:param name="InvoiceRequest" select="normalize-space((//n0:InvoiceRequest/MessageHeader/RecipientBusinessSystemID))"/>
        <xsl:param name="serviceentrysheetrequest" select="normalize-space(//n0:ServiceEntrySheetRequestMsg/MessageHeader/RecipientBusinessSystemID)"/>
        <xsl:param name="supplierquotations4request" select="normalize-space(//n1:SupplierQuotationS4Request/MessageHeader/RecipientBusinessSystemID)"/>
        <xsl:param name="ProofofDeliveryRequest" select="normalize-space(//n0:ProofOfDeliveryRequest/MessageHeader/RecipientBusinessSystemID)"/>
        <xsl:param name="centralsupplierquotations4requ" select="normalize-space((//n1:CentralSupplierQuotationS4Request/MessageHeader/RecipientBusinessSystemID))"/>
        <!-- 4BL/4QN/4AZ/4B0 Scenarios -->
        <xsl:param name="rfqconfirmations4request" select="normalize-space(//n1:RFQConfirmationS4Request/MessageHeader/RecipientBusinessSystemID)"/>
<!--        SupplierQuotation/CentralSupplierQuotation Already covered in 42K-->
        <xsl:param name="PurchaseContractRequest"
            select="normalize-space(//n0:PurchaseContractRequest/MessageHeader/RecipientBusinessSystemID)"/>
        <xsl:variable name="docType">
            <xsl:choose>
                <xsl:when test="n0:OrderConfRequest">orderconfirmationrequest</xsl:when>
                <xsl:when test="n0:DeliveryRequest">deliveryrequest</xsl:when>
                <xsl:when test="n0:InvoiceRequest">InvoiceRequest</xsl:when>
                <xsl:when test="n0:ServiceEntrySheetRequestMsg">serviceentrysheetrequest</xsl:when>
                <xsl:when test="n1:SupplierQuotationS4Request"
                    >supplierquotations4request</xsl:when>
                <xsl:when test="n0:ProofOfDeliveryRequest">ProofofDeliveryRequest</xsl:when>
                <xsl:when test="n1:CentralSupplierQuotationS4Request">centralsupplierquotations4requ</xsl:when>
                <xsl:when test="n1:RFQConfirmationS4Request">rfqconfirmations4request</xsl:when>
                <xsl:when test="n0:PurchaseContractRequest">PurchaseContractRequest</xsl:when>
              </xsl:choose>
        </xsl:variable>

        <xsl:variable name="systemId">
            <xsl:choose>
                <xsl:when test="$orderconfirmationrequest != ''">
                    <xsl:value-of select="$orderconfirmationrequest"/>
                </xsl:when>
                <xsl:when test="$deliveryrequest != ''">
                    <xsl:value-of select="$deliveryrequest"/>
                </xsl:when>
                <xsl:when test="$serviceentrysheetrequest != ''">
                    <xsl:value-of select="$serviceentrysheetrequest"/>
                </xsl:when>
                <xsl:when test="$InvoiceRequest != ''">
                    <xsl:value-of select="$InvoiceRequest"/>
                </xsl:when>
                <xsl:when test="$supplierquotations4request != ''">
                    <xsl:value-of select="$supplierquotations4request"/>
                </xsl:when>
                <xsl:when test="$ProofofDeliveryRequest != ''">
                    <xsl:value-of select="$ProofofDeliveryRequest"/>
                </xsl:when>
                <xsl:when test="$centralsupplierquotations4requ != ''">
                    <xsl:value-of select="$centralsupplierquotations4requ"/>
                </xsl:when>
                <xsl:when test="$rfqconfirmations4request != ''">
                    <xsl:value-of select="$rfqconfirmations4request"/>
                </xsl:when>
                <xsl:when test="$PurchaseContractRequest != ''">
                    <xsl:value-of select="$PurchaseContractRequest"/>
                </xsl:when>
            </xsl:choose>
        </xsl:variable>

        <xsl:variable name="docStd">
            <xsl:value-of select="'SOAP'"/>
        </xsl:variable>

        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:copy-of select="."/>
        </xsl:copy>

        <!-- Output Variables -->
        <xsl:value-of select="hci:setHeader($exchange, 'docType', $docType)"/>
        <xsl:value-of select="hci:setHeader($exchange, 'systemId', $systemId)"/>
        <xsl:value-of select="hci:setHeader($exchange, 'documentStandard', $docStd)"/>

    </xsl:template>
</xsl:stylesheet>




import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.util.*;
import java.util.Map.Entry;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.ITApi;
import com.sap.it.api.mapping.ValueMappingApi;
import com.sap.it.spi.ITApiHandler;
import com.sap.xi.mapping.camel.valmap.VMStore;
import com.sap.xi.mapping.camel.valmap.VMValidationException;
import com.sap.xi.mapping.camel.valmap.ValueMappingApiHandler;
import com.sap.it.api.exception.InvalidContextException;

def Message processData(Message message) 
{
def map = message.getHeaders();
def messageLog = messageLogFactory.getMessageLog(message);
def docType = map.get("docType");
def systemID = map.get("systemId");
def realmID = map.get("realmID");
def documentStandard = map.get("documentStandard");
def xclientid = map.get("x-client-id");
message.setHeader("DocumentType",docType);
addCustomHeader(message,"Documenttype",docType);
message.setHeader("SystemID",systemID);
addCustomHeader(message,"SystemID",systemID);
message.setHeader("SystemID",systemID);
addCustomHeader(message,"SystemID",systemID);
message.setHeader("DocumentStandard",documentStandard);
addCustomHeader(message,"documentStandard",documentStandard);
addCustomHeader(message,"RealmID",realmID);
String eccURL=null;
def address;
def clientID;
def ccLocationID;
def credentialName;
try
{  
                def service = ITApiFactory.getApi(ValueMappingApi.class, null);
                def anid = service.getMappedValue("Ariba","ANID", 'AribaNetworkID', "ECC", "ANIdentifier");
            
                message.setHeader("anid", anid)
                addCustomHeader(message,"anid",anid);
            
                String xcheck = false;
                if(xclientid)
                { 
                    xcheck =(anid.contains(xclientid));
                    message.setHeader('xcheck', xcheck);
                    addCustomHeader(message,"xcheck",xcheck);
                }
                if( xcheck == 'true' || anid == "ANID")
                {
                    if( service != null)
                    {
         
        address = service.getMappedValue("Ariba", "SystemID", systemID, "S4HANA", "Address");
        clientID = service.getMappedValue("Ariba", "SystemID", systemID, "S4HANA", "ClientID");
        ccLocationID = service.getMappedValue("Ariba", "SystemID", systemID, "S4HANA", "CCLocationID");
        credentialName = service.getMappedValue("Ariba", "SystemID", systemID, "S4HANA", "Credentials");
              }
     
              eccURL = address+"sap"+"/bc"+"/srt"+"/xip"+"/sap"+"/"+docType+"_in"+"/"+clientID+"/"+docType+"_in"+"/"+docType+"_in";
     
    }
    else
                {
                    throw new  Exception("Please maintain ANID in the Value Mapping correctly")
                }
}    
            catch(Exception e)
            {
                messageLog.setStringProperty("Exception",e.toString())
                return null;
            }
            message.setHeader("eccURL",eccURL);
        addCustomHeader(message,"eccURL",eccURL);
     
            message.setHeader("ccLocationID",ccLocationID);
            message.setHeader("credentialName",credentialName);
     
      //addCustomHeader(message,"ccLocationID",ccLocationID);
      //addCustomHeader(message,"credentialName",credentialName);
      
        return message;
}


def addCustomHeader(Message message, String key, String val) {
def messageLog = messageLogFactory.getMessageLog(message)
if (val != null) {
messageLog.addCustomHeaderProperty(key, val);
}
}
























Popular posts from this blog

pss book : శ్రీకృష్ణుడు దేవుడా, భగవంతుడా completed , second review needed. 26th April 2024

pss book: గురు ప్రార్థనామంజరి . completed 21st july 2024

pss book: కధల జ్ఞానము read review pending. 25th june 2024