Tim Hall recently made a wonderful suggestion that the Oracle community remember the much missed Joel Kallman on 11 October 2021.

My contribution doesn’t demonstrate APEX technical wizardry. Instead it’s a short story from a real-life customer project implemented using APEX. Just to avoid any potential law suits, this post isn’t about Agile development either - more how APEX can be used to quickly respond to changing customer requirements.

One particular post from Joel stuck with me about his attitude to customer service which can be encapsulated in a single line:

‘Treat the customer (and really everyone) with respect and dignity’.

I work for Oracle in the UK and am currently working on an APEX project for a customer. This APEX application uses corporate single-sign-on (SSO) for authentication and a simple custom authentication scheme that uses group membership to control access to data (only members of the ‘Sales’ group can see ‘Sales’ reports).

Monday - 10:40

The program manager (not the project manager) sends me an email that strikes fear deep into my soul:

‘Hey Norman, I need a quick Excel spreadsheet summarising the current list of users and their groups’.

A few years ago, I probably would have done this in SQL*Plus or SQL Developer and struggled to massage the output into the desired format. Now my immediate thought was ‘This is a simple APEX report with a control break’.

I quickly created a APEX report and clicked ‘Actions - Download’ to quickly produce the Excel spreadsheet. I then had to waste time transferring the file before finally emailing the spreadsheet to the customer for review.


I had produced an Excel spreadsheet and it was undeniably ‘quick’ so I had clearly met both requirements. Time to put the kettle on.

Monday - 11:57

‘That’s great. Thanks but I also see to see members of the ‘Admin’ group’.

A trivial addition to the WHERE clause and I was about to repeat the whole tortuous process until I remembered we had already configured the Email Delivery Service on OCI for a different requirement.

I checked the output and again clicked ‘Actions - Download’ but checked the ‘Send as Email’ option.


As I simply love recursion, I sent the program manager a FAX to expect an automated email from the APEX bot imminently.

A nice feature of ‘Send as Email’ is that the recipient gets a link to the APEX report in addition to the Excel spreadsheet as a file attachment.

Monday - 15:32

‘That’s great. Thanks for the prompt turnaround’.

Tuesday - 09:17

‘Hey Norman - I shared this Group Membership report with Julie and here’s a list of more people who need to be added to the Admin group before the production deployment. Please send Julie and myself a copy of the updated report’.

Again, I added the list of users to the Admin group and sent the email adding Julie on ‘Cc:’.

Tuesday - 13:47

‘That’s fantastic. Julie has now shared the Membership report with Graham from Operational Support and he was wondering whether you can email this report to him daily from now until a month after production deployment’.

Again, APEX provides an out of the box solution for this called ‘Report Subscriptions’.


Not so much ’low code’ as ’no code’. I simply added a ‘Subscription’ to the ‘Membership’ report and emailed it to Graham daily starting now and ending on 30 November.