From 6b5b97136864572be78d9801b1fe26b47de85d7e Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 3 Jul 2024 09:41:46 -0500 Subject: [PATCH] CE-1406 add overridable point: extractSourceKeyValueFromRecord --- .../AbstractTableSyncTransformStep.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/tablesync/AbstractTableSyncTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/tablesync/AbstractTableSyncTransformStep.java index 4028c900..d9b882b9 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/tablesync/AbstractTableSyncTransformStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/tablesync/AbstractTableSyncTransformStep.java @@ -245,9 +245,9 @@ public abstract class AbstractTableSyncTransformStep extends AbstractTransformSt // extract keys from source records // ////////////////////////////////////// List sourceKeyList = runBackendStepInput.getRecords().stream() - .map(r -> r.getValueString(sourceTableKeyField)) + .map(r -> extractSourceKeyValueFromRecord(r, sourceTableKeyField)) .filter(Objects::nonNull) - .filter(v -> !"".equals(v)) + .filter(v -> !"".equals(String.valueOf(v))) .collect(Collectors.toList()); if(this.recordLookupHelper == null) @@ -267,12 +267,12 @@ public abstract class AbstractTableSyncTransformStep extends AbstractTransformSt ///////////////////////////////////////////////////////////////// // foreach source record, build the record we'll insert/update // ///////////////////////////////////////////////////////////////// - QFieldMetaData destinationForeignKeyField = runBackendStepInput.getInstance().getTable(destinationTableName).getField(destinationTableForeignKeyField); + QFieldMetaData destinationForeignKeyField = QContext.getQInstance().getTable(destinationTableName).getField(destinationTableForeignKeyField); Set processedSourceKeys = new HashSet<>(); for(QRecord sourceRecord : runBackendStepInput.getRecords()) { Serializable sourcePrimaryKey = sourceRecord.getValue(QContext.getQInstance().getTable(config.sourceTable).getPrimaryKeyField()); - Serializable sourceKeyValue = sourceRecord.getValue(sourceTableKeyField); + Serializable sourceKeyValue = extractSourceKeyValueFromRecord(sourceRecord, sourceTableKeyField); if(processedSourceKeys.contains(sourceKeyValue)) { LOG.info("Skipping duplicated source-key within page", logPair("key", sourceKeyValue)); @@ -373,6 +373,18 @@ public abstract class AbstractTableSyncTransformStep extends AbstractTransformSt } + /******************************************************************************* + ** Given a source record, extract what we'll use as its key from it. + ** + ** Normally this is just its sourceTableKeyField value - but - a subclass may + ** do something more interesting, including, returning a java-record. + *******************************************************************************/ + protected Serializable extractSourceKeyValueFromRecord(QRecord sourceRecord, String sourceTableKeyField) + { + return sourceRecord.getValue(sourceTableKeyField); + } + + /******************************************************************************* **