Thursday 14 July 2011

GL interface using bulk collect

Hi Friends,

These are the mandatory columns in gl interface....



1)Once we get the data into the stage table we have to transfer from stage table into
 Interface table by using PL/SQL Program
 Inside this program we write
 1)Cursor   (to select data from stage table)
 2)Validate Data
 3)Insert Statement(To Insert Into Interface table.

Note:1) If Record is valid record then we will insert into interface table other wise
        we will insert into Error tables.
     2)Before Inserting the Data into Interface tables first we have to understand the
       Interface table structure and we should know waht data is valid and what data
      is not valid for the all Mandatroy columns.

2)Once the data is Inserted into the Interface table . Then we will submit concurrent
  program to transfer the data from interface table to Base Tables.

In this Interface Interface table is GL_INTERFACE
Mandatroy Columns:
==================
1)STATUS
2)ACCOUNTING_DATE
3)CURRENCY_CODE
4)CREATED_BY
5)CREATION_DATE
6)USER_JE_SOURCE_NAME
7)USER_JE_CATEGORY_NAME
8)ACTUAL_FLAG
9)ENTERED_DR
10)ENTERED_CR
11)GROUP_ID
12)PERIOD_NAME
13)SET_OF_BOOKS_ID


1)Status Column will accept any Data. but we will insert always standard string called
         "NEW". It means that we are bringing new data into Oracle Applications.

2)ACCOUNTING_DATE  : Column will accept valid acc_date as per the accounting Periods
3)CURRENCY_CODE    : from FND_CURRENCIES table we can find out wether CUrrency Code is
            valid or Not if Currecny code is available in the Table and enabled it is
            valid.otherwise Invalid
4)CREATED_BY  : IS nothing but UserID we have to find wether  USerID is valid or not
               By using FND_USER table we can find out wether it is valid or not.
5)CREATION_DATE : Should be valid date
                   date should be <= SYSDATE
6)USER_JE_SOURCE_NAME: Valid Source name
                 By using GL_JE_SOURCES table  we can find wether valid source or not.

7)USER_JE_CATEGORY_NAME : Will accept valid cvategory name
        By using GL_JE_CATEGORIES table we can find out wether valid category or Not.
8)ACTUL_FLAG    : This Column will accept single Character
                  Either 'A' 'B' 'E'
                  A=Actuval Amounts
                  B=Budeget Amounts
                  E=Encumbrance Amounts
9)ENTERED_DR
10)ENTERED_CR : Both Columns we accept Numbers Only but same number we have to insert
                into both the columns.
      Always ENTERED_CR = ENTERED_DR . Otherwise Suspense Account will be
               Created.
11)GROUP_ID   : Will accept any Number
12)period_name : Will Accept valid period and that period should be in the Open status
                By using GL_PERIODS we can find wether Period is there or not
                         GL_PERIOD_STATUSES table we can find wether it is in "Open"
                status or Not.
13)SET_OF_BOOKS_ID  : This column will accept valid set of Books ID. By using
              GL_SETS_OF_BOOKS table we can fnd out wether valuid set_of_books_id or
              not.
Program :

CREATE OR REPLACE PACKAGE GL_INTERFACE_PKG
AS
PROCEDURE GL_INTERFACE_PROC(ERRBUF OUT VARCHAR2, RETCODE OUT VARCHAR2)
END GL_INTERFACE_PKG;

/

CREATE OR REPLACE PACKAGE BODY APPS.gl_interface_pkg
AS
   PROCEDURE gl_interface_proc (errbuf OUT VARCHAR2, retcode OUT VARCHAR2)
   IS
      -- cursor declaration
      CURSOR gl_cur
      IS
         SELECT *
           FROM xtg_gl_interface_stg;

      TYPE gl_data_tbl IS TABLE OF xtg_gl_interface_stg%ROWTYPE
         INDEX BY BINARY_INTEGER;

      rec_cur             gl_data_tbl;
      l_currencycode      VARCHAR2 (25);
      l_set_of_books_id   NUMBER (5);
      l_flag              VARCHAR2 (2);
      l_error_msg         VARCHAR2 (100);
      l_err_flag          VARCHAR2 (10);
      l_category          VARCHAR2 (100);
      l_userid            NUMBER (10);
      l_count             NUMBER (9)     DEFAULT 0;
   BEGIN
      DELETE FROM gl_interface;

      COMMIT;

      OPEN gl_cur;
                          
      FETCH gl_cur
      BULK COLLECT INTO rec_cur;
    
      CLOSE gl_cur;

      FOR rec_cur IN gl_cur
      LOOP
         l_count := l_count + 1;
         l_flag := 'A';

--Category Column Validation
         BEGIN
            SELECT user_je_category_name
              INTO l_category
              FROM gl_je_categories
             WHERE user_je_category_name = rec_cur.user_je_category_name;
         EXCEPTION
            WHEN OTHERS
            THEN
               l_flag := 'E';
               l_error_msg := 'Category does not exist ';
               fnd_file.put_line
                                (fnd_file.LOG,
                                    'Inserting data into the Interface TABLE'
                                 || '-'
                                 || l_count
                                 || ' '
                                 || l_error_msg
                                );
         END;

         --End Category Column Validation
         --User ID column validation
         BEGIN
            SELECT user_id
              INTO l_userid
              FROM fnd_user
             WHERE user_id = rec_cur.created_by;
         EXCEPTION
            WHEN OTHERS
            THEN
               l_flag := 'E';
               l_error_msg := 'User ID does not exist ';
               fnd_file.put_line
                                (fnd_file.LOG,
                                    'Inserting data into the Interface TABLE'
                                 || '-'
                                 || l_count
                                 || ' '
                                 || l_error_msg
                                );
         END;

         --End of Created_by OR UserID column Validation
         --Set of  books Validation
         BEGIN
            SELECT set_of_books_id
              INTO l_set_of_books_id
              FROM gl_sets_of_books
             WHERE set_of_books_id = rec_cur.set_of_books_id;
         EXCEPTION
            WHEN OTHERS
            THEN
               l_flag := 'E';
               l_error_msg := 'set of Books ID does not exist ';
               fnd_file.put_line
                                (fnd_file.LOG,
                                    'Inserting data into the Interface TABLE'
                                 || '-'
                                 || l_count
                                 || ' '
                                 || l_error_msg
                                );
         END;

--Cuurency Code Validation
         BEGIN
            SELECT currency_code
              INTO l_currencycode
              FROM fnd_currencies
             WHERE currency_code = rec_cur.currency_code
               AND currency_code = 'USD';
         EXCEPTION
            WHEN OTHERS
            THEN
               l_flag := 'E';
               l_error_msg := 'currency code does not exists';
               fnd_file.put_line
                                (fnd_file.LOG,
                                    'Inserting data into the Interface TABLE'
                                 || '-'
                                 || l_count
                                 || ' '
                                 || l_error_msg
                                );
         END;

         IF l_flag != 'E'
         THEN
            fnd_file.put_line (fnd_file.LOG,
                               'Inserting data into the Interface TABLE'
                              );

            INSERT INTO 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,
                         user_currency_conversion_type,
                         segment1, segment2,
                         segment3, segment4,
                         segment5, entered_dr,
                         entered_cr, accounted_dr,
                         accounted_cr, GROUP_ID,
                         reference1, reference2,
                         reference4, reference5
                        )
                 VALUES (rec_cur.status, rec_cur.set_of_books_id,
                         rec_cur.accounting_date, rec_cur.currency_code,
                         SYSDATE,fnd_global.user_id,
                         rec_cur.actual_flag, rec_cur.user_je_category_name,
                         rec_cur.user_je_source_name,
                         rec_cur.user_currency_conversion_type,
                         rec_cur.segment1, rec_cur.segment2,
                         rec_cur.segment3, rec_cur.segment4,
                         rec_cur.segment5, rec_cur.entered_dr,
                         rec_cur.entered_cr, rec_cur.accounted_dr,
                         rec_cur.accounted_cr, rec_cur.GROUP_ID,
                         rec_cur.reference1, rec_cur.reference2,
                         rec_cur.reference4, rec_cur.reference5
                        );
         END IF;

         l_flag := NULL;
         l_error_msg := NULL;
      END LOOP;

      COMMIT;
   END;
END;
/
Please give ur comments to this post 
thank you
sandeep

7 comments:

  1. Excellent work Sandeep!!

    ReplyDelete
  2. thnks for bulk collect concept..
    regards,
    Mahesh Wangate

    ReplyDelete
  3. Good job Sandeep

    ReplyDelete
  4. how u consider segment and reference columns in cursor,i am having doubt. could be explain means its helpful

    ReplyDelete
  5. Thanks Sandeep. For error part are you inserting data into custom error table.

    ReplyDelete