Search code examples
muledataweavemulesoft

I am unable to use padRight


Im trying to add zeros when necessary to a mapping but it is not working.

This is the payload im working with:

[
    {
        
        "groupName": "POSCH",
        
        "groupMembers": [
            {
                "dealerNumber": "262",
                
                "mainDealer": true
            },
            {
                "dealerNumber": "243",
                
                "mainDealer": false
            }
        ]
    },
    {
        
        "groupName": "PRUCKNER",
        
        "groupMembers": [
            {
                "dealerNumber": "213",
                
                "mainDealer": true
            },
            {
                "dealerNumber": "262",
                
                "mainDealer": false
            }
        ]
    }]

Im currently writting this in order to filter the dealerNUmber that contains true in maindealer only. I believe that is in a good state but i cant add the zeros

%dw 2.0
output application/json
---
payload map {
    groupName: $.groupName,
    dealers: $.groupMembers filter $.mainDealer == true map {
        dealerNumber: $.dealerNumber padRight(5, "0"),
        locationName: $.locationName
    }
}

In order to get the 262 becoming 00262.

But it is giving me this error :

Invalid input ',', expected ')' for the enclosed expression. (line 7, column 48):


7|         dealerNumber: $.dealerNumber padRight(5, "0"),
                                                  ^
Location:
main (line: 7, column:48)

Solution

  • There are a couple of problems with the provided DataWeave script.

    1. As per your requirement you need leftPad and not rightPad since you are trying to add zeros to the left of your string. You need to import it as it is in the dw::core::Strings module.
    2. You are mixing infix and prefix notations. You can use only one of them at a time and infix is only possible when you want to call the function with 2 params. Refer this documentation

    DataWeave supports both prefix notation (function (param1, param2)) and infix notation (param1 function param2) for function calls. Note that you can use infix notation only with functions that accept only two parameters.

    Your DataWeave should look like this after the suggested changes:

    %dw 2.0
    import leftPad from dw::core::Strings
    output application/json
    ---
    payload map {
        groupName: $.groupName,
        dealers: $.groupMembers filter $.mainDealer == true map {
            dealerNumber: leftPad($.dealerNumber,5, "0"),
            locationName: $.locationName
        }
    }