Powerbuilder 12.5 — Функции в DataWindows

Я заметил изменение в поведении между PB12 и PB12.5 (оба пропатчены). У меня довольно мало окон данных с глобальными функциями. В предыдущих версиях PB эти функции запускались только тогда, когда окно данных получало фокус (событие getfocus), что идеально подходило для приложения.

Теперь кажется, что функции запускаются все время (кажется, это событие mousemove, но я не уверен).

Кто-нибудь еще замечал то же самое - и есть ли какое-то решение? Спасибо


person Peter    schedule 03.12.2012    source источник
comment
Я помню, что с PB 11.5 мне приходилось делать что-то вроде скрытия/отображения DataWindow, чтобы заставить его переоценить. Я не удивлюсь, если больше вещей заставит его переоценить. Где выражения, вызывающие глобальные функции? Находятся ли они в вычисляемых полях или свойствах объекта?   -  person Hugh Brackett    schedule 03.12.2012
comment
Глобальные функции в окнах данных, как правило, являются плохой идеей. Обычно их можно смоделировать, добавив дополнительные столбцы в набор результатов и написав выражения для этих скрытых столбцов. Что делает ваша глобальная функция?   -  person NoazDad    schedule 04.12.2012
comment
Глобальные функции находятся в вычисляемых полях. Как правило, это довольно простые команды sql (например, поиск описания чего-либо или перевод на другой язык (в приложении есть таблицы поиска для переводов)).   -  person Peter    schedule 04.12.2012


Ответы (1)


На самом деле, я заметил как раз обратное: они всегда срабатывали чаще, чем просто GetFocus. Учитывая, что выражения могут включать такие значения, как FirstOnPage и LastOnPage, они должны это делать.

Powersoft/Sybase/SAP всегда советовали использовать глобальные функции в выражениях с осторожностью, поскольку они срабатывают очень часто. (Я точно помню, что слышал этот совет на одной из первых конференций PowerBuilder в Сан-Диего/Коронадо, где совет был помещен рядом с датой выпуска PB3.) Если PB12 срабатывал только на GetFocus, это, вероятно, была очень специфичная для версии ошибка, так как это сломало бы многие приложения, поэтому это было бы исправлено очень быстро.

Удачи,

Терри.

person Terry    schedule 03.12.2012
comment
Спасибо за ответы. Я использую их экономно, я никогда не использую их в отчетах. Я использую их только в ситуации, когда пользователь изменяет одну строку в окне данных. В случае, если я заметил проблему, существует большой dw для ввода данных. Пользователь может распечатать форму на основе этого dw. Появится другое окно для управления параметрами печати. Когда пользователь возвращается в dw, срабатывает функция dw для возврата даты и имени пользователя, для которого форма была напечатана в последний раз. Для получения этой информации необходимо выполнить запрос к БД, раньше он срабатывал один раз, а теперь срабатывает постоянно, вызывая много ненужного трафика БД. - person Peter; 04.12.2012
comment
Должен ли я полностью отказаться от глобальных функций в dw и вместо этого кодировать их в событиях активации или getfocus? - person Peter; 04.12.2012
comment
Активация может происходить слишком часто, в том числе, например, когда другое приложение перехватывает ваше внимание (я считаю, что уведомления по электронной почте и другие фоновые процессы печально известны этим). Из описания, почему бы просто не выполнить Modify(), когда диалоговое окно печати закрыто? Делайте это правильно, и вы даже сможете сузить его до времени, которое пользователь фактически печатает, исключая время, которое он отменяет вне диалогового окна. - person Terry; 04.12.2012