Не отрабатывает секция validate из расширения предка
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mx1234567 Участник со стажем
Вступление в Клуб: 18.11.2010
|
Пн Июн 17, 2024 11:03  Не отрабатывает секция validate из расширения предка |
|
Полезность: Нет оценки
|
Имеется базовый ТБП предок: PAPER,
в котором сделано расширение BNK_EDIT#AUTO_E для операции:
EDIT#AUTO.
У PAPER имеется наследник: OBLIGATION.
При вызове операции OBLIGATION->EDIT#AUTO с открытием формы в Навигаторе,
не отрабатывает PL+ секция validate, заданная в расширении с именем BNK_EDIT#AUTO_E,
приведенном ниже, для операции EDIT#AUTO его предка PAPER.
При этом секция execute, вызываемая, при нажатии Ok, из предка PAPER, отрабатывает.
Можно ли как-то настроить, чтобы отрабатывала PL+ секция validate из расширения предка PAPER->BNK_EDIT#AUTO_E, при окрытии форм его потомков в Навигаторе?
Не хочется делать расширение для каждого потомка PAPER с одной и той же секцией validate, чтобы эта секция отрабатывала для потомка.
Код: |
class PAPER;
@import_plsql(true)
@name('BNK. Изменить (расширение)')
@tag('EXTENSION')
@target(united:=true)
method BNK_EDIT#AUTO_E instead of EDIT#AUTO is
pragma include (::[DEBUG_TRIGGER].[MACRO_LIB]);
BNK_EDIT#AUTO_E is
validate is
begin
&debug('Эта секция validate не вызывается в потомках [' || &METHOD$SNAME || '] ' || &METHOD$NAME, 0)
&BASE$SETVARS;
&BASE$VALIDATE;
&BASE$GETVARS;
end;
execute is
begin
&debug('Эта секция execute вызывается в потомках [' || &METHOD$SNAME || '] ' || &METHOD$NAME, 0)
&BASE$SETVARS;
&BASE$EXECUTE;
end;
end;
end; |
|
|
|
pabrz Участник со стажем
Вступление в Клуб: 27.09.2022
|
Вт Июн 18, 2024 03:43   |
|
Полезность: Нет оценки
|
Есть очень большое "НО" в работе с расширениями, когда дело касается операций, использующих одну и ту же экранную форму.
Разберем типичный кейс:
У вас есть условная операция Добавить.
У нее есть Экранная форма.
К ней сделано расширение.
У расширения есть СВОЯ экранная форма.
Есть операция Изменить.
Она использует экранную форму операции Добавить.
К операции Изменить сделано расширение.
У расширения тоже есть экранная форма.
Таким образом у нас есть ТРИ экранные формы, с тремя блоками валидации. И они, что совсем не удивительно, не обмениваются данными друг с другом адекватно.
Т.е. этот блок надо делать отдельно. И самому.
Но в вашем случае, все еще проще: это не наследованная операция.
EDIT#AUTO в OBLIGATION не наследник PAPER. Это самостоятельная операция класса OBLIGATION. Так что такой вызов вообще невозможен. Вассал моего вассала не мой вассал. Эти экранные формы (и блоки валидации) вообще не общаются. А то что у вас execute из операции выше уровнем зацепило - это часть интерфейсника. В общем, рекомендую внимательно посмотреть по F12, что реально в коде вот тут происходит:
Код: | package body Z$OBLIGATION_EDIT#AUTO is |
И вам будет ясно, что в принципе вызывается, а что нет. |
|
|
mx1234567 Участник со стажем
Вступление в Клуб: 18.11.2010
|
Пн Июл 08, 2024 09:22   |
|
Полезность: Нет оценки
|
Ответ есть в документации, в файле: Admin.pdf
Примечание
В случае отмеченной опции компиляции «Объединенный пакет» перенаправление на
операцию-расширение будет происходить всегда.
В случае существования иерархии между типами, если у «дочерней» операции есть
расширение и она перекрывает «родительскую» операцию, то вызов валидатора
«родительской» операции над «дочерним» экземпляром будет перенаправлен на вызов
валидатора «дочерней» операции-расширения. |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|