You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Ignition Perspective中Asset_Insert数组更新逻辑异常问题

问题描述

在Ignition Perspective项目中修改表格单元格值时,Asset_Insert数组本该同步更新现有条目,但每次操作都会新增条目而非更新(该方法在提交/修改值回车时触发)。当前代码如下:

def runAction(self, event):
    col = event.column
    row = event.row
    BASE_ASSET_NAME = self.getSibling("Txt_Selected_BT").props.text
    plantName = self.props.data[0].Plant_Name.value
    assetInsert = self.custom.Asset_Insert
     
    if 'value' in self.props.data[row][col]:
        self.props.data[row][col]['value'] = event.value
  
    
    # Flag to check if we found the row to update
    updated = False

    # Iterate and update existing entry
    for i, item in enumerate(assetInsert):
        if item["ASSET_NAME"] == asset_data["ASSET_NAME"]:
            # Update existing entry
            assetInsert[i] = asset_data
            updated = True
            break
    
    # Append the asset_data if not updated
    if not updated:
        assetInsert.append(asset_data)

目前遇到的情况:仅表格只有1行时更新逻辑有效;多行时会先创建对应行数的对象,之后仅持续更新最后一个对象。

解决建议

1. 补全asset_data定义(核心问题)

代码中直接使用asset_data但未定义,这是匹配逻辑失效的关键。需要从当前修改的表格行提取数据,结合已有变量构建完整的asset_data对象:

# 在修改表格数据后,构建当前行对应的asset_data
current_row = self.props.data[row]
# 根据表格实际字段结构调整,确保ASSET_NAME是当前行的唯一标识
asset_data = {
    "ASSET_NAME": current_row["ASSET_NAME"]["value"],
    "Plant_Name": plantName,
    # 同步当前修改的列值
    current_row[col]["key"]: event.value
    # 补充其他需要同步的字段
}

2. 修正匹配与更新逻辑

确保遍历assetInsert时,用当前行的唯一标识(asset_data["ASSET_NAME"])精准匹配,更新时替换为完整的最新数据:

updated = False
for i, item in enumerate(assetInsert):
    if item["ASSET_NAME"] == asset_data["ASSET_NAME"]:
        assetInsert[i] = asset_data
        updated = True
        break

3. 触发Ignition数组变更识别(可选)

在Ignition Perspective中,直接修改数组元素可能无法触发UI或绑定更新,修改后重新赋值数组即可:

# 修改或新增完成后,重新赋值给custom属性触发变更
self.custom.Asset_Insert = assetInsert

4. 排查多行唯一标识问题

如果多行时仅最后一个对象被更新,大概率是asset_data["ASSET_NAME"]未对应每行唯一值(比如所有行复用了BASE_ASSET_NAME)。若单个ASSET_NAME不唯一,可改用复合条件匹配:

# 用ASSET_NAME+Plant_Name作为复合匹配条件
if item["ASSET_NAME"] == asset_data["ASSET_NAME"] and item["Plant_Name"] == asset_data["Plant_Name"]:
    assetInsert[i] = asset_data
    updated = True
    break

内容的提问来源于stack exchange,提问作者Uniquedesign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:20:13