Как мы можем вызывать код 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;
Может кто-нибудь, пожалуйста, помогите мне в этом.
Вы можете использовать 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