diff --git a/@rbv b/@rbv index 0c1491976..10a89baaf 160000 --- a/@rbv +++ b/@rbv @@ -1 +1 @@ -Subproject commit 0c1491976582ee7898cd8b16d768414d979ed479 +Subproject commit 10a89baaf882b2244f8c2218404a2e0dff5d3e66 diff --git a/src/main/java/com/rebuild/core/service/trigger/impl/FieldWriteback.java b/src/main/java/com/rebuild/core/service/trigger/impl/FieldWriteback.java index 7693bd49a..cc564f1f3 100644 --- a/src/main/java/com/rebuild/core/service/trigger/impl/FieldWriteback.java +++ b/src/main/java/com/rebuild/core/service/trigger/impl/FieldWriteback.java @@ -14,6 +14,7 @@ import cn.devezhao.persist4j.Field; import cn.devezhao.persist4j.Record; import cn.devezhao.persist4j.dialect.FieldType; import cn.devezhao.persist4j.engine.ID; +import cn.devezhao.persist4j.engine.NullValue; import cn.devezhao.persist4j.engine.StandardRecord; import cn.devezhao.persist4j.metadata.MissingMetaExcetion; import cn.devezhao.persist4j.record.RecordVisitor; @@ -56,7 +57,12 @@ import java.util.*; @Slf4j public class FieldWriteback extends FieldAggregation { - public static final String WB_ONE2ONE = "one2one"; + /** + * 设:线索1、客户N(即 1 <:> N) + * 当线索作为目标,客户作为源时,更新客户时只会更新 1 个线索(one2one) + * 当客户作为目标,线索作为源时,更新线索时会更新 N 个客户 + */ + public static final String ONE2ONE_MODE = "one2one"; private static final String DATE_EXPR = "#"; private static final String CODE_PREFIX = "{{{{"; // ends with }}}} @@ -140,7 +146,7 @@ public class FieldWriteback extends FieldAggregation { sourceEntity = actionContext.getSourceEntity(); targetEntity = MetadataHelper.getEntity(targetFieldEntity[1]); - boolean isOne2One = ((JSONObject) actionContext.getActionContent()).getBooleanValue(WB_ONE2ONE); + boolean isOne2One = ((JSONObject) actionContext.getActionContent()).getBooleanValue(ONE2ONE_MODE); targetRecordIds = new HashSet<>(); @@ -149,12 +155,20 @@ public class FieldWriteback extends FieldAggregation { targetRecordIds.add(actionContext.getSourceRecord()); } else if (isOne2One) { - // 只会存在一个记录 + // 只会存在一个记录的 Record afterRecord = operatingContext.getAfterRecord(); - ID referenceId = afterRecord == null ? null : afterRecord.getID(targetFieldEntity[0]); - if (referenceId == null) return; + if (afterRecord == null) return; - targetRecordIds.add(referenceId); + ID referenceId; + if (afterRecord.hasValue(targetFieldEntity[0])) { + referenceId = afterRecord.getID(targetFieldEntity[0]); + if (NullValue.is(referenceId)) referenceId = null; + } else { + Object[] o = Application.getQueryFactory().uniqueNoFilter(afterRecord.getPrimary(), targetFieldEntity[0]); + referenceId = (ID) o[0]; + } + + if (referenceId != null) targetRecordIds.add(referenceId); } else { String sql = String.format("select %s from %s where %s = ?", diff --git a/src/main/java/com/rebuild/web/robot/trigger/FieldWritebackController.java b/src/main/java/com/rebuild/web/robot/trigger/FieldWritebackController.java index cc29e111e..a9fde4aae 100644 --- a/src/main/java/com/rebuild/web/robot/trigger/FieldWritebackController.java +++ b/src/main/java/com/rebuild/web/robot/trigger/FieldWritebackController.java @@ -61,7 +61,6 @@ public class FieldWritebackController extends BaseController { } // 我引用了谁 v2.7.1 - // 通常用于一对一,如果业务上存在多对一可能冲突(会以最后触发的记录为准) for (Field refFrom : MetadataSorter.sortFields(sourceEntity, DisplayType.REFERENCE)) { if (MetadataHelper.isCommonsField(refFrom)) { @@ -75,7 +74,7 @@ public class FieldWritebackController extends BaseController { String entityLabel = String.format("%s (%s.%s)", EasyMetaFactory.getLabel(refEntity), EasyMetaFactory.getLabel(sourceEntity), EasyMetaFactory.getLabel(refFrom)); - entities.add(new String[] { refEntity.getName(), entityLabel, refFrom.getName(), FieldWriteback.WB_ONE2ONE}); + entities.add(new String[] { refEntity.getName(), entityLabel, refFrom.getName(), FieldWriteback.ONE2ONE_MODE}); } FieldAggregationController.sortEntities(entities, sourceEntity); diff --git a/src/main/resources/i18n/lang.zh_CN.json b/src/main/resources/i18n/lang.zh_CN.json index ef31846e1..09f8bd47d 100644 --- a/src/main/resources/i18n/lang.zh_CN.json +++ b/src/main/resources/i18n/lang.zh_CN.json @@ -2209,5 +2209,6 @@ "确认解锁?":"确认解锁?", "解锁":"解锁", "列表模板":"列表模板", - "未启用":"未启用" + "未启用":"未启用", + "请至少添加 1 个更新规则":"请至少添加 1 个更新规则" } diff --git a/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js b/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js index 1069ba5e3..d4f3e9221 100644 --- a/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js +++ b/src/main/resources/web/assets/js/trigger/trigger.FIELDWRITEBACK.js @@ -307,7 +307,7 @@ class ContentFieldWriteback extends ActionContentSpec { return false } if (content.items.length === 0) { - RbHighbar.create($L('请至少添加 1 个聚合规则')) + RbHighbar.create($L('请至少添加 1 个更新规则')) return false }