Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

149
Vistas
Ejecutar consulta antes del evento _save en un informe interactivo de Oracle Apex

Recientemente encontré un artículo sobre "[Cómo interceptar las funciones interactivas para guardar y eliminar informes en APEX] [1]", ¡muy útil! pero necesito hacer algunas validaciones antes de estos eventos y no se como hacerlo, quisiera saber si me pueden ayudar a solucionarlo.

El objetivo principal es restringir la cantidad de informes privados que puede guardar un usuario, por ejemplo, límite de 1 informe privado guardado por usuario.

Este es el código para interceptar estos eventos:

 $(document).ready(function() { $.widget("apex.interactiveReport", $.apex.interactiveReport, { // Saving a Default report _saveDefault: function () { console.log("_saveDefault"); console.log(this); console.log(this._getId("report_name")); console.log('stopping'); // return this._super(); }, // Saving a Public or Private reports _save: function () { console.log('_save'); console.log(this); console.log(this._getId("report_name")); console.log('stopping'); // return this._super(); }, // Deleting a report (user clicking the "X") _remove: function () { console.log('_remove'); console.log(this); console.log(this._getId("report_name")); console.log('stopping'); // return this._super(); } }); });``` [1]: https://www.talkapex.com/2019/02/how-to-intercept-interactive-report-save-and-delete-functions-in-apex/
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tenga en cuenta que la publicación de blog a la que hace referencia utiliza funciones no documentadas. No hay garantía de que esa funcionalidad no cambie en versiones futuras y no son compatibles. Puede hacer esto de una manera diferente (compatible), usando las vistas del diccionario de datos y la API APEX_IR . No es tan limpio como hacerlo javascript (que por cierto, no sé cómo implementar).

Esto es lo que hice (mi aplicación es 28183 y la página es 7). La lógica es que después de actualizar el IR (si guarda un informe privado, la región se actualiza), verifique en pl/sql si se excede la cantidad máxima de informes privados. Si es así, elimina la última e informa al usuario con una alerta.

  • Crear un elemento de página P7_MAX_REACHED
  • Cree una acción dinámica Después de actualizar de la región del informe interactivo.
  • Cree una verdadera acción de Ejecutar código del lado del servidor con la fuente:
 BEGIN select COUNT(report_id) INTO :P7_MAX_REACHED from APEX_APPLICATION_PAGE_IR_RPT where application_id = 28183 AND page_id = 7 AND report_type ='PRIVATE'; EXCEPTION WHEN OTHERS THEN :P7_MAX_REACHED := 0; END;
  • Ahora cree una segunda acción dinámica en el cambio de P7_MAX_REACHED con la condición del lado del cliente de Artículo > Valor (Artículo P7_MAX_REACHED, Valor 1)
  • Cree una acción verdadera de tipo Alerta con el texto "Solo se puede guardar 1 informe privado"
  • Cree una acción verdadera de tipo Ejecutar código del lado del servidor con fuente
 BEGIN FOR r IN (SELECT report_id, ROW_NUMBER() OVER (ORDER BY created_on ASC) AS rn FROM APEX_APPLICATION_PAGE_IR_RPT where application_id = 28183 AND page_id = 7 AND report_type ='PRIVATE' ) LOOP IF r.rn > 1 THEN APEX_IR.DELETE_REPORT(p_report_id => r.report_id); END IF; END LOOP; END;
  • Agregue otra acción verdadera del tipo Actualizar región de informe interactivo
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda