Monday, June 27, 2016

xml commands

Seq
Feature
Command
1
Choose
<?choose:?><?when:ABSENCE_DAYS=1?> 
(Any logo for EX)
<?end when?><?when:ABSENCE_DAYS=2?>
(Any Word for EX)    2 Days   
<?end when?><?end choose?>



2
If (Change field color)
<?ABSENCE_DAYS?><?if:ABSENCE_DAYS=1?>  <xsl:attribute  xdofo:ctx="block" name="background-color">red  </xsl:attribute>  <?end if?>

If (Change Record but this code in Key)
<?if@row:ABSENCE_DAYS=1?><xsl:attribute xdofo:ctx="incontext" name="background-color">green</xsl:attribute><?end if?>

If-Then-Else
<?xdofx:if ABSENCE_DAYS = 1 then 'x' else 'VV'end if?>



3
Column Format
<?if@column:ORGANIZATION_NAME="Access Network Development"?>
Column Name
<?end if?>
4
Variable (set & get)
<?xdoxslt:set_variable($_XDOCTX, 'x', 1)?>  <?xdoxslt:get_variable($_XDOCTX, 'x')?>

Add 10 to Variable x(code in Key)
<?xdoxslt:set_variable($_XDOCTX, 'x', xdoxslt:get_variable($_XDOCTX,'x')+10)?><?xdoxslt:get_variable($_XDOCTX, 'x')?>  



5
Page break
<?split-by-page-break:?>



6
Header & Footer
Header
<?start:body?>
                         Report Body
<?end body?>
Footer



In header <?call:customheader?>
In footer <?call:customfooter?>
In bage body
<?template: customheader?>
Here our header
<?end template ?>
<?template: customfooter?>
Here our footer
<?end template?>
Report Body



7
Page Total
<?ABSENCE_DAYS?><?add-page-total:XXCPX;'ABSENCE_DAYS'?>  (of calculated field)


In the footer to appear in every page
Sub Total Absence Days per page : <?show-page-total:XXCPX;'#,##0.00'?>




8
Run accumulative Total for column
Before the table define variable in the Key

<?xdoxslt:set_variable($_XDOCTX, 'RTotVar', 0)?>

Delete table End code and create new column the set in the Key

<?xdoxslt:set_variable($_XDOCTX, 'RTotVar', xdoxslt:get_variable($_XDOCTX, 'RTotVar') + ABSENCE_DAYS)?><?xdoxslt:get_variable($_XDOCTX, 'RTotVar')?>




9
Forward & Carry Forward
Before the table
<?init-page-total: EntAmt?>

In the table
<?ABSENCE_DAYS?><?add-page-total:EntAmt;ABSENCE_DAYS?>

After the table
<?end-page-total:EntAmt?>

In the Header in the Key code
<xdofo:inline-total display-condition="exceptfirst" name="EntAmt">Brought Forward: <xdofo:show-brought-forward name="EntAmt" format="99G999G999D00"/></xdofo:inline-total>

In the Footer
1-      Get page total
<?show-page-total:EntAmt;"99G999G999D00"?>

2-      Get Carried forward in the Key code
<xdofo:inline-total display-condition="exceptlast" name="EntAmt">Carried Forward:   <xdofo:show-carry-forward name="EntAmt" format="99G999G999D00"/></xdofo:inline-total>

gl interfaces

Oracle GL Daily Conversion Rates Details

This interface lets you load the rates automatically into General Ledger.

Pre-requisites:       Currencies
Conversion rate Types

Interface tables:
GL_DAILY_RATES_INTERFACE

Base tables:
GL_DAILY_RATES
GL_DAILY_CONVERSION_TYPES

Concurrent Program:You do not need to run any import programs. The insert, update, or deletion of rates in GL_DAILY_RATES is done automatically by database triggers on the GL_DAILY_RATES_INTERFACE. All that is required is to develop program to populate the interface table with daily rates information.

Validations:             Check if FROM_CURRENCY and TO_CURRENCY are valid.
Check if USER_CONVERSION_TYPE is valid.

Some important columns that need to be populated in the interface tables:
 GL_DAILY_RATES_INTERFACE:
 FROM_CURRENCY
TO_CURRENCY
FROM_CONVERSION_DATE
TO_CONVERSION_DATE
USER_CONVERSION_TYPE
CONVERSION_RATE
MODE_FLAG (D= Delete, I = Insert, U = Update)

INVERSE_CONVERSION_RATE

Oracle GL Budget Interface Details

Budget interface lets you load budget data from external sources into Oracle Applications.

Pre-requisites:Set of Books
Flex field Value sets
Code Combinations

Interface tables:
GL_BUDGET_INTERFACE

Base tables:
GL_BUDGETS
GL_BUDGET_ASSIGNMENTS
GL_BUDGET_TYPES

Concurrent program:
Budget Upload

Validations:
Check if CURRENCY_CODE is valid.
Check if SET_OF_BOOKS_ID is valid.
Check if BUDGET_ENTITY_NAME (budget organization) is valid.

Some important columns that need to be populated in the interface tables:
GL_BUDGET_INTERFACE:
BUDGET_NAME NOT
BUDGET_ENTITY_NAME
CURRENCY_CODE
FISCAL_YEAR
UPDATE_LOGIC_TYPE
BUDGET_ENTITY_ID
SET_OF_BOOKS_ID
CODE_COMBINATION_ID
BUDGET_VERSION_ID
PERIOD_TYPE
DR_FLAG
STATUS
ACCOUNT_TYPE
PERIOD1_AMOUNT through PERIOD60_AMOUNT
SEGMENT1 through SEGMENT30

Oracle GL Journal interface Details

This interface lets you import journals from other applications like Receivables, Payables etc to integrate the information with General Ledger.

Pre-requisites:
Set of Books
Flex field Value sets
Code Combinations
Currencies
Categories
Journal Sources

Interface tables:
GL_INTERFACE

Base tables:
GL_JE_HEADERS
GL_JE_LINES
GL_JE_BACTHES

Concurrent Program:
Journal Import
Journal Posting — populates GL_BALANCES

Validations:
Validate SOB, journal source name, journal category name, actual flag
A – Actual amounts
B – Budget amounts
E – Encumbrance amount
If you enter E in the interface table, then enter appropriate encumbrance ID, if
B enter budget id.
Check if accounting date or GL date based period name is valid (i.e., not closed).
Check if accounting date falls in open or future open period status.
Check chart of accounts id based on Sob id.
Check if code combination is valid and enabled.
Check if record already exists in GL interface table.
Check if already journal exists in GL application.

Some important columns that need to be populated in the interface tables:
GL_INTERFACE:
STATUS
SET_OF_BOOKS_ID
ACCOUNTING_DATE
CURRENCY_CODE
DATE_CREATED
CREATED_BY
ACTUAL_FLAG
USER_JE_CATEGORY_NAME
USER_JE_SOURCE_NAME
CURRENCY_CONVERSION_DATE
ENCUMBRANCE_TYPE_ID
BUDGET_VERSION_ID
USER_CURRENCY_CONVERSION_TYPE
CURRENCY_CONVERSION_RATE
SEGMENT1 to
ENTERED_DR
ENTERED_CR
ACCOUNTED_DR
ACCOUNTED_CR
TRANSACTION_DATE
PERIOD_NAME
JE_LINE_NUM
CHART_OF_ACCOUNTS_ID
FUNCTIONAL_CURRENCY_CODE
CODE_COMBINATION_ID
DATE_CREATED_IN_GL

GROUP_ID

TUESDAY, DECEMBER 8, 2015

Oracle Custom WEB ADI Setups and Process for AP Invoice Interface

Introduction:
There are basically two ways to enter data into Oracle: by typing it into a user interface (Java Form or Web Page) or by taking a file and programmatically interfacing the data.  Web ADI falls into the second category in that it takes an Excel file and programmatically loads the data into Oracle.  If you find it easier to enter data into Excel than Oracle forms, you should look into using Web ADI.

Downloading a Web ADI
The first step in downloading a template is to locate the responsibility and menu that is linked to that template.  Some templates can be downloaded from the Desktop Integration menu and others must be downloaded from a specific responsibility.  For security, some templates are linked to specific responsibilities.  For example, we can download the GL Journals template from the Desktop Integration responsibility but we can’t download the Project Transaction Import template from the same responsibility.
To download a template you will use the following components: integrator, viewer, layout, and content. Based on how the menu is setup, some of these components may default for you.

Integrator
The integrator defines what data you will be uploading to Oracle.  Each integrator serves a specific purpose and cannot be used to enter other data.

Viewer
The viewer is the Microsoft program you will use to enter data into the template

Layout
The layout is how the data columns are organized on the template.  You have two main sections to a template: a header and lines.  The header information applies to all the lines when the data is uploaded to Oracle.

Content
The content is a text file that you can import into your template.  You can use this feature if you have an external system that outputs text file and you want to import that into the template.

Pre-requisites for working on Development or use of WEBADIs

1.Check the value for profile option named BNE Allow No Security Rule and set the value to Yes

 

2. ENABLE THE MACROS OPTIONS FOR YOUR EXCEL SHEET


Select Excel option to set the properties

Click on Trust Centre -> Trust center Settings

Select Macro Settings -> Enable all macros and check the option Trust access to the VBA Project object model

Apply and save your settings
Assign responsibility Oracle WEBADI or Desktop Integrator to do the development of new WEBADIs


Compile the below Custom table and Package in APPS schema
--> ====================================================================
DROP TABLE XXAA_APINV_IFACE_TBL;

CREATE TABLE XXAA_APINV_IFACE_TBL
  (
     SOURCE               VARCHAR2(50),
     ORGANIZATION         VARCHAR2(40),
     INVOICE_TYPE         VARCHAR2(40),
     SUPPLIER_NAME        VARCHAR2(60),
     SUPPLIER_NUM         VARCHAR2(60),
     SUPPLIER_SITE        VARCHAR2(40),
     INVOICE_DATE         DATE,
     INVOICE_NUMBER       VARCHAR2(60),
     INVOICE_AMOUNT       NUMBER(10,2),
     TERMS                VARCHAR2(60),
     INVOICE_CURRENCY     VARCHAR2(25),
     GL_DATE              DATE,
     PAYMENT_CURRENCY     VARCHAR2(25),
     PAYMENT_METHOD       VARCHAR2(40),
     LINE_NUM             NUMBER,
     LINE_TYPE            VARCHAR2(25),
     LINE_AMOUNT          NUMBER(10,2),
     SEGMENT1             VARCHAR2(25),
     SEGMENT2             VARCHAR2(25),
     SEGMENT3             VARCHAR2(25),
     SEGMENT4             VARCHAR2(25),
     SEGMENT5             VARCHAR2(25),
     LINE_DESCRIPTION     VARCHAR2(100),
     ORG_ID               NUMBER,
     VENDOR_ID            NUMBER,
     VENDOR_SITE_ID       NUMBER,
     TERM_ID              NUMBER,
     CODE_COMBINATION_ID  NUMBER,
     last_update_date     DATE,
     last_updated_by      NUMBER,
     creation_date        DATE,
     created_by           NUMBER,
     last_update_login    NUMBER ,
     status               VARCHAR2(50),
     error_code           VARCHAR2(15),
     error_message        VARCHAR2(3000)
  );

--> ====================================================================
CREATE OR REPLACE PACKAGE XXAA_APINV_IFACE_PKG
IS
PROCEDURE XXAA_APINV_IFACE_LOAD_PRC
     (
           P_SOURCE            VARCHAR2
           ,P_ORGANIZATION      VARCHAR2
           ,P_INVOICE_TYPE      VARCHAR2
           ,P_SUPPLIER_NAME     VARCHAR2
           ,P_SUPPLIER_NUM      VARCHAR2       
           ,P_SUPPLIER_SITE     VARCHAR2
           ,P_INVOICE_DATE      DATE
           ,P_INVOICE_NUMBER    VARCHAR2
           ,P_INVOICE_AMOUNT    NUMBER
           ,P_TERMS             VARCHAR2
           ,P_INVOICE_CURRENCY  VARCHAR2
           ,P_GL_DATE           DATE
           ,P_PAYMENT_CURRENCY  VARCHAR2
           ,P_PAYMENT_METHOD    VARCHAR2
           ,P_LINE_NUM          NUMBER
           ,P_LINE_TYPE         VARCHAR2
           ,P_LINE_AMOUNT       NUMBER
           ,P_LINE_DESCRIPTION  VARCHAR2
           ,P_SEGMENT1          VARCHAR2
           ,P_SEGMENT2          VARCHAR2
           ,P_SEGMENT3          VARCHAR2
           ,P_SEGMENT4          VARCHAR2
           ,P_SEGMENT5          VARCHAR2
     );
    
PROCEDURE XXAA_APINV_IFACE_IMPORT_PRC;
END XXAA_APINV_IFACE_PKG;
/

--> ====================================================================
CREATE OR REPLACE PACKAGE XXAA_APINV_IFACE_PKG
IS
PROCEDURE XXAA_APINV_IFACE_LOAD_PRC
     (
           P_SOURCE            VARCHAR2
           ,P_ORGANIZATION      VARCHAR2
           ,P_INVOICE_TYPE      VARCHAR2
           ,P_SUPPLIER_NAME     VARCHAR2
           ,P_SUPPLIER_NUM      VARCHAR2       
           ,P_SUPPLIER_SITE     VARCHAR2
           ,P_INVOICE_DATE      DATE
           ,P_INVOICE_NUMBER    VARCHAR2
           ,P_INVOICE_AMOUNT    NUMBER
           ,P_TERMS             VARCHAR2
           ,P_INVOICE_CURRENCY  VARCHAR2
           ,P_GL_DATE           DATE
           ,P_PAYMENT_CURRENCY  VARCHAR2
           ,P_PAYMENT_METHOD    VARCHAR2
           ,P_LINE_NUM          NUMBER
           ,P_LINE_TYPE         VARCHAR2
           ,P_LINE_AMOUNT       NUMBER
           ,P_LINE_DESCRIPTION  VARCHAR2
           ,P_SEGMENT1          VARCHAR2
           ,P_SEGMENT2          VARCHAR2
           ,P_SEGMENT3          VARCHAR2
           ,P_SEGMENT4          VARCHAR2
           ,P_SEGMENT5          VARCHAR2
     );
    
PROCEDURE XXAA_APINV_IFACE_IMPORT_PRC;
END XXAA_APINV_IFACE_PKG;
/

--> ====================================================================
CREATE OR REPLACE PACKAGE body XXAA_APINV_IFACE_PKG
IS
PROCEDURE XXAA_APINV_IFACE_LOAD_PRC
     (
           P_SOURCE            VARCHAR2
           ,P_ORGANIZATION      VARCHAR2
           ,P_INVOICE_TYPE      VARCHAR2
           ,P_SUPPLIER_NAME     VARCHAR2
           ,P_SUPPLIER_NUM      VARCHAR2       
           ,P_SUPPLIER_SITE     VARCHAR2
           ,P_INVOICE_DATE      DATE
           ,P_INVOICE_NUMBER    VARCHAR2
           ,P_INVOICE_AMOUNT    NUMBER
           ,P_TERMS             VARCHAR2
           ,P_INVOICE_CURRENCY  VARCHAR2
           ,P_GL_DATE           DATE
           ,P_PAYMENT_CURRENCY  VARCHAR2
           ,P_PAYMENT_METHOD    VARCHAR2
           ,P_LINE_NUM          NUMBER
           ,P_LINE_TYPE         VARCHAR2
           ,P_LINE_AMOUNT       NUMBER
           ,P_LINE_DESCRIPTION  VARCHAR2
           ,P_SEGMENT1          VARCHAR2
           ,P_SEGMENT2          VARCHAR2
           ,P_SEGMENT3          VARCHAR2
           ,P_SEGMENT4          VARCHAR2
           ,P_SEGMENT5          VARCHAR2
     )
IS
  l_error_message               VARCHAR2(3000);
  l_error_code                  VARCHAR2(2);
  l_org_id                      NUMBER;
  l_invoice_num                 VARCHAR2(60);
  l_vendor_id                   NUMBER;
  l_vendor_site_id              NUMBER;
  l_term_id                     NUMBER;
  l_code_combination_id         NUMBER;
   
BEGIN
  l_error_message := '';
  l_error_code    :='V';
   
  -->Organization Validation
  BEGIN
     l_org_id := NULL; 
    SELECT organization_id
    INTO l_org_id
    FROM hr_organization_units hou
    WHERE hou.name=P_ORGANIZATION;
  EXCEPTION
  WHEN no_data_found THEN
    l_error_message :=l_error_message||','||'Organization not defined ';
    l_error_code    :='E';
  WHEN too_many_rows THEN
    l_error_message :=l_error_message||','||'Too Many Records for Organization ';
    l_error_code    :='E';
  WHEN OTHERS THEN
    l_error_message :=l_error_message||','||'Other Errors with Organization '||SQLCODE ||sqlerrm;
    l_error_code    :='E';
  END;

  -->Invoice Number Validation
  BEGIN
     l_invoice_num := NULL;
    SELECT COUNT (api.invoice_num)
    INTO l_invoice_num
    FROM ap_invoices_all api
    WHERE UPPER(api.invoice_num) = UPPER(P_INVOICE_NUMBER);
    
     IF l_invoice_num > 0
     THEN
           l_error_message :=l_error_message||','||'Invoice number already exist in oracle ';
           l_error_code    :='E';
     END IF;
    
  EXCEPTION
  WHEN no_data_found THEN
    l_error_message :=l_error_message||','||'Error in validating the invoice number ';
    l_error_code    :='E';
  WHEN OTHERS THEN
    l_error_message :=l_error_message||','||'Other Errors with invoice number '||SQLCODE ||sqlerrm;
    l_error_code    :='E';
  END;
 
  -->Supplier Validation
  BEGIN
     l_vendor_id := NULL;
    SELECT vendor_id
    INTO l_vendor_id
    FROM ap_suppliers aps
    WHERE (UPPER(aps.vendor_name) = UPPER(P_SUPPLIER_NAME) OR UPPER(aps.segment1) = UPPER(P_SUPPLIER_NUM));
  EXCEPTION
  WHEN no_data_found THEN
    l_error_message :=l_error_message||','||'Supplier not defined ';
    l_error_code    :='E';
  WHEN too_many_rows THEN
    l_error_message :=l_error_message||','||'Too Many Records for Supplier ';
    l_error_code    :='E';
  WHEN OTHERS THEN
    l_error_message :=l_error_message||','||'Other Errors with Supplier '||SQLCODE ||sqlerrm;
    l_error_code    :='E';
  END;

  -->Supplier Site Validation
  BEGIN
     l_vendor_site_id := NULL;
    SELECT vendor_site_id
    INTO l_vendor_site_id
    FROM ap_supplier_sites_all ass
    WHERE ass.vendor_id = l_vendor_id
       AND ass.org_id = l_org_id
       AND UPPER(ass.vendor_site_code) = UPPER(P_SUPPLIER_SITE);
  EXCEPTION
  WHEN no_data_found THEN
    l_error_message :=l_error_message||','||'Supplier Site not defined ';
    l_error_code    :='E';
  WHEN too_many_rows THEN
    l_error_message :=l_error_message||','||'Too Many Records for Supplier Site ';
    l_error_code    :='E';
  WHEN OTHERS THEN
    l_error_message :=l_error_message||','||'Other Errors with Supplier Site '||SQLCODE ||sqlerrm;
    l_error_code    :='E';
  END;

  -->Terms Validation
  BEGIN
     l_term_id := NULL;
    SELECT term_id
    INTO l_term_id
    FROM ap_terms apt
    WHERE UPPER(apt.name) = UPPER(P_TERMS);
  EXCEPTION
  WHEN no_data_found THEN
    l_error_message :=l_error_message||','||'Terms not defined ';
    l_error_code    :='E';
  WHEN too_many_rows THEN
    l_error_message :=l_error_message||','||'Too Many Records for Terms ';
    l_error_code    :='E';
  WHEN OTHERS THEN
    l_error_message :=l_error_message||','||'Other Errors with Terms '||SQLCODE ||sqlerrm;
    l_error_code    :='E';
  END;
 
  -->Account segment Validation
  BEGIN
    SELECT code_combination_id
    INTO l_code_combination_id
    FROM gl_code_combinations
    WHERE segment1= P_SEGMENT1
    AND segment2  = P_SEGMENT2
    AND segment3  = P_SEGMENT3
    AND segment4  = P_SEGMENT4
    AND segment5  = P_SEGMENT5;
  EXCEPTION
  WHEN no_data_found THEN
    l_error_message :=l_error_message||','||'Invalid Flex field combination ';
    l_error_code    :='E';
  WHEN too_many_rows THEN
    l_error_message :=l_error_message||','||'Too Many Records for Flex field combination ';
    l_error_code    :='E';
  WHEN OTHERS THEN
    l_error_message :=l_error_message||','||'Other Errors with Flex field combination '||SQLCODE ||sqlerrm;
    l_error_code    :='E';
  END;
 
  -->Insert the data into the staging table
  INSERT INTO XXAA_APINV_IFACE_TBL
  (
   SOURCE                 
  ,ORGANIZATION     
  ,INVOICE_TYPE     
  ,SUPPLIER_NAME
  ,SUPPLIER_NUM 
  ,SUPPLIER_SITE          
  ,INVOICE_DATE     
  ,INVOICE_NUMBER         
  ,INVOICE_AMOUNT         
  ,TERMS                  
  ,INVOICE_CURRENCY 
  ,GL_DATE          
  ,PAYMENT_CURRENCY 
  ,PAYMENT_METHOD         
  ,LINE_NUM               
  ,LINE_TYPE              
  ,LINE_AMOUNT
  ,LINE_DESCRIPTION 
  ,SEGMENT1               
  ,SEGMENT2               
  ,SEGMENT3               
  ,SEGMENT4               
  ,SEGMENT5               
  ,ORG_ID                 
  ,VENDOR_ID              
  ,VENDOR_SITE_ID         
  ,TERM_ID          
  ,CODE_COMBINATION_ID
  ,last_update_date 
  ,last_updated_by  
  ,creation_date          
  ,created_by             
  ,last_update_login
  ,status                 
  ,error_code             
  ,error_message          
  )
  VALUES 
  (UPPER(P_SOURCE)
  ,P_ORGANIZATION   
  ,UPPER(P_INVOICE_TYPE)  
  ,P_SUPPLIER_NAME
  ,P_SUPPLIER_NUM
  ,P_SUPPLIER_SITE
  ,P_INVOICE_DATE   
  ,P_INVOICE_NUMBER
  ,P_INVOICE_AMOUNT
  ,P_TERMS
  ,P_INVOICE_CURRENCY
  ,P_GL_DATE
  ,P_PAYMENT_CURRENCY
  ,P_PAYMENT_METHOD
  ,P_LINE_NUM
  ,P_LINE_TYPE 
  ,P_LINE_AMOUNT    
  ,P_LINE_DESCRIPTION
  ,P_SEGMENT1
  ,P_SEGMENT2
  ,P_SEGMENT3
  ,P_SEGMENT4
  ,P_SEGMENT5
  ,L_ORG_ID                    
  ,L_VENDOR_ID            
  ,L_VENDOR_SITE_ID       
  ,L_TERM_ID              
  ,L_CODE_COMBINATION_ID
  ,sysdate
  ,fnd_global.user_id
  ,sysdate
  ,fnd_global.user_id
  ,fnd_global.login_id
  ,'NEW'
  ,l_error_code
  ,SUBSTR(l_error_message,2)
  );
 
  IF (l_error_code='E')
  THEN
    raise_application_error(-20101,SUBSTR(l_error_message,2));
  END IF;
 
EXCEPTION
WHEN OTHERS
THEN
  raise_application_error(-20102,'Error -'||SQLCODE||'-'||sqlerrm);
END XXAA_APINV_IFACE_LOAD_PRC;

--> --------------------------------------------------------------------
PROCEDURE XXAA_APINV_IFACE_IMPORT_PRC
IS
  CURSOR c_inv
  IS
    SELECT DISTINCT
     api.source,
      api.org_id,
      api.invoice_type,
      api.vendor_id,
      api.vendor_site_id,
      api.invoice_date,
      api.invoice_number,
      api.invoice_amount,
      api.term_id,
      api.invoice_currency,
      api.gl_date,
      api.payment_currency,
      api.payment_method
    FROM XXAA_APINV_IFACE_TBL api
    WHERE api.error_code='V'
     ORDER BY
       api.org_id,
       api.invoice_type,
       api.vendor_id,
       api.vendor_site_id,
       api.invoice_number;
      
  CURSOR c_lin(X_INVOICE_NUMBER VARCHAR2)
  IS
    SELECT
       apl.line_num,
      apl.line_type,
      apl.line_amount,
      apl.code_combination_id,
      apl.line_description
    FROM XXAA_APINV_IFACE_TBL apl
    WHERE apl.error_code='V'
       AND apl.invoice_number = X_INVOICE_NUMBER
     ORDER BY apl.line_num;    
          
  l_batch_name       VARCHAR2(100) := TO_CHAR(SYSDATE,'DD-MON-RR:HH24MISS');
  l_conc_request_id  NUMBER;
  l_phase            VARCHAR2(25);
  l_status           VARCHAR2(25);
  l_dev_phase        VARCHAR2(25);
  l_dev_status       VARCHAR2(25);
  l_message          VARCHAR2(500);
  l_request_status   BOOLEAN;
  l_count            NUMBER;
  l_inv_seq             NUMBER;
 
BEGIN

BEGIN

  FOR r_inv IN c_inv
  LOOP
 
     select ap_invoices_interface_s.NEXTVAL into l_inv_seq from dual;
      
    INSERT INTO AP_INVOICES_INTERFACE
      (
           invoice_id,
           source,
           org_id ,
           invoice_type_lookup_code,
           vendor_id,
           vendor_site_id,
           invoice_date,
           invoice_num,
           invoice_amount,
           terms_id,
           invoice_currency_code,
           gl_date,
           payment_currency_code,
           payment_method_lookup_code
      )
      VALUES
      (
        l_inv_seq,
       r_inv.source,
        r_inv.org_id,
        r_inv.invoice_type,
        r_inv.vendor_id,
        r_inv.vendor_site_id,
        r_inv.invoice_date,
        r_inv.invoice_number,
        r_inv.invoice_amount,
        r_inv.term_id,
        r_inv.invoice_currency,
        r_inv.gl_date,
        r_inv.payment_currency,
        r_inv.payment_method
      );
 
       FOR r_lin IN c_lin(r_inv.invoice_number)
       LOOP
           INSERT INTO AP_INVOICE_LINES_INTERFACE
             (
                invoice_id,
                invoice_line_id,
                line_number,
                line_type_lookup_code,
                amount,
                dist_code_combination_id,
                description
             )
             VALUES
             (
                l_inv_seq,
                ap_invoice_lines_interface_s.NEXTVAL,
                r_lin.line_num,
                r_lin.line_type,
                r_lin.line_amount,
                r_lin.code_combination_id,
                r_lin.line_description
             );
       END LOOP;
  END LOOP;

  COMMIT;
END;

  l_conc_request_id := FND_REQUEST.SUBMIT_REQUEST
                                   (  APPLICATION   => 'SQLAP' 
                                     ,PROGRAM     => 'APXIIMPT'
                                     ,ARGUMENT1    => '204'
                                     ,ARGUMENT2    => 'MANUAL INVOICE ENTRY'
                                     ,ARGUMENT4    => l_batch_name
                                   );                                       
  
  COMMIT;
 
  l_request_status := FND_CONCURRENT.WAIT_FOR_REQUEST
                                     (
                                           l_conc_request_id,
                                           60,
                                           0,
                                           l_phase,
                                           l_status,
                                           l_dev_phase,
                                           l_dev_status,
                                           l_message
                                     );
 
  COMMIT;
EXCEPTION
WHEN OTHERS
THEN
  raise_application_error(-20103,'Error -'||SQLCODE||'-'||sqlerrm);
END XXAA_APINV_IFACE_IMPORT_PRC;

END XXAA_APINV_IFACE_PKG;
/
--> ====================================================================




Integrator
1. Create Integrator
Navigation : Desktop Integration Manager Responsibility-> Create Integrator

Integrator Name       : XXAA APINV Interface Integrator
Internal Name           : XXAA_APINV_IFACE_INTEGRATOR
Application                : Payables
Click on Next button

2. Create Interface
Interface Name           : XXAA APINV Interface
Interface Type             : API – Procedure
Package Name            : XXAA_APINV_IFACE_PKG
Procedure/Funtion    : XXAA_APINV_IFACE_LOAD_PRC
API Returns                : FND Message Code
Click on Apply button

Select the Interface and Click on Next button

3. Create Content
Content Name                       : XXAA APINV Interface Content
Content Type             : Text File
Number of columns   : 9
Apply


Rename the display names as per csv header columns for better under standing
And provide the content parameter (download parameter) as Web ADI: Download "Text File" Parameters

4. Create Uploader


5. Create Importer
Select importer type as PL/SQL API
Importer Name                      : XXAA_APINV_IFACE

Click on PL/SQL API Call plus button to add our custom procedure

