Contents

Most of the latest features introduced in Oracle Forms 14.1.2 can be seamlessly recreated within APEX. This article shows you precisely how to do this. However, in the case of many of these new Forms features, the real question is: do you really want them?

I recently attended a webcast called Oracle Forms Modernization: discover your modernization options on demand, hosted by Oracle Product Managers from the world of Forms and APEX.

There was a large section dedicated to new Oracle Forms features in version 14.1.2. It got me thinking: Could these new additions be accomplished in APEX? What would it take to recreate them? And – the key question, really – are they even interesting enough for me to consider using them in APEX?

In this article, I’ll compare some of the key features with APEX alternatives, and then summarize their usefulness in the conclusion.

Please note that my JavaScript and CSS examples have been provided for illustration purposes only.

Comparison

Concealed Data

This feature lets you conceal sensitive information in text boxes. e.g passwords.

Forms

How to do it? Edit Registry.dat and add the following:

default.concealedData.character=\u25cf

\u25cf is a black circle ●

Feature within Forms.

Set the Item Property Concealed Data Button to enable the button.

Feature within Forms.

APEX

In APEX, all password fields are concealed. The Password Visibility button is on by default.

Feature in APEX.

Feature in APEX.

To turn off visibility, just check the Hide Password Visibility box in Live Template Options.

Feature in APEX.

List of Values Button

Forms

A tiny black button appears in the top right corner. Can you see it? When the user moves the mouse over this button, it will cause the mouse pointer to change to a hand with a finger. When the user clicks on this button, the associated LOV will be presented.

Feature within Forms.

APEX

APEX already supports Popup LOVs. How to get something like this? Check out Louis’ Louis’ blog post for inspiration.

Feature in APEX.

Custom Fonts

Forms

Add this to the Registry.dat file:

default.fontMap.defaultMapping=partial

 

Feature within Forms.

APEX

That’s easy-peasy. I simply added something like this into the Inline CSS:

@import url('https://fonts.googleapis.com/css2?family=Bangers&display=swap');
:root {
  --a-base-font-family: 'Bangers', cursive;
}

Feature in APEX.

Character Counter

Forms

To add a character counter for a text item, enable the Display Character Counter property.

Feature within Forms.

APEX

For this, we use a Textarea Page Item.

Feature in APEX.

You also need to enable the Character Counter:

Feature in APEX.

Optionally, you can add some CSS to pull it to the right (otherwise it’s left-aligned):

.apex-item-textarea-counter {
    float: right;
}

Placeholder and Persistent Placeholder

Forms

Now, this is an interesting Oracle Forms feature. Here’s what it does:

  • A placeholder (left) gets overwritten by text
  • A persistent placeholder (right) places the placeholder text in the upper left corner

Feature within Forms.

APEX

The way you can do this in APEX is by using a placeholder text (all 3 examples below) and using no-label (left), or label (middle).

Feature in APEX.

You can also use the JavaScript below to mimic the Persistent Placeholder functionality – but why would you? Both the no-label and label approaches are adequate.

$(document).ready(function() {
  var pageItem = '#P5_P_PLACEHOLDER'
  var $input = $(pageItem);
  var $label = $(pageItem + '_LABEL');
  var originalLabel = $label.text();
  var placeholderText = $input.attr('placeholder');

  $input.on('input', function() {
    if ($(this).val().length > 0) {
      // Change label text to placeholder text while typing
      $label.text(placeholderText);
    } else {
      // Revert label text when input is empty
      $label.text(originalLabel);
    }
  });
});

Example again with all fields filled:

Feature in APEX.

Progress Bar

Forms

Feature within Forms.

APEX

APEX has a Native Percent Progress Bar item that resembles the Forms percent style.

Feature in APEX.

For the Value style, however, you’ll have to use a plugin, of which there are many (here is one such example).

Feature in APEX.

Gauge and Half Gauge

Forms

Feature within Forms.

APEX

APEX delivers these as Chart Regions in the form of Pie and Status Gauge Meter Charts – see here for all Charts (about 25 of them).

Feature in APEX.

Feature in APEX.

Images and Label Push Buttons

Forms

Forms now allows using images and labels simultaneously. The label can be positioned on any one of the four sides of the image.

Feature within Forms.

APEX

APEX prefers to use modern icons with left and right (e.g, the Help icon below) alignment.

Feature in APEX.

It doesn’t support using icon on top out of the box, but with CSS, anything is possible:

Feature in APEX.

#PRINT {
  display: flex;
  flex-direction: column;
  align-items: center;    /* Horizontally centers icon and label */
  justify-content: center;
}

#PRINT .t-Icon {
  margin-bottom: 0.25em;  /* Space between icon and label */
  display: block;
}

#PRINT .t-Button-label {
  text-align: center;
  width: 100%;            /* Ensures label is centered under icon */
}

#PRINT .t-Icon--right {
  display: none;
}

So, if you really want to make your buttons look like something from the 90’s, you can do it!

Feature in APEX.

Just set your button label to something like this:

<span class="u-flex u-align-items-center">
  <img src="#APP_FILES#save-file.png" id="saveIcon" alt="Save Icon">
  <span class="u-margin-left-sm">Save</span>
</span>

Rollover buttons

Forms

By setting a button’s Rollover Color Swap property, the button’s foreground and background colors will switch when the user moves the mouse over the button.

Feature in Forms.

APEX

APEX does this by default.

Normal:

Feature in APEX.

Rolled over:

Feature in APEX.

Do I need to change the rollover color? Not really. But I could if I really wanted to:

Feature in APEX.

#ROLLOVER:hover {
  --a-button-hover-background-color: pink !important;
  --a-button-hover-text-color: black !important;
}

Rollover Image Swap

Forms

Feature in Forms.

APEX

Err, okay. Well there is this Icon Hover animation to push the icon to the side – that’s quite nice.

Feature in APEX.

If you really must… I’ve created some crazy icon swop code for you. Here is the JS (I’m not proud of it):

const btn = document.getElementById('SAVE_FILE_BTN');
const img = document.getElementById('saveIcon');
const defaultSrc = apex.env.APP_FILES + 'save-file.png';
const hoverSrc = apex.env.APP_FILES + 'laptop.png';

btn.addEventListener('mouseenter', () => {
  img.src = hoverSrc;
});

btn.addEventListener('mouseleave', () => {
  img.src = defaultSrc;
});

To be honest… what’s the actual point?

Button Gradient Color

Forms

Feature within Forms.

APEX

Fine, let’s make a horrible-looking button in APEX! 😡

Feature in APEX.

Happy now?

#GRADIENT_BUTTON {
  background: linear-gradient(to bottom, var(--ut-palette-success), var(--ut-palette-success-shade )); /* Green to Light Green */
  color: white; /* Adjust text color for contrast */
  border: none; /* Optional: remove border */
}

Combo Box

Forms

The Combo Box now offers auto completion based on elements in the list.

Feature within Forms.

APEX

The APEX Combobox (note it’s one word) doesn’t offer this. While it does narrow down the results as you type, you have to click on the word (JAMES in this case) to pick it. I imagine there’s some clicking involved for Forms to complete the phrase anyway, but if you really want this exact same feature in APEX, I suggest you log it as an idea.

Feature in APEX.

Spin Box

Forms

A spin box allows the user to spin down to the last record, and spin down again, to return to the first record.

Feature within Forms.

APEX

This feature doesn’t exist in APEX, and if it did, I probably would not use it as I don’t want to confuse my users. If I had to use it, there are plenty of JS examples that I could create an APEX plugin with.

Slider

Forms

The Slider is a new item in Forms. However, it only accepts numbers. So what are those animals doing there? 3 ponies please.

Feature within Forms.

APEX

Slides do not exist as a native Item Type in APEX. However, there are a couple of great plugins for this.

Feature in APEX.

Feature in APEX.

Switches

Forms

Feature within Forms.

APEX

Native in APEX:

Feature in APEX.

Toggle Buttons

Forms

Feature within Forms.

APEX

Native in APEX. You have to select a 2 Column Radio Group and set it to display as a Pill Button.

