Tuesday, January 28, 2014
Prerequisites:

Step1 : Create the Element and Element links
Step2: write the fast formula
Step3: Attach the fast formula in Formula Results

Package used to call the fast formula from the backed : ff_exec

Simple Code Snippet below: 

      l_formula_id        NUMBER;
      l_element_inputs    ff_exec.inputs_t;
      l_element_outputs   ff_exec.outputs_t;
      l_in_count          NUMBER;
      l_out_count         NUMBER;
      l_pay_value         NUMBER;

   BEGIN

      BEGIN
         SELECT formula_id
           INTO l_formula_id
           FROM ff_formulas_f
          WHERE formula_name = 'XX_PAYROLL_FORMULA'
          AND p_effective_date BETWEEN effective_start_date  
             AND effective_end_date;
      EXCEPTION 
      WHEN OTHERS 
      THEN
      DBMS_OUTPUT.put_line ('NO formula exists');
      END;

      IF l_formula_id IS NOT NULL

      THEN

-- Insert FND_SESSIONS row ( Optional )

  INSERT INTO fnd_sessions
             ( session_id, 
               effective_date
             )
        VALUES 
            ( USERENV ('sessionid'), 
              p_effective_date
             );

--
-- Initialize the formula.
--

ff_exec.init_formula (l_formula_id,
                      p_effective_date,
                      l_element_inputs,
                      l_element_outputs
                      );

--
-- Loop through the Input Values
--
FOR l_in_count IN l_element_inputs.FIRST .. l_element_inputs.LAST
    LOOP

    --
    -- Pass The each Input value name and its Value : Eg: START_DATE and p_start_date
    --    
       IF (l_element_inputs (l_in_count).NAME = 'START_DATE')
        THEN
           l_element_inputs (l_in_count).VALUE :=
                fnd_date.date_to_canonical (p_start_date);
        END IF;

END LOOP;

--
--Run The formula
--

ff_exec.run_formula (l_element_inputs, l_element_outputs);

--
-- Get the Out Put Values
--
FOR l_out_count IN l_element_outputs.FIRST .. l_element_outputs.LAST

    LOOP
      --
      -- Get all the Out Put Values Here L_PAY_VALUE is the out put value
      --
      IF (l_element_outputs (l_out_count).NAME = 'L_PAY_VALUE')
        THEN
           l_pay_value := l_element_outputs (l_out_count).VALUE;
      END IF;

    END LOOP;

RETURN (l_pay_value);

END;
Wednesday, January 22, 2014
Absence Management through Calendar OR Fast Formula:

There is a system profile called HR: Schedule Based Absence Calculation which controls whether the schedule information takes priority over the BG_ABSENCE_DURATION FF. Set the profile value to YES and it will use the schedule information. Set it to NO and it will use the FF.

A) 1 - Open and understand the structure of the seeded fast formula
TEMPLATE_ABSENCE_DURATION
2 - Create a new fast formula with name BG_ABSENCE_DURATION of same type as
TEMPLATE_ABSENCE_DURATION for custom absence calculations considering the work
schedules. Use the function GET_WORKING_DAYS instead of DAYS_BETWEEN.
That should exclude the week-ends from the absence duration calculation.

B) HR Dev has provided a Work Scheduling Component, which is available starting HR.PF.K, please review note 
330021.1

The functionality is delivered in patch that you need to apply on top of HR.PF.K, or it is already included in HR.PF.K.1

Users will need to setup in HRMS Manager > Work Structures > Work Schedules 
Users must ensure ensure the profile option HR: Schedule Based Absence Calculation is set to 
‘Yes’.
===========================================================================
Setup Step 1 :


Setup Step 2 :


Tuesday, January 21, 2014
A Similar Solution,
Doc ID: 429990.1 How to Submit a Concurrent Request Using a Self-Service Page

------Add function FNDCPSRSSSWA ( Schedule Requests ) to menu.
A Similar Solution, Directly Calling the report from 11i Self Service Menu

Doc ID: 334847.1 How to add a report to a 11i Self Service Menu
------Create a custom function using FNDCPPROGRAMPAGE
One More Way, To Submit Active Users using a button,

We can add a button(Create a New Item) to a any page using personalization and call FNDCPPROGRAMPAGE,

Destination URI: OA.jsp?akRegionCode=FNDCPPROGRAMPAGE&akRegionApplicationId=0&programApplName=FND&programName=FNDSCURS

Prompt: Active Users Report
Target Frame: _blank


If you want to hide schedule, print, notify pages, then add below to url
&parameterRegion=Hide
&programRegion=Hide
&scheduleRegion=Hide
&notifyRegion=Hide
&printRegion=Hide

Furthur it can be elaborated using,
744832.1 Oracle Application Framework Developer’s Guide Release 12.1.1

Page 283, Adding Request Monitoring to Your Product
---
OA.jsp?akRegionCode=FNDCPPROGRAMPAGE&akRegionApplicationId=0&programApplName=FND&programName=FNDSCURS&scheduleRegion=Hide&notifyRegion=Hide&printRegion=Hide&programRegion=Hide
Monday, January 20, 2014
Runtime Duration Calculation on SIT (HRMS Keyflexfield)

Recently we have a requirement to calculate two dates field and save months between in third segment.

For example :  (segment1 * segment2 ) =  Segment3

To achieve this we have to create 3 segments.

Segment1 for  Start Date
Segment 2 for End Date
And segment3 is for total calculated value.

To calculation the duration of months you have to create a value set with “NO Validation Type” and segment default  type will be “SQL”

The SQL statement will be base on start date value set and end date value set.
select NVL(XX_GENERAL_FUNCTIONS.GET_MONTHS_BETWEEN((:$FLEX$.SIT_DATE_VALUESET1) , (:$FLEX$.SIT_DATE_VALUESET2 ) ),'0') from dual


Define Context-Sensitive Segment for Descriptive Flexfield(DFF)


How to create Context-Sensitive DFF?

 Here, I will be discussing in detail on how to create Context-Sensitive Segments for Descriptive Flex-field.

Navigate to System Administrator Responsibility --> Applications --> Flexfield --> Descriptive --> Segments 
Query the DFF “Additional Information for Agents” (Or any DFF in any Module in my case its "Additional Information for Agents")

In the Prompt Field enter as “Component Received”. See that the Check boxes “Required” and “Enabled” are checked.
Now, keep the cursor in the second line of the Context Field Values and Type Code as NO and provide a description
Same way enter as YES in the next line and Keep the cursor on the YES line and Click the Segments Button.
Segments Summary Window Opens. Enter Name as Inspection Status and Assign Column Attribute.

 Click on Value Set Button, Value Set window opens. Type the Value Set Name, Security Type, Maximum Size and Validation Type. Save and Close the Record.


Now, Click on Open Button in the Segments Summary window. Segments window opens. Type the Description and Check the Security Enables check box. Save and close the window.
 Assign the Value Set “Component Received” we have created already. Save and Close.
 Check the Freeze the Flexfield check box and compile the changes.
 Now, Navigate to System Administrator Responsibility --> Application --> Validation --> Values. Find Value Set window opens. Enter the Value Set Name we have already created and click find.
 Enter the Values as Accepted, Rejected and Under Inspection line by line and Save.
 Now, go to the Service Request screen and check the DFF. If we select the Component Received as NO, no further fields will be visible.
 If we select the Component Received as YES, it will ask for the Inspection Status.

So, this is how we will be creating context-sensitive segments for a Descriptive Flex-field.

Sunday, January 19, 2014
In this post I will explain how to create SIT in Oracle HRMS Person screen.SIT is basically a KFF.This we can use to capture additional person information.The KFF which we are using here is Personal Analysis Keyflexfield.We can create and assign N number of SITs to a person.Once you enable the SIT it is available across the Application.
Following steps needs to be done to create a SIT.
1) Define a structure for the Personal Analysis Keyflexfield. For this you have to navigate to

Application Developer > Flexfield Key Segments

Query for Personal Analysis Flexfield.


2) Define the segments.
Click on Segments.Create the Segments based on your requirement.

In the Segments window check Allow Dynamic Inserts check box. Once you complete the segment definition checkFreeze Flexfield Definition and save your work.
3) Enable the SIT.
For this navigate to

US Super HRMS Manager > Other Definitions > Special Information Types

Create a record for above created structure.Check the check box matrix where ever you want to show the SIT.In this example I am enabling it for Person.


Save your work.
4) Go to any HRMS responsibility.Open Enter and Maintain form.Click on Special Information.Query for above created structure.Enter the information into the segments.

The entry will get created in PER_PERSON_ANALYSES and PER_ANALYSIS_CRITERIA table.




EIT Creation in HRMS

