Friday 20 March 2015

API/Script to UNAPPLY ON-ACCOUNT Receipts in Oracle Apps R12 Receivables

PROCEDURE ar_unapply_on_acct_receipt(p_cash_receipt_id NUMBER) IS
   l_return_status VARCHAR2(1);
   l_msg_count NUMBER;
   l_msg_data VARCHAR2(240);
   l_cash_receipt_id NUMBER;
   p_count number := 0;
BEGIN
    -- 1) Set the applications context
    mo_global.init('AR');
    mo_global.set_policy_context('S','204');

   AR_RECEIPT_API_PUB.UNAPPLY_ON_ACCOUNT
   ( p_api_version => 1.0,
     p_init_msg_list => FND_API.G_TRUE,
     p_commit => FND_API.G_TRUE,
     p_validation_level => FND_API.G_VALID_LEVEL_FULL,
     x_return_status => l_return_status,
     x_msg_count => l_msg_count,
     x_msg_data => l_msg_data,
     p_cash_receipt_id => p_cash_receipt_id,
     P_reversal_gl_date => TRUNC(SYSDATE));

    -- 3) Review the API output
    dbms_output.put_line('Status ' || l_return_status);
    dbms_output.put_line('Message count ' || l_msg_count);

    if l_msg_count = 1 Then
       dbms_output.put_line('l_msg_data '|| l_msg_data);
    elsif l_msg_count > 1 Then
       loop
          p_count := p_count + 1;
          l_msg_data := FND_MSG_PUB.Get(FND_MSG_PUB.G_NEXT,FND_API.G_FALSE);
          if l_msg_data is NULL Then
             exit;
          end if;
          dbms_output.put_line('Message ' || p_count ||'. '||l_msg_data);
       end loop;
    end if;
END ar_unapply_on_acct_receipt;

Tuesday 17 March 2015

Common Utility Procedure for FND_FLIE.LOG and FND_FILE.OUT

PROCEDURE pr_print_debug (p_message IN VARCHAR2, p_write_to IN NUMBER) IS
BEGIN
  -- 1 = LOG, 2 = OUTFILE, 3 = both LOG and OUTFILE
 
  IF p_write_to = 1 THEN
    apps.fnd_file.put_line (apps.fnd_file.log, p_message);
  ELSIF p_write_to = 2 THEN
apps.fnd_file.put_line (apps.fnd_file.output, p_message);
  ELSE
apps.fnd_file.put_line (apps.fnd_file.log, p_message);
apps.fnd_file.put_line (apps.fnd_file.output, p_message);
  END IF;
 
  EXCEPTION
  WHEN OTHERS THEN
    fnd_file.put_line(fnd_file.log, p_Message);
    fnd_file.put_line(fnd_file.log, 'Unable to open/write to the log file with the following error');
    fnd_file.put_line(fnd_file.log,substr(SQLERRM,1,250));
END pr_print_debug;

Script/Procedure to submit Invoice Approval Workflow program - FND_REQUEST.SUBMIT_REQUEST

PROCEDURE pr_approve_invoice(errbuf    OUT VARCHAR2,
                          retcode      OUT VARCHAR2,
                          p_invoice_id IN NUMBER,
                          p_request_id OUT NUMBER) IS
  CURSOR app_inv_cur IS
    SELECT DISTINCT aia.invoice_num inv_number, aia.org_id
      FROM ap_invoices_all aia
     WHERE 1 = 1
       AND aia.invoice_id = p_invoice_id
       AND aia.wfapproval_status = 'REQUIRED';

  --'VLAIDATED');
  l_sub_request_id NUMBER := NULL;
  l_resp_id        NUMBER; --PAYABLES Manager
  l_app_id NUMBER; --Account payables
  v_request_completed BOOLEAN;
  v_request_id     NUMBER;
  v_phase          VARCHAR2(80) := NULL;
  v_status         VARCHAR2(80) := NULL;
  v_dev_phase      VARCHAR2(30) := NULL;
  v_dev_status     VARCHAR2(30) := NULL;
  v_message        VARCHAR2(240);
  l_ou_name VARCHAR2(200);
  l_org_id NUMBER := 101;
  l_ou_count NUMBER;
 
BEGIN
 
  FOR app_inv_rec IN app_inv_cur LOOP
   
    BEGIN
     
      SELECT DISTINCT fr.responsibility_id, frx.application_id
        INTO l_resp_id, l_app_id
        FROM apps.fnd_responsibility frx, apps.fnd_responsibility_tl fr
       WHERE fr.responsibility_id = frx.responsibility_id
         AND UPPER(fr.responsibility_name) = UPPER('Payables Manager');
   
      -- fnd_client_info.set_org_context (85);
      IF gn_user_id IS NOT NULL AND l_resp_id IS NOT NULL AND l_app_id IS NOT NULL THEN
       
         pr_print_debug('Initializing AP responsibility and application',1);
       
          --mo_global.init ('AP');
          mo_global.set_policy_context ('S', 101);
         
                 
         apps.fnd_global.apps_initialize(gn_user_id, l_resp_id, l_app_id);
       
         pr_print_debug('Submitting Invoice Approval Workflow.. ',1);
       
         fnd_request.set_org_id('101');                
       
         l_sub_request_id :=
         apps.fnd_request.submit_request('SQLAP',
                                                            'APXIAWRE',
                                                            'Invoice Approval Workflow',
                                                            NULL,
                                                            FALSE,
                                                            NULL,
                                                            app_inv_rec.inv_number,
                                                            NULL,
                                                            NULL);
        COMMIT;
     
        LOOP
          v_request_completed := apps.fnd_concurrent.wait_for_request(l_sub_request_id -- Request ID
                                                                     ,
                                                                      20
                                                                      -- Time Interval
                                                                     ,
                                                                      0
                                                                      -- Total Time to wait
                                                                     ,
                                                                      v_phase
                                                                      -- Phase displyed on screen
                                                                     ,
                                                                      v_status -- Status displayed on screen
                                                                     ,
                                                                      v_dev_phase
                                                                      -- Phase available for developer
                                                                     ,
                                                                      v_dev_status -- Status available for developer
                                                                     ,
                                                                      v_message
                                                                      -- Execution Message
                                                                      );
          EXIT WHEN v_request_completed;
        END LOOP;
      END IF;
   
      pr_print_debug('Invoice Approval Workflow completed with request id = ' ||
                           l_sub_request_id,1);
                         
      p_request_id := l_sub_request_id;                          
   
    EXCEPTION
      WHEN OTHERS THEN
        pr_print_debug('Error in submiting Invoice Approval Workflow Program: ' ||
                             SQLERRM,1);
        errbuf := 'Error in submiting Invoice Approval Workflow Program: '||SQLERRM;
        retcode := 2;
    END;
  END LOOP;
END pr_approve_invoice;