0

我的表单包含一个带有下拉值的字段(值来自选择函数),当我第二次尝试更新该字段(使用 fieldUpdate)时,我总是收到以下错误:“已具有相同值的记录存在于屏幕中”,为了实现正确的行为,需要执行的正确操作顺序是什么?这是我实现这一目标的尝试:

await actions.loginTest();
const form = await actions.priority.formStart(this.formName, 
this.onShowMessgeFunc, this.onUpdateFieldsFunc);
_formInstance = form;
const rows = await form.getRows(1);
console.log("parent form rows", rows);
await _formInstance.setActiveRow(1);
form.choose("CUSTNAME", '').then(options => {
let custOptions = options.SearchLine.map(x => {return {label:x.retval + " - 
" + x.string1, value: x.retval }});     
}).catch((err) => {
console.log("CHOOSE ERROR", err);
})    

当我从下拉列表中选择一个值时,这些是我的操作:

await _formInstance.fieldUpdate("CUSTNAME", data.value);
await _formInstance.saveRow(1);
const rows = await _formInstance.getRows(1);
console.log("rows", rows);

第一次它工作得很好,但是当我第二次选择一个不同的值时,我得到一个错误,说这个值已经存在(就像它认为我正在尝试更新值但我没有,我只是想获取当我将字段保留为优先级时由于字段触发而返回的其他字段的值)。我没有任何改变值的目的,只是从子表单中获取有关其他字段和数据的信息。

4

1 回答 1

1

我没有任何改变值的目的,只是从子表单中获取有关其他字段和数据的信息。

为了实现您的目的,您可以选择以下流程之一,这应该有效:

  1. 推荐getRows()在您拥有之后使用setSearchFilter(),以检索您感兴趣的行,包括其字段。然后很容易地setActiveRow()用它的索引来startSubForm()。您总是可以clearRows()用来清除当前行并检索其他行。

    例子:

    const form = await actions.priority.formStart(this.formName, 
                 this.onShowMessgeFunc, this.onUpdateFieldsFunc);
    const filter = {
      QueryValues:
      [{
        field: 'CUSTNAME',
       fromval: value,
       op: '='
     }]
    }
    await form.setSearchFilter(filter)
    const rows = await form.getRows(1);
    console.log("parent form rows", rows);
    await form.setActiveRow(1);
    await form.startSubForm(1);
    
  2. newRow()在不调用的情况下对 a 执行“更新” getRows()。然后saveRow()startSubForm()获取您需要的信息。对您尝试检索其数据的每条记录执行此操作。

    说明:调用getRows()时检索一些行。然后,您无法key使用检索到的行中已存在的值更新字段,否则您会收到该错误。

于 2018-08-27T08:23:05.133 回答