Uses:

EIT is a DFF in HRMS.

EIT is used to store data, where same data is changed quite often.
EIT can be opened at Multiple levels, so very helpful in storing as detailed data as possible.


How to create an EIT??



Navigation: System Administrator --> Application --> Flexfield -->  Descriptive --> Segments

Search flexfield title by name Extra Person Information, as shown below.



Unfreeze the key flexfield and add a new record under the Context Field Values section as shown below.

Press the Segments button

Create the number of segments as desired and attach validation sets to each field accordingly as shown below.
Save & Close. Don't forget to Freeze Flexfield Definition.

Now switch to Global HRMS Manager Responsibility.

Now we need to run the concurrent Program named "Register Extra Information Types (EITs)"


After the request is completed successfully, navigate to

Navigation: Global HRMS Manager -->  Security --> Information Types Security

Search for your relevant responsibility, add the EIT under the selected responsibility as shown below.


 Let’s check that either SIT has been successfully registered or not.

Navigation: Global HRMS Manager --> People --> Enter & Maintain --> Others --> Extra Information

 


Query:

SELECT PEI_INFORMATION1 PASSPORT_NUMBER,
       TO_DATE (SUBSTR (PEI_INFORMATION2, 1, INSTR (PEI_INFORMATION2, ' ') - 1),
                'YYYY/MM/DD'
               ) PASSPORT_EXPIRY_DATE
  FROM PER_PEOPLE_EXTRA_INFO
 WHERE INFORMATION_TYPE = 'XX_EXAMPLE_EIT'


Created with Artisteer

Here is list of most commonly used JDR_UTILS APIs used in OA Framework;
JDR_UTILS.LISTDOCUMENTS
Use this API to list of all OA Framework the documents in a path/module. This script is very handy, as it provides a list of all the desired documents/extensions/personalizations in one go.
DECLARE
BEGIN
jdr_utils.listdocuments(
‘/oracle/apps/per’TRUE);
END;
The script above will produce a list of all the MDS Documents in HRMS plus all the BC4J extensions done to HRMS module will be listed here too.
JDR_UTILS.LISTCUSTOMIZATIONS
List of all the Personalizations/Extensions/Contents for a specific object. For example, as below, I wish to know the various levels at which a specific object has been personalized or extended.
BEGIN
jdr_utils.listcustomizations
(p_document => ‘/oracle/apps/icx/por/wf/webui/ReqLinesNotificationsRN’);
END;
JDR_UTILS.PRINTDOCUMENT
List of all the Personalizations/Extensions for a specific object. For example, as below, I wish to see the name of the new AM Java Class that substitutes the standard VisitorAM.
DECLARE
BEGIN
jdr_utils.printdocument
(p_document => ‘/oracle/apps/icx/por/wf/webui/customizations/site/0/ReqLinesNotificationsRN’);
END;
The Output would be :
xml version=’1.0′ encoding=’UTF-8′?>
xmlns=”http://xmlns.oracle.com/jrad” version=”9.0.5.4.89_560″ xml:lang=”en-US” customizes=”/oracle/apps/icx/por/wf/webui/ReqLinesNotificationsRN” xmlns:oa=”http://xmlns.oracle.com/oa”>
serverUnvalidated=”false” sortState=”no” tipType=”none” totalValue=”false” userCustomizable=”false” vAlign=”middle” viewAttr=”Attribute11″ viewName=”xxrambReqLinesNotificationsVO” warnAboutChanges=”true”
xmlns:oa=”http://xmlns.oracle.com/oa”/>

messageStyledText id=”Attribute9_a1″ adminCustomizable=”true” cellNoWrapFormat=”false” dataType=”VARCHAR2″ initSortSeq=”none” prompt=”Budget Department” queryable=”false” rendered=”true” required=”no” scope=”.” selectiveSearchCriteria=”false”
serverUnvalidated=”false” sortState=”no” tipType=”none” totalValue=”false” userCustomizable=”false” vAlign=”middle” viewAttr=”Attribute9″ viewName=”xxrambReqLinesNotificationsVO” warnAboutChanges=”true”
xmlns:oa=”http://xmlns.oracle.com/oa”/>
DELETE A DOCUMENT
DECLARE
BEGIN
jdr_utils.deletedocument(p_document => 
‘/oracle/apps/icx/por/wf/webui/customizations/site/0/ReqLinesNotificationsRN’);
END;
Created with Artisteer