Oracle Assets Transfers API

This appendix covers the following topics:

Introduction

You can use this API if you have a custom interface that makes it difficult to use with the existing interfaces in Oracle Assets. The Transfer API uses the FA_TRANSFER_PUB.DO_TRANSFER procedure. You can use this API if you have a custom interface that makes it difficult to use with the existing asset transfer interfaces in Oracle Assets.

Oracle Assets also allows you to transfer assets using any of the following methods:

Major Features

The Transfer API provides the following functionality:

Tax Book

The Transfer API automatically transfers assets in all the tax books that are associated with the corporate book where the transfer transaction originated.

Alternate Ledger Currency

If you have set up alternate ledger currency , when you add or modify assets using an Oracle Assets API, the API copies the transactions to the reporting currencies automatically. Invoice rounding issues are avoided by using the API to drive the alternate ledger currency accounting for both the ledger and reporting currencies.

Related Topics

Transfer API Description

Sample Script: Using the Transfer API to Transfer Units

Transfers API Description

The Transfer API procedure is called: FA_TRANSFER_PUB.DO_TRANSFER ().

The following table provides the arguments, types, value, and descriptions of the elements of the FA_TRANSFER_PUB.DO_TRANSFER procedure.

Each argument has a prefix of P, X, or PX. These prefixes mean the following:

Argument Type Value Description
P_API_VERSION NUMBER Internal use only Version of the API in use.
P_INIT_MSG_LIST VARCHAR2(1) FND_API.G_TRUE - Initialize the message stack.
FND_API.G_FALSE - Do not initialize the message stack (Default).
Determines whether the messages stack should be initialized and cleared.
P_COMMIT VARCHAR2(1) FND_API.G_TRUE - Commit automatically.
FND_API.G_FALSE - Do not commit automatically (Default)
Commits the transaction.
P_VALIDATION_LEVEL NUMBER FND_API.G_VALID_ LEVEL_NONE - Low level validation for a transaction.
FND_API.G_VALID_ LEVEL_FULL - High level validation for a transaction (Default).
Asset validation by the API.
P_CALLING_FN VARCHAR2(30)   Function calling the API
X_RETURN_STATUS VARCHAR2(1) FND_API.G_RET_STS_ SUCCESS - Indicates a successful transfer.
FND_API.G_RET_STS_ ERROR - transfer failed.
FND_API.G_RET_STS_ UNEXP_ERROR - Unexpected error
Determines if the API is successful.
X_MSG_COUNT NUMBER   Number of messages on the message stack. Returns number of messages added onto the message stack.
X_MSG_DATA VARCHAR2(1024)   Message stack. Returns top most message on the message stack.
PX_TRANS_REC FA_API_TYPES. TRANS_REC_TYPE   Describes the transaction taking place. Transaction information provided by the user.
PX_ASSET_HDR_REC FA_API_TYPES. ASSET_HDR_REC_ TYPE   Asset information provided by user. Unique identifiers for the assets.
PX_ASSET_DIST_TBL FA_API_TYPES. ASSET_DIST_TBL   Distribution information of the asset.

Transfer API Usage

This section details how to call the API and how to populate parameter structures required by the API. Sample scripts are also included at the end of this document to show you how this can be called in PL/SQL.

There are three structures that need to be populated before calling the API.

TRANS_REC_TYPE Transaction Structure

The TRANS_REC_TYPE transaction structure contains information about the transaction, such as the transaction header ID and the transaction type code. The following table shows type and value information for each argument.

Argument Required / Optional Type Value
TRANSACTION_DATE_ ENTERED Optional DATE Populate if you are doing a previous period transfer, otherwise do nothing or set it to null. Defaults to the current period.
TRANSACTION_NAME Optional VARCHAR2(20) Description of the transaction. This field is the Comments field in the Asset Workbench.
DESC_FLEX Optional DESC_FLEX_ REC_ TYPE Descriptive flexfield segments.
WHO_INFO Required STANDARD_ WHO_REC_ TYPE Standard Who columns.
CALLING_INTERFACE Optional VARCHAR2(30) Defaults to CUSTOM
TRANSACTION_HEADER_ ID Internal use only NUMBER(15) Optional OUT parameter

ASSET_HDR_REC_TYPE Asset Structure

The ASSET_HDR_REC_TYPE asset structure contains unique identification information for a given asset, such as the asset ID and book type code. The following table shows type and value information for each argument.

Argument Required / Optional Type Value
ASSET_ID Required NUMBER(15) The asset ID
BOOK_TYPE_CODE Required VARCHAR2(15) Book name

ASSET_DIST_REC_TYPE Asset Structure

The ASSET_DIST_REC_TYPE asset structure contains information that represents a single source or destination distribution line. All the ASSET_DIST_REC_TYPE records comprising a single transfer transaction are contained in the ASSET_DIST_TBL table. At least one source line and at least one destination line are required for each transfer transaction. The following table shows type and value information for each argument.

Argument Required / Optional Type Value
DISTRIBUTION_ID Required if row is source distribution NUMBER(15) Unique distribution identification number.
TRANSACTION_UNITS Required NUMBER Number of units involved in the transaction.
ASSIGNED_TO Optional NUMBER(15) Employee identification number.
EXPENSE_CCID Required if row is destination distribution NUMBER(15) Depreciation expense account identification number.
LOCATION_CCID Required if row is destination distribution NUMBER(15) Location flexfield identification number.

Sample Script: Using the Transfer API to Transfer Units

The following example shows how to use Transfer API for transfer transaction. The example shows transfer of two units from an existing distribution of two new distributions, each having one unit.

set serveroutput on;

declare

   l_trans_rec                fa_api_types.trans_rec_type;
   l_asset_hdr_rec            fa_api_types.asset_hdr_rec_type;
   l_asset_dist_tbl           fa_api_types.asset_dist_tbl_type;

   l_return_status            VARCHAR2(1);
   l_mesg_count               number;
   l_mesg                     varchar2(512);

begin

   dbms_output.enable(1000000);

   fa_srvr_msg.init_server_message;

   -- fill in asset information
   l_asset_hdr_rec.asset_id       := &asset_id

   -- fill in distribution data for existing distribution lines
   -- affected by this transfer txn. Note: You need to fill in 
   -- only affected distribution lines. 
   --
   -- For source distribution, you must fill in either existing 
   -- distribution id or 2 columns(expense_ccid,location_ccid) or
   -- 3-tuple columns(assigned_to,expense_ccid, and location_ccid)
   -- depending on the makeup of the particular distribution
   -- of the asset. 

   l_asset_dist_tbl(1).transaction_units := &trx_units

   -- Source
   -- Option A - known dist id
   l_asset_dist_tbl(1).distribution_id   := &existing_dist_id
   
   -- or 
   -- Option B - known dist attributes
   l_asset_dist_tbl(1).assigned_to       := &existing_assigned_to
   l_asset_dist_tbl(1).expense_ccid      := &existing_expense_ccid
   l_asset_dist_tbl(1).location_ccid     := &existing_location_id 


   -- Destination
   -- fill in dist info for one or more destination distribution (start with 2..(3,4,..))
   l_asset_dist_tbl(2).transaction_units := &trx_units2 
   l_asset_dist_tbl(2).assigned_to       := &new_assigned_to
   l_asset_dist_tbl(2).expense_ccid      := &new_expesne_ccid
   l_asset_dist_tbl(2).location_ccid     := &new_location_id

   FA_TRANSFER_PUB.do_transfer( 
           -- std parameters
           p_api_version       => 1.0, 
           p_init_msg_list     => FND_API.G_FALSE,
           p_commit            => FND_API.G_FALSE,
           p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
           p_calling_fn        => NULL,
           x_return_status     => l_return_status,  
           x_msg_count         => l_mesg_count,  
           x_msg_data          => l_mesg,  
           -- api parameters
           px_trans_rec        => l_trans_rec,
           px_asset_hdr_rec    => l_asset_hdr_rec,
           px_asset_dist_tbl   => l_asset_dist_tbl);

   --dump messages
   l_mesg_count := fnd_msg_pub.count_msg;

   if l_mesg_count > 0 then

      l_mesg := chr(10) || substr(fnd_msg_pub.get
                                    (fnd_msg_pub.G_FIRST, fnd_api.G_FALSE),
                                     1, 250);
      dbms_output.put_line(l_mesg);

      for i in 1..(l_mesg_count - 1) loop
         l_mesg :=
                     substr(fnd_msg_pub.get
                            (fnd_msg_pub.G_NEXT,
                             fnd_api.G_FALSE), 1, 250);

         dbms_output.put_line(l_mesg);
      end loop;

      fnd_msg_pub.delete_msg();

   end if;

   if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
      dbms_output.put_line('FAILURE');
   else
      dbms_output.put_line('SUCCESS');
      dbms_output.put_line('THID' || to_char(l_trans_rec.transaction_header_id));
   end if;

end;
/