I also wondered if I could apply this concept to the badge count in the side menu - not slow the page load by a longer running query that populates the count.
Turns out it wasn't that hard, particularly since I already had the jQuery I needed from a previous requirement.
We first need to add a unique class to the link definition, so we can identify the menu item that needs updating.
The label contains the substitution string reference to an application item called LAZY_MENU, that is just computed to zero on each page load.
Surrounded by square brackets, this turns it into the count badge.
Add a dynamic action that executes PL/SQL on Page Load, probably to the global page, though this demo only fires when on page 15.
The demo populates the item based on a query that counts how many columns in my schema, plus a random number, so we can see it change each time.
A subsequent JavaScript action is where the real action is at
$('#t_TreeNav span.lazy-menu') .closest('div.a-TreeView-content') .find('span.a-TreeView-badge') .text($v('P15_COUNT'));The selector identifies the menu item based on the
lazy-menu
class entered in the link definition, then traverses the tree to locate the relevant badge, which is then updated to the page item.A more complete solution may also update LAZY_MENU application item, ready to have reasonably fresh information for the next page load.
Or we could make our queries faster ;p