Можно ли узнать откуда вызвана операция через PLPCALL ?
На страницу Пред. 1, 2
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пт Окт 16, 2015 05:59  Re: Можно ли узнать откуда вызвана операция через PLPCALL ? |
|
Полезность: Нет оценки
|
Может что нибудь напишешь про первоначальную постановку задачи. ...
Если разовая необходимость. ...чем контекст юзера плох?
Ну примерно так и делаем, но необходимость возникает постоянно.
Контекст как и любая переменная плох тем что его нужно потом сбрасывать и отследить все места где это делать бывает проблематично,
причём если вызов из проверки , то его нужно сбрасывать на ok, cancel,exception...
иначе при вызове из другой операции где он не взводиться операция отработает как будто вызвана с первоначальной.
....и еще....то что nav.current_form_method_id через стэк работает, как определил?
зашёл в пакет nav через sql навигатор и посмотрел. |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Пт Окт 16, 2015 14:10  Re: Можно ли узнать откуда вызвана операция через PLPCALL ? |
|
Полезность: Нет оценки
|
Матвеев Евгений пишет: |
....и еще....то что nav.current_form_method_id через стэк работает, как определил?
В АСД не нашел реализации функции |
Возьмите уже vtar-а к себе, что-ли.
PS: АСД всего лишь программа (прости господи) - одна из многих.
Есть еще: toad, pl/sql Developer, sqlplus (для совсем продвинутых). |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Пт Окт 16, 2015 14:15   |
|
Полезность: Нет оценки
|
Random пишет: | Alkov пишет: | Random пишет: | Цитата: | Можно ли узнать откуда вызвана операция через PLPCALL ? |
nav.current_form_method_id, если я не ошибаюсь. Проверять лень  |
там тоже через стэк вызовов |
ясно  |
Вот такая вот платформистая платформа, прости господи.
Вопрос даже не в том, зачем этот стек нужен автору ветки. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Окт 16, 2015 14:18  Re: Можно ли узнать откуда вызвана операция через PLPCALL ? |
|
Полезность: Нет оценки
|
Damir пишет: |
Возьмите уже vtar-а к себе, что-ли.
|
ну а чо, отдамся в хорошие руки |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Окт 16, 2015 17:10   |
|
Полезность: Нет оценки
|
У меня предложение пойти от обратного.
Скажите, Уважаемый, для чего это необходимо, и будем отталкиваться от этого. А то может у вас вызвавшая операция спокойно ждет реакции в это время, сделав вызов PLPCALL через клиент-скрипт и в зависимости от этого делает какие-то действия. Если это так, тогда я и многие коллеги, читающие ветку, подскажут как это сделать. А пока понять ради того чтобы понять, задача практически не разрешимая. _________________ всегда есть как минимум 2 выхода |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пн Окт 19, 2015 03:45   |
|
Полезность: Нет оценки
|
Alexsey пишет: | У меня предложение пойти от обратного.
Скажите, Уважаемый, для чего это необходимо, и будем отталкиваться от этого. А то может у вас вызвавшая операция спокойно ждет реакции в это время, сделав вызов PLPCALL через клиент-скрипт и в зависимости от этого делает какие-то действия. Если это так, тогда я и многие коллеги, читающие ветку, подскажут как это сделать. А пока понять ради того чтобы понять, задача практически не разрешимая. |
Вызываемая операция должна сделать те или иные действия в зависимости от вызывающей операции.
Примеров можно много набрать:
Например заполнить тот или иной вычпар для бо.
Соответственно бо отработает по тому или иному шаблону.
Или производить или не производить ту или иную проверку...
Поэтому хотелось бы иметь надёжный механизм определения операции ,типа как для стэка вызовов... |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пн Окт 19, 2015 06:25   |
|
Полезность: Нет оценки
|
Alkov пишет: | Вызываемая операция должна сделать те или иные действия в зависимости от вызывающей операции.
Примеров можно много набрать:
Например заполнить тот или иной вычпар для бо.
Соответственно бо отработает по тому или иному шаблону.
Или производить или не производить ту или иную проверку...
Поэтому хотелось бы иметь надёжный механизм определения операции ,типа как для стэка вызовов... |
Скажите, а почему неприемлема организация ветвления поведения через параметр операции? |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Пн Окт 19, 2015 11:21   |
|
Полезность: Нет оценки
|
Random пишет: | Скажите, а почему неприемлема организация ветвления поведения через параметр операции? |
для меня приемлема - несколько раз так делал.
но заведение лишнего параметра + заполнение вызова наводит на мысль о кустарщине.
какие-то операции могут быть недоступны для модификачии (передать параметр). |
|
 |
