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 ответ
У меня нет никакой цели изменять значения, я просто получаю информацию о других полях и данных из подформ.
Для достижения вашей цели вы можете выбрать один из следующих потоков, который должен работать:
Рекомендуется: использовать
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);
Выполните "обновление" на
newRow()
без звонкаgetRows()
, затемsaveRow()
а такжеstartSubForm()
чтобы получить необходимую информацию. Делайте это для каждой записи, которую вы пытаетесь получить из своих данных.Пояснение: при звонке
getRows()
Вы получаете несколько строк. Тогда вы не можете обновитьkey
поле со значением, которое уже существует в извлеченных строках, в противном случае вы получите эту ошибку.