09-28-2020 12:24 PM
So I have an input schema that has a structure similar to the one shown here:
{
"MatchUpdatePartyPayload:" {
"Address": [
{
"NonStandardUS": {
"Line1": <String>,
"Line2": <String>,
"Line3": <String>,
"City": <String>,
"State": <String>,
"Zip": <String>
},
"Foreign": {
"Line1": <String>,
"Line2": <String>,
"Line3": <String>,
"Line4": <String>,
}
}
]
}
}
I need to map these address fields to an output structure that is similar, but not quite the same. I have tried using the Mapper to do this and it is creating mapping table entries that look like this:
Expression => jsonPath($, "$MatchUpdatePartyPayload.Address[*].NonStandardUS.Line1")
Target Path => jsonPath($, "$MatchUpdateParty.Address[*].NonStandardUS.AddressLine1")
The input documents to the mapper all haver Line1 as a String. Unfortunately, the Mapper output all have AddressLine1 as an array of strings–which is not what I need. What do I need to do to fix the mapping to assign input String fields to output String fields for each element in the array?
Solved! Go to Solution.
09-30-2020 02:54 PM
Yeah, I finally realized that Join snap cannot handle joining fields into same top-level structure so I eliminated the top level structure for the join, and then used a mapper to add the top-level structure back. I had to write a custom snap (not included) to prune off all the null fields/elements created by the Null Safe Access mappers…
I must say that was a lot more painful than I think it should be. If I were to use this in an actual business process, the logic of the business process flow would get lost due to this complex mapping flow…
Here is the final working example (with all of the nulls still present).
Mapping Conundrum_2020_09_30 (3).slp (56.6 KB)
Thanks for the help,
Robert
09-29-2020 10:35 AM
@skatpally, is that all in the “pipeline’s current document” or all (meaning across all documents)? In my sample, I have 5 separate documents in the JsonGenerator. Will 0 cause it to put the values of all 5 documents in it or only the ones from the currently processing document?
09-29-2020 01:37 PM
It will group all the incoming docs.
For your scenario, you need to use a unique ID and do a split and work on the transformations and use a Group by field snap to merge the data back. Attaching the sample to get an idea. Mapping Conundrum_2020_09_29 (1).slp (16.9 KB)
09-29-2020 02:22 PM
@skatpally Great, we are getting closer. Now, I just need to figure out how to recombine the mapped split components back to form a message that reflects the original with the mappings applied. Here is what I am trying but it isn’t doing what I need…
Mapping Conundrum_2020_09_29 (2).slp (47.6 KB)
09-29-2020 04:16 PM
You just need to JOIN them back on the Unique ID
09-30-2020 07:22 AM
@skatpally, A couple of problems:
Group By Field works but I end up with extra stuff inside each element of the array, which will not work for me. The problem is that in order for Group By Field to work, I need to somehow pass the unique ID field value to use for grouping through the Mapper that is working on the individual array elements. If I explicitly map that field in the Mapper, the output from Group By Field has the unique ID field inside each array element. If I do not map the field and use Pass Through, I end up with all of the pass through fields inside each array element. If I do neither, Group By Field errors out because the payload does not have access to the unique ID field. There probably needs to be a “Remove Group By Field from elements” option in the Group By Field snap.
The Join snap does not work because not all messages have all 5 elements that are being joined by unique ID so the snap errors out if I use any of the join types other than Merge. Merge doesn’t do what I need since the reassembled messages have pieces from various messages combined into a single message. I figured Null Safe Access might be the solution but the Join snap still fails to do the join.
What am I missing?
Mapping Conundrum_2020_09_30.slp (48.1 KB)