Wednesday, July 29, 2015

Delete/End Date Element Entry - HRMS APIs

--
declare
--
   ld_effective_start_date      date;
   ld_effective_end_date       date;
   lb_delete_warning             boolean;
   ln_element_entry_id          number;
   ln_object_version_number number;
   ln_assin_id                          number;
   --  
   lc_element_name       pay_element_types_f.element_name%type := 'AK Element';
   lc_emp_num               per_all_people_f.employee_number := '123425';

begin
--
     select pee.element_entry_id
           ,pee.object_version_number
           ,paf.assignment_id
       into ln_element_entry_id
           ,ln_object_version_number
           ,ln_assin_id
       from per_all_people_f        per
           ,per_all_assignments_f   paf
           ,pay_element_entries_f   pee
           ,pay_element_types_f_tl  petl
           ,pay_element_types_f     pet
      where per.employee_number = lc_emp_num
        and trunc(sysdate) between per.effective_start_date and per.effective_end_date
        and paf.person_id       = per.person_id
        and trunc(sysdate) between paf.effective_start_date and paf.effective_end_date
        and pee.assignment_id   = paf.assignment_id
        and pee.element_type_id = pet.element_type_id
        and trunc(sysdate) between pee.effective_start_date and pee.effective_end_date
        and petl.element_name   = lc_element_name
        and petl.language       = 'US'
        and pet.element_type_id = petl.element_type_id;
       
   /* Date Track modes
    DELETE             >> end date element entry
    DELETE_NEXT_CHANGE >> delete next changes
    FUTURE_CHANGE      >> delete future changes
    ZAP                >> completely remove element entry from the database
   */      

    pay_element_entry_api.delete_element_entry
      (p_validate                     => false
      ,p_datetrack_delete_mode        => 'DELETE'
      ,p_effective_date               => trunc(sysdate)
      ,p_element_entry_id             => ln_element_entry_id
      ,p_object_version_number        => ln_object_version_number
      ,p_effective_start_date         => ld_effective_start_date
      ,p_effective_end_date           => ld_effective_end_date
      ,p_delete_warning               => lb_delete_warning
      ) ;
 
--
commit;
--
exception
   when others then
      dbms_output.put_line('Error: '||sqlerrm);
      rollback;
end;

Update Element Entry - HRMS APIs

--
declare
--
cursor cur_input_name(c_ele_name   varchar2)
  is
    select piv.display_sequence
          ,piv.name
          ,piv.element_type_id
      from pay_element_types_f_tl petl
          ,pay_element_types_f    pet
          ,pay_input_values_f     piv
     where petl.element_name   = c_ele_name
       and petl.language       = 'US'
       and pet.element_type_id = petl.element_type_id
       and piv.element_type_id = pet.element_type_id
       order by piv.display_sequence;
--      
   ld_effective_start_date   date;
   ld_effective_end_date     date;
   ln_object_version_number  pay_element_entries_f.object_version_number %type;
   lb_update_warning         boolean;
   ln_screen_entry_value     pay_element_entry_values_f.screen_entry_value%type;
   ln_element_type_id        pay_element_types_f.element_type_id%type;
   ln_input_value_id1        pay_input_values_f.input_value_id%type;
   ln_input_value_id2        pay_input_values_f.input_value_id%type;
   ln_input_value_id         pay_input_values_f.input_value_id%type;
 
   -- DT API Out Variables
   lb_correction             boolean;                      
   lb_update                 boolean;                      
   lb_upover                 boolean;                        
   lb_upchin                 boolean;
   --  
   lc_element_name           pay_element_types_f.element_name%type := 'AK Element';
   lc_emp_num                per_all_people_f.employee_number := '123425';
   lc_dt_mode                varchar2(20);

begin

   --
   savepoint sv_update;
   --
 
   select pee.element_entry_id
         ,pee.object_version_number
     into ln_element_entry_id
         ,ln_object_version_number
     from per_all_people_f        per
         ,per_all_assignments_f   paf
         ,pay_element_entries_f   pee
         ,pay_element_types_f_tl  petl
         ,pay_element_types_f     pet
    where per.employee_number = lc_emp_num
      and trunc(sysdate) between per.effective_start_date and per.effective_end_date
      and paf.person_id       = per.person_id
      and trunc(sysdate) between paf.effective_start_date and paf.effective_end_date
      and pee.assignment_id   = paf.assignment_id
      and pee.element_type_id = pet.element_type_id
      and trunc(sysdate) between pee.effective_start_date and pee.effective_end_date
      and petl.element_name   = lc_element_name
      and petl.language       = 'US'
      and pet.element_type_id = petl.element_type_id;
     
      --Determine the Date Track Mode for Update..
 
   dt_api.find_dt_upd_modes
      ( p_effective_date        =>  trunc(sysdate)
      , p_base_table_name       =>  'PAY_ELEMENT_ENTRIES_F'
      , p_base_key_column       =>  'ELEMENT_ENTRY_ID'
      , p_base_key_value        =>  ln_element_entry_id
      , p_correction            =>  lb_correction
      , p_update                =>  lb_update
      , p_update_override       =>  lb_upover
      , p_update_change_insert  =>  lb_upchin
      );
                               
   if lb_upover or lb_upchin then
      lc_dt_mode := 'UPDATE_OVERRIDE';
   --elsif lb_upchin then
   --   p_dt_mode := 'UPDATE_CHANGE_INSERT';
   elsif lb_update then
      lc_dt_mode := 'UPDATE';
   elsif lb_correction then
      lc_dt_mode := 'CORRECTION';      
   end if;
 
   -- Get input value ids
   for rec_input_name in cur_input_name(lc_element_name) loop

      select piv.input_value_id
        into ln_input_value_id
        from pay_input_values_f    piv
       where piv.element_type_id = rec_input_name.element_type_id
         and piv.name            = rec_input_name.name
        ;
      if rec_input_name.display_sequence = 1 then  -- AK Value
     
         p_input_value_id1 := ln_input_value_id;
     
      elsif rec_input_name.display_sequence = 2 then  -- Employee Rate
     
         p_input_value_id2 := ln_input_value_id;    
   
      end if;
 
   end loop;
 
   -- Update Element Entry
   -- ------------------------------
   pay_element_entry_api.update_element_entry
     (     -- Input data elements
           -- -----------------------------
           p_validate                           => false, --true
           p_datetrack_update_mode              => lc_dt_mode,
           p_effective_date    => to_date('25-JUN-2012','DD-MON-YYYY'),
           p_business_group_id  => fnd_profile.value('PER_BUSINESS_GROUP_ID'),
           p_element_entry_id                   => ln_element_entry_id,
           p_object_version_number              => ln_object_version_number,
           p_input_value_id1                    => ln_input_value_id1,
           p_entry_value1                       => null,
           p_input_value_id2                    => ln_input_value_id2,
           p_entry_value2                       => 10,
           -- Output data elements
           -- --------------------------------
           p_effective_start_date               => ld_effective_start_date,
           p_effective_end_date                 => ld_effective_end_date,              
           p_update_warning                     => lb_update_warning
     );
 
  dbms_output.put_line( '  API: pay_element_entry_api.update_element_entry successfull - Element Entry Id: ' );

--
commit;
--
exception
   when others then
      dbms_output.put_line('Error: '||sqlerrm);
      rollback to sv_update;
end;
--

Thursday, July 23, 2015

Create Element Entry - HRMS APIs

--
declare
--
cursor cur_input_name (p_ele_name    varchar2)
  is
    select piv.display_sequence
          ,piv.name
          ,piv.element_type_id
      from pay_element_types_f_tl petl
          ,pay_element_types_f    pet
          ,pay_input_values_f     piv
     where petl.element_name   = p_ele_name
       and petl.language       = 'US'
       and pet.element_type_id = petl.element_type_id
       and piv.element_type_id = pet.element_type_id
       order by piv.display_sequence;
  --
   ln_element_link_id                pay_element_links_f.element_link_id%type;
   ld_effective_start_date           date;
   ld_effective_end_date            date;
   ln_element_entry_id               pay_element_entries_f.element_entry_id%type;
   ln_object_version_number     pay_element_entries_f.object_version_number%type;
   lb_create_warning                  boolean;
   ln_screen_entry_value           pay_element_entry_values_f.screen_entry_value%type;
   ln_element_type_id                pay_element_types_f.element_type_id%type;
   ln_input_value_id1                 pay_input_values_f.input_value_id%type;
   ln_input_value_id2                 pay_input_values_f.input_value_id%type;
   ln_input_value_id                   pay_input_values_f.input_value_id%type;
                                                   
   ln_element_type_id                  pay_element_types_f.element_type_id%type;
   --
   ln_assignment_id                    NUMBER := 12346;
   lc_element_name                     pay_element_types_f.element_name%type := 'AK Test Element';
--  
BEGIN
--
   --
   savepoint sv_create_element;
   --

   -- Get the element type id
   select tl.element_type_id
     into ln_element_type_id
     from pay_element_types_f_tl tl
         ,pay_element_types_f    t
    where tl.element_name = lc_element_name
      and language = 'US'
      and t.element_type_id = tl.element_type_id
      and trunc(sysdate) between t.effective_start_date and t.effective_end_date;

   -- You can have upto many more input values depending on the element setup, modify the script accordingly
   for rec_input_name in cur_input_name (lc_element_name ) loop

      select piv.input_value_id
        into ln_input_value_id
        from pay_input_values_f    piv
       where piv.element_type_id = rec_input_name.element_type_id
         and piv.name            = rec_input_name.name
        ;
      if rec_input_name.display_sequence = 1 then  -- AK Value      
         ln_input_value_id1 := ln_input_value_id;    
      elsif rec_input_name.display_sequence = 2 then  -- Employee Rate    
         ln_input_value_id2 := ln_input_value_id;
      end if;
    --
    end loop;

 
    -- Get Element Link Id
    -- ------------------------------
    ln_element_link_id :=  hr_entry_api.get_link
                                             (p_assignment_id     => ln_assignment_id,
                                              p_element_type_id   => ln_element_type_id,
                                              p_session_date  => TRUNC(SYSDATE)
                                              );
 
       dbms_output.put_line( '  API: Element Link Id: ' || ln_element_link_id );
 
       -- Create Element Entry
       -- ------------------------------
       pay_element_entry_api.create_element_entry
         (     -- Input data elements
               -- -----------------------------
               p_validate                   => false,
               p_effective_date          => TO_DATE('22-JUN-2012','DD-MON-YYYY'),
               p_business_group_id  => fnd_profile.value('PER_BUSINESS_GROUP_ID'),
               p_assignment_id         => ln_assignment_id,
               p_element_link_id       => ln_element_link_id,
               p_entry_type                => 'E',
               p_input_value_id1       => ln_input_value_id1,
               p_entry_value1            => null,
               p_input_value_id2       => ln_input_value_id2,
               p_entry_value2            => 4,
               -- Output data elements
               -- --------------------------------
               p_effective_start_date   => ld_effective_start_date,
               p_effective_end_date    => ld_effective_end_date,
               p_element_entry_id       => ln_element_entry_id,
               p_object_version_number  => ln_object_version_number,
               p_create_warning            => lb_create_warning
         );
 
     dbms_output.put_line( '  API: pay_element_entry_api.create_element_entry successfull - Element Entry Id: ' || ln_element_entry_id );

--rollback;
commit;

exception
   when others then
      dbms_output.put_line('Error: '||sqlerrm);
      rollback to sv_create_element;
end;
/

Wednesday, July 1, 2015

File Transfer to Windows Server

# This script will show you how to connect to the Database and windows server connection

#                      #!/bin/ksh
#
# ***********************************************************
# Default Applications Object Library specific Parameters
# ***********************************************************
orauser_pwd=${1}
user_id=${2}
user_name=${3}
request_id=${4}
#
# ***********************************************************
# Program Parameters
# ***********************************************************

P_HOST=$5    #Windows Server ip/host
P_USER=$6    #Windows Server User
P_PASS=$7    #Windows Server Password
P_DIR1=$8    #File Dir
P_FILE=$9    #File Name
#
# ***********************************************************
# Local variables
# ***********************************************************
lc_inst='AKPROD'      

# ***********************************************************
# Connect to the Database and get the File Name/ Instance
# ***********************************************************
lc_sql_rec=`sqlplus -s $orauser_pwd <<+ENDOFSQL+
set echo off
set pages 0
set heading off
set termout off
set feed off
set trimspool on
select substr('$P_FILE',instr('$P_FILE','-',-1)+2)
       ||'#'||(select instance_name FROM v\\$instance)
  from dual;
exit
+ENDOFSQL+`


lc_file_name=`echo $lc_sql_rec | cut -f1 -d'#'`
echo "File Name>"
echo $lc_file_name
echo " "
lc_inst_name=`echo $lc_sql_rec | cut -f2 -d'#'`
echo "Instance>"
echo $lc_inst_name
echo " "


#Start the transfer procedure

#Go to the file directory
cd $P_DIR1

# ***********************************************************
#  Check if it is Prod instance
# ***********************************************************

if [ "$lc_inst_name" = "$lc_inst" ]; then
   lc_windows_dir='/AKFiles/LIVE'
   lc_file_name_win='LIVE_'$lc_file_name
else
   lc_windows_dir='/AKFiles/TEST'
   lc_file_name_win='TEST_'$lc_file_name
fi

echo "Windows File Name>"
echo $lc_file_name_win
echo " "

# ***********************************************************
#  Connect to the Windows Server
# ***********************************************************

ftp -n $P_HOST <<END_SCRIPT
quote USER $P_USER
quote PASS $P_PASS
cd $lc_windows_dir
ascii
put $lc_file_name $lc_file_name_win
get $lc_file_name_win $lc_file_name_win
bye
END_SCRIPT

if [ -f $lc_file_name ]; then

  echo "FTP successful"
  rm $lc_file_name_win

  exit 0

else

  echo "FTP failed"
  exit 1
fi

#*******************End of FTP *****************************