Posted on Tuesday, December 7, 2010 Custom pagination for APEX 3.2 interactive report with jQuery Part2 Category APEX and jQuery I recently wrote about Custom pagination for APEX 3.2 interactive report with jQuery. Here are the instructions how you can add custom pagination for application all interactive reports at once in APEX 3.2. Load jQuery library in page template header before substitution #HEAD#. Create HTML region to page zero. Set region Display Point to "Before Footer" and Template "No Template". Insert to Region Source: <script type="text/javascript"> $(function(){ $('#htmldbIR_x1').live({ 'change':function(){ gReport.navigate.paginate('pgR_min_row='+this.value+'max_rows='+$v('apexir_NUM_ROWS')+'rows_fetched='+$v('apexir_NUM_ROWS')); } }); $('#apexir_WORKSHEET_REGION').bind('htmldbIrReady',function(){ if($('#apexir_DATA_PANEL table.apexir_WORKSHEET_DATA td').length>0){ var i=$.htmldbIrPagination(); var ajaxReq=new htmldb_Get(null,$v('pFlowId'),'APPLICATION_PROCESS=GET_IR_PAGINATION',$v('pFlowStepId')); ajaxReq.addParam('x01',$v('apexir_NUM_ROWS')); ajaxReq.addParam('x02',i[2]); ajaxReq.addParam('x03',i[0]); $('#apexir_DATA_PANEL').find('td.pagination').prepend(ajaxReq.get()); $('#htmldbIR_x1').val(i[0]); } }); }); (function($){ $.htmldbIrBusyGrap=function(){ if($('#apexir_WORKSHEET_REGION').length>0){ gReport._BusyGraphic=function(pState){ if(pState==1){ $x_Show('apexir_LOADER'); }else{ if(!$('#apexir_WORKSHEET').data('htmldb')){ $('#apexir_WORKSHEET').data('htmldb',{irReady:true}); $.event.trigger('htmldbIrReady'); }; $x_Hide('apexir_LOADER'); }; return; }; $('#apexir_WORKSHEET').data('htmldb',{irReady:true}); $.event.trigger('htmldbIrReady'); } }; $.htmldbIrPagination=function(options){ var p=$.trim($('#apexir_DATA_PANEL').find('td.pagination').find('span.fielddata').text()); var a=new Array(); var n=new Array(); a=p.split(' '); $.each(a,function(i,v){ if(!isNaN(v)){ n.push(v); }; }); switch(options){ case 'first':return n[0]; case 'last':return n[1]; case 'max':return n[2]; default:return n; }; }; })(jQuery); addLoadEvent($.htmldbIrBusyGrap); </script> Go to Application Shared Components and select Application Processes. Create new On Demand process called GET_IR_PAGINATION DECLARE l_opt VARCHAR2(32700); l_show_rows NUMBER; l_max_query_rows NUMBER; l_first_row NUMBER; l_last_page_start_row NUMBER; l_pages NUMBER; l_start_row NUMBER; l_end_row NUMBER; BEGIN l_show_rows := APEX_APPLICATION.G_x01; l_max_query_rows := APEX_APPLICATION.G_x02; l_first_row := APEX_APPLICATION.G_x03; IF l_max_query_rows > l_show_rows THEN l_pages := FLOOR(l_max_query_rows / l_show_rows); l_start_row := 1; IF l_show_rows > 1 THEN l_last_page_start_row := l_pages * l_show_rows + 1; IF l_last_page_start_row > l_max_query_rows THEN l_last_page_start_row := l_last_page_start_row - l_show_rows; END IF; ELSE l_last_page_start_row := l_max_query_rows; END IF; htp.p('<div id="htmldbIrCustPagination" style="padding-bottom:10px">'); IF l_first_row > 1 THEN htp.prn('<a href="javascript:gReport.navigate.paginate(''pgR_min_row=1max_rows=' || l_show_rows || 'rows_fetched=' || l_show_rows || ''')">'); htp.prn('<img align="absmiddle" alt="<<" title="<<" src="#IMAGE_PREFIX#srmvall.gif" />'); htp.p('</a>'); END IF; htp.p('<select id="htmldbIR_x1" size="1">'); FOR i IN 0 .. l_pages LOOP l_opt := NULL; l_end_row := (l_start_row + l_show_rows) - 1; IF l_end_row >= l_max_query_rows THEN l_end_row := l_max_query_rows ; END IF; l_opt := '<option value="' || TO_CHAR(l_start_row) || '">Rows ' || TO_CHAR(l_start_row) || ' - ' || TO_CHAR(l_end_row) || '</option>' ; IF l_start_row <= l_last_page_start_row THEN htp.p(l_opt); END IF; l_start_row := l_start_row + l_show_rows; END LOOP; htp.p('</select>'); IF l_first_row < l_last_page_start_row THEN htp.prn('<a href="javascript:gReport.navigate.paginate(''pgR_min_row=' || l_last_page_start_row || 'max_rows=' || l_show_rows || 'rows_fetched=' || l_show_rows || ''')">'); htp.prn('<img align="absmiddle" alt=">>" title=">>" src="#IMAGE_PREFIX#smvall.gif" />'); htp.p('</a>'); END IF; htp.p('</div>'); END IF; END; Make sure that all your application interactive reports Pagination Type is "Row Ranges X to Y of Z". Now you should have custom pagination on all application interactive reports.