Skip Headers
Oracle® Fusion Middleware Release Notes
11g Release 1 (11.1.1) for Oracle Solaris

Part Number E14772-32
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Master Index
Master Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
PDF · Mobi · ePub

31 Oracle Forms

This chapter describes issues associated with Oracle Forms. It includes the following topics:

Note:

This product is not supported on Oracle Solaris on x86-64 (64-Bit).

31.1 General Issues and Workarounds

This section describes general issues and workarounds. It includes the following topics:

31.1.1 Backwards Compatibility with Earlier Releases

Included per bug xxxxxxx.

For information about upgrading from Forms 6i, see the "Upgrading to Oracle Forms Services 11g" chapter in Oracle Fusion Middleware Forms Services Deployment Guide. For information about changed or obsolete features, see the Oracle Forms Upgrading Oracle Forms 6i to Oracle Forms 11g Guide.

For upgrading from Oracle Forms 10g and prior releases, you can use the Upgrade Assistant. For more information, see the Oracle Fusion Middleware Upgrade Planning Guide and Oracle Fusion Middleware Upgrade Guide for Oracle Portal, Forms, Reports, and Discoverer.

Additional information about backwards compatibility is included in My Oracle Support Note 113987.1 at: http://myoraclesupport.oracle.com

Regardless from which version of Oracle Forms you are upgrading, you will need to recompile your applications and restart Oracle Forms.

Included as per bug 8205313, relnote bug 8296697

When using Forms Builder with JAWS, the shortcut keys Ctrl+Insert to create items are not working.

As a workaround, use the menu-mnemonics. Use Alt+e to open the Edit menu, then r to choose Create to create items.

Included as per bug 8362393

When Forms and Reports are configured in different instances, set the correct ORACLE_HOME and ORACLE_INSTANCE values at the shell and invoke the Forms Builder from the shell rather than from the Windows shortcut menu, otherwise invoking the Reports Builder from within the Forms Builder fails.

Included per bug 3219595

Included per bug 8453101

Before restarting the Oracle WebLogic managed server, all the JVM Controller processes (dejvm) started by that server must be stopped. Otherwise, WLS_FORMS will not restart after a shutdown.

Included per bug 8466820

When two Oracle instances with Forms Services are configured, using a single ORACLE_HOME on a Windows machine, then the FORMS_ORACLE_INSTANCE registry entry of the second ORACLE_INSTANCE takes precedence. It is recommended that the Forms Builder component is configured in the second ORACLE_INSTANCE.

Included as per bug 8978516

Oracle Forms from the first installation does not run by default on a Windows machine with more than one version of Forms. This is because when Fusion Middleware is installed on Windows, the new $ORACLE_HOME/bin is added to the beginning of the system variable PATH. Subsequent installations result in addition of $ORACLE_HOME/bin to the beginning of the system variable PATH. To run the prior installed versions, as a workaround, edit the system variable PATH. Move the $ORACLE_HOME/bin that you want to use to the front of the variable PATH.

31.1.2 Linux/UNIX Issues and Workarounds

This section describes issues related to Oracle Forms and Linux/UNIX. It includes the following topics:

31.1.2.1 LD_PRELOAD Setting Required for Signal Chaining Facility

The LD_PRELOAD setting in default.env is required for the working of signal chaining facility in JVM version 1.5 and later. If you are creating or using other environment files, the setting in the environment file for LD_LIBRARY_PATH and LD_PRELOAD must be the same as in default.env.

31.1.2.2 Check the Reports Engine Logs for FRM-41214

If you encounter the Forms error FRM-41214:Unable to run report when trying to run Reports from a Forms session, check the Reports engine logs for more details on the error.

31.1.2.3 Forms Builder Does not Launch on Linux RHEL5

When attempting to launch Forms Builder using the command frmbld.sh in $ORACLE_INSTANCE/bin/, the following error message is displayed:

$ORACLE_HOME/bin/frmbld: error while loading shared libraries: libXm.so.3: cannot open shared object file: No such file or directory

As a workaround, create a symlink named libXm.so.3 to libXm.so.4 in ORACLE_INSTANCE/bin/xm and add it to the LD_LIBRARY_PATH. Or install OpenMotif package using the command rpm -i openmotif22-2.2.3-18.i386.rpm

31.1.2.4 Changing User Permissions

The 11g installation sets the permissions of the files so that only the user who installed 11g can run the executables. Refer to the document Setting Developer Tools Permissions on Unix at http://www.oracle.com/technology/products/forms for instructions on changing permissions for other users to allow execution of the Forms development tools.

31.2 Configuration Issues and Workarounds

This section describes configuration issues and their workarounds. It includes the following topics:

31.2.1 Non-Internet Explorer Browser Proxy Settings when Using One-Button-Run

If you encounter a FORBIDDEN error when using One-Button-Run with any of the supported browsers other than Internet Explorer, verify if 127.0.0.1 (localhost) is in the proxy settings for your browser. If 127.0.0.1 is not in the exceptions list, then add it. This ensures that the browser will bypass the proxy server.

31.2.2 WebUtil Client Files Allow Configuration of Destination Directory

WebUtil downloads install.syslib libraries into the bin directory of the JRE or JVM on Windows and into the lib directory of JRE on Linux. This location can be specified in the parameter install.syslib.location.client.<OS> = <Path on client machine> (where <Path on client machine> represents the path to the location where libraries used on the client by WebUtil are stored and is either absolute or relative to client user home) in webutil.cfg.

31.2.3 webutil.properties Files Renamed for Different Libraries

When install.syslib libraries are downloaded, WebUtil creates the webutil.properties file which is located in the client user home. Different webutil.properties files are maintained on client side to allow different servers to download and manage their libraries on client. The files are named webutil.<HOST>.<CONFIG>.properties on the client, where HOST is the server computer name and CONFIG is the name of configuration section in formsweb.cfg.

31.2.4 Forms does not Work with JDK 1.6.0_12 on Client with WinRunner

Forms does not run when using JDK 1.6.0_12 and later versions on a client that also has WinRunner installed.

As a workaround, rename the two environment variables _JAVA_OPTIONS and JAVA_TOOLS_OPTIONS. For example, rename them to test_JAVA_OPTIONS and test_JAVA_TOOLS_OPTIONS. This will disable WinRunner but allows Forms to run.

31.2.5 JavaScript Communication Does not Work in IE for Framed HTML File

JavaScript communication does not work in framed HTML file that is opened in Internet Explorer 7, or in Internet Explorer 8 with file:// protocol.

As a workaround, use the IP address instead of the machine name in the URL for the frame. For example in testform.htm, change:

<frame noresize="noresize" 
 src="http://testform.us.oracle.com:8888/forms/java/js2frm1.html" name="fr2" 
 frameborder="0"> 
   <frame noresize="noresize" 
 src="http://testform.us.oracle.com:8888/forms/frmservlet?play=&record=forms& 
 form=js2frm1&userid=scott/tiger@adt10220" name="fr1" frameborder="0">

to

<frame noresize="noresize" 
 src="http://<IP address>:8888/forms/java/js2frm1.html" name="fr2" 
 frameborder="0"> 
   <frame noresize="noresize" 
 src="http://<IP address>:8888/forms/frmservlet?play=&record=forms&form=js2fr 
 m1&userid=scott/tiger@adt10220" name="fr1" frameborder="0">

31.2.6 JavaScript Events Calling Forms Applications in a Safari 5 Browser Do not Work

When using JavaScript integration with a Forms application in a Safari 5 browser on Windows, the communication from Forms to JavaScript running in the browser works; however, the calls to the applet from JavaScript do not work.

As a workaround, perform the following:

  1. Ensure you are using base.htm.

  2. In base.htm, delete the <NOSCRIPT></NOSCRIPT> tags that are wrapping the <APPLET> tag.

31.3 Documentation Errata

This section describes documentation errata. It includes the following topics:

31.3.1 Passing userid in Secure Mode

The following information on passing userid in secure mode must be added to Oracle Forms Builder online help.

