Search This Blog

Sunday, December 10, 2017

Calling website or sending sms with parameters from oracle database 11g using pl/sql

DECLARE
  req   UTL_HTTP.REQ;
  resp  UTL_HTTP.RESP;
  value VARCHAR2(1024);  -- URL to post to
  v_url VARCHAR2(200) := 'http://yoursmsgateway.com/sendurlcomma.aspx?';
  -- Post Parameters
  v_param VARCHAR2(500);
  v_param_length NUMBER ;
CURSOR C1 IS

SELECT '97155xxxxx' Mobile,'Hello Ammar test from plsql' Text from dual
union all
SELECT '97155xxxxxx' Mobile,'Hello Afzal from plsql' Text from dual


BEGIN
FOR I IN C1 LOOP
  -- Set up proxy servers if required
  --  UTL_HTTP.SET_PROXY('proxy.my-company.com', 'corp.my-company.com');
   v_param :=  'user=12345'||'&'||'pwd=12345'||'&'||'senderid=SMSAlert'||'&'||'mobileno='||I.MOBILE||',mobileno'||'&'||'msgtext='||I.TEXT||'&'||'priority=High'||'&'||'CountryCode=ALL';
   v_param_length :=  length(v_param);
  req := UTL_HTTP.BEGIN_REQUEST (url=> v_url, method => 'POST');
  --  UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
  UTL_HTTP.SET_HEADER (r      =>  req,
                       name   =>  'Content-Type',
                       value  =>  'application/x-www-form-urlencoded');
  UTL_HTTP.SET_HEADER (r      =>   req,
                       name   =>   'Content-Length',
                       value  =>   v_param_length);
  UTL_HTTP.WRITE_TEXT (r      =>   req,
                       data   =>   v_param); 
  resp := UTL_HTTP.GET_RESPONSE(req);
 
  dbms_output.put_line(i.mobile);
 
  --LOOP
    UTL_HTTP.READ_LINE(resp, value, TRUE);
    DBMS_OUTPUT.PUT_LINE(value);
  --END LOOP;
 
 
  UTL_HTTP.END_RESPONSE(resp);
  END LOOP; 
EXCEPTION
  WHEN UTL_HTTP.END_OF_BODY THEN
    UTL_HTTP.END_RESPONSE(resp);
END;
/

Wednesday, October 18, 2017

Profiles in Oracle Apps R12

1. Useful Profiles
2. To Initialize Apps In toad:
3. To Initialize Apps in Oracle Report:
4. Secured Tables
5. To initialize in toad based on User_name, resp_name then
6. Arabic/English in toad/pl/sql (setting nls_lang)
7. How to View 'Diagnostics>Personalization' in Apps R12 forms
7.2. 'About this Page' in R12 OAF Pages.
7.3. How to Clear Cache in Apps R12??
https://docs.oracle.com/cd/E18727_01/doc.121/e12897/T302934T457084.htm
http://appsr12help.blogspot.ae/2012/12/fndprofile-values.html



1.

select FND_PROFILE.VALUE('USER_ID') from dual
select FND_PROFILE.VALUE('RESP_ID') from dual
select FND_PROFILE.VALUE('RESP_APPL_ID') from dual
FND_PROFILE.value('PER_BUSINESS_GROUP_ID')
FND_PROFILE.value('PER_SECURITY_PROFILE_ID')

2.
To Initialize Apps In toad:
fnd_global.apps_initialize
  --(l_user_id,l_responsibility_id,l_resp_appl_id);
  (FND_PROFILE.VALUE('USER_ID'),
  FND_PROFILE.VALUE('RESP_ID'),
  FND_PROFILE.VALUE('RESP_APPL_ID'));
  mo_global.init ('S');

3.
To Initialize Apps in Oracle Report:
1. Before report trigger
    srw.USER_EXIT ('FND SRWINIT');
  fnd_global.apps_initialize
  --(l_user_id,l_responsibility_id,l_resp_appl_id);
  (FND_PROFILE.VALUE('USER_ID'),
  FND_PROFILE.VALUE('RESP_ID'),
  FND_PROFILE.VALUE('RESP_APPL_ID'));
  mo_global.init ('S');

2. After Report Trigger
SRW.USER_EXIT('FND SRWEXIT');

3. Add user parameter
P_CONC_REQUEST_ID  datatype - Number, Width - 200

4.
4. Check the query tables are secured or not (it should contain without _all_)
eg: per_people_f, per_assigments_f, pay_payrolls_f, hr_organization_units.


SELECT FND_PROFILE.value('PER_BUSINESS_GROUP_ID') BUSINESS_GROUP_ID,FND_PROFILE.value('PER_SECURITY_PROFILE_ID') PER_SEC_PROF_ID INTO
&P_BUSINESS_GROUP_ID, &P_PER_SEC_PROF_ID
FROM PER_ANALYSIS_CRITERIA C
WHERE C.ID_FLEX_NUM = 50317


5.
To initialize in toad based on User_name, resp_name then

DECLARE
  CURSOR c_details(p_user IN VARCHAR2, p_resp_name IN VARCHAR2) IS
    SELECT user_id,responsibility_id,responsibility_application_id, security_group_id
      FROM fnd_user_resp_groups
     WHERE user_id = (SELECT user_id FROM fnd_user WHERE user_name = p_user)
       AND responsibility_id in (SELECT responsibility_id FROM fnd_responsibility_tl WHERE responsibility_name = p_resp_name)
         ;
  CURSOR c_application(p_application_id IN NUMBER) IS
    SELECT application_short_name
      FROM fnd_application
     WHERE application_id = p_application_id
         ;
  l_user_id                NUMBER;
  l_responsibility_id      NUMBER;
  l_resp_appl_id           NUMBER;
  l_security_group_id      NUMBER;
  v_user_name              VARCHAR2(30);
  v_responsibility_name    VARCHAR(100);
  v_application_short_name VARCHAR2(10);
BEGIN
  v_user_name := :USER;
  v_responsibility_name := :RESPONSIBILITY_NAME;
  /**/
  OPEN c_details(v_user_name, v_responsibility_name);
  fetch c_details INTO l_user_id, l_responsibility_id, l_resp_appl_id, l_security_group_id;
  CLOSE c_details;
  /**/
  OPEN c_application(l_resp_appl_id);
  fetch c_application INTO v_application_short_name;
  close c_application;
  /**/
  fnd_global.apps_initialize(l_user_id,l_responsibility_id,l_resp_appl_id);
  mo_global.init ('S');
END;

6.
Arabic/English in toad/pl/sql develolper
alter session set NLS_LANGUAGE ='AMERICAN'--'ARABIC'
COMMIT
SELECT * from FUJ_MON_YEAR_V2
select userenv('lang') from dual


7. DO IT USER LEVEL:

7.1.System administrator Resp>profile
Query for : Utilities:%Diagnostics 
Change Value : Yes

7.1
System administrator Resp>profile
Query for : Personalize Self-Service Defn
Change Value : Yes

7.2
System administrator Resp>profile
Query for :FND: Personalization Region Link Enabled
Change Value : Yes

7.3.
Clearing Cache in Apps R12:
RESP>FUNCTIONAL ADMINISTRATOR
CORE SERVICES>CACHING FRAMEWORK>
GLOBAL CONFIGURATION>
CLICK , CLEAR ALL STATISTICS (YES)
CLICK , CLEAR ALL CACHE (YES)

Tuesday, October 17, 2017

SSHR Query for Pending/Approved txns in Apps R12

In SSHR eit/sit or leave is submitted then
entry will be in hr_api_transactions which have the status as 'Y'
and entry will be in PQH_SS_TRANSACTION_HISTORY for future history purposes with no status column.
 


--Approved transaction details

select count(selected_person_id)approved_txns,process_name,organization_id,organization_name, payroll_name
from(
select
--process_name
(select name from
PER_ABS_ATTENDANCE_TYPES_TL abs
where ABSENCE_ATTENDANCE_TYPE_ID = information5
and language = userenv('LANG')) process_name
,hrat.transaction_history_id, NVL (information1, information3) date_start, hrat.item_key,
NVL (information2, information4) date_end, information5 leave_type,
information8 DURATION, selected_person_id,
paaf.organization_id,
(select name from hr_all_organization_units haou
where haou.organization_id = paaf.organization_id)organization_name,
(select payroll_name from
pay_all_payrolls_f paf
where paf.payroll_id  = paaf.payroll_id
and trunc(sysdate) between paf.effective_start_date and paf.effective_end_date)Payroll_name
from
PQH_SS_TRANSACTION_HISTORY HraT,
PQH_SS_STEP_HISTORY hrst,
per_all_assignments_f paaf
            where selected_person_id = paaf.person_id
            and trunc(hrat.creation_date) between paaf.effective_start_date and paaf.effective_end_date
            and primary_flag = 'Y'
            and (paaf.payroll_id = :p_payroll_id OR (:p_payroll_id is null and paaf.payroll_id in (61,62,63,64,81)))
            and paaf.organization_id = nvl(:p_organization_id, paaf.organization_id)
            AND HraT.TRANSACTION_HISTORY_ID = HrST.TRANSACTION_HISTORY_ID
            AND PROCESS_NAME = 'HR_GENERIC_APPROVAL_PRC' --including only leaves
            AND TRUNC(hrat.CREATION_DATE) between :P_START_DATE AND :P_END_DATE
            AND hrat.TRANSACTION_HISTORY_ID NOT IN (
            SELECT TRANSACTION_ID FROM HR_API_TRANSACTIONS
            WHERE STATUS = 'Y')
)
group by process_name, organization_name, organization_id, payroll_name

--Pending transactions
select count(selected_person_id)pending_txns,process_name,organization_name, organization_id,Payroll_name
from(
SELECT distinct selected_person_id,paaf.organization_id
,(select name from
PER_ABS_ATTENDANCE_TYPES_TL abs
where ABSENCE_ATTENDANCE_TYPE_ID = information5
and language = userenv('LANG')) process_name
, hrat.transaction_id,hrat.item_key,
(select name from hr_all_organization_units haou
             where haou.organization_id = paaf.organization_id)organization_name,
(select payroll_name from
pay_all_payrolls_f paf
where paf.payroll_id  = paaf.payroll_id
and trunc(sysdate) between paf.effective_start_date and paf.effective_end_date)Payroll_name
FROM
HR_API_TRANSACTION_STEPS hrst,
HR_API_TRANSACTIONS hrat,
per_all_assignments_f paaf
            where selected_person_id = paaf.person_id
            and trunc(hrat.creation_date) between paaf.effective_start_date and paaf.effective_end_date
            and primary_flag = 'Y'
--            and (paaf.payroll_id = nvl(:p_payroll_id, paaf.payroll_id) OR (:p_payroll_id is null and paaf.payroll_id in (61,62,63,64,81)))
            and (paaf.payroll_id = :p_payroll_id OR (:p_payroll_id is null and paaf.payroll_id in (61,62,63,64,81)))
            and paaf.organization_id = nvl(:p_organization_id, paaf.organization_id)
            AND hrst.TRANSACTION_ID = hrat.TRANSACTION_ID
            AND hrat.STATUS = 'Y'
            AND PROCESS_NAME = 'HR_GENERIC_APPROVAL_PRC' --including only leaves
            AND TRUNC(hrat.CREATION_DATE) BETWEEN :P_START_DATE AND :P_END_DATE
            )
group by process_name, organization_name, organization_id, Payroll_name

Tuesday, October 10, 2017

Message in Master-detail form or Master Form asking to Save, even while Query the record in Apps R12 Forms 10g

This happens mainly due to post-query Trigger,
Add below line at the bottom of your post-query trigger, it will solve.

--the below will avoid showing message to save even while u query a existing record.
set_record_property(:system.trigger_record,:system.trigger_block,status,query_status);

Sunday, October 8, 2017

API to upload data into FND_LOOKUP_VALUES in R12

DECLARE
   V_ERROR  VARCHAR2(4000);
   CURSOR get_lookup_details
   IS
  
      SELECT ltype.application_id,
             ltype.customization_level,
             ltype.creation_date,
             ltype.created_by,
             ltype.last_update_date,
             ltype.last_updated_by,
             ltype.last_update_login,
             tl.lookup_type,
             tl.security_group_id,
             tl.view_application_id,
             tl.description,
             tl.meaning
        FROM fnd_lookup_types_tl tl, fnd_lookup_types ltype
       WHERE     ltype.lookup_type = 'FUJ_ARRIVAL_AIRPORT'
             AND ltype.lookup_type = tl.lookup_type
             AND language = 'US';

   CURSOR get_country
   IS
  
      SELECT distinct LOOKUP_CODE,MEANING , DESCRIPTION
      FROM XX_LOOKUP_VALUES
      --WHERE LOOKUP_CODE = '1'
     -- WHERE upload_status <> 'DONE'
      ;
     
   l_rowid   VARCHAR2 (100) := 0;
BEGIN
   FOR i IN get_lookup_details
   LOOP
      FOR j IN get_country
      LOOP
         l_rowid := NULL;
         BEGIN
            fnd_lookup_values_pkg.insert_row (
               x_rowid                 => l_rowid,
               x_lookup_type           => i.lookup_type,
               x_security_group_id     => i.security_group_id,
               x_view_application_id   => i.view_application_id,
               x_lookup_code           => j.LOOKUP_CODE,
               x_tag                   => '',
               x_attribute_category    => NULL,
               x_attribute1            => NULL,
               x_attribute2            => NULL,
               x_attribute3            => NULL,
               x_attribute4            => NULL,
               x_enabled_flag          => 'Y',
               x_start_date_active     =>NULL,
               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               => j.MEANING,
               x_description           => j.DESCRIPTION,
               x_creation_date         => SYSDATE,
               x_created_by            => i.created_by,
               x_last_update_date      => i.last_update_date,
               x_last_updated_by       => i.last_updated_by,
               x_last_update_login     => i.last_update_login);

            COMMIT;

           update XX_LOOKUP_VALUES set upload_status= 'DONE' WHERE LOOKUP_CODE=J.LOOKUP_CODE;
         EXCEPTION
            WHEN OTHERS
            THEN
             V_ERROR := (SQLERRM);
                 update XX_LOOKUP_VALUES set upload_status= 'Inner Exception: ' || V_ERROR WHERE LOOKUP_CODE=J.LOOKUP_CODE;
         END;
      END LOOP;
   END LOOP;
--EXCEPTION
--   WHEN OTHERS
--   THEN
--      update XX_COUNTRY set upload_status='Main Exception: ' || V_ERROR  WHERE LOOKUP_CODE=J.LOOKUP_CODE;
END;


SELECT count(*) FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE = 'FUJ_ARRIVAL_AIRPORT'
AND LANGUAGE = 'US'


-------------------------------custom table create------------------------------

--drop table XX_LOOKUP_VALUES

CREATE TABLE XX_LOOKUP_VALUES
(
  LOOKUP_CODE    VARCHAR2(50 BYTE),
  MEANING        VARCHAR2(200 BYTE),
  DESCRIPTION    VARCHAR2(200 BYTE),
  UPLOAD_STATUS  VARCHAR2(2000 BYTE)
)

Tuesday, August 22, 2017

Scheduling in linux to run the script every 2 minutes and 8 hours

step1:
creating new shell file script , and all commands to run in it

cat copy.sh

step2: editing the shell file to run the commands and  add #!/bin/sh in first line

vi copy.sh

#!/bin/sh
cp  <file from location to other location>
:wq!

step3 scheduling every 2 min and every 8 hours:

crowntab -e


*/2 * * * * <path of file to run eg: /tmp/copy.sh>
* */8 * * * <path of file to run eg: /tmp/copy.sh>

:wq!

Thursday, August 10, 2017

Userhook for EIT in oracle apps R12


1. to Search userhook for EIT.

SELECT ahk.api_hook_id,
ahk.api_module_id,
ahk.hook_package,
ahk.hook_procedure
FROM hr_api_hooks ahk, hr_api_modules ahm
WHERE ahm.module_name like '%CREATE_PERSON_EXTRA%'
AND ahm.api_module_type = 'BP'
AND ahk.api_hook_type = 'AP'
AND ahk.api_module_id = ahm.api_module_id

2759 API_HOOK_ID
1226 API_MODULE_ID

2. run the below script to add userhook.

DECLARE

L_API_HOOK_ID NUMBER := 2759 ;
L_API_HOOK_CALL_ID NUMBER;
L_OBJECT_VERSION_NUMBER NUMBER;
L_SEQUENCE NUMBER;

BEGIN

SELECT HR_API_HOOKS_S.NEXTVAL
INTO L_SEQUENCE
FROM DUAL;

HR_API_HOOK_CALL_API.CREATE_API_HOOK_CALL

(P_VALIDATE => FALSE,
P_EFFECTIVE_DATE => TO_DATE('01-JAN-1952','DD-MON-YYYY'),
P_API_HOOK_ID =>L_API_HOOK_ID,
P_API_HOOK_CALL_TYPE => 'PP',
P_SEQUENCE => L_SEQUENCE,
P_ENABLED_FLAG => 'Y',
                           p_call_package               => 'XXFUJ_SS_USERHOOK',  --package script below
                           p_call_procedure             => 'XXCREATE_PERSON_EXTRA_INFO_B', --poackage proecudre
P_API_HOOK_CALL_ID => L_API_HOOK_CALL_ID,
P_OBJECT_VERSION_NUMBER => L_OBJECT_VERSION_NUMBER);
DBMS_OUTPUT.PUT_LINE('L_API_HOOK_CALL_ID '|| L_API_HOOK_CALL_ID);

END ;

3.COMMIT

4.  check status with below query

SELECT *
FROM HR_API_HOOK_CALLS
WHERE api_hook_id = 2759;

STATUS = 'N'



5. run the pre-processor or below script to complete.

declare
l_api_module_id number := 1226; --Value 1731 is derived from Step 1 above using following query
begin
hr_api_user_hooks_utility.create_hooks_one_module (l_api_module_id);
dbms_output.put_line('Success');
exception when others then
dbms_output.put_line('Exception : '||SQLERRM);
end;


6. COMMIT

7. recheck the status should be 'V'

8.
to delete eit userhook:

begin
hr_api_hook_call_api.delete_api_hook_call
  (p_validate                           => FALSE,
   p_api_hook_call_id                   => 1249,
   p_object_version_number              => 2
  );
--
end;


script for package and procedure..................


CREATE OR REPLACE package APPS.XXFUJ_SS_USERHOOK is

  -- Author  : Ammar Galant
  -- Created : 8/8/2017
  -- Purpose : Self Service Userhooks

  procedure XXCREATE_PERSON_EXTRA_INFO_B(P_PERSON_ID                in NUMBER,
                                          P_INFORMATION_TYPE         in VARCHAR2,
                                          P_PEI_ATTRIBUTE_CATEGORY   in VARCHAR2,
                                          P_PEI_ATTRIBUTE1           in VARCHAR2,
                                          P_PEI_ATTRIBUTE2           in VARCHAR2,
                                          P_PEI_ATTRIBUTE3           in VARCHAR2,
                                          P_PEI_ATTRIBUTE4           in VARCHAR2,
                                          P_PEI_ATTRIBUTE5           in VARCHAR2,
                                          P_PEI_ATTRIBUTE6           in VARCHAR2,
                                          P_PEI_ATTRIBUTE7           in VARCHAR2,
                                          P_PEI_ATTRIBUTE8           in VARCHAR2,
                                          P_PEI_ATTRIBUTE9           in VARCHAR2,
                                          P_PEI_ATTRIBUTE10          in VARCHAR2,
                                          P_PEI_ATTRIBUTE11          in VARCHAR2,
                                          P_PEI_ATTRIBUTE12          in VARCHAR2,
                                          P_PEI_ATTRIBUTE13          in VARCHAR2,
                                          P_PEI_ATTRIBUTE14          in VARCHAR2,
                                          P_PEI_ATTRIBUTE15          in VARCHAR2,
                                          P_PEI_ATTRIBUTE16          in VARCHAR2,
                                          P_PEI_ATTRIBUTE17          in VARCHAR2,
                                          P_PEI_ATTRIBUTE18          in VARCHAR2,
                                          P_PEI_ATTRIBUTE19          in VARCHAR2,
                                          P_PEI_ATTRIBUTE20          in VARCHAR2,
                                          P_PEI_INFORMATION_CATEGORY in VARCHAR2,
                                          P_PEI_INFORMATION1         in VARCHAR2,
                                          P_PEI_INFORMATION2         in VARCHAR2,
                                          P_PEI_INFORMATION3         in VARCHAR2,
                                          P_PEI_INFORMATION4         in VARCHAR2,
                                          P_PEI_INFORMATION5         in VARCHAR2,
                                          P_PEI_INFORMATION6         in VARCHAR2,
                                          P_PEI_INFORMATION7         in VARCHAR2,
                                          P_PEI_INFORMATION8         in VARCHAR2,
                                          P_PEI_INFORMATION9         in VARCHAR2,
                                          P_PEI_INFORMATION10        in VARCHAR2,
                                          P_PEI_INFORMATION11        in VARCHAR2,
                                          P_PEI_INFORMATION12        in VARCHAR2,
                                          P_PEI_INFORMATION13        in VARCHAR2,
                                          P_PEI_INFORMATION14        in VARCHAR2,
                                          P_PEI_INFORMATION15        in VARCHAR2,
                                          P_PEI_INFORMATION16        in VARCHAR2,
                                          P_PEI_INFORMATION17        in VARCHAR2,
                                          P_PEI_INFORMATION18        in VARCHAR2,
                                          P_PEI_INFORMATION19        in VARCHAR2,
                                          P_PEI_INFORMATION20        in VARCHAR2,
                                          P_PEI_INFORMATION21        in VARCHAR2,
                                          P_PEI_INFORMATION22        in VARCHAR2,
                                          P_PEI_INFORMATION23        in VARCHAR2,
                                          P_PEI_INFORMATION24        in VARCHAR2,
                                          P_PEI_INFORMATION25        in VARCHAR2,
                                          P_PEI_INFORMATION26        in VARCHAR2,
                                          P_PEI_INFORMATION27        in VARCHAR2,
                                          P_PEI_INFORMATION28        in VARCHAR2,
                                          P_PEI_INFORMATION29        in VARCHAR2,
                                          P_PEI_INFORMATION30        in VARCHAR2);

end XXFUJ_SS_USERHOOK;



/************************************************* Package Body **********************************************************/


CREATE OR REPLACE PACKAGE BODY APPS.XXFUJ_SS_USERHOOK
IS
   PROCEDURE XXCREATE_PERSON_EXTRA_INFO_B (
      P_PERSON_ID                  IN NUMBER,
      P_INFORMATION_TYPE           IN VARCHAR2,
      P_PEI_ATTRIBUTE_CATEGORY     IN VARCHAR2,
      P_PEI_ATTRIBUTE1             IN VARCHAR2,
      P_PEI_ATTRIBUTE2             IN VARCHAR2,
      P_PEI_ATTRIBUTE3             IN VARCHAR2,
      P_PEI_ATTRIBUTE4             IN VARCHAR2,
      P_PEI_ATTRIBUTE5             IN VARCHAR2,
      P_PEI_ATTRIBUTE6             IN VARCHAR2,
      P_PEI_ATTRIBUTE7             IN VARCHAR2,
      P_PEI_ATTRIBUTE8             IN VARCHAR2,
      P_PEI_ATTRIBUTE9             IN VARCHAR2,
      P_PEI_ATTRIBUTE10            IN VARCHAR2,
      P_PEI_ATTRIBUTE11            IN VARCHAR2,
      P_PEI_ATTRIBUTE12            IN VARCHAR2,
      P_PEI_ATTRIBUTE13            IN VARCHAR2,
      P_PEI_ATTRIBUTE14            IN VARCHAR2,
      P_PEI_ATTRIBUTE15            IN VARCHAR2,
      P_PEI_ATTRIBUTE16            IN VARCHAR2,
      P_PEI_ATTRIBUTE17            IN VARCHAR2,
      P_PEI_ATTRIBUTE18            IN VARCHAR2,
      P_PEI_ATTRIBUTE19            IN VARCHAR2,
      P_PEI_ATTRIBUTE20            IN VARCHAR2,
      P_PEI_INFORMATION_CATEGORY   IN VARCHAR2,
      P_PEI_INFORMATION1           IN VARCHAR2,
      P_PEI_INFORMATION2           IN VARCHAR2,
      P_PEI_INFORMATION3           IN VARCHAR2,
      P_PEI_INFORMATION4           IN VARCHAR2,
      P_PEI_INFORMATION5           IN VARCHAR2,
      P_PEI_INFORMATION6           IN VARCHAR2,
      P_PEI_INFORMATION7           IN VARCHAR2,
      P_PEI_INFORMATION8           IN VARCHAR2,
      P_PEI_INFORMATION9           IN VARCHAR2,
      P_PEI_INFORMATION10          IN VARCHAR2,
      P_PEI_INFORMATION11          IN VARCHAR2,
      P_PEI_INFORMATION12          IN VARCHAR2,
      P_PEI_INFORMATION13          IN VARCHAR2,
      P_PEI_INFORMATION14          IN VARCHAR2,
      P_PEI_INFORMATION15          IN VARCHAR2,
      P_PEI_INFORMATION16          IN VARCHAR2,
      P_PEI_INFORMATION17          IN VARCHAR2,
      P_PEI_INFORMATION18          IN VARCHAR2,
      P_PEI_INFORMATION19          IN VARCHAR2,
      P_PEI_INFORMATION20          IN VARCHAR2,
      P_PEI_INFORMATION21          IN VARCHAR2,
      P_PEI_INFORMATION22          IN VARCHAR2,
      P_PEI_INFORMATION23          IN VARCHAR2,
      P_PEI_INFORMATION24          IN VARCHAR2,
      P_PEI_INFORMATION25          IN VARCHAR2,
      P_PEI_INFORMATION26          IN VARCHAR2,
      P_PEI_INFORMATION27          IN VARCHAR2,
      P_PEI_INFORMATION28          IN VARCHAR2,
      P_PEI_INFORMATION29          IN VARCHAR2,
      P_PEI_INFORMATION30          IN VARCHAR2)
   IS  
   
      LN_LEAVE_START DATE;     
        
   BEGIN
  
      IF P_INFORMATION_TYPE = 'FUJ_UPDATE_DELETE_LEAVE' THEN
        
         select date_start
          INTO LN_LEAVE_START
          from per_absence_attendances
          where ABSENCE_ATTENDANCE_ID = to_number(P_PEI_INFORMATION2);
      
         IF TRUNC(sysdate) >= LN_LEAVE_START AND TRUNC(SYSDATE) >= TO_DATE('11-AUG-2017')
         THEN
            hr_utility.set_message (800, 'FUJ_DELETE_LEAVE_VALID');
            hr_utility.raise_error;
         END IF;
      
       END IF;
  
   DBMS_OUTPUT.PUT_LINE('hi');
    
     END XXCREATE_PERSON_EXTRA_INFO_B;
END XXFUJ_SS_USERHOOK;
/

Wednesday, August 9, 2017

hr_contingent_worker_api.terminate_placement for contingent workder Oracle Apps R12

declare
   --
   --Common Variables
   l_terminate_cwk_flag          varchar2(1) := 'N';
   l_terminate_msg               varchar2(600);
   l_person_id                   number ;
   l_le_terminate_cwk_exception  exception;

   --- DECLARE variables for hr_contingent_worker_api.actual_termination_placement
   --- IN variables
   l_effective_date              date  ; --trunc(sysdate)-1
   l_termination_reason          varchar2(200) := 'NR';
   l_person_type_id             varchar2(200)  := 1140; --Ex-contingent Worker from PER_PERSON_TYPES_V
   l_period_of_service_id        varchar2(200) ;
   l_actual_termination_date     date ;--:=trunc(sysdate);
   l_last_standard_process_date  varchar2(200)  ;
   l_object_version_number       per_all_people_f.object_version_number%type;
   l_start_date                  date;--per_periods_of_placement.date_start%type;
   l_notif_term_date             date;


   --- OUT variables
   l_supervisor_warning         boolean := false;
   l_event_warning              boolean := false;
   l_interview_warning          boolean := false;
   l_review_warning             boolean := false;
   l_recruiter_warning          boolean := false;
   l_asg_future_changes_warning boolean := false;
   l_entries_changed_warning    varchar2(300);
   l_pay_proposal_warning       boolean := false;
   l_dod_warning                boolean := false;
   L_NO_MANAGER_WARNING boolean := false;
    L_ADDL_RIGHTS_WARNING boolean := false;
  

   --- DECLARE variables for hr_contingent_worker_api.final_process_placement
   --- IN variables
   l_final_process_date             date;

   --- OUT variables
   l_org_now_no_manager_warning     boolean := false;
   --
begin
   --
   begin
  
      select pos.period_of_placement_id, pos.object_version_number, date_start,papf.person_id, papf.effective_start_date,papf.effective_start_date
        into l_period_of_service_id, l_object_version_number, l_start_date,l_person_id, l_actual_termination_date,l_effective_date
        from per_periods_of_placement pos
        ,per_all_people_f papf
       where pos.person_id = papf.person_id
       and to_number(npw_number) = '9';
    

    
   exception                                                       
      when others then
         l_terminate_msg  := 'Error while selecting cwk details : '||substr(sqlerrm,1,150);
         raise l_le_terminate_cwk_exception;
   end;
   --
   savepoint terminate_cwk_s1; 
   --
   begin
      /*
      This API covers the first step in terminating a period of placement and
      all current assignments for a cwk, identified by person_id and date_start.   
      You can use the API to set the actual termination date, the last standard
      process date, the new assignment status and the new person type
      */
     
      HR_CONTINGENT_WORKER_API.TERMINATE_PLACEMENT(
P_VALIDATE => FALSE
,P_EFFECTIVE_DATE => l_effective_date  
,P_PERSON_ID => l_person_id
,P_DATE_START => l_start_date
,P_OBJECT_VERSION_NUMBER => l_object_version_number
,P_ACTUAL_TERMINATION_DATE =>l_actual_termination_date
,P_FINAL_PROCESS_DATE =>l_actual_termination_date --— final process date is 3 months after the actual termination date
,p_last_standard_process_date =>l_actual_termination_date
 ,p_termination_reason => l_termination_reason
,P_SUPERVISOR_WARNING => L_SUPERVISOR_WARNING
,P_EVENT_WARNING => L_EVENT_WARNING
,P_INTERVIEW_WARNING => L_INTERVIEW_WARNING
,P_REVIEW_WARNING => L_REVIEW_WARNING
,P_RECRUITER_WARNING => L_RECRUITER_WARNING
,P_ASG_FUTURE_CHANGES_WARNING => l_asg_future_changes_warning
,P_ENTRIES_CHANGED_WARNING => L_ENTRIES_CHANGED_WARNING
,P_PAY_PROPOSAL_WARNING => L_PAY_PROPOSAL_WARNING
,P_DOD_WARNING => L_DOD_WARNING
,P_ORG_NOW_NO_MANAGER_WARNING => L_NO_MANAGER_WARNING
,P_ADDL_RIGHTS_WARNING => L_ADDL_RIGHTS_WARNING
);
       /*hr_contingent_worker_api.terminate_placement
                      (p_validate                      => false               
                      ,p_effective_date                => l_effective_date -1       
                      ,p_person_id                     => l_person_id         
                      ,p_date_start                    => l_start_date
                      ,p_person_type_id                => l_person_type_id       
                      ,p_actual_termination_date       => l_actual_termination_date
                      ,p_termination_reason            => l_termination_reason
                      --In/Out
                      ,p_object_version_number         => l_object_version_number                     
                      ,p_last_standard_process_date    => l_actual_termination_date --l_last_standard_process_date
                      --Out
                      ,p_supervisor_warning               => l_supervisor_warning 
                      ,p_event_warning                    => l_event_warning   
                      ,p_interview_warning                => l_interview_warning 
                      ,p_review_warning                   => l_review_warning   
                      ,p_recruiter_warning                => l_recruiter_warning     
                      ,p_asg_future_changes_warning       => l_asg_future_changes_warning
                      ,p_entries_changed_warning          => l_entries_changed_warning 
                      ,p_pay_proposal_warning             => l_pay_proposal_warning   
                      ,p_dod_warning                      => l_dod_warning           
                      );
*/
         if l_object_version_number is null then
            l_terminate_cwk_flag := 'N';
            l_terminate_msg      := 'Warning validating API: hr_contingent_worker_api.actual_termination_placement';
            raise l_le_terminate_cwk_exception;
         end if;

         l_terminate_cwk_flag := 'Y';
   exception
      when others then
         l_terminate_msg  := 'Error validating API: hr_contingent_worker_api.actual_termination_placement : '||substr(sqlerrm,1,150);
         raise l_le_terminate_cwk_exception;
   end; --hr_contingent_worker_api.actual_termination_placement

                            
   --
   commit;
   --
exception   
   when l_le_terminate_cwk_exception then
      dbms_output.put_line(l_terminate_msg);
      rollback to terminate_cwk_s1;
   when others then
      dbms_output.put_line('Terminate CWK. Error OTHERS while validating: '||sqlerrm);
      rollback to terminate_cwk_s1;
end;

Wednesday, July 26, 2017

Concurrent Program or Report as function in menu Oracle Apps R12

1. Register the report/concurrent program a normal.
Program Short name: XXFUJOTHRS
Application short name: XXCUST 
 
2. Once tested all like normal then do the below steps to run directly from the menu.


3. Creation Function>
Function: XXFUJDUMMY (Any)
User Function Name: XX Dummy Function Report (Any)

Type : Form
Form: Run Reports
Parameters: CONCURRENT_PROGRAM_NAME="XXFUJOTHRS" PROGRAM_APPL_SHORT_NAME="XXCUST"
program name, applicaiton short name copied from step1.

4. save and add this function to ur desired menu.
5. run the concurrent program directly from the menu. done.

Sunday, June 18, 2017

Oracle Apps R12 AP Invoice creation (Account Payables) from backend API, Validate, Approve


PROCEDURE FUJ_CRT_TICK_APINVOICE
(ERRBUF out varchar2, RETCODE  out varchar2
,P_PO_NUMBER VARCHAR2,P_GL_DATE VARCHAR2,P_PAYMENT_METHOD VARCHAR2
--,AMOUNT NUMBER
)
AS
L_VENDOR_ID  NUMBER;
L_VENDOR_SITE_ID NUMBER;
L_AMOUNT NUMBER;
v_request_id NUMBER;
l_boolean boolean;
l_phase varchar2(200);
l_status varchar2(200);
l_dev_phase varchar2(200);
l_dev_status varchar2(200);
l_message varchar2(200);
BEGIN

SELECT  VENDOR_ID, VENDOR_SITE_ID,POL.UNIT_PRICE
INTO L_VENDOR_ID , L_VENDOR_SITE_ID, L_AMOUNT
FROM PO_HEADERS_ALL POH,
PO_LINES_ALL POL
WHERE SEGMENT1 = P_PO_NUMBER --'3696'
AND POH.PO_HEADER_ID = POL.PO_HEADER_ID
;

insert into AP_INVOICES_INTERFACE (
            invoice_id,
            invoice_num,
            vendor_id,
            vendor_site_id,
            invoice_amount,
            INVOICE_CURRENCY_CODE,
            invoice_date,
            DESCRIPTION,
           --PAY_GROUP_LOOKUP_CODE,
            source,
            org_id
            ,po_NUMBER
            ,PAYMENT_METHOD_CODE
                )
values (
             ap_invoices_interface_s.NEXTVAL,
            'TICK-'||ap_invoices_interface_s.CURRVAL,--P_PO_NUMBER
            L_VENDOR_ID ,
            L_VENDOR_SITE_ID ,
            100,--L_AMOUNT,--
            'AED',
            fnd_conc_date.string_to_date(P_GL_DATE),
            'This Invoice is created for ticket',
           -- 'WUFS SUPPLIER',
            'MANUAL INVOICE ENTRY',
            102
            ,P_PO_NUMBER
            ,P_PAYMENT_METHOD
);

insert into AP_INVOICE_LINES_INTERFACE (
            invoice_id,
            invoice_line_id,
            line_number,
            line_type_lookup_code,
            amount,
            DIST_CODE_COMBINATION_ID
            )
values     (
             ap_invoices_interface_s.CURRVAL,
             AP_INVOICE_LINES_INTERFACE_S.NEXTVAL,
            1,
            'ITEM',
            100,
            3362334
);


COMMIT;

 begin
         mo_global.init ('SQLAP');
 MO_GLOBAL.set_policy_context('S',102);
fnd_global.apps_initialize (2605,50579,200,0,0);
 FND_REQUEST.SET_ORG_ID(102);
            v_request_id :=fnd_request.submit_request (APPLICATION        => 'SQLAP',
                                                   PROGRAM            => 'APXIIMPT',
                                                   DESCRIPTION        => '',
                                                   START_TIME         => NULL,
                                                   SUB_REQUEST        => FALSE,
                                                   ARGUMENT1          => 102,
                                                   ARGUMENT2          =>'MANUAL INVOICE ENTRY',
                                                   ARGUMENT3          =>null,
                                                   ARGUMENT4          =>NULL,
                                                   ARGUMENT5          =>NULL,
                                                   ARGUMENT6          =>NULL,
                                                   ARGUMENT7          =>NULL,
                                                   ARGUMENT8          =>'N',
                                                   ARGUMENT9          =>'Y'                                            
                                                   );
        Commit;

IF v_request_id > 0
         THEN
            l_boolean :=
               FND_CONCURRENT.WAIT_FOR_REQUEST (v_request_id --request_id IN number default NULL,
                                                ,20 --Interval   IN number default 60, SECONDS
                                                ,0 --max_wait   IN number default 0,
                                                ,l_phase --phase      OUT varchar2,
                                                ,l_status --status     OUT varchar2,
                                                ,l_dev_phase --dev_phase  OUT varchar2,
                                                ,l_dev_status --dev_status OUT varchar2,,
                                                ,l_message --message    OUT varchar2) return boolean
                                                         );  
end if;                                                             
      fnd_file.put_line(fnd_file.log,'Please see the output of Payables OPEN Invoice Import program request id :'|| v_request_id);
      dbms_output.put_line('success');
  EXCEPTION
  WHEN OTHERS THEN
   fnd_file.put_line(fnd_file.log,'Error :'||sqlerrm);
   dbms_output.put_line('Error :'||sqlerrm);
   end;
  
    fnd_file.put_line(fnd_file.log,'SUCCESS');
   EXCEPTION
  WHEN OTHERS THEN
   fnd_file.put_line(fnd_file.log,'Error :'||sqlerrm);
   dbms_output.put_line('Error :'||sqlerrm);
 
   END;
 
 
---------Validating the AP invoice from backend by submitting concurrent program.
 
declare
v_request_id number;
        begin
 mo_global.init ('SQLAP');
 MO_GLOBAL.set_policy_context('S',443);
