A flexfield in Oracle Application is a field made up of sub–fields, or segments.  They are basically used to implement code structure or to capture additional information. There are two types of flexfields: key flexfields and descriptive flexfields. A key flexfield appears on your form as a normal text field with an appropriate prompt while a descriptive flexfield appears on your form as a two–character–wide text field with square brackets [ ] as its prompt.
Here is a brief comparison between KFF and DFF:

KFF vs. DFF

What is value set in Oracle application AOL?

  • Value set is primarily a container for your values, you define your value set such that it can control the types of values that are allowed into the value set (either predefined or nonvalidated). You can specify the format of your values.
  • Oracle Application Object Library uses value sets as important components of key flexfields, descriptive flexfields, and Standard Request Submission (value sets for report parameters for your reports that use the Standard Request Submission feature).

When to defining Values for Value Sets?

  • After you register your Flexfields & report parameters, if you are using independent or dependent value sets, you can enter values into each corresponding value set using the Segment Values form.
  • Values for the Value Sets, we are defining will be kept in the Oracle Application Object Library tables.

How many Format Types the value set have?

  • Char
  • Date
  • DateTime
  • Number
  • Standard Date
  • Standard Date Time
  • Time

You should take a note that Date and Date Time value set formats will be obsolete now and are provided for backward compatibility only. For new value sets, use the format types Standard Date and Standard Date Time.
What is Security type in value set?

  • By Security Rules window, we can define value security rules for ranges of flexfield and report parameter values.

There are two levels where you must activate Security, the one at value set level and other at individual segment or parameter level. You make Flex field Value Security available for your value set by choosing Hierarchical Security or Non-Hierarchical Security for the Security Type. When you make security available for a value set, all segments and report parameters that use that value set can use security. You then enable security for a particular segment or parameter.

  • Choose Hierarchical Security, If you want Security on a parent value to Cascade down to its child value or else you can choose Non-Hierarchical Security.

How many Character Formatting Options have for value set?

  • Numbers Only (0 – 9)
    • We cannot prevent users from entering a value that contains the radix character.
    • Cannot be used in Translatable Independent and Translatable Dependent value sets.
  • Uppercase Only(A-Z)
    • Here also we cannot use in Translatable Independent and Translatable Dependent value sets.
  • Right justify and Zero fill Numbers(001)
    • If you have selected Numbers Only (0-9) flag, then it wont allow you to affect this flag.
    • We are recommended to use this in Accounting Flex fields.
  • Minimum and Maximum Value Range
    • Your Minimum/maximum value may not be longer than the maximum size you specify for this value set.
    • Once you specify a range of values, you cannot define a new valid value that falls outside this range.
    • The Minimum Value and Maximum Value fields can therefore allow you to create a value set with a validation type of None.

How many validation Type does value set have?
There are several validation types that affect the way users enter and use segment or parameter values:

  • None (not validated at all)
    • Allow users to enter any value.
    • Only Format Validations will be done.
  • Independent
    • Provides a predefined list of values.
    • Independent values are stored in an Oracle Application Object Library table.
  • Dependent
    • Same like Independent Value Set, except the List of Values shown to you will depends on which the Independent value you have selected in the Prior Segment.
    • Must define your independent value set before you define the dependent value set that depends on it.
    • Advisable to create your independent values first.
    • Must create at least one dependent value for each independent value, or else it wont allow you to enter into that segment or field.
  • Table
    • It use your own application tables as value sets for flex field segments and report parameters instead of the special values tables which Oracle Applications provides.
    • You can also use validation tables with other special arguments to make your segments depend on profile options or field values.
    • You can use any existing application table, view, or synonym as a validation table.
    • If we are using non registered table for your value set, then we have to Create the necessary grants and synonyms to APPS Schema.
    • The value column and the defined ID column in the table must return a unique row for a given value or ID.
    • If the Hidden Id column is provided the value passed to the report will be Hidden and not the Value column.
    • Similarly, when you specify :$FLEX$.Value_Set_Name, your flex field segment or report parameter defaults to always use the hidden ID column to compare with your WHERE clause .
    • We can use Special BIND variable such as :$PROFILES$.Option_name, :$FLEX$.Value_set_name, :block.field in the WHERE clause.
  • Special
    • Special validation value sets allow you to call key flex field user exits to validate a flex field segment or report parameter using a flex field within a flex field mechanism. You can call flex field routines and use a complete flex field as the value passed by this value set.
  • Pair
    • Pair validation value set allows user to pass a range of concatenated Flex field segments as parameters to a report.
  • Translatable Independent & Translatable Dependent
    • These value sets are similar to Independent and Dependent value sets except that translated values can be displayed to the user. Translatable Independent and Translatable Dependent value sets allow you to use hidden values and displayed (translated) values in your value sets. In this way your users can see a value in their preferred languages, yet the values will be validated against a hidden value that is not translated.
    • We can convert the Independent value set to a Translatable Independent value set, or a Dependent value set to a Translatable Dependent value set. These are the only types of conversions allowed.

Which Oracle table store Value sets and underline information?

  • FND_FLEX_VALUE_HIERARCHIES
  • FND_FLEX_VALUE_SETS
  • FND_ID_FLEX_SEGMENTS
  • FND_FLEX_VALUE_NORM_HIERARCHY
  • FND_FLEX_HIERARCHIES
  • FND_FLEX_VALUE
  • FND_FLEX_VALIDATION_EVENTS
  • FND_FLEX_VALUE_RULE_LINES
  • FND_FLEX_VALUE_RULE
  • FND_FLEX_VALUE_RULE_USAGE
  • FND_RESPONSIBLITY
  • FND_TABLES
  • FND_FLEX_VALIDATION_TABLES

Any method to upload flexfield value?
Yes, FNDLOAD is utility which can be used for moving value set across different environment.
Do we have any restriction on value set?
Yes, here are some listed one:

  • Table Validated Value Sets
    • We cannot use table-validated id value sets for any accounting flexfield or any other key flexfields.
    • We cannot use :$FLEX$, :$PROFILES$ in table name, value and id of table validated value sets.
    • We cannot use DISTINCT clause in any of the column fields or in the WHERE clause of a table validate value set.
    • In an id value set, the value can be non-unique but id should be unique. In a non-id value set, value should be unique.
    • We can only use columns selected for the table-validated value set must be of type NUMBER, DATE or VARCHAR2.
    • Support for SQL expression in columns of Table Validated value sets will be obsolete in future release.
  • Translatable Independent and Translatable Dependent Valuesets
    • The Numbers Only and Uppercase Only option cannot be used.
    • Must have “Char” format type.
  • Special/Pair valuesets
    • Special/Pair value sets are user-exit value sets . PL/SQL APIs will not be able to validate them.

Lets now define a simple value set in R12:
Step 1: Go to Application Developer, and select menu /Validation/Set
Create a value set name as COUNTRY_LIST which will contain a list of countries. Make it an independent value set. Format type is CHAR. Save the work.

Step 2: Go to Application Developer, and select menu /Validation/Values
The below window will appear. Put the Search Name as COUNTRY_LIST and click Find.

Step 3: Enter the country details in this window. Save the work.

Now the value set is ready to be used in any concurrent program.

This article gives an introduction of  Concurrent Processing in Oracle Application.
Concurrent Program:
An instance of an execution file, along with parameter definitions and incompatibilities. Several concurrent programs may use the same execution file to perform their specific tasks, each having different parameter defaults and incompatibilities.
Concurrent Program Executable:
An executable file that performs a specific task. The file may be a program written in a standard language, a reporting tool or an operating system language.
An execution method can be a PL/SQL Stored Procedure, an Oracle Tool such as Oracle Reports or SQL*Plus, a spawned process, or an operating system host language.
Concurrent Request:
A request to run a concurrent program as a concurrent process.
Concurrent Process:
An instance of a running concurrent program that runs simultaneously with other concurrent processes.
Concurrent Manager:
A program that processes user’s requests and runs concurrent programs. System Administrators define concurrent managers to run different kinds of requests.
There are many concurrent managers each monitoring the flow within each apps area.
But there are 3 MASTER CONCURRENT MANAGERS:
1. Internal Concurrent Manager (ICM): This is the one which monitors all other CMs
2. Standard Manager (SM) : This takes care of report running and batch jobs
3. Conflict Resolution Manager (CRM): checks concurrent program definitions for incompatibility checks.
We cannot delete a concurrent manager… but we can disable it… but it’s not recommended.

Concurrent Queue:
List of concurrent requests awaiting to be processed by a concurrent manager.
Phases and Statuses through which a concurrent request runs:
A concurrent request proceeds through three, possibly four, life cycle stages or phases: 

  • Pending                                       Request is waiting to be run
  • Running                                       Request is running
  • Completed                                   Request has finished
  • Inactive                                       Request cannot be run

Within each phase, a request’s condition or status may change.  Below appears a listing of each phase and the various states that a concurrent request can go through.
Concurrent Request Phase and Status 
Phase: PENDING      

  • Normal: Request is waiting for the next available manager.
  • Standby: Program to run request is incompatible with other program(s) currently running.
  • Scheduled: Request is scheduled to start at a future time or date.
  • Waiting: A child request is waiting for its Parent request to mark it ready to run.   

Phase:RUNNING       

  • Normal: Request is running normally.
  • Paused: Parent request pauses for all its child requests to complete. 
  • Resuming: All requests submitted by the same parent request have completed running.  The  Parent   request is waiting to be restarted.
  • Terminating: Running request is terminated, by selecting Terminate in the Status field of the Request Details zone.

Phase:COMPLETED    

  • Normal: Request completes normally.
  • Error: Request failed to complete successfully.
  • Warning: Request completes with warnings.  For example, a report is generated successfully but fails to print.
  • Cancelled: Pending or Inactive request is cancelled, by selecting Cancel in the Status field of the Request Details zone.
  • Terminated: Running request is terminated, by selecting Terminate in the Status field of the Request Details zone.

 Phase:INACTIVE          

  • Disabled: Program to run request is not enabled.  Contact your system administrator.
  • On Hold: Pending request is placed on hold, by selecting Hold in the Status field of the Request Details zone.
  • No Manager: No manager is defined to run the request.  Check with your system administrator.

 Different execution methods of executabls:

  • FlexRpt                             The execution file is written using the FlexReport API.
  • FlexSql                             The execution file is written using the FlexSql API.
  • Host                                 The execution file is a host script.
  • Oracle Reports                  The execution file is an Oracle Reports file.
  • PL/SQL Stored Procedure   The execution file is a stored procedure.
  • SQL*Loader                      The execution file is a SQL script.
  • SQL*Plus                          The execution file is a SQL*Plus script.
  • SQL*Report                      The execution file is a SQL*Report script.
  • Spawned                          The execution file is a C or Pro*C program.
  • Immediate                       The execution file is a program written to run as a subroutine of the concurrent manager.

 Output formats of a concurrent program:

  • HTML
  • PDF
  • TEXT
  • PS (Post Script)
  • PCL(HP’s Printer Control Language)

Steps Required for Registering a Simple Report

1. Create a Report using Report Builder.
2. Compile and copy .RDF file in module specific directory.
3. Register the executable with System Administrator Module.
4. Define the Concurrent Program.
5. Assign the executable to Concurrent Program.
6. Assign the Concurrent Program to Request Group.
7. Assign the Request Group to the Responsibility.
8. Assign the Responsibility to the User. 

Registering Parametric Reports

1. Create a Report using Report Builder with parameters.
2. Compile and copy .RDF file in module specific directory.
3. Register the executable with System Administrator Module.
4. Define the Value set to validate the parameters.
5. Define the Concurrent Program.
6. Assign the executable to Concurrent Program.
7. Define Parameters.
8. Assign Value Set to the Parameters.
9. Assign bind parameter of yours to the TOKEN.
Note: Token is used to map bind parameters with the formal parameters of the Concurrent Program.
10. Assign the Concurrent Program to Request Group.
11. Assign the Request Group to the Responsibility.
12. Assign the Responsibility to the User.
To reference the values of Prior Parameters of a particular program into the values of other parameter is based on the Value Set. The value of the 1st parameter is to be referenced in where clause of the 2nd Parameter.
WHERE Deptno = :$FLEX$.First_Parameter

Registering SQL*Loader as a Concurrent Program

The following steps will describe the process to register a SQL*Loader program as a Concurrent Program in Oracle Apps.
Step 1]
Create the SQL*Loader Control and Data file and place them in Server(ex: $CUSTOM_TOP/bin). Create or check the interface table structures in the backend.

Control file: test.ctl

Data file: test.dat
CREATE TABLE testdept(
deptno NUMBER(2) NOT NULL,
dname VARCHAR2(14),
loc VARCHAR2(13));


Step 2]
Go to Application Developer > Concurrent > Executables. Define a Concurrent Program Executable. Choose the Execution Method as SQL*Loader and give the Execution File Name as the name of the SQL*Loader control file. Save your work.
Step 3]
Go to Application Developer > Concurrent > Program. Define the Concurrent Program. Attach the executable defined above.
Step 4]
Go to parameters of the concurrent program. Create a parameter to take the server path of the data file. You can also place the default value.
Step 5]
Attach the Concurrent program to a Responsibility through a Request Group.
Step 6]
Go to that Responsibility and Run the Concurrent Program. If successful check the output file that have all data uploading information.
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table TESTDEPT, loaded from every logical record.
Insert option in effect for this table: INSERT
   Column Name                  Position   Len  Term Encl Datatype
—————————— ———- —– —- —- ———————
DEPTNO                               FIRST     *   ,  O(“) CHARACTER     
DNAME                                NEXT     *   ,  O(“) CHARACTER     
LOC                                     NEXT     *   ,  O(“) CHARACTER           
Table TESTDEPT:
  7 Rows successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.
Space allocated for bind array:49536 bytes(64 rows)
Read   buffer bytes: 1048576
Total logical records skipped:           0
Total logical records read:               7
Total logical records rejected:          0
Total logical records discarded:        0
Run began on Thu Aug 12 09:41:55 2010
Run ended on Thu Aug 12 09:41:56 2010
Elapsed time was:      00:00:00.11
CPU time was:           00:00:00.01
Step 7]
Check in the backend whether the tables got updated or not.
The Bad and Discard files will be created in /conc/out file of the server.