Tuesday, 28 May 2013

Oracle HRMS API – Create Employee Address

1 comments
DECLARE
    ln_address_id                           PER_ADDRESSES.ADDRESS_ID%TYPE;
    ln_object_version_number    PER_ADDRESSES.OBJECT_VERSION_NUMBER%TYPE;

BEGIN

   -- Create Employee Address
   -- --------------------------------------
    hr_person_address_api.create_person_address
    (     -- Input data elements
          -- ------------------------------
          p_effective_date                    => TO_DATE('04-APR-2011'),
          p_person_id                           => 32979,
          p_primary_flag                     => 'Y',
          p_style                                     => 'US',
          p_date_from                           => TO_DATE('08-JUN-2011'),
          p_address_line1                   => '408 Main Street',
          p_address_line2                   => NULL,
          p_town_or_city                     => 'White Plains',
          p_region_1                              => 'Westchester',
          p_region_2                              => 'NY',
          p_postal_code                        => 10601,
          p_country                                => 'US',
          -- Output data elements
          -- --------------------------------
          p_address_id                          => ln_address_id,
          p_object_version_number   => ln_object_version_number
   );
 
 COMMIT;
EXCEPTION
       WHEN OTHERS THEN
                       ROLLBACK;
                       dbms_output.put_line(SQLERRM);
END;
/


Ur's
AmarAlam

Oracle HRMS API - Hire Into Job

0 comments
DECLARE
     -- Local Variables
     -- ---------------------
     lc_dt_ud_mode             VARCHAR2(100)  := NULL;
     ln_person_id                 NUMBER               := 32981;
     ln_object_number        NUMBER               := 1;
     ld_effective_date            DATE                     := TO_DATE('04-APR-2012');
     lc_employee_number  VARCHAR2(100)  := 'CONTACT_AJ408';
 
     -- Out Variables for Find Date Track Mode API
     -- ------------------------------------------------------------
     lb_correction                          BOOLEAN;
     lb_update                               BOOLEAN;
     lb_update_override              BOOLEAN;
     lb_update_change_insert   BOOLEAN;
   
   -- Out Variables for Hire to Job API
   -- -------------------------------------------
   ld_effective_start_date           DATE;
   ld_effective_end_date            DATE;
   lb_assign_payroll_warning   BOOLEAN;
   lb_orig_hire_warning              BOOLEAN;
   ln_assignment_id                    NUMBER;

 BEGIN
   -- Find Date Track Mode
   -- ----------------------------
   dt_api.find_dt_upd_modes
   (   -- Input data elements
       -- ---------------------------
       p_effective_date                 => TO_DATE('04-APR-2012'),
       p_base_table_name         => 'PER_ALL_PEOPLE_F',
       p_base_key_column         => 'PERSON_ID',
       p_base_key_value             => ln_person_id,
       -- Output data elements
       -- -----------------------------
       p_correction                          => lb_correction,
       p_update                               => lb_update,
       p_update_override              => lb_update_override,
       p_update_change_insert  => lb_update_change_insert
   );
 
     IF ( lb_update_override = TRUE OR lb_update_change_insert = TRUE )
   THEN
       -- UPDATE_OVERRIDE
       -- -----------------------------
       lc_dt_ud_mode := 'UPDATE_OVERRIDE';
   END IF;

 

   IF ( lb_correction = TRUE )
   THEN
       -- CORRECTION
       -- --------------------
       lc_dt_ud_mode := 'CORRECTION';
   END IF;

   IF ( lb_update = TRUE )
   THEN
       -- UPDATE
       -- --------------
       lc_dt_ud_mode := 'UPDATE';
   END IF;
 
   -- Hire into Job API
   -- ------------------------
   hr_employee_api.hire_into_job
   (   -- Input Data Elements
       -- -----------------------------
       p_effective_date                     => ld_effective_date,
       p_person_id                           => ln_person_id,
       p_datetrack_update_mode  => lc_dt_ud_mode,
       -- Output Data Elements
       -- ----------------------------
       p_object_version_number    => ln_object_number,
       p_employee_number             => lc_employee_number,
       p_assignment_id                   => ln_assignment_id,
       p_effective_start_date           => ld_effective_start_date,
       p_effective_end_date            => ld_effective_end_date,
       p_assign_payroll_warning   => lb_assign_payroll_warning,
       p_orig_hire_warning             => lb_orig_hire_warning
   );
 
 COMMIT;

EXCEPTION
        WHEN OTHERS THEN
                       ROLLBACK;
                       DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/



Ur's
AmarAlam

Oracle HRMS API – Create Employee Contact

2 comments
DECLARE
    ln_contact_rel_id                   PER_CONTACT_RELATIONSHIPS.CONTACT_RELATIONSHIP_ID%TYPE;
    ln_ctr_object_ver_num         PER_CONTACT_RELATIONSHIPS.OBJECT_VERSION_NUMBER%TYPE;
    ln_contact_person                 PER_ALL_PEOPLE_F.PERSON_ID%TYPE;
    ln_object_version_number  PER_CONTACT_RELATIONSHIPS.OBJECT_VERSION_NUMBER%TYPE;
    ld_per_effective_start_date DATE;
    ld_per_effective_end_date  DATE;
    lc_full_name                            PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
    ln_per_comment_id              PER_ALL_PEOPLE_F.COMMENT_ID%TYPE;
    lb_name_comb_warning     BOOLEAN;
    lb_orig_hire_warning           BOOLEAN;
 
BEGIN
    -- Create Employee Contact
    -- -------------------------------------
     hr_contact_rel_api.create_contact
     (    -- Input data elements
           -- -----------------------------
           p_start_date                                      => TO_DATE('04-APR-2011'),
           p_business_group_id                    => fnd_profile.value('PER_BUSINESS_GROUP_ID'),
           p_person_id                                      => 32979,
           p_contact_type                                 => 'M',
           p_date_start                                      => TO_DATE('04-APR-2011'),
           p_last_name                                     => 'SIVA',
           p_first_name                                     => 'CONTACT',
           p_personal_flag                               => 'Y',
           -- Output data elements
           -- --------------------------------
          p_contact_relationship_id            => ln_contact_rel_id,
          p_ctr_object_version_number      => ln_ctr_object_ver_num,
          p_per_person_id                              => ln_contact_person,
          p_per_object_version_number     => ln_object_version_number,
          p_per_effective_start_date             => ld_per_effective_start_date,
          p_per_effective_end_date              => ld_per_effective_end_date,
          p_full_name                                       => lc_full_name,
          p_per_comment_id                          => ln_per_comment_id,
          p_name_combination_warning  => lb_name_comb_warning,
          p_orig_hire_warning                      => lb_orig_hire_warning
     );
 
 COMMIT;

EXCEPTION
            WHEN OTHERS THEN
                      ROLLBACK;
                      dbms_output.put_line(SQLERRM);
END;
/


Ur's
AmarAlam

Oracle HRMS API – Update Employee

0 comments
DECLARE
   -- Local Variables
   -- -----------------------
   ln_object_version_number       PER_ALL_PEOPLE_F.OBJECT_VERSION_NUMBER%TYPE  := 7;
    lc_dt_ud_mode                            VARCHAR2(100)                                                                                     := NULL;
    ln_assignment_id                       PER_ALL_ASSIGNMENTS_F.ASSIGNMENT_ID%TYPE          := 33564;
    lc_employee_number                 PER_ALL_PEOPLE_F.EMPLOYEE_NUMBER%TYPE               := 'AJ408';
 
   -- Out Variables for Find Date Track Mode API
   -- ----------------------------------------------------------------
   lb_correction                                  BOOLEAN;
    lb_update                                        BOOLEAN;
    lb_update_override                      BOOLEAN;  
    lb_update_change_insert           BOOLEAN;

   -- Out Variables for Update Employee API
   -- -----------------------------------------------------------
    ld_effective_start_date                       DATE;
    ld_effective_end_date                        DATE;
    lc_full_name                                         PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
    ln_comment_id                                    PER_ALL_PEOPLE_F.COMMENT_ID%TYPE;  
    lb_name_combination_warning    BOOLEAN;
    lb_assign_payroll_warning             BOOLEAN;
    lb_orig_hire_warning                        BOOLEAN;


BEGIN


    -- Find Date Track Mode
    -- --------------------------------
    dt_api.find_dt_upd_modes
     (    -- Input Data Elements
          -- ------------------------------
          p_effective_date                           => TO_DATE('04-APR-2010'),
          p_base_table_name                    => 'PER_ALL_ASSIGNMENTS_F',
          p_base_key_column                   => 'ASSIGNMENT_ID',
          p_base_key_value                       => ln_assignment_id,
          -- Output data elements
          -- -------------------------------
         p_correction                                   => lb_correction,
         p_update                                         => lb_update,
         p_update_override                       => lb_update_override,
         p_update_change_insert            => lb_update_change_insert
   );
 
   IF ( lb_update_override = TRUE OR lb_update_change_insert = TRUE )
   THEN
          -- UPDATE_OVERRIDE
          -- ---------------------------------
          lc_dt_ud_mode := 'UPDATE_OVERRIDE';
   END IF;

   IF ( lb_correction = TRUE )
   THEN
         -- CORRECTION
         -- ----------------------
         lc_dt_ud_mode := 'CORRECTION';
   END IF;

   IF ( lb_update = TRUE )
   THEN
        -- UPDATE
        -- --------------
         lc_dt_ud_mode := 'UPDATE';
   END IF;
 
    -- Update Employee API
    -- ---------------------------------  
    hr_person_api.update_person
    (       -- Input Data Elements
            -- ------------------------------
            p_effective_date                              => TO_DATE('04-APR-2010'),
            p_datetrack_update_mode         => lc_dt_ud_mode,
            p_person_id                                     => 32979,
            p_middle_names                            => 'ALAM',
            p_marital_status                             => 'M',
            -- Output Data Elements
            -- ----------------------------------
           p_employee_number                       => lc_employee_number,
           p_object_version_number              => ln_object_version_number,
           p_effective_start_date                      => ld_effective_start_date,
           p_effective_end_date                       => ld_effective_end_date,
           p_full_name                                       => lc_full_name,
           p_comment_id                                   => ln_comment_id,
           p_name_combination_warning   => lb_name_combination_warning,
           p_assign_payroll_warning           => lb_assign_payroll_warning,
           p_orig_hire_warning                      => lb_orig_hire_warning
    );
 
   COMMIT;


EXCEPTION
       WHEN OTHERS THEN
                   ROLLBACK;
                   dbms_output.put_line(SQLERRM);
END;
/


Ur's
AmarAlam

Oracle HRMS API – Create Employee

0 comments
API - hr_employee_api.create_employee

Example --

  -- Create Employee
 -- -------------------------

DECLARE

 
 lc_employee_number                       PER_ALL_PEOPLE_F.EMPLOYEE_NUMBER%TYPE    := 'AJ408';
 ln_person_id                                      PER_ALL_PEOPLE_F.PERSON_ID%TYPE;
 ln_assignment_id                             PER_ALL_ASSIGNMENTS_F.ASSIGNMENT_ID%TYPE;
 ln_object_ver_number                     PER_ALL_ASSIGNMENTS_F.OBJECT_VERSION_NUMBER%TYPE;
 ln_asg_ovn                                          NUMBER;
 
 ld_per_effective_start_date             PER_ALL_PEOPLE_F.EFFECTIVE_START_DATE%TYPE;
 ld_per_effective_end_date              PER_ALL_PEOPLE_F.EFFECTIVE_END_DATE%TYPE;
 lc_full_name                                        PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
 ln_per_comment_id                          PER_ALL_PEOPLE_F.COMMENT_ID%TYPE;
 ln_assignment_sequence                 PER_ALL_ASSIGNMENTS_F.ASSIGNMENT_SEQUENCE%TYPE;
 lc_assignment_number                    PER_ALL_ASSIGNMENTS_F.ASSIGNMENT_NUMBER%TYPE;
 
 lb_name_combination_warning   BOOLEAN;
 lb_assign_payroll_warning           BOOLEAN;
 lb_orig_hire_warning                       BOOLEAN;



BEGIN
           hr_employee_api.create_employee
           (   -- Input data elements
               -- ------------------------------
               p_hire_date                                         => TO_DATE('04-APR-2010'),
               p_business_group_id                      => fnd_profile.value_specific('PER_BUSINESS_GROUP_ID'),
               p_last_name                                       => 'ALAM',
               p_first_name                                       => 'AMAR',
               p_middle_names                              => NULL,
               p_sex                                                     => 'M',
               p_national_identifier                       => '408-408-4080',
               p_date_of_birth                                 => TO_DATE('04-APR-1990'),
               p_known_as                                       => 'AJ',
               -- Output data elements
               -- --------------------------------
               p_employee_number                         => lc_employee_number,
               p_person_id                                         => ln_person_id,
               p_assignment_id                                => ln_assignment_id,
               p_per_object_version_number       => ln_object_ver_number,
               p_asg_object_version_number       => ln_asg_ovn,
               p_per_effective_start_date               => ld_per_effective_start_date,
               p_per_effective_end_date                => ld_per_effective_end_date,
               p_full_name                                         => lc_full_name,
               p_per_comment_id                            => ln_per_comment_id,
               p_assignment_sequence                  => ln_assignment_sequence,
               p_assignment_number                     => lc_assignment_number,
               p_name_combination_warning    => lb_name_combination_warning,
               p_assign_payroll_warning            => lb_assign_payroll_warning,
               p_orig_hire_warning                        => lb_orig_hire_warning
        );
 
    COMMIT;



EXCEPTION
      WHEN OTHERS THEN
                    ROLLBACK;
                    dbms_output.put_line(SQLERRM);
END;
/


Ur's
AmarAlam

Friday, 24 May 2013

Sample Report And Functionality of Report Builder Objects

0 comments

In this tutorial, we will see how to customize the existing standard Oracle report to get a delimited output file instead of the regular layout. Most business users prefer delimited report output as it can easily be imported into Excel where they can manipulate and perform calculations on the data easily.
Report Builder is the tool used to develop/customize Oracle reports. Before getting into the details, I would like to give an overview about Report Builder.
Main Components of a Report Builder:
Below is the snapshot of the Object navigator when you open a report in Report Builder. Some important components are Data Model, Layout Model, Parameter form, Triggers. Let’s discuss about each one of them in detail.
  • Data Model:
    The Data Model is a work area in which you define what data to retrieve when the report is submitted. You create and define queries, groups, columns, parameters, and links which are called data model objects to determine what data needs to be extracted from the database as part of a report.
Tool Palette in Data Model view:

#ObjectObject NameDescription
1SelectTo Select objects for an operation
2MagnifyTo Magnify an area
3SQL QueryTo create a new query in the data Model
4RefCursor QueryTo Create a new Ref Cursor query
5Summary ColumnTo create a summary column. A summary column performs a computation like sum, average, count, minimum, maximum, % total on another column’s data.
6Formula ColumnTo create a Formula column. A formula column performs a user-defined computation on another column’s data
7Cross ProductTo create a Cross Product group
8Data LinkTo create relationship between two queries in the data model
9Placeholder ColumnTo Create a Placeholder column. A placeholder is a column for which you set the datatype and value in PL/SQL that you define. You can set the value of a placeholder column in the following places:
– Before Report Trigger, if the placeholder is a report-level column
– report-level formula column, if the placeholder is a report-level column
–a formula in the placeholder’s group or a group below it (the value is set once for each record of the group)

  • Layout Model:
    Layout Model is a work area in which you can define the format (using objects like frames, repeating frames, fields, boilerplate, anchors, and Graphics objects) of your report output. When you run a report, Report Builder uses the Layout Model as a default template for the report output.
Layout Tool Palette:
#ObjectObject NameDescription
1Select ToolTo select one or more objects
2Frame SelectTo select frame or repeating frame and all the objects within them.
3RotateTo rotate Objects
4ReshapeTo change the shape of the objects
5MagnifyTo magnify the area
6LineTo draw a line
7RectangleTo draw a rectangular object
8Rounded RectangleTo draw a rounded rectangular object
9EllipseTo draw a elliptic object
10ArcTo draw arc
11PolylineTo create a Polyline object
12PolygonTo draw a polygon object
13TextTo create a Text object
14FreehandTo create a free form obk=ject
15FrameTo create a frame. Frames are used to surround other objects and protect them from being overwritten or pushed by other objects
16Repeating FrameTo create a repeating frame. Repeating frames surround all of the fields that are created for a group’s columns meaning each repeating frame must be associated with a group created in the Data model. The repeating frame prints (is fired) once for each record of the group.
17Link fileTo create an object that is read in from file
18FieldTo create a field
19ChartTo create a Chart
20ButtonTo create a button
21AnchorTo create an anchor between two objects. Since the size of some layout objects may change when the report runs, you need anchors to define where you want objects to appear relative to one another.
22OLE2To create OLE2 object

  • Parameter Form:
Parameter Form enables you to define the parameters for your report.
Tool Palette:
  • Report Triggers:
    Report triggers execute PL/SQL functions at specific times during the execution and formatting of your report. Report Builder has five global report triggers:
    • After Parameter Form trigger:
      This trigger fires after the Parameter form is displayed.
    • After Report trigger:
      This trigger fires after the report output is displayed. You can use this trigger to delete any temporary values or tables created during the process.
    • Before Parameter Form trigger:
      This trigger fires before the Parameter form is displayed.
    • Before Report trigger:
      This trigger fires before the reports is executed but after queries are parsed and data is fetched.
    • Between Pages trigger:
      This fires before each page of the report is formatted, except the very first page. This can be used to display page totals etc.

Report Customization steps:
When you have to customize a standard report, it is always advisable not to make changes to the standard report itself, instead rename it to another report and make the changes to it.
Steps:
  • Download the original rdf from the file system.
  • Open it in Report builder.
  • Save it with a different name that meets the client’s naming conventions.
  • Make the necessary changes to it.
  • Save and compile the report.
  • Move it to the custom top/reports/US
  • Register it as a concurrent program in Oracle Applications under custom application.

Steps to change the report output to a Pipe delimited output:
The requirement here is to customize the standard “Receipt Adjustment report” to get a delimited output file instead of the regular layout. The output file should have header information like shown below on the top of the output page followed by the receipt adjustment data whose fields are separated by ‘~’.
Vendor Name~PO Number~PO Line~Po Line Description~Item Number~Category~Organization~Ship To Location~Qty Ordered~Net Qty Received~Qty Billed~Qty Accepted~Qty Rejected~Qty Cancelled~Received Qty Corrected~Net Qty RTV~Qty RTV Corrected~Receipt Num~Transaction Date~Transaction Type~Parent Transaction~Transaction amount~Unit

Regular Layout generated by the standard report:
We need Pipe delimited Output file like the below:
To achieve this:
  • We have to get rid of the current layout and create a new layout with 2 objects:
    Frame to print the header information.
    Repeating Frame to print the data.

  • We need to create a Formula column in the Data model that will get the concurrent program’s output filename. We will use this file to write our pipe delimited report output to.
Steps:
  1. Download the original report POXRVRTN.rdf
  2. Open the report in the Report Builder. File>Open
  3. Rename it according Custom naming conventions followed by the client. Here we will rename it to XXERP_POXRVRTN
    Tools> Property Palette
    Give the name as: XXERP_POXRVRTN

  1. To Create a Formula column to derive the output file name:
  • Double click on the Data model in the Object Navigator.
  • Click  in the tool palette
  • Click and drag a rectangle.
  • Double-click the formula column created in the data model to open up its property palette where you can set its properties.
    Name: Give the name as C_OUTPUT_FILE
    Data Type: Choose Character
    Width: 300
    PL/SQL Formula: Insert the below code which gets the Concurrent program’s output filename from the database.
    function C_OUTPUT_FILEFormula return Char is
    v_filename fnd_concurrent_requests.outfile_name%type;

    begin
    SELECT outfile_name
    INTO v_filename
    FROM fnd_concurrent_requests
    WHERE request_id = :P _CONC_REQUEST_ID;
    RETURN(v_filename);
    exception
    when others then
    RETURN(null);
    end;

  1. Double click on the Layout model in the Object Navigator.
  2. Remove all the objects placed in the layout model except “No Data Found” Object.
  3. Place a Frame and a repeating frame one below the other as shown below.

  • To place a frame in the Layout:
    Click  in the tool palette.
    Click and drag a rectangle.
    Double-click the frame object in the layout to open up its property palette where you can set its properties.

Some important properties are discussed here.
  • Name: Rename it to whatever you want.
  • Vertical and Horizontal Elasticity: For frames and repeating frames, elasticity defines whether the size of the frame or repeating frame should vary with the objects inside of it.

Possible Values that you can enter are Contract, Expand, Fixed, and Variable.
  • Contract means the vertical (for vertical elasticity) or horizontal (for horizontal elasticity) size of the object decreases, if the formatted objects or data within it are short (for vertical elasticity) or less wide (for horizontal elasticity) enough, but it cannot increase to a height (for vertical elasticity) or width (for horizontal elasticity) greater than that shown in the Report Editor.
  • Expand Means the vertical (for vertical elasticity) or horizontal (for horizontal elasticity) size of the object increases, if the formatted objects or data within it are tall or more wide enough, but it cannot decrease to a height or width less than that shown in the Report Editor.
  • Fixed Means the height or width of the object is the same on each logical page, regardless of the size of the objects or data within it. Truncation of data may occur.
  • Variable Means the object may expand or contract vertically to accommodate the objects or data within it (with no extra space), which means the height or width shown in the Report Editor has no effect on the object’s height or width at runtime.

  • To place a repeating frame in the Layout:
    Click  in the tool palette.
    Click and drag a rectangle.
    Double Click on Repeating Frame to open up the property palette and rename it. Every repeating frame must be associated with a group defined in the Data model.
    Here give the Source as “G_shipment_lines”.
    Set the Vertical and horizontal elasticity to the required.

  1. To print a pipe delimited text in the output file, we will use a format trigger on the frame and repeating frame.
    format trigger is a PL/SQL function executed before an object is formatted. This function must return a Boolean value (TRUE or FALSE). Depending on whether the function returns TRUE or FALSE, the current instance of the object is included or excluded from the report output. Format trigger can be used to highlight a value, for suppressing values and labels.
In the property palette of the Frame, under Advanced Layout section:

Double Click on the Format Trigger. This opens up a SQL Editor, where you can place the below code to print the header information to the output file.
function M_SHIPMENT_LINE_HDRFormatTrigg return boolean is
–Variable declaration
cmd_line VARCHAR2(3000);
v_file_name text_io.file_type;
begin
–Setting cmd_line variable to the header info
cmd_line := ‘Vendor Name’||’~'||’PO Number’||’~'||’PO Line’||’~'||’Po Line Description’||’~'||’Item Number’||’~'||’Category’||’~'||’Organization’||’~'||’Ship To Location’||’~'||’Qty Ordered’||’~'||’Net Qty Received’||’~'||’Qty Billed’||’~'||’Qty Accepted’||’~'||’Qty Rejected’||’~'||’Qty Cancelled’||’~'||’Received Qty Corrected’||’~'||’Net Qty RTV’||’~'||’Qty RTV Corrected’||’~'||’Receipt Num’||’~'||’Transaction Date’||’~'||’Transaction Type’||’~'||’Parent Transaction’||’~'||’Transaction amount’||’~'||’Unit’;
–Opening the concurrent request’s output file to write the data into it
–Always prefix “:” with the field,when you refer to a field in the data model like
:C_OUTPUT_FILE
v_file_name := TEXT_IO.FOPEN(:C_OUTPUT_FILE, ‘A’);
IF TEXT_IO.IS_OPEN(v_file_name) THEN
TEXT_IO.PUT_LINE(v_file_name, cmd_line);
END IF;
TEXT_IO.FCLOSE(v_file_name);
–If the return value is true then only this object will be included in the report output
return (TRUE);
end;

Similarly include the below code in the format trigger of the repeating frame to write the receipt records into the output file.
function R_shipment_linesFormatTrigger return boolean is
cmd_line VARCHAR2(2000);
v_file_name text_io.file_type;
begin
cmd_line := :Source||’~'||:Document_Number||’~'||:Line||’~'||:Description||’~'||:C_FLEX_ITEM_DISP||’~'||:C_FLEX_CAT_DISP||’~'||:Organization_name||’~'||:Ship_To_Location||’~'              ||:Quantity_Ordered||’~'||:C_qty_net_rcvd||’~'||:qty_billed||’~'||:qty_accepted||’~'||:qty_rejected||’~'||:qty_cancelled||’~'||:C_qty_corrected||’~'||:C_qty_rtv_and_corrected||’~'||:C_qty_corrected_rtv||’~'||:Receipt_Number||’~'||:Receipt_Date||’~'||:Transaction_Type||’~’      ||:Parent_Transaction_Type||’~'||:Transaction_Quantity||’~'||:Transaction_Unit;
v_file_name := TEXT_IO.FOPEN(:C_OUTPUT_FILE, ‘A’);
IF TEXT_IO.IS_OPEN(v_file_name) THEN
TEXT_IO.PUT_LINE(v_file_name, cmd_line);
END IF;
TEXT_IO.FCLOSE(v_file_name);
return (TRUE);
end;

  1. Now that the changes are done, save the report.
  2. Connect to the database by navigating to File > Connect
  1. Then compile the report by navigating to Program> Compile> All.
    Errors will be listed if there are any. Correct them and recompile. If there are no errors and the compilation was successful, you will get the below message. Click OK and save again.
  1. Now move the report to the Custom top/Reports/US
  2. Register it as a concurrent program in Oracle Applications and assign it to the desired responsibilities. Please refer to Concurrent Program registration article for registration details.



Ur's
Amaralam