Quantcast
Channel: Apps2Fusion Articles
Viewing all 930 articles
Browse latest View live

Oracle Fusion HCM Technical Training

$
0
0

In this Oracle Fusion Cloud HCM application Technical, you will learn how to Use the predefined Work Structure and Worker extract definitions to quickly set up downstream extracts that generate work structure and worker details. The work structure extract generates details of business units, legal entities, departments, grades, jobs, locations, and positions. The worker extract generates details of person names, phones, emails, national identifiers, address, legislative data, accruals, absences, work relation, work term, assignment, work measure, supervisor, and salary.
Perform minimum configurations to adjust these seeded extracts to meet your requirements and you are ready to start extracting the data from Fusion Applications.

 

Oracle Fusion HCM Technical Training :

Enroll for Oracle Fusion HCM Technical Training


Creating HCM Approval Transaction Detail Report in Oracle HCM Cloud

$
0
0

Introduction

One of the most common requirements for any organization using an HCM ERP System is to find the number of pending transactions at any point of time. All of us live in a busy world where everyone has to don multiple responsibilities at same time. Imagine if there are multiple transactions like Add Employment, Change Salary, Change Location, Leave Approval and many other such ESS transactions which needs Manager Approval and the supervisors/managers are pre-occupied with other priority tasks. Chances are that in such situation the HCM Transaction wither remains in PENDING stated or goes into ERROR. One may use the Worklist Notifications View available in the UI but having a custom report which gives a consolidated view of all pending transactions really helps.

Such a report can be created wither using OTBI or even BI Report too (Not sure if there is an available UE for the same using which HCM Extracts can be created too, but in this article we will restrict ourselves to the OTBI and BI part only).

Let-us get started then.

Creating HCM Approval Transaction Detail Report (OTBI Analysis)

Until Release 11 creating such a Report was not possible as there was no Subject Area available. But starting release 12 we have “Human Capital Management – Approval Notification Archive Real Time” which allows us to get an insight into HCM Transaction data.

One perquisite prior to creating an analysis based on “Human Capital Management – Approval Notification Archive Real Time” subject area is that one should run “Archive Workflow Tasks” ESS Job which is only available post Release 12 PB8 onwards.

Once you run the above mentioned ESS Job you can get started with creating a OTBI Analysis.

For this example, we have selected 5 columns as below:

Attribute Name

Data Source

Business Process Name

"Approval Notification Details"."Process Name"

Task Status

"Approval Notification Details"."Task Status"

Subject

"Approval Notification Details"."Task Title"

Status

"Approval Notification History Details"."Status"

Stage

"Approval Notification History Details"."Stage"

 

 

A quick look at the results tab shows the output data:

The Analysis XML which gets created as a result is mentioned below:

Analysis XML

<saw:report xmlns:saw="com.siebel.analytics.web/report/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlVersion="201201160" xmlns:sawx="com.siebel.analytics.web/expression/v1.1">

  <saw:criteria xsi:type="saw:simpleCriteria" subjectArea="&quot;Human Capital Management - Approval Notification Archive Real Time&quot;" withinHierarchy="true">

     <saw:columns>

        <saw:column xsi:type="saw:regularColumn" columnID="ca5e8067945e45d3e">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Approval Notification Details"."Process Name"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="cfeb94fbeb0a2a399">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Approval Notification Details"."Task Status"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c9adf6f3808900783">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Approval Notification Details"."Task Title"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c1bf5178aee607a62">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Approval Notification History Details"."Status"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c393e0a93c5d544da">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Approval Notification History Details"."Stage"</sawx:expr></saw:columnFormula></saw:column></saw:columns></saw:criteria>

  <saw:interactionOptions drill="true" movecolumns="true" sortcolumns="true" addremovevalues="false" groupoperations="false" calcitemoperations="false" showhidesubtotal="false" showhiderunningsum="false" inclexclcolumns="true"/>

  <saw:views currentView="0" textDelivery="compoundView!1" parentsBefore="true" includeNewColumns="true" nullSuppress="true">

     <saw:view xsi:type="saw:compoundView" name="compoundView!1">

        <saw:cvTable>

           <saw:cvRow>

              <saw:cvCell viewName="titleView!1">

                 <saw:displayFormat>

                    <saw:formatSpec/></saw:displayFormat></saw:cvCell></saw:cvRow>

           <saw:cvRow>

              <saw:cvCell viewName="tableView!1"/></saw:cvRow></saw:cvTable></saw:view>

     <saw:view xsi:type="saw:titleView" name="titleView!1" includeName="true" startedDisplay="none">

        <saw:title>

           <saw:caption fmt="text">

              <saw:text>Pendng Transactions Report</saw:text></saw:caption></saw:title></saw:view>

     <saw:view xsi:type="saw:tableView" name="tableView!1" scrollingEnabled="false" deck="hide">

        <saw:edges>

           <saw:edge axis="page" showColumnHeader="true"/>

           <saw:edge axis="section"/>

           <saw:edge axis="row" showColumnHeader="true">

              <saw:edgeLayers>

                 <saw:edgeLayer type="column" columnID="ca5e8067945e45d3e"/>

                 <saw:edgeLayer type="column" columnID="c9adf6f3808900783"/>

                 <saw:edgeLayer type="column" columnID="cfeb94fbeb0a2a399"/>

                 <saw:edgeLayer type="column" columnID="c1bf5178aee607a62"/>

                 <saw:edgeLayer type="column" columnID="c393e0a93c5d544da"/></saw:edgeLayers></saw:edge>

           <saw:edge axis="column" showColumnHeader="rollover"/></saw:edges></saw:view></saw:views></saw:report>

 

And the SQL Issued is:

Issued SQL

SET VARIABLE PREFERRED_CURRENCY='User Preferred Currency 1';SELECT

  0 s_0,

  "Human Capital Management - Approval Notification Archive Real Time"."Approval Notification Details"."Process Name" s_1,

  "Human Capital Management - Approval Notification Archive Real Time"."Approval Notification Details"."Task Status" s_2,

  "Human Capital Management - Approval Notification Archive Real Time"."Approval Notification Details"."Task Title" s_3,

  "Human Capital Management - Approval Notification Archive Real Time"."Approval Notification History Details"."Stage" s_4,

  "Human Capital Management - Approval Notification Archive Real Time"."Approval Notification History Details"."Status" s_5,

  DESCRIPTOR_IDOF("Human Capital Management - Approval Notification Archive Real Time"."Approval Notification Details"."Task Status") s_6,

  DESCRIPTOR_IDOF("Human Capital Management - Approval Notification Archive Real Time"."Approval Notification History Details"."Status") s_7

FROM "Human Capital Management - Approval Notification Archive Real Time"

ORDER BY 1, 2 ASC NULLS LAST, 4 ASC NULLS LAST, 3 ASC NULLS LAST, 7 ASC NULLS LAST, 6 ASC NULLS LAST, 8 ASC NULLS LAST, 5 ASC NULLS LAST

FETCH FIRST 75001 ROWS ONLY

 

Creating Pending Approval Transaction Report (BI Report)

We can even create a BI Report to get a consolidated list of all HCM Transactions which have not been completed (In-Flight status).

The SQL statement is as follows:

SQL Query Used to Create BI Data Model

SELECT A.*

FROM

(

SELECT txnh.module_identifier ProcessName,

 wft.creator Requestor,

 wft.assignees CurrentAssignee,

 wft.assigneddate AssignedDate,

 wft.title NotificationTitle,

 txnd.status TxnStatus,

 txnh.object ObjectName

FROM fusion.per_all_people_f dp,

 fusion.per_person_names_f_v n,

 fusion.per_all_assignments_m asg,

 fusion.hrc_txn_header txnh,

 fusion.hrc_txn_data txnd,

 hcm_fusion_soainfra.WFTASK wft

WHERE dp.person_id             =n.person_id

AND asg.person_id              =n.person_id

AND LENGTH(asg.assignment_type)=1

AND asg.assignment_id          =txnh.object_id

AND wft.identificationkey      =TO_CHAR(txnh.transaction_id)

AND txnh.object                ='PER_ALL_ASSIGNMENTS_M'

AND txnh.transaction_id        =txnd.transaction_id

AND sysdate BETWEEN asg.effective_start_date AND asg.effective_end_date

AND asg.effective_latest_change='Y'

AND sysdate BETWEEN dp.effective_start_date AND dp.effective_end_date

AND sysdate BETWEEN n.effective_start_date AND n.effective_end_date

UNION

SELECT txnh.module_identifier ProcessName,

 wft.creator Requestor,

 wft.assignees CurrentAssignee,

 wft.assigneddate AssignedDate,

 wft.title NotificationTitle,

 txnd.status TxnStatus,

 txnh.object ObjectName

FROM fusion.per_all_people_f dp,

 fusion.per_person_names_f_v n,

 fusion.per_all_assignments_m asg,

 fusion.hrc_txn_header txnh,

 fusion.hrc_txn_data txnd,

 hcm_fusion_soainfra.WFTASK wft

WHERE dp.person_id             =n.person_id

AND asg.person_id              =n.person_id

AND LENGTH(asg.assignment_type)=1

AND asg.period_of_service_id   =txnh.object_id

AND wft.identificationkey      =TO_CHAR(txnh.transaction_id)

AND txnh.object                ='PER_PERIODS_OF_SERVICE'

AND txnh.transaction_id        =txnd.transaction_id

AND sysdate BETWEEN asg.effective_start_date AND asg.effective_end_date

AND asg.effective_latest_change='Y'

AND sysdate BETWEEN dp.effective_start_date AND dp.effective_end_date

AND sysdate BETWEEN n.effective_start_date AND n.effective_end_date

UNION

SELECT txnh.module_identifier ProcessName,

 wft.creator Requestor,

 wft.assignees CurrentAssignee,

 wft.assigneddate AssignedDate,

 wft.title NotificationTitle,

 txnd.status TxnStatus,

 txnh.object ObjectName

FROM fusion.hrc_txn_header txnh,

 fusion.hrc_txn_data txnd,

 hcm_fusion_soainfra.WFTASK wft

WHERE wft.identificationkey =TO_CHAR(txnh.transaction_id)

AND txnh.object             ='PER_ALL_PEOPLE_F'

AND txnh.transaction_id     =txnd.transaction_id

) A

