CE-1955 propagate errors from child (association) records up to main record

This commit is contained in:
2024-12-26 18:53:27 -06:00
parent 7e475e2c18
commit 6b7d3ac26d

View File

@ -197,6 +197,14 @@ public class BulkInsertTransformStep extends AbstractTransformStep
List<QRecord> recordsWithSomeErrors = new ArrayList<>(); List<QRecord> recordsWithSomeErrors = new ArrayList<>();
for(QRecord record : runBackendStepInput.getRecords()) for(QRecord record : runBackendStepInput.getRecords())
{ {
List<QErrorMessage> errorsFromAssociations = getErrorsFromAssociations(record);
if(CollectionUtils.nullSafeHasContents(errorsFromAssociations))
{
List<QErrorMessage> recordErrors = Objects.requireNonNullElseGet(record.getErrors(), () -> new ArrayList<>());
recordErrors.addAll(errorsFromAssociations);
record.setErrors(recordErrors);
}
if(CollectionUtils.nullSafeHasContents(record.getErrors())) if(CollectionUtils.nullSafeHasContents(record.getErrors()))
{ {
recordsWithSomeErrors.add(record); recordsWithSomeErrors.add(record);
@ -351,6 +359,34 @@ public class BulkInsertTransformStep extends AbstractTransformStep
/***************************************************************************
**
***************************************************************************/
private List<QErrorMessage> getErrorsFromAssociations(QRecord record)
{
List<QErrorMessage> rs = null;
for(Map.Entry<String, List<QRecord>> entry : CollectionUtils.nonNullMap(record.getAssociatedRecords()).entrySet())
{
for(QRecord associatedRecord : CollectionUtils.nonNullList(entry.getValue()))
{
if(CollectionUtils.nullSafeHasContents(associatedRecord.getErrors()))
{
rs = Objects.requireNonNullElseGet(rs, () -> new ArrayList<>());
rs.addAll(associatedRecord.getErrors());
List<QErrorMessage> childErrors = getErrorsFromAssociations(associatedRecord);
if(CollectionUtils.nullSafeHasContents(childErrors))
{
rs.addAll(childErrors);
}
}
}
}
return (rs);
}
/*************************************************************************** /***************************************************************************
** **
***************************************************************************/ ***************************************************************************/