EOS: Stock balance : groovy unit testing. loop reocrds in getting value from value mapping.

UNIT TESTING VALUE MAPPING

given payload by client.

<?xml version='1.0' encoding='UTF-8'?><stockBalance><companyCode> </companyCode><sourceType> </sourceType><source><location>DHLN</location><name1> </name1><name2> </name2><houseNumber> </houseNumber><street1> </street1><street2> </street2><postalCode> </postalCode><poBox> </poBox><city> </city><state> </state><country> </country><phone> </phone><globalLocationNumber> </globalLocationNumber></source><stockBalanceDate>2024-03-24T00:00:00UTC+00</stockBalanceDate><stockBalanceName> </stockBalanceName><items><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>001</wmsQualityStatus><qualityStatus>released</qualityStatus><positiveRelease>Y</positiveRelease><positiveReleaseDate></positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>A461</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>3060</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-01-01T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>001</wmsQualityStatus><qualityStatus>released</qualityStatus><positiveRelease>Y</positiveRelease><positiveReleaseDate></positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>A461</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>3060</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-01-01T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>001</wmsQualityStatus><qualityStatus>released</qualityStatus><positiveRelease>Y</positiveRelease><positiveReleaseDate></positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>R463062</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>672</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-02-20T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>001</wmsQualityStatus><qualityStatus>released</qualityStatus><positiveRelease>Y</positiveRelease><positiveReleaseDate></positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>R463062</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>672</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-02-25T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>001</wmsQualityStatus><qualityStatus>released</qualityStatus><positiveRelease>N</positiveRelease><positiveReleaseDate>2024-01-10T00:00:00UTC+00 </positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>A461</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>120</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-01-01T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>001</wmsQualityStatus><qualityStatus>released</qualityStatus><positiveRelease>N</positiveRelease><positiveReleaseDate>2024-01-10T00:00:00UTC+00 </positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>A461</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>120</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-01-01T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>003</wmsQualityStatus><qualityStatus>HOLD</qualityStatus><positiveRelease>Y</positiveRelease><positiveReleaseDate>2024-01-10T00:00:00UTC+00 </positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>A461</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>32</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-01-01T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item><item><itemPosition> </itemPosition><stockBalanceItemtype></stockBalanceItemtype><vendorLocation> </vendorLocation><storageLocation> </storageLocation><ssccNumber></ssccNumber><wmsQualityStatus>004</wmsQualityStatus><qualityStatus>HOLD</qualityStatus><positiveRelease>N</positiveRelease><positiveReleaseDate>2024-01-10T00:00:00UTC+00 </positiveReleaseDate><certifcateNumber> </certifcateNumber><materialReference>A461</materialReference><batch></batch><quantityInAuom> </quantityInAuom><uomCode> </uomCode><quantityInBuom>32</quantityInBuom><baseUom> </baseUom><conversionFactorToBuom> </conversionFactorToBuom><stockType> </stockType><productLifeCycleStatus> </productLifeCycleStatus><batchAvailabilityDate> </batchAvailabilityDate><bestBeforeDate>2030-01-01T00:00:00UTC+00 </bestBeforeDate><productionDate></productionDate><materialType></materialType><itemDescription> </itemDescription><localPalletId> </localPalletId><localReferenceNumber> </localReferenceNumber><startProductionDate> </startProductionDate><lastUpdateDate> </lastUpdateDate><advancedShippingNotification></advancedShippingNotification></item></items></stockBalance>


import com.sap.gateway.ip.core.customdev.util.Message
import groovy.util.XmlParser
import groovy.xml.XmlUtil
//import com.sap.it.api.ITApiFactory
//import com.sap.it.api.mapping.ValueMappingApi

def Message processData(Message message) {
    // Get the body of the message as string
    def body = message.getBody(java.lang.String) as String

    // Parse the XML
    def parser = new XmlParser()
    def stockBalance = parser.parseText(body)

    // Retrieve the value mapping API service
    //def valueMapApi = ITApiFactory.getService(ValueMappingApi.class, null)

    // Iterate over each item in the items list
    stockBalance.items.item.each { item ->
        def wmsQualityStatus = item.wmsQualityStatus.text()
        def qualityStatus = item.qualityStatus.text()
        def positiveRelease = item.positiveRelease.text()

// Apply the additional logic
        if (['BLC', 'DES', 'OBS', 'PEN', 'RET', 'SPE'].contains(wmsQualityStatus)) {
            qualityStatus = '*'
            positiveRelease = '*'
        }
       
        if (['HOLD', 'FSI', 'Disposal-Normal', 'Disposal-Special'].contains(qualityStatus)) {
            wmsQualityStatus = '*'
            positiveRelease = '*'
        }

        // Concatenate the values with a pipe and prepare sourceValue
        def sourceValue = "${wmsQualityStatus}|${qualityStatus}|${positiveRelease}"
       
        // Call the Value Mapping API to get the target value
        println sourceValue
        def targetValue ="abc"
        //valueMapApi.getMappedValue('Source', '3fieldsConcat', sourceValue, 'Target', 'fileType')

        // Set the stockBalanceItemtype based on the target value received
        if (targetValue) {
            item.stockBalanceItemtype[0].value = targetValue
        } else {
            item.stockBalanceItemtype[0] = 'Mapping Not Found' // Fallback if no mapping is found
        }
        println targetValue
        println item.stockBalanceItemtype
        println "*****"
    }

    // Convert the modified object back to XML string
    def writer = new StringWriter()
    def xmlOutput = new XmlUtil().serialize(stockBalance, writer)

    // Set the modified XML back as the message body
    message.setBody(writer.toString())

    return message
}

https://groovyide.com/cpi

 001|released|Y

abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
001|released|Y
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
001|released|Y
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
001|released|Y
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
001|released|N
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
001|released|N
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
*|HOLD|*
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****
*|HOLD|*
abc
[stockBalanceItemtype[attributes={}; value=abc]]
*****

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

value mapping testing.

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

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

import java.util.HashMap;

import com.sap.it.api.ITApiFactory

import com.sap.it.api.mapping.ValueMappingApi


def Message readValueMapping(Message message) {


       //Properties 

       def map = message.getProperties();

       productId = map.get("id");

       

       def valueMapApi = ITApiFactory.getService(ValueMappingApi.class, null)

       def productCode = valueMapApi.getMappedValue('CompanyA', 'ID', productId, 'CompanyB', 'ProductCode')

       message.setProperty("productCode", productCode);

       

       return message;

}

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

  message.setProperty("productCode", productCode);

replace this as below

 message.setProperty("productCode", productCode ?: "Mapping not found");


&&

if (valueMapApi == null) { throw new RuntimeException("ValueMappingApi service is not available. Ensure Value Mapping is configured in SAP CPI."); }

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