|
|
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
как пользоваться интерфейсами для загрузки? правильно ли это: Например необходимо загружать ежедневные курсы валют (таблица GL.GL_DAILY_RATES), для загрузки в нее информации есть интерфейсная таблица OEBS GL.GL_DAILY_RATES_INTERFACE т.е. получается что нужно просто какойто программой запихивать данные в таблицу GL.GL_DAILY_RATES_INTERFACE, а триггер висящей на ней их перекинет в таблицу GL.GL_DAILY_RATES Правильно ли это? или необходимо еще чтото вызывать? И еще вопрос, а может произойти ошибка оракла, при вставке данных в таблицу GL.GL_DAILY_RATES? Или все возможные ситуации контролирует тригер на таблице GL.GL_DAILY_RATES_INTERFACE? Если же триггер не контролирует все ситуации, тогда будет откат, который будет распространен аж до оператора Insert в таблицу GL.GL_DAILY_RATES_INTERFACE правильно? спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 18:47 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Обычно интерфейс представляем из себя комплект интерфейсных таблиц и программу, которая их обрабатывает. В этом случае сначала надо набить эти таблицы данными, а потом запустить соответствующую программу. Но что касается курсов валют, то все происходит так, как вы описали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 19:01 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
va_kochnevОбычно интерфейс представляем из себя комплект интерфейсных таблиц и программу, которая их обрабатывает. В этом случае сначала надо набить эти таблицы данными, а потом запустить соответствующую программу. Но что касается курсов валют, то все происходит так, как вы описали. программу - имеется ввиду пакет? а где искать какой пакет(программу) запускать, только в доке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 19:07 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Info2программу - имеется ввиду пакет? а где искать какой пакет(программу) запускать, только в доке? Параллельная программа, запускаемая через "Вид"->"Запросы" Может быть реализована и как пакетная процедура, и как C-шная программа, и как отчет. Про конкретные интерфейсы (таблицы и программы-обработчики) искать в документации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 19:12 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Info2 программу - имеется ввиду пакет? а где искать какой пакет(программу) запускать, только в доке? Если не ошибаюсь, в тексте триггера: -- Launch concurrent request to run the Rate Change Program req_id := FND_REQUEST.submit_request('SQLGL','GLTTRC','','',FALSE, ...); после модификации GL.GL_DAILY_RATES запускается паралелльная программа GLTTRC, которая использует внешнюю программу с тем же именем (можно найти по Short name в меню Concurrent:Program, Concurrent:Executable). Почему именно для этой таблицы так сделано, непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 12:48 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Конкретно для данного интерфейса лучше всё одним стэйтментом грузить чтобы не плодить миллион вызовов conc prog's. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 13:02 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
WhatevaКонкретно для данного интерфейса лучше всё одним стэйтментом грузить чтобы не плодить миллион вызовов conc prog's. Согласен. С трудом себе представляю задачу, для которой потребуется большое количество добавлений в эту таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 13:32 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
как я понял вызов -- Launch concurrent request to run the Rate Change Program req_id := FND_REQUEST.submit_request('SQLGL','GLTTRC','','',FALSE, ...); это просто пересчет баланса, по новым курсам а зачем в начале стоит триггера стоит IF GL_CRM_UTILITIES_PKG.enable_trigger THEN который отключает всю логику тригера верно ли, что бы гарантировано загрузить курсы валют, надо всегда перед вставко записей в таблицу GL_DAILY_RATES_INTERFACE, установить в GL_CRM_UTILITIES_PKG.ENABKE_TRIGGER:=TRUE ? а в каких случаях его отключают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 13:39 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
кстати, а что будет если внешняя программа, которая вставляла записи в GL_DAILY_RATES_INTERFACE, проверит результаты, увидит например ошибки и сделает rollback получается что откатятся записи в GL_DAILY_RATES_INTERFACE (тем самым потеряем и ошибки), GL_DAILY_RATES. а что будет с -- Launch concurrent request to run the Rate Change Program req_id := FND_REQUEST.submit_request ( он тоже откатывается, вернее запрос на запуск или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:13 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Info2кстати, а что будет если внешняя программа, которая вставляла записи в GL_DAILY_RATES_INTERFACE, проверит результаты, увидит например ошибки и сделает rollback получается что откатятся записи в GL_DAILY_RATES_INTERFACE (тем самым потеряем и ошибки), GL_DAILY_RATES. а что будет с -- Launch concurrent request to run the Rate Change Program req_id := FND_REQUEST.submit_request ( он тоже откатывается, вернее запрос на запуск или как? По-моему, если FND_REQUEST.submit_request() вернула ID паралелльной программы, то это означает, что программа уже стоит в очереди на выполнение. Дальше при помощи этого ID можно отследить статус этой программы и попробовать отменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:27 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
OA User Info2кстати, а что будет если внешняя программа, которая вставляла записи в GL_DAILY_RATES_INTERFACE, проверит результаты, увидит например ошибки и сделает rollback получается что откатятся записи в GL_DAILY_RATES_INTERFACE (тем самым потеряем и ошибки), GL_DAILY_RATES. а что будет с -- Launch concurrent request to run the Rate Change Program req_id := FND_REQUEST.submit_request ( он тоже откатывается, вернее запрос на запуск или как? По-моему, если FND_REQUEST.submit_request() вернула ID паралелльной программы, то это означает, что программа уже стоит в очереди на выполнение. Дальше при помощи этого ID можно отследить статус этой программы и попробовать отменить. Пардон, наврал, похоже :(. Если из триггера запускается, то там д.б. функция FND_REQUEST.set_mode(true). По идее, если этот флажок выставлен, то изменения в таблицах менеджера запросов будут видны по завершении общей транзакции, а если произойдет откат, то менеджер запросов их не увидит и запуск параллельной программы не произойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 16:08 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
OA User Пардон, наврал, похоже :(. Если из триггера запускается, то там д.б. функция FND_REQUEST.set_mode(true). По идее, если этот флажок выставлен, то изменения в таблицах менеджера запросов будут видны по завершении общей транзакции, а если произойдет откат, то менеджер запросов их не увидит и запуск параллельной программы не произойдет. Интересно в доке есть примечание Note that a failure in the database trigger call of FND_REQUEST.SUBMIT_REQUEST does not roll back changes. получается что данные можно откатить, а то что наделает FND_REQUEST.SUBMIT_REQUEST - НЕТ если раньше откатишь, чем он запустится, то он вхолостую сработает. а если позже, то он успеет все закомитить, а потом ты откатишь исходные данные... правильные размышления? какаято фигня... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 16:41 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Info2Интересно в доке есть примечание Note that a failure in the database trigger call of FND_REQUEST.SUBMIT_REQUEST does not roll back changes. получается что данные можно откатить, а то что наделает FND_REQUEST.SUBMIT_REQUEST - НЕТ если раньше откатишь, чем он запустится, то он вхолостую сработает. а если позже, то он успеет все закомитить, а потом ты откатишь исходные данные... правильные размышления? какаято фигня... Нет, не правильные. Пока не закаммитим конкаррент нифига не увидит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 16:51 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Info2 Интересно в доке есть примечание Note that a failure in the database trigger call of FND_REQUEST.SUBMIT_REQUEST does not roll back changes. получается что данные можно откатить, а то что наделает FND_REQUEST.SUBMIT_REQUEST - НЕТ если раньше откатишь, чем он запустится, то он вхолостую сработает. а если позже, то он успеет все закомитить, а потом ты откатишь исходные данные... правильные размышления? какаято фигня... По-моему, все несколько проще. FND_REQUEST.SUBMIT_REQUEST() не запускает ничего сама по себе, она только заполняет соответствующие таблицы Fnd_conc_xxx. Вызов Set_mode(true) нужен, чтобы обойти команды управления транзакциями, коих в триггере быть не должно, внутри процедур пакета FND_REQUEST. Соответственно, если INSERT в интерфейсную таблицу не прошел, то все откатится до исходного состояния, в том числе и изменения в таблицах менеджера запросов. Если транзакция закончилась успешно, то менеджер запросов "увидит" эти изменения и запустит параллельную программу уже исходя из собственных настроек и ограничений. Собственно, можно для теста любую хранимую процедуру написать и проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 16:59 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
FND_REQUEST.SUBMIT_REQUEST() не запускает ничего сама по себе, она только заполняет соответствующие таблицы Fnd_conc_xxx. Насколько я понимаю. Он заполняет таблицы Fnd_conc_xxx и после этого процесс на unix-сервере просматривает эти таблицы и если нужно запускает на unixe процесс для обработки данного запроса. причем этот процесс всегда будет в другой сессии и соответственно поэтому нужно делать commit после заполнения таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2005, 17:07 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
Вопрос еще, так как вместо триггера конвертацию может выполнять пакет APPS.GL_CRM_UTILITIES_PKG а в нем имеется, вот такой лог ошибок EXCEPTION WHEN OTHERS THEN ROLLBACK; fnd_file.put_line (fnd_file.LOG, 'Error: Duplicate Row or Overlapping Date Range found.'); fnd_file.put_line (fnd_file.output, 'Error: Duplicate Row or Overlapping Date Range found.'); set_completion_status_result := fnd_concurrent.set_completion_status ('ERROR', 'Error: Duplicate Row or Overlapping Date Range found.'); END; на самом деле fnd_file вроде обычный пакет utl_file. Так вот вопросы: 1. Файл лога один на систему, или както они по разному именуются для разных процессов 2. Если один, то как там искать именно свои ошибки? 3. Где настраивается физическое размещение данного файла? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2005, 17:54 |
|
||
|
Интерфейсные таблицы OEBS
|
|||
|---|---|---|---|
|
#18+
fnd_file.put_line (fnd_file.LOG, пишет информацию в свой LOG-файл. его можно взять по адресу select fcr.logfile_name from fnd_concurrent_requests fcr он же просматривается по кнопке Просмотр Журнала в окне Запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2005, 18:27 |
|
||
|
|

start [/forum/topic.php?fid=29&msg=33204149&tid=1528417]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 470ms |

| 0 / 0 |
