Hi I have two arrays , one for the #MaterialCode and one for the #SerialNumbers

Hi I have two arrays , one for the #MaterialCode and one for the #SerialNumbers
Arrays are alrady sorted.
what I need to obtain is an array of [#MaterialCode,#ListofSerialNumber] list of serial Numbers for each #MaterialCode
Example:
#MaterialCode : {083813291400, 083813291400, 083813291400, 083816316600, 083816316600}
#SerialNumbers: {BB, DD, EE, XX, YY}

Desire Output should be:
{
{083813291400,"BB,DD,EE"},
{083816316600, "XX , YY"}
}
Thank you in advanced

OriginalPostID-153181

OriginalPostID-153181

  • Does the use case allow for this to be done in process? If so, I would use one script task to determine the distinct material codes (rule!APN_distinct) and then in the next node you can MNI over that list of distinct materical codes. I used the following expression in the data output of the MNI node appending to my array on each iteration:

    append(pv!distinctMaterialCodes[tp!instanceindex],index(pv!serialNumbers,wherecontains(pv!distinctMaterialCodes[tp!instanceindex],pv!materialCodes),{}))

    Attached a screenshot of the resulting variables. It's not complete, but maybe will put you in the right direction.

  • This can be done easily by creating two expression rules. Parent rule will have to do apply on other another rule to format material code and serial numbers. First thing, material codes are too big for an integer data type. So, I converted them into text data type and formatted them desired output that you need.

    Here is the code that you can take a look. You can add more exception handling, and pass different list of input to local variables.

    Main rule :
    load(
    local!materialCodes :{"083813291400", "083813291400", "083813291400", "083816316600", "083816316600"},
    local!serialNumbers:{"BB", "DD", "EE", "XX", "YY"},

    apply(

    rule!formatMaterialCodeAndSerialNumbers,{union(local!materialCodes,local!materialCodes)},local!materialCodes,local!serialNumbers)
    )

    Rule : formatMaterialCodeAndSerialNumbers

    {ri!int_materialCode,
    joinarray(
    index(ri!text_listOfSerialNumbers,
    fn!wherecontains(tostring(ri!int_materialCode),apply(fn!tostring,ri!int_listOfMaterialCodes)),""),",")
    }
  • Here it is the result after execution.

  • Hi, first of all thank you for your support.
    I followed your suggestions but unfortunately my rule doesn't work. Attached the error print screen.
    Any suggestions?
    Thanks again

  • It looks like your helper rule has inputs material code, list of serial numbers, list of material codes. But you're passing it in as material code, list of material codes, list of serial numbers. Try switching the order of inputs to match, or use the input names in your function call e.g.
    apply(
    rule!formatMaterialCodeAndSerialNumbers(int_materialCode: _, text_listOfSerialNumbers: local!serialNumbers, int_listOfMaterialCodes: local!materialCodes),
    union(local!materialCodes,local!materialCodes)
    )

 Discussion posts and replies are publicly visible