Blog Moving -

In order to deliver content in a more orderly and compelling manner and to organize the content better I am moving all the content to a new site. Please visit     

Oracle e-business Printer FNDLOAD

FNDLOAD apps/pwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/
source_printer_def.ldt FND_PRINTER PRINTER_NAME=[printer name]

Oracle e-business Order to Cash Data flow

Script: Oracle e-business R12 - Multi Org Initialization

Script: How to launch a oracle e-business concurrent program from pl/sql

Script: Creating an Oracle e-business user from the command line

The following script helps with the creation of an oracle e-business user / fnd user from the command line. It also has code snippets that will let you add a responsibility and change password if required.

   l_user_id   NUMBER;
   result1     BOOLEAN;
   l_user_id    :=
      fnd_user_pkg.createuserid (x_user_name                 => 'USER1',
                                 x_owner                     => '',
                                 x_unencrypted_password      => 'welcome1',
                                 x_session_number            => 0,
                                 x_start_date                => SYSDATE
   result1:= fnd_user_pkg.changepassword('USER1','welcome123'); 
   fnd_user_pkg.addresp (username            => 'USER1',
                         resp_app            => 'SYSADMIN',
                         resp_key            => 'SYSTEM_ADMINISTRATOR',
                         security_group      => 'STANDARD',
                         description         => '',
                         start_date          => SYSDATE,
                         end_date            => NULL
   DBMS_OUTPUT.put_line (l_user_id);

Script: To find out which Oracle e-business user is locking a table

The following query will help you identify the fnd user/ oracle e-business user that is locking a row/table.

SELECT objects.owner,
       user1.user_name         locking_fnd_user_name,
       login.start_time        locking_fnd_user_login_time,
       vp.spid                 os_process,
  FROM fnd_logins      login,
       fnd_user        user1,
       v$locked_object vlocked,
       v$process       vp,
       v$session       vs,
       dba_objects     objects
 WHERE vs.sid = vlocked.session_id
   AND vlocked.object_id = objects.object_id
   AND vs.paddr = vp.addr
   AND vp.spid = login.process_spid(+)
   AND =
   AND login.user_id = user1.user_id(+)
--change the table name below
   AND objects.object_name LIKE '%' || upper('PO_HEADERS_ALL') || '%'
   AND nvl(vs.status,
           'XX') != 'KILLED';

INV DEBUG: How to get Debug Information for Inventory Material Transactions [ID 148651.1]

In Oracle e-business Inventory transactions you might need to enable logging to get detailed debug messages.
This article deals with how to get Inventory (INV) debug information for material transactions?

1. Set the System Profile Values as follows:

-- Summary
INV: Debug Trace: Yes
INV:Debug Level: 10
INV: Debug file:  /usr/tmp/invdebug.log

-- Details
INV: Debug Trace: set Yes to turn on the debug functionality.
set No to turn off the debug functionality.

INV:Debug Level: set 0 , will print the summary debug messages.
set 10 , to print the detail debug messages.

INV: Debug file (Including the complete path):
The path is one of the directories from the valid
directories defined in the obtained v$parameter
through the following sql :
select value
from v$parameter
where name = 'utl_file_dir';

Make sure to include the file name at the end of the
path, e.g. '/<>/trx_mgr.log'

How to enable and retrieve FND debug log messages [ID 433199.1]

Starting in 11.5.10, FND has incorporated a debugging technique to enable debug messages to get stored into the table FND_LOG_MESSAGES. This method was introduced in 11.5.10 and it is available in subsequent releases. This note gives simple steps on how to enable and retrieve the debug messages.

This method will pick up *all* debug messages from a particular log_sequence value. As such, it is particularly useful when you are having trouble retrieving the debug messages associated to a particular concurrent request, or user. However, if there are multiple users with FND debugging enabled running various processes, you could end up picking up debug messages pertaining to their activities.
1) set up profiles for the User / Responsibility to be used to reproduce the issue

Profile Name     Suggested value     Comments
FND: Debug Log Enabled     YES     This turns the debugging feature on
FND: Debug Log Filename      NULL     Use when you want debug messages to get stored to a file
FND: Debug Log Level     STATEMENT    

Following are options listed from least to most detailed debugging :

Unexpected, Error, Exception, Event, Procedure, Statement

FND: Debug Log Module

Indicate what modules to debug. You can use something like 'ar%' or even  '%arp_rounding%' to limit modules debugged

Following are examples on how you would set the above profiles depending on what you want to debug :

sample setting to debug everything :

FND: Debug Log Enabled YES
FND: Debug Log Filename NULL
FND: Debug Log Level STATEMENT
FND: Debug Log Module %

sample setting to debug ONLY Receivables :

FND: Debug Log Enabled YES
FND: Debug Log Filename NULL
FND: Debug Log Level STATEMENT
FND: Debug Log Module ar%

2) Since the debugging routine will start writing messages to the table, we want to know which messages pertain to our test. If you are tracking the debug messages for a concurrent request, note down the Concurrent Request id. Otherwise, note down current max value of log sequence retrieved as follows :


3) Run your test case, try to stay on track in reproducing the issue and leave out extraneous steps so that you don't end up with debug messages that are not relevant to your issue. It is ideal to not have anyone else using the Responsibility you have enabled debug for, so that only messages pertaining to your testcase are picked up.

4) For ease of review by Development, spool the output of the following to a .xls spreadsheet :

a) If you are debugging a concurrent process :

SELECT log.module , log.message_text message
FROM fnd_log_messages log,
            fnd_log_transaction_context con
WHERE con.transaction_id = < request_id >
AND con.transaction_type = 'REQUEST'
AND con.transaction_context_id = log.transaction_context_id
ORDER BY log.log_sequence;

b) Otherwise,

SELECT module, message_text
FROM fnd_log_messages
WHERE log_sequence > &max_log_from_step2
ORDER BY log_sequence;

Or you may select all columns with:

SELECT * FROM fnd_log_messages
WHERE log_sequence > &max_log_from_step2
ORDER BY log_sequence;

SQL*Trace with WMS-MWA: Mobile Applications (Tracing SQL Via Database Trace To Allow For TKPROF Of Results Of User Actions) [ID 277655.1]

mwa.cfg INV.log WMS.log system.log
How does one find a list of the SQL commands run during a mobile user session?

How to enable SQL*Trace on the MWA server for mobile applications like WMS (Warehouse Management System) and MSCA (Mobile Supply Chain Applications).

SQL*Trace of WMS / MSCA
In addition to the options noted in the Oracle Mobile Supply Chain Applications (MSCA) Server manual, users can enable SQL*Trace via the log level option. This will be described in more detail below.

How It Works
If the user sets the parameter mwa.LogLevel = performance in configuration file (mwa.cfg), the mobile application will write a SQL*Trace file for all users connecting to the mobile server. All user connections will be written to the same SQL*Trace file usually found in the server side UDUMP directory in the same location as the other trace files.

SQL*Trace vs. MSCA Log Files
The following steps will enable SQL*Trace for all MSCA/WMS users. Note that with this setting is NOT the same as using the "Trace" option described in more detail below. Therefore, the user may need to run the steps with mwa.LogLevel=performance to get the SQL*Trace, and then run the steps again with mwa.LogLevel=trace to get additional log file information in the SYSTEM.log, INV.log and WMS.log.

1. Go to $MWA_TOP/secure directory. 

2. In the file mwa.cfg , set mwa.LogLevel=performance.

3. Restart the mobile server.

4. Perform the related navigation steps to cause the issue.

5. You can search in the trace directories for files created. Or you can try to locate the particular file using SQL like the following to help. Query to identify the trace file name with the corresponding number from the username.

select prs.spid
from v$session ses , v$process prs
where ses.program = 'JDBC Thin Client'
and ses.client_info is not null
and ses.osuser = '&OS_USER_NAME'
and ses.paddr = prs.addr
order by ses.logon_time desc ;

6. Use the column "prs.spid" which maps to the filename in udump location. For example, if the column has the value 18027, then the file name could be  "ora_18027.trc".

7. Create a TKPROF file and upload both the raw trace (.trc) and TKPROF.

8. After generating the trace file, ensure that you disable SQL*Trace by stopping the mobile server, resetting the parameter in mwa.cfg, and restarting the mobile server.

Other Trace Values
The most common option for logging details of an MSCA / WMS session is to use the log level of Trace.  See Note.338291.1 for more details or refer to the Oracle Mobile Supply Chain Applications (MSCA) Server: Administration Guide.

NOTE:277558.1 - Oracle Mobile Applications (MSCA) Allows Receiving Of Closed PO Lines
NOTE:338291.1 - Howto Enable WMS / MSCA Logging?

Howto Enable WMS / MSCA Logging? [ID 338291.1]

How does one enable logging on the Oracle e-business MWA server for mobile applications like Oracle WMS (Warehouse Management System) and Oracle MSCA (Mobile Supply Chain Applications)?

The techniques for enabling WMS / MSCA trace are described in the Oracle Mobile Supply Chain Applications (MSCA) Server manual but listed again below for your convenience. The most common option for logging details of an MSCA / WMS session is to use the log level of Trace.  Logging levels force the mobile application to write details about the user's actions to a log file. 

Log Files
There are possibly 3 different log files being written to: WMS.log, INV.log, and system.log -- though WMS.log is being phased out in 11.5.10.  The log files are discussed in the Oracle Mobile Supply Chain Applications (MSCA) Server: Administration Guide, Release 1.0.7, September, 2001, Page 7.

Logging Types

The mwa.LogLevel can have the following values: Fatal, Error, Warning, Debug, and Trace.
Fatal is the most restrictive: it will display only messages from fatal errors. Trace is the least restrictive: it will log all messages. As seen in Note.277655.1, one could also use the log level of "Performance" to create SQL*Trace files. However, the "Performance" option does not enable the logs listed below (INV.log, etc.)

Note: The log files are often reviewed when diagnosing issues or creating service requests. The files give examples about what is happening in the code while the programs run. The most common logging is TRACE. Enabling the trace setting is outlined below.

1. Locate the mwa.cfg file:
In 11i: $MWA_TOP/secure/
In R12: $INST_TOP/admin/install/

2. Ensure trace is enabled in the mwa.cfg file.
You should see trace level: mwa.LogLevel=TRACE
Also check for 'mwa.logdir' to be set accordingly

3. Restart the mobile server and hit ctrl-X, see what directory is for the logging

4. After you perform the transaction again, get the following log files from that log directory

The following are examples of the log files and what kinds of messages you might see.
-- inv.log
[Fri Feb 27 12:44:13 EST 2009] **************** MWA Version *****************
[Fri Feb 27 12:44:13 EST 2009] ***************** Start New Logging ******************
[Fri Feb 27 12:44:14 EST 2009] (Thread-12) Create savepoint RCV_SP complete.
[Fri Feb 27 12:44:14 EST 2009] (Thread-12) RCV: RcvFunction.appEntered - After putting following objects
[Fri Feb 27 12:44:14 EST 2009] (Thread-12) RCV: RcvFunction.appEntered - menu.SerialTypeRANGE
[Fri Feb 27 12:44:14 EST 2009] (Thread-12) RCV: RcvFunction.appEntered - menu.TransactionSourceType
[Fri Feb 27 12:44:14 EST 2009] (Thread-12) RCV: RcvFunction.appEntered - menu.TransactionAction
[Fri Feb 27 12:44:14 EST 2009] (Thread-12) RCV: RcvFunction.appEntered - transaction_typenull
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) ITEMLOV: fieldExited - 000228
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) ITEMLOV: fieldExited - 000228
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) [Item Id: 259 :Rev code: 1:lotcode: 1 :serialcode: 1 :restrictsubcode: 1 :restrictlotcode: 1 :locationcode: 2 :shelflifecode: 1 :shelflifedays: 0 :primaryuomcode:EA :effectivity control: 1 Inspection Qty:0.0 mInventoryAssetFlag: Y mOutsideOperationFlag: N:Inventory Stockable Flag: Y]
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) Current Release level is J or higher
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) mCrossRefItemNum :NULL
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) LotSerialFListener - fieldExited :INV.ITEM
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) OSP flag is:N
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) ******DateFieldBean: Should NOT use this method. Instead use the setValue method which takes a string and a session for proper error free function of dates.******
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) ******DateFieldBean: Otherwise, please make sure you call the setDate method too for this field.******
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) ******DateFieldBean: NOTE - Have not validated the date being set if it is in the proper client format or not.******
[Fri Feb 27 12:44:59 EST 2009] (Thread-12) RCV: RcptGenFListener.fieldExited
[Fri Mar 06 11:31:03 EST 2009] (Thread-18) RCV: RcvPage.specialKeyPressed
[Fri Mar 06 11:31:03 EST 2009] (Thread-18) Special key pressed: clearing the vectors
[Fri Mar 06 11:31:03 EST 2009] (Thread-18) Rollback to RCV_SP and calling inv_rcv_common_apis.rcv_clear_global
[Fri Mar 06 11:31:03 EST 2009] (Thread-18) Rollback to RCV_SP complete.
[Fri Mar 06 11:31:03 EST 2009] (Thread-18) RCV: RcptGenPage.specialKeyPressed 10 - action = MWA_MAIN_MENU
[Fri Mar 06 11:31:03 EST 2009] (Thread-18) RCV: RcptGenPage.specialKeyPressed - complete
[Fri Mar 06 11:31:06 EST 2009] (Thread-18) Employee     ID :null
[Fri Mar 06 11:31:06 EST 2009] (Thread-18) Organization ID :666
[Fri Mar 06 11:31:06 EST 2009] (Thread-18) Executing the J Patch Set  Code
[Fri Mar 06 11:31:06 EST 2009] (Thread-18) Error  java.lang.NumberFormatException: null

Oracle e-business Sales Order – Flow of Line Status

Entered [Order Management] Order is saved but not booked

Booked [Order Management] Order is Booked.

Awaiting Shipping [Order Management] Order is booked but lines are not yet picked.
Navigating to Shipping Execution, the delivery line status flow is:

Not Ready to Release [Shipping Transactions] A delivery line may be in this status when it is interfaced manually into Shipping, is not scheduled and has no reservations. When lines are imported automatically from Order Management this status is not used

Released to Warehouse [Shipping Transactions] Pick Release has started but not yet completed. One of the reason could be allocation have not been pick confirmed. The Pick Release process creates a Move Order Header & Mover Order Line in Inventory. This is a common status for users that perform a two-step pick release process. This status indicates that inventory allocation has occurred however pick conformation has not yet taken place.

Ready to Release [Shipping Transactions] Order Line is booked and passed to shipping execution. The line is now eligible to pick Release.

Backordered [Shipping Transactions] The status of Backorderd is assigned to a line under the following circumstances.

●…The Pick Release process attempted to allocate inventory to the line and all or a partial quantity of the item was not available.
....In this case the system automatically backorders the discrepant quantity.

●…At Ship confirm the user enters a shipped quantity for an item that is less than the original requested quantity.

●…The user manually Backorders the entire delivery.

Shipped [Shipping Transactions] The delivery line is shipped confirmed.

Confirmed [Shipping Transactions] The delivery line is shipped or backordered and the trip stops are open.

Picked [Order Management] Pick release is complete, both allocations and pick confirm

Picked Partial [Order Management] This status occurs when a delivery line is not allocated the full quantity during Pick Release and Ship Confirm has not occurred

Interfaced [Shipping Transactions] The delivery line is shipped and Inventory interface concurrent process is complete.

Oracle MSCA - Creme JVM Performance

Creme JVM is one of the recommended and certified JVM's for use for Oracle MSCA(Mobile Supply Chain Applications).

The recommended commandline for launching the JVM is as follows:

 "\Windows\creme\bin\creme.exe" –Of -tiny -ntb -classpath \mwagui\lib\;\mwagui\lib\;
\mwagui\lib\;\mwagui\lib\  oracle.apps.mwa.awt.client.StartGUI

Even though this is published on the Oracle site there is a parameter that can cause serious performance degradation.

The -Of  option Sets the console output to be redirected to a jscpout.txt file located in the root directory.

This is equivalent to logging and substantially increases the response times. Once we got rid of this option the MSCA / MWA response times were halved straight away.

Oracle MSCA - Function keys remapping

Oracle MSCA provides a way to remap function keys.
This can be done in the file gui_key.ini.

The seeded mappings for function keys are:

// MWA Navigation Keys

This can be easily remapped as below.
// MWA Navigation Keys

Once the server is bounced the new mappings take effect.

Oracle MSCA - Function Keys on Windows Mobile

Oracle MSCA - Function Keys on Windows Mobile

One of the projects that I was involved in used Oracle Mobile Supply Chain Applications along with Intermec Scanners.
We had a situation where the Function keys were not working in Oracle MSCA on the Intermec scanners which were built on the Windows Mobile Platform. The problem stems out of the fact that Windows mobile doesn't pass the Function keys back to Oracle MSCA(Mobile Supply Chain Applications ). This was causing the function keys to be made dysfunctional in Oracle MSCA(Mobile Supply Chain Applications ).

The workaround is to remap some of the shortcut keys in MWA and then map the remapped shortcuts to Function keys in intermec (this will be done by your device manufacturer. Contact them for support). 

The following shortcuts functions were made unavailable to the default functions in the process and their shortcuts were remapped to the functionality provided by function keys:  
Invoke Device – CONTROLP

Seeded mappings:

New configuration: 
Help-CONTROLQ->F1 ( you can use F1 and CONTROLQ on on the scanner and CONTROLQ in the emulator )
Main Menu - > CONTROLN->F2 ( you can use F2 and CONTROLN on the scanner and CONTROLN in the emulator)
Back-CONTROLE->F3 ( you can use F3 and CONTROLE on the scanner and CONTROLE in the emulator)
Forward-CONTROLP->F4 ( you can use F4 and CONTROLP on the scanner and CONTROLP in the emulator)

Effectively this remapping would result in the function keys send out the mapped shortcut key combination.i.e 
F1 would send out CONTROLQ instead of F1 .
F2 would send out CONTROLX
F3 would send out CONTROLE
F4 would send out CONTROLP

 To summarize this is a 2 step process:
1. Re-Map the shortcuts in Oracle MSCA. This is done in the gui_key.ini
2. Re-map the function keys on the bar code scanner/ intermect unit through a CAB file provided by Intermec Support

This is a workaround but is totally acceptable the the end users.

Oracle MSCA - Changing Prompts & DFI

All information related to Oracle MSCA(Mobile Supply Chain Applications) prompts is stored in the AK Dictionary. AK Dictionary is an active data dictionary that enables you to define inquiry applications for the web, and generate any of the application's characteristics at runtime.
MSCA/MWA Framework uses AK Repository mainly for two purpose:
1) Defining Labels
2) Defining DFIs
1) Defining Labels:
When we create a new custom page using MSCA/MWA Framework, we use setPrompt() set the labels to the fields.
In order to support MLS(Multi Language Support), we need to define these labels as Items in AK Repository and link into custom page.
2)DFI(Data Field Identifier):
DFI functionality in Oracle Mobile Applications (MSCA and WMS) allows identification of the type of data that is embedded within
a barcode when it is scanned by the mobile device. DFI usually consists of one to three characters that precede the
value of the data that is encoded in the barcode.
We will see each of them in detail now.
Setting up labels/DFI's in AK Repository:
1: Setup the Attribute
AK Developer ->Define Attributes

Create a record necessary information like Attribute ID,Attribute Name,Label etc
2: Setup a Controller
Before creating a region in AK Repository, we need to have a controller to associate to the AK Region.
Following is a sample controller class for an AK Region
import oracle.apps.fnd.common.VersionInfo;
public class XxgilInvResourceTable 

    public static final String XXGIL_FAIL_BTN = "XXGIL_FAIL_BTN";
//Code to retrieve the prompt of the button.

mField.setPrompt(MWALib.getAKPrompt(ses, "", "XXGIL_FAIL_BTN"));

3: Setup the AK Region:
AK Developer -> Define Regions

Step 4: Reference AK Attributes for the AK Regions
AK Developer ->Define Regions
Click on Region Items

Create new record and link the attribute(s) which we created previously.

You can now change the label on the attribute directly or in region items (long label) to change the prompt.
If you plan to use the field as DFI in your Oracle MSCA(Mobile Supply Chain Applications) implementation please read on.


DFI functionality in Oracle Mobile Applications (MSCA and WMS) allows identification of the type of data that is embedded within a barcode. DFI usually consists of one to three characters that precede the value of the data that is encoded in the barcode. For instance, a DFI for Part Number might be P+. If the part number that were encoded in a given barcode were AS54888 then the barcode would encode the value P+AS54888 to indicate that the barcode is for a Part Number and that Part Number is AS54888.

DFIs offer the following advantages:

Out of order scanning: Operator need not place the cursor in the field where data is being entered. For example, the cursor could be on PO field while the item barcode is being scanned. The DFI ensures that correct field is populated.
Data Accuracy. DFIs are useful in reducing error caused by scanning the wrong barcode into a field on a mobile device.

DFI Scanner Configuration

In order to use the DFI functionality in Oracle, the scanning device must be setup to always prefix the Data Stream Indicator on every scan. Oracle certified scanning devices must allow this configuration.

DFI Oracle COnfiguration:

DFI attributes in "Default Varchar2 Value" Column. For example, a value like 
"DFI=P+ REQ=N" means that when a barcode is scanned on that field using the hand held mobile device

Oracle MSCA Data Stream Indicator

The data stream indicator in Oracle MSCA(Mobile Supply chain architecture) is the character which denotes the start of a scan.

The data stream indictor is set as pre-amble in an intermec scanner and the hexadecimal code is : '\x1C'. This is a file separator character
To do an automatic enter after the scan you need to set the post-amble on the intermec scanner and it is :'\x0D'

From the keyboard however you need to simulate the scanning mode and the default key for that is:

The default is set to ctrl+\ on all US/Internation keyboards.
This however works differently on british keyboards and ctrl+~ works instead.

Keywords: Oracle mobile supply chain architecture(MSCA)

Oracle FND Logging - Function/Procedure specific

In some rare circumstances, for example, if you are debugging an issue in Oracle Applications in the pl/sql layer, you may need to manually initialize the PL/SQL layer logging for the current session. Please read on in the link below for details:

keywords: oracle , e-business, customization, logging, fnd logging

Enabling Disabling Concurrent Program parameters

Step-by-Step: Enabling/disabling concurrent program parameters dyncamically

Find out how to enable/disable concurrent program parameters conditionally/dynamically.
by Arun Sista
This article is a simple step by step guide on controlling concurrent program parameters by enabling/disabling them based on values in other parameters. This article is for use of anyone who wishes to develop a new concurrent program/modify an existing one and wants to introduce new behavior to concurrent program parameters.

Background / Overview

I decided to write this based on some of my experience at Oracle where I had to research this fairly simple programming technique and given the lack of documentation ended up spending a fair bit of time on it initially.
This article contains a detailed explanation in text as well as an audio visual with a demo on the topic.


Let us assume that we are trying to create a concurrent program X_CUSTOM_TEST_CONC_PROGRAM that has 3 parameters.
The first parameter is called Requisition Type and the values are controlled by a pre-defined value set by the name PO_SRS_REQUISITION_TYPE. The values in this parameter can be INTERNAL/PURCHASE.
The second parameter is called Inventory Organization and is dependent on Requisition Type and would be enabled if the value in Requisition Type is ‘INTERNAL’
The third parameter is called Supplier and is dependent on Requisition Type and would be enabled if the value of the Requisition Type is ‘PURCHASE’
 Please read on below:

Oracle MSCA - Automatic Navigation after scanning

There might be an ocassional requirement to do an automatic navigation between pages after completing a scan on a mobile device while using Oracle MSCA(Mobile supply chain applications).

The way to do this is create a button and use a feature in Oracle MWA (through coding) to automatically enter the button on the page to navigate to the next page.

E.g in the ManifestPickingScreen user scans the Order Number. He is prompted to enter more order numbers and then hit done when he is finished.
My requirement is to automatically hit done when the user finishes scanning the first order number.

There is a hidden way to do this in Oracle MSCA. The first step is to identify the button which needs to be entered as part of the navigation. Then use the code below:

        else if(fldName.equals("MPFL.ORDER"))
            if(!orderValidationFailed) {
               ses.putObject(MWALib.AUTO_ENTER, Boolean.TRUE);               
            else {

This code needs to be written in the event Listener and on action of the given field.

This is especially useful when you write custom code/ extensions.

Very often if this has to be done without displaying the physical button on the page. To achieve this you need to:

1. Create a button and keep it hidden
2. Write code in fieldExited of the scanned field controller to display the button and use the technique above.

Oracle MSCA - Bar code preprocessing using CustomScanManager

Enabling Personalization for MSCA Pages

Oracle EBS Customization Patch Impact Analysis Tool