TransWikia.com

¿Cómo enviar y recibir un arreglo a PL/SQL por medio de JavaScript Promises en Oracle Apex?

Stack Overflow en español Asked by Colonel Red on December 30, 2020

Actualmente tengo este código en una región que sirve para crear una lista dinámica:

    Expediente:
    <input type="text" id="expediente"><p>Expediente agregado: <b id='exp'></b></p>
    <p>Expedientes:</p>
    <ol id="expedientes"></ol>

Esto lo tengo en una acción dinámica de un clic en un botón para ir agregando los elementos del input a la lista:

    var list = document.getElementById('expedientes');
    
    var firstname = document.getElementById('expediente').value;
    document.getElementById('exp').innerHTML = firstname;
    
    var entry = document.createElement('li');
    entry.appendChild(document.createTextNode(firstname));
    list.appendChild(entry);

Lo siguiente que hago es intentar enviar los parámetros por medio de Javascript Promises en otra acción dinámica:


        var liElems = document.querySelectorAll('ol#expedientes li');
        var liElemsLikeArr = Array.from(liElems);
        var expedientes = "prueba";
        
        liElemsLikeArr.forEach(function(elem) {
          alert(elem.textContent);
        });
    
    console.log(liElemsLikeArr);
    insert();
    
    
    function insert(){
        apex.server.process(
            "CB_AJAX_3",{
                x01: expedientes,
                f10: liElemsLikeArr
            },{
                dataType:"text",
                loadingIndicator:"#P30_RXP_ENC_LABEL",
                success:function(pData){
                    console.log(pData);
                    apex.message.alert(pData);
                }
            }
        );
    }

Por último en una Devolución de Llamada de Ajax intento recibir el arreglo para recorrerlo con un for en PL/SQL:

       DECLARE
        l_return varchar2(200);
        var varchar(200);
    BEGIN
    
    for i in 1..apex_application.g_f10.count loop
        var := apex_application.g_f10(i);
    end loop;
    
    l_return := 'Exp: ' || apex_application.g_x01 || ' Array:' || var;
    htp.prn(l_return);
        
    EXCEPTION WHEN no_data_found THEN
        ROLLBACK;
        htp.prn('Error');
    END;

Como resultado la llamada me devuelve un

Exp: prueba Array:[object HTMLLIElement].

Agradecería mucho su apoyo

One Answer

Necesita utilizar el método JSON.stringify en la invocación al proceso Ajax, por ejemplo: {x01: JSON.stringify(expedientes)},

Haciendo un ejemplo:

var selectedIds = [];
for (i = 0; i < 10; i++)
        {           
          selectedIds.push(i);
        }

Y al ejecutar:

JSON.stringify(selectedIds);

Se obtiene la información del arreglo: "[0,1,2,3,4,5,6,7,8,9]"

Por otro lado, probablemente hay una manera mas sencilla de desarrollar esta solución en APEX.

Answered by Mónica Godoy on December 30, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP