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

如何用DXL实现DOORS布尔属性赋值:另一属性非空时设为False

现有问题梳理

1. 代码逻辑与语法错误

  • 逻辑完全写反:需求为「属性A不为空时设置B为False」,现有代码判断条件为if((o."A") == null),仅在A为空时才执行赋值操作
  • 布尔属性赋值格式错误:DOORS中布尔类型属性直接赋值为小写无引号的false,你写的"False"是字符串类型,和属性B的布尔类型不匹配
  • 冗余遍历逻辑:如果将脚本写在属性的DXL计算规则中,不需要手动遍历全模块对象,DXL属性默认针对单个当前对象obj执行,不需要自行声明Object o和写for循环
  • 空值判断不严谨:字符串类型属性的空值可能是null也可能是空字符串,建议用obj."A" "" == ""统一判断空值
  • DXL属性规则写法错误:DXL计算属性需要将计算结果赋值给内置变量attr才会生效,你现有脚本没有对attr赋值,所以刷新后不会有任何显示变化

2. 操作流程错误

你将属性B设置为DXL计算属性的操作本身不符合需求:

  • DXL计算属性是只读的,系统会根据脚本自动计算显示值,不支持手动编辑,也不会将计算结果实际写入属性存储,和你要的「自动修改属性B的值」的需求完全冲突
  • 保存后看不到脚本通常有两个原因:一是你没有当前模块的属性定义修改权限,修改不会被保存;二是关闭窗口时没有点击确认/应用,默认放弃了修改
正确实现方案

根据你的使用场景二选一即可:

场景1:仅需要批量更新一次现有数据,属性B后续仍可手动编辑

直接将修正后的代码作为独立DXL脚本运行,不要写在属性的DXL规则中:

Module m = current Module
// 校验模块编辑权限
if(!isEditable(m)) {
    error("请先进入模块编辑模式")
    halt
}
Object o
for o in m do {
    // 判断A不为空时赋值
    if(o."A" "" != "") {
        o."B" = false
    }
}

操作步骤:

  • 进入模块编辑模式
  • 点击「工具」→「编辑DXL」→ 粘贴上述代码 → 点击「运行」即可完成全模块批量更新

场景2:每次修改属性A后自动更新属性B的值,无需手动执行脚本

需要给模块设置触发器,而非DXL计算属性:

// 创建模块级后置触发器,修改属性A时自动触发
Trigger t = createTrigger(module "", POST_MODIFY, ATTRIBUTE, "A", 10, 
    void(Object o) {
        if(o."A" "" != "") {
            o."B" = false
        }
    }
)

操作步骤:

  • 进入模块编辑模式
  • 点击「工具」→「编辑DXL」→ 粘贴上述触发器代码 → 点击运行,触发器会自动绑定到当前模块,之后每次修改任意对象的A属性都会自动更新B的值
  • 触发器会持久化保存在模块中,不手动删除就会一直生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:04