Как вызвать Javascript изнутри кода PLSQL в динамическом действии oracle apex

1

Как мы можем вызывать код JavaScript из кода PLSQL в динамических действиях Oracle apex. На самом деле, мое требование - выбрать роль (P2_ROLE) из выпадающего списка. И чем найти все имена пользователей, прикрепленные к этой роли, используя sql-запрос. После восстановления usernamemess все строки в интерактивной сетке должны окрашиваться для этого списка пользователей. IG содержит имя столбца USER_NAME.

Если роль присутствует в IG, я могу заставить ее работать, написав приведенный ниже код в динамическом действии ---> код Javascript

     $(document).ready(function() {
$("td:nth-child(28)").each(function() {
    if ($(this).text() === apex.item( P2_ROLE ).getValue()) {
        $(this).parent().children().css({'background-color': '#FF9999'});
    }       
});
});

Но проблема в том, что выбранная роль не отображается в интерактивной сетке.

Поэтому в качестве обходного пути я хочу получить все имена пользователей, специфичные для этой роли, используя PLSQL и сопоставить их с столбцом USER_NAME в интерактивной сетке с использованием JAVASCRIPT.

Но я не уверен, как я могу называть код JAVSCRIPT в PLSQL-коде. В основном я хочу сделать что-то вроде этого:

DECLARE
Cursor c_user_name is
 select distinct user_name  from wf_user_roles where role_name = :P2_ROLE;
l_USER_NAME varchar2(1000);
BEGIN
 OPEN C_USER_NAME ;
  LOOP
   FETCH C_USER_NAME into l_USER_NAME;
   EXIT WHEN C_USER_NAME%NOTFOUND;

  -- Call this JAVASCRIPT code now  
  /*
  $(document).ready(function() {
   $("td:nth-child(28)").each(function() {
    if ($(this).text() === l_USER_NAME) {
        $(this).parent().children().css({'background-color': '#FF9999'});            

     }        
   });
  });
 */

 END LOOP; 
 END;

Может кто-нибудь, пожалуйста, помогите мне в этом.

Теги:
plsql
oracle-apex

1 ответ

1
Лучший ответ

Вы можете использовать apex.server.process:

https://docs.oracle.com/cd/E71588_01/AEAPI/apex-server-namespace.htm#AEAPI30050

С помощью этой функции вы можете вызвать PL/SQL-процесс с помощью javascript и сделать что-то после того, как этот код вернет что-то.

Пример: https://community.oracle.com/thread/4094475

UPD.

JAVASCRIPT

apex.server.process("new_assign_roles", 
   { x01: 'a_value', x02: 'b_value', x03: 'c_value' },
   {
      success: function(pData) {
         //you can do anything here
         console.log(pData);
         apex.message.alert(pData.v_result);
      }
   }
);

ПРОЦЕСС ПО СПРОСУ

DECLARE

p_a VARCHAR2(1000) := APEX_APPLICATION.g_x01; 
p_b VARCHAR2(1000) := APEX_APPLICATION.g_x02; 
p_c VARCHAR2(1000) := APEX_APPLICATION.g_x03; 

v_result VARCHAR2(4000) := p_a||' - '||p_b||' - '|| p_c;

BEGIN 
-- you can do anything here  

    apex_json.open_object;  
    apex_json.write('success', true);  
    apex_json.write('v_result', v_result);  
    apex_json.close_object;  

END;

Здесь вы можете увидеть этот пример:

https://apex.oracle.com/pls/apex/f?p=145797:33

login with:
workspace: stackquestions
user: user_test
pwd: stackquestions
application: 145797
page: 33
  • 0
    Привет, спасибо за ваше предложение. Я пытаюсь реализовать этот apex.server.process в моем коде. Мне удалось выполнить простую инструкцию вставки с помощью процесса обратного вызова AJAX, но когда я пытаюсь вызвать другую функцию из этого процесса, она не работает. Ниже приведен код, который я пишу в своем JAvascript: apex.server.process ("new_assign_roles", {x01: USER_NAME, x02: l_role, x03: l_justification, x04: l_date,});
  • 0
    И в процессе обратного вызова AJAX я пишу: Declare p_return_status varchar2 (1000): = NULL; p_msg_data varchar2 (1000): = NULL; начало - ВСТАВЬТЕ В ЗНАЧЕНИЯ ТЕСТИРОВАНИЯ (apex_application.g_x01, apex_application.g_x02, apex_application.g_x03, apex_application.g_x04); XXUA_APEX_UMX_PKG.proc_assign_roles (APEX_APPLICATION.g_x01, APEX_APPLICATION.g_x02, APEX_APPLICATION.g_x03, APEX_APPLICATION.g_x04, P_return_status, P_msg_data); --HTP.p (P_msg_data); конец; Подскажите, пожалуйста, что здесь не так.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню