Reset pagination van een regio

Waarom zou je de pagination willen resetten? Als je met APEX werkt zul je al snel een keer de volgende melding zien:

Pagination error

Als je in het voorbeeld in figuur 1 een nieuwe regel in de master selecteert, waarbij er minder dan 3 pagina’s detail gegevens zijn, dan zal je bij het detail rapport de eerder genoemde melding krijgen.

Figuur 1

———-                          ———-
| master |                          | detail |
——————————-     ——————————-
| ………                   |     | ………                   |
| ………                   |     | ………                   |
| ………                   |     | ………                   |
| ………                   |     | ………                   |
| ………                   |     | ………                   |
|                             |     |                             |
|                     pag 5/6 |     |                     pag 3/5 |
——————————-     ——————————-

Deze melding kan je voorkomen door zelf de reset pagination te doen. Het resetten van de pagination kun je in APEX doen via de URL.
De URL voor een APEX applicatie ziet er als volgt uit

URL opbouw : f?p=1:2:3:4:5:6:7:8:9
1 – Application ID or alias
2 – Page ID or Alias
3 – Session &SESSION. :APP_SESSION
4 – Request (eg PRINT_REPORT=REPORT_1) &REQUEST. :REQUEST
5 – Debug (YES or NO) &DEBUG. :DEBUG
6 – Cache setting

APP – Clear cache for whole application
SESSION – Clear cache for current user session
RP – Reset pagination
x – Clear cache for page x
y – Clear cache for item y

7 – Comma separated list of page items
8 – Comma separated list of values
9 – Printer friendly mode (either YES or blank)

Zoals je ziet kun je via de URL veel sturing geven aan je pagina. Het gaat nu echter alleen om het “Cache setting” gedeelte waarbij je de tekst “RP” kunt zetten om een reset van de pagination te doen.
Handig? Ja dat wel, alleen wordt op deze manier de pagination gereset voor ALLE regio’s op de pagina. Als je meerdere rapporten in een master-detail constructie op je pagina hebt staan dan worden deze dus allemaal gereset.

Dit kan je voorkomen door in het “Request” gedeelte de tekst “pg_R_XXX” op te nemen, waarbij XXX staat voor het ID van de regio. Het is niet goed om dit ID hard te programmeren omdat het kan wijzigen als je een import van de applicatie doet. Ik heb dit opgelost door een hidden item op te nemen. Dit hidden item geef ik als “Source type” op dat het een “SQL Query” is. In de Source value or expression komt de volgende code:

select ‘pg_R_’||to_char(region_id)
from apex_application_page_regions
where application_id = :app_id
and page_id        = :app_page_id
and static_id      = ‘static value opgegeven bij regio’

Nu kan je dit hidden item op verschillende manieren gebruiken bij het request. Via een javascipt aanroep of link in een rapport.

top.location.href=’f?p=&APP_ID.:125:&APP_SESSION.:&P125_HIDDEN_ITEM_WITH_ID.:&DEBUG.::’

Column linkxx