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.");
}