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

Операция - событие 'завершение операции'

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Июн 10, 2015 07:04   Операция - событие 'завершение операции' Ответить с цитатой
Полезность: Нет оценки
Добрый день.
Предложение по развитию системы(громко сказано) - если это кому-то нужно....

Операция имеет событие инициализации - в секции 'проверка' P_MESSAGE = 'DEFAULT'.
очень хорошо - допустим, там выставляются какие-то глобальные переменные для последующего использования в операции.
дальше... после отработки операции иногда нужно восстановить глобальные переменные в исходное состояние.
неплохо было бы иметь событие 'завершение операции' (например, P_MESSAGE = 'EXIT') - по закрытию формы операции ПОСЛЕ отработки тела операции.
Да, я могу и сейчас в операции вручную реализовать нечто подобное - но приходится напрягаться (+ держать в памяти 'шаблон')
- кинуть на форму кнопку CANCEL, сделать её невидимой (когда она не нужна на форме), отрабатывать событие P_MESSAGE = 'CANCEL'
- обернуть exec-часть операции в try-блок (иногда выходим из тела операции по ошибке) чтобы иметь возможность безусловно отработать в конце операции свою часть (восстановление глобальных переменных)
Предлагаю просто автоматизировать эти 'приседания'.

С точки зрения ООП (объект - 'вызов операции'):
1) P_MESSAGE = 'DEFAULT' - это конструктор объекта (вызов операции)
2) P_MESSAGE = 'EXIT' - деструктор объекта (вызов операции)
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Июн 10, 2015 07:06   Re: Операция - событие 'завершение операции' Ответить с цитатой
Полезность: Нет оценки
Damir пишет:

Предлагаю просто автоматизировать эти 'приседания'.

Да!
Предложение выдано безвоздмездно, т.е. даром!
т.е. платить за эту 'фичу' не буду!
Very Happy
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеСр Июн 10, 2015 10:04    Ответить с цитатой
Полезность: Нет оценки
а каким образом будет выполняться восстановление исходных значений в глобальных переменных, в вашей схеме? это ведь все ровно придется описывать в каком-то месте.

чем плох вариант безусловного выхода - return null?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Июн 10, 2015 11:25    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
а каким образом будет выполняться восстановление исходных значений в глобальных переменных, в вашей схеме?


А самое интересное - зачем?
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Июн 10, 2015 20:02    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
а каким образом будет выполняться восстановление исходных значений в глобальных переменных, в вашей схеме? это ведь все ровно придется описывать в каком-то месте.

что восстанавливать - знает только программист конкретной системы.
восстанавливать - как раз в обработчике (валидаторе) P_MESSAGE = 'EXIT'
Сейчас нет такого события (P_MESSAGE = 'EXIT') - нет возможности написать свой код для восстановления глобальных переменных.

Random пишет:
А самое интересное - зачем?

ничего не храните в глобальных переменных ?

Код:
К примеру, есть на нашей схеме ТБП 'Структурные единицы' [BRANCH].
Это древовидная структура... И вот ссылка на узел этого дерева хранится в глобальной переменной, пользователь может сменить  'текущий' узел...
От текущего узла зависит фильтрация в представлениях.
в некоторых операциях есть необходимость сменить этот узел (на корневой, например) и по выходу из операции вернуть значение текущего узла.


PS: вносить изменения надо в Навигатор - чтоб еще событие-валидацию генерил. Сами изменения, на мой взгляд, 'двухпальцевые'.

PPS: труднее всего объяснить очевидные вещи - 'сложные' просто принимают 'на веру'.
В данном случае приходится объяснять необходимость деструктора у объекта.
Например, у объекта 'окно' в ОС WINOWS есть деструктор - событие WM_CLOSE - используется для освобождения ресурсов (не обязательно памяти - это могут быть какие-то семафоры, хэндлы и т.д.) выделенных в конструкторе.
Gobur
Профи


Вступление в Клуб: 06.11.2012
СообщениеЧт Июн 11, 2015 08:43    Ответить с цитатой
Полезность: Нет оценки
Damir пишет:

ничего не храните в глобальных переменных ?


Например что храните в глобальной переменной, которая меняется после действия каждого пользователя? Не безопасней в контекст сессии писать?
prankster
Профи


Вступление в Клуб: 22.08.2014
СообщениеЧт Июн 11, 2015 09:44    Ответить с цитатой
Полезность: Нет оценки
Gobur пишет:
Damir пишет:

ничего не храните в глобальных переменных ?


Например что храните в глобальной переменной, которая меняется после действия каждого пользователя? Не безопасней в контекст сессии писать?


Глобальные переменные они, все же, не настолько глобальные Smile В рамках сессии живут.
Gobur
Профи


Вступление в Клуб: 06.11.2012
СообщениеЧт Июн 11, 2015 10:42    Ответить с цитатой
Полезность: Нет оценки
prankster пишет:
Gobur пишет:
Damir пишет:

ничего не храните в глобальных переменных ?


Например что храните в глобальной переменной, которая меняется после действия каждого пользователя? Не безопасней в контекст сессии писать?


Глобальные переменные они, все же, не настолько глобальные Smile В рамках сессии живут.

Это понятно - не понятно другое зачем каждому пользователю менять переменную для всех? Что будет если несколько операции призавершении будут пытаться это делать? Просто не совсем ясна функциональность , где такой механизм удобен.
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеЧт Июн 11, 2015 20:44    Ответить с цитатой
Полезность: Нет оценки
Gobur пишет:
prankster пишет:
Gobur пишет:
Damir пишет:

ничего не храните в глобальных переменных ?


Например что храните в глобальной переменной, которая меняется после действия каждого пользователя? Не безопасней в контекст сессии писать?


Глобальные переменные они, все же, не настолько глобальные Smile В рамках сессии живут.

Это понятно - не понятно другое зачем каждому пользователю менять переменную для всех? Что будет если несколько операции призавершении будут пытаться это делать? Просто не совсем ясна функциональность , где такой механизм удобен.

И все-таки...
prankster пишет:

Глобальные переменные они, все же, не настолько глобальные Smile В рамках сессии живут.

Вы можете считать (если так понятнее), что 'глобальные переменные' находятся в контексте сессии.
И вот этот контекст сессии Пользователь может менять (через операции). Но в некоторых операциях требуется внутри операции сменить контекст, отработать, по выходу из операции восстановить контекст .
необходимость возникает из-за использования глобальных переменных (контекстных переменных) внутри представлений (фильтрация возвращаемой выборки).
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПт Июн 12, 2015 14:20    Ответить с цитатой
Полезность: Нет оценки
Damir пишет:

ничего не храните в глобальных переменных ?


На самом деле деструкторы - безусловно, вещь удобная.
Но если их нет, можно привыкнуть строить свой код так, чтобы они были не нужны.
Это всего лишь вопрос привычки и немного философии Smile
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСб Июн 13, 2015 18:54    Ответить с цитатой
Полезность: Нет оценки
Random пишет:

Но если их нет, можно привыкнуть строить свой код так, чтобы они были не нужны.

кэп....
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Июн 15, 2015 11:43    Ответить с цитатой
Полезность: Нет оценки
Damir пишет:
Random пишет:

Но если их нет, можно привыкнуть строить свой код так, чтобы они были не нужны.

кэп....


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

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