如何用DXL将VVT Status属性的最后修改日期填充到VVT Status Update属性
修正方案:提取VVT Status属性的最新修改日期写入目标属性
原代码存在的问题
- 变量名拼写错误:
attributName和attributeName不一致,导致属性匹配逻辑可能失效 - 内层循环错误遍历了对象的所有历史记录,而非仅“VVT Status”的历史,最终写入了所有更新记录
- 外层遍历对象所有历史的逻辑冗余,会重复处理同一对象
修正后的代码
Module m = current // 获取历史记录的日期(可根据需求调整格式) string getLatestHistoryDate(History h) { return h.date } string targetAttrName = "VVT Status Update" string sourceAttrName = "VVT Status" Object o for o in entire m do { // 跳过已删除的对象 if isDeleted(o) then continue // 检查是否有权限修改目标属性 if (!canModify o.targetAttrName) { warn "无法修改对象 " (identifier o) " 的目标属性\n" continue } // 收集当前对象中属于VVT Status的所有历史记录 History targetHistory Date latestDate = null for targetHistory in o do { if targetHistory.attrName == sourceAttrName { // 比较日期,保留最新的那条 if (latestDate == null || targetHistory.date > latestDate) { latestDate = targetHistory.date } } } // 如果找到有效历史记录,写入目标属性 if (latestDate != null) { o.targetAttrName = latestDate } else { // 可选:如果没有历史记录,清空目标属性或给出提示 o.targetAttrName = "" // warn "对象 " (identifier o) " 没有VVT Status属性的历史记录\n" } } save m
关键逻辑说明
- 遍历模块内每个对象,先过滤已删除对象和无修改权限的情况
- 针对每个对象,仅筛选出属于“VVT Status”的历史记录
- 通过日期比较,找出其中最新的修改日期
- 将最新日期写入“VVT Status Update”属性,若没有历史记录则清空目标属性(可根据需求调整)
内容的提问来源于stack exchange,提问作者TomF
相关产品推荐
相关产品推荐

