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

Вызов списочной из простой

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


Вступление в Клуб: 10.12.2009
СообщениеПн Сен 10, 2012 11:07   Вызов списочной из простой Ответить с цитатой
Полезность: Нет оценки
Товарищи, возникла необходимость вызвать списочную операцию с заполненным параметром... в проверке:

[code]
if p_message = 'DEFAULT' then
...
P_BUS_PROC := nvl(P_BUS_PROC, ::[BUS_PROCESS]([code]='ГАШЕНИЕ'));
[/code]

..так вот, задача - переопределить параметр P_BUS_PROC.

пытался вызвать из простой из тела PLPCALL'ом, выпало в ошибку. у списочной есть один IN OUT параметр. ошибка: невозможно вернуть значение такого то параметра.

второй вариант вызова - PLPCALL через клиент-скрипт:

[code]
Runtime.PlayEx("<% PLPCALL %VAR%.V_FOLDER := %THIS%.[DISTR_DEBT_DOG](%PARAM%.P_DATE => %PARAM%.P_DATE, %PARAM%.P_DATE_VAL => %PARAM%.P_DATE, %PARAM%.P_BUS_PROC => %VAR%.V_BUS_PROC) %>")
[/code]

..однако так же потерпел неудачу. в клиент-скрипте

[code]msgbox(Object1.Text)[/code]
(Object1 = V_BUS_PROC) значение возвращает, поднимается экранная форма вызываемой операции, но отладка все в том же
[code]
if p_message = 'DEFAULT' then
...
stdio.put_line_pipe('##P_BUS_PROC = ' || P_BUS_PROC,'TST_DEP');
P_BUS_PROC := nvl(P_BUS_PROC, ::[BUS_PROCESS]([code]='ГАШЕНИЕ'));
[/code]

выдает пустое значение.

Может кто поделиться идеями реализации?
ЦФТ посоветовало сделать копию дистрибутива и поддерживать его до конца дней. Идея, сами понимаете, не фонтан.
_________________
Всего должно быть в меру.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПн Сен 10, 2012 11:46    Ответить с цитатой
Полезность: Нет оценки
Вся разница в том, что в простой THIS это ссылка на экземпляр, а в списочной это таблица. Вам необходимо %THIS% представить операции как таблицу. ну и секция Default при вызове PLPCALL выдает пустое значение, значение появится в секции VALIDATE при P_INFO = '%PLPCALL%'. Иначе придется писать

Код:
if P_MESSAGE = 'DEFAULT' or (P_MESSAGE = 'VALIDATE' and P_INFO = '%PLPCALL%') then
...


Да и для примера посмотри операцию SELL типа PR_CRED. Там как раз твой случай.
_________________
всегда есть как минимум 2 выхода
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеПн Сен 10, 2012 14:43    Ответить с цитатой
Полезность: Нет оценки
http://www.cftclub.ru/viewtopic.php?t=1414&highlight=%F1%EF%E8%F1%EE%F7%ED
zh
Участник со стажем


Вступление в Клуб: 10.12.2009
СообщениеВт Сен 11, 2012 09:21    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
Вся разница в том, что в простой THIS это ссылка на экземпляр, а в списочной это таблица. Вам необходимо %THIS% представить операции как таблицу. ну и секция Default при вызове PLPCALL выдает пустое значение, значение появится в секции VALIDATE при P_INFO = '%PLPCALL%'. Иначе придется писать

Код:
if P_MESSAGE = 'DEFAULT' or (P_MESSAGE = 'VALIDATE' and P_INFO = '%PLPCALL%') then
...



Кстати, он таки заходит в "чистый" Default...
Кусок самописной отладки при разовом вызове до поднятия экранной формы, безусловно малоинформативно, но с комментариями:

-- Выполнение вызывающей операции -->>
### DEFAULT/%PLPCALL% -- поднял дистрибутив по дефолту
## DEFAULT -- зашел в Дефолт без PLPCALL'а
## sell_proc = 0 -- пока что не понял, что переменные подменены, поймет во втором цикле
### VALIDATE/%PLPCALL% -- второй цикл, поднимаем экранную форму, подменяем пеерменные
## sell_proc = 1 -- дистрибутив успешно принял подмену.
-->> поднятие экранной формы вызываемой операции.

Alexsey пишет:

Да и для примера посмотри операцию SELL типа PR_CRED. Там как раз твой случай.


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

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