Feature in APEX.

Feature in APEX.

Feature in APEX.

Glass Buttons

Forms

Feature within Forms.

APEX

Just use a Simple style to make the button transparent:

Feature in APEX.

Feature in APEX.

Graphics

Forms

Feature within Forms.

APEX

I guess you could draw some SVG shapes if you really needed to. Oh, I think I missed one.

Feature in APEX.

<svg width="400" height="120" xmlns="http://www.w3.org/2000/svg">
  <!-- Left set: thin strokes -->
  <ellipse cx="50" cy="60" rx="40" ry="30" stroke="black" stroke-width="2" fill="none"/>
  <rect x="110" y="30" width="60" height="60" stroke="black" stroke-width="2" fill="none"/>
  <line x1="200" y1="20" x2="200" y2="100" stroke="black" stroke-width="2"/>

  <!-- Right set: thick strokes -->
  <ellipse cx="270" cy="60" rx="40" ry="30" stroke="black" stroke-width="6" fill="none"/>
  <rect x="330" y="30" width="60" height="60" stroke="black" stroke-width="6" fill="none"/>
  <line x1="420" y1="20" x2="420" y2="100" stroke="black" stroke-width="6"/>
</svg>

Alerts

Forms

Custom Alerts support up to 1000 characters, an increase from the previous limit of 200. Custom images can now also be used.

Feature within Forms.

APEX

1000 chars you say? With icons?

Feature in APEX.

apex.message.alert(
  "Leeds United has been absolutely phenomenal this season, showcasing a level of skill, determination, and teamwork that has truly impressed fans and critics alike. Their attacking style of play has been both exciting and effective, with players consistently delivering outstanding performances on the pitch. The team's resilience in tough matches and their ability to come back from setbacks demonstrate their strong character and commitment to success. Leeds United's defense has been solid, making it difficult for opponents to break through, while their midfield creativity has been a key factor in controlling games and creating scoring opportunities. The coaching staff deserves immense credit for their tactical acumen and ability to motivate the squad to perform at their best week after week. Fans have been treated to thrilling matches, memorable goals, and a sense of pride that comes from supporting a team that plays with heart and passion. As the season progresses, Leeds United continues",
  function(){ 
    console.log("Alert closed");
  },
  {
    title: "Leeds United",
    style: "information",
    okLabel: "MOT!",
    iconClasses: "fa fa-soccer-ball-o fa-2x"
  }
);

Stacked Canvas Splitter

Forms

Feature within Forms.

APEX

There’s a Splitter Plugin here, which does much more than the Forms feature.

Feature in APEX.

Tab Bar Transparency & Selected Color

Forms

Feature within Forms.

APEX

This is on by default for all Region Display Selectors. I made it pink to stand out (I like pink).

Feature in APEX.

You have to apply a specific CSS styling to make them solid.

Feature in APEX.

.apex-rds-item {
    background-color: bisque;
    border-radius: 3px;
    margin-right: 2px;
}

Use CSS again to change the selected tab color:

Feature in APEX.

.apex-rds-selected {
    background-color: cornsilk;
}

Row Banding

Forms

Use this:

SET_BLOCK_PROPERTY ('EMP', PINSTRIPE1_COLOR, 'r56g248b67');
SET_BLOCK_PROPERTY ('EMP', PINSTRIPE2_COLOR, 'r146g220b255');

You’ll get this:

Feature in Forms.

McDonald?

APEX

You can use CSS if you must:

Feature in APEX.

#EMP .a-IRR-table tr:nth-child(odd) td {
  background-color: #66ff66; /* Bright green for odd rows */
  color: #000;              /* Black text for contrast */
}

#EMP .a-IRR-table tr:nth-child(even) td {
  background-color: #bfefff; /* Light blue for even rows */
  color: #000;
}

Auto-Size Block

Forms

Feature within Forms.

APEX

Well, you can do rows per page:

Feature in APEX.

However, if there are fewer than 5 rows, APEX is not going to draw ridiculous blank lines to fill in the space. However, you can use Headers Fixed to Region to get a fixed height – in my example, I use 300px which gives me a vertical scrollbar.