fnd_global.apps_initialize (26015,524410,200,0,0);
 FND_REQUEST.SET_ORG_ID(443);
            v_request_id :=fnd_request.submit_request (APPLICATION        => 'SQLAP',
                                                   PROGRAM            => 'APPRVL',
                                                   DESCRIPTION        => '',
                                                   START_TIME         => NULL,
                                                   SUB_REQUEST        => FALSE,
                                                   ARGUMENT1          => 443,
                                                   ARGUMENT2          =>'All',
                                                   ARGUMENT3          =>null,
                                                   ARGUMENT4          =>TO_CHAR(SYSDATE,'YYYY-MM-DD'),
                                                   ARGUMENT5          =>TO_CHAR(SYSDATE,'YYYY-MM-DD'),
                                                   ARGUMENT6          =>NULL,
                                                   ARGUMENT7          =>NULL,
                                                   ARGUMENT8          =>NULL, --or pass invoice id here remove dates
                                                   ARGUMENT9          =>NULL ,
                                                   ARGUMENT10          =>'N',
                                                   ARGUMENT11          =>1000                                            
                                                   );
        Commit;
dbms_output.put_line(v_request_id);        
end;
 

--checking invoice ap approval status --
apps.ap_invoices_pkg.get_approval_status (p_invoice_id,
                                                   NULL,
                                                   NULL,
                                                   NULL
                                                  );
 
--To approve AP Invoice from backend 
 
create or replace procedure xxap_inv_auto_approval(p_invoice_id IN NUMBER)
IS
   v_hist_id                 NUMBER;
   v_user_id                 NUMBER;
   v_login_id                NUMBER;
   v_user_name               VARCHAR2 (150)                  := 'SYSTEM-USER';
   v_validation_status       VARCHAR2 (50);
   v_stop_approval_result    BOOLEAN;
   v_hist_rec                ap_inv_aprvl_hist_all%ROWTYPE;
   v_org_id                  ap_invoices_all.org_id%TYPE;
   v_invoice_amount          ap_invoices_all.invoice_amount%TYPE;
   v_validation_request_id   ap_invoices_all.validation_request_id%TYPE;
   v_wfapproval_status       ap_invoices_all.wfapproval_status%TYPE;
BEGIN
   BEGIN
      SELECT org_id, invoice_amount, wfapproval_status
        INTO v_org_id, v_invoice_amount, v_wfapproval_status
        FROM ap_invoices_all
       WHERE invoice_id = p_invoice_id;

      SELECT user_id
        INTO v_user_id
        FROM fnd_user
       WHERE user_name = v_user_name;
   EXCEPTION
      WHEN OTHERS
      THEN
         fnd_file.put_line (fnd_file.LOG,'Exception in first block-' || SQLERRM
                           );
         DBMS_OUTPUT.put_line ('Exception in first block-' || SQLERRM);
   END;

   BEGIN
      v_validation_status :=
         apps.ap_invoices_pkg.get_approval_status (p_invoice_id,
                                                   NULL,
                                                   NULL,
                                                   NULL
                                                  );
   EXCEPTION
      WHEN OTHERS
      THEN
         fnd_file.put_line
                        (fnd_file.LOG,
                            'Exception retrieving invoice validation status-'
                         || SQLERRM
                        );
         DBMS_OUTPUT.put_line
                         (   'Exception retrieving invoice validation status-'
                          || SQLERRM
                         );
   END;

   IF (UPPER (v_validation_status) <> 'APPROVED')
   THEN
      fnd_file.put_line (fnd_file.LOG, 'Invoice is not validated');
      DBMS_OUTPUT.put_line ('Invoice is not validated');
   ELSE
      /*set values for manual approval*/
      IF (v_wfapproval_status = 'INITIATED')
      THEN
         v_stop_approval_result :=
            ap_workflow_pkg.stop_approval
                               (p_invoice_id,
                                NULL,
                                'INV_SUM_ACTIONS_WFAPPROVE.do_force_approval'
                               );

         --Bug5527190
         IF v_stop_approval_result = TRUE
         THEN
            fnd_file.put_line
                             (fnd_file.LOG,
                              'Invoice approval workflow is forcibly stopped'
                             );
            DBMS_OUTPUT.put_line
                              ('Invoice approval workflow is forcibly stopped');
         END IF;
      END IF;

      UPDATE ap_invoices_all
         SET wfapproval_status = 'MANUALLY APPROVED'
       WHERE invoice_id = p_invoice_id;

      UPDATE ap_invoice_lines_all
         SET wfapproval_status = 'MANUALLY APPROVED'
       WHERE invoice_id = p_invoice_id;

      --insert into the history table
      v_hist_rec.history_type := 'DOCUMENTAPPROVAL';
      v_hist_rec.invoice_id := p_invoice_id;
      v_hist_rec.iteration := 0;
      v_hist_rec.org_id := v_org_id;
      v_hist_rec.approver_name := v_user_name;
      v_hist_rec.amount_approved := v_invoice_amount;
      v_hist_rec.created_by := v_user_id;
      v_hist_rec.last_updated_by := v_user_id;
      v_hist_rec.last_update_login := -1;
      v_hist_rec.creation_date := SYSDATE;
      v_hist_rec.last_update_date := SYSDATE;
      v_hist_rec.response := 'MANUALLY APPROVED';
      v_hist_rec.approver_comments := 'System Auto Approved';
      ap_workflow_pkg.insert_history_table (v_hist_rec);
      COMMIT;
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      fnd_file.put_line (fnd_file.LOG,
                         'Exception in auto approval main block-' || SQLERRM
                        );
      DBMS_OUTPUT.put_line ('Exception in auto approval main block-' || SQLERRM);
END xxap_inv_auto_approval;