Eclipse Scout Neon对值集验证检测循环

时间:2016-06-03 12:08:45

标签: import hierarchy form-data setvalue eclipse-scout

我想在当前字段发生变化时验证与其他字段的字段依赖关系。

基本的想法是,如果我有字段A和字段B,C,D,E,...并且这些字段上有一些复杂的依赖关系图,我希望它能解决这个问题:

  • 当我设置值A导出表单数据(表单的当前状态)
  • 表格数据发送到侦察服务器
  • 关于侦察服务器依赖关系图的计算和解决(我们按顺序获得列表)
  • 调用“修复”表单数据的有序列表中的setters个字段
  • 最后导入表单数据。

我的问题是如果我在

中触发此事件
 @Override
protected void execChangedValue() {
    // trigger export
    // trigger server validation
    // trigger import
}

我得到了

2016-06-03 13:31:28,468 WARN  scout-model-thread-22 o.e.s.rt.client.ui.form.fields.AbstractValueField - Loop detection in ...$FieldA with value 101191 [m4042 @   ]
java.lang.Exception: null

如何解决这个问题?

我甚至有一个问题,如果我收到错误,我想中止导入并设置旧值。

 @Override
protected void execChangedValue() {
    // trigger export
    // trigger server validation
    if (error) {
        setValueWithoutTrigger(oldValue)
    } else {
        // trigger import
    }
}

什么是oldValue无关紧要,它可能为空。 (因此错误时重置值)。 方法setValueWithoutTriggersetValue()相同,但在设定值之前,它会调用this.setValueChangeTriggerEnabled(false);

我知道它可以以某种方式完成,因为我在BSI代码中看到了类似的功能。

1 个答案:

答案 0 :(得分:0)

无法在同一字段的execChangedValue方法中设置字段的值。框架在这里检测到一个循环。

您可以做的是使用方法execValidateValue,如下所示

@Override
protected String execValidateValue(String rawValue) throws ProcessingException {
    MyFormData formData = new MyFormData();
    exportFormData(formData);
    formData = sendFormDataToServerAndDoValidation();
    importBCDE(formData);
    return formData.getTest().getValue();
  }

方法importBCDE将设置字段B,C,D和E,但不设置字段A.