Datos personales

Por setiembre de 1992 empezaba mi primer curso en un Partner de Oracle en Montevideo, y a partir de ahí comenzaría una larga carrera de desarrollo de software. Primero fue SQL, luego PL/SQL, sql*forms 3.0 y sql*report, utilizando un emulador de terminal bajo Windows 3.11. La base de datos? Oracle 7.1. El tiempo fue pasando, los proyectos también, y las distintas versiones: forms 4.5, 5.0, 6i, 9i, 10g. reports 2.5... hasta llegar a 10g. En forma similar las Bases de Datos, 7.1, 7.2, 7.3, 8i, 9i, 10g, en linux, en VMS, an AIX, Solaris y Windows. Tuve la suerte de trabajar en varios lados, conocer algunos países y personas por este hermoso mundo de la informática. Lugares donde quizá uno jamás pensó visitar. Gente que nos atendió en forma maravillosa. Proyectos muy interesantes. El tiempo me fue llevando de programar PL, forms , reports, a pasar también por APEX y realizar customizaciones sobre las EBS, versiones 11i y 12i. Y aquí estamos, para compartir experiencias......

domingo, 9 de febrero de 2020

CheckBox en un GRID de APEX

Desarrollando para un cliente, nos encontramos con la necesidad de utilizar un checkbox en el GRID (editable). Utiizando el rowselect de  APEX no cumplia los requisitos que quería el cliente, y utilizando un checkbox como una columna el look and feel no es el mejor y realmente tampoco era lo que deseaba nuestro cliente.
En resumen lo que hicimos fue customizar un checkbox utilizando imagenes de checked y uncheked

A continuación veremos la implementación:


La idea es que se utiliza un link que devuelve la línea donde se da click, en caso que el Grid no esté habilitado para modificarse, lo habilita y vuelve a llamarse con los mismos parámetros. En este segundo llamado sí va a estar habilitado. Si la clase del checkbox es desmarcado la cambia a marcado y viceversa. Cuando la clase queda marcada asigna a la columna marca un 1 sino 0 (0 es el valor por defecto).

El uso de la columna marca es si queremos procesar solo aquellas columnas que fueron realmente marcadas


        En el select se debe escribir:  ROWNUM as chkbox  y 0 as MARCA. 
   
      El rownum en caso que nuestro query  este compuesto por varias uniones debe estar en el select por fuera de todo el query.

2       Para configurar el  CHKBOX debemos setearlo del tipo LINK.
o   type : URL
o   URL: javascript:payUnpayCB("miStaticGridId",&CHKBOX.)  (En el primer parámetro va el static id del Grid, en el segundo parámetro ver que luego del & va el nombre del item que hace de checkbox)
o   Link Text: <span id="checkBoxID_&CHKBOX." aria-hidden="true" class="fa fa-square-o"></span>
o   Link Attributes: id="clickCheck_&CHKBOX."
     3)      Column Filter: False
     4)      Enable Users to: Sort: False
     5)      En CHKBOX en js Initialization Code
function(options) { 
 options.defaultGridColumnOptions = { 
    noHeaderActivate: true 
  } 
  return options; 
} 
    6)      A nivel de página en Function and Global Variable Declaration
            function payUnpayCB(pIDGrid, pLine) {
   
    if((apex.region(pIDGrid).widget().interactiveGrid("getActions").get("edit"))){

        var view = apex.region(pIDGrid).widget().interactiveGrid("getCurrentView");
        var model = view.model;
        var record = view.view$.grid("getActiveRecord");
   
        var aRet = $("#checkBoxID_"+pLine).attr("class");

        if (aRet == "fa fa-square-o" ){

           model.setValue( record, "MARCA", "1");
           $("#checkBoxID_"+pLine).removeClass("fa fa-square-o").addClass("fa fa-check-square-o");
        }
        else {
              model.setValue( record, "MARCA", "0");
              $("#checkBoxID_"+pLine).removeClass("fa fa-check-square-o").addClass("fa fa-square-o");
        }
       
    }
    else {
          apex.region(pIDGrid).widget().interactiveGrid("getActions").set("edit", true);
          payUnpayCB(pIDGrid, pLine);
    }
}

    7)   El item MARCA lo ocultamos en tiempo de ejecución y salvamos el reporte por defecto




2 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Excelente iniciativa, ya casi lo tengo, solo me da un error a la hora de correrlo

    interactiveGrid.min.js?v=20.1.0.00.13:1 Uncaught Error: Set value not allowed for field.
    at Object.setValue (VM1350 interactiveGrid.min.js:1)
    at payUnpayCB (configuracion-general?session=8514801567320:336)
    at :1:1

    Qué creen que podría ser?

    ResponderEliminar