cancel
Showing results for 
Search instead for 
Did you mean: 

Groovy script help to remove quotes

SG141
Active Participant
0 Kudos

Need to help identify the scheduleline array object and set the quantity field to number removing the "". 

 

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.json.*
def Message processData(Message message) {

def body = message.getBody(java.lang.String);
def object = new JsonSlurper().parseText(body)



object._PurchaseOrderItem.each{_PurchaseOrderItem->
_PurchaseOrderItem.NetPriceQuantity = _PurchaseOrderItem.NetPriceQuantity.toDouble().intValue()
_PurchaseOrderItem.NetAmount = _PurchaseOrderItem.NetAmount.toDouble()
_PurchaseOrderItem.GrossAmount = _PurchaseOrderItem.GrossAmount.toDouble()
_PurchaseOrderItem.OrderQuantity = _PurchaseOrderItem.OrderQuantity.toDouble()
_PurchaseOrderItem.NetPriceAmount = _PurchaseOrderItem.NetPriceAmount.toDouble()
}

object._PurchaseOrderScheduleLineTP.each{_PurchaseOrderItem._PurchaseOrderScheduleLineTP->
_PurchaseOrderScheduleLineTP.ScheduleLineOrderQuantity = _PurchaseOrderScheduleLineTP.ScheduleLineOrderQuantity.toDouble().intValue()
}

object._PurOrdAccountAssignment.each{_PurchaseOrderItem._PurOrdAccountAssignment->
_PurOrdAccountAssignment.ScheduleLineOrderQuantity = _PurOrdAccountAssignment.ScheduleLineOrderQuantity.toDouble().intValue()
}

message.setBody(JsonOutput.toJson(object));
return message;
}

 

Here's the sample payload and I am trying to remove "" from ScheduleLineOrderQuantity. 

 

{
  "PurchaseOrderType": "NB",
  "PurchaseOrderDate": "2024-05-14",
  "Language": "EN",
  "CompanyCode": "2024",
  "PurchasingOrganization": "2024",
  "PurchasingGroup": "001",
  "Supplier": "1000000",
  "DocumentCurrency": "USD",
  "_PurchaseOrderItem": [
    {
      "PurchaseOrderItem": "10",
      "PurchaseOrderCategory": "F",
      "DocumentCurrency": "USD",
      "MaterialGroup": "E002",
      "PurchaseOrderItemText": "From CPI",
      "ProductTypeCode": "1",
      "CompanyCode": "2024",
      "Plant": "2024",
      "PurchaseOrderQuantityUnit": "EA",
      "OrderPriceUnit": "EA",
      "NetPriceQuantity": "1",
      "PurchaseOrderItemCategory": "0",
      "AccountAssignmentCategory": "P",
      "NetAmount": "10",
      "GrossAmount": "10",
      "OrderQuantity": "10",
      "NetPriceAmount": "1",
      "_PurchaseOrderScheduleLineTP": [{
        "ScheduleLineDeliveryDate": "2024-05-14",
        "SchedLineStscDeliveryDate": "2024-05-14",
        "ScheduleLineOrderQuantity": "10",
        "PurchaseOrderQuantityUnit": "EA",
        "Currency": "USD"
      }],
      "_PurOrdAccountAssignment": [{
        "AccountAssignmentNumber": "1",
        "OrderQuantityUnit": "EA",
        "Quantity": "10",
        "DocumentCurrency": "USD",
        "CostCenter": "20240001",
        "GLAccount": "42007000",
        "Fund": "FUND1",
        "CompanyCode": "2024",
        "ChartOfAccounts": "XXOA",
        "ControllingArea": "ABCD",
        "ProfitCenter": "XXXX"
      }]
    }
  ]
}

 

View Entire Topic
Ryan-Crosby
Active Contributor

Your script structure is off a little bit and the other problem is that your schedule line and account assignment types are not arrays in the JSON data.  Here is a script that will make the data adjustments as long as the streaming is setup appropriately.

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.json.*
def Message processData(Message message) {

def body = message.getBody(java.lang.String);
def object = new JsonSlurper().parseText(body)



object._PurchaseOrderItem.each{_PurchaseOrderItem->
_PurchaseOrderItem.NetPriceQuantity = _PurchaseOrderItem.NetPriceQuantity.toDouble().intValue()
_PurchaseOrderItem.NetAmount = _PurchaseOrderItem.NetAmount.toDouble()
_PurchaseOrderItem.GrossAmount = _PurchaseOrderItem.GrossAmount.toDouble()
_PurchaseOrderItem.OrderQuantity = _PurchaseOrderItem.OrderQuantity.toDouble()
_PurchaseOrderItem.NetPriceAmount = _PurchaseOrderItem.NetPriceAmount.toDouble()
  _PurchaseOrderItem._PurchaseOrderScheduleLineTP.each{_PurchaseOrderScheduleLineTP->
    _PurchaseOrderScheduleLineTP.ScheduleLineOrderQuantity = _PurchaseOrderScheduleLineTP.ScheduleLineOrderQuantity.toDouble().intValue()
  }
  
  _PurchaseOrderItem._PurOrdAccountAssignment.each{_PurOrdAccountAssignment->
    _PurOrdAccountAssignment.Quantity = _PurOrdAccountAssignment.Quantity.toDouble().intValue()
  }
}

message.setBody(JsonOutput.toJson(object))
return message
}

 

Regards,

Ryan Crosby