Ошибка - скрипт занят и вылетает всякий раз, когда я пытаюсь сослаться на uidoc из кнопки, созданной в DXL.

Я создал форму, в которой пользователь вводит значения, а затем нажимает «Добавить». Затем в форме создается таблица в поле Rich Text.

Это делается путем создания временного документа с элементом richtext на нем, экспортирования его через DXL, вставки таблицы в DXL в элемент richtext и импорта обратно. Затем я использую uidoc.ImportItem, чтобы скопировать таблицу из временного документа в свой uidoc.

Это прекрасно работает, и я довольно доволен собой. Кроме того, пользователь может «Добавить» дополнительные строки. Это делается путем удаления таблицы (с использованием Call uidoc.FieldSetText("table", "")) и воссоздания таблицы с новыми значениями, как указано выше.

Однако каждая строка документа имеет две кнопки: «Изменить» и «Удалить», так что пользователь может либо редактировать строку, либо удалить ее после создания таблицы.

Пока я сосредотачиваюсь на кодировании «Удалить», и он работает. Однако, когда код достигает любого действия uidoc, например Call uidoc.FieldSetText("table", "") или Call uidoc.EditGotoField("Table") Я получаю ужасное сообщение «Ошибка - сценарий занят» в строке состояния, а при закрытии документа Notes вылетает.

Я предполагаю, что это вызвано тем, что кнопка думает, что находится в другом документе, поэтому, когда она перемещает фокус на поле в том, что она считает другим uidocument, это вызывает проблему.

Я пробовал несколько разных подходов, например. имея кнопку установить поля в NotesDocument, а затем обновить, используя скрытое значение для запуска updateTable Sub. Я также экспериментировал с запуском агента, но поскольку uidoc не был сохранен, я не могу получить session.documentcontext и, конечно, не могу получить доступ к пользовательскому интерфейсу в агенте.

Одна вещь, которую я еще не пробовал, - это заставить кнопку Удалить запускать команду формулы, которая вызовет обновление uidoc и отключит updateTable Sub из события PostRecalc.

Если у кого-то есть другие предложения, я был бы очень благодарен, поскольку это единственная проблема, которая не позволяет мне улучшить производительность одной из наших устаревших форм примерно на 1000%.


person Phil M Jones    schedule 14.05.2015    source источник


Ответы (1)


Хорошо, поэтому я попытался использовать язык формул вместо Lotusscript в моей созданной DXL кнопке в таблице форматированного текста в поле форматированного текста в несохраненном uidoc. И это сработало :-)

@Setfield("deleteRow"; 1);
@Command([ViewRefreshFields])

Очевидно, что LotusScript, который создает документ DXL, подставляет соответствующий номер строки в поле @Setfield каждой кнопки. Кроме того, теперь у меня есть LotusScript в событии QueryCalc, которое проверяет значение doc.deleteRow(0) и вызывает подпрограмму updateTable, если оно больше 0.

Этот процесс стал еще одним свидетельством того, что объяснение своих проблем кому-то другому часто может вызвать мысль, ведущую к решению.

person Phil M Jones    schedule 14.05.2015