Tuesday, November 5, 2019

API for Amend Lease Options in Oracle Apps r12

In order to Amend or create a line in Lease Options of Property Management module in Oracle Apps r12 through API:





Sample code:



DECLARE
   V_ROWID                 VARCHAR2 (500);
   V_LEASE_CHANGE_ROWID    VARCHAR2 (500);
   V_LEASE_CHANGE_ID       NUMBER;
   V_LEASE_CHANGE_NUMBER   NUMBER;
   V_OPTION_ID             NUMBER;
   V_OPTION_NUM            VARCHAR2 (50);
BEGIN
   BEGIN
      PN_LEASE_CHANGES_PKG.Insert_Row (
         X_ROWID                      => V_LEASE_CHANGE_ROWID,
         X_LEASE_CHANGE_ID            => V_LEASE_CHANGE_ID,
         X_LEASE_ID                   => 413335,
         X_LEASE_CHANGE_NUMBER        => V_LEASE_CHANGE_NUMBER,
         X_LEASE_CHANGE_NAME          => 'EDIT',
         X_RESPONSIBLE_USER           => NULL,
         X_CHANGE_COMMENCEMENT_DATE   => NULL,
         X_CHANGE_TERMINATION_DATE    => NULL,
         X_CHANGE_TYPE_LOOKUP_CODE    => 'EDIT',
         X_CHANGE_EXECUTION_DATE      => NULL,
         X_ATTRIBUTE_CATEGORY         => NULL,
         X_ATTRIBUTE1                 => NULL,
         X_ATTRIBUTE2                 => NULL,
         X_ATTRIBUTE3                 => NULL,
         X_ATTRIBUTE4                 => NULL,
         X_ATTRIBUTE5                 => NULL,
         X_ATTRIBUTE6                 => NULL,
         X_ATTRIBUTE7                 => NULL,
         X_ATTRIBUTE8                 => NULL,
         X_ATTRIBUTE9                 => NULL,
         X_ATTRIBUTE10                => NULL,
         X_ATTRIBUTE11                => NULL,
         X_ATTRIBUTE12                => NULL,
         X_ATTRIBUTE13                => NULL,
         X_ATTRIBUTE14                => NULL,
         X_ATTRIBUTE15                => NULL,
         X_ABSTRACTED_BY_USER         => NULL,
         X_CREATION_DATE              => SYSDATE,
         X_CREATED_BY                 => -1,
         X_LAST_UPDATE_DATE           => SYSDATE,
         X_LAST_UPDATED_BY            => -1,
         X_LAST_UPDATE_LOGIN          => NULL,
         x_org_id                     => 27775,
         x_cutoff_date                => NULL);
      COMMIT;
      DBMS_OUTPUT.put_line (
            'X_LEASE_CHANGE_ID:'
         || V_LEASE_CHANGE_ID
         || 'X_LEASE_CHANGE_NUMBER:'
         || V_LEASE_CHANGE_NUMBER);
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.put_line (
            'In PN_LEASE_CHANGES_PKG Exception:' || SQLERRM);
   END;

   pn_options_pkg.insert_row (x_rowid                       => V_ROWID,
                              x_option_id                   => V_OPTION_ID,
                              x_option_num                  => V_OPTION_NUM,
                              x_lease_id                    => 413335,
                              x_lease_change_id             => V_LEASE_CHANGE_ID,
                              x_option_type_code            => 'TERM', /*Input Option type Code from ‘PN_LEASE_OPTION_TYPE’ */
                              x_start_date                  => '15-Jun-2010',
                              x_expiration_date             => '15-Jun-2010',
                              x_option_size                 => NULL,
                              x_uom_code                    => NULL,
                              x_option_status_lookup_code   => 'OPEN',
                              x_attribute_category          => NULL,
                              x_attribute1                  => NULL,
                              x_attribute2                  => NULL,
                              x_attribute3                  => NULL,
                              x_attribute4                  => NULL,
                              x_attribute5                  => NULL,
                              x_attribute6                  => NULL,
                              x_attribute7                  => NULL,
                              x_attribute8                  => NULL,
                              x_attribute9                  => NULL,
                              x_attribute10                 => NULL,
                              x_attribute11                 => NULL,
                              x_attribute12                 => NULL,
                              x_attribute13                 => NULL,
                              x_attribute14                 => NULL,
                              x_attribute15                 => NULL, /*WHO columns*/
                              x_creation_date               => SYSDATE,
                              x_created_by                  => -1,
                              x_last_update_date            => SYSDATE,
                              x_last_updated_by             => -1,
                              x_last_update_login           => NULL,
                              x_option_exer_start_date      => NULL,
                              x_option_exer_end_date        => NULL,
                              x_option_action_date          => NULL,
                              x_option_cost                 => NULL,
                              x_option_area_change          => NULL,
                              x_option_reference            => NULL,
                              x_option_notice_reqd          => 'N',
                              x_option_comments             => NULL,
                              x_org_id                      => 27775
                    --         x_option_frequency_code       => 'OT',
                    --         x_VENDOR_ID                  => 7572437,
                    --         x_vendor_site_id             => 2506534,
                    --         X_CURRENCY_CODE              => 'BDT' ,
                    --         X_RATE                       => null,
                    --         x_ACTUAL_AMOUNT              => 42105.26,
                    --         X_ESCALATION_AMOUNT          => null,
                    --         X_SCHEDULE_DAY               => 14 ,
                    --         X_ROU_ASSET_FLAG             => null
                              );
   COMMIT;
   DBMS_OUTPUT.put_line (
      'V_OPTION_ID:' || V_OPTION_ID || 'V_OPTION_NUM:' || V_OPTION_ID);
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('In Exception:' || SQLERRM);
END;

Sunday, October 27, 2019

Bank Payment Acknowledgement API Processing in Oracle Payments/Payables through XML parsing

Bank Payment Acknowledgement API Processing in Oracle Payments/Payables through XML parsing

Payment Acknowledgement functionality is about to load and display in EBS the bank processing status for each of your supplier/employee payments after successful transmission of the payment file to your bank.


Starting with release 12.2 a standard API is available to load acknowledgement file but the load of files to EBS database and call of API is subject of additional development.


From a setup point of view only Bank Acknowledgement Code Setup is required as your bank status codes should be mapped to ISO statuses provided by Oracle Payments:

·                     Accepted technical, syntactical and profile; passed to back office          (BACKOFF)
·                     Accepted back office; passed to clearing          (CLEAR)
·                     Accepted with change   (ACCC)
·                     Pending further processing        (PEND)
·                   Rejection          (REJECT)



From EBS process point of view this functionality will just show to you the bank status of your payment but will NOT:

·                    Void/change EBS payment status in Oracle Payments/Payables 
·                    Impact bank reconciliation process in Cash Management


Sample Code:

procedure payments_ack   (p_xml                in  xmltype,
                          x_return_status      out varchar2,
                          x_msg_data           out varchar2)
is
p_return_status varchar2(1);
p_ret_msg varchar2(2000);
p_msg_cnt number;
v_count number;
l_pay_ref_num iby_payments_all.payment_reference_number%type;

l_payment_id iby_payments_all.payment_id%type;
l_payment_reference_number iby_payments_all.payment_reference_number%type;
l_payment_instruction_id iby_payments_all.payment_instruction_id%type;
l_paper_document_number iby_payments_all.paper_document_number%type;
l_bank_assigned_ref_code iby_payments_all.bank_assigned_ref_code%type;
l_bank_assigned_ref_code2 iby_payments_all.bank_assigned_ref_code%type;
l_payer_legal_entity_name iby_payments_all.payer_legal_entity_name%type;
l_int_bank_name iby_payments_all.int_bank_name%type;
l_int_bank_branch_name iby_payments_all.int_bank_branch_name%type;
l_int_eft_swift_code iby_payments_all.int_eft_swift_code%type;
l_int_bank_account_number iby_payments_all.int_bank_account_number%type;
l_int_bank_account_iban iby_payments_all.int_bank_account_iban%type;
l_beneficiary_name iby_payments_all.beneficiary_name%type;
l_ext_bank_name iby_payments_all.ext_bank_name%type;
l_ext_bank_branch_name iby_payments_all.ext_bank_branch_name%type;
l_ext_eft_swift_code iby_payments_all.ext_eft_swift_code%type;
l_ext_bank_account_num_elec iby_payments_all.ext_bank_account_num_elec%type;
l_ext_bank_account_iban_number iby_payments_all.ext_bank_account_iban_number%type;
l_payment_amount iby_payments_all.payment_amount%type;
l_bank_charges number;
l_payment_currency_code iby_payments_all.payment_currency_code%type;
l_org_id number(15);

rej_dtls_TAB  IBY_IMPORT_PMT_ACK_DATA_PUB.Reject_dtls_tbl_type ;
rej_dtl_rec IBY_IMPORT_PMT_ACK_DATA_PUB.REJECT_DTLS_REC;

begin

--fnd_global.APPS_INITIALIZE(944523,63117,200);

FOR r IN (
    SELECT 
     ExtractValue(Value(p),'/row/BANK_STATUS_CODE/text()') as BANK_STATUS_CODE
    ,ExtractValue(Value(p),'/row/CHECK_NUMBER/text()') as CHECK_NUMBER
    ,ExtractValue(Value(p),'/row/BANK_ERROR_CODE/text()') as BANK_ERROR_CODE
    ,ExtractValue(Value(p),'/row/BANK_ERROR_MESSAGE/text()') as BANK_ERROR_MESSAGE
    ,ExtractValue(Value(p),'/row/BANK_ERROR_LOCATION/text()') as BANK_ERROR_LOCATION
    FROM   TABLE(XMLSEQUENCE(EXTRACT(p_xml,'/PaymentsAck/row'))) p ) 

    loop
    
      begin
      
        if r.BANK_STATUS_CODE is null then
        x_return_status:='REJECTED';
        x_msg_data:='BANK_STATUS_CODE cannot be null!';
        dbms_output.put_line (x_return_status||'---'||x_msg_data);
        return;
        end if;
      
        begin
        select payment_reference_number
        into   l_pay_ref_num
        from iby_payments_all a , ap_checks_all c
        where a.payment_id = c.payment_id
        and check_number = r.check_number;
        exception when others then
        x_return_status:='REJECTED';
        x_msg_data:='Invalid Check Number, Record Not Found!';
        dbms_output.put_line (x_return_status||'---'||x_msg_data);         
        return;
        end;
        
        select count(*)
        into v_count
        from apps.iby_payments_all
        where payment_reference_number = l_pay_ref_num;
        
        if v_count = 1 then
        
            select ipa.payment_id,
                   ipa.payment_reference_number,
                   ipa.payment_instruction_id,
                   paper_document_number,
                   ipa.bank_assigned_ref_code p_bank_assigned_ref_code1,
                   null p_bank_assigned_ref_code2,
                   ipa.payer_legal_entity_name,
                   ipa.int_bank_name,
                   ipa.int_bank_branch_name,
                   ipa.int_eft_swift_code,
                   ipa.int_bank_account_number,
                   ipa.int_bank_account_iban,
                   ipa.beneficiary_name,
                   ipa.ext_bank_name,
                   ipa.ext_bank_branch_name,
                   ipa.ext_eft_swift_code,
                   ipa.ext_bank_account_num_elec,
                   ipa.ext_bank_account_iban_number,
                   ipa.payment_amount,
                   null bank_charges,
                   ipa.payment_currency_code,
                   ipa.org_id
                   into
                   l_payment_id,
                   l_payment_reference_number,
                   l_payment_instruction_id,
                   l_paper_document_number,
                   l_bank_assigned_ref_code,
                   l_bank_assigned_ref_code2,
                   l_payer_legal_entity_name,
                   l_int_bank_name,
                   l_int_bank_branch_name,
                   l_int_eft_swift_code,
                   l_int_bank_account_number,
                   l_int_bank_account_iban,
                   l_beneficiary_name,
                   l_ext_bank_name,
                   l_ext_bank_branch_name,
                   l_ext_eft_swift_code,
                   l_ext_bank_account_num_elec,
                   l_ext_bank_account_iban_number,
                   l_payment_amount,
                   l_bank_charges,
                   l_payment_currency_code,
                   l_org_id
              from apps.iby_payments_all ipa       
             where payment_reference_number = l_pay_ref_num;

            rej_dtl_rec.BANK_ERROR_CODE := r.BANK_ERROR_CODE;
            rej_dtl_rec.BANK_ERROR_MESSAGE := r.BANK_ERROR_MESSAGE;
            rej_dtl_rec.BANK_ERROR_LOCATION := r.BANK_ERROR_LOCATION;
        
            rej_dtls_TAB(1) := rej_dtl_rec;

            iby_import_pmt_ack_data_pub.Create_Acknowlegment
            (
            P_PAYMENT_REF_NUMBER            => l_payment_reference_number,
            P_PMT_INSTRUCTION_REF_NUMBER    => l_payment_instruction_id,
            P_BANK_STATUS_CODE              => r.BANK_STATUS_CODE,
            P_ACKNOWLEDGEMENT_DATE          => sysdate,
            P_BANK_ASSIGNED_REF_CODE1       => l_bank_assigned_ref_code,
            P_BANK_ASSIGNED_REF_CODE2       => l_bank_assigned_ref_code2,
            P_PAYER_NAME                    => l_payer_legal_entity_name,
            P_PAYER_BANK_NAME               => l_int_bank_name,
            P_PAYER_BANK_BRANCH_NAME        => l_int_bank_branch_name,
            P_PAYER_BANK_SWIFT_CODE         => l_int_eft_swift_code,
            P_PAYER_BANK_ACCOUNT_NUMBER     => l_int_bank_account_number,
            P_PAYER_BANK_IBAN_NUMBER        => l_int_bank_account_iban,
            P_PAYEE_NAME                    => l_beneficiary_name,
            P_PAYEE_BANK_NAME               => l_ext_bank_name,
            P_PAYEE_BANK_BRANCH_NAME        => l_ext_bank_branch_name,
            P_PAYEE_BANK_SWIFT_CODE         => l_ext_eft_swift_code,
            P_PAYEE_BANK_ACCOUNT_NUMBER     => l_ext_bank_account_num_elec,
            P_PAYEE_BANK_IBAN_NUMBER        => l_ext_bank_account_iban_number,
            P_PAYMENT_AMOUNT                => l_payment_amount,
            P_BANK_CHARGE_AMOUNT            =>  null,
            P_PAYMENT_CURRENCY_CODE         => l_payment_currency_code,
            P_EXCHANGE_RATE                 =>  1,
            P_VALUE_DATE                    => sysdate,
            P_REQUESTED_EXECUTION_DATE      => sysdate,
            P_P_REJECT_DTLS_TBL_TYPE        => rej_dtls_TAB,
            x_return_status                 => p_return_status,
            x_return_message                => p_ret_msg,
            x_msg_count                     => p_msg_cnt
            );
--            DBMS_OUTPUT.PUT_LINE('p_return_status: '||p_return_status);
--            DBMS_OUTPUT.PUT_LINE('p_ret_msg: '||p_ret_msg);
--            DBMS_OUTPUT.PUT_LINE('p_msg_cnt: '||p_msg_cnt);
            
            if p_return_status = 'S' and p_ret_msg = 'SUCCESS' then                
                x_return_status:='SUCCESS';
                x_msg_data:='Acknowledgement Posted Successfully';
                dbms_output.put_line (x_return_status||':---:'||x_msg_data);
                else
                x_return_status:='REJECTED';
                x_msg_data:='Error in posting Acknowledgement: '||sqlerrm;
                dbms_output.put_line (x_return_status||':---:'||x_msg_data);
                return;
            end if;
        
        else
        
        x_return_status:='REJECTED';
        x_msg_data:='Invalid Check Number!';
        dbms_output.put_line (x_return_status||':---:'||x_msg_data);
                
        return;
        
        end if;
        
        EXCEPTION
        WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('In API Exception: '||SQLERRM);
        rollback;

        x_return_status:='REJECTED';
        x_msg_data:='In API Exception: '||SQLERRM;
        return;
      end;

    end loop;

EXCEPTION
WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('SQLERRM: '||SQLERRM);
  rollback;
  
        x_return_status:='REJECTED';
        x_msg_data:='In Main Exception: '||SQLERRM;
        
  return;

end payments_ack;

Monday, December 17, 2018

Creating Lookup and Lookup Values through API

Creating Lookup and Lookup Values through API
DECLARE
   err_code    VARCHAR2 (50);
   err_msg     VARCHAR2 (1000);
   ln_rowid    ROWID;
   ln_rowid1   ROWID;

   CURSOR C
   IS
        SELECT   CODE, NAMES
          FROM   XX_TABLE_NAME
         WHERE   LINE_STATUS <> 'INSERTED' OR LINE_STATUS IS NULL
      ORDER BY   1;
BEGIN
   fnd_lookup_types_pkg.insert_row (
      x_rowid                 => ln_rowid,
      x_lookup_type           => 'XX_TYPE',                      --Lookup Type
      x_security_group_id     => 0,                        --Security Group Id
      x_view_application_id   => 3,                  -- Application Id (0-AOL)
      x_application_id        => 50000,              -- Application Id (0-AOL)
      x_customization_level   => 'U',                                   --User
      x_meaning               => 'XX_MEANING',            --Meaning for Lookup
      x_description           => 'XX_DESCRIPTION',    --Description for Lookup
      x_creation_date         => SYSDATE,
      x_created_by            => -1,
      x_last_update_date      => SYSDATE,
      x_last_updated_by       => -1,
      x_last_update_login     => -1
   );


   FOR REC IN C
   LOOP
      BEGIN
         fnd_lookup_values_pkg.insert_row (
            x_rowid                 => ln_rowid1,
            x_lookup_type           => 'XX_TYPE',
            x_security_group_id     => 0,
            x_view_application_id   => 3,
            x_lookup_code           => rec.code,
            x_tag                   => NULL,
            x_attribute_category    => NULL,
            x_attribute1            => NULL,
            x_attribute2            => NULL,
            x_attribute3            => NULL,
            x_attribute4            => NULL,
            x_enabled_flag          => 'Y',
            x_start_date_active     => TO_DATE ('01-DEC-2015', 'DD-MON-YYYY'),
            x_end_date_active       => NULL,
            x_territory_code        => NULL,
            x_attribute5            => NULL,
            x_attribute6            => NULL,
            x_attribute7            => NULL,
            x_attribute8            => NULL,
            x_attribute9            => NULL,
            x_attribute10           => NULL,
            x_attribute11           => NULL,
            x_attribute12           => NULL,
            x_attribute13           => NULL,
            x_attribute14           => NULL,
            x_attribute15           => NULL,
            x_meaning               => REC.NAMES,             --Lookup Meaning
            x_description           => REC.NAMES,
            x_creation_date         => SYSDATE,
            x_created_by            => -1,
            x_last_update_date      => SYSDATE,
            x_last_updated_by       => -1,
            x_last_update_login     => -1
         );

         UPDATE   XX_TABLE_NAME
            SET   LINE_STATUS = 'INSERTED', ERROR_TEXT = ''
          WHERE   CODE = rec.CODE;

         COMMIT;
      EXCEPTION
         WHEN OTHERS
         THEN
            ROLLBACK;

            err_code := SQLCODE;
            err_msg := SUBSTR (SQLERRM, 1, 200);

            UPDATE   XX_TABLE_NAME
               SET   LINE_STATUS = 'ERROR',
                     ERROR_TEXT = err_code || ':' || err_msg
             WHERE   CODE = rec.CODE;

            COMMIT;

            DBMS_OUTPUT.put_line (SQLERRM);
      END;
   END LOOP;
END;

Thursday, September 6, 2018

Registering Table through API in Oracle apps r12

Registering Table through API in Oracle apps r12
BEGIN
AD_DD.REGISTER_TABLE ('FND','XXCUST_KFF_DEMO','T');
END;
/
BEGIN
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','CODE_COMBINATION_ID', 1, 'NUMBER', 38, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','ID_FLEX_NUM', 2, 'NUMBER', 38, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT1', 3, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT2', 4, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT3', 5, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT4', 6, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT5', 7, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT6', 8, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT7', 9, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT8', 10, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT9', 11, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT10', 12, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT11', 13, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT12', 14, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT13', 15, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT14', 16, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT15', 17, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT16', 18, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT17', 19, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT18', 20, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT19', 21, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT20', 22, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT21', 23, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT22', 24, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT23', 25, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT24', 26, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT25', 27, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT26', 28, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT27', 29, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT28', 30, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT29', 31, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SEGMENT30', 32, 'VARCHAR2', 100, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','SUMMARY_FLAG', 33, 'VARCHAR2', 1, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','ENABLED_FLAG', 34, 'VARCHAR2', 1, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','START_DATE_ACTIVE', 35, 'DATE', 9, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','END_DATE_ACTIVE', 36, 'DATE', 9, 'Y', 'N');
-- WHO Columns
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','CREATED_BY', 37, 'NUMBER', 38, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','CREATION_DATE', 38, 'DATE', 9, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','LAST_UPDATED_BY', 39, 'NUMBER', 38, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','LAST_UPDATE_DATE', 40, 'DATE', 9, 'Y', 'N');
AD_DD.REGISTER_COLUMN ('FND', 'XXCUST_KFF_DEMO','LAST_UPDATE_LOGIN', 41, 'NUMBER', 38, 'Y', 'N');
END;
/

Wednesday, July 11, 2018

PAY_ELEMENT_LINK_API.delete_element_link

PAY_ELEMENT_LINK_API.delete_element_link
DECLARE
   l_effective_start_date   DATE;
   l_effective_end_date     DATE;
   l_entries_warning        BOOLEAN;

   CURSOR c1
   IS
      SELECT   *
        FROM   hr.pay_element_links_f
       WHERE   ELEMENT_LINK_ID IN (SELECT   ELEMENT_LINK_ID FROM TMP_TABLE);
BEGIN
   FOR r1 IN c1
   LOOP
      PAY_ELEMENT_LINK_API.delete_element_link (
         p_effective_date          => R1.EFFECTIVE_START_DATE,
         p_element_link_id         => r1.ELEMENT_LINK_ID,
         p_datetrack_delete_mode   => 'ZAP',
         p_object_version_number   => R1.object_version_number,
         p_effective_start_date    => l_effective_start_date,
         p_effective_end_date      => l_effective_end_date,
         p_entries_warning         => l_entries_warning
      );

      DBMS_OUTPUT.PUT_LINE ('DELETED');
   END LOOP;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.PUT_LINE ('ERROR' || '     ' || SQLERRM);
END;

Thursday, July 5, 2018

hr_sit_api.create_sit

hr_sit_api.create_sit
DECLARE
   err_code                         varchar2 (50);
   err_msg                          varchar2 (1000);
   lv_pea_object_version_number     NUMBER;
   lv_analysis_criteria_id          NUMBER;
   lv_person_analysis_criteria_id   NUMBER;

   CURSOR EMP_DETAIL
   IS
      SELECT   *
        FROM   ---TMP_SIT_TABLE
       WHERE       SIT_NAME = :SIT_NAME
               AND (status <> 'U' OR STATUS IS NULL);
BEGIN
   FOR REC IN EMP_DETAIL
   LOOP
      BEGIN
         hr_sit_api.create_sit (
            p_validate                    => FALSE,
            p_effective_date              => SYSDATE,
            p_person_id                   => rec.PERSON_ID,
            p_pea_object_version_number   => lv_pea_object_version_number,
            p_business_group_id           => ---101,
            p_id_flex_num                 => -----50284,
            p_analysis_criteria_id        => lv_analysis_criteria_id,
            p_person_analysis_id          => lv_person_analysis_criteria_id,
            p_date_from                   => TO_DATE (rec.SEGMENT1,
                                                      'DD-MON-RRRR'),
            p_date_to                     => TO_DATE (rec.SEGMENT2,
                                                      'DD-MON-RRRR'), --=> NULL,
            p_segment1                    => TO_CHAR (rec.SEGMENT1,
                                                      'YYYY/MM/DD HH24:MI:SS'),
            p_segment2                    => TO_CHAR (rec.SEGMENT2,
                                                      'YYYY/MM/DD HH24:MI:SS'),
            p_segment3                    => rec.segment3,
            p_segment4                    => rec.segment4,
            p_segment5                    => rec.segment5,
            p_segment6                    => TO_CHAR (rec.SEGMENT6,
                                                      'YYYY/MM/DD HH24:MI:SS'),
            p_segment7                    => rec.segment7,
            p_segment8                    => rec.segment8,
            p_segment9                    => rec.segment9,
            p_segment10                   => rec.segment10,
            p_segment11                   => rec.segment11,
            p_segment12                   => rec.segment12,
            p_segment13                   => rec.segment13,
            p_segment14                   => rec.segment14,
            p_segment15                   => rec.segment15,
            p_segment16                   => rec.segment16,
            p_segment17                   => rec.segment17,
            p_segment18                   => rec.segment18,
            p_segment19                   => rec.segment19,
            p_segment20                   => rec.segment20,
            p_segment21                   => rec.segment21,
            p_segment22                   => rec.segment22,
            p_segment23                   => rec.segment23,
            p_segment24                   => rec.segment24,
            p_segment25                   => rec.segment25,
            p_segment26                   => rec.segment26,
            p_segment27                   => TO_CHAR (rec.SEGMENT27,
                                                      'YYYY/MM/DD HH24:MI:SS'),
            p_segment28                   => rec.segment28,
            p_segment29                   => rec.segment29,
            p_segment30                   => rec.segment30
         );

         COMMIT;

         UPDATE   ----TMP_SIT_TABLE
            SET   ANALYSIS_CRITERIA_ID = lv_analysis_criteria_id,
                  PERSON_ANALYSIS_ID = lv_person_analysis_criteria_id,
                  status = 'U',
                  ERROR_TEXT = 'No Error'
          WHERE   employee_number = rec.employee_number
                  AND srl_no = rec.srl_no;

         COMMIT;
      EXCEPTION
         WHEN OTHERS
         THEN
            ROLLBACK;

            err_code := SQLCODE;
            err_msg := SUBSTR (SQLERRM, 1, 200);

            UPDATE   ----TMP_SIT_TABLE
               SET   status = 'E', ERROR_TEXT = err_code || ':' || err_msg
             WHERE   employee_number = rec.employee_number
                     AND srl_no = rec.srl_no;

            COMMIT;

            DBMS_OUTPUT.put_line (' Error Msg:  ' || SQLERRM);
      END;
   END LOOP;
END;

hr_sit_api.delete_sit

hr_sit_api.delete_sit
DECLARE
   CURSOR c1
   IS
      SELECT   PERSON_ANALYSIS_ID, OBJECT_VERSION_NUMBER
        FROM   PER_PERSON_ANALYSES
       WHERE   TRUNC (CREATION_DATE) = TRUNC (SYSDATE);
BEGIN
   FOR r1 IN c1
   LOOP
      hr_sit_api.delete_sit (
         p_person_analysis_id          => r1.PERSON_ANALYSIS_ID,
         p_pea_object_version_number   => r1.OBJECT_VERSION_NUMBER,
         p_validate                    => FALSE
      );
   END LOOP;

   COMMIT;
END;

Monday, July 2, 2018

Create Person Phone in Oracle apps HRMS

Create Person Phone in Oracle apps HRMS
Create Person Phone in Oracle apps HRMS:

Sample code:


DECLARE

   err_code                  VARCHAR2 (50);
   err_msg                   VARCHAR2 (1000);
   l_phone_id                per_phones.phone_id%TYPE;
   l_object_version_number   per_phones.object_version_number%TYPE;

   CURSOR EMP_PHONE
   IS

      SELECT   PHONE_NUMBER,
               EMPLOYEE_NUMBER,
               PERSON_ID,
               SR
        FROM   --- temporary_phone_table
       WHERE   PERSON_ID IS NOT NULL AND LINE_STATUS <> 'INSERTED' OR LINE_STATUS IS NULL;

BEGIN

   FOR REC IN EMP_PHONE

   LOOP

      BEGIN

         hr_phone_api.create_phone (
            p_date_from               => TRUNC (SYSDATE),
            p_date_to                 => NULL,
            p_phone_type              => 'M',
            p_phone_number            => REC.PHONE_NUMBER,
            p_parent_id               => REC.PERSON_ID,
            p_parent_table            => 'PER_ALL_PEOPLE_F',
            p_validate                => FALSE,
            p_effective_date          => SYSDATE,
            p_object_version_number   => l_object_version_number,
            p_phone_id                => l_phone_id
         );

         UPDATE   ----temporary_phone_table
            SET   PHONE_ID = l_phone_id,
                  LINE_STATUS = 'INSERTED',
                  ERROR_TEXT = ''
          WHERE   EMPLOYEE_NUMBER = rec.EMPLOYEE_NUMBER AND SR = rec.SR;

         COMMIT;

      EXCEPTION
         WHEN OTHERS
         THEN
            ROLLBACK;

            err_code := SQLCODE;
            err_msg := SUBSTR (SQLERRM, 1, 200);

            UPDATE   ----temporary_phone_table
               SET   LINE_STATUS = 'ERROR',
                     ERROR_TEXT = err_code || ':' || err_msg
             WHERE   EMPLOYEE_NUMBER = rec.EMPLOYEE_NUMBER AND SR = rec.SR;

            COMMIT;

            DBMS_OUTPUT.put_line (SQLERRM);

      END;

   END LOOP;

END;

Sunday, July 1, 2018

Create Person Address (Temporary) in Oracle apps HRMS

Create Person Address (Temporary) in Oracle apps HRMS
Create Person Address (Temporary) in Oracle apps HRMS:


Sample Code:

DECLARE
   err_code                   VARCHAR2 (50);
   err_msg                    VARCHAR2 (1000);
   ln_address_id              PER_ADDRESSES.ADDRESS_ID%TYPE;
   ln_object_version_number   PER_ADDRESSES.OBJECT_VERSION_NUMBER%TYPE;
   V_COUNT                    NUMBER (5);

   CURSOR EMP_ADD
   IS
      SELECT T.ADDRESS_LINE1,
             T.TOWN_OR_CITY,
             T.COUNTRY,
             T.ADDR_ATTRIBUTE1,
             T.ADDR_ATTRIBUTE2,
             T.ADDR_ATTRIBUTE3,
             PERSON_ID,
             EMPLOYEE_NUMBER,
             SR
        FROM temporary_address_table T
       WHERE     PRIMARY_FLAG = 'N'
             AND ADDRESS_ID IS NULL
             AND PERSON_ID IS NOT NULL
             AND (LINE_STATUS NOT IN ('I', 'U') OR LINE_STATUS IS NULL);

BEGIN
   FOR REC IN EMP_ADD
   LOOP
      BEGIN
         SELECT COUNT (*)
           INTO V_COUNT
           FROM PER_ADDRESSES
          WHERE PERSON_ID = rec.person_id AND PRIMARY_FLAG = 'N';

         IF V_COUNT = 0
         THEN
            hr_person_address_api.create_person_address (
               p_effective_date          => TRUNC (SYSDATE),
               --            P_PRADD_OVLAPVAL_OVERRIDE   => FALSE,

               --            P_VALIDATE_COUNTY           => TRUE,

               p_person_id               => rec.person_id,
               p_primary_flag            => 'N',
               p_style                   => 'PK_GLB',
               p_date_from               => TRUNC (SYSDATE),
               p_address_line1           => REC.ADDRESS_LINE1,
               p_addr_attribute1         => REC.ADDRESS_LINE1,
               p_town_or_city            => REC.TOWN_OR_CITY,
               p_addr_attribute2         => REC.TOWN_OR_CITY,
               p_addr_attribute3         => 'Pakistan',
               p_country                 => 'PK',
               p_address_id              => ln_address_id,
               p_object_version_number   => ln_object_version_number);

            COMMIT;

            UPDATE temporary_address_table
               SET ADDRESS_ID = ln_address_id,
                   LINE_STATUS = 'I',
                   ERROR_TEXT = ''
             WHERE EMPLOYEE_NUMBER = rec.EMPLOYEE_NUMBER AND sr = rec.sr;

            COMMIT;
         ELSE
            NULL;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            ROLLBACK;
            err_code := SQLCODE;
            err_msg := SUBSTR (SQLERRM, 1, 200);

            UPDATE temporary_address_table
               SET LINE_STATUS = 'E', ERROR_TEXT = err_code || ':' || err_msg
             WHERE EMPLOYEE_NUMBER = rec.EMPLOYEE_NUMBER AND sr = rec.sr;

            COMMIT;
            DBMS_OUTPUT.put_line (SQLERRM);
      END;
   END LOOP;
END;