order by A.TxnStatus

 

And the Output (with Conditional Formatting applied on TxnStatus column looks as below):

Promotion Planning and Simulation in Oracle Demantra PTP- Demo

$
0
0

Newly created promotion has “Unplanned” status and has no impact on funds or forecast. Once this promotion’s status is changed to “Planned” for usage in forecasting, it impacts the system. Planned promotions cost is taken out from the available fund balance and Engine when run, generates baseline and lift for it. System also calculates measures like profit for manufacturer and retailers, fund balance etc. which are later used for Cost Benefit reviews.

A simulation generates a forecast for a much smaller set of data, typically a single promotion, and provides immediate data for the total volume, base volume (volume in the absence of promotions), pre- and post-promotional volume. Depending on where you perform a simulation, you may also be able to see cannibalization; this depends on whether the worksheet contains all the data that the Analytical Engine needs to find cannibalization effects.

Promotion Planning and Simulation in Oracle Demantra PTP

 

Enrol Now for Oracle Predictive Planning Training

Fetching List of Scheduled Processes using BI Report in Oracle Cloud

$
0
0

Introduction

As most of us might be aware by now that we cannot accommodate custom code (pl/sql program, unix script, java program  and other code snippets) in Oracle Cloud (includes HCM,PPM,SCM,ERP) . We may create custom ESS Job for Reports though. As such, it always makes sense to be aware of the list of delivered scheduled processes available in the application. While this kind of information was available in ETRM (Electronic Technical Reference Manual) for EBS the Cloud equivalent OER (Oracle Enterprise Repository) unfortunately does not provides such details but rather mentions to fetch the same from “Manage Custom Enterprise Scheduler Jobs for <specific names>” (for this example lets take “Manage Custom Enterprise Scheduler Jobs for HCM Core Setup and Related Applications”) The problem however is that the specific scheduler jobs does not allows “Blind Search” and so no results are returned (screenshot below)

As such it is a real challenge to get the complete list of ESS (Oracle Enterprise Scheduler Service) Jobs available in system.

An Enhancement Request has already been logged with the product development team BUG 25049339 and it is mentioned that the same is fixed in 11.13.17.09.0

Good that we have details about the version when the same will be available, but until then we need a workaround and creating a BI Report is one.

So lets see how do we create a Custom BI Report to fetch ESS Job Details from the environment.

 

Creating BI Report to Fetch ESS Job Detail

The most important piece of information for building such a report is to be aware of the Tables which holds such data and also the join. Fortunately for me I got this info from a question raised in “My Oracle Support Community” and the sql query provided is below:

SQL Query

select p.code privilege,

      t.name,

      t.description,

      perm.code code,

      perm.resource_type_name,

      perm.action

from  fusion.ASE_PRIVILEGE_B p,

     fusion.ASE_PERMISSION_B perm,

     fusion.ASE_PRIVILEGE_TL t

where p.privilege_id = perm.privilege_id

and p.PRIVILEGE_ID=t.PRIVILEGE_ID

and t.language='US'

and sysdate between p.effective_start_date and nvl(p.effective_end_date, sysdate)

and sysdate between perm.effective_start_date

and nvl(perm.effective_end_date, sysdate)

and perm.resource_type_name='ESSMetadataResourceType'

 

Using this query we will build a Data Model and then prepare a report from the same.

The Report when executed would provide data as below:

 

One can run this report and get the complete list of ESS Jobs available in any environment at any point of time. So, while we wait for a delivered solution for this I hope this workaround can help us achieve what we need and enable us to get an idea of the delivered Scheduled Processes.

Using an Extract Rule Type Attribute for a HCM Extract in Oracle Fusion HCM Cloud Application

$
0
0

Introduction

As some of you might be aware by now that HCM Extracts is the recommended Outbound Integration tool for transferring data from Fusion HCM Cloud Application (applicable for On-Premise Deployment Model too) to external third party systems. While most of the times the Data Elements required by the consuming system can be fetched by using the available Database Item in the HCM Cloud Application in some of the cases the requirement might be a little complex and an already available Database Item may not exist. In such cases, one has to raise a SR and await Oracle Development team to provide a new Database Item but this might take a long time. As an alternative, one may use the “Extract Rule” Type Fast Formula to perform complex calculations and get desired results.

In this article, we would try to make use of a very simple “Extract Rule” Type Fast formula and illustrate its usage in implementation projects to achieve desired results.

Creating a Basic Custom HCM Extract

For this demonstration we would create a very simple HCM Extract which would consist of just two elements namely:

  1. Person Number

This Data Attribute would hold the Person Number. This Data Attribute is fetched using the Database Item Extract Person Number.

  1. PreviousEmployerLOS

This Data Attribute is intended to hold the Length of Service In Years for an Employee. An Employee might have worked in multiple organizations prior to joining the current one and must have different length of service. These details might be captured in some information element ( Descriptive Flex Fields, Information Type Elements.. etc). In order to fetch this value we would have to use a Fast Formula and in such cases “Extract Rule” Fast Formula comes to rescue. For this example, we would have a constant value (say 2) returned from the Fast Formula.

As a prerequisite, we already have created a Fast Formula of Type “Get Previous Employer LOS In Years”.

 

Fast Formula Details

Attribute Name / Label / Prompt

Attribute Value

*Formula Name

Get Previous Employer LOS In Years

*Type

Extract Rule

Description

Custom Fast Formula Created to Fetch a Constant Value 2

Legislative Data Group

 

Effective Start Date

1/1/1951

Type of Editor

Text

Formula Text

RULE_VALUE = ‘2’


RETURN RULE_VALUE

 

 

Now that we are aware of the Data Attributes we need to create our HCM Extracts let-us get started with creating a simple extract. Just for the sake of simplicity we would also have a very simple Extract Filter criteria where-in we would only fetch data for “Extract Person Number = 541”

We would use the following details to Create Extract (Navigation is Data Exchange->Manage Extract Definitions-> Create (+) )

Attribute Name

Attribute Value

Name

ExtractRuleCriteriaBasedCustomExtract

Start Date

1/1/1951

Type

HR Archive

 

Next, we need to click on “Switch Layout” button.

 

 

Once we click on “Data Group” (above) it would take us to a new screen where we would need to populate following details:

Data Group

Attribute Name

Attribute Value

Name

Person

*Tag Name

Person

User Entity

PER_EXT_SEC_PERSON_UE

Threading Database Item

Extract Person ID

*Threading Action Type

Object Actions

Interlocking Database Item

 

Root Data Group

Checked

Description

Main Data Group

 

Also, we would need to define a Data Group Filter Criteria

Data Group Filter Criteria

Attribute Name

Attribute Value

Filter Criteria

Extract Person Number = 541

 

 

Next, we need to create a Record. We would need to populate the following details:

Record

Attribute Name

Attribute Value

Effective Start Date

1/1/1951

Effective End Date

 

Sequence

1

Name

PersonRecord

TagName

PersonRecord

Type

Detail Record

ProcessType

Fast Formula

Next Data Group

 

Hidden

 

Required

 

Enable edits to output results

 

Generated Fast Formula

<Auto Generated When Record Attributes are Defined>

Description

Main Person Record

 

 

Now, we need to define the Extract Attributes:

  1. PersonNumber

  1. PreviousEmployerLOS

Next, we need to populate the Extract Delivery Options using following details

Extract Delivery Options

Attribute Name

Attribute Value

Start Date

1/1/1951

End Date

 

*Delivery Option Name

ExtractRuleCriteriaBasedCustomExtract

*Output Type

Data

Report

/Custom/Practice Samples/ExtractReport

Template Name

 

*Output Name

ExtractRuleCriteriaBasedCustomExtractOutput

*Delivery Type

None

Bursting Node

 

Override Delivery Node

 

 

 

As a last step, we would search for the Extract and check if it is in Valid Status

 

Submitting Extract

We would now try to Submit the Extract

Navigation: Data Exchange->Submit Extracts

 

View Extract Results

We can view Extract Results now using the View Extract Results Link

We could clearly see that the PreviousEmployerLOS field is holding the value 2. While in this article we have used a hardcoded value one may always use complex calculation in the Fast Formula to get desired results.

I hope this would serve as a Prototype and someone of you would be able to extend on this to develop more interesting, robust and complex Extracts.

Do give a try and share your findings.

Good Bye for now and have a nice day ahead!.

Oracle Fusion HCM Technical: BI Publisher

$
0
0

In this training demo, you will learn how to create a BI Publisher template using the Export XSD option in the extract execution tree and saving the file to your local machine. You can then load the downloaded XSD file to the BI Publisher word plug-in using the XML Schema option. If you require a report in a specific format, then you can create a template and save it by arranging the fields in the required format. Otherwise, you can create a default RTF template using the All Fields option.

This tutorial deals with how to create a BI Publisher report from a subject area in HCM Cloud.

 Oracle Fusion HCM Technical: BI Publisher

 

 Enroll for Oracle Fusion HCM Technical Training

Parallel Processing Technique to Fetch Large Volume of Data Using BI Report In Oracle Fusion Cloud

$
0
0

Business Requirement

Sometimes we need to fetch huge data from a Cloud Environment and BI Report fails stating Report Data Size Exceeds Maximum Limit

In such cases, we might make use of the concept of using multithreading. What this essentially does is that it breaks the entire program into smaller chunks such that if you have say 10K records to process you may break them into smaller units say of 1K each and submit the program 10 times. Each one of the program runs on its own without interfering with the other and you get the desired data (the only drawback being they are in different files and maybe a merge operation is required). But having said so it still serves the purpose and at-least one is able to get the data from the system instead of the first approach when you hit a dead-end.

I will try to explain this with the help of a worked-out example.

Worked Out Example

In the diagram above we saw that the Report failed stating “ Report Data Size exceeds the maximum limit. Stopped processing

In order to overcome such a problem we need to break the entire data into smaller chunks.This can be done by first of all identifying the Total No Of Records which is fetched by the report.

The general syntax of determine this is by following the below SQL syntax

SQL Syntax to Find Record Count

SELECT TAB1.COUNT(UNIQUE_IDENTIFIER) as “RECORDCOUNT”

FROM

(

SELECT UNIQUE_IDENTIFIER,

               COLUMN2,

               ……,

               …….,

              COLUMNN

FROM    TABLE1,

               ……..,

               …………,

               TABLEN

WHERE TABLE1.COLUMN1 = TABLE2.COLUMN2

AND  ………………………………….

AND  ……………………………………..


) TAB1

 

For this example, we have used the delivered report “Worker Report”. The report location is

Shared Folders->Human Capital Management->Data Exchange -> Worker Report

For this particular cloud environment I applied the same logic and could figure out that the total no of records are 66511

 

Next we need to decide the chunk size for each run. In my case I decided to have the below bifurcation

Batch Sequence

Record Sequence

Batch1

1-10000

Batch2

10001-20000

Batch3

20001-30000

Batch4

30001-40000

Batch5

40001-50000

Batch6

50001-60000

Batch7

60001-66511

Now although we have decided the no of batches and the chunk size one important thing is still left and that is assigning RECORD_SEQ to each data record fetched by the query.

In order to do so we would make use of the ROWNUM property of the SQL.

Also we would need to use two additional parameters namely START_SEQ and END_SEQ to ensure the correct records are picked in correct batch.

The lines highlighted in RED fonts in the ModifiedSQL.sql is the section newly added to the original sql.

Executing Report

Now as the new report is ready we will try to execute the same and find the results.

Inference/Summary

So now we have seen how we can use parallel processing technique to overcome data size issue while fetching Data using a SQL Data Model Based BI Report in a Cloud Environment.

While this example was used for a specific report the same method can be applied to any other report (both seeded as well as custom) and hopefully it will deliver desired results. This technique should work not only for HCM but for other modules too be it Financial, SCM, PPM etc. In a nutshell, anywhere where you use a BI SQL to fetch data this trick can be applied.

Do try at your end and feel free to let-us know your observations.

That’s all from my side have a nice day ahead!

Financials Reporting using Multi-Dimensional Analysis in Oracle Fusion Cloud- Demo

$
0
0

Oracle Financials Cloud is a unique multi-dimensional reporting and analysis platform that provides real-time access to financial information. Users can quickly report and analyze data from different perspectives within the same system used for operational accounting. By providing multiple reporting options, each tool has been tailored to deliver data in a way that’s most appropriate for its given audience – whether for management reports, financial analysis, transactional intelligence, or statutory reporting.This oracle fusion video tutorial briefs you about- Real time analysis with Essbase Cube, with example, create & manage Account Monitor-Account group, Account Inspector,download & install Smart view.

 

Financials Reporting using Multi-Dimensional Analysis in Oracle Fusion Cloud

 

Enrol Now for Oracle Fusion Cloud Financials Training


Notifying Changes Using HCM Extract

$
0
0

Business Requirement

Many a times there are scenarios where in whenever some specific changes are been made to Employee Record (be it via ESS(Employee Self Service) , MSS(Manager Self Service) or via HR Admin) the details should be send to a specific distribution list.

For example-

Last Name change after marriage. Changes made by employee should be send to a specific team who will generate an authorized letter stating new name. For this the said team should be notified whenever such changes happen.

These kind of notifications/emails were very easy to send in traditional ERP ( E-Business Suite in particular) by writing custom PLSQL programs which used to compare the new and old values of the attributes and then send the output as an attachment to a specific email-id (distribution list).

In a SaaS Environment one does not has the flexibility of using custom PLSQL program but although the technology has changed over the period of time the Business Requirement still remains the same, which means that there still is a need to send the details to the specific set of individuals. This can be accomplished by using a Changes Only HCM Extracts. In a change only HCM Extract we set the “Marked for Changes” property of an Extract Attribute as Checked or Unchecked. If checked than changes made to the data column are reflected in Extract.

Human Capital Management Integration Specialist Job Role is required to create Custom HCM Extracts

Let-us try to demonstrate this with a worked example

Worked Out Example

For this example, we would create a very simple changes only extract which would comprise of the following attributes:

Extract Attributes

PersonNumber

PersonID

PersonNameEffectiveStartDate

PersonNameEffectiveEndDate

PersonFirstName

PersonMiddleName

PersonLastName

 

We would use the following details to create the HCM Extract

Extract Name

Employee Name Change Extract

Extract Type

Full Profile

Parameters

  1. Effective Date

  2. Changes Only

User Entity

PER_EXT_PAY_EMPLOYEES_UE

Threading Database Item

Extract Employee Person ID

Threading Action Type

Object Actions

 

Once done the HCM Extract definition would appear as below:

Setting Up Email as Delivery Option

We need to do some specific setups to ensure that the HCM Extract Data is send as an attachment to a specific email id.

Choose “Email” as the Delivery Option and fill the following details

Property

Value

Run Time File Name

EmployeeNameChangeDetails_RunTImeFileName

Key

1

Email Address

<any valid email-id>

From

OracleHCMCloud@oracle.com

Subject

EmployeeNameChangeDetails

Message Body

Please find file attached.

 

The screens when populated will appear as below:

Submitting the Extracts

Next we can submit the extracts using the correct parameters. For this example, we have submitted the Extract with parameter values of Changes Only as ATTRIB_OLD and Effective Date as 10.10.2017

 

Verifying Results

From the above snapshot we could see that the Extract was successfully submitted and the same got completed too. As a result we should get an email with an attachment.

Notice that the Subject Line, FromEmail, MessageBody and FileName are exactly the same as we mentioned during configuration at the time of defining Extract Delivery Option Additional Details.

If we open the download the attachment we should be able to view the data in XML format too as shown

OBIEE 12C Training

$
0
0

Oracle BI Enterprise Edition (sometimes referred to as Oracle Business Intelligence) provides a full range of business intelligence capabilities that allow you to:
Collect up-to-date data from your organization
Present the data in easy-to-understand formats (such as tables and graphs)
Deliver data in a timely fashion to the employees in your organization

These capabilities enable your organization to make better decisions, take informed actions, and implement more-efficient business processes.

In Oracle BI Enterprise Edition, you can work with Analyses, Dashboards, Filters, Selection Steps, and Prompts, Agents, Conditions, Actions, Scorecards and other products.

OBIEE 12C: Introduction

 

Enroll For OBIEE 12C Training

BIP Bursting In Oracle Fusion Cloud

$
0
0

Business Requirement

 

Many a times there is a need to send details to a specific distribution list or an individual based on a specific event/transaction which has taken place in the ERP Application.

Some of such use case scenario being:

  1. Sending Payslip to Employee via Email

  2. Sending Employee Joining Info to Manager via Email

  3. Sending Invoice Details to Payment Team

  4. Sending Birthday/Work Anniversary Greetings Email to Employee

All of the above were easily achieved in an On-Premise environment (EBS particularly) either by creating a Custom Alert (Periodic/Event depending on the specific business requirement) or a custom pl/sql program which would send details over email or even by using BI Publisher Bursting Feature.

However, in a Cloud Environment we do not have the flexibility of using custom code and although the Alert Manager feature is available (starting Release 12) one need to check whether there are events already present against which one could raise the alert action.

So does this means one would not be able to perform such actions in a Cloud Setup?

No, absolutely not. While we don’t have the flexibility of writing a custom pl/sql nor can we can define new alerts as per our requirement but we still can use BI Publisher Bursting Feature and achieve desired results.

In this article, we would try to demonstrate the same.

For this example, we would try to send a “Termination Initiation Notice” to Manager whenever a subordinate submits resignation.

The manager would be send the information about the Employee Name along with his/her Person# and actual termination date in an Email. The Email should also have a static internal portal link (which will contain knowledge documents describing how to perform exit formalities). Additionally, there should also be a PDF attachment in the Email.

So, let-us begin then.

 

Worked Example

 

We would have to create a SQL Query which would form our data source for this BIP Report.

The Report should fetch details like:

  1. Employee Person Number

  2. Employee Email

  3. Employee Title

  4. Employee Display Name

  5. Employee Actual Termination Date

  6. Manager’s Email

  7. Manager Display Name

 

Data Model Query

SELECT papf.person_number EmployeeNumber,

      INITCAP(ppnf.title)         EmployeeTitle,

      ppnf.display_name  EmployeeName,

      pea.email_address EmployeeEmail,

      to_char(pps.actual_termination_date,'MM-DD-YYYY') TerminationDate,

      (select papf1.person_number

       from   per_all_people_f papf1

       where  papf1.person_id = pasf.manager_id

       and    trunc(sysdate) between papf1.effective_start_date and papf1.effective_end_date) AssignmentManagerPersonNumber,

      (select ppnf1.display_name

       from   per_person_names_f ppnf1

       where  ppnf1.person_id = pasf.manager_id

       and    ppnf1.name_type = 'GLOBAL'

       and    trunc(sysdate) between ppnf1.effective_start_date and ppnf1.effective_end_date) ManagerName,

     (select pea1.email_address

       from   per_email_addresses pea1

       where  pea1.person_id = pasf.manager_id

       and    pea1.email_type = 'W1') ManagerEmail,

      to_char(trunc(pps.last_update_date),'MM-DD-YYYY') ppslud,

      to_char(trunc(sysdate-1),'MM-DD-YYYY') yesterdaydate,

      to_char(trunc(sysdate),'MM-DD-YYYY') currentdate,

      papf.person_id papfpersonid,

      pasf.person_id pasfpersonid,

      pasf.manager_id pasfmgrid

FROM   per_all_people_f papf,

      per_all_assignments_m paam,

      per_assignment_supervisors_f pasf,

      per_person_names_f ppnf,

      per_email_addresses pea,

      per_periods_of_service pps

where  papf.person_id = paam.person_id

and    paam.assignment_type IN ('E','C')

and    pps.person_id = papf.person_id

and    pps.actual_termination_date is not null

and    pea.email_type = 'W1'

and    pea.person_id = papf.person_id

and    ppnf.person_id = papf.person_id

and    ppnf.name_type = 'GLOBAL'

and    pasf.person_id = paam.person_id

and    paam.primary_flag = 'Y'

and    trunc(sysdate) between papf.effective_start_date and papf.effective_end_date

and    trunc(sysdate) between paam.effective_start_date and paam.effective_end_date

and    trunc(sysdate) between ppnf.effective_start_date and ppnf.effective_end_date

and    trunc(sysdate) between pasf.effective_start_date and pasf.effective_end_date

and    pasf.manager_type = 'LINE_MANAGER'

and    trunc(pps.last_update_date) between trunc(sysdate - 1) and trunc(sysdate)

order by pps.last_update_date desc

 

 We would also need to create a BI Bursting Query

BI Bursting Query

SELECT EmployeeNumber KEY,

      'BITemplate' TEMPLATE,

      'en-us' LOCALE,

      'PDF' OUTPUT_FORMAT,

      'EMAIL' DEL_CHANNEL,

      'abc@mymail.com' parameter1,

      'def@mymail.net' parameter2,

      'orafusion@bursting.com' parameter3,

      'Termination Initiation' parameter4,

      'This is to inform you that one of your subordinate have decided to leave the organization for personal reasons.

       Please initiate exit formalities.

       Refer https://www.mycompany.com/exitformalities for details.

       Regards

       HR Team ' parameter5,

      'true' parameter6,

      'replyto@nowhere.com' parameter7

FROM   

(SELECT papf.person_number EmployeeNumber,

      INITCAP(ppnf.title)         EmployeeTitle,

      ppnf.display_name  EmployeeName,

      pea.email_address EmployeeEmail,

      to_char(pps.actual_termination_date,'MM-DD-YYYY') TerminationDate,

      (select papf1.person_number

       from   per_all_people_f papf1

       where  papf1.person_id = pasf.manager_id

       and    trunc(sysdate) between papf1.effective_start_date and papf1.effective_end_date) AssignmentManagerPersonNumber,

      (select ppnf1.display_name

       from   per_person_names_f ppnf1

       where  ppnf1.person_id = pasf.manager_id

       and    ppnf1.name_type = 'GLOBAL'

       and    trunc(sysdate) between ppnf1.effective_start_date and ppnf1.effective_end_date) ManagerName,

     (select pea1.email_address

       from   per_email_addresses pea1

       where  pea1.person_id = pasf.manager_id

       and    pea1.email_type = 'W1') ManagerEmail,

      to_char(trunc(pps.last_update_date),'MM-DD-YYYY') ppslud,

      to_char(trunc(sysdate-1),'MM-DD-YYYY') yesterdaydate,

      to_char(trunc(sysdate),'MM-DD-YYYY') currentdate,

      papf.person_id papfpersonid,

      pasf.person_id pasfpersonid,

      pasf.manager_id pasfmgrid

FROM   per_all_people_f papf,

      per_all_assignments_m paam,

      per_assignment_supervisors_f pasf,

      per_person_names_f ppnf,

      per_email_addresses pea,

      per_periods_of_service pps

where  papf.person_id = paam.person_id

and    paam.assignment_type IN ('E','C')

and    pps.person_id = papf.person_id

and    pps.actual_termination_date is not null

and    pea.email_type = 'W1'

and    pea.person_id = papf.person_id

and    ppnf.person_id = papf.person_id

and    ppnf.name_type = 'GLOBAL'

and    pasf.person_id = paam.person_id

and    paam.primary_flag = 'Y'

and    trunc(sysdate) between papf.effective_start_date and papf.effective_end_date

and    trunc(sysdate) between paam.effective_start_date and paam.effective_end_date

and    trunc(sysdate) between ppnf.effective_start_date and ppnf.effective_end_date

and    trunc(sysdate) between pasf.effective_start_date and pasf.effective_end_date

and    pasf.manager_type = 'LINE_MANAGER'

and    trunc(pps.last_update_date) between trunc(sysdate - 1) and trunc(sysdate)

order by pps.last_update_date desc

)

Also, we have created a ‘Schedule Trigger’ to ensure that the Scheduled Report should only send email whenever there is data returned from the mail Data Model SQL. In this case the Schedule Trigger would only return a TRUE value whenever a termination happens between Current System Date and one day prior to it.

Schedule Trigger Query

SELECT 1

FROM   per_all_people_f papf,

      per_all_assignments_m paam,

      per_assignment_supervisors_f pasf,

      per_person_names_f ppnf,

      per_email_addresses pea,

      per_periods_of_service pps

where  papf.person_id = paam.person_id

and    paam.assignment_type IN ('E','C')

and    pps.person_id = papf.person_id

and    pps.actual_termination_date is not null

and    pea.email_type = 'W1'

and    pea.person_id = papf.person_id

and    ppnf.person_id = papf.person_id

and    ppnf.name_type = 'GLOBAL'

and    pasf.person_id = paam.person_id

and    paam.primary_flag = 'Y'

and    trunc(sysdate) between papf.effective_start_date and papf.effective_end_date

and    trunc(sysdate) between paam.effective_start_date and paam.effective_end_date

and    trunc(sysdate) between ppnf.effective_start_date and ppnf.effective_end_date

and    trunc(sysdate) between pasf.effective_start_date and pasf.effective_end_date

and    pasf.manager_type = 'LINE_MANAGER'

and    trunc(pps.last_update_date) between trunc(sysdate - 1) and trunc(sysdate)

order by pps.last_update_date desc

 

RTF Template

 

Running the Report

When we run the report and check the same using the ‘Schedule Option’ we can see the following:

 

Verifying the Results

A quick check on the received email confirms that the expected content is delivered

And the attachment looks as per the BI Template

OBIEE 12C: Reporting Analysis

$
0
0

OBIEE 12C will help you to create a multi-compound layout analysis, which would allow a view selector to switch between different combinations of views. For example, one layout might include a graph and a table and another layout might include two tables utilizing the compound layout functionality. OBIEE 12C will also help you to learn:
Filtering Data for Analyses
• Introduction to filters and selections
• Creating, editing, and grouping filters
• Adding prompts to analyses
• Dynamic filtering
• Using saved analyses as filters
Selecting and Grouping Data for Analysis
• Creating selection steps
• Creating groups
• Creating calculated items
• Creating direct database analysis requests
• Including advanced SQL clauses in your analysis
Advanced Visualization in Analysis
• Introduction to views, graphs, and editors
• Working with views in Compound Layouts
• Creating and editing graphs
• Performing common view tasks
Showing Results with Pivot Tables
• Creating, arranging, and formatting a pivot table
• Using hierarchical columns
• Sorting in pivot tables
• Setting aggregation and using totals
• Showing an item's relative value
• Building calculations and displaying running sums
Working with Additional Views in Analyses
• Creating simple and advanced trellis views
• Creating performance tile views
• Working other view types like Treemap and Heat Matrix
• Linking master-detail views
Visualizing Data on Maps
• Oracle spatial components
• Managing map data
• Creating and editing Map views
• Interacting with map views
• Other applications and points of integration for map views

OBIEE 12C: Reporting Analysis

 

Enroll for OBIEE 12C Training

Creating an Employee Self Service Report from a Normal BIP Report in Oracle Fusion Cloud

$
0
0

Business Requirement

In any ERP application there always exists some or other information which is of particular interest to an employee. Some common examples being:

  1. Vacation Balance

  2. Rewards

  3. Employee Profile Summary (Curriculum Vitae)

While an employee can always login to the application and visit his/her profile to get such information, many a times individuals prefer to run a specific report and get the data. For all such requirements we need to create ESS (Employee Self Service) Reports.

An admin user however, can get details of all employees using a common consolidated report.

Specific changes needs to be made to the consolidated report to ensure that the new version or rather the ESS version works fine and renders data corresponding to the logged in user.

In this example, we will try to create a ESS Report from a Consolidated Report.

Consolidated Vacation Balance Report

As a pre-requisite we need to have a report created. We have created a custom report which fetches the following details:

  1. Person Number

  2. UserName

  3. Plan Name

  4. Plan Balance

We will use the below query to create a data model for the report

SQL Query Used

SELECT TABLE1.PERSON_NUMBER PERSONNUMBER,

      TABLE1.USERNAME,

      TABLE1.PLANNAME PlanName,

      TABLE1.END_BAL || ' ' || DECODE(TABLE1.PLANUOM,'D', 'Days','H','Hours',TABLE1.PLANUOM) PlanBalance

FROM

(

select    apae.person_id,

         papf.person_number,

         apae.plan_id,

         (select aapft.name

          from anc_absence_plans_f_tl aapft

          where TRUNC(SYSDATE) BETWEEN aapft.effective_start_date and aapft.effective_end_date

          and language = 'US'

          and aapft.absence_plan_id = apae.plan_id) planname,

          (select aapf.plan_uom

           from anc_absence_plans_f aapf

           where aapf.absence_plan_id = apae.plan_id

           and   TRUNC(SYSDATE) between aapf.effective_start_date and aapf.effective_end_date

           ) planuom,

          apae.accrual_period,

          apae.end_bal,

          pu.username

from anc_per_accrual_entries apae,

       per_all_people_f papf,

       per_users pu

where apae.person_id = papf.person_id

and TRUNC(SYSDATE) BETWEEN papf.effective_start_date and papf.effective_end_date

and TRUNC(apae.accrual_period) = TRUNC(LAST_DAY(:pdate))

and pu.person_id = papf.person_id

) TABLE1

 

The Report Output looks as below:

 

Creating an Employee Self Service Version

In the above snapshot we found that details for all the employees are displayed but in case of a self service version one needs to ensure that records pertaining to only the logged in employee is displayed.

For this we would need to make some changes to the SQL query by introducing additional where clause to only fetch records for the employee.

This can be accomplished by making use of FND_GLOBAL.USER_GUID profile.

A quick comparison of the SQLs namely ConsolidatedVacationBalanceQuery.sql and MyVacationBalanceQuery.sql reveals that only the clause “and pu.user_guid = fnd_global.user_guid”  has been added to convert the Consolidated Report to Employee Self Service one.

 

Verifying Results

Now we have two versions of report namely ConsolidatedVacationBalanceReport and MyVacationBalanceReport.

User Type

ConsolidatedVacationBalanceReport

EmployeeVacationBalanceReport

Admin User

Employee User

 

Inference / Summary

From the above screenshot we can conclude that when we used FND_GLOBAL.USER_GUID to filter out records only applicable to logged in user the Employee version of the report didn’t returned any records when run from an Admin User. ( This Admin User does not has any person record associated with it and so the report fetches no data).

On the other hand when we login to application using a named user ALAN.COOK(user with a valid person record associated with it…) then both versions of the report fetched the same data.

So, this is how we can convert a Normal BI Report to an Employee Self Service Report.

And with this I have come to the end of this post.

Thanks all for your time and have a wonderful day ahead.

Oracle Fusion Cloud Security in Release 12- Demo

$
0
0

The Oracle Fusion Applications Security Console is an easy-to-use administrative interface that you access by selecting Tools - Security Console on the home page or from the Navigator. You use the Security Console for most role-management tasks. For example, use the Security Console to:

Review predefined job, abstract, and duty roles.
Create and manage the custom job, abstract, and duty roles.
Typically, you copy a predefined role and use it as the basis for a custom role.
Review the roles assigned to users.
Compare roles.
Simulate the Navigator for a user or role.

Oracle Fusion Cloud Security in Release 12

 

Enrol Now for Oracle Fusion Application Training

Generating Email Notifications Using OTBI In Oracle Fusion Cloud

$
0
0

Business Requirement

Many a times there is a need to send email notifications to employees, managers, HR Analysts, Payroll Administrators etc to inform them about specific business events which might have occurred during a course of time.

Some typical examples being:

  1. Sending New Joinee Details to Manager

  2. Sending Termination Details to Manager

  3. Sending Birthday wishes to Employee

  4. Sending Work Anniversary Greetings to Employee

And many more

 

While this kind of functionality was generally achieved in an EBS environment using Alerts the same results can be obtained in a Cloud Environment by using “Narrative View” Feature of an OTBI Analysis.

In this example, we would try to create a “Termination Initiation” notification email to the Line Manager asking him/her to initiate exit formalities of subordinate.

So, without much ado let’s get started.

Creating OTBI Analysis

In order to generate such a notification email the first and foremost thing is to get your Data Content in place. For this example we would be using “Workforce Management – Worker Assignment Event Real Time” subject area and try to fetch relevant details.

The analysis XML used is given below:

Analysis XML

<saw:report xmlns:saw="com.siebel.analytics.web/report/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sawx="com.siebel.analytics.web/expression/v1.1" xmlVersion="201201160">

  <saw:criteria xsi:type="saw:simpleCriteria" subjectArea="&quot;Workforce Management - Worker Assignment Event Real Time&quot;" withinHierarchy="true">

     <saw:columns>

        <saw:column xsi:type="saw:regularColumn" columnID="c9ad74745af4b8295">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Person Number"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c2c8d60d34b28271e">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN "Worker"."Employee Gender"  = 'Male' THEN 'His' ELSE 'Her' END</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="caab4f0128a8bbbbd">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Employee Gender"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c3b78607c9b518bf2">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Employee Individual Title"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c147df6ca9ef0f404">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Employee Email Address"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c8507e33c85a60e49">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Manager Person Number"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c78598ce2e8dde16e">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Manager Name"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="cb6066ae41b3498cf">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Manager Type"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="cb6066ae41b3498cf_d1">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Employee Name"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c6d07682e90d7f915">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Manager E-Mail Address"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="cf2aadb6b5e823ef3">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Employee Individual Title"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c465ed0acc86fed2f">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Termination Date"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="c9e336f5a37da0404">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"Assignment Event Details"."Action Code"</sawx:expr></saw:columnFormula></saw:column>

        <saw:column xsi:type="saw:regularColumn" columnID="cfe1bf947284f40f8">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">"HR Action"."Action Description"</sawx:expr></saw:columnFormula></saw:column></saw:columns>

     <saw:filter>

        <sawx:expr xsi:type="sawx:logical" op="and">

           <sawx:expr xsi:type="sawx:comparison" op="notNull">

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Manager Person Number"</sawx:expr></sawx:expr>

           <sawx:expr xsi:type="sawx:comparison" op="notNull">

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Termination Date"</sawx:expr></sawx:expr>

           <sawx:expr xsi:type="sawx:comparison" op="equal" protected="true" source="drillDown">

              <sawx:expr xsi:type="sawx:sqlExpression">"Worker"."Manager Type"</sawx:expr>

              <sawx:expr xsi:type="xsd:string">LINE_MANAGER</sawx:expr></sawx:expr>

           <sawx:expr op="equal" xsi:type="sawx:comparison">

              <sawx:expr xsi:type="sawx:sqlExpression">"Assignment Event Details"."Action Code"</sawx:expr>

              <sawx:expr xsi:type="xsd:string">RESIGNATION</sawx:expr></sawx:expr>

           <sawx:expr xsi:type="sawx:sql">"Worker"."Termination Date" BETWEEN timestampadd(SQL_TSI_DAY,-1,CURRENT_DATE) AND (CURRENT_DATE)</sawx:expr></sawx:expr></saw:filter></saw:criteria>

  <saw:views currentView="0">

     <saw:view xsi:type="saw:compoundView" name="compoundView!1">

        <saw:cvTable>

           <saw:cvRow>

              <saw:cvCell viewName="narrativeView!5">

                 <saw:displayFormat>

                    <saw:formatSpec hAlign="left"/></saw:displayFormat></saw:cvCell></saw:cvRow></saw:cvTable></saw:view>

     <saw:view xsi:type="saw:tableView" name="tableView!1" scrollingEnabled="true" autoPreview="false">

        <saw:edges>

           <saw:edge axis="page" showColumnHeader="true"/>

           <saw:edge axis="section"/>

           <saw:edge axis="row" showColumnHeader="true">

              <saw:edgeLayers>

                 <saw:edgeLayer type="column" columnID="c9ad74745af4b8295"/>

                 <saw:edgeLayer type="column" columnID="c147df6ca9ef0f404"/>

                 <saw:edgeLayer type="column" columnID="c8507e33c85a60e49"/>

                 <saw:edgeLayer type="column" columnID="c78598ce2e8dde16e"/>

                 <saw:edgeLayer type="column" columnID="cb6066ae41b3498cf"/>

                 <saw:edgeLayer columnID="cb6066ae41b3498cf_d1" type="column"/>

                 <saw:edgeLayer type="column" columnID="c6d07682e90d7f915"/>

                 <saw:edgeLayer type="column" columnID="cf2aadb6b5e823ef3"/>

                 <saw:edgeLayer type="column" columnID="c465ed0acc86fed2f"/>

                 <saw:edgeLayer type="column" columnID="c9e336f5a37da0404"/>

                 <saw:edgeLayer type="column" columnID="cfe1bf947284f40f8"/>

                 <saw:edgeLayer type="column" columnID="c3b78607c9b518bf2"/>

                 <saw:edgeLayer type="column" columnID="caab4f0128a8bbbbd"/>

                 <saw:edgeLayer type="column" columnID="c2c8d60d34b28271e"/></saw:edgeLayers></saw:edge>

           <saw:edge axis="column" showColumnHeader="rollover"/></saw:edges></saw:view>

     <saw:view xsi:type="saw:narrativeView" name="narrativeView!5">

        <saw:viewCaption>

           <saw:caption>

              <saw:text>Initiiate Exit Formalities for Subordinate</saw:text></saw:caption></saw:viewCaption>

        <saw:narrative>

           <saw:caption fmt="text">

              <saw:text>Hi @{c78598ce2e8dde16e},[br/][br/]


One of your subordinate @{cb6066ae41b3498cf_d1} has decided to leave the organization.[br/][br/]


Last Working Day is @{c465ed0acc86fed2f}[br/][br/]


As such, you are requested to initiate exit formalities.[br/][br/]


Details about the exit process can be found below:[br/][br/]


http://www.mycompany.com/exitformalities[br/][br/]


Kind Regards,[br/]

HR Team</saw:text></saw:caption></saw:narrative></saw:view></saw:views></saw:report>

 

Issued SQL is as below:

Issued SQL

SET VARIABLE PREFERRED_CURRENCY='User Preferred Currency 1';SELECT

  0 s_0,

  "Workforce Management - Worker Assignment Event Real Time"."Assignment Event Details"."Action Code" s_1,

  "Workforce Management - Worker Assignment Event Real Time"."HR Action"."Action Description" s_2,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Email Address" s_3,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Gender" s_4,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Individual Title" s_5,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Name" s_6,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Manager E-Mail Address" s_7,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Manager Name" s_8,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Manager Person Number" s_9,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Manager Type" s_10,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Person Number" s_11,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Termination Date" s_12,

  CASE WHEN "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Gender" ='Male' THEN 'His' ELSE 'Her' END s_13,

  DESCRIPTOR_IDOF("Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Gender") s_14

FROM "Workforce Management - Worker Assignment Event Real Time"

WHERE

(("Worker"."Manager Person Number" IS NOT NULL) AND ("Worker"."Termination Date" IS NOT NULL) AND ("Worker"."Manager Type" = 'LINE_MANAGER') AND ("Assignment Event Details"."Action Code" = 'RESIGNATION') AND ("Worker"."Termination Date" BETWEEN timestampadd(SQL_TSI_DAY,-1,CURRENT_DATE) AND (CURRENT_DATE)))

ORDER BY 1, 12 ASC NULLS LAST, 14 ASC NULLS LAST, 5 ASC NULLS LAST, 15 ASC NULLS LAST, 6 ASC NULLS LAST, 4 ASC NULLS LAST, 10 ASC NULLS LAST, 9 ASC NULLS LAST, 11 ASC NULLS LAST, 7 ASC NULLS LAST, 8 ASC NULLS LAST, 13 ASC NULLS LAST, 2 ASC NULLS LAST, 3 ASC NULLS LAST

FETCH FIRST 75001 ROWS ONLY

 

Creating a Narrative View

Once we have created the OTBI Analysis we now need to create a Narrative View.

For this we would need to navigate to the “Results” section of analysis and choose

New View->Other Views -> Narrative

 

 

Next we need to define the narrative view and it is as follows:

Narrative View Template

Hi @7,[br/][br/]


One of your subordinate @9 has decided to leave the organization.[br/][br/]


@2 last working day is @12[br/][br/]


As such, you are requested to initiate exit formalities.[br/][br/]


Details about the exit process can be found below:[br/][br/]


http://www.mycompany.com/exitformalities[br/][br/]


Kind Regards,[br/]

HR Team

 

@7 means that the value of 7th Column from Analysis should be dynamically placed

[br/] is for line break

 

Creating Agent

Now that we have created the Analysis and Narrative View we would need to create an agent.

We would select the delivery content to be delivered directly and would also assign an Subject to Email Notification : ‘Initiate Exit Formalities for Your Subordinateand also assign a recipient email id (as shown)

Once done we should save the agent.

 

Running the Agent and Verifying the results

As a last step we would need to run the agent and verify results.


Capturing Transactional Changes Using an OTBI Analysis

$
0
0

Introduction

Till now we have seen how to fetch changes made in the HCM Cloud Application using Changes Only HCM Extracts, but the solution is currently only limited to HCM specific modules as Extract Functionality does not exist for other ERP Modules ( SCM , FIN, PRC…..etc) and this limitation is currently resolved by using BIP Reports where a comparison is made between the previous and current state of data using a SQL query. While some of the times this is easy and straight forward in some cases fetching such data might be really difficult and might need a high level of technical expertise ( knowledge about Database Tables, Joins, Key-Columns, Foreign-Columns etc). As such, an easy solution is desired.

OTBI Analysis could be a viable option.

Some of the most important reasons for which OTBI seems to take lead over other tools are:

  1. OTBI Analysis can be used for all modules unlike HCM Extracts which is currently only available for HCM Modules

  2. OTBI Analysis takes care of inherent security aspects. Logged in users only view the data they are entitled to.

  3. Creating an OTBI Analysis is comparatively easy to create and use. Even Business Users/Functional Users can create Analysis

So now let us try to create an OTBI Analysis which would show us the assignment data details of an employee.

We would name this Analysis as WorkerAssignmentPreviousAndCurrentValues

Using TOPN Clause within Logical SQL to Compare Records

Top-N queries are queries that limit the result to a specific number of rows. These are often queries for the most recent or the “best” entries of a result set. Top-N queries provide a method for limiting the number of rows returned from ordered sets of data. They are extremely useful when you want to return the top or bottom "N" number of rows from a set or when you are paging through data

For more details on TOPN Queries please refer below links:

https://oracle-base.com/articles/misc/top-n-queries

http://use-the-index-luke.com/sql/partial-results/top-n-queries

The most important trick in such comparison analysis is to have two records to be fetched at same time which should be rearranged in a same row. One pre-requisite or limitation of applying such logic is that the subject area folders which would be used should have Effective Start Date and Effective End Date fields. We would only fetch the records with latest effective start date (top 2 records)

Code snippet below:

TOPN(RCOUNT("Worker"."Person Number"),2) <= 2

GROUP BY "Worker"."Person Number"

Here we are grouping the records by Person Number and also ensuring that only the first two rows are picked.

For this example we would create a Analysis using “Workforce Management – Work Assignment Event Real Time” Subject Area.

Analysis XML

<saw:report xmlns:saw="com.siebel.analytics.web/report/v1.1" xmlns:sawx="com.siebel.analytics.web/expression/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlVersion="201201160">   

  <saw:criteria xsi:type="saw:customizedSqlCriteria">      

     <saw:columns>         

        <saw:column xsi:type="saw:regularColumn" columnID="c6351201e9882e8fe">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">a</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>a</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Person Number</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c21efaecba64ed0ef">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">a1</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>a1</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Name</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="ca5d5a544d6f85ca5">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">d</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>d</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Date</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c07edd4d1cf51ffdd">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">b</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>b</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Action Name</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="ce3838fb076faa39c">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">f</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>f</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Business Unit(C)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c4aa462ca4db1af39">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">h</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>h</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Department(C)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="cec551b937a3dfd35">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">j</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>j</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Grade(C)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="cf63cb9f433a40cbb">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">l</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>l</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Job(C)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c7ba4d2d7daa3b212">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">n</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>n</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Location(C)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c6dd4901a16087df5">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">p</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>p</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Position(C)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c63e6f64fa85c1eb1">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">e</sawx:expr></saw:columnFormula>            

           <saw:displayFormat>               

              <saw:formatSpec visibility="hidden" suppress="suppress" wrapText="true"/></saw:displayFormat>            

           <saw:columnHeading>               

              <saw:displayFormat>                  

                 <saw:formatSpec/></saw:displayFormat></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="cc2f18ae2cf60f229">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">c</sawx:expr></saw:columnFormula>            

           <saw:displayFormat>               

              <saw:formatSpec visibility="hidden" suppress="suppress" wrapText="true"/></saw:displayFormat>            

           <saw:columnHeading>               

              <saw:displayFormat>                  

                 <saw:formatSpec/></saw:displayFormat></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c08af9ef875738f7e">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">g</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>g</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Business Unit(P)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c476b87af7f90c1a0">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">i</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>i</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Department(P)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c11a0ff0cf371ddf9">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">k</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>k</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Grade(P)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c6491e937d38b008a">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">m</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>m</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Job(P)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="c5b42f9e4dbf761cc">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">o</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>o</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Location(P)</saw:text></saw:caption></saw:columnHeading></saw:column>         

        <saw:column xsi:type="saw:regularColumn" columnID="caab28424888e5441">            

           <saw:columnFormula>               

              <sawx:expr xsi:type="sawx:sqlExpression">q</sawx:expr></saw:columnFormula>            

           <saw:tableHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>q</saw:text></saw:caption></saw:tableHeading>            

           <saw:columnHeading>               

              <saw:caption fmt="text">                  

                 <saw:text>Position(P)</saw:text></saw:caption></saw:columnHeading></saw:column>

        <saw:column columnID="c47be942a081c1d8d" xsi:type="saw:regularColumn">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN IFNULL(f,'-1')=IFNULL(g,'-1') THEN 'N' ELSE 'Y' END</sawx:expr></saw:columnFormula>

           <saw:tableHeading>

              <saw:caption fmt="text">

                 <saw:text>BUChanged</saw:text></saw:caption></saw:tableHeading>

           <saw:columnHeading>

              <saw:caption fmt="text">

                 <saw:text>HasBUChanged</saw:text></saw:caption></saw:columnHeading></saw:column>

        <saw:column columnID="c893cf40fe0b09b5e" xsi:type="saw:regularColumn">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN IFNULL(h,'-1')=IFNULL(i,'-1') THEN 'N' ELSE 'Y' END</sawx:expr></saw:columnFormula>

           <saw:tableHeading>

              <saw:caption fmt="text">

                 <saw:text>DeptChanged</saw:text></saw:caption></saw:tableHeading>

           <saw:columnHeading>

              <saw:caption fmt="text">

                 <saw:text>HasDeptChanged</saw:text></saw:caption></saw:columnHeading></saw:column>

        <saw:column columnID="c847416921afa242d" xsi:type="saw:regularColumn">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN IFNULL(j,'-1')=IFNULL(k,'-1') THEN 'N' ELSE 'Y' END</sawx:expr></saw:columnFormula>

           <saw:tableHeading>

              <saw:caption fmt="text">

                 <saw:text>GradeChanged</saw:text></saw:caption></saw:tableHeading>

           <saw:columnHeading>

              <saw:caption fmt="text">

                 <saw:text>HasGradeChanged</saw:text></saw:caption></saw:columnHeading></saw:column>

        <saw:column columnID="cb24eaa7157b6660b" xsi:type="saw:regularColumn">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN IFNULL(l,'-1')=IFNULL(m,'-1') THEN 'N' ELSE 'Y' END</sawx:expr></saw:columnFormula>

           <saw:tableHeading>

              <saw:caption fmt="text">

                 <saw:text>JobChanged</saw:text></saw:caption></saw:tableHeading>

           <saw:columnHeading>

              <saw:caption fmt="text">

                 <saw:text>HasJobChanged</saw:text></saw:caption></saw:columnHeading></saw:column>

        <saw:column columnID="c1d123a414251cb0f" xsi:type="saw:regularColumn">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN IFNULL(n,'-1')=IFNULL(o,'-1') THEN 'N' ELSE 'Y' END</sawx:expr></saw:columnFormula>

           <saw:tableHeading>

              <saw:caption fmt="text">

                 <saw:text>LocationChanged</saw:text></saw:caption></saw:tableHeading>

           <saw:columnHeading>

              <saw:caption fmt="text">

                 <saw:text>HasLocationChanged</saw:text></saw:caption></saw:columnHeading></saw:column>

        <saw:column columnID="c08f1965f35f9c452" xsi:type="saw:regularColumn">

           <saw:columnFormula>

              <sawx:expr xsi:type="sawx:sqlExpression">CASE WHEN IFNULL(p,'-1')=IFNULL(q,'-1') THEN 'N' ELSE 'Y' END</sawx:expr></saw:columnFormula>

           <saw:tableHeading>

              <saw:caption fmt="text">

                 <saw:text>PositionChanged</saw:text></saw:caption></saw:tableHeading>

           <saw:columnHeading>

              <saw:caption fmt="text">

                 <saw:text>HasPositionChanged</saw:text></saw:caption></saw:columnHeading></saw:column></saw:columns>      

     <saw:from>(

SELECT A.A_3 a, A.A_3A a1,

A.A_1 b,B.B_1 c,

A.A_2 d, B.B_2 e,

A.A_11 f,B.B_11 g,

A.A_12 h, B.B_12 i,

A.A_13 j, B.B_13 k,

A.A_14 l, B.B_14 m,

A.A_15 n, B.B_15 o,

A.A_16 p, B.B_16 q

FROM

(SELECT

  0 A_0,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Person Number" A_3,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Name" A_3A,

  "Workforce Management - Worker Assignment Event Real Time"."Time"."Date" A_2,

  "Workforce Management - Worker Assignment Event Real Time"."HR Action"."Action Name" A_1,  

  RCOUNT(1) A_4,

  "Workforce Management - Worker Assignment Event Real Time"."Business Unit"."Business Unit Name" A_11,

  "Workforce Management - Worker Assignment Event Real Time"."Department"."Department Name" A_12,

  "Workforce Management - Worker Assignment Event Real Time"."Grade"."Grade Name" A_13,

  "Workforce Management - Worker Assignment Event Real Time"."Job"."Job Name" A_14,

  "Workforce Management - Worker Assignment Event Real Time"."Location"."Worker Location Name" A_15,

  "Workforce Management - Worker Assignment Event Real Time"."Position"."Position Name" A_16

FROM "Workforce Management - Worker Assignment Event Real Time"

WHERE

TOPN(RCOUNT("Worker"."Person Number"),2) &lt;= 2

GROUP BY "Worker"."Person Number"

) A,


(SELECT

  0 B_0,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Person Number" B_3,

  "Workforce Management - Worker Assignment Event Real Time"."Time"."Date" B_2,

  "Workforce Management - Worker Assignment Event Real Time"."HR Action"."Action Name" B_1,

  RCOUNT(1) B_4,

  "Workforce Management - Worker Assignment Event Real Time"."Business Unit"."Business Unit Name" B_11,

  "Workforce Management - Worker Assignment Event Real Time"."Department"."Department Name" B_12,

  "Workforce Management - Worker Assignment Event Real Time"."Grade"."Grade Name" B_13,

  "Workforce Management - Worker Assignment Event Real Time"."Job"."Job Name" B_14,

  "Workforce Management - Worker Assignment Event Real Time"."Location"."Worker Location Name" B_15,

  "Workforce Management - Worker Assignment Event Real Time"."Position"."Position Name" B_16

FROM "Workforce Management - Worker Assignment Event Real Time"

WHERE

TOPN(RCOUNT("Worker"."Person Number"),2) &lt;= 2

GROUP BY "Worker"."Person Number"


) B

WHERE A.A_4 = (B.B_4+1)

AND A.A_3 = B.B_3

) tj</saw:from>      

     <saw:columnOrder/></saw:criteria>   

  <saw:views currentView="0">      

     <saw:view xsi:type="saw:compoundView" name="compoundView!1">         

        <saw:cvTable>            

           <saw:cvRow>               

              <saw:cvCell viewName="titleView!1">                  

                 <saw:displayFormat>                     

                    <saw:formatSpec/></saw:displayFormat></saw:cvCell></saw:cvRow>            

           <saw:cvRow>               

              <saw:cvCell viewName="tableView!1">                  

                 <saw:displayFormat>                     

                    <saw:formatSpec/></saw:displayFormat></saw:cvCell></saw:cvRow></saw:cvTable></saw:view>      

     <saw:view xsi:type="saw:titleView" name="titleView!1"/>      

     <saw:view xsi:type="saw:tableView" name="tableView!1" scrollingEnabled="false">         

        <saw:edges>            

           <saw:edge axis="page" showColumnHeader="true"/>            

           <saw:edge axis="section"/>            

           <saw:edge axis="row" showColumnHeader="true">               

              <saw:edgeLayers>                  

                 <saw:edgeLayer type="column" columnID="c6351201e9882e8fe"/>                  

                 <saw:edgeLayer type="column" columnID="c21efaecba64ed0ef"/>                  

                 <saw:edgeLayer type="column" columnID="ca5d5a544d6f85ca5"/>                  

                 <saw:edgeLayer type="column" columnID="c07edd4d1cf51ffdd"/>                  

                 <saw:edgeLayer type="column" columnID="ce3838fb076faa39c"/>                  

                 <saw:edgeLayer type="column" columnID="c4aa462ca4db1af39"/>                  

                 <saw:edgeLayer type="column" columnID="cec551b937a3dfd35"/>                  

                 <saw:edgeLayer type="column" columnID="cf63cb9f433a40cbb"/>                  

                 <saw:edgeLayer type="column" columnID="c7ba4d2d7daa3b212"/>                  

                 <saw:edgeLayer type="column" columnID="c6dd4901a16087df5"/>                  

                 <saw:edgeLayer type="column" columnID="c63e6f64fa85c1eb1"/>                  

                 <saw:edgeLayer type="column" columnID="cc2f18ae2cf60f229"/>                  

                 <saw:edgeLayer type="column" columnID="c08af9ef875738f7e"/>                  

                 <saw:edgeLayer type="column" columnID="c476b87af7f90c1a0"/>                  

                 <saw:edgeLayer type="column" columnID="c11a0ff0cf371ddf9"/>                  

                 <saw:edgeLayer type="column" columnID="c6491e937d38b008a"/>                  

                 <saw:edgeLayer type="column" columnID="c5b42f9e4dbf761cc"/>                  

                 <saw:edgeLayer type="column" columnID="caab28424888e5441"/>

                 <saw:edgeLayer type="column" columnID="c47be942a081c1d8d"/>

                 <saw:edgeLayer type="column" columnID="c893cf40fe0b09b5e"/>

                 <saw:edgeLayer type="column" columnID="c847416921afa242d"/>

                 <saw:edgeLayer type="column" columnID="cb24eaa7157b6660b"/>

                 <saw:edgeLayer type="column" columnID="c1d123a414251cb0f"/>

                 <saw:edgeLayer type="column" columnID="c08f1965f35f9c452"/></saw:edgeLayers></saw:edge>            

           <saw:edge axis="column" showColumnHeader="rollover"/></saw:edges></saw:view></saw:views></saw:report>

 

