How to enable scrolling in Forms Developer Object Navigator

Since I started developing Oracle Forms within the Forms Developer there has always been an issue that was quite annoying: The fact, that srolling in the object navigator is not possible. But there is a tool out there, which enables additional mouse support called KatMouse. It provides universal mouse scrolling – here the link to download the tool:

After the installation and start of KatMouse it is possible to use the mouse wheel in the Forms Developer which is not a big deal – but it makes life easier. Thanks to my colleague Peter Kopac for the hint.

Start options in Oracle Forms 12c

So I’ve read quite a lot of blog entries and news regarding Oracle Forms 12c in the last weeks since the release. It is nice to hear and see that Oracle Forms still is not dead.
The release brought some nice features with it. Today I would like to have a look at the different start options, that are now available.

Embedded Java applet

The standard start in the last couple of years. So its still possible to call your form application through the Java plugin embedded in html. Just create a new section in the formsweb.cfg. The parameters for the standard behaviour are:



There is also an option to embed JNLP in html:


Both options require a Java Plugin and a browser.

Java Webstart

This method of starting a Formsapplication is not new. But whats new is the fact that Oracle now supports this option. Since more and more browsers stopped or will stop supporting the NPAPI-Plugin this step was neccessary. Google Chrome already stopped the support, Firefox will support the plugin until December 2016. Microsoft still supports it in the Internet Explorer 11, while Edge does not.
So if you want to use webstart, just copy following lines into your configuration section:


Afterwards you can open your application through entering following URL:


You will be asked to open a file (frmservlet). Just open it and you should get the following screen – you need to have a JRE installed for that.


There are some facts that have to be considered when using the webstart (copied from Michael Ferrante’s PPT):

  •  Limited SSO support (requires
    browser). SSO cookie will not be shared
    with browsers launched from Forms.
  •  No support for SSO Logout or Java
    Script Integration.
  •  Requires either JDK or Java Plugin (JRE).
  •  Browser optional (required with SSO).
  •  Presents application with native


There is a new standalone option. For that you have to download the Oracle Forms Stand-alone Luncher(FSAL). A howto is to be found on your server environment under:


I did not have the time to fully test this option but here is what Michael Farrante stated in his Oracle Open World 2015 presentation:

  • No support for SSO, SSO Logout or Java
    Script Integration.
  • Requires either JDK or Java Plugin (JRE)
  • Browser not required.
  • Presents application with native
  • Example page available at:

This option shall offer “a browser-less, more client/server-like interface”.

Oracle Forms 12c BI Publisher Integration

Today I started to have a look at the possibilities of integrating the BI Publisher in Forms 12c.


Sadly I didn’t find anything regarding this topic in the online documentation – so I created a report object and had a look at the properties.

We found out, that there are several new properties in the report object. So I created a forms module with a simple button and tried to call a BI-Publisher Server. As expected, my first try was not successful – I got an “FRM-41223: BI Publisher integration error”. So I had a look at the online help under “SET_REPORT_OBJECT_PROPERTY” to see if there are any new properties – and yes there are quite a lot new BI-Properties:

  • BIP_SSL_CONNECTION: Indicates whether or not SSL is mandatory or optional.
  • BIP_SERVICE_LOCATION: The URL to the Oracle BI_Publisher server Web Services WSDL for ScheduleServices.
  • BIP_REPORT_PATH: The absolute path to the report to be run (on the BI_Publisher server).
  • BIP_REPORT_LOCALE: Preferred report locale.
  • BIP_REPORT_FORMAT: Desired report output format.
  • BIP_REPORT_TEMPLATE: A template registered with the report specified in BIP_REPORT_PATH. It is common practice to provide this property along with report name/path but BI-Publisher gives the option of setting a default value when creating/editing a report, therefore this is an optional property in Forms. Value is used and validated by BI-Publisher.
  • BIP_REPORT_PARAMETERS: A list of name/value pairs separated by a space.
  • BIP_USER: The BI-Publisher username required to access the Web Service. This value cannot be set in the Property Palette.
  • BIP_PASSWORD: The BI-Publisher user password required to access the Web Service. This value cannot be set in the Property Palette.
  • FTP_SERVER: FTP server name as configured in BI-Publisher.
  • FTP_SECURED: Determine if FTP will be secured (i.e. SFTP) or unsecure.
  • FTP_USER: FTP server username.
  • FTP_PASSWORD: FTP server user password.
  • FTP_FILE_NAME: Output file name to be stored on FTP server.
  • FAX_NUMBER: Fax number. Format as required by your server configuration.
  • FAX_SERVER: Name of Fax server as configured in BI-Publisher.
  • MAIL_TO: The mailto email address.
  • MAIL_FROM: The mailfrom email address.
  • MAIL_CC: The mailcc email address.
  • MAIL_BCC: The mailbcc email address.
  • MAIL_REPLYTO: The replyto email address.
  • MAIL_SUBJECT: The email subject string.
  • MAIL_BODY: The email body string.
  • MAIL_SERVER: Name of the email server (SMTP) configured in BI-Publsher.
  • LOCAL_FILE_NAME: Absolute path and filename of the output file.
  • PRINT_COPIES: Number of copies to print.
  • PRINT_ORIENTATION: Page orientation.
  • PRINT_RANGE: Page range to print.
  • PRINT_SIDE: Enable two-sided printing. This setting will be ignored if the target printer does not support two-sided printing
  • PRINT_TRAY: The tray number. If you do not specify this option, the default media of the target printer will be used. It will be ignored if the target printer doesn’t support the media option.
  • PRINTER_NAME: Printer name on the BI-Publisher host to send the documents to.
  • WEBDAV_AUTH_TYPE: The authentication type.
  • WEBDAV_USER: The WebDAV username.
  • WEBDAV_PASSWORD: The WebDAV user password.
  • WEBDAV_FILE_NAME: The remote filename.
  • WEBDAV_SERVER: The WebDAV server name.