Enter following information
API Type                    : PL/SQL Procedure
Package Name           : XXAA_APINV_IFACE_PKG
Procedure Name        : XXAA_APINV_IFACE_IMPORT_PRC
API Returns                : FND Message Code
Click on apply and then submit button



  
Layout
1.                  Create Layout
Navigation: Desktop Integration Responsibility àDefine Layout
Select the integrator àGo àCreate button

2.                  Enter the name           : XXAA APINV Interface Layout

3.                  Include the fields in layout, Select the line in Placement

Click on Apply button


2. Define Mapping
1.                  Define mapping
Navigation: Desktop Integration Responsibility -> Defining mapping-> select integrator-> go

2.                  Click on define mapping button

3.                  Enter the mapping details
Mapping Name         : XXAA APINV Interface Mapping
Mapping Key             : XXAA_APINV_IFACE_MAPPING
Number of column    : 9

4.                  Map the source and target columns


3. Create Document
1.                  Create Document :- Test the document with sample data
Navigation: Desktop Integration Responsibility -> Create Document -> select integrator

2.                  Select the desktop application like excel or word

3.                  Select the layout if there are multiple layouts
4.                  Select the content

5.                  Select the data file

6.                  Select the NONE to open the Excel file

7.                  Click on create document button

8.                  Click on create document button to download the sheet




Enter the data and upload and verify the invoice number from application

Note: we have developed the sheet. Now it needs some cosmetic changes




Changes
1.                  Change the Labels of fields
Navigation: Go to integrator-> Interface-> Enter the Integrator name and click on Go

Click on Update button

Click on Next

Select the Integrator

Change the Prompt Left Label
  
Click on the Update button and change Above Prompt then Save and Submit

è    Create the document to check new changes

2.                  Assign LOV and hints to the columns
Navigation: Go to integrator-> Interface->click on update button of respective attribute (say P_INVOICE_CURRENCY) to add LOV
check the not null check box to indicate required columns in spread sheet
Select the validation type as table and enter below information
Validation Type                     : Table
Id Column                  : CURRENCY_CODE
Meaning Column       : CURRENCY_CODE
Desc Column              : CURRENCY_CODE
Validation Entity        : FND_CURRENCIES

Provide the information under user hint text item as ‘*List–Text’ to give an idea user about what value should be entered or select

è    Do the same for other columns too then save and get the new document to see the changes

3.                  Add default value as ‘USD’ to currency code item
Navigation: Go to integrator-> Interface-> select the default type and default value for currency code attribute

Do the changes for all required fields

Result




Defining the Form Function for Integrator
Define the form function for integrator to run the custom ADI document from any responsibility

1.                  Define the custom Form Function
Navigation -> Application Developer -> Application -> Function

Function                     : XXAA_APINV_IFACE_FF
User Function Name : XXAA APINV Interface Integrator

Properties àType - SSWA servlet function

Form àParameters
bne:page=BneCreateDoc&bne:viewer=BNE:EXCEL2007&bne:reporting=N&bne:integrator=USER_NAME:XXAA APINV Interface Integrator&bne:noreview=Yes

Web HTML àHTML Call : BneApplicationService

Save it.

Assign Function to Custom Menu
Go and add the function into the custom responsibility
Navigation-> Application Developer -> Application -> Menu

Search for your menu where you want to add this ADI
Menu              : AP_NAVIGATE_GUI12
Prompt            : XXAA APINV Interface Integrator
Function         : XXAA APINV Interface Integrator

Now you can navigate to your custom responsibility to see the ADI which you have assigned.




Test the sheet
1.                  Once you create document, it will populate the file data on the sheet

2.                  Fill the required information

3.                  Upload the data into oracle
Navigation: Add-Ins Tab-> Oracle-> Upload

4.                  Once we click on upload button, it will pop up the upload page where we have to select ‘Automatically Submit Import’ check box as we have added import procedure in importer rule. If it is checked then only it will call that import program, otherwise it wont


5.                  If there is any error, then program will return error message and will rollback the transaction

6.                  After correcting the data, run again. And if there is no error, then program will insert all validated data into oracle tables and call the import journal program

Click on Upload button

Wait until Import program completed



7.                  We can monitor the import program from spread sheet itself by clicking on monitor button
Click on the Monitor to check the request id
Nav : Add-Ins àOracle àMonitor


Verify the concurrent request id from application

Click on View Output button


Search with Invoice number from payables responsibility


Check the from the backend tables