CftClub.ru
Клуб специалистов ЦФТ-Банк

Не отрабатывает секция validate из расширения предка

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Ответить с цитатой
Полезность: Нет оценки
Есть очень большое "НО" в работе с расширениями, когда дело касается операций, использующих одну и ту же экранную форму.

Разберем типичный кейс:

У вас есть условная операция Добавить.
У нее есть Экранная форма.
К ней сделано расширение.
У расширения есть СВОЯ экранная форма.

Есть операция Изменить.
Она использует экранную форму операции Добавить.
К операции Изменить сделано расширение.
У расширения тоже есть экранная форма.

Таким образом у нас есть ТРИ экранные формы, с тремя блоками валидации. И они, что совсем не удивительно, не обмениваются данными друг с другом адекватно.
Т.е. этот блок надо делать отдельно. И самому.

Но в вашем случае, все еще проще: это не наследованная операция. Wink
EDIT#AUTO в OBLIGATION не наследник PAPER. Это самостоятельная операция класса OBLIGATION. Так что такой вызов вообще невозможен. Вассал моего вассала не мой вассал. Эти экранные формы (и блоки валидации) вообще не общаются. А то что у вас execute из операции выше уровнем зацепило - это часть интерфейсника. В общем, рекомендую внимательно посмотреть по F12, что реально в коде вот тут происходит:
Код:
package body Z$OBLIGATION_EDIT#AUTO is


И вам будет ясно, что в принципе вызывается, а что нет.
mx1234567
Участник со стажем


Вступление в Клуб: 18.11.2010
СообщениеПн Июл 08, 2024 09:22    Ответить с цитатой
Полезность: Нет оценки
Ответ есть в документации, в файле: Admin.pdf

Примечание
В случае отмеченной опции компиляции «Объединенный пакет» перенаправление на
операцию-расширение будет происходить всегда.

В случае существования иерархии между типами, если у «дочерней» операции есть
расширение и она перекрывает «родительскую» операцию, то вызов валидатора
«родительской» операции над «дочерним» экземпляром будет перенаправлен на вызов
валидатора «дочерней» операции-расширения.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах