Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

144
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!