跳到主要内容

高级逻辑限制和排错

高级逻辑不生效时,先处理编辑器红色错误,再检查标签、条件和动作,最后检查多条规则是否控制了同一个目标。

先检查这 8 项

现象正确做法
DSL 关键字写成大写使用 ifthenshow
范围使用简写使用 Q1~Q5,不要写 Q1~5
文本没有引号使用 "优秀"
判断相等使用单等号使用 ==
括号或引号没有闭合补全 AND(Q1A1,Q2A1)
标签不存在点击右侧预览中的当前标签
只看实时预览,没有保存点击编辑器下方 保存
多条规则控制同一目标暂时注释其他规则,逐条验证

当前实现限制

条件后不能直接接赋值、校验或标题替换

不要写:

if Q1A1 then assignment Q2 with 100
if Q1A1 then validate Q2 with "错误"
if Q1A1 then replace Q2 with "新标题"

把条件放进 with 后面的 IF(...)

assignment Q2 with IF(Q1A1,100,"")
validate Q2 with IF(Q1A1,"错误","")
replace Q2 with IF(Q1A1,"新标题","默认标题")

branch 只接受界面标签

if Q1A1 then branch from Q1 to Q5
if Q1A2 then branch from Q1 to END

fromto 使用 Q1QS1Q2END,不要填写 #{...}

范围两端必须完整

# 正确
if Q1A1 then show Q2~Q5
if Q1A1 then show Q2A1~Q2A4

# 错误
if Q1A1 then show Q2~5
if Q1A1 then show Q2A1~4

不要使用未正式支持的动作

以下关键词可能出现在历史提示或示例中,但当前不要用于正式问卷:

mutex Q1A1 deselect Q1A6
shuffle Q1A1~Q1A4
random show 1 from Q1~Q3

hide 不用于选项和矩阵行

当前版本的 hide 应只用于题目或题组。控制选项时使用 show 的相反条件,或者改用基础规则的 显示选项

动态必填会在条件不成立时取消必填

if Q1A1 then required Q2

条件不成立时,Q2 会被设置为非必填。不要用这条规则控制原本始终必填的问题。

推荐排错顺序

1. 处理红色错误行

逐行检查关键字大小写、标签、括号、引号和动作格式。点击 语法说明逻辑示例 对照正确结构。

2. 只保留一条最小规则

在其他规则前加 # 暂时注释,只验证:

if Q1A1 then show Q2

3. 先验证条件

ANDOR 和复杂比较拆开,确认每个题目标签都能返回预期值,再重新组合。

4. 再验证动作

先用 show Q2 确认条件可以触发,再换成 branchassignmentvalidatereplace

5. 检查规则叠加

基础规则和高级逻辑会同时运行。搜索所有以同一道题或选项为目标的规则,避免一条要求显示、另一条又要求隐藏。

6. 完整预览并保存

测试条件成立、不成立和多条规则同时成立的状态。确认无红色错误后点击 保存,再重新进入页面复查。

仍未解决时需要提供什么

  • 发生问题的问卷版本或项目 ID
  • 最小可复现的题目结构和题目顺序
  • 高级逻辑文本(隐藏真实业务和个人信息)
  • 触发问题的填写值
  • 预期结果与实际结果
  • 编辑器错误提示或预览截图