Académique Documents
Professionnel Documents
Culture Documents
html
http://oracleapps88.blogspot.in/2012/12/ar-customer-interface-r12.html
http://navinw-oracleapps.blogspot.in/2012/12/an-introduction-to-basics-ofinterfaces.html
http://oracleapps88.blogspot.in/2011/08/po-interface-tables.html
AP INTERFACE TABLES
AP_INTERFACE_CONTROLS
AP_INTERFACE_REJECTIONS
AP_INVOICES_INTERFACE
AP_INVOICE_LINES_INTERFACE
AP_SUPPLIERS_INT
AP_SUPPLIER_SITES_INT
AP_SUP_SITE_CONTACT_INT
AP BASE TABLES
AP_INVOICES_ALL
AP_INVOICE_LINES_ALL
AP_INVOICE_DISTRIBUTIONS_ALL
AP_INVOICE_PAYMENTS_ALL
AP_PAYMENT_SCHEDULES_ALL
AP_PAYMENT_HISTORY_ALL
AP_PAYMENT_DISTRIBUTIONS_ALL
AP_TERMS
AP_LOOKUP_CODES_ALL
AP_BATCHES_ALL
AP_CHECKS_ALL
AP_HOLDS_ALL
AP_HOLD_CODES
AP_APINV_APPROVERS
AP_PRODUCT_SETUP Multi Org Access Control
AP_INV_APRVL_HIST_ALL Holds resolution workflow
AP_SUPPLIERS: This table replaces the old PO_VENDORS table.
AP_SUPPLIER_SITES_ALL: It stores information about your supplier site level
attributes.
AP_SUPPLIER_CONTACTS
CE_BANK_ACCOUNTS_ALL Internal Bank Accounts
CE_BANK_ACCT_USES_ALL
CE_BANK_ACCT_BALANCES
CE_STATEMENT_HEADERS
CE_STATEMENT_LINES
CE_TRANSACTION_CODES
CE_PAYMENT_DOCUMENTS Payment Documents to be used for Printed type Payments
IBY_EXTERNAL_PAYEES_ALL Payee (Trading Partner Info for paying invoices)
IBY_PMT_INSTR_USES_ALL Used for Remit to Bank Accounts
HZ_PARTIES
HZ_PARTY_SITES
HZ_PARTY_SITE_USES
XLA_EVENTS
XLA_AE_HEADERS
XLA_AE_LINES
AR INTERFACE TABLES
RA_INTERFACE_LINES_ALL
RA_INTERFACE_DISTRIBUTIONS_ALL
RA_INTERFACE_SALESCREDITS_ALL
RA_INTERFACE_ERRORS_ALL
RA_CUSTOMERS_INTERFACE_ALL
ORIG_SYSTEM_CUSTOMER_REF
CUSTOMER_NAME
CUSTOMER_STATUS
INSERT_UPDATE_FLAG
CUSTOMER_NUMBER
ORIG_SYSTEM_ADDRESS_REF
PRIMARY_SITE_USE_FLAG
SITE_USE_CODE
ADDRESS1
COUNTRY
LOCATION
RA_CUSTOMER_PROFILES_INT_ALL
CUSTOMER_PROFILE_CLASS_NAME
ORIG_SYSTEM_CUSTOMER_REF
INSERT_UPDATE_FLAG
CREDIT_HOLD
ORIG_SYSTEM_ADDRESS_REF
RA_CONTACT_PHONES_INT_ALL
ORIG_SYSTEM_CUSTOMER_REF
ORIG_SYSTEM_TELEPHONE_REF
TELEPHONE
TELEPHONE_TYPE
INSERT_UPDATE_FLAG
ORIG_SYSTEM_ADDRESS_REF
ORIG_SYSTEM_CONTACT_REF
CONTACT_LAST_NAME
RA_CUSTOMER_BANK_INT_ALL
ORIG_SYSTEM_CUSTOMER_REF
PRIMARY_FLAG
START_DATE
BANK_ACCOUNT_NAME
BANK_ACCOUNT_CURRENCY_CODE
BANK_ACCOUNT_NUM
BANK_BRANCH_NAME
ORIG_SYSTEM_ADDRESS_REF
RA_CUST_PAY_METHOD_INTERFACE
ORIG_SYSTEM_CUSTOMER_REF
START_DATE
PAYMENT_METHOD_NAME
PRIMARY_FLAG
ORIG_SYSTEM_ADDRESS_REF
AR_PAYMENT_INTERFACES_ALL
HZ_PARTY_INTERFACE_ALL
HZ_PARTY_INTERFACE_ERRORS
AR_TAX_INTERFACE
AR BASE TABLES
RA_CUSTOMER_TRX_ALL
RA_CUSTOMER_TRX_LINES_ALL
RA_CUST_TRX_LINE_GL_DIST_ALL
RA_CUST_TRX_LINE_SALESREPS_ALL
RA_CUST_TRX_TYPES_ALL
RA_BATCH_SOURCES_ALL
RA_BATCHES_ALL
AR_PAYMENT_SCHEDULES_ALL
AR_RECEIVABLE_APPLICATIONS_ALL
AR_CASH_RECEIPTS_ALL
AR_CASH_RECEIPT_HISTORY_ALL
AR_DISTRIBUTIONS_ALL
AR_ADJUSTMENTS_ALL
AR_TRANSACTION_HISTORY_ALL
RA_TERMS_TL
AR_LOOKUP_CODES
AR_RECEIPT_CLASSES
AR_RECEIPT_METHODS
RA_SALESREPS_ALL
HZ_PARTIES
HZ_PARTY_SITES
HZ_PARTY_SITE_USES_ALL
HZ_CUST_ACCOUNTS
HZ_CUST_ACCT_SITES_ALL
HZ_CUST_SITE_USES_ALL
HZ_CUSTOMER_PROFILES
HZ_LOCATIONS
HZ_CUST_CONTACT_POINTS
HZ_RELATIONSHIPS
HZ_RELATIONSHIP_TYPES
Create a party and an account
HZ_CUST_ACCOUNT_V2PUB.CREATE_CUST_ACCOUNT
HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE
HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE
HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE
Create a physical location
HZ_LOCATION_V2PUB.CREATE_LOCATION()
HZ_LOCATION_V2PUB.LOCATION_REC_TYPE
Create a party site
HZ_PARTY_SITE_V2PUB.CREATE_PARTY_SITE()
HZ_PARTY_SITE_V2PUB.PARTY_SITE_REC_TYPE
Create an account site
HZ_CUST_ACCOUNT_SITE_V2PUB.CREATE_CUST_ACCT_SITE()
HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE
Create an account site use
HZ_CUST_ACCOUNT_SITE_V2PUB.CREATE_CUST_SITE_USE()
HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE
HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE
GL INTERFACE TABLES
GL_INTERFACE
GL_INTEFACE_CONTROL
GL_INTERFACE_HISTORY
GL_DAILY_RATES_INTERFACE
GL_BUDGET_INTERFACE
GL_IEA_INTERFACE
GL BASE TABLES
GL_JE_BATCHES
GL_JE_HEADERS
GL_JE_LINES
GL_IMPORT_REFERENCES
GL_DAILY_RATES
GL_JE_CATEGORIES
GL_JE_SOURCES
GL_SETS_OF_BOOKS
GL_CODE_COMBINATIONS
GL_BALANCES
GL_PERIODS
GL_PERIOD_SETS
GL_LOOKUPS
GL_CURRENCIES
GL_HISTORICAL_RATES
GL_LEDGERS
GL_BUDGETS
PO INTERFACE TABLES
PO_HEADERS_INTERFACE
PO_LINES_INTERFACE
PO_LINE_LOCATIONS_INTERFACE
PO_DISTRIBUTIONS_INTERFACE
PO_INTERFACE_ERRORS
PO BASE TABLES
PO_HEADERS_ALL
PO_LINES_ALL
PO_LINE_LOCATIONS_ALL
PO_DISTRIBUTIONS_ALL
PO_ACTION_HISTORY_ALL
PO_AGENTS
PO_RELEASES_ALL
PO_LINE_TYPES_B
PO_HEADERS_ARCHIVE_ALL
PO_LINES_ARCHIVE_ALL
PO_LINE_LOCAITONS_ARCHIVE_ALL
PO_RELEASES_ARCHIVE_ALL
FA INTERFACE TABLES
FA_BUDGET_INTERFACE
FA_INV_INTERFACE
FA_PRODUCTION_INTERFACE
FA_TAX_INTERFACE
FA BASE TABLES
FA_ADDITIONS_B
FA_ADJUSTMENTS
FA_ASSET_HISTORY
FA_ASSET_INVOICES
FA_BOOKS
FA_BOOK_CONTROLS
FA_CALENDER_PERIODS
FA_CALENDER_TYPES
FA_CATEGORIES_B
FA_CATEGORY_BOOKS
FA_DEPRN_DETAIL
FA_DEPRN_SUMMARY
FA_DEPRN_PERIODS
FA_DEPRN_EVENTS
FA_DISTRIBUTION_ACCOUNTS
FA_DISTRIBUTION_DEFAULTS
FA_DISTRIBUTION_HISTORY
FA_DISTRIBUTION_SETS
FA_FORMULAS
FA_LOCATIONS
FA_MASS_ADDITIONS
FA_METHODS
FA_RETIERMENTS
OM INTERFACE TABLES
OE_HEADERS_IFACE_ALL
OE_LINES_IFACE_ALL
OE_ACTIONS_IFACE_ALL
OM BASE TABLES
OE_ORDER_HEADERS_ALL
OE_ORDER_LINES_ALL
OE_ORDER_HOLDS_ALL
OE_TRANSACTIONS_TYPES_TL/ALL
OE_SALES_CREDITS
OE_ORDER_SOURCES
OE_PAYMENT_TYPES_TL
OE_LOOKUP_CODES
RA_SALESREPS
WSH_DELIVERY_ASSIGNMENTS
WSH_DELIVERY_DETAILS
WSH_NEW_DELIVERIES
WSH_TRIPS
WSH_TRIP_STOPS
QP_LIST_HEADERS
MTL_TRANSACTION_TYPES
MTL_LOT_NUMBERS
MTL_SERIAL_NUMBERS
MTL_PARAMETERS
MTL_SECONDARY_INVENTORIES
MTL_SECONDAY_LOCATORS
MTL_TXN_REQUEST_HEADERS
MTL_TXN_REQUEST_LINES
MTL_UNIT_TRANSACTIONS
ORG_ORGANIZATION_DEFINITIONS
CST_ITEM_COSTS
CST_ITEM_TYPES
QP BASE TABLES
QP_LIST_HEADERS
QP_LIST_LINES
QP_PRICE_FORMULAS_B
QP_PRICE_FORMULA_LINES
QP_PRICING_ATTRIBUTES
QP_QUALIFIERS
FND_PRODUCT_GROUPS
FND_PRODUCT_DEPENDENCIES
FND_PRODUT_INSTALLATIONS
FND_PROFILE_OPTION_VALUES
FND_RESPONSIBILITY
FND_RESP_FUNCTIONS
FND_USER
PER_ALL_PEOPLE_F
HR_LOCATIONS
xte.entity_code =
'TRANSACTIONS' or
'RECEIPTS' or
'ADJUSTMENTS' or
'PURCHASE_ORDER' or
'AP_INVOICES' or
'AP_PAYMENTS' or
'MTL_ACCOUNTING_EVENTS' or
'WIP_ACCOUNTING_EVENTS'
xte.source_id_int_1 =
'INVOICE_ID' or
'CHECK_ID' or
'CUSTOMER_TRX_ID' or
'TRANSACTION_ID'
XLA_EVENTS:
SELECT * FROM xla_events xe
WHERE xe.application_id = 222
AND xe.entity_id IN (
SELECT xte.entity_id
FROM xla.xla_transaction_entities xte
WHERE xte.application_id = 222
AND xte.entity_code = 'TRANSACTIONS'
AND xte.source_id_int_1 = 10066)
XLA_AE_HEADERS:
SELECT * FROM xla_ae_headers xah WHERE xah.application_id = 222
AND xah.entity_id IN (
SELECT xte.entity_id
FROM xla.xla_transaction_entities xte
WHERE xte.application_id = 222
AND xte.entity_code = 'TRANSACTIONS'
AND xte.source_id_int_1 = 10066)
XLA_AE_LINES:
SELECT xal.* FROM xla_ae_lines xal, xla_ae_headers xah WHERE
xal.application_id = xah.application_id
AND xal.ae_header_id = xah.ae_header_id
AND xah.application_id = 222
AND xah.entity_id IN (
SELECT xte.entity_id
FROM xla.xla_transaction_entities xte
WHERE xte.application_id = 222
AND xte.entity_code = 'TRANSACTIONS'
AND xte.source_id_int_1 = 10066)
XLA_DISTRIBUTION_LINES:
SELECT xdl.* FROM xla_distribution_links xdl, xla_ae_headers xah WHERE
xdl.application_id = xah.application_id
AND xdl.ae_header_id = xah.ae_header_id
AND xah.application_id = 222
AND xah.entity_id IN (
SELECT xte.entity_id
FROM xla.xla_transaction_entities xte
WHERE xte.application_id = 222
AND xte.entity_code = 'TRANSACTIONS'
AND xte.source_id_int_1 = 10066)
XLA_DISTRIBUTION_LINKS table join based on Source Distribution Types
xdl.source_distribution_type = 'AP_PMT_DIST '
and xdl.source_distribution_id_num_1 =
AP_PAYMENT_HIST_DISTS.payment_hist_dist_id
--------------xdl.source_distribution_type = 'AP_INV_DIST'
and xdl.source_distribution_id_num_1 =
AP_INVOICE_DISTRIBUTIONS_ALL.invoice_distribution_id
--------------xdl.source_distribution_type = 'AR_DISTRIBUTIONS_ALL'
and xdl.source_distribution_id_num_1 = AR_DISTRIBUTIONS_ALL.line_id
and AR_DISTRIBUTIONS_ALL.source_id =
AR_RECEIVABLE_APPLICATIONS_ALL.receivable_application_id
--------------xdl.source_distribution_type = 'RA_CUST_TRX_LINE_GL_DIST_ALL'
and xdl.source_distribution_id_num_1 =
RA_CUST_TRX_LINE_GL_DIST_ALL.cust_trx_line_gl_dist_id
--------------xdl.source_distribution_type = 'MTL_TRANSACTION_ACCOUNTS'
and xdl.source_distribution_id_num_1 =
MTL_TRANSACTION_ACCOUNTS.inv_sub_ledger_id
--------------xdl.source_distribution_type = 'WIP_TRANSACTION_ACCOUNTS'
and xdl.source_distribution_id_num_1 =
WIP_TRANSACTION_ACCOUNTS.wip_sub_ledger_id
--------------xdl.source_distribution_type = 'RCV_RECEIVING_SUB_LEDGER'
and xdl.source_distribution_id_num_1 =
RCV_RECEIVING_SUB_LEDGER.rcv_sub_ledger_id
--------------xdl.source_distribution_type = 'AP_PREPAY'
and xdl.source_distribution_id_num_1 =
AP_PREPAY_APP_DISTS.prepay_app_dist_id
XLA_AE_HEADER status Columns
Queries:
In this post, we will check the Data related to the Payable INVOICE (
Invoice_id = 166014 ) in Sub-Ledger Accounting (XLA). All the
queries given in this post and their related posts were tested in
R12.1.1 Instance.
XLA_EVENTS
SELECTDISTINCTxe.*
FROMap_invoices_allai,
xla_eventsxe,
xla.xla_transaction_entitiesxte
WHERExte.application_id=200
ANDxte.application_id=xe.application_id
ANDai.invoice_id='166014'
ANDxte.entity_code='AP_INVOICES'
ANDxte.source_id_int_1=ai.invoice_id
ANDxte.entity_id=xe.entity_id
ORDERBY
xe.entity_id,
xe.event_number;
XLA_AE_HEADERS
SELECTDISTINCTxeh.*
FROMxla_ae_headersxeh,
ap_invoices_allai,
xla.xla_transaction_entitiesxte
WHERExte.application_id=200
ANDxte.application_id=xeh.application_id
ANDai.invoice_id='166014'
ANDxte.entity_code='AP_INVOICES'
ANDxte.source_id_int_1=ai.invoice_id
ANDxte.entity_id=xeh.entity_id
ORDERBY
xeh.event_id,
xeh.ae_header_idASC;
XLA_AE_LINES
SELECTDISTINCTxel.*,
fnd_flex_ext.get_segs('SQLGL','GL#','50577',
xel.code_combination_id)"Account"
FROMxla_ae_linesxel,
xla_ae_headersxeh,
ap_invoices_allai,
xla.xla_transaction_entitiesxte
WHERExte.application_id=200
ANDxel.application_id=xeh.application_id
ANDxte.application_id=xeh.application_id
ANDai.invoice_id='166014'
ANDxel.ae_header_id=xeh.ae_header_id
ANDxte.entity_code='AP_INVOICES'
ANDxte.source_id_int_1=ai.invoice_id
ANDxte.entity_id=xeh.entity_id
ORDERBY
xel.ae_header_id,
xel.ae_line_numASC;
XLA_DISTRIBUTION_LINKS
SELECTDISTINCTxdl.*
FROMxla_distribution_linksxdl,
xla_ae_headersxeh,
ap_invoices_allai,
xla.xla_transaction_entitiesxte
WHERExte.application_id=200
ANDxdl.application_id=xeh.application_id
ANDxte.application_id=xeh.application_id
ANDai.invoice_id='166014'
ANDxdl.ae_header_id=xeh.ae_header_id
ANDxte.entity_code='AP_INVOICES'
ANDxte.source_id_int_1=ai.invoice_id
ANDxte.entity_id=xeh.entity_id
ORDERBY
xdl.event_id,
xdl.a_header_id,
xdl.ae_line_numASC;
XLA_TRANSACTION_ENTITIES
SELECTDISTINCTxte.*
FROMap_invoices_allai,
xla.xla_transaction_entitiesxte
WHERExte.application_id=200
ANDai.invoice_id='166014'
ANDxte.entity_code='AP_INVOICES'
ANDxte.source_id_int_1=ai.invoice_id;
XLA_ACCOUNTING_ERRORS
SELECTDISTINCTxae.*
FROMap_invoices_allai,
xla_eventsxe,
xla.xla_transaction_entitiesxte,
xla_accounting_errorsxae
WHERExte.application_id=200
ANDxae.application_id=xte.application_id
ANDxte.application_id=xe.application_id
ANDai.invoice_id='166014'
ANDxe.event_id=xae.event_id
ANDxte.entity_code='AP_INVOICES'
ANDxte.source_id_int_1=ai.invoice_id
ANDxte.entity_id=xe.entity_id;
Types of Interfaces
There are two major types of Interfaces:
Inbound Interface : These interfaces are used to transfer data from external systems to Oracle
Applications.
Outbound Interface : These interfaces are used to transfer data from Oracle Applications to
external systems.
Two other distinctions of Interfaces:
Open Interface: If the interface logic is provided by Oracle Applications, it is called an Open
Interface.
Custom Interface: If the interface logic needs to be developed by the implementation team, it is
called a Custom Interface.
Interface Components
Components of an Interface
a] Source Application:
You obtain data from a source application to pass on to a destination application for further
processing and/or storage.
b] Source Data Issues:
Type of file, Size, Frequency of upload, Record Length (Variable or fixed), Delimiter, Datatype for
each field, Any unwanted data, Naming convention and uniqueness of file, Location of the file,
Access on the file.
c] Destination Application:
You send data to a destination application so that the application can perform further processing
and/or storage.
d] Interface Table:
For inbound interfaces, the interface table is the intermediary table where the data from your source
application temporarily resides until it is validated and processed into the destination application.
e] Identifier columns:
Uniquely identify rows in the interface table provide foreign key reference to both the source and
destination applications.
f] Control Columns:
Control columns track the status of each row in the interface table, as it is inserted, validated,
rejected, processed, and ultimately deleted.
Developing an Interface
1] Identification:
Find out if there exists an Open Interface to carry out the functionality.
2] Creation of Pre-Interface table ( staging Table):
A table in the format of the data file which can be pruned to load as clean a data into the Interface
table.
3] Load data into Pre-Interface table:
SQL*LOADER can be used to load the flat file into the pre-interface table.
4] Validate data in the Pre-Interface table:
Basic validation of the data loaded into the Pre-Interface table can be carried out like:
For checking NULL values in required columns
Checking for Foreign Key and Quick Code values.
Duplication Validation
Business Rule validation
5] Mapping the values:
Generated fields in Oracle Applications can be mapped in this step to either default values or
sequences.
6] Load data into Interface table:
Once the data is as clean as you can get it, the data can be inserted into the Interface table.
At such a time, certain columns, which are necessary in Applications but not found in legacy system,
need to be populated accordingly like WHO columns.
7] Run the interface program
8] Check for Errors
9] Report on the Interface
ABOUT INTERFACES:
In Oracle Apps Interfaces are generally tables, which act as a medium to transfer the data from one
module to another module or to transfer the data from legacy system into Oracle Applications. There
are 352 tables provided by the Oracle Package. Each module has its own Interface Tables.
A typical path to transfer the data from Legacy System to Oracle Apps:
What is Interfacing?
It is the process of converting the records from one format to another format. The main components
of this interfacing are
Transfer Program
Interface Table and
Import Program
A] Transfer Program:
If the source modules data are implemented in Oracle Applications then the Transfer Programs are
integrated with the Package. If the source modules are implemented in external system (i.e. other
than Oracle Applications) then we have to develop our own Transfer Programs. Generally these
Transfer Programs are developed using PL/SQL, JAVA or SQL Loader.
What they do?
It maps the columns of source table with the columns of Interface Tables.
It performs Row Level and Column Level validations.
It transfers the data from Source to the Interface Table.
B] Interface Tables:
The Interface tables basically have 4 types of columns.
[if !supportLists]1. [endif]Mandatory Columns.
[if !supportLists]2. [endif]Conditionally Required Columns.
[if !supportLists]3. [endif]Optional Columns.
[if !supportLists]4. [endif]Internal Processing Columns.
Mandatory Columns:
These are the main columns which are required in the destination tables (i.e. Oracle Application
Module Tables). With the help of mandatory columns only the Import Program will converts the
records from source to destination.
Conditionally Required Columns:
The values for these columns are based on the values of Mandatory columns. For Example: If you
are converting foreign currency transactions to INR then it as compulsory to provide conditionally
required columns like Currency conversion rate, Conversion Time and Conversion Date.
Optional Columns:
These are used when a client wanted to transfer some additional information from source to
destination. These are based on clients requirement.
What is Migration?
Migration of data means moving the data from one system to another using Interface Programs/APIs
where both the systems have same structure of data.
Process of Migrating of data:
Identify the data to be imported to new system (Business requirement).
Extract the data into flat file/Staging table
Load the data into Interface Table(using SQL* Loader/DB Link/Others) after validation(If loading the
data using Interface)
What is Conversion?
Conversion of data means translating the data to suite target system (data should be formatted
according to target system ) and then move the translated data using Interface Programs/APIs.
Identify the data to be imported to new system (Business requirement).
Extract into flat file/Staging table
Translate/Convert/Format the data
Load the data into Interface Table(using SQL* Loader/DB Link/Others) after validation(If loading the
data using Interface) and then launch standard Interface concurrent program to load the data to
Oracle Apps Base Tables
If using API, fetch the data, validate it and then call API to import the data
How conversion/Migration and interface differ?
There are good numbers of parameter on which they can be categorized. Take few of them:
Frequency
Conversions/Migration are a one time event
interfaces are ongoing
Occurrence in the project timeline
conversions/Migration executed before production
interfaces executed during production
Manner of execution
Conversions/Migration are batch
Interfaces may be batch or real time
Complexity
Conversion/Migration does have very complex, its totally depends upon the data mapping activity.
Coordinating with other systems make interfaces more complex
Maintenance
Maintenance of interface is bit cost intensive task.
***************************************************************************************
During my work on a projects conversion, I came accros this very nice document. This document is
very informative and so sharing with you all. Happy reading!
Main Article:
In this article I will be explaining the general steps involved in any Conversion/Data Migration of
Oracle Projects module.
At the end of this article, you would have learned:
Stages in Oracle Projects Conversion.
How to setup the Oracle Projects module for the conversion/Data Migration.
Options for the Load (flat file, csv, or direct Loads).
Oracle Projects AMG APIs needed to perform the Conversion.
Testing the Conversion Process.
Verifying the Conversion Process.
Scenario:
Company XYZ is using a Project Management and Accounting Software for years long. The
Management has decided to move from their existing system to Oracle Projects module because of
its vast functionality and integration with other financial modules.
Parameter
Contract
Indirect
Hours
Expenses
Transaction Source
Product code
Publish Workplan
Baseline Workplan
Baseline
Baseline
Parameter Value
Contract_Template
Indirect_Template
Labor
Employee_Expense
Legacy1
LEGACY1
Yes
Yes
Yes
Yes
This control table is looked upon by the migration program. So whenever there is a change in the
templates, expenditure types it is easy to change this control table instead of the code. So the
advise is never hard code any values in the code, always handle it using the control table.
Also it will be better to have a form based on this table, so that this table data can be changed from
the front end.
Second Stage & Third Stage: Validate and Format the Data
I am coupling the second and third stage because both are interdependent. Validating data is very
important and it prevents some of the time consuming tasks in actual migration such as trouble
shooting the errors due to the invalid data.
Below are some of the key validations that need to be done before doing the actual migration.
Projects/Tasks Migration:
Though the projects and tasks are in different staging tables, the migration of projects/tasks is doing
using a single program. We can always migrate projects and tasks separately, but the issue is with
the performance when adding task by task to each project. So it always better to create projects and
tasks together because of the bulk loading of tasks.
Validate if the project long name is unique. Project with the same long name should not exist in
Oracle.
Validate the project reference(this field is mandatory in the projects file, it can be the projects
identifier of the source project or project number of the source project, but it has to be unique in the
source system as well. This field needs to be populated in all the converted projects in order to track
back and identify the project in the source system)
Project name and project number should be 30 chars in length. Project long name should be 240
chars in length. Project Description should be 250 chars in length. Project description is not a
mandatory field when creating project.
Check if the project has a project manager and the project manager is active in Oracle HR and has
an assignment and a Job assigned. Also the project manager has to be active from the project start
date, else you cannot create a project with that project manager.
In case of contract projects, check if the customer of the project is a valid customer defined and with
a valid Bill To site assigned.
Apart from the above necessary validations, you may have to validate the additional data such as
Projects DFF Data you may want to populate with your custom field values. For example you may
want to populate the Project cost center value in the Segment1 of the Project DFF. In such case you
have to validate if the cost center value is a valid value for that Segment1 (sometimes you may have
attached an LOV to that segment1, so in that case, the cost center has to be validated against that
LOV Values).
For tasks, values for task types, work type, task manager has to be validated. Task types and work
types have to be defined in Oracle Projects before the task with those values are migrated, else the
task will not be created.
Cost/hours validation
Setup Validations:
Validate if the Transaction source is setup.
Validate if the Expenditure type is setup.
Data Validations:
Check if the hours value is greater than zero.
Check if the employee number is valid in HR and is active on the timecard date.
If the transaction source is setup as costed, then the cost has provided while migrating the
transactions. If the transaction source is setup as accounted, then the code combination ids need to
be provided when migrating transactions.
Apart from the above validations, you may want to validate the additional DFF segments that you
are going to populate for that expenditure item.
Budgets Validation
Setup Validations:
Validate the project template has the required financial plan type attached. Financial plans are the
project management versions of the Budget types in the Forms applications.
Budget amount has to be greater than zero.
There is no need to create revenue budgets if the Baseline funding without budget option is
checked at the project or project type level. Whenever the funding is created for the contract project
and is baselined, the revenue budget is automatically created and baselined. If that option is not
checked, it is necessary that a revenue budget with the same amount as the funding amount needs
to be created and baselined in order to baseline the funding.
Data Validations:
The cost budget for the project can be from the source systems budgeting system. If there is no
budgeting in the source system, a cost budget with the total cost of the project can be created in
Oracle Projects.
For revenue budgets, it has to be equal to the funding amount of the project. If there is no funding
amount in the source system, the sum of the revenue amount can be the funding amount and it is
the revenue budget amount as well.
Conversion
Projects/Tasks Conversion
Budgets Conversion
AMG APIs
PA_PROJECT_PUB.CREATE_PROJECT
PA_BUDGET_PU B.CREATE_DRAFT_BUDGET,
PA_BUDGET_PUB.BASELINE_BUDGET
Agreements
PA_AGREEMENT_PUB.CREATE_AGREEMENT
Funding
PA_AGREEMENT_PUB.ADD_FUNDING
Revenue/Invoice
PA_EVENT_PUB.CREATE_BILLING_EVENT
User Defined Attributes (UDA)
PA_PROJECT_PUB.LOAD_EXTENSIBLE_ATTRIBUTE
For Transactions (cost/hours) migration, there is no APIs to create the expenditures in Oracle. The
pa_transaction_interface_all table needs to be populated with the migration data and once it is
populated, the PRC: Transaction Import process with the Transaction source as parameter needs to
be run in Oracle Projects. All invalid records need to be rectified in order to migrate all the
transactions.
The rejected records can be found in the same interface table with the transfer_status_code as R.
Conversion Tips:
1. Make sure the templates are defined properly and exactly the way it is needed. Once the
projects are created using the templates and the template was wrongly defined, then it takes ages to
rectify the converted projects.
2. Create the conversion program to operate in two modes: Validate, Run. A concurrent process
with a parameter called mode accepting Validate/Run can be created. So the same concurrent
program can be used to validate as well as run the actual migration.
3. It is a good practice to have source Project id / Project Number as parameter to the projects
conversion program. This will allow us to test the conversion for a single project and validate the
data for that project.
4. The validation process can write the invalid records to the output file. So once validation
process completes, the output will have all the invalid records which needs to be rectified.
5. Create a separate concurrent program to know the status of the already running migration
process. If you want to know where the migration process is in terms of the number of records
migrated, number of records rejected etc. If the volume of the migration data is huge, then it is likely
possible that the conversion programs may run for hours. So in these scenarios this concurrent
program can be helpful in finding the status of that migration process.
6. For Transactions migration, the custom program written to populate the interface table can kick
off the PRC: Transaction Import process and wait for its completion. Once the transaction import
completes, the custom process can print the invalid records from the interface table to the output file.
7. There are APIs to publish and baseline the workplans created as a part of projects migration.
But these APIs need to be used with care. There are lot of performance issues and bugs when using
these APIs.
AP_SUPPLIERS_INT:
This is the open interface table for AP Suppliers. It holds Supplier information which is loaded by the
user for import. The columns in the table map to corresponding columns in the PO_VENDORS
table. The Oracle Payables application uses this information to create a new Supplier record when
the Supplier Open Interface Import program is submitted. Each row in the table will be identified by a
unique identifier, the VENDOR_INTERFACE_ID.
Mandatory Columns:
VENDOR_INTERFACE_ID (ap_suppliers_int_s.NEXTVAL)- Supplier interface record unique
identifier
VENDOR_NAME Supplier name
Other important columns:
SEGMENT1 Supplier Number
VENDOR_TYPE_LOOKUP_CODE Supplier type
SHIP_TO_LOCATION_CODE Default ship-to-location name
BILL_TO_LOCATION_CODE Default bill-to-location name
TERMS_NAME Payment terms name
TAX_VERIFICATION_DATE Tax verification date(1099)
VAT_REGISTRATION_NUM Tax registration number
ATTRIBUTE1 -15 Descriptive Flexfield Segments
PAY_GROUP_LOOKUP_CODE Payment group type
INVOICE_CURRENCY_CODE Default currency unique identifier
PAYMENT_CURRENCY_CODE Default payment currency unique identifier
NUM_1099 Tax identification number (1099)
VAT_CODE Default invoice tax code
HOLD_FLAG Indicates whether or not the supplier is on purchasing hold
SUMMARY_FLAG Key flexfield summary flag
ENABLED_FLAG Key flexfield enable flag
EMPLOYEE_ID Employee unique identifier if supplier is an employee
AP_SUPPLIER_SITES_INT:
This is the open interface table for AP Supplier Sites. It holds Supplier Site information which is
loaded by the user for import. The columns in the table map to corresponding columns in
PO_VENDOR_SITES_ALL table. The Oracle Payables application uses this information to create a
new Supplier Site record when the Supplier Sites Open Interface Import program is submitted. Each
row in the table will be joined to the appropriate Supplier using the VENDOR_ID column.
Mandatory Columns:
VENDOR_SITE_INTERFACE_ID (ap_supplier_sites_int_s.NEXTVAL) Supplier Site interface
record unique identifier
VENDOR_SITE_CODE Supplier Site name
Other important columns:
ADDRESS_LINE1 First line of supplier address
ADDRESS_LINE2 Second line of supplier address
ADDRESS_LINE3 Third line of supplier address
CITY City name
STATE State name or abbreviation
ZIP Postal code
COUNTRY Country name
PHONE Phone number
FAX Supplier site facsimile number
SHIP_TO_LOCATION_CODE Default ship-to-location name
BILL_TO_LOCATION_CODE Default bill-to-location name
PAYMENT_METHOD_LOOKUP_CODE Default payment method type
VAT_CODE Invoice default tax code
AP Invoice Interface
This interface helps us to import vendor invoices into Oracle applications from external systems into
Oracle Applications.
Interface tables:
1] AP_INVOICES_INTERFACE
This is the open interface table for importing AP Invoices from external sources and stores header
information about invoices. Invoice data comes from sources including:
EDI invoices from suppliers that are loaded through Oracle e-Commerce Gateway
Supplier invoices that are transferred through the Oracle XML Gateway
Invoices that are loaded using Oracle SQL*Loader
Lease invoices from Oracle Property Manager
Lease payments from Oracle Assets
Credit card transaction data that are loaded using the Credit Card Invoice Interface Summary
Expense Report invoices from Oracle Internet Expenses
Payment Requests from Receivables
Invoices that are entered through the Invoice Gateway.
There is one row for each invoice you import. Oracle Payables application uses this information to
create invoice header information when Payables Open Interface program is submitted.
Data in the AP_INVOICES_INTERFACE table used in conjunction with
AP_INVOICE_LINES_INTERFACE table to create Payables Invoice, Invoice lines, Distributions and
Schedule payments. Data in this table can be viewed and edited using Open Interface Invoices
window.
The Payables Open Interface program validates each record in this interface table selected for
import, and if the record contains valid data then the program creates a Payables Invoice.
Important columns:
INVOICE_ID (Required) : Unique identifier for this invoice within this batch. Same value should be
populated in invoices lines in the AP_INVOICE_LINES_INTERFACE table to identify the data as
belonging to the same invoice.
INVOICE_NUM (Required) : Enter the invoice number that needs to be assigned to the invoice
created in Payables from this record.
INVOICE_TYPE_LOOKUP_CODE (Optional) : Type of invoice: Credit or Standard.
INVOICE DATE (Optional) : Date of the invoice. If you do not enter a value, the system uses the
date you submit Payables Open Interface Import as the invoice date.
PO_NUMBER (Optional) : Purchase order number from PO_HEADERS.SEGMENT1. This column
needs to be populated if invoice to be matched with an purchase order.
VENDOR_ID & VENDOR_SITE_ID (Required) : VENDOR_ID is unique identifier for a supplier and
VENDOR_SITE_ID is Internal supplier site identifier. Supplier of the invoice to be derived by value in
one of the following columns in this table: VENDOR_ID, VENDOR_NUM, VENDOR_NAME,
VENDOR_SITE_ID or PO_NUMBER.
VENDOR_NUM & VENDOR_NAME (Optional) : Supplier number and name. You must identify the
supplier by entering a value for one of the following columns in this table: VENDOR_ID,
VENDOR_NUM, VENDOR_SITE_ID, VENDOR_SITE CODE, or PO_NUMBER.
INVOICE_AMOUNT (Required) : Amount of the invoice.
INVOICE_CURRENCY_CODE (Optional) : Currency code for the invoice. If you want to create
foreign currency invoices, enter a currency code that is different from your functional currency.
EXCHANGE_RATE (Optional) : This column is required if you enter a foreign currency code in the
INVOICE_CURRENCY_CODE column and you enter User as the EXCHANGE_RATE_TYPE.
TERMS_ID (Optional) : Internal identifier for the payment terms.
DESCRIPTION (Optional) : Enter the description that you want to assign to the invoice created from
this record.
SOURCE (Required) : Source of the invoice data. If you import EDI invoices from the Oracle EDI
Gateway, the source is EDI Gateway. For invoices you import using SQL*Loader, use a QuickCode
with the type Source that you have defined in the QuickCodes window in Payables.
2] AP_INVOICE_LINES_INTERFACE
This is the lines interface table for the AP Invoice Open Interface and it is used in conjunction with
AP_INVOICE_INTERFACE table. AP_INVOICE_LINES_INTERFACE stores information used to
create one or more invoice distributions. Note that one row in this table may create, during the
import process, more than one invoice distribution.
Important columns:
INVOICE_ID (Required) :Enter the INVOICE_ID of the corresponding invoice in the
AP_INVOICES_INTERFACE table.
INVOICE_LINE_ID : This value is not required. You can enter a unique number for each invoice line
of an invoice.
LINE_NUMBER (Optional) : You can enter a unique number to identify the line.
LINE_TYPE_LOOKUP_CODE (Required) : Enter the lookup code for the type of invoice distribution
that you want Payables Open Interface Import to create from this record. The code you enter must
be ITEM, TAX, MISCELLANEOUS, or FREIGHT. These lookup codes are stored in the
AP_LOOKUP_CODES table.
AMOUNT (Required) : The invoice distribution amount. If you are matching to a purchase order, the
AMOUNT = QUANTITY_INVOICED x UNIT PRICE. If the total amount of all the invoice distributions
does not equal the amount of the invoice that has the same INVOICE_ID, then Payables Open
Interface Import will reject the invoice.
Concurrent program:
Payables Open Interface Import
Parameters:
Source: Choose the source of the invoices from the list of values. Use EDI Gateway, Credit Card, or
a Source type QuickCode you defined in the Payables QuickCodes window.
Group: To limit the import to invoices with a particular Group ID, enter the Group ID. The Group
must exactly match the GROUP_ID in the
Payables Open Interface tables.
Batch Name: Payables groups the invoices created from the invoices you import and creates an
invoice batch with the batch name you enter. You can enter a batch name only if you have enabled
the Use Batch Control Payables option, and if you have enabled the Use Batch Control Payables
option, you must enter a batch name. If you use a batch name and some invoices are rejected
during the import process, you can import the corrected invoices into the same batch if you enter the
exact batch name during the subsequent import.
Hold Name: If you want to place all invoices on hold at the time of import, enter an Invoice Hold
Reason. You can define your own hold reasons in the Invoice Approvals window.
Hold Reason: Payables displays the Invoice Hold Reason Description.
GL Date: If you want to assign a specific GL Date to all invoices, enter a GL Date. If you do not enter
a value here, the system will assign a GL Date based on the GL Date Payables option.
Purge: Enter Yes if you want Payables to delete all successfully imported invoice records that match
the Source and Group ID of this import. Payables does not delete any invoice data for which it has
not yet created invoices. If you want to purge later, you can use the Payables Open Interface Purge
Program.
Steps:
1] Firstly, lets get a unique number to be used as INVOICE_ID to the invoice to be imported. This
method ensures that each invoice has a unique INVOICE_ID assignment.
1
2
3
4
5
6
7
8
9
10
11
invoice_id,
invoice_num,
vendor_id,
vendor_site_id,
invoice_amount,
invoice_currency_code,
invoice_date,
description,
pay_group_lookup_code,
source,
org_id
3] You can go to Payables > Invoices > Entry > Open Interface Invoices to check the details of
Invoice and Invoice Lines from the front end. If required you can do any modifications here.
Alternatively you can use these forms to put invoice data in AP_INVOICES_INTERFACE and
AP_INVOICE_LINES_INTERFACE tables.
4] Go to the front end and run the concurrent program Payables Open Interface Import to submit a
request for Invoice Import.
Output:
[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75"
o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke
joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f
eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f
eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600
pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f"
gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="Picture_x0020_6" o:spid="_x0000_i1025" type="#_x0000_t75"
alt="http://imdjkoch.files.wordpress.com/2010/08/output-of-payables-open-interface-import.jpg?
w=500&h=261" style='width:375pt;height:195.75pt;visibility:visible'> <v:imagedata
src="file:///C:\Users\Navin\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg" o:title="outputof-payables-open-interface-import"/> </v:shape><![endif][if !vml][endif]