Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / [JS] Выполнение кода после выполнения процесса / 6 сообщений из 6, страница 1 из 1
05.12.2012, 15:56
    #38066461
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[JS] Выполнение кода после выполнения процесса
Я практикую следующий вариант:
в процессе в разделах
Код: plaintext
Process Success Message
и\или
Код: plaintext
Process Error Message
ставлю код -
Код: javascript
1.
<script>....</script>


то есть он выполняется при положительном\отрицательном исходе процесса.

Но это налагает некоторые ограничения и такой вариант похож на "костыль", тк код нужно писать в одну строчку, без форматирования в виде переносов, ввиду того что этот код будет учавствовать в строке url, что тоже по себе не очень хорошо.
И далее необходимо скрывать этемент нотификации на странице, тк он покажется и будет пустой(в случаи если используется только js код).

Какие возможны еще варианты?
...
Рейтинг: 0 / 0
12.12.2012, 13:37
    #38075707
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[JS] Выполнение кода после выполнения процесса
Вариантов нет больше?...
...
Рейтинг: 0 / 0
12.12.2012, 15:51
    #38075990
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[JS] Выполнение кода после выполнения процесса
kasik,

Поделюсь своим быдлокодом. Для ajax запросов я использую связку из htp.p и EXCEPTION: htp.p - возвращает признак успешного завершения, иначе пользователю показывается сообщение об ошибке. Функция в EXCEPTION, которая при возникновении ошибки логирует ее в табличку + шлет письмо ответственному лицу, существенно упрощает тестирование + поддержку.
function get_error
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
PROCEDURE GET_ERROR (f_app_user   IN VARCHAR2,
                     f_mes        IN VARCHAR2,
                     f_code       IN VARCHAR2,
                     f_proc       IN VARCHAR2,
                     f_other      IN VARCHAR2 DEFAULT NULL )
IS
   /*вывод ошибок в браузер
   разработчик (есть роль DEV) видит полное сообщение, пользователь краткое
   
   v ('ADMIN_EMAIL'), v ('FROM_EMAIL') -     Substitution String в приложении
   
   F101 - неизменный альяс приложения
   */
   CURSOR c1
   IS
      SELECT   1
        FROM   dba_role_privs
       WHERE   GRANTEE = f_app_user AND GRANTED_ROLE = 'DEV';

   r1   c1%ROWTYPE;
BEGIN
   INSERT INTO TR000001 (username,
                         app_id,
                         app_page_id,
                         d_sob,
                         error,
                         process,
                         ip)
     VALUES   (f_app_user,
               nv ('APP_ID'),
               nv ('APP_PAGE_ID'),
               SYSDATE,
               f_mes,
               f_proc,
               OWA_UTIL.get_cgi_env ('REMOTE_ADDR'));

   FOR cw IN (SELECT   workspace_id
                FROM   apex_applications
               WHERE   alias = 'F101')
   LOOP
      apex_util.set_security_group_id (cw.workspace_id);
   END LOOP;

   APEX_MAIL.send (
      p_to          => v ('ADMIN_EMAIL'),
      p_from        => v ('FROM_EMAIL'),
      p_body        =>   'User='
                      || f_app_user
                      || ' app_id='
                      || nv ('APP_ID')
                      || ' page='
                      || nv ('APP_PAGE_ID')
                      || ' date='
                      || TO_CHAR (SYSDATE, 'dd.mm.yyyy hh24:mi')
                      || ' SQLERRM='
                      || f_mes
                      || ' '
                      || f_other
                      || ' proc='
                      || f_proc
                      || ' ip='
                      || OWA_UTIL.get_cgi_env ('REMOTE_ADDR'),
      p_body_html   =>   '<p>User=<b>'
                      || f_app_user
                      || '</b><br/> app_id=<b>'
                      || nv ('APP_ID')
                      || '</b><br/> page=<b>'
                      || nv ('APP_PAGE_ID')
                      || '</b><br/> date=<b>'
                      || TO_CHAR (SYSDATE, 'dd.mm.yyyy :hh24:mi')
                      || '</b><br/> SQLERRM=<b>'
                      || f_mes
                      || ' '
                      || f_other
                      || '</b><br/> proc=<b>'
                      || f_proc
                      || '</b><br/> ip=<b>'
                      || OWA_UTIL.get_cgi_env ('REMOTE_ADDR')
                      || '</b></p>',
      p_subj        => 'Сообщение об ошибке'
   );
   APEX_MAIL.push_queue;

   OPEN c1;

   FETCH c1 INTO   r1;

   IF c1%FOUND
   THEN
      HTP.p (f_mes);
   ELSE
      HTP.p ('Произошла ошибка. Повторите операцию.');
   END IF;

   CLOSE c1;
END;


APPLICATION_PROCESS=AP_TEST
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BEGIN
-- тонны PL/SQL
htp.p('WIN');

COMMIT;

EXCEPTION
   WHEN OTHERS
   THEN
      get_error (:APP_USER, SQLERRM, SQLCODE,'AP_TEST',dbms_utility.FORMAT_ERROR_BACKTRACE);
      rollback;
END;



js
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
ajaxRequest = new htmldb_Get(null, $v('pFlowId'), 'APPLICATION_PROCESS=AP_TEST', 0);
ajaxRequest.add('P4_NVARIANT', $v('P4_NVARIANT'));
ajaxResponse = ajaxRequest.get();

//WIN - не возвратился, значит алерт с ошибкой
if (ajaxResponse.indexOf('WIN')==-1){
alert(ajaxResponse);
}


...
Рейтинг: 0 / 0
12.12.2012, 16:29
    #38076096
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[JS] Выполнение кода после выполнения процесса
небольшая ремарка:
метода indexOf в IE нет, поэтому он будет материться на него.

Спасибо за то что поделились, поанализирую на досуге)
...
Рейтинг: 0 / 0
12.12.2012, 17:00
    #38076162
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[JS] Выполнение кода после выполнения процесса
kasik,

От indexOf можно избавиться, если решить проблему с "htp.p". Дело в том, что "htp.p('WIN')" возвращает строчку со спецсимволом переноса, поэтому сравение "ajaxResponse=='WIN'" всегда будет возвращать "fasle". Нужно что-то вроде "htf.escape_sc".
...
Рейтинг: 0 / 0
12.12.2012, 17:04
    #38076167
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[JS] Выполнение кода после выполнения процесса
я это дело обошел удалением последнего символа:
Код: javascript
1.
2.
3.
4.
5.
...
var ret = get.get();
get = null;
ret = ret.substr(0, ret.length - 1); 
...
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / [JS] Выполнение кода после выполнения процесса / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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