Amper Профи
Вступление в Клуб: 29.10.2010
|
Пн Окт 19, 2015 12:03   |
|
Полезность: Нет оценки
|
Damir пишет: | для меня приемлема - несколько раз так делал.
но заведение лишнего параметра + заполнение вызова наводит на мысль о кустарщине.
какие-то операции могут быть недоступны для модификачии (передать параметр). |
1) А изменение логики операции в зависимости от того, откуда она вызвана, не наводит на мысль о кустарщине?
2) Если операция не доступна для модификации, то чем поможет функция, которая скажет, кем именно эта операция вызвана? |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пн Окт 19, 2015 12:58  Re: Можно ли узнать откуда вызвана операция через PLPCALL ? |
|
Полезность: Нет оценки
|
Alkov пишет: | Может что нибудь напишешь про первоначальную постановку задачи. ...
Если разовая необходимость. ...чем контекст юзера плох?
Ну примерно так и делаем, но необходимость возникает постоянно.
Контекст как и любая переменная плох тем что его нужно потом сбрасывать и отследить все места где это делать бывает проблематично,
причём если вызов из проверки , то его нужно сбрасывать на ok, cancel,exception...
иначе при вызове из другой операции где он не взводиться операция отработает как будто вызвана с первоначальной.
....и еще....то что nav.current_form_method_id через стэк работает, как определил?
зашёл в пакет nav через sql навигатор и посмотрел. |
Всё, теперь тоже проникся
Код: |
-- NAV.current_form_method_id
function current_form_method_id return varchar2 is
s varchar2(32767);
n number;
m_id varchar2(100) := null;
begin
s := utils.call_stack;
n := instr(s, 'Z$U$', 1);
if n <> 0 then
s:= substr(s, n+4);
n:= instr(s, chr(10));
if n<>0 then
s:= substr(s, 1, n-1);
begin
m_id:= s;
exception when others then null;
end;
end if;
end if;
return m_id;
end;
-- NAV.current_form_method_id
-- utils.call_stack
function call_stack return varchar2 is
begin
return dbms_utility.format_call_stack;
end;
-- utils.call_stack
|
Разница лишь либо в полном стеке, либо вырезанном id метода |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Пн Окт 19, 2015 13:33   |
|
Полезность: Нет оценки
|
Amper пишет: |
1) А изменение логики операции в зависимости от того, откуда она вызвана, не наводит на мысль о кустарщине?
|
Мы официальные кустари - у нас работа такая: латать здесь и сейчас.
Amper пишет: |
2) Если операция не доступна для модификации, то чем поможет функция, которая скажет, кем именно эта операция вызвана? |
Если недоступна для модификации вызывающая операция. Но можно редактировать вызываемую.
Впрочем, для меня неактуально - локал полнейший. |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Ср Окт 21, 2015 02:46   |
|
Полезность: Нет оценки
|
Random пишет: | Alkov пишет: | Вызываемая операция должна сделать те или иные действия в зависимости от вызывающей операции.
Примеров можно много набрать:
Например заполнить тот или иной вычпар для бо.
Соответственно бо отработает по тому или иному шаблону.
Или производить или не производить ту или иную проверку...
Поэтому хотелось бы иметь надёжный механизм определения операции ,типа как для стэка вызовов... |
Скажите, а почему неприемлема организация ветвления поведения через параметр операции? |
Параметр приемлем, но у него есть ограничение, например дистрибные операции вызывая данную с параметром не будут его заполнять...если этот момент несущественен, то да приемлемо.
+нужно чтоб разработчики обзывали его одинаково чтобы было единообразие ну это можно в инструкции прописать. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|