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

Можно ли узнать откуда вызвана операция через PLPCALL ?
На страницу Пред.  1, 2
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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, если я не ошибаюсь. Проверять лень Smile


там тоже через стэк вызовов

ясно Sad

Вот такая вот платформистая платформа, прости господи.
Вопрос даже не в том, зачем этот стек нужен автору ветки.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеПт Окт 16, 2015 14:18   Re: Можно ли узнать откуда вызвана операция через PLPCALL ? Ответить с цитатой
Полезность: Нет оценки
Damir пишет:

Возьмите уже vtar-а к себе, что-ли.

Smile
ну а чо, отдамся в хорошие руки
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 пишет:
Вызываемая операция должна сделать те или иные действия в зависимости от вызывающей операции.
Примеров можно много набрать:
Например заполнить тот или иной вычпар для бо.
Соответственно бо отработает по тому или иному шаблону.
Или производить или не производить ту или иную проверку...

Поэтому хотелось бы иметь надёжный механизм определения операции ,типа как для стэка вызовов...


Скажите, а почему неприемлема организация ветвления поведения через параметр операции?


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

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