Thursday 22 May 2014

Oracle Apex - Adding Region Help

Oracle APEX Help Text

Occasionally at work I build systems using Oracle's Application Express and I find I have to stop the web developer within me from going overboard and solving problems in a non APEX way. We had just completed a new system for managing customer discounts and had asked the system owner to come up with field and page help for the application. After a few days we received a spreadsheet full of descriptions and help for most of the pages, but to my surprise they'd included region help. The latter being something that isn't currently implemented in vanilla APEX.

Just to explain a little for those not conversant in APEX, systems are built from a number of pages, and each page can be essentially a report or form. You can have a mix of these by using regions, but as everything must be in a region anyway it's really a case of adding extra regions. Additionally it can be beneficial to split forms across multiple regions to aid clarity or group by function. The following example shows percentage fields used to capture discount percentages for a customer.

Standard Form Region in APEX.
Item help has already been added to this region and this can be seen by clicking one of the labels. This runs a JQuery function called 'popupFieldHelp' and generates a fancy popup like this example.

Item Help Example.

So far all perfectly normal, there's nothing new here!

Additionally these items appear on the Page Help, grouped together under a section title that matches their region title.

What About Region Help?

So everything was great until we were asked for a region help, but as the requirement was valid I couldn't just discard the idea. But I didn't want to write custom JQuery code because my non-developer colleague may need to update it, and I also wanted it to appear in the page help. Here's what I came up with...

1. Add a 'Display Only' page item to your region and choose a sensible name.

(In our example this will be 'P19_ADDITIONAL_DISCOUNTS_HELP').

2. Set the Label text to reference the region name, to be shown in the page help.

(I used 'Additional Discounts Region' for my label.)

3. Add the help text to the item in the normal way entering your region help text.

4. Move the item so that it is first in the region and run the page.

5. Test your new help text by clicking on the item label, then right click it and copy the link code.

(nb. In Firefox this is 'Copy Link Location' and in Internet Explorer it is 'Copy Shortcut'.)

6. Paste the link code into Notepad (or similar) and you should have something like this..

javascript:popupFieldHelp('3439324541165905','112943106205802')

(nb. The first number is your item number, the second is the session number)

7. Edit the region and alter the title to..

<a class="uHelpLink" href="javascript:popupFieldHelp ('xxxxxxxxx','&APP_SESSION.')">Additional Discounts</a>

Where xxxxxxxxx is your item number that we found in the previous stage.

8. Save and run the page and your title will now show as a link (see image below).

Region Help Linked To Region Title.
9. Click the title link and check it works.

10. Finally edit the page again and set the item to 'Hidden' so that it's label no longer shows in the region.

(nb. The item help box will now be hidden when editing the item, but it's still there and available to page and item popup help functions.)


Update, 20/01/2015 Method adapted for tabular form columns.

Monday 19 May 2014

Restoring Java 1.6 on a PowerPC Mac


The Problem

The kid's old G4 Mac Mini was superceeded last year by a more modern intel version which has taken over the duties of Web Browsing, Minecraft and StarCraft.

My oldest son used to live and breath Minecraft, but it fell out of favour a few months back and although the new server still runs his creations, it tends to only get used by his old friends. I think he wanted it to be packed with people, but as it's a small private server using a domestic internet connection I argued this wasn't really fair on the rest of us. As time went on it became less about creating and more about minecraft based activities, although there's some pretty amazing creative stuff on there.

It concerned me though that my server investment was being wasted, so I decided to introduce my two younger sons (5 and 7) to a very much simpler version of Minecraft. I added another service on port 25566 using server version 1.5.2, but then I ran into a problem.

My plan was to hook the old PowerPC Mac Mini to my TV and use that as a second machine, so both boys can play at the same time. This should avoid the "waiting for their turn" issues that we frequently get and be more fun for them. But somewhere along the way an Apple update has removed Java 1.6 (for security reasons) and dumped it back to 1.5, and this version won't run later versions of Minecraft or the loader. Apples recommendation, get it from Oracle (we don't supply it anymore)

Between a rock and a hard place.

I'll admit the G4 Mac Mini is getting as little old; I think I bought it in 2006 so a friend could edit his holiday video. It went on to serve as a loan machine for a few years until we finally set it up for the kids. If I'd have waited another 6 months it would have been an Intel version (sighs), but nobody saw the switch to Intel coming.

So guess what, Oracle don't supply a PowerPC version of Java anymore (in fact I'm not sure they ever did, because Apple still supplied it up to 1.6) None of the Apple update links for Java work anymore (archived) and any updates I do find just install later versions of 1.5, and there's little hope of 1.7!

I did manage to find some v1.6 files after the JavaV8 Apple update, but curiously it didnt show up in Java Preferences. Then when I hacked it into use by altering the symbolic links in /system/library/Frameworks/javaVMs/versions it politely informed me that it was the wrong CPU type.

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Commands/java -version
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Commands/java: Bad CPU type in executable

So I'm looking at scrapping this machine because it's CPU is not supported anymore, or find a creative way of getting around the problem.

Soylatte or Bust

After a lot more googling I found Soylatte, their site had binaries and after install I ran java -version is proudly reported version 1.7.

Add to your path to get it to run..

export PATH=/usr/local/soylatte16-amd64/bin:$PATH       
(or what ever you called your install dir)

I had high expectations, but this is a Beta Java Developer Kit (JDK), all we want is the Runtime or JRE. Something's not right though because I'm not able to get Minecraft to run and now Java Preferences fails to start.

I went back to googling for answers and ideas, but I didn't find anything new.

So what are my options now?
  • Chuck it in the skip. (buy intel one)
  • Install Linux MintPPC (more investigation required)
  • Replace logic board with Core 2 duo version. (not even sure this will work)