Oracle® Fusion Middleware Release Notes 11g Release 1 (11.1.1) for Oracle Solaris Part Number E14772-32 |
|
|
PDF · Mobi · ePub |
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).
This section describes general issues and workarounds. It includes the following topics:
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.
This section describes issues related to Oracle Forms and Linux/UNIX. It includes the following topics:
Section 31.1.2.1, "LD_PRELOAD Setting Required for Signal Chaining Facility"
Section 31.1.2.2, "Check the Reports Engine Logs for FRM-41214"
Section 31.1.2.3, "Forms Builder Does not Launch on Linux RHEL5"
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
.
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.
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
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.
This section describes configuration issues and their workarounds. It includes the following topics:
Section 31.2.1, "Non-Internet Explorer Browser Proxy Settings when Using One-Button-Run"
Section 31.2.2, "WebUtil Client Files Allow Configuration of Destination Directory"
Section 31.2.3, "webutil.properties Files Renamed for Different Libraries"
Section 31.2.4, "Forms does not Work with JDK 1.6.0_12 on Client with WinRunner"
Section 31.2.5, "JavaScript Communication Does not Work in IE for Framed HTML File"
Section 31.2.6, "JavaScript Events Calling Forms Applications in a Safari 5 Browser Do not Work"
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.
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
.
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
.
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.
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">
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:
Ensure you are using base.htm.
In base.htm, delete the <NOSCRIPT></NOSCRIPT> tags that are wrapping the <APPLET> tag.
This section describes documentation errata. It includes the following topics:
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:
Set the environment variable FORMS_STDIN_PASSWORD to 1.
Run the compiler without any connect string. Enter the connect string after the compiler has started.
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.
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(""); } }