Docassemble强制代码块逻辑下ask_for_state为false仍弹出州选择问题
Docassemble强制代码块次级行政区询问异常问题
问题背景
- 开发模式:采用mandatory code block(强制代码块)方式开发Docassemble访谈流程,该模式下强制代码块会明确指定Docassemble需要依次向用户询问的问题顺序。
- 实现需求:根据用户前序选择的国家值,调用
states_list()函数判断对应国家是否存在州/省等次级行政区,动态决定是否需要向用户询问次级行政区选择问题,初始实现代码如下:
--- mandatory: True code: | country_code = country ask_for_state = bool(states_list(country_code)) if ask_for_state: state
异常表现
- 该逻辑在美国、加拿大、法国、英国等多数国家场景下运行正常,
state变量可被正常赋值。 - 异常行为:即使会话存储中
ask_for_state的值明确为false,用户完成国家选择后仍然会弹出state相关的选择问题。 - 异常样例:圣皮埃尔和密克隆无对应次级行政区数据,触发异常时页面会渲染空的下拉选择列表要求用户选择州,同时调用
subdivision_type(country)会返回None,展示效果不符合预期。 - 初始排查方向:曾怀疑Docassemble存在问题预加载队列机制,在询问
country问题阶段就已经预先确定后续需要询问state问题,导致条件判断未生效。
额外兼容问题
调用subdivision_type()获取次级行政区类型名称时存在返回格式不一致问题:传入新加坡国家代码时返回首字母小写的division,传入其他国家代码时返回的State、Province等值均为首字母大写格式。
问题根因(2022年7月16日更新)
经排查确认,异常由后续代码中意外引用
state变量导致:Docassemble在执行到引用state变量的逻辑时,会自动回溯寻找该变量的定义方式,因此触发了对应问题的弹出,和预加载队列机制无关。
内容的提问来源于stack exchange,提问作者NotAnAmbiTurner
相关产品推荐
相关产品推荐

