web-dev-qa-db-ja.com

Oracleapexの動的アクションでPLSQLコード内からJavascriptを呼び出す方法

Oracleapexの動的アクションでPLSQLコードからJavaScriptコードを呼び出すにはどうすればよいですか。実際、私の要件は、ドロップダウンリストからRole(P2_ROLE)を選択することです。そして、SQLクエリを使用してこのロールに関連付けられているすべてのユーザー名を検索します。ユーザー名が取得されると、インタラクティブグリッドのすべての行がこれらのユーザーリストの色になります。 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を使用してそのロールに固有のすべてのユーザー名をフェッチし、JAVASCRIPTを使用してインタラクティブグリッドのUSER_NAME列と照合します。

しかし、PLSQLコードでJAVSCRIPTコードを呼び出す方法がわかりません。基本的に私はこのようなことをしたいです:

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;

誰かがこれに関して私を助けてくれますか?.

4
Abha

Apex.server.processを使用できます。

https://docs.Oracle.com/cd/E71588_01/AEAPI/apex-server-namespace.htm#AEAPI3005

この関数を使用すると、JavaScriptを使用してPL/SQLプロセスを呼び出し、このコードが何かを返した後に何かを実行できます。

例: 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:

login with:
workspace: stackquestions
user: user_test
pwd: stackquestions
application: 145797
page: 33

20191125AL>ユーザーuser_testがロックされています。

3
romeuBraga