priority-web-sdk: fieldUpdate для выбора поля не удался

Моя форма содержит поле с раскрывающимися значениями (значения получены из функции выбора), и когда я пытаюсь обновить поле (с помощью 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);

В первый раз это работает отлично, но когда я выбираю другое значение во второй раз, я получаю сообщение об ошибке, в котором говорится, что это значение уже существует (как будто я думаю, что пытаюсь обновить значение, но я не просто хочу получить значения других полей, которые возвращаются в результате триггера поля, когда я покидаю поле в Приоритете). У меня нет никакой цели изменять значения, я просто получаю информацию о других полях и данных из подформ.

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() без звонка getRows(), затем saveRow() а также startSubForm() чтобы получить необходимую информацию. Делайте это для каждой записи, которую вы пытаетесь получить из своих данных.

    Пояснение: при звонке getRows() Вы получаете несколько строк. Тогда вы не можете обновить key поле со значением, которое уже существует в извлеченных строках, в противном случае вы получите эту ошибку.

Другие вопросы по тегам