And the SQL Issued is:

Issued SQL

SET VARIABLE PREFERRED_CURRENCY='User Preferred Currency 1';SELECT a saw_0, a1 saw_1, d saw_2, b saw_3, f saw_4, h saw_5, j saw_6, l saw_7, n saw_8, p saw_9, e saw_10, c saw_11, g saw_12, i saw_13, k saw_14, m saw_15, o saw_16, q saw_17, CASE WHEN IFNULL(f,'-1')=IFNULL(g,'-1') THEN 'N' ELSE 'Y' END saw_18, CASE WHEN IFNULL(h,'-1')=IFNULL(i,'-1') THEN 'N' ELSE 'Y' END saw_19, CASE WHEN IFNULL(j,'-1')=IFNULL(k,'-1') THEN 'N' ELSE 'Y' END saw_20, CASE WHEN IFNULL(l,'-1')=IFNULL(m,'-1') THEN 'N' ELSE 'Y' END saw_21, CASE WHEN IFNULL(n,'-1')=IFNULL(o,'-1') THEN 'N' ELSE 'Y' END saw_22, CASE WHEN IFNULL(p,'-1')=IFNULL(q,'-1') THEN 'N' ELSE 'Y' END saw_23 FROM (

SELECT A.A_3 a, A.A_3A a1,

A.A_1 b,B.B_1 c,

A.A_2 d, B.B_2 e,

A.A_11 f,B.B_11 g,

A.A_12 h, B.B_12 i,

A.A_13 j, B.B_13 k,

A.A_14 l, B.B_14 m,

A.A_15 n, B.B_15 o,

A.A_16 p, B.B_16 q

FROM

(SELECT

  0 A_0,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Person Number" A_3,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Employee Name" A_3A,

  "Workforce Management - Worker Assignment Event Real Time"."Time"."Date" A_2,

  "Workforce Management - Worker Assignment Event Real Time"."HR Action"."Action Name" A_1,  

  RCOUNT(1) A_4,

  "Workforce Management - Worker Assignment Event Real Time"."Business Unit"."Business Unit Name" A_11,

  "Workforce Management - Worker Assignment Event Real Time"."Department"."Department Name" A_12,

  "Workforce Management - Worker Assignment Event Real Time"."Grade"."Grade Name" A_13,

  "Workforce Management - Worker Assignment Event Real Time"."Job"."Job Name" A_14,

  "Workforce Management - Worker Assignment Event Real Time"."Location"."Worker Location Name" A_15,

  "Workforce Management - Worker Assignment Event Real Time"."Position"."Position Name" A_16

FROM "Workforce Management - Worker Assignment Event Real Time"

WHERE

TOPN(RCOUNT("Worker"."Person Number"),2) <= 2

GROUP BY "Worker"."Person Number"

) A,


(SELECT

  0 B_0,

  "Workforce Management - Worker Assignment Event Real Time"."Worker"."Person Number" B_3,

  "Workforce Management - Worker Assignment Event Real Time"."Time"."Date" B_2,

  "Workforce Management - Worker Assignment Event Real Time"."HR Action"."Action Name" B_1,

  RCOUNT(1) B_4,

  "Workforce Management - Worker Assignment Event Real Time"."Business Unit"."Business Unit Name" B_11,

  "Workforce Management - Worker Assignment Event Real Time"."Department"."Department Name" B_12,

  "Workforce Management - Worker Assignment Event Real Time"."Grade"."Grade Name" B_13,

  "Workforce Management - Worker Assignment Event Real Time"."Job"."Job Name" B_14,

  "Workforce Management - Worker Assignment Event Real Time"."Location"."Worker Location Name" B_15,

  "Workforce Management - Worker Assignment Event Real Time"."Position"."Position Name" B_16

FROM "Workforce Management - Worker Assignment Event Real Time"

WHERE

TOPN(RCOUNT("Worker"."Person Number"),2) <= 2

GROUP BY "Worker"."Person Number"


) B

WHERE A.A_4 = (B.B_4+1)

AND A.A_3 = B.B_3

) tj ORDER BY saw_0, saw_1, saw_2, saw_3, saw_4, saw_5, saw_6, saw_7, saw_8, saw_9, saw_10, saw_11, saw_12, saw_13, saw_14, saw_15, saw_16, saw_17, saw_18, saw_19, saw_20, saw_21, saw_22, saw_23

 

When we view the OTBI Results section it looks as below:

 

The above analysis clearly captures the various transactional changes of an Assignment Record for an employee but we would try to enhance the same by highlighting those data fields which have undergone a change. OTBI analysis currently has a limitation wherein it cannot apply conditional formatting on one field say (FIELD1) based on the value of second field say (FIELD2) of the same row (ROW1).

In order to overcome this limitation we would need to create a BI Data Model from the Analysis and then apply conditional formatting on the following fields:

  1. Business Unit (C)

  2. Department (C)

  3. Grade (C)

  4. Job (C)

  5. Location (C)

  6. Position (C )

Whenever the data value of the above mentioned fields would be different from the old values the data value would be highlighted in yellow.

We would create a data model based on the OTBI Analysis (snapshot below)

 

And when we run the report it appears as below:

Configuring Parallel Approval In Oracle HCM Cloud

$
0
0

Introduction

Usually, most of the times the approval flow followed is sequential in nature meaning one individual approves and then it goes to the 2nd approver and the process continues till the final approver has approved the transaction. But many a times there is a need to send parallel approval notifications for a specific transaction where-in all the approvers get notification at the same time and the moment one of the responders approves then the transaction gets completed.

