Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / OEBS. Запуск api через персонализацию. / 12 сообщений из 12, страница 1 из 1
06.08.2008, 17:31
    #35474447
german2k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Добрый день

Можно ли запустить api процедуру c помощью персонализации?
Нужно по вызову определенной строки меню запускать api, формирующее документы.
...
Рейтинг: 0 / 0
06.08.2008, 17:45
    #35474492
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Forms или OAF (HTML) ?
...
Рейтинг: 0 / 0
06.08.2008, 17:46
    #35474495
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Forms - можно.
...
Рейтинг: 0 / 0
06.08.2008, 17:50
    #35474513
german2k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Forms
...
Рейтинг: 0 / 0
06.08.2008, 18:19
    #35474585
Jack Carver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Персонализация.
Тип действия -> Встроенный -> Выполнение процедуры.
(в тексте оберните вывоз процедуры в begin .. end)

Но у этого метода есть существенный минус. Если вы попытаетесь передать в качестве параметра процедуры элемент формы (:ИМЯ_БЛОКА.ИМЯ_АЙТЕМА), то вылетит ошибка "Не все переменные привязаны" - механизм вызова процедур так устроен, что воспринимает все параметры как DB-side.

Как вариант, используйте вызов функции, а не процедуры. Например, функция, возвращающая статус выполнения обработки (1/0). И Вызываемая как текст сообщения (Тип действия -> Сообщение -> Показать: =select 'Статус обработки='||my_pkg.my_func(:BLKNAME.ITMNAME) from dual).

Либо присваивайте значение функции локальной переменной формы.

Также обратите внимание на коммит в процедуру-функции. Чтобы БД-коммит не влиял на форму.
...
Рейтинг: 0 / 0
06.08.2008, 19:50
    #35474772
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Попытаюсь встрять:

1. "..механизм вызова процедур так устроен, что воспринимает все параметры как DB-side..."

Термин "как DB-side" замечателен ))) Он предполагает, что это не бага, а фича ))) На самом деле все просто. Данное действие не умеет работать с bind-переменными вообще. Просто выполняется переданная ей строка (аналог Forms'овой FORMS_DDL build-in)

Если нужно передать параметры, приходиться строить "динамический" SQL

='begin.... my_procedure(' || :BLOCK1.ITEM1 || ');....end'

Проблемы 2-е:
a) Ограничение длины выражения в персонализациях (в R11 <250 символов, в R12 - не знаю). Сложные выражения банально не влезают
b) "Сложные" типы - типа строки символов (если может быть одинарная кавычка)

В общем, так лучше НЕ делать.

2. "Как вариант, используйте вызов функции, а не процедуры...присваивайте значение функции локальной переменной формы"
+1
Думаю, что пример c SELECT'ом можно несколько упростить ))) Собственно SELECT там и не нужен. Например, для вызова функции FND_PROFILE.VALUE, достаточно просто написать:

=FND_PROFILE.VALUE('APPS_DATABASE_ID')

3."Чтобы БД-коммит не влиял на форму"
+1
IMHO
a) Я бы в ряде случаев посмотрел на автономные транзакции
b) В случае "сложной" логике (api, формирующее документы) - логику реализовал бы в виде Concurrent'а, из персонализации просто инициировал запуск данного процесса.

Для передачи большого кол-ва параметров, я бы сделал свой stored-пакет с глобальными переменнами. И функции "сеттеры".
Через селект проталкивал в пакет нужные нам параметры (возможно через несколько select'ов). Через FORMS_DDL (вызов процедур) - запускал обработку. При кол-ве параметров: > 10-20 - думаю это единственный "читабельный" вариант.

Как я помню, еще одна частая ошибка (проблема) - после ...end точка с запятой не нужна.
...
Рейтинг: 0 / 0
07.08.2008, 12:27
    #35475848
german2k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
Спасибо)

а как можно вызвать вызов Concurrent из персонализации?
запускать пакет из fnd?
...
Рейтинг: 0 / 0
07.08.2008, 12:40
    #35475897
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
1. Я бы всегда делал свой пакет/процедуру "запускальщик". Т.е. в самой персонализации _минимум_ логике.

В реальных проектах: Персонализация - слишком легко доступна для шаловливых ручек консультантов и слишком тяжела для модификации программистом. Нефиг логику работы делать консультанту. Все равно надо привлекать прогера. Т.ч. все "программерское" - в БД. Потом намного легче править. Намного меньше притензий от консультанта - оно "вдруг" перестало работать.

2. После п.1 - все как обычно в сторед-процедуре:

Процедура (автономная транзакция)
FND_CONCURRENT (см. Application Developer Guide)
COMMIT
...
Рейтинг: 0 / 0
07.08.2008, 14:10
    #35476233
Jack Carver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
+1 к предыдущему посту.

Плюс наводка =) : fnd_request.submit_request(bla-bla-bla)
...
Рейтинг: 0 / 0
08.08.2008, 13:24
    #35478399
apps_funtik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
В случае, количество консультантов с шалавливыми ручками привышет количество консультантов со здравой головой, как правило персонализацию закрываю паролем, который доверяют только последним.
...
Рейтинг: 0 / 0
08.08.2008, 13:34
    #35478424
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
IMHO

Обычно проблема не в консультантах, а в том, что сложная персонализация становиться "совместным творчеством" - консультант + приблудившиеся программисты. Когда перестает работать - не понятно, кто виноват и что делать. К тому же, MD.050/070 на персонализации пишут редко. Т.ч. и концов не найдешь.

Если четко делить "Персонализация, вызов" - "Сервер сайд, логика и обработка" становиться понятна зона ответственности консультант - персонализация, объекты БД - группа разработки (программисты). Если не происходить вызов (проблемы в персонализации) - притензии к консультанту, если вызов происходит корректно, а работает не корректно - притензии к программисту. Аналогично и перенос (инсталяция) на продакшен БД. Становится понятно, кто что делал и кто что должен перенести. В каких документах фиксировать.

"...В случае, количество консультантов с шалавливыми ручками привышет количество консультантов со здравой головой, как правило персонализацию закрываю паролем, который доверяют только последним...." - ну на тестовой БД, пускай и шаловливыми рученками играются. Не проблема. А на продакшене - вообще нефиг править, пароль должны знать админы и особо избранные товарищи (т.е. 2-3 человека на весь проект). И даже здравая голова тут не при чем. Нужно перенести на продакшен: подготавливаете на тестовой БД, просите админа, перенос (изменение) фиксируется в журнале (документах).
...
Рейтинг: 0 / 0
08.08.2008, 14:43
    #35478673
Jack Carver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OEBS. Запуск api через персонализацию.
+ 100

Только жизнь накладывает свои поправки. "Тайна известная больше чем одному человеку - не тайна"(с) кто-то.
Пароль все равно просочится... Тут уж только супер осторожный админи поможет. Меняющий пароль каждую неделю =)
...
Рейтинг: 0 / 0
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / OEBS. Запуск api через персонализацию. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]