Powerbuilder: стоит ли вызывать метод accepttext? - PullRequest
1 голос
/ 27 октября 2010

Вопрос говорит сам за себя. Я хочу знать, будет ли хорошей идеей вручную вызывать accepttext() или pfc_accepttext, чтобы заставить powerbuilder принимать значения в полях окна данных.

Причина этого вопроса в том, что у меня во всплывающем окне есть окно данных, содержащее некоторые поля. Когда пользователь вводит значения в эти поля и нажимает кнопку OK, окно данных сохраняется, а всплывающее окно закрывается. При нажатии кнопки «ОК» последнее поле неправильно принимает введенное значение. Вот почему я думал о ручном запуске события accepttext() или pfc_accepttext.

Любая помощь будет оценена !!!

Спасибо.

Ответы [ 2 ]

4 голосов
/ 27 октября 2010

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

Для более сложных окон / объектов вы можете создать для этого простую функцию, например wf_accepttext(), которая содержит все вызовы dw.accepttext() для каждого окна данных, которое необходимо обновить. Затем вы можете просто вызвать эту функцию, прежде чем пытаться обновить свои окна данных.

(Правка) Дополнительные мысли:

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

/* wf_accepttext() */
if dw_foo.accepttext() = -1 then return false
if dw_bar.accepttext() = -1 then return false
// etc..
return true

Таким образом, в верхней части функции сохранения, назовем ее wf_save(), вы можете сделать это:

/* wf_save() */
if not wf_accepttext() then return false
/* any other save validation and the dw.update() goes below here */

И в случае, если что-то не подтверждается, wf_save() будет освобожден, и ваше itemchanged событие должно иметь код для обработки остальных.

2 голосов
/ 29 октября 2010

Итак, не видя ваш код, не совсем понятно, почему pfc_AcceptText не запускается.Однако я могу сказать, что pfc_AcceptText - это событие, определенное службой логических единиц работы PowerBuilder Foundation Class (PFC).Хотя в моей статье можно найти больше, чем вы когда-либо хотели или должны знать о службе LFC в PFC, вы поняли, что забыли задокументировать предполагаемую точку входа в эту службу.Намерение (как вы должны видеть в (pfcmain.pbl) pfc_w_master [closequery]) состоит в том, что вы запускаете событие pfc_Save окна, которое запустит все события LUW (например, pfc_Validation, pfc_PreUpdate) в соответствующей последовательности.

Удачи,

Терри.

...