Feature in APEX.

Feature in APEX.

If you absolutely want filler lines, you can run the following JavaScript after region refresh & fire on initialization, but it looks daft. In the picture below, the SQL shows 7 rows, but the JavaScript tops it up to 10 blank rows, which is the number of rows per page.

Feature in APEX.

(function() {
    var regionId = "EMP"; // Replace with your IR static ID
    var $table = $("#" + regionId + "_ir .a-IRR-table");

    // Get the first DATA row (skip headers in tbody)
    var $dataRow = $table.find("tbody tr")
                        .not(".a-IRR-header-row, .a-IRR-group-header") // Exclude headers
                        .has("td") // Ensure row contains data cells (td)
                        .first();

    if ($dataRow.length) {
        var ir$ = apex.region(regionId).widget().interactiveReport("option");
        var currentRowsPerPage = ir$.currentRowsPerPage;
        var currentRowCount = $table.find("tbody tr").not(".a-IRR-header-row").length;
        var rowsToAdd = currentRowsPerPage - currentRowCount + 1;

        if (rowsToAdd > 0) {
            // Clone the data row and convert any <th> to <td>
            var $blankRow = $dataRow.clone();
            $blankRow.find("th").replaceWith(function() {
                return $("<td>").html("&nbsp;");
            });
            $blankRow.find("td").html("&nbsp;"); // Clear content

            // Add blank rows
            for (var i = 0; i < rowsToAdd; i++) {
                $table.find("tbody").append($blankRow.clone());
            }
        }
    }
})();

Tiling

Forms

Look, there’s a guy here called Christ! 🙏

Feature in Forms.

BTW, Christ also makes an appearance on page 24 about treating Dry Eye Disease.

APEX

Cards, as they are known, are pretty much bread and butter for APEX apps.

Feature in APEX.

Feature in APEX.

REST

Forms

Using a new Form Builder REST Package Designer (RPD), special Forms Program Units are generated that allow the application developer to access a REST service from Forms PL/SQL.

Feature in Forms.

APEX

You can build your own movie app built on the The Movie Database (TMDB) REST API by following this guide.

Feature in APEX.

Other Features

I’ve skipped the remaining features as they are based on the Builder, Runtime, FSAL or Launcher features of Forms. But you are welcome to read about all the new features.

Summary

You could say: that’s a lot of APEX CSS & JS for something that’s now out of the box for Forms. However, I don’t really want, or need, to recreate these features in APEX. Maybe the Row Banding would be nice out of the box for APEX… but it’s impossible for me to think of one of those features as something that I simply have to have in APEX right now.

The use of CSS & JS actually expands what APEX provides to perform custom enhancements that would be really challenging to do in Forms.

It seems like there has been an attempt to modernize in Forms 14 with some improved inputs & components that resemble web applications. I would say that these changes are welcome, although I have to disagree with some of the color choices, use of gradients, and 90’s style images. In APEX, modern theme styles are provided, so you can change the colors and effects, but gradients are out!

Maybe it’s just me, but it seems alternative names have been chosen… Cards are a standard component, but Forms calls them Tiling. In the web world, we call it Transparent, in the Forms world, it’s a Glass Effect.

The webinar I mentioned in the introduction explains why APEX is the best option for modernizing your Forms application. Heck, APEX even has AI-assisted development. What’s not to like? So, perhaps 2025 really is the high time to migrate your Oracle Forms application to APEX

If you are considering a Forms to APEX redevelopment project, we have a tool that accelerates the process, so please get in touch with us. You can write to hello@pretius.com or simply use the contact form below.

And if you’re interested in more APEX-related content, check out some of my other articles on this blog:

  1. SQLcl Project Reference: A summary of everything you need to know
  2. Oracle 23c Free Docker, APEX & ORDS – all in one simple guide
  3. APEX User Interface Defaults: A deep dive into Table Dictionary and Attribute Dictionary
  4. Globalization in APEX: A deep dive into Multi-Language and Locales
  5. Sorting in APEX: A deep dive into Classic Reports and Card Regions
Share