After setting the properties BIP_USER & BIP_PASSWORD I was able to run the BI-Report:3

First impressions of Oracle Forms 12c

So after downloading the files for the installation of Oracle Forms & Reports I started the installation of the Weblogic Server and Forms & Reports. The installation of the weblogic server is pretty self-explanatory.

After that I started the installation of Forms & Reports itself. Then I wanted to start the configuration, just to find out that with 12c you need to install the Oracle Repository with at least following components:

  • Oracle Platform Security Services
  • Audit Services
  • Audit Services Append
  • Audit Services Viewer

So you have to jump to “oracle_common\bin” and start the rcu.bat to get the installation of the repository started. After that you are able to start the configuration of Forms & Reports with config.cmd under “oracle_common\common\bin”. A complete documentation of the installation can be found here:
The first thing you will notice when starting the EM and console is the different design:


I also had the subjective feeling, that the EM and the console both acting faster as in 11g.

When I had a look at the formsweb.cfg I saw, that Oracle hold the promise of giving us an easy way to implement webstart, since more and more browser stop supporting the NPAPI-Plugin.


I found a default webstart section and tried to start the test.fmx with this configuration; and it worked! So webstart seems to work now with not much configuration effort. If you want to try it yourself, just use following URL in your installation:


Oracle Forms 12c released!

Today Oracle Forms 12c was finally released  – as you can see in Michael Ferrante’s Twitter post, who is the Product Manager for Oracle Forms:

Check out the Oracle Forms Product Page, where you can find the Release for download:

So if your application is still running in an version prior to Release 11gR2 you now should really consider to upgrade to be able to use 12c and its features soon. I will download & install 12c in the next days and tell you here what my experience was like.

Useful Resources for ADF Beginners

Autumn is coming and its time to get some lecture for the cold days that are ahead – at least thats what I did to get to know ADF. So in this post I would like to give you some recommendations if you also plan to learn ADF. Since I am new to ADF I asked colleagues and looked around myself to get to know the framework.

Like many I started with reading Grant Ronalds’s book “Quick Start Guide to Oracle Fusion Development” which gives you the basic ideas behind ADF, but as the author and the title states it is a “quick start” and the aim of the book is not to “hold your hand through every keypress”. So if you want dive directly into ADF or to understand the bases, this book is what you are probably searching for. The book uses the OE (Oracle Entry) schema that is available in Oracle databases.

If you search for a complete guided learning path, I would recommend Oracle ADF Real World Developer’s Guide which explains in details how to use ADF business components, task flows and EJBs etc. It is illustrated with many pictures and explanations. I especially like the way the author explains, how the ADF components work together. This book uses the HR schema that is also shipped with Oracle databases.

Also the the ADF Insider Essentials on youtube are worth looking at. They provide a step by step introduction to ADF. So if you don’t need a book in your hands, this channel is a good start.

If you you can recommend any books or know where to find materials & tutorials – please leave a comment.

How to Download JDK and JRE 7 From My Oracle Support

“IMPORTANT: Downloading JDK and JRE 7 from My Oracle Support requires an account with My Oracle Support.

As of July 14, 2015, JDK 7 and JRE 7 are no longer available for public download. Although the latest version of Oracle Forms, version (11gR2) is supported to use JRE 8, it is currently NOT supported to use JDK 8 for Oracle Forms and Reports 11gR2 as well as for other Fusion Middleware products such as ADF (11g and 12c) and OHS (11g and 12c). However, as public downloads for Java 7 are no longer available, there are only two options to download JDK 7.

One method (requires an Oracle account) is to use the Oracle Java Archive:

The second method involves downloading the JDK and JRE from My Oracle Support. The following steps will explain how you can download the latest JDK and JRE 7 from My Oracle Support:

  1. Log into using your My Oracle Support account.
  2. Go to Patches & Updates
  3. Search for the following patches:
    1. JDK/JRE 7u79: 20418638
    2. JDK/JRE 7u80: 20418657
    3. Specify the OS platform of your server environment


Select the Patch number on the left side of the table

Click “Download”

Click the name of the zip file to download it.

Once the JDK and JRE are downloaded, you should be able to find both the JDK and the JRE for the particular OS you selected.”

Thanks to Scott Symonds!

via How to Download JDK and JRE 7 From My Oracle Support – PITSS US – Oracle Forms Upgrade, Forms to ADF, Forms to APEX, Migration.

Java Webstart with Forms – jp2lauchner.exe workaround

Note: If you are searching for webstart in Forms 12c please have a look here.

Many Oracle Forms customers, which already did the migration to the latest Forms version ( from 6i or earlier have realized, that the new applet in which their application is now running is in some situations not that comfortable. Especially the Browser bar is maybe annoying.

Also in some cases we found out, that there is a misbehaviour in Forms 11g – the focus on the forms application is lost. For some users this can be really nasty, especially if the application is used heavily with the keyboard and speed is essential. By the way Google will cancel the NPAPI support for its Browser Chrome – other vendors could follow. So webstart is discussed as an alternative for Forms, since it relying on the use of the Java plugin.

So there is the Java Webstart feature in the JRE since version 1.4.2, which can be also used with Forms (since it is running in an applet).

So you need to create a JSP file with the correct parameters. I will not describe how to do that in this article (You can find a description here)

But if you try this, you will see some problems. First you cannot change the sizing of the application. Second if you close the UnbenanntFormsapplication or the Java Webstart window itself the corresponding processes in windows will still be executed. They transform into kind of a “zombie process”. So what to do? Well for the first part, there is a simple solution. You do not want to change the JSP file, every time you want to change the sizing. So you add parameters to your JSP-file and simply pass them at the startup of the application.

The second part is a little bit tricky. Here you have two options. First you could start the webstart from a prestart form with a webutil_host command and remember the process-ID:

v_command := ‘powershell $pclass = [wmiclass]”root\cimv2:Win32_Process”; $pclass.Create(”C:\Progra~2\Java\jre1.8.0_40\bin\javaws.exe -wait http://vmdaka:9001/webstart_11g/pitss.jsp&#8221;, ”.”, $null).ProcessId 2>&1;”exit”’;

v_prozess_id := webutil_host.NonBlocking(v_command);

So here I used powershell, to write the process information into stderr. With following commandI am able to load the stderr into Oracle Forms:


So now we can implement a KEY-EXIT Trigger a webutil_host command with a kill command and the corresponding process ID.

Another possible and in my opinion smarter solution is the use of a JavaBean, with which we can get the process id from the applet itself. For that you have to create your own Java Bean that inherits the frmall.jar. Please find a tutorial how you can create your own Java Bean for Forms here

Once you created your bean, you can use following code to determine the process id of your webstart session to be able to kill the process correctly:

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();

With this id you can also kill the jp2launcher.exe on the client side – you have to implement the Bean in your Forms and add the invokation of the bean to receive the Applet process ID. So you can use the POST-FORM-TRIGGER with a webutil-command to shut down the process completly.

If you need assistance feel free to have a look here or to leave a comment under this article.

From Forms Legacy systems to SOA Suite 12c and Mobile


In modern application development it is propagated to use webservices and even use certain tools like the Oracle SOA Suite or Oracle Service Bus to manage and orchestrate webservices in a central environment or to enable service abstraction. But many Oracle Forms developers find it hard to use these methods in their application and other applications to reuse the existing business logic by deploying a webservice. But since there is a significant raise in mobile enablement, also legacy systems like Oracle Forms applications should benefit from generating webservices.

“Application infrastructure and middleware
projects are becoming the cornerstone of the
digital business.”

Fabrizio Biscotti
Gartner Research, 2014

The main problem that Oracle Forms developers face when you ask them to implement SOA into their applications or build webservices based on logic on source code from Forms, is the fact that SOA is a paradigm – it’s not a technology or a product – it is a concept. And it is different from the concepts on which legacy systems base on.

Also do Oracle Forms applications tend to be monoliths, where it is hard and time consuming to identify the business logic and move this logic to the database and build a webservice on top. A second problem is often to first identify code, that really is a key process in a application, meaning which is used heavily and for which it would make sense to build a webservice.

The Oracle SOA Suite and especially the Service Bus enables Developers to publish, manage & orchestrate webservices. Keywords here are mobile & cloud enablement – but also it is easier to switch technlogies when using webservices, especially in the SOA Suite. Oracle Forms is able to consume webservices. So if we have a way to record the business logic that is used much often in our Oracle Forms application, convert it to a webservice and deploy it on the Service Bus we would be able to consume this logic in other technologies. This is where PITSS.CON comes into play. With the use of a database repository, where it is possible to load the whole Forms Application into, analyze it and record certain processes into a backlog called user stories, PITSS.CON is able to transform logic from Forms into the database and make it accessible for the Oracle SOA Suite. So those two products harmonise very well together.orders

In this article I would like to show you, how to do so. As a example I took “orders.fmb” demo. You can see the runtime screen above. Basically this form displays orders and the corresponding customers when clicking on “customer information”. I would like to extract this logic from the fmb.

Recording of User Stories

As part of the solution PITSS.CON was used to identify the business logic by injecting an image1Oracle Forms application with a logging mechanism called “user stories”. But before that we did several steps within the tool to get rid of the unused & redundant code – because we don’t want to generate a webservice for code that is not in use anymore or redundant. While PITSS.CON is a repository based application, it is possible to easily identify redundant code through the comparison of program units. Dead code can be found when searching for program-units that are not called by any Trigger. After we have done that, it is much easier to concentrate on the “used code”. But how is it possible to identify code, that is used in applications and central to them? PLSQL-injection is the keyword here. With PITSS.CON we can easily inject all triggers and program-units of an application.image4 The injection is basically a logging mechanism which writes the callings in a application into a logging table. Afterwards this log table is evaluated by PITSS.CON. So we get a connection between the development tool PITSS.CONimage3 and the processes that the application users utilise the most in the application. We enable the users to record their daily work processes.

Business Logic to database

image5With these information we are able to manipulate the application. So we have the whole application loaded into the repository and we know exactly which objects are used – so we create this process as a subset of our application and move the logic to where we want – either another technology or the database. In this example
we moved the logic to the database. This can be done with the PITSS.CON module “Business Logic to DB”. Here it’s possible to select a program-unit or trigger and calculate the dependencies that occur, when moving an object to the database. Also a complete flow can be moved. PITSS.CON gives certain information on how easy it is to move the process to the database. If In our case we want to transfer a whole flow to the database – we check the metrics and click on “transfer objects to DB”. image6We will then be asked in which package we would like to add the procedures and PITSS.CON will automatically build a package with the given procedures – also it will insert the necessary parameters from form variables or objects so that the procedures will work correctly. After this step we will get the following source code, so that we can create the package on the application database.

Create SOA Application

Now we can build a webservice on top of this package. For that I used the ability of the Oracle SOA Suite and built a Webservice based on the newly created db-package with an adapter. An db-adapter in the SOA Suite is a basically a webservice, which is wizard based and gives us an easy access to the database package. On the picture below, you can see the outcome of the new created db-adapter on the right side: getCustomerID is a SOA Suite adapter, which is based on the database package that was created earlier with PITSS.CON.

I just added a mediator component to create a value mapping and the SOA Suite created a webservice (SOAPService) which can be consumed by another technology. Here the Oracle Mobile Application Framework (MAF) was used to use the webservice from the SOA Suite. After that, the SOA application was deployed on a Oracle Weblogic Server.

Consume webservice in MAF

So basically the process of getting Customer information was recorded with PITSS.CON from the good old Forms module “Orders.fmb”, moved to the database and a webservice adapter was created via the SOA Suite. With the help of a Mediator component we achieved a value mapping and finally we’ve built a mobile application on top of the SOA application. So here is our simple mobile application, which gives us customer information on our mobile device:

image9image8So now we got the logic in the database. Whenever we want to change something on the logic we just have to change the db-package. We could also implement the webservice into our Forms application. But that is a topic for another blog article.