Passing userid as an argument when using the Forms compiler (frmcmp or frmcmp_batch) may lead to security risks. In addition to the interactive dialog mode already available, the compiler can now accept the connect string via standard input. To pass the userid in a secure mode, perform the following:

  1. Set the environment variable FORMS_STDIN_PASSWORD to 1.

  2. Run the compiler without any connect string. Enter the connect string after the compiler has started.

  3. Run the compiler using redirection to pass the password to the compiler. (This is especially useful in compiling several Forms in a script.) For example:

    #!/bin/sh
         echo "Enter userid"
         read -s myuserid
         for i in 'ls *.fmb'
         do
         echo Compiling Form $i ....
         frmcmp_batch.sh batch=yes module=$i module_type=form compile_all=yes <<<
              "$myuserid"
         done
    

Note that this script is a sample that tries to protect the password, but on some platforms and configurations it may still lead to security risks.

31.3.2 JDAPI Programming Example

The JDAPI Programming Example in the Forms Developer Online Help must be updated to the following code:

import java.io.File; 
import java.io.PrintWriter; 
import java.io.FileWriter; 
import java.text.MessageFormat; 
 
import oracle.forms.jdapi.*; 
 
/** 
* Dumps passed forms JdapiObjects to an output stream as text. 
* 
* Set command line options for more output, else only the 
* basic form tree structure will be dumped. 
* 
* See printUsage for command line options. 
*/ 
public class FormDumper 
{ 
/** 
* Need this to parse the command line options 
* 
* The string represents valid command options as detailed in the 
* Getopt class 
*/ 
 
boolean m_dumpAllProps = false; 
boolean m_dumpBoolProps = false; 
boolean m_dumpNumProps = false; 
boolean m_dumpTextProps = false; 
boolean m_dumpPropNames = false; 
String m_dumpPath = null; 
/** 
* Output stream, default to STDOUT */ 
private PrintWriter m_out = new PrintWriter(System.out, true); 
 
/** 
* Use this to indent children 
*/ 
private String m_indentation = ""; 
 
/** 
* Constructor 
*/ 
public FormDumper() 
{ 
 
} 
 
/** 
* Special constructor that does not take command line arguments. 
* 
* @param out The output writer where to send dump information. 
*/ 
public FormDumper(PrintWriter out) 
{ 
m_out = out; 
m_dumpAllProps = true; 
m_dumpBoolProps = true; 
m_dumpNumProps = true; 
m_dumpTextProps = true; 
m_dumpPropNames = true; 
} 
 
/** 
* Set the dump path. 
* 
* @param path The file where the dumper must send the information 
*/ 
public void setDumpPath(String path) 
{ 
m_dumpPath = path; 
} 
 
/** 
* Indirect output 
*/ 
public void println(String s) 
{ 
m_out.println(s); 
} 
 
/** 
* Dump a form to the output stream 
*/ 
public void dumpForm(String filename) 
throws Exception 
{ 
FormModule fmb = FormModule.open(filename); 
System.out.println("Dumping module " + fmb.getName()); 
 
if (m_dumpPath != null) 
{ 
// use this form's FILE name to name the dump file 
String thisFormName = new File(filename).getName(); 
thisFormName = thisFormName.substring(0, (thisFormName.length()-4)); 
StringBuffer dmpFilename = new StringBuffer(); 
dmpFilename.append(m_dumpPath); 
 
if (!dmpFilename.toString().endsWith("/")) 
{ 
dmpFilename.append("/"); 
} 
dmpFilename.append(thisFormName); 
 
m_out = new PrintWriter(new FileWriter(dmpFilename.toString()), true); 
} 
 
// Call the actual 'dump' method 
dump(fmb); 
 
// Dump the coordinate system used by the module 
m_indentation = " "; 
dump(new Coordinate(fmb)); 
m_indentation = ""; 
println("Dumped " + fmb.getName()); 
 
// Close the module 
fmb.destroy(); 
} 
 
/** 
* Recursively dump a forms JdapiObject and its children to the output stream 
*/ 
protected void dump(JdapiObject jo) 
{ 
String className = jo.getClassName(); 
 
// print out a context line for the JdapiObject 
// If it is a coordinate system, it does not have a name 
 
if(className.equals("Coordinate")) 
{ 
println(m_indentation + "Coordinate System "); 
} 
else 
{ 
println(m_indentation + className + " " + jo.getName()); 
} 
 
// Property classes need special treatment 
if(className.equals("PropertyClass")) 
{ 
dumpPropertyClass((PropertyClass)jo); 
} 
else // Generically dump the required property types only 
{ 
if (m_dumpTextProps) 
{ 
dumpTextProps(jo); 
} 
if (m_dumpBoolProps) 
{ 
dumpBoolProps(jo); 
} 
 
if (m_dumpNumProps) 
{ 
dumpNumProps(jo); 
} 
// Additionally, dump any Item list elements 
if(className.equals("Item")) 
{ 
dumpListElements((Item)jo); 
} 
} 
 
// use Form's metadata to get a list of all the child JdapiObjects this 
JdapiObject can have 
JdapiMetaObject meta = JdapiMetadata.getJdapiMetaObject(jo.getClass()); 
JdapiIterator props = meta.getChildObjectMetaProperties(); 
JdapiMetaProperty prop = null; 
JdapiIterator iter = null; 
JdapiObject child = null; 
 
// loop through every possible kind of child JdapiObject this JdapiObject 
//can have 
while(props.hasNext()) 
{ 
prop = (JdapiMetaProperty)props.next(); 
// only bother if we can access these JdapiObjects 
if(!prop.allowGet()) 
{ 
continue; 
} 
 
// get the actual values for the current child JdapiObject type, 
// e.g. get the Items on a Block 
iter = jo.getChildObjectProperty(prop.getPropertyId()); 
 
// null is returned if there are no property values 
if(iter != null) 
{ 
// loop over every child value 
while(iter.hasNext()) 
{ 
child = (JdapiObject)iter.next(); 
// recursively navigate to it 
m_indentation += " "; 
dump(child); 
if(m_indentation.length()>2) 
m_indentation = m_indentation.substring(0, m_indentation.length()-2) 
; 
} 
} 
} 
} 
/** 
* Dump list elements 
* 
* The JdapiObject is an item; if it is a list item, 
* dump the list elements. 
* 
* @param item 
*/ 
private void dumpListElements(Item item) 
{ 
if( item.getItemType() == JdapiTypes.ITTY_LS_CTID) 
{ 
if (m_dumpPropNames)
 { 
println(m_indentation + "dumping list elements"); 
} 
for(int i = 1; i <= item.getListElementCount(); i++) 
{ 
String label = item.getElementLabel(i); 
String value = item.getElementValue(i); 
println( m_indentation + " " + i + ": '" + label + "' '" + value + "'"); 
} 
} 
} 
/** 
* Dump the property class properties
 */ 
private void dumpPropertyClass(PropertyClass pc) 
{ 
String propertyVal = null; 

// test for every single possible property 
// this is a bit hacky :) 
for(int propertyId = 1; propertyId < JdapiTypes.MAXIMUM_PTID; ++propertyId) 
{ 
if(!pc.hasProperty(propertyId))
{ 
continue; // this property is not in the set 
} 
if(pc.hasDefaultedProperty(propertyId) && !m_dumpAllProps) 
{ 
continue; 
} 
Class pt = JdapiMetaProperty.getPropertyType(propertyId); 
if(pt == Boolean.class) 
{ 
if(m_dumpBoolProps) 
{ 
propertyVal = String.valueOf(pc.getBooleanProperty(propertyId)); 
} 
} 
else if(pt == Integer.class) 
{ 
if(m_dumpNumProps) 
{ 
propertyVal = String.valueOf(pc.getIntegerProperty(propertyId)); 
} 
} 
else if(pt == String.class) 
{ 
if(m_dumpTextProps) 
{ 
propertyVal = pc.getStringProperty(propertyId); 
} 
} 
if(null != propertyVal) 
{ 
if (m_dumpPropNames) 
{ 
println(m_indentation + " " + JdapiMetaProperty.getPro 
pertyName(propertyId) + " " + 
propertyVal); 
} 
else 
{ 
println(m_indentation + propertyVal); 
} 
propertyVal = null; 
} 
} // End loop over every property 
} 
/** 
* Dump the source JdapiObject text properties 
*/ 
private void dumpTextProps(JdapiObject jo) 
{ 
JdapiMetaObject meta = JdapiMetadata.getJdapiMetaObject(jo.getClass()); 
JdapiIterator props = meta.getStringMetaProperties(); 
// for each text property 
while(props.hasNext()) 
{ 
JdapiMetaProperty prop = (JdapiMetaProperty) props.next(); 
int propertyId = prop.getPropertyId(); 
String propertyVal = null; 
try 
{ 
propertyVal = jo.getStringProperty(propertyId); 
} 
catch(Exception e) 
{ 
println(m_indentation + "Could_not_get_property " + 
JdapiMetaProperty.getPropertyName(propertyId)); 
continue; 
} 
if ( jo.hasProperty(propertyId) 
&& (m_dumpAllProps || !(jo.hasDefaultedProperty(propertyId)) ) ) 
{ 
if(m_dumpPropNames) 
{ 
println( m_indentation + " " + JdapiMetaProperty. 
getPropertyName(propertyId) + " " + 
propertyVal); 
} 
else 
{ 
println(m_indentation + propertyVal); 
} 
} 
} 
} 
/** 
* Dump the source JdapiObject boolean properties 
*/ 
private void dumpBoolProps(JdapiObject jo) 
{ 
JdapiMetaObject meta = JdapiMetadata.getJdapiMetaObject(jo.getClass()); 
JdapiIterator props = meta.getBooleanMetaProperties(); 
// for each boolean property 
while(props.hasNext()) 
{ 
JdapiMetaProperty prop = (JdapiMetaProperty) props.next(); 
int propertyId = prop.getPropertyId(); 
boolean propertyVal = false; 
try 
{ 
propertyVal = jo.getBooleanProperty(propertyId); 
} 
catch(Exception e) 
{ 
println(m_indentation + "Could_not_get_property " + 
JdapiMetaProperty.getPropertyName(propertyId)); 
continue; 
} 
if ( jo.hasProperty(propertyId) 
&& (m_dumpAllProps ) ) 
{ 
if(m_dumpPropNames) 
{ 
println(m_indentation + " " + JdapiMetaProperty. 
getPropertyName(propertyId) + " " + 
propertyVal); 
} 
else 
{ 
println(m_indentation + propertyVal); 
} 
} 
} 
} 
/** 
* Dump the source JdapiObject numeric properties 
*/ 
private void dumpNumProps(JdapiObject jo) 
{ 
JdapiMetaObject meta = JdapiMetadata.getJdapiMetaObject(jo.getClass()); 
JdapiIterator props = meta.getIntegerMetaProperties(); 
// for each numeric property 
while(props.hasNext()) 
{ 
JdapiMetaProperty prop = (JdapiMetaProperty) props.next(); 
int propertyId = prop.getPropertyId(); 
int propertyVal = 0; 
try 
{ 
propertyVal = jo.getIntegerProperty(propertyId); 
} 
catch(Exception e) 
{ 
println(m_indentation + "Could_not_get_property " + 
JdapiMetaProperty.getPropertyName(propertyId)); 
continue; 
} 
if ( jo.hasProperty(propertyId) 
&& (m_dumpAllProps || !(jo.hasDefaultedProperty(propertyId)) ) ) 
{ 
if (m_dumpPropNames) 
{ 
println(m_indentation + " " + JdapiMetaProperty.getPropertyName(pr 
opertyId) + " " + 
propertyVal); 
} 
else 
{ 
println(m_indentation + propertyVal); 
} 
} 
} 
} 
/** 
* Output usage info to STDOUT 
*/ 
public void printUsage() 
{ 
System.out.println(""); 
System.out.println("Jdapi Form Dumper Utility"); 
System.out.println("Valid arguments:"); 
System.out.println("-a : dump all properties, not just overridden ones"); 
System.out.println("-b : dump boolean properties"); 
System.out.println("-n : dump numeric properties"); 
System.out.println("-t : dump text properties"); 
System.out.println("-p : dump property names, not just values"); 
System.out.println("-o : file path to output to"); 
} 
/** 
* Main method 
*/ 
public static void main(String[] args) 
throws Exception 
{ 
FormDumper dmp = new FormDumper(); 
for (int i = 0; i < args.length; i++) 
{ 
dmp.dumpForm(args[i]); 
} 
System.out.println(""); 
System.out.println("Dumps complete"); 
System.out.println(""); 
} 
}