A theoretical explanation is provided in attached meta-link note:

Fusion Global HR: How to Configure Parallel Approval Rel 10 (Doc ID 2081545.1)

In this article, we would simply follow the steps and verify if we can achieve the same using an example.

For this example we would try to make a location change for an individual and check whether parallel notifications are send. For this, we would need to perform the following pre-requisite tasks:

  1. Identify the Job Role which controls the “Change Location Action”

A quick search on MOS (My Oracle Support) reveals that 'Business Unit Selection Duty' Duty Role is required to approve Change Location Action Transaction. The delivered Job Role “Human Resource Specialist” has this duty role attached to it.

  1. Make a custom Job Role from the seeded Job Role (‘Human Resource Specialist’ for our example)

We will make a Custom Job Role by using following steps:

Security Console-> Human Resource Specialist -> Copy Role Option from dropdown

 

Once the above steps are completed a request will be submitted

We can navigate to the Authorization Tab and move to Role Copy Status to find the status of the operation

 

Once done we need to run the below ESS Scheduled Processes:

  1. Send Pending LDAP Requests

  2. Retrieve Latest LDAP Changes

 

And once the jobs are successfully executed we would be able to find the Custom Role

 

At this point we should perform a Compare Roles operation between the delivered roles and the custom created roles and the different ways in which this comparison can be done is detailed below:

  1. All

Displays the comparsion result after comparing all the features of both the roles

  1. Only In First Role

Displays the features which are only present in First Role and not in second

  1. Only in Second Role

Displays the features which are only present in Second Role and not in First

  1. In Both Roles

Common Features present in both the roles

 

This can be easily illustrated with the help of below table

Compare Roles

All

Only in First Role

Only in Second Role

In Both Roles

 

Remember we have already attached the custom job role to the users whom we want to include in Parallel Approval.

Next we would need to create a custom HCM Data Role

Creating a Custom HCM Data Role

We would need to navigate to “Assign Security Profiles To Role” task in Setup and Maintenance and create a custom Data Role

Making Changes to Change Location Approval Rule

We would need to navigate to “Manage Approval Transactions for Human Capital Management” Task under Setup and Maintenance and configure Approval Rules for “Change Location” Transaction

Screenshot below explains the new rule clearly

 

Initiating Change Location Transaction

Now since we have completed all the configuration related steps, we may proceed with performing a “Change Location” Transaction.

We would try to change the location of Christelle, Stevenson (Person# 1007) and we would initiate the Transaction using the Person Gallery Option (from ANTONIO.SANTOS who is the Supervisor of Christelle)

 

We will now submit the transaction and verify if the approval notification has gone to all users who have the Application Data Role “Human Resource Specialist Change Location Parallel Approval” assigned to them.

Application Data Role: Human Resource Specialist Change Location Parallel Approval

Assigned User 1

ALBERT.THOMSON

Assigned User 2

CATHY.BETTY

Assigned User 3

DEREK.FRANZ

Assigned User 4

GARY.THAY

 

Now once we approve this transaction from any of these users (say CATHY.BETTY in this case) by clicking on the ‘CLAIM’ option the notification will no longer be available for action for other users.

 

Once “CATHY.BETTY’ has taken action on this transaction we try to login with “GARY.THAY” who is also a user who holds parallel approval rights on this transaction and try to search for this notification:

 

Inference / Summary

So this is how we can configure Parallel Approval in Oracle HCM Cloud Environment thereby ensuring multiple users get notification for a single transaction at a same time and the moment nay of them takes action on the transaction the notification is no longer available to other approvers (in short FIRST RESPONDER wins scenario)

Introduction to Oracle ADF- Demo

$
0
0

The Oracle Application Development Framework (Oracle ADF) is an end-to-end application framework built on Java Platform, J2EE standards and open-source technologies. Oracle ADF and JDeveloper 11g gives you an environment that covers the full development lifecycle from design to deployment, with drag-and-drop and wizard driven development, visual UI design, and many more features built in to ease large application development.
ADF follows the proven, industry wide accepted Model-View-Controller (MVC) architecture. ADF extends this MVC to one more layer - Business Service. Each layer in ADF has distinct role and specific responsibility.

 

Introduction to Oracle ADF

 

Enrol Now for Oracle ADF Training

Fusion Procurement Introduction

$
0
0

This Oracle Procurement Cloud: Procurement Implementation training covers mandatory tasks that need to be performed once the system has been installed and provisioned for your use.

  1. Navigate the application and the new setup manager.

  2. Configure components for creating and maintaining Oracle Procurement Cloud.

  3. Describe the Oracle Procurement Cloud security methodology.

  4. Perform basic Procurement Cloud catalog content setup.

  5. Set up business units for use in Procurement Cloud.

  6. Perform required Oracle Procurement Cloud Purchasing configurations that support all Procurement Cloud applications.

Fusion Procurement Introduction

 

 

 Enroll for Fusion Procurement Training

An Overview of HCM Spreadsheet Data Loader

$
0
0

Introduction

There are many ways of loading data into Oracle HCM Cloud Application including:

  1. UI Data Entry

  2. HCM Data Loader

  3. Webservices

  4. Spreadsheet Data Loader

Each one of them has there own set of advantages and disadvantages, but in this specific article we would concentrate on Spreadsheet Data Loader.

We would start with the various advantages and disadvantages of HSDL and then follow it up with a practical example of trying to load a sample record for Worker object.

Advantages of Using HCM Spreadsheet Data Loader

  1. Ease of Use

Excel has been the preferred application for performing any edits/updates/corrections ever since its evolution. It continues to remain so till date. Easy to use and comfortable to operate upon

  1. Feasibility of Generating Tailor Made Templates

Starting Release 12 one can create own tailor made templates and try to upload data. For example, one can add/remove attributes, change the order, even the label too and try to load data. For example one may which to only include the minimum no of attributes required to load Worker data and move ahead

  1. Periodic Uploads Allows Upload of large data volumes

One of the most common limitations while working with Excel Spreadsheets is the record counts. Whenever the record are greater than 65K then the spreadsheet doesn’t function properly. HSDL allows periodic upload of data to Stage Tables which can than be loaded into application tables in bulk thereby giving a workaround to this problem

  1. Records Created by HSDL can be maintained using HDL

A record created by HSDL can edited/modified using .dat format (basically HDL can be used too)

  1. One Single Entry as Compared to Multiple Entries

When one uses HDL say for Worker.dat one has to populate multiple METADATA lines , while using HSDL there is one single row where in you populate the data and you are done. No need to worry about multiple child elements as all mandatory columns can be added to a template and you can populate one single row which takes care of everything

  1. Input Values can be validated against LOVs

When we work with HDL we need to be pretty sure about the data values provided as there is no validation on the entered data. HSDL allows using Lookups/Value sets so one can pick values from drop down lists thereby ensuring that data errors would be minimal

  1. Interactive (Load Status and Errors Encountered displayed on sheet)

The status of the load along with the exact error is displayed on the spreadsheet itself. So the end-user knows the cause of error and can make corrections

But with all these advantages HSDL this does not means that HSDL does not has any limitation. There are some restrictions which one has to live with whenever one uses HSDL. We would take a look at those points too.

 

Limitations of Using HCM Spreadsheet Data Loader

  1. DELETE Operation is Not Supported

As of release 12 HSDL does not supports DELETE but lets hope this feature would also be added in upcoming release.

  1. Images and Attachments Cannot Be Uploaded

As of current release (Release 12) images and attachments cannot be uploaded using HSDL

  1. Source Keys are not supported

Objects loaded via Spreadsheet loader have default source keys. So if one intends to maintain such records using HDL (.dat files) one needs to use user keys.

So that’s it from the advantages and limitations part of HSDL. We would now try to have a look at the pre-requisite to use HSDL.

Pre-requisite for using HSDL

  1. Roles or Privileges Required

Individuals should have Human Capital Management Integration Specialist Role to use HCM Spreadsheet Data Loader

  1. HCM Data Loader Scope should be set to FULL

The value of the Attribute HCM Data Loader scope under (Navigator->Tools->Setup and Maintenance->Configure HCM Data Loader) should be set to FULL. For all new customers starting release 10 this attribute is defaulted to FULL

  1. Setting up Desktop Integration for Excel

One would need to navigate to Navigator->Tools-> Download ADF Desktop Integrator. Once downloaded run the installer (adfdi-excel-addin-installer.exe)

Once we have the pre-requisite setup we may proceed with starting the HCM Spreadsheet Data Loader data upload.

Spreadsheet Data Loader Data Upload Procedure

The high level steps are below:

  1. Generate a spreadsheet from a spreadsheet template for a specific business object using the below navigation.

Navigator->Data Exchange-> Run Spreadsheet Data Loader

  1. Once you click on the link then you would be asked to login to the application using your credentials and click on Create Data Set

  2. Enter data in the spreadsheet and click upload. This action uploads data from spreadsheet to HCM Data loader stage tables.

  3. Some validation occurs in the stage tables. Any import errors are reported in the Progress and Message columns of the Spreadsheet Line Status section of the spreadsheet when you click Refresh. Errors at this stage are rare, as the spreadsheet format enforces business-object structure and rules

  4. As each object loads successfully to the stage tables, HCM Data Loader calls the relevant object service to load the object to the application tables

  5. The object service validates the object. Any errors are reported in the Progress and Message columns of the Spreadsheet Line Status section of the spreadsheet when you click Refresh

  6. You correct any import or load errors in the spreadsheet and click Upload again. This action imports the corrected data to the stage tables again

One can review the status of an HCM Spreadsheet Data Loader data set on the HCM Data Loader Import and Load Data page. Search for data sets by file type to list those loaded from spreadsheets.

For more detailed info on Spreadsheet Loaders and associated concepts please read through the product documentation guide available here.

We would now proceed with performing a demonstration on how to load a Worker Record using HCM Spreadsheet Data Loader.

Worked Out Example

We will use the worker template (XML below which can be imported in any Cloud Environment)

And once we populate the data value we would see the success message as shown below:

This data set can be viewed on Data Exchange -> Initiate and Load Data

 

A quick search for Person#89743 in Person Management further confirms that the Person Record got successfully created.

.

Viewing all 930 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>