Professional Documents
Culture Documents
2 Advances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.1 AdvancesAccumulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.2 AdvancesEligibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.3 NonRecurringPayment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3 Apprentice Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.1 Apprentice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
3.2 ApprenticeEventType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.3 ApprenticeInternalTrainingEvent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.4 ApprenticePracticalTrainingEvent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
3.5 ApprenticeSchool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.6 ApprenticeSchoolEvent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5 Deductions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1 DeductionScreenId. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2 OneTimeDeduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.3 RecurringDeduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6 Employment Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.1 EmpBeneficiary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2 EmpCompensation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
empCompensationCalculated. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
empCompensationGroupSumCalculated. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
6.3 EmpEmployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.4 EmpEmploymentTermination. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.5 EmpGlobalAssignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.6 EmpJob. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
6.7 EmpJobRelationships. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.8 EmpPensionPayout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.9 EmpWfRequest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
6.10 EmpWorkPermit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
11 Payroll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
11.1 DataReplicationProxy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
11.2 EmployeePayrollRunResults. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
EmployeePayrollRunResultsItems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
11.3 PayrollDataMaintenanceTask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
11.4 PayrollDataMaintenanceTaskConfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
11.5 PayrollSystemConfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
11.6 SAPSystemConfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
15 Workflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
15.1 WfRequest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
How do I access my assigned workflow requests?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
15.2 WfRequestComments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .504
15.3 WfRequestParticipator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
15.4 WfRequestStep. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
15.5 WfRequestUIData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
15.6 WorkflowAllowedActionList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
17 FAQs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .554
17.1 Admin Access to OData: What does it mean?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .554
17.2 API: Do I use OData or Compound Employee API for EC entities?. . . . . . . . . . . . . . . . . . . . . . . . . . . . .554
17.3 APIs are missing or not up-to-date in the OData API Data Dictionary?. . . . . . . . . . . . . . . . . . . . . . . . . 555
17.4 Authentication Types: Which one is right for me?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Authentication for OData API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
17.5 Broken APIs: What causes them?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
17.6 Duplicate Records? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
17.7 Error message: Behavior in upsert statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
17.8 Expanded entities: Handling deleted objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
17.9 How to have more than one pay component on the same pay date. . . . . . . . . . . . . . . . . . . . . . . . . . . .572
17.10 Inactive users: Do EC OData APIs ignore them?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
17.11 Linking to custom MDF objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572
17.12 Performance: How to improve it. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
17.13 Roundtrips: Why are there errors in some upserts?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
17.14 Side effect: What is it?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
17.15 $batch: Upsert and changeset behavior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
Upsert parameter: strictTransactionIsolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
17.16 $filter: How does it work with fromDate?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
This document describes changes to this guide for the recent releases.
Q2 2019
The following table summarizes changes to this guide for this release.
WfRequestUIData is now available as We have made the WfRequestUIData WfRequestUIData [page 508]
a public entity. enity available in the public cateogry.
Now you can query workflow data as dis
played on the Workflow Details page by
directly expanding to the entity through
wfRequestUINav. This makes it pos
sible to navigate to the Workflow Details
page from other places through OData
API, such as the TodoEntryV2 entity.
The following table summarizes changes to this guide for this release.
Updated the topic to include more query You can specify the lastModifiedDateTime and $filter [page
behaviors and examples lastModifiedDateTime field in a 45]
filter to query effective dated records
based on the last modified date and time.
The behavior of
lastModifiedDateTime is different
depending on whether you put the
lastModifiedDateTime parameter
on the left or right.
Added BenefitEmployeeOptoutRequests This entity is used to get the worked ID BenefitEmployeeOptoutRequests [page
topic and Enrollment Opt-out details of an em 237]
ployee. This entity is used to store the en
rollment optout details for an employee.
Updated the topic with more info The topic organization has been im EmployeeDismissalProtection [page 299]
proved with more use cases and sample
codes.
Updated topic with more info The topic organization has been im EmployeeDismissalProtectionDetail
proved with more use cases and sample [page 301]
codes.
New chapter added This is an external API for Employee Cen PayrollSystemConfiguration [page 337]
tral Payroll application. This is be used by
the Employee Central Payroll System to
fetch PayrollSystemConfiguration ob
jects which can be used in new Payroll
Configuration UI, where we need to fetch
and display payroll system configuration
data, payroll data maintenance task con
figuration data and payroll portlets data.
Updated supported entities and the tool To override the standard behavior of han Expanded entities: Handling deleted ob
to use to handle deleted objects. dling deleted objects, go to Admin Center jects [page 569]
Manage Employee Central Settings, and
turn on the switch for Consider Deletion
of Expanded Entities As A Change. Sup
ported entities are: PerEmail, PerPhone,
PerAddressDEFLT, EmpJobRelations.
Updated the business key behavior Property seqNumber can be configured EmpPayCompNonRecurring [page 119]
as one of the business keys . With or
without the seqNumber property being
enabled, the business key and required
fields for the entity are different.
Updated the topic to add information on If you want to filter all history records for MCPD (Multiple Changes Per Day): Enti
how to query history records in MCPD MCPD entities, make sure to enable the ties [page 43]
entities. seqNumber property by setting
enabled="Yes" in BCUI. If
seqNumber is disabled for MCPD enti
ties, when you query history records,
only one record is returned randomly of
the day.
Q4 2018
The following table summarizes changes to this guide for this release.
Added a note in the Effective dating topic When you insert a record for an effective Effective dating [page 35]
dated entity, do not provide the end date
in your request URI.
Updated the Incremental topic Removed the NO_OVERWRITE section Incremental [page 55]
from incremental upsert parameters, be
cause it's the default behavior to not
overwrite any field that the Upsert re
quest does not include.
BenefitHyperlinkConfiguration This Object is used to capture the URL BenefitHyperlinkConfiguration [page 241]
and Label for the URL to diplay with each
Benefit. The Hyperlinks configured in
each Benefit will be displayed with Bene
fit on the employee screen.
Updated the Pagination topic The topic organization is improved. A link Pagination [page 57]
is added for you to find more information
about the pagination options you can use
for OData APIs. You can also see a list of
the optimized entities for snapshot-
based pagination.
The following table summarizes changes to this guide for this release.
External Time Data The External Time Data object contains ExternalTimeData [page 485]
recorded time data from an external sys
tem so that it can be included in the Em
ployee Central Payroll Time Sheet.
Position Right to Return The Position Right To Return object indi PositionRightToReturn [page 390]
cates whether an employee is allowed to
return to their original position after a
Leave of Absence or Global Assignment.
Updated the "lastModifiedDateTime and An example of using the "lastModifiedDa- lastModifiedDateTime and $filter [page
$filter" topic. teTime and $filter" query was added, to 45]
introduce the API behavior before and af
ter a history record is deleted.
Updated the "lastModifiedDateTime and Updated the topic to provide clearer in
multiple $filter fields" topic. formation about the API behavior when
the lastModifiedDateTime query is used
with multiple filters.
Updated the "FOLocation" topic. Added an example of using the UPSERT FOLocation [page 142]
operation.
Updated the "EmpJobRelationships" Added an example of delimiting the job EmpJobRelationships [page 101]
topic. relationship between two users.
Added the "PersonType" topic A new entity of PersonType is now availa PersonType [page 384]
ble. You can use the entity to query the
type of a user.
Added the "PersonTypeUsage" topic A new entity PersonTypeUsage is now PersonTypeUsage [page 386]
available. You can use this entity to navi
gate from PerPerson to PersonTypeUs
age.
Q2 2018
The following table summarizes changes to this guide for this release.
Time Collector Time collectors are configurable multi- TimeCollector [page 491]
purpose counters that are processed in
time valuation.
Benefit Deductible Details This object is used to capture the Benefit BenefitDeductibleDetails [page 227]
Deduction details during Benefit crea
tion.
Benefit Savings Plan Enrollment This object is used to capture the annual BenefitSavingsPlanEnrollmentDetails
and per pay period contribution amounts [page 282]
of the employee for Savings Plan benefit.
It contains the annual and per pay period
contribution amounts of the employee,
the minimum and maximum contribution
amounts.
Related Information
Welcome to the world of Employee Central OData APIs. With the help of this guide, you'll get to know what APIs we
offer, see some sample queries as well as use cases, and other information so that you can get the best out of your
Employee Central product.
With the wealth of information that your Employee Central system stores from your company’s organization, pay,
job structures, and employees, to name but a few, you’ll be able to use these OData APIs to expose the information
you need.
If you're an expert, you can skip the rest of this section and go straight to the entity that interests you. But, whether
you’re an expert or a novice, please take a minute to look at the What's New in Employee Central OData API
Reference Guide [page 9] to get up to speed on our latest developments.
If you're new to the topic of OData APIs, make sure that you have the HCM Suite OData API Programmer's Guide to
hand. These general programming guidelines walk you through the key concepts of OData including authentication,
query and operation types to name but a few.
In this guide take a look at Getting Started [page 15] to get a feel for the what and how of Employee Central OData
APIs, understand some basic concepts as well as know why an Employee Central OData APIs would be your tool of
choice. The section Getting users up and running: Permission settings [page 20]will tell you what authorizations
users need and you can see what Provisioning is required in this section here Getting users up and running:
Provisioning [page 20]
And last but not least, make sure you have the Employee Central Master to refer to for in-depth information about
our products.
If you find anything missing from this guide, don't hesitate to get in touch with us so that we can fix it:
mailto:SuccessFactorsDocumentation@sap.com
If you're new to Employee Central OData APIs, and the world of APIs in general, the information in this section may
be useful. It explains some key concepts such as what you will need to use this guide in the first place, the entities,
when to use and not to use Employee Central OData APIs as well as different user modes to name but a few.
To get the most out of this guide, you will also need the following to hand:
Note
Code samples in this guide are taken from a particular system instance. In your system, responses to queries
might be different.
The OData API dictionary contains all the entities available in your instance, it lists the allowed operations, the field
(property name), the label as well as telling you which fields are required or not. To view the OData dictionary, you:
1. Navigate to the Admin Center and search for the OData API Data Dictionary.
2. The OData API Data Dictionary is displayed.
Note
To improve performance, you can request that Customer Services activate the provisioning switch, Enable
OData API Dictionary Cache (in Web Services).
In order to get extra information, such as language labels, picklists, beyond what the standard OData metadata
provides, Successfactors OData exposes metadata as an entity
The SuccessFactors OData API exposes an entity named 'Entity'. Its properties are exposed as complex type value
embedded in the response body of 'Entity'. Different forms of metadata can thus be exposed without changing the
standard OData metadata format. You can access the new metadata just like you would access a regular entity. In
addition, it supports a simple filter to output metadata of a specific entity or a group of entities.
The following API call allows you the access the entire metadata for your instance:
https://api4.successfactors.com/odata/v2/$metadata
The following API call shows you how to access the metadata for only the User entity:
https://<hostname>/odata/v2/Entity('User')?$format=json
The following API call shows you how to access the metadata for the User and Photo entities:
https://api4.successfactors.com/odata/v2/User,Photo/$metadata
https://api4.successfactors.com/odata/v2/User,Photo/User?$format=json&$filter=userId eq
‘cgrant’
In addition to the information you can get from the OData API dictionary about an entity, the metadata will give you
information on the entities associated with the entity, picklists, relationships between the entity and other entities
and so on. To call up the metadata, use
https://<hostname>/odata/v2/Entity('<Your Entity')?$format=json.
https://<hostname>/odata/v2/$metadata
● Employee Objects
Comprises personal and employment details for employees, referred to as Person Objects and Employment
Objects in this guide.
Person objects comprise entities beginning Per*. On the UI, in the portlet Biographical Information, you'll find
Per* entities and in the portlet Personal Information, you'll find the entity PerPeronal.
Employment objects comprise entities usually beginning Emp*. On the UI, in the portlet Employment Details,
you'll find Emp* entities and in the portlet Job Information, you'll find the entities EmpJob*.
● Foundation Objects
Comprises organization, pay and job structure details. Entities begin with FO*.
● Metadata Framework (MDF) Objects
When the standard delivered foundation objects do not meet requirements, existing foundation objects are
migrated to the MDF framework (becoming generic objects in the process). New MDF objects are also
available.
Employee Central stores data in table structures which are known as entities. Entities are grouped together in
objects.
Employee Central entities let you create and manipulate employee data. Navigations in an entity represent
associations between entities. Each entity can have the following properties.
The section Employee Central Entity Properties [page 50] explains the properties in more detail and the section
Entity Association & Navigation [page 29] describes how the navigation works between entities.
The Employee Central OData API exposes the Employee Central entities and this includes foundation objects,
Personal, Employment, and MDF objects.
The Employee Central OData API supports metadata query, entity query and upsert query for these objects.
Metadata All users belonging to a company will get the same metadata query results. Results are not
Query determined by the RBP permissions for EC entities.
https://<hostname>/odata/v2/$metadata
Entity Query (Operation Most FO objects and person/employment related entities support OData query. For
GET) details, check the OData API dictionary or the results of the metadata operation.
Entity Upsert Most Employee Central entities support the upsert operation which is based on the Employee
(Operation Central import. This means the restrictions that apply to the Empoyee Central Import also
UPSERT) apply to the entity upsert. For example, field level permissions are not supported. You can get
more information from the Administrator Guide, Employee Central Imports.
MDF Objects
When the Employee Central OData API uses MDF objects, the following operations are supported:
We recommend using Employee Central OData APIs if one or more of these factors applies to your situation:
Note
● Your system cannot consume either OData APIs or SOAP for an initial data load. In this case, you would go
for Import/Export with a CSV. Automation via FTP would also be a possibility.
● You need employee replication field level delta, snapshot, or read modified employees only, then SOAP
Compound Employee API is your tool of choice. You can find more information in the guide Implementing
the Employee Central Compound Employee API.
● You only need to read data, then the SOAP Compound Employee API would also be your tool of choice.
There are two modes in Employee Central OData APIs which determine what a user or user group (in this context a
user and user group will be treated as one and the same) is authorized to view or do.
● User Mode
Assigned RBP settings determine what entities can be viewed and what can be done with them. You will
sometimes see the term RBP mode but in this guide, we use the term User Mode.
● Admin Mode
Allows full access to Employee Central OData API entities and operations. You will only use this in a limited
number of cases chiefly technical integrations. Admin Mode overrides any RBP (role based permission)
settings that have been made. You will sometimes see the term technical user, or non-RBP mode but in this
guide we use the term Admin Mode.
Please note that full access means just that - Access. Upsert authorization is an additional authorization as
described in the section Getting users up and running: Permission settings [page 20].
EC OData APIs are part of Employee Central so you do not need to make any settings in Provisioning. If you want to
disable EC OData APIs then you'll need Professional Services to do this in Provisioning.
Don't forget that you will also need business-specific provisioning in addition to these settings. For example if you're
using Global Assignment, this will need to be set in provisioning. You'll find more information in the dedicated
implementation guides for your feature and they're available on https://help.sap.com/hr_ec/
The use of permission settings means that assigning users the authorizations they require for Employee Central
OData APIs is a very straightforward process. You make both your entity-specific RBP settings and other OData API
settings in one and the same place in the Admin Center using the tool Manage Permission Roles.
Tell Me More
Take a look at the following information. The tables are grouped by different entities and what the user needs to be
able to do (Authorization/Action) with those entities. Remember to read any additional information for the
permission setting that is available in your system.
User Mode No additional settings are needed. Takes into account RBP set
tings.
Upsert Administrator Permissions Employee Central API Overrides any RBP settings
Employee Central HRIS OData API (editable) made for the user and lets the
user upsert that is import infor
mation into your instance. Only
available as an Admin Mode.
Admin Mode Administrator Permissions Employee Central API Overrides any RBP settings
Employee Central HRIS OData API (read-only) made for the user but upsert au
thorization needs to be given in
addition to this.
User Mode No additional settings are needed. Takes into account RBP set
tings.
Upsert Administrator Permissions Employee Central API Overrides any RBP settings
Employee Central Foundation OData API (editable) made for the user and lets the
user upsert that is import infor
mation into your instance. Only
available as an Admin Mode.
Admin Mode Administrator Permissions Employee Central API Overrides any RBP settings
Employee Central Foundation OData API (read-only) made for the user but upsert au
thorization needs to be given in
addition to this.
User Mode (query only) Administrator Permissions Metadata Framework Access Takes into account RBP set
to non-secured objects tings.
Admin Mode (includes up Administrator Permissions Metadata Framework Admin Overrides any RBP settings
sert as well as query) Acces to MDF OData API made for the user.
Take a look at this table in case you need to arrange access to picklist management, SOAP APIs, API tools, or even
restrict access.
and
Related Information
To decide which authentication type best matches your business requirements, take a look at Authentication
Types: Which one is right for me?Authentication Types: Which one is right for me? [page 555]
The following Entity Relation Diagram shows the relationship between the different entities. The Person and
Employment objects make up Employee entities. In this diagram, the K fields denote business keys. The field
names here are from the HRIS element.
The images that follow are not complete but show a representation of some of the most important entities and
their relationships within the Employee Central OData Structure. For a complete list of available entities, you
can:
odata/v2/$metadata
The next diagram shows the relationships for the PerPerson entity. Arrows in the picture denote navigations from
one entity to another. The names written next to the arrows can be used to expand the target entity within an
OData API request. For example:
odata/v2/PerPerson?$filter=personIdExternal+eq+’cgrant1’&$expand=emailNav
This request will return PerPerson entity for cgrant1 and all her emails embedded within the response for PerPerson
entity. For more examples and their responses refer to the section on entities.
Note
The names within << >> provide the name used on the UI while the name next to the +sign denotes a business
key. For example, <<PerAddressDEFLT>> is referred to on the UI as Address Information. It also shows that the
following fields are used as business keys: personIdExternal, startDate, and addressType.
The diagram above shows the major navigations going out of the PerPerson entity while the next diagram shows
the major relationships navigating to the PerPerson entity.
Likewise, the next two diagrams show the navigations from and to the EmpEmployment entity.
The next two diagrams show the navigations from and to the EmpJob entity.
The next diagram shows the relationship for the EmpCompensation entity.
Odata APIs supports navigation for associated entities. For examples of supported scenarios, refer to the section
describing the OData entity.
For EC fields configured as picklists in data model, navigation is available from Employee Central entities to the
Picklist entity.
Employment related entities such as EmpJob, EmpEmployment and EmpCompensation can navigate to the User
entity.
Foundation Object entities can also navigate to the User entity. For example, the manager of the Cost
Center(costcenterManager) in the FOCostCenter entity or the head of the unit(headOfUnit) in the FODivision can
navigate to the User entity. Custom field configured in the Corporate Data Model with Type=Worker can also
navigate to the User entity.
Fields in Employee Central referring to MDF objects such as the Position field in Job Information(EmpJob entity)
can navigate to the position MDF entity. Custom fields configured as MDF type can also navigate to the related MDF
entity.
Note
The navigations described for the Picklist entity, User entity and MDF entity (in the previous sections) are
supported for foundation object navigation as well.
In OData APIs, Employee Central fields related to country can navigate to the Territory Entity. For example,
navigation to the Territory entity exists for the following cases:
● countryOfBirth in PerPerson
● country field in PerNationalIdCard
● FOJobClassLocal
● PerGlobalInfoUSA
Country-specific entities (CSF entities) are defined in the Country Specific Data Model. Examples of such entities
are:
The parent entity can navigate to CSF child entity. For example:
The OData API supports navigation from the CSF entity to the territory entity to get detailed information about the
country.
Some of the CSF parent entities like FOLocation and PerPerson also provide navigation to address information. For
example, FOLocation to FOCorporateAddressDEFLT and PerPerson to PerAddressDEFLT.
Person related entities such as PerPhone, PerEmail can navigate to PerPerson entity; EmpEmployment entity can
navigate to PerPerson entity too.
● PerPersonal
● PerPhone
● PerEmail
● PerNationalId
● PerEmergencyContact
● EmpEmployment
OData APIs support navigation from Employment related entities such as EmpJob, EmpCompensation to the
EmpEmployment entity and vice-versa.
OData APIs support navigation of the User Entity to the EmpEmployment entity.
MDF entities, depending on their configuration, can offer navigation to the User Entity and EC Foundation Objects.
This section describes the different types of Country-Specific(CSF) logic for Employee Central and FO entities.
1.12.1 EmpCompensation/EmpJob/EmpEmployment
The Employee Central CSF configuration allows the use of different labels in the Succession Data Model and the
Country-Specific Succession Data Model for a field however the data type must be the same. For this reason, all
fields from the CSF and the Succession Data Model are merged in the entity and a separate CSF entity does not
exist.
Note
Due to this design, different labels of the country specific entities are not available in the OData metadata yet.
Countries which have not been defined in the Country-Specific Succession Data Model for the HRIS element
globalInfo will not be visible in OData as a PerGlobalInfo<country_code> entity. Because it is not possible to define
the HRIS element globalInfo in the Succession Data Model, there is also no PerGlobal default entity.
For upsert, there is no restriction on the country entity used. For example, the PerGlobalInfoUSA entity can be used
to upsert records for USA, India and Germany.
1.12.3 FOCorporateAddressDEFLT /
HrisEmergencyContactAddressDEFLT
The OData API for these entities offers a single field for all countries. It is not possible to have multiple entities per
country. At the same time, those fields can be defined differently in the Corporate Data Model/Succession Data
Model and the Country-Specific Corporate Data Model/Country-Specific Succession Data Model for attributes
such as visibility, required, picklist, and type.
It is recommended that this flexibility not be used extensively for the following reasons:
● The OData API checks the length for all country-specific configurations and uses the maximum length.
● If a field is configured as a picklist for all countries in the Country-Specific Data Model, the API can expose the
field as a picklist even if different picklists are used. For example, custom_string1 can be defined in the Country-
Specific Corporate Data Model for corporateAddress as picklist=A1, and it can be also defined in Country-
Specific Corporate Data Model for corporateAddress of country=USA as picklist=B1.
● If a field is configured with a different type (Worker / FO / MDF/picklist), the field will be ignored in the ODATA
API query. This applies to the following scenarios:
○ the Succession/Corporate Data Model and the Country Specific Corporate Data Model have different
types, OR
○ the Country Specific Data Model for different countries have different types defined for the same field. For
example, type is defined as a picklist for USA and type is defined as a FO for DEU.
Note: For corporateAddress, the parent entity: FOLocation has a field named: addressId which can uniquely identify
the related corporateAddress field. The same for emergency contact’s address info (addressId).
For FOLegalEntityLocal<country_code>, it is similar, the parent entity FOCompany has three fields: externalCode,
startDdate and country which can uniquely identify the related legal entity local record.
1.12.4 PerAddressDEFLT
The same field can be defined differently in the Succession Data Model and the Country-Specific Data Model for
attributes like visibility, required, picklist, and type.
Note
If there is no country-specific data defined for the HRIS element homeAddress, the definition specified in the
Succession Data Model will be used.
1.12.5 FOLegalEntityLocal<country_code>
The same field can be defined differently in the Succession Data Model and the Country-Specific Data Model for
attributes like visibility, required, picklist, and type. The OData API supports this by providing different entities for
each country (FOLegalEntity<country_code>) and an entity FOLegalEntityDEFLT for all countries that have not
been defined in the Country-Specific Data Model.
For FOLegalEntityLocal<country_code>, the parent entity FOCompany has three fields: externalCode, startDdate
and country which can uniquely identify the related legal entity local record.
1.12.6 FOJobClassLocal<country_code>
For the HRIS element jobClassLocal, the OData API provides the FOJobClassLocal<country_code> entity for each
country defined in the Country-Specific Data model. For all other countries not defined in the Country-Specific
Data model, the FOJobClassLocalDEFLT entity is used.
1.12.7 PerNationalId
Only the format of the HRIS element nationalId can be defined in the Country-Specific Succession Data model.
Other fields for the HRIS element nationalId must be defined in the Succession Data Model.
There is no special handling required for National ID with respect to the OData API query operation.
To understand date handling for Employee Central Entities, you need to understand the concepts of effective
dating, multiple changes per day (MCPD) and last modified query behavior. Please note that when the top level
entity of a query is not effective dated, today's date is used as the asOfDate when the navigation entity is expanded.
Take a look at the following topics, if these concepts are new to you.
An effective dated entity can have a scheduled data change made to it. Entities can have an effective start date and
an effective end date.
What is it?
When you have an entity that is effective dated, you can track historical data accurately.
The effective date is the date on which the record becomes effective. Effective dating means that records capture
time as part of the data that is stored in SuccessFactors and that the time element can be edited. Effective dating
ensures that you have no time gaps in a record.
Rows for each effective date provide a complete history of the updates to the record. There are no gaps. When you
insert a new record, the end date of the previous record is automatically set to the effective start date -1 day of the
next record. The latest effective-dated record is automatically assigned an end date of 12-31-9999.
Note
When you insert a record for an effective dated entity, do not provide the end date in your request URI. End
dates for effective dated records are assigned by system automatically. If you provide a different end date, the
system cannot accept the record and returns errors.
UI Behavior:
When you add a new record to an existing one in an effective dated entity, this is same as making an incremental
upsert using the API with a new key (that is a new date or sequence number).
If you edit an existing record in an effective dated entity, this is same as making an incremental upsert using the API
with the same key (that the same date and sequence number).
For more information on effective dating for each HRIS element, take a look at Employee Central Master
Implementation Guide. Effective dated entities and their behavior [page 37]
Effective dated is a special logic of EC entities. EC API delivers parameters like asOfDate, fromDate, and toDate
for effective dated entities so that you can query the history or future records of an entity.
● asOfDate Query: returns information as of a specific date. Always returns a single record. By default, the
OData API uses the asOfDate query using today as the date.
● fromDate and toDate query: returns historic information for the specified date range. Can return multiple
records, depending on information available. For example, if the fromDate is 3/15/2013 and the toDate is
3/30/2013, the returned effective data would be like effective_start_date<=3/30/2013 and
effective_end_date>=3/15/2013. Query request: /EmpJob?&fromDate=3/15/2013&toDate=3/30/2013 will
return records from 3/15/2013 to 3/30/2013 for jobInfo entity.
Note
Since the default query is asOfDate, using $filter for effective end or start date will require the fromDate and/or
toDate to be specified. For example, toDate=9999-12-31.
Consider the following example showing the use of the fromDate and toDate:
https://<hostname>/odata/v2/PerPersonal?$filter=startDate+gt
+datetime'2012-10-30T00:00:00'&fromDate=01-01-1990&
$select=startDate,createdOn,personIdExternal&$format=JSON
The example above returns fewer records if the fromDate is not specified. This is because the filter is applied after
the result is already filtered by asOfDate (in this case it would be current date – based on default behavior).
Another example is for MCPD (Multiple Changes per Day) entities. MCPD is a type of EC effective dated entities,
where multiple changes might happen per day on one entity. Examples are EmpJob and EmpCompensation
entities. MCPD entities use the seqNumber field as the business key. If you query this type of entities directly
without specifying any date parameter, the response returns only one single record, which is the current effective
dated record that has the maximum seqNumber. If you want to get history records, please include the parameter of
fromDate or toDate as part of your filter. For example:
https://<hostname>/odata/v2/
EmpJob(startDate=datetime'2018-01-02T00:00:00',userId=<userId>)?&toDate=9999-12-31
The URI parameters asOfDate, fromDate, toDate are global EC parameters and not standard OData parameters.
This is evident from the naming (they are not preceded by the $ symbol as done for other OData parameters). They
are applied to the OData entity mentioned in the query request, as well as all other expanded entities (those
mentioned within the $expand statement).
Entities with a business key startDate are effective dated. Examples of effective-dated entities include
EmpCompensation,EmpJob, EmpJobRelationships, and PerPersonal.
Note
Please note however that there are a few effective-dated entities that do not have a business key startDate.
● If both the top level entity and the navigation entity of the lower level entities are effective-dated, then when
expanding the navigation entity, the effectiveStartDate of the top level entity is used as the asOfDate of the
navigation entity.
● If the top level entity of the lower level entity is not effective-dated, TODAY is used as the asOfDate when
expanding the navigation entity
● For a Picklist field, the navigation entity is the PicklistValue. When expanding a Picklist field, the
effectiveStartDate/effectiveEndDate of the Picklist entity are used because the PicklistValue itself is not
effective-dated.
The parameters used to query effective dated entities are fromDate, toDate and asOfDate.
Note
Nice to know
If no date is specified in a query for an effective dated entity - Let's say for example, you have this queryhttps://
<hostname>.com/odata/v2/EmpJob?, then the system applies the asOfDate using today's date, returning the
single record that is valid for all employees on today's date.
Related Information
You can query effective dated entities using the proprietary parameters:
● asofDate - Querying a specific date (for example asofDate = 01.01.2014 will return the effective dated record for
that day). Always returns a single record.
By default, the OData API uses the asOfDate query using today as the date.
With records that allow multiple changes per day, the record with the highest sequence number is returned.
● fromDate - Querying historic information for a specific date range (for example, from 01.01.2014 to 12.31.2014).
Can return more than one record. With records that allow multiple changes per day, the record with the highest
sequence number is returned.
● toDate- Querying historic information for a specific date range (for example, from 01.01.2014 to 12.31.2014).
Can return more than one record. With records that allow multiple changes per day, the record with the highest
sequence number is returned.
Related Information
These proprietary parameters are used to query historical information for a defined time interval for effective dated
entities.
● If you do define a fromDate or a toDate, then the date must be in format YYYY-MM-DD.
● If you do not define a date for fromDate and toDate, then you will get an error.
● You can use the fromDate or toDate alone in query:
Alone: https://<hostname>.com /odata/v2/EmpJob?fromDate=2000-12-31
Together: https://<hostname>.com/odata/v2/EmpJob?fromDate=2000-12-31&toDate=2010-12-31
These parameters apply to the OData entity named in the request, and to any other entities in the $expand
statement.
Here are some examples using the effective dated entity EmpJob in a query – take careful note of the implicit time
intervals.
fromDate
Returns effective dated records in this entity from the date 2000-12-31. The implicit time interval is 2000-12-31 –
system end date.
Depending on the records matching this query, a single record or multiple records can be returned. For entities that
support multiple changes per day, all records on that day will be returned.
toDate
Depending on the records matching this query, a single record or multiple records can be returned. For entities that
support multiple changes per day, all records on that day will be returned.
Query: https://<hostname>.com/odata/v2/EmpJob?fromDate=2000-12-31&toDate=2010-12-31
Queries effective dated records in in this entity from 2000-12-31 up to and including 2010-12-31.
Depending on the records matching this query, a single record or multiple records can be returned. For entities that
support multiple changes per day, all records on that day will be returned.
Consider another example showing the use of the fromDate and toDate:
https://<hostname>.com/odata/v2/PerPersonal?&$filter=startDate+gt
+datetime'2012-10-30T00:00:00'&fromDate=01-01-1990&
$select=startDate,createdOn,personIdExternal&$format=JSON
The URI parameters asOfDate, fromDate, toDate are global EC parameters and not standard OData parameters.
This is evident from the naming (they are not preceded by the $ symbol as done for other OData parameters). They
are applied to the OData entity mentioned in the query request, as well as all other expanded entities (those
mentioned within the $expand statement).
Note
https://<hostname>.com/odata/v2/EmpJob? then the system applies the asOfDate using today’s date.
This returns a single record that is valid for all employees on today’s date.
If the effective dating type of the entity is Multiple Changes Per Day (MCPD), the record with the largest
sequence number will be returned as the effective record of that date.
Related Information
Take a look at these examples to see how toDate and/or fromDate combined with $filter behaves.
Query: https://<hostname>.com/odata/v2/EmpJob?$filter=standardHours+gt
+'20'&toDate=2000-12-31
Response returns the effective dated records matching this query. Please note that the implicit time interval is from
system start date to 2000-12-31.
Query: https://<hostname>.com/odata/v2/EmpJob?$filter=standardHours+gt
+'20'&fromDate=2000-12-31
Query: https://<hostname>.com/odata/v2/EmpJob?$filter=standardHours+gt
+'20'&fromDate=2000-12-31&toDate=2010-12-31
Returns the effective dated records matching this query for the time interval from 2000-12-31 to 2010-12-31.
Related Information
A proprietary parameter used to query effective dated entities valid on the date defined in the query.
If you use an asOfDate and do not define the date, you'll get an error, Unable to parse asOfDate.
You can use either AsOfDate or fromDate/endDate in a query request but not both.
Example
Query: https://<hostname>.com/odata/v2/EmpJob?asOfDate=2000-02-16
Returns the effective dated record that was valid on the given date for all employees. For records that allow multiple
changs per day, the record with the highest sequence number is returned.
If no date is defined in a query for effective dated entities, then the the asOfDate parameter with today's date is
used. So, assuming that today is 01-01-2020, then this query here:
https://<hostname>.com/odata/v2/EmpJob?&asOfDate=01-01-2020
If both the top level entity and the navigation entity are effective-dated, then when expanding the navigation entity,
the effectiveStartDate of the base entity is used as the asOfDate of the navigation entity.
If you specify fromDate and toDate as query options, then only the top level entity is filtered by the fromDate and
toDate. All lower level entities follow the following rules:
1. If both the top level entity and the navigation entity of the lower level entities are effective-dated, then when
expanding the navigation entity, the effectiveStartDate of the top level entity is used as the asOfDate of the
navigation entity.
2. If the top level entity of the lower level entity is not effective-dated, TODAY is used as the asOfDate when
expanding the navigation entity.
3. For a Picklist field, the navigation entity is the PicklistValue. When expanding a Picklist field, the
effectiveStartDate/effectiveEndDate of the Picklist entity are used because the PicklistValue itself is not effective-
dated.
$filter combined with asOfDate returns the effective dated records valid on the date defined.
Response returns the effective dated record valid on the 2000-01-00 for all employees.
Note
https://<hostname>.com /odata/v2/EmpJob?$filter=standardHours+gt+'20'
and
https://<hostname>.com /odata/v2/EmpJob?$filter=standardHours+gt
+'20'&asOfDate=01-01-2020
Some entities can be updated multiple times per day. Each update is associated with a sequence number which
provides a history of all changes made to the entity for that day. The entities that allow Multiple Changes Per Day
are:
● EmpJob
● EmpCompensation
● EmpPayComponentsRecurring
To see the MCPD entities in your own instance, look in the metadata to see if an entity has the business key
seqNumber.
If you want to filter all history records for MCPD entities, make sure to enable the seqNumber property by setting
enabled="Yes" in BCUI. For more information about using BCUI to modify your data model, see Setting Up and
Using Business Configuration UI (BCUI).
Note
If seqNumber is disabled for MCPD entities, when you query history records, only one record is returned
randomly of the day.
● In date range query, all transactions in the table for the specified date range will be returned. Please note that
there might be gaps in sequence numbers if records have been deleted.
● In asOfDate query, only the record with the highest transaction sequence number for a specific day of an
employee will be returned.
With MCPD (Multiple Changes Per Day) entities, all records in the time interval are returned when using fromDate
and/or toDate. Depending on the available information for a given time interval, single or multiple records may be
returned. Please note that there might be gaps in the sequence numbering when records have been deleted.
Related Information
When you query an MCPD entity using the asOfDate, the most current record is returned.
Related Information
The fields lastModifiedOn and lastModifiedDateTime store the date and time of the last change or creation in two
different formats: lastModifiedDateTime with datetimeoffset meaning that the query and the response will have
timezone information. lastModifiedOn with datetime meaning that the fields represent the date information in the
timezone of the server (implicit timezone).
When you to create a last modified date query for an effective dated entity, you can use one of the following:
Or
Whether you use lastModifiedDateTime or lastModifiedOn will depend on the time zone information your business
case requires.
Related Information
You can specify the lastModifiedDateTime field in a filter to query effective dated records based on the last
modified date and time. The behavior and usage of lastModifiedOn is the same. Filters on both parameters work
in the same way for all Employee Central effective dated entities.
When the lastModifiedDateTime is part of a filter, without the fromDate and toDate query options, the
system handles the query using the asOfDate eq (today's date) option by default. That is, if any of the
employee's records was updated or deleted, and the date satisfies the lastModifiedDateTime filter, the
response contains only the current effective dated record of the employee. See Example 2 in the Examples section.
For more information about using asOfDate, see asOfDate parameter [page 41].
When you use the lastModifiedDateTime filter together with the fromDate or toDate query options, all the
records that are effective in the fromDate or toDate time interval are returned. That is, if any of the employee's
records was updated or deleted, and the date satisfies the lastModifiedDateTime filter, the response contains
all the records that are effective in the time interval specified by the fromDate or toDate query options. See
Example 3 in the Examples section. For more information about using fromDate and toDate, see fromDate and
toDate parameters [page 38].
To meet various needs for individual users, the behavior of lastModifiedDateTime is different, depending on
whether you put the lastModifiedDateTime parameter on the left or right. For example, two queries that
contain $filter=lastModifiedDateTime+ge+datetime'2018-03-01T00:00:00' and
$filter=datetime'2018-03-01T00:00:00'+le+lastModifiedDateTime return different results, even
though the criteria looks the same. With lastModifiedDateTime in different positions, the search scope is as
follows:
Examples
Example 1
Request: https://<hostname>/odata/v2/EmpJob?userId+eq+'cgrant'
Result: record 1.
The result contains only the current effective dated record, which is record 1.
Example 2
Request: https://<hostname>/odata/v2/EmpJob?$filter=lastModifiedDateTime+gt
+datetimeoffset'2011-01-01T00:00:00Z'+and+userId+eq+'cgrant'
Result: record 1.
The asOfDate eq (today's date) option is used by default. The result contains only the current effective
dated record, which is record 1.
Example 3
Request: https://<hostname>/odata/v2/EmpJob?$filter=lastModifiedDateTime+gt
+datetimeoffset'2018-01-01T00:00:00Z'+and+userId+eq+'cgrant'&fromDate=1990-01-01
Then assume that the last record was deleted on March 2, 2018.
Example 4
After the last record was deleted on March 2, 2018, run the following query:
Request: https://<hostname>/odata/v2/EmpJob?$filter=lastModifiedDateTime+gt
+datetimeoffset'2018-03-01T00:00:00Z'+and+userId+eq+'cgrant'
Result: record 1.
Because the lastModifiedDateTime parameter is on the left side, the system first checks the entity records and
finds that there is no record satisfying the filter. Then, the system checks the audit log and finds that the last data
change happened on March 2, 2018, which satisfies the filter. So the current effective dated record of "cgrant" is
returned, which is record 1.
Result: no record.
Because the lastModifiedDateTime parameter is on the right side, the system checks only the entity records,
where no record satisfies the filter.
Note
● If an effective dated record is deleted, it cannot be found in the entity records, but it still exists in the audit
log.
● If all records of the employee were deleted, no record is returned in the response, no matter whether the
lastModifiedDateTime parameter is on left or right. Because the entity is empty, no record can be
returned by using the asOfDate option.
● The date range fromDate / toDate filter can only be applied to the first effective dated entity in a specific
navigation path.
● Date range query only applies to driving entity i.e., the first entity in the navigation path (including the root
entity in the URL which is effective dated).
● The navigation entity will use the asOfDate query by passing the effective start date from the driving entity as
the asOfDate .
Consider the following example where all entities are effective dated:
In this example, specifying the following request will get a data range record from 3/15/2013 to 3/30/2013 for
jobInfo and the related department records with asOfDate = effective start day of the joined jobInfo record.
odata/v2/jobInfo?
fromDate=3/15/2013&toDate=3/30/2013&$expand=departmentNav
In case there are several effective dated objects in the navigation path, for example Job Information navigates to
Department and Department navigates to CostCenter, the request would be:
odata/v2/jobInfo?
fromDate=3/15/2013&toDate=3/30/2013&$expand= departmentNav,
departmentNav/costCenterNav
This will return all corresponding effective dated records for Job Information. For each record, a single department
(as in the image above) will be returned. The same is true for the expanded Cost Center. Each department will have
a single cost center record depending on the effective start date of the parent entity.
odata/v2/jobInfo?asOfDate=3/30/2013&$expand=departmentNav
For date range query, if the navigation is from an effective-dated entity to a non-effective dated entity to an
effective-dated entity, the second effective-dated entity will use the asOfDate query.
odata/v2/EmpJob?$filter=jobCode
&$expand=
odata/v2/EmpJob?$filter=jobCode +eq+
'ENG'&$expand=employmentNav&$select=startDate,jobCode&$format=JSON
The above example queries all developers based on job code (ENG) in the system and returns the hire
date(startDate).
When the first entity in the navigation path is non-effective dated, the first effective dated entity in the navigation
path applies to the date range query criteria. Likewise, the asOfDate parameter can be passed to effective dated
entities within the navigation path of the non-effective dated root entity.
Example 1: This request returns the non-effective dated employmentInfo record and applies the
asOfDate=3/15/2013 query to the expanded jobInfo entity only.
odata/v2/EmpEmployment?asOfDate=3/15/2013&$expand=jobInfoNav
Example 2: This request returns the non-effective dated employmentInfo record and applies the asOfDate query
using the current date to the expanded jobInfo entity only
Example 3: This request returns the non-effective dated employmentInfo record and applies the date range query
using fromDate=3/15/2013&toDate=3/30/2013 to the expanded jobInfo entity only.
odata/v2/EmpEmployment?fromDate=3/15/2013&toDate=3/30/2013&$expand=
jobInfoNav
It’s crucial that you do not mix and match the different time zones otherwise you’ll end up with inconsistencies so
please take a minute to familiarize yourself with how we handle time zones. Different fields, for example,
<lastmodifedDateTime>,< lastmodifiedDate>, and so on represent different time zones and you need to be
able to tell the difference.
Recommendation
To avoid inconsistencies, we recommend that you always use the UTC time zone.
To know which field is in which time zone, you also need to know the oData protocol type that supports the field. We
use:
Usually, but not always, the following fields are of the type Edm.DateTime and are in the server time zone.
● <createdDate>
● <createdOn>
● <lastModifiedDate>
● <lastModifiedOn>
Examples of exceptions
Here are few examples of exceptions where the fields createdDate, createdOn, or lastModifiedDate are not of the
type Edm.DateTime but are of the type Edm.DateTimeOffset.
You must be sure to check entities on a case-by-case basis yourself. This list of exceptions is not exhaustive.
Attachment createdDate
Background_* lastModifiedDate
Edm.DateTimeOffset (=UTC)
Usually, but not always, the following fields are of the type Edm.DateTimeOffset and are in the UTC time zone.
● <createdDateTime>
● <lastModifiedDateTime>
● <lastModifiedDatewithTZ>
● < lastModifiedWithTZ>
Example: PerPhone
Take a look at the snippet of code below – here you can clearly see that the different time zones are available in the
entity as represented by the <createdOn>, <createdDateTime>,< lastModifiedOn>, and
<lastModifiedDateTime>.
Sample Code
<m:properties>
<d:personIdExternal>achin1</d:personIdExternal>
<d:phoneType>5845</d:phoneType>
<d:extension m:null="true" />
<d:createdOn m:type="Edm.DateTime">2011-03-17T21:39:02</d:createdOn>
<d:isPrimary m:type="Edm.Boolean">true</d:isPrimary>
<d:phoneNumber>661 2000</d:phoneNumber>
<d:createdBy>admin</d:createdBy>
<d:lastModifiedBy>admin</d:lastModifiedBy>
<d:createdDateTime m:type="Edm.DateTimeOffset">2011-03-18T01:39:02Z</
d:createdDateTime>
<d:lastModifiedOn m:type="Edm.DateTime">2011-03-17T21:39:02</
d:lastModifiedOn>
<d:lastModifiedDateTime m:type="Edm.DateTimeOffset">2011-03-18T01:39:02Z</
d:lastModifiedDateTime>
</m:properties>
Employee Central Entities allow you to create and manipulate employee data. Navigations in an entity represent
associations between entities. Each entity can have the following properties.
● Effective dating
● Business keys
● Required/nullable attribute
● Processing parameters for upsert
If you need to retrieve changed records, then you will be wanting to use the lastmodifeddate in your query.
Business Case
You might need to retrieve changes to records when you are synchronizing systems using APIs, for example from a
SF instance to a client local database.
How do I do that?
You can use a last modified query. Take a look at the example below
Operation GET
URI http://<Hostname>/odata/v2/EmpJob?
fromDate=01-01-1900&
$filter=lastModifiedDateTime+gt
+datetimeoffset'2016-02-01T12:40:03Z'
Sample Code
Extract from response to the above query focussing on the last modified information. Take note that the query
is for records changed after 2016-02-01T12:40:03Z but that the request has returned last modified information
that predates this.
<m:properties>
<d:startDate m:type="Edm.DateTime">2015-08-01T00:00:00</d:startDate>
<d:userId>215</d:userId>
.....
<d:lastModifiedDateTime m:type="Edm.DateTimeOffset">2015-08-13T14:01:06Z</
d:lastModifiedDateTime>
.....
<d:lastModifiedOn m:type="Edm.DateTime">2015-08-13T10:01:06</
d:lastModifiedOn>
....
</m:properties>
Business keys are a set of fields that uniquely identity a record for an entity. Each entity, at minimum, uses the
following fields to make up a business key:
FOFrequency external_code
FOWfConfig external_code
FODynamicRole external_code
Note
It is important that the business keys be unique. It is recommended that business keys in data models be
defined as required=true. In case, duplicate records are found, only one record will be returned and others
ignored.
By default, the nullable attribute is set to false (nullable=false) for business keys. All other fields have this
property set to true.
The required attribute is determined by the data model. For business keys, this is always set to true. This is
different from the EC SFAPI behavior.
The Employee Central Upsert API supports both Full purge and Incremental updates using parameters. If no
parameters are provided, the system checks whether the entity being updated supports incremental update. If it
does, an incremental update is performed. Else, the system performs a full purge on the record.
If the processing parameter is set to full purge, the existing record for the given employee is deleted when the
upsert operation is performed. A new record is then created with the data specified in the payload. In SOAP, the
purgeType is specified as follows:
<urn:processingParam>
<urn:name>purgeType</urn:name>
<urn:value>FULL</urn:value>
</urn:processingParam>
In OData, the purgeType is specified through a URL parameter. A typical request would look like:
odata/v2/upsert?purgeType=full
1.14.5.2 Incremental
If the processing parameter for an upsert is set to Incremental, only records specific to the user in the payload are
purged and replaced. This means all other records for the user remain untouched.
<urn:processingParam>
<urn:name>purgeType</urn:name>
<urn:value>INCREMENTAL</urn:value>
</urn:processingParam>
In OData, the purgeType is specified through a URL parameter. A typical request would look like:
odata/v2/upsert?purgeType=incremental
1.14.6 suppressUpdateOfIdenticalData
Many a times, during replication, the source system does not have information about changes to a field or entity
level. As a result, more than necessary data is transferred; in some cases, a full replication is triggered from the
third-party system into Employee Central. This results in an update of records in Employee Central even if those
OData supports a mode called suppressUpdateOfIdenticalData which can be enabled to ensure that records are
updated only if needed. This means that data will not be updated by imports/OData API calls if there is no change
i.e. if the payload and the data in the system is the same. In such a case, there is no update to last_modified dates,
no creation of audit information and no change to entity data.
It is available in full purge and incremental mode for the following entities:
● PerPerson
● PerPersonal
● EmpEmployment
● EmpJobInformation
A typical request with the suppressUpdateOfIdenticalData parameter would look like this:
http://<hostname>/odata/v2/upsert?purgeType=full&suppressUpdateOfIdenticalData=true
1.14.7 fileLocale
What is it?
A new url parameter, fileLocale, is now available for upserts. en_US is currenty supported so in other words, like the
UI and the import engine, OData APIs now support the internationalization of floating decimal points.
You’ll be able to avoid roundtrip inconsistencies that arise when your API user locale is not en_US. Up to now, you
could only address this problem by changing the user locale which in many cases is impractical.
When you|re replicating data from 3rd party systems, the EC system by default will always read data as if the locale
is en_US. This is not problematic if the API user locale is also en_US and the upserted data uses US decimal
notation.
If however, your API user locale is not en_US and is for example de_DE, you’d end up with roundtrip inconsistencies.
This is because when an application reads data in a productive system using an OData API query and subsequently
copies it into another system using an upsert statement, the number fields are rendered in the locale of the API
user and in the case of user locale = de_DE, you'll end up with inconsistencies because en_US and de_DE use a
different decimal notation.. fileLocale=en_US will solve this problem.
If you API users locale is en_US, you will not need to use fileLocale=en_US.
Add fileLocale=en_US to your upsert queries when your user locale is not en_US.
Your API user locale is de_DE. So, when upserting, make sure to use the following:
Query: https://<hostname>.com/odata/v2/upsert?fileLocale=en_US
Payload:
Sample Code
{
"__metadata": { "uri":"EmpEmployment" },
"personIdExternal": "aaaa",
"userId": "aaaa", "InitialOptionGrant": "224.8",
"InitialStockGrant": "31,000"
}
1.15 Pagination
You can avoid lost or duplicated records by using pagination. You can use cursor-based and snapshot-based
pagination in some of the Employee Central entities.
Note
For more information about pagination options of OData API, see Pagination.
Cursor-Based Pagination
You can use this feature for the following Employee Central entities:
EmpJob
EmpEmployment
EmpPayCompRecurring
EmpPayCompNonRecurring
FOLocation
The following table shows what the primary key is for the entity along with the additional information of the table
name and its type.
Snapshot-Based Pagination
Snapshot-based pagination is supported by all Employee Central entities. Entity types with multiple business keys
might be slower if they are not optimized for snapshot-based pagination.
As of Q4 2018 Release, below Employee Central entity types have been optimized for better performance:
● PerPersonal
● EmpJob
● EmpEmployment
Request: https://<hostname>/odata/v2/EmpJob?$format=json&customPageSize=3&$select=userId
&paging=snapshot
Response:
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://apisalesdemo4.successfactors.com:443/
odata/v2/
EmpJob(seqNumber=1L,startDate=datetime'2007-07-01T00%3A00%3A00',userId='dselig1')
",
"type": "SFOData.EmpJob"
},
"userId": "dselig1"
},
{
"__metadata": {
"uri": "https://apisalesdemo4.successfactors.com:443/
odata/v2/
EmpJob(seqNumber=1L,startDate=datetime'2002-03-01T00%3A00%3A00',userId='sproctor1
')",
"type": "SFOData.EmpJob"
},
"userId": "sproctor1"
},
{
"__metadata": {
"uri": "https://apisalesdemo4.successfactors.com:443/
odata/v2/
EmpJob(seqNumber=1L,startDate=datetime'2002-10-01T00%3A00%3A00',userId='tbotts1')
",
"type": "SFOData.EmpJob"
},
"userId": "tbotts1"
}
],
"__next": "https://apisalesdemo4.successfactors.com:443/odata/v2/EmpJob?
customPageSize=3&
$skiptoken=eyJzdGFydFJvdyI6MywiZW5kUm93Ijo2LCJwYWdpbmciOiJzbmFwc2hvdCIsInBhZ2VTaX
plIjozLCJzbmFwc2hvdE5hbWUiOiJzbmFwc2hvdF8wYWVlMTAzZl8xNTRiXzQwNTVfOTM5MF84N2VlNTk
2ZDkxZmZfcHM0YnNmYXBpNTN0XzM4NCJ9&paging=snapshot&$format=json&$select=userId"
}
}
Request: https://<hostname>/odata/v2/FOLocation?$format=json&customPageSize=3&$select=externalCode
&paging=cursor
Response:
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOLocation(externalCode='US_ATL',startDate=datetime'1990-01-01T00:00:00')" ,
"type": "SFOData.FOLocation"
},
"externalCode": "US_ATL"
},
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOLocation(externalCode='US_CHI',startDate=datetime'1990-01-01T00:00:00')" ,
"type": "SFOData.FOLocation"
},
"externalCode": "US_CHI"
},
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOLocation(externalCode='US_DAL',startDate=datetime'1990-01-01T00:00:00')" ,
"type": "SFOData.FOLocation"
},
"externalCode": "US_DAL"
}
],
"__next": "https://<hostname>/odata/v2/FOLocation?$format=json&
$select=externalCode&customPageSize=3&
$skiptoken=eyJwYWdpbmciOiJjdXJzb3IiLCJwYWdlU2l6ZSI6MywiY3Vyc29yUHJvcGVydHlOYW1lIj
pudWxsLCJjdXJzb3JWYWx1ZSI6NX0%3D&paging=cursor"
}
}
2.1 AdvancesAccumulation
This entity records the accumulation of the requested advance and remaining eligibility for the user. It is not an
effective dated entity in the Advances module. This entity is created when an advance is approved by the
superviser.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Role-based Assign the relevant permissions for AdvancesAccumulation in User Permissions Miscellaneous
Permissions .
Use Cases
2.2 AdvancesEligibility
This entity is used to configure different advances that a company offers to its employees. It is also used to
configure the recovery of the advance.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
2.3 NonRecurringPayment
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Use Cases
3.1 Apprentice
This entity provides a single and simple way of accessing the content from the Apprentice.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Use Case
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
Apprentice('charper1')",
"type": "SFOData.Apprentice"
},
"user": "charper1",
"startDate": "/Date(1442181600000+0000)/",
"assignedAddSupervisor": "pjuvan1",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "Apprentice",
"mdfSystemVersionId": null,
"endDate": "/Date(1443823200000+0000)/",
"lastModifiedDateTime": "/Date(1441103482000+0000)/",
"assignedGroup": "6596",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "0A4A26BA750D403EB74162322E21BC15",
"mdfSystemEntityId": "E740930CC9A54ACEA541AB16197E03D6",
"name": "Harper, Catherine",
"mdfSystemStatus": "A",
"year": "2014",
This entity provides a single and simple way of accessing the content from the Apprentice Event Type.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Use Case
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeEventType(6602L)",
"type": "SFOData.ApprenticeEventType"
},
"externalCode": "6602",
"mdfSystemObjectType": "ApprenticeEventType",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"eventTypeDescription_pl_PL": null,
"eventTypeDescription_fi_FI": null,
"lastModifiedDateTime": "/Date(1447833758000+0000)/",
"eventTypeDescription_en_GB": "Internal Training",
"mdfSystemTransactionSequence": "1",
"eventTypeDescription_it_IT": null,
"eventTypeDescription_en_RTL": null,
"eventTypeDescription_nl_NL": null,
"mdfSystemRecordId": "126C466C5390482EAD0468CFC456412E",
"mdfSystemEntityId": "B4FA1A0DEE2D4198A3A1A683E211F981",
"eventTypeDescription_de_DE": null,
"mdfSystemStatus": "A",
"apprenticeEventTypeCategory": "TRAINING",
"lastModifiedDateWithTZ": "/Date(1447833758000+0000)/",
"eventTypeDescription_es_ES": null,
"createdDate": "/Date(1439452260000)/",
"eventTypeDescription_ja_JP": null,
"mdfSystemRecordStatus": "N",
"eventTypeDescription_fr_FR": null,
"eventTypeDescription_es_MX": null,
"eventTypeDescription_en_US": null,
"eventTypeDescription_da_DK": null,
"eventTypeDescription_en_SAP_SLS": null,
3.3 ApprenticeInternalTrainingEvent
This entity provides a single and simple way of accessing the content from the Apprentice Internal Training Event.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Access to the Apprentice Internal Training Event object is regulated by role-based permissions.
Use Case
Code Example:
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeInternalTrainingEvent(6723L)",
"type": "SFOData.ApprenticeInternalTrainingEvent"
},
"externalCode": "6723",
"startDateAndTime": "/Date(1445637600000+0000)/",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "ApprenticeInternalTrainingEvent",
"mdfSystemVersionId": null,
"shareStatus": "SHARED",
"location": null,
"eventType": "6602",
"lastModifiedDateTime": "/Date(1445942436000+0000)/",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "CE036E7EA8704F18B3F9708695E4FD70",
"mdfSystemEntityId": "E0E4F78A984441F0B581E8B1FBA2CFEE",
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1445942436000+0000)/",
"learningItem": null,
"createdDate": "/Date(1445602964000)/",
"note": null,
"mdfSystemRecordStatus": "N",
"isAllDayEvent": true,
"endDateAndTime": "/Date(1446242400000+0000)/",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1445602964000+0000)/",
"lastModifiedDate": "/Date(1445942436000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"eventName": "zum test",
"assignedApprenticeGroups": {
"__deferred": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeInternalTrainingEvent(6723L)/assignedApprenticeGroups"
}
},
"shareStatusNav": {
"__deferred": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeInternalTrainingEvent(6723L)/shareStatusNav"
}
},
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeInternalTrainingEvent(6723L)/mdfSystemRecordStatusNav"
}
},
"assignedApprentices": {
"__deferred": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeInternalTrainingEvent(6723L)/assignedApprentices"
}
},
"mdfSystemStatusNav": {
"__deferred": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeInternalTrainingEvent(6723L)/mdfSystemStatusNav"
}
},
3.4 ApprenticePracticalTrainingEvent
This entity provides a single and simple way of accessing the content from the Apprentice Practical Training Event.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Access to the Apprentice Practical Training Event object is regulated by role-based permissions.
Use Case
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticePracticalTrainingEvent(6967L)",
"type": "SFOData.ApprenticePracticalTrainingEvent"
},
"externalCode": "6967",
"startDateAndTime": "/Date(1453158000000+0000)/",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "ApprenticePracticalTrainingEvent",
"mdfSystemVersionId": null,
"shareStatus": "SHARED",
"department": "de2",
"eventType": "6747",
"lastModifiedDateTime": "/Date(1453466572000+0000)/",
"mdfSystemTransactionSequence": "1",
This entity provides a single and simple way of accessing the content from the Apprentice School.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
3.6 ApprenticeSchoolEvent
This entity provides a single and simple way of accessing the content from the Apprentice School Event.
Permissions
Use Case
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://mo-e40605f30.mo.sap.corp:443/odata/v2/
ApprenticeSchoolEvent(6822L)",
"type": "SFOData.ApprenticeSchoolEvent"
},
"externalCode": "6822",
"startDateAndTime": "/Date(1448838000000+0000)/",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "ApprenticeSchoolEvent",
"mdfSystemVersionId": null,
"shareStatus": "NOT_SHARED",
"eventType": "6604",
"lastModifiedDateTime": "/Date(1448889138000+0000)/",
4.1 VendorInfo
This entity lets you display view vendor information such as the vendor code and language-specific descriptions
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Request Information
Operation Get
URI https://host.com/odata/v2/VendorInfo?
$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://host.com/odata/v2/
VendorInfo(effectiveStartDate=datetime'1992-07-01T00:00:00',vendorCode='Wipro')",
"type": "SFOData.VendorInfo"
},
"vendorCode": "Wipro",
"effectiveStartDate": "\/Date(709948800000)\/",
"mdfSystemLastModifiedDate": "\/Date(1469138991000)\/",
"mdfSystemObjectType": "VendorInfo",
"mdfSystemLastModifiedDateWithTZ": "\/Date(1469138991000+0000)\/",
"description_ro_RO": null,
"lastModifiedDateTime": "\/Date(1469138991000+0000)\/",
"description_fr_CA": null,
"effectiveStatus": "A",
"mdfSystemRecordId": "820AB0FD94394715B790117136881365",
"mdfSystemEntityId": "95C37BBA405341EEB1E13D5635CD23D6",
"description_cs_CZ": null,
"description_de_DE_SF": null,
"description_fi_FI": null,
4.2 WorkOrder
Supported Operations
Operation Description
Properties
For more information about the properties and navigation properties, please go to Admin Center API Center
OData API Data Dictionary or use the API query: https://<hostname>/odata/v2/<Entity>/$metadata.
Request Information
Operation Query
URI https://<hostname>/odata/v2/WorkOrder?
$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
WorkOrder(effectiveStartDate=datetime'2016-07-01T00:00:00',userSysId='ffff')",
"type": "SFOData.WorkOrder"
},
"effectiveStartDate": "\/Date(1467331200000)\/",
"userSysId": "ffff",
"startDate": "\/Date(1467331200000)\/",
"mdfSystemObjectType": "WorkOrder",
"mdfSystemVersionId": null,
"endDate": "\/Date(1469923200000)\/",
"effectiveStatus": "A",
"lastModifiedDateTime": "\/Date(1469139083000+0000)\/",
"effectiveEndDate": "\/Date(1469923200000)\/",
"currency": "INR",
"billingRate": "20140729",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "3A53FB89E8DB4C799B50142D664D63CC",
"billingAmount": "221",
"mdfSystemEntityId": "E1F72484B6B5486C9CC3F61444D5D746",
"workOrderOwnerId": "ggadmin",
"lastModifiedDateWithTZ": "\/Date(1469139083000+0000)\/",
"createdDate": "\/Date(1469139083000)\/",
"mdfSystemRecordStatus": "N",
"workOrderId": "test_workorder",
"vendor": "Wipro",
"workOrderName": "test_workorder",
"workerType": null,
"createdBy": "WF1",
"createdDateTime": "\/Date(1469139083000+0000)\/",
"lastModifiedBy": "WF1",
"lastModifiedDate": "\/Date(1469139083000)\/",
"currencyNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
WorkOrder(effectiveStartDate=datetime'2016-07-01T00:00:00',userSysId='ffff')/
currencyNav"
}
},
"wfRequestNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
WorkOrder(effectiveStartDate=datetime'2016-07-01T00:00:00',userSysId='ffff')/
wfRequestNav"
}
},
"workOrderOwnerIdNav": {
"__deferred": {
5.1 DeductionScreenId
This entity provides the Non screen IDs that are required for configuring the Deduction UI in Employee Central.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Use Cases
Permissions
Role-based Assign the relevant permissions for deductions in User Permissions Manage Deductions .
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Supported Operations
Operation Description
Use Cases
This entity subtracts recurring expenses from the gross income of employees.
Permissions
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Supported Operations
Operation Description
Use Cases
6.1 EmpBeneficiary
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Related Information
6.2 EmpCompensation
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedOn:
Use Case: Query the System for Employees on the basis of Pay Group and
Creation Date
https://<hostname>/odata/v2/ Get all Persons which are in pay group 'xxx' and are created af
EmpCompensation?$filter=payGroup eq ter 'xxxx-xx-xx'
'NA_GROUP' and createdOn gt
datetime'2011-08-01T00:00:00'&$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/public/
EmpCompensation(seqNumber=1L,startDate=datetime'2011-08-15T00:00:00',userId='rallen1
')",
"type": "SFOData.EmpCompensation"
},
"startDate": "/Date(1313366400000)/",
"userId": "rallen1",
"seqNumber": "1",
"endDate": "/Date(253402300799000)/",
"isEligibleForCar": false,
"lastModifiedDateTime": "/Date(1325617370000+0000)/",
"benefitsRate": "0",
"event": "2294",
"payGrade": null,
"isHighlyCompensatedEmployee": null,
"eventReason": "PAYPRO",
"payGroup": "NA_GROUP",
"lastModifiedOn": "/Date(1325617370000)/",
"createdOn": "/Date(1313433937000)/",
"isInsider": null,
"createdBy": "eeee",
"createdDateTime": "/Date(1313433937000+0000)/",
"lastModifiedBy": "admin",
"payType": "1593",
"pensionableSalary": null,
"notes": null,
"isEligibleForBenefits": false,
"eventNav": {
"__deferred": {
Request:
Operation Upsert
URI http://<Hostname>/odata/v2/Upsert
Content-Type: application/json
Payload
Sample Code
{
"__metadata": {
"uri":
"EmpCompensation(seqNumber=1L,startDa
te=datetime'2018-12-28T00:00:00',user
Id='userIdVVas101')",
"type": "SFOData.EmpCompensation"
},
"eventReason":"HIRNEW",
"payrollId" :"777",
"payrollSystemId":"USDDD"
}
Response:
Sample Code
6.2.1 empCompensationCalculated
This entity exposes a transient value that you see in the Compensation Information portlet.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Sample Code
Response
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmpCompensation(seqNumber=1L,startDate=datetime'2008-07-01T00:00:00',userId='pluc
as1')",
"type": "SFOData.EmpCompensation"
},
"startDate": "/Date(1214870400000)/",
"userId": "plucas1",
"seqNumber": "1",
"endDate": "/Date(253402214400000)/",
"isEligibleForCar": null,
"lastModifiedDateTime": "/Date(1263496137000+0000)/",
"benefitsRate": null,
"event": null,
"isHighlyCompensatedEmployee": null,
"eventReason": null,
"payGroup": null,
"lastModifiedOn": "/Date(1263496137000)/",
"createdOn": "/Date(1263496137000)/",
"createdBy": "admin",
"createdDateTime": "/Date(1263496137000+0000)/",
"lastModifiedBy": "admin",
"payType": "1597",
"notes": null,
Tell Me More
● GetCompaRatioByUserDateAndSeq - This calculates the Compa-Ratio field that you see in the Compensation
Information portlet.
● GetRangePenetrationByUserDateAndSeq - This calculates the Range Penetration field that you see on the
Compensation Information portlet.
Neither Compa-Ratio nor Range Penetration is stored on the database so both fields are treated as transient
fields. If you want to expose their values, you need to use empCompensationCalculated.
It has been designed for use in UI scenarios and is not suitable for mass data replication.
Related Information
This entity exposes a transient value that is calculated from the pay component group sums that are in the
compensation information record. It is calculated by GetEligiblePayComponentGroupsByUserDateAndSeq and is
for use in UI scenarios and is not suitable for mass data replication.
Operations Allowed
Transient values are not stored to the database so you can't query them directly. Instead you have to treat
empCompensationGroupSumCalculated as a child entity of EmpCompensation. In addition to $expand, you can
also use the operators $select and $format with the GET operation but please note that $filter,$orderby, $skip, and
$top are not supported.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Sample Code
Response
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://sfapiqacand.sflab.ondemand.com:443/odata/v2/
EmpCompensation(seqNumber=1L,startDate=datetime'2008-07-01T00:00:00',userId='pluc
as1')",
"type": "SFOData.EmpCompensation"
},
"startDate": "/Date(1214870400000)/",
"userId": "plucas1",
"seqNumber": "1",
"endDate": "/Date(253402214400000)/",
"isEligibleForCar": null,
"lastModifiedDateTime": "/Date(1263496137000+0000)/",
"benefitsRate": null,
"event": null,
"isHighlyCompensatedEmployee": null,
"eventReason": null,
Additional Information
Take a look at the table here for additional information on some of the properties
errorCode The errorCode "Success" indicates that the call has been suc
cessful and calculation results are returned.
errorMessage The errorCode "ErrorMximumRecord" indicates that the num
ber of records called exceeds the maximum of 50 and the calls
will not be made.
Related Information
The entity contains information such as the termination date, possibility of rehire, payroll information and so on.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case 1: Query the System to get all Global Assignments of an Employee
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
EmpEmployment(personIdExternal='mcolton1',userId='184')",
"type": "SFOData.EmpEmployment"
},
"personIdExternal": "mcolton1",
"userId": "184",
"startDate": "/Date(1420070400000)/",
"eligibleForStock": null,
"initialOptionGrant": null,
"payrollEndDate": null,
"serviceDate": null,
Use Case 2: Update External User Record with Employment related Information
Request:
Operation POST
URI http://<Hostname>.com/odata/v2/upsert
{"__metadata": {
"uri":
"EmpEmployment(personIdExternal='user
IdVVas101',userId='userIdVVas101')"
},
"startDate":"/Date(1388534400000)/",
"personIdExternal":"userIdVVas101",
"userId":"userIdVVas101"
}
Response:
Sample Code
Related Information
This entity contains employment or global assignment termination information for an employee.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://hostname/odata/v2/
EmpEmploymentTermination(endDate=datetime'2014-12-09T00:00:00',personIdExternal='hmu
eller1',userId='189')",
"type": "SFOData.EmpEmploymentTermination"
},
"personIdExternal": "hmueller1",
"userId": "189",
"endDate": "/Date(1418083200000)/",
"payrollEndDate": null,
"benefitsEndDate": null,
"okToRehire": null,
6.5 EmpGlobalAssignment
This entity contains details about the global assignment for an employee. You can create a new global assignment
by upserting this entity.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
EmpGlobalAssignment('183')",
"type": "SFOData.EmpGlobalAssignment"
},
"userId": "183",
"startDate": "/Date(1417392000000)/",
"payrollEndDate": null,
"endDate": null,
"lastModifiedDateTime": "/Date(1415696549000+0000)/",
"lastModifiedOn": "/Date(1415678549000)/",
"createdOn": "/Date(1415678549000)/",
"assignmentClass": "GA",
"personIdExternal": "ttest",
"createdBy": "admin",
"assignmentType": "6131",
"plannedEndDate": "/Date(1446336000000)/",
"createdDateTime": "/Date(1415696549000+0000)/",
"lastModifiedBy": "admin",
"customString1": null,
"customString110": null,
"userNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
EmpGlobalAssignment('183')/userNav"
}
},
"assignmentTypeNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
EmpGlobalAssignment('183')/assignmentTypeNav"
}
},
"employmentNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
EmpGlobalAssignment('183')/employmentNav"
}
}
}
]
}
}
When you upsert this entity, a new global assignment is created meaning that there is a new record in
EmpGlobalAssignment and a new entry in the User entity for this employee. Since EmpGlobalAssignment and
EmpEmployment share the same persistency, each global assignment appears as an Employment in
EmpEmployment with the type global assignment.
Related Information
6.6 EmpJob
This entity contains information such as the employee's manager, the department, or other information relating to
the employee's job.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedOn:
https://<hostname>/odata/v2/EmpJob? Get all Persons having Carla Grant as Manager and working for
$filter=company eq 'ACE_USA' and managerId ACE_USA
eq 'cgrant1'&$select=employmentNav/
personNav/personalInfoNav/
firstName,employmentNav/personNav/
personalInfoNav/lastName,company&
$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
EmpJob(seqNumber=1L,startDate=datetime'2010-12-01T00:00:00',userId='rallen1')",
"type": "SFOData.EmpJob"
},
"company": "ACE_USA",
"employmentNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/public/
EmpJob(seqNumber=1L,startDate=datetime'2010-12-01T00:00:00',userId='rallen1')/
employmentNav"
}
}
}
]
}
}
Use Case 2: Update External User Record with Job related Information
Request:
Operation POST
URI http://<Hostname>.com/odata/v2/upsert
{
"__metadata": {
"uri":
"EmpJob(seqNumber=1L,startDate=dateti
me'2018-12-28T00:00:00',userId='userI
dVVas101')",
"type": "SFOData.EmpJob"
},
"userId": "userIdVVas101",
"seqNumber": "1",
"eventReason": "HIRNEW",
"company": "ACE IT",
"managerId" : "snadmin",
"timezone" : "IST"
}
Response:
Sample Code
Related Information
This entity contains the employee relationship information to one or more managers.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
When you make a last modified query, look at how this entity behaves with $filter and lastModifiedOn:
Use Cases
The following example shows how to get all entries that have the external code "hr manager".
Sample request:
Operation GET
URI https://<hostname>.com/odata/v2/
EmpJobRelationships?
$filter=relationshipTypeNav/externalCode
eq 'hr manager'&
$expand=relationshipTypeNav&
$select=relationshipTypeNav/
externalCode,relationshipType&$format=JSON
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
EmpJobRelationships(relationshipType='5777',startDate=datetime'2011-07-13T00:00:00',
userId='147')",
"type": "SFOData.EmpJobRelationships"
},
"relationshipType": "5777",
"relationshipTypeNav": {
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
PicklistOption(5777L)",
"type": "SFOData.PicklistOption"
},
"externalCode": "hr manager"
}
}
]
}
}
The following example shows how to delimit the job relationship between user "4000021" and user "4000185".
Sample request:
Operation POST
URI http://<Hostname>.com/odata/v2/upsert
Payload {
"__metadata":{
"uri":"EmpJobRelationships(relationshipT
ype='5777',startDate=datetime'2013-11-15
T00:00:00',userId='4000021')",
"type":"SFOData.EmpJobRelationships"
},
"startDate":"/Date(1384473600000)/",
"relationshipType":"5777",
"userId":"4000021",
"relUserId":"4000185",
"operation":"DELIMIT"
}
Sample response:
{
"d": [
{
"key": "EmpJobRelationships/relationshipType=5777,EmpJobRelationships/
startDate=2013-11-15T00:00:00.000+08:00,EmpJobRelationships/userId=4000021",
"status": "OK",
"editStatus": "UPSERTED",
"message": null,
Related Information
6.8 EmpPensionPayout
This entity contains information about how the pension will be paid to the employee.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Related Information
This entity contains information about workflow requests associated with an employee.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/EmpWfRequest(307L)",
"type": "SFOData.EmpWfRequest"
},
"eventReason": "PAYMKT",
"subjectId": "cgrant1"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/EmpWfRequest(306L)",
"type": "SFOData.EmpWfRequest"
Related Information
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmpWorkPermit(country='USA',documentNumber='gr',documentType='6148',userId='174')
",
"type": "SFOData.EmpWorkPermit"
},
"documentType": "6148",
"userId": "174",
"documentNumber": "gr",
"country": "USA",
"attachmentFileSize": "44711",
Related Information
6.11 EmpPayCompNonRecurring
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Each payment record is associated with a sequence number, which enables you to have more than one pay
component on the same pay date. It can be defined as an additional business key via data model configuration.
With or without the seqNumber property being enabled, the business key and required fields for the entity are
different.
No user_sys_id user_sys_id
pay-component-code pay-component-code
pay_date pay_date
seqNumber pay-component-code
pay_date
seqNumber
To enable seqNumber, add the following attributes to the seqNumber property in the data model from Provisioning:
Remember
As a customer, you do not have access to Provisioning. To complete tasks in Provisioning, contact your
Implementation Partner. If you are no longer working with an Implementation Partner, contact SAP Cloud
Support.
For more information about seqNumber, see Can you update a Pay Component Non Recurring data that exists on
the same pay-date with the same pay-component-code?.
Use Cases
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
EmpPayCompNonRecurring(payComponentCode='BNS-
USA',payDate=datetime'2011-05-09T00:00:00',userId='mbarista1')",
"type": "SFOData.EmpPayCompNonRecurring"
},
"value": "20000",
"employmentNav": {
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
EmpEmployment(personIdExternal='mbarista1',userId='mbarista1')",
"type": "SFOData.EmpEmployment"
},
"personNav": {
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerPerson('mbarista1')",
"type": "SFOData.PerPerson"
},
"personalInfoNav": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
public/
PerPersonal(personIdExternal='mbarista1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.PerPersonal"
},
"lastName": "Barista",
"firstName": "Marcia"
}
]
}
}
}
}
]
}
}
Related Information
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedOn:
Use Cases
‹‹ If necessary, add any supplementary information about the use cases here ››
https://<hostname>/odata/v2/ Get all Persons having a greater income than 100000 USD per
EmpPayCompRecurring?$filter=payComponent year
eq 'Base Salary' and paycompvalue ge
'100000' and currencyCode eq 'USD' and
frequency eq 'ANN'&$format=JSON
Code Examples
6.13 EmpTimeAccountBalance
The EmpTimeAccountBalance entity provides time account balance information, enabling external systems like
payrolls to capture this data. The most common use case for deriving time account balance information is to enrich
the employee’s pay slip with time off data.
As the balance is not stored in EC Time Off, the API needs to calculate the balance as of the specified date (balance
as of date). The API therefore needs to determine the valid time account(s) of the respective user (that is,
employment) and time account type and calculate the balance by summing up the time account details.
The API currently returns only calculated data based on accrual runs already performed. Simulated data is not
returned by the API.
For details, check the corresponding Implementation Information for Time Off available at http://help.sap.com/
cloud4hr?current=on-demand#section5.
Caution
The external code of the time account type is case sensitive. You have to ensure that the external code is
correct.
Note
Example
If the service is called with a balance as of date 1.3.2018, the system identifies two valid time accounts and
returns both results. Result would be 2 records as above.
If the service is called with a balance as of date 1.8.2018, the system identifies only one valid time account.
Result would be 18 days. One record is returned only.
Permissions
Ensure that for Manage Integration Tools the following checks are switched on:
Required Fields
The Entity has two mandatory filters, to be used in $filter, which support IN and EQ operation only. The 2nd
optional parameter is a normal URL parameter which requires a date in format YYYY-MM-DD.
Name Description
timeAccountType (mandatory) – as part of $filter List of Time Account Type(s). Error if no time account type is
provided.
balanceAsOfDate (optional) – URL parameter Balances as of Date If no date is passed, today will be used as
the default effective date
Caution
When you are using this entity in middleware or integration center, bulk data abstraction is not possible
because UserID is a mandatory field and giving all UserID in the filter criteria will lead to a large query that
would result in a failure.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
The following properties are returned for each record. The API might return several records per user and time
account type provided in the filter. The unique key of the returned records is neither the userId nor the
timeAccountType but the unique UUID of the TimeAccount Entity. This means that the API returns the balance for
all relevant time accounts of the given users and adds additional information based on the returned time account.
Property Description
Example: Payroll Integration - provide time account balance information for pay slip:
Call: https://<host.com>/odata/v2/EmpTimeAccountBalance
?$filter=userId+in+'btassimo','bwfapproval'+and
+timeAccountType+in+'bgs_tacct_irregularWorkSchedule_hours',
'bgs_tacct_WF_NoStep_CcRole-Person',
'bgs_tacct_WF_stepEM_CcEMM',
'bgs_tacct_WF_NoStep_CcDynamicGroup',
'bgs_tacct_WF_NoStep_CcDynamicRole'
&$format=JSON
&balanceAsOfDate=2014-09-01
Results
{"d" : {"results" : [
{
"__metadata" : {
"uri" : "https://<host.sap.com>/odata/v2/
EmpTimeAccountBalance('168c659421714e16bcd1963d9937731b')", "type" :
"SFOData.EmpTimeAccountBalance"
}, "timeAccount" : "168c659421714e16bcd1963d9937731b", "balance" : "240",
"userId" : "btassimo", "timeUnit" : "HOURS", "accountClosed": false,
"timeAccountType" : "bgs_tacct_irregularWorkSchedule_hours"
Error Handling
Invalid userIds or Time Account Types are not reported as errors and will just lead to an empty result set.
You use this entity to differentiate primary from secondary employments during concurrent employment
replications.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation GET
URI https://<hostname>.com/odata/v2/PerPerson?
$format=json&$filter=personIdExternal%20eq
%20'jsmith'&
$expand=secondaryAssignmentsNav/
allSfProcesses
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/PerPerson('jsmith')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "jsmith",
"dateOfBirth": null,
"lastModifiedOn": "/Date(1303743709000)/",
"lastModifiedDateTime": "/Date(1303743709000+0000)/",
"dateOfDeath": null,
"createdOn": "/Date(1303743708000)/",
"countryOfBirth": null,
"createdBy": "v4admin",
"regionOfBirth": null,
"createdDateTime": "/Date(1303743708000+0000)/",
"lastModifiedBy": "v4admin",
"personId": "11",
"personRerlationshipNav": {
"__deferred": {
"uri": "https://<hostname>.com/odata/v2/
PerPerson('jsmith')/personRerlationshipNav"
}
},
"emergencyContactNav": {
"SecondaryAssignments_effectiveStartDate": "/Date(1466726400000)/",
"externalCode":
"c95d6999d02e46878dcad5ef2a02397c",
"mdfSystemEffectiveEndDate": "/
Date(253402214400000)/",
"mdfSystemObjectType":
"SecondaryAssignmentsItem",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "/
Date(1467020470000+0000)/",
"usersSysId": "181",
"mdfSystemTransactionSequence": "1",
"createdBy": "admin",
"mdfSystemRecordId":
"448E51556F414997A79F1360D837CD29",
"mdfSystemEntityId":
"DCAF412BC16D46408FB7D3EEDB7DDF63",
"createdDateTime": "/
Date(1467020470000+0000)/",
"lastModifiedBy": "admin",
"mdfSystemStatus": "A",
"lastModifiedDate": "/
Date(1467020470000)/",
"mdfSystemEffectiveStartDate": "/
Date(-2208988800000)/",
"lastModifiedDateWithTZ": "/
Date(1467020470000+0000)/",
"createdDate": "/Date(1467020470000)/",
"mdfSystemRecordStatus": "N",
"usersSysIdNav": {
"__deferred": {
"uri": "https://<hostname>.com/
odata/v2/
SecondaryAssignmentsItem(SecondaryAssignments_effectiveStartDate=datetime'2016-06
-24T00:00:00',SecondaryAssignments_externalCode='jsmith',externalCode='c95d6999d0
2e46878dcad5ef2a02397c')/usersSysIdNav"
}
},
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>.com/
odata/v2/
SecondaryAssignmentsItem(SecondaryAssignments_effectiveStartDate=datetime'2016-06
-24T00:00:00',SecondaryAssignments_externalCode='jsmith',externalCode='c95d6999d0
2e46878dcad5ef2a02397c')/mdfSystemRecordStatusNav"
}
},
"mdfSystemStatusNav": {
"__deferred": {
"uri": "https://<hostname>.com/
odata/v2/
SecondaryAssignmentsItem(SecondaryAssignments_effectiveStartDate=datetime'2016-06
-24T00:00:00',SecondaryAssignments_externalCode='jsmith',externalCode='c95d6999d0
2e46878dcad5ef2a02397c')/mdfSystemStatusNav"
}
}
}
]
},
"mdfSystemRecordStatusNav": {
"__deferred": {
Related Information
A composite child of SecondaryAssignments. It can only be upserted with SecondaryAssignments. Along with
SecondaryAssignments, it captures concurrent employment information. To be precise, the PerPerson entity has a
navigation secondayAssignmentsNav that lets you navigate to the entity SecondaryAssignments.
Operations Allowed
Operation Description
Although all operations are supported, the only one that makes any business sense is upsert.
Properties
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following query https://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Upsert Operation: Retrieves the secondaryAssignmentsNav which in turn will return the
SecondaryAssignmentsItems, that is information about the secondary employment. There is not often a business
case for this operation but it has been provided to support the cloning or transfer of data between similar instances
in a different environment. In this example here, user system ID (represented by the externalcode)for the primary
employment is PrimaryEmployment and the userSysID for secondary employment is represented by 301 (a
number automatically generated when a secondary employment is created)
Request: https://<hostname>.com/odata/v2/upsert
Payload Data
{
"__metadata": { "uri": "SecondaryAssignments"},
"effectiveStartDate" : "/Date(1420066800000)/",
"externalCode" : "mjaschob",
"allSfProcesses": {
"__metadata": { "uri": "SecondaryAssignmentsItem"},
"SecondaryAssignments_effectiveStartDate" : "/Date(1420066800000)/",
"SecondaryAssignments_externalCode" : "mjaschob",
"externalCode" : "myexternalcode55",
"usersSysId" : "301"
}
}
Additional Information
You can see an example of SecondaryAssigmentsItem in use in Differentiating primary from secondary
employment during concurrent employment replication [page 548]
Related Information
7.1 FiscalYearToCountryMap
This entity is used to map the fiscal year variant created for income tax declarations to a country.
Use Cases
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
7.2 FiscalYearVariant
This entity is the fiscal year variant created for income tax declarations.
Use Cases
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Flexible associations can be defined between two foundation objects in the Corporate Data Model. The example
below shows a one to one relationship between location and geozone; a one to many relationship is defined
between location and company. OData automatically creates navigations from the source entity to the target
entities, based on the relationship defined.
<hris-element id="location">
<hris-associations>
<association id="id" multiplicity="ONE_TO_ONE" destination-
entity="geozone"/>
<association id="id" multiplicity="ONE_TO_MANY" destination-
entity="company"/>
</hris-associations>
</hris-associations>
The diagram below shows the default relationships between the different OData entities.
Changing the associations in the Corporate Data Model might cause OData APIs to fail, more so when the
association is deleted. This usually happens when association is already being used by the OData API.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
‹‹ If necessary, add any supplementary information about the use cases here ››
Code Examples
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname.com>/odata/v2/FODynamicRole(6M)",
"type": "SFOData.FODynamicRole"
},
8.3 FOEventReason
This entity contains event reasons used to define a reason for changing employee data. Event reasons are related
to events defined in the PickListV2 entity and have an employee status assigned.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOEventReason(externalCode='PAYMLA',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FOEventReason"
},
"externalCode": "PAYMLA",
"status": "A",
"event": "2294"
}
]
}
}
8.4 FOFrequency
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/FOFrequency('DLY')",
"type": "SFOData.FOFrequency"
},
"externalCode": "DLY",
"description": "Daily",
"name": "Daily",
"annualizationFactor": "365"
}
]
}
}
8.5 FOGeozone
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOGeozone(externalCode='APAC',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.FOGeozone"
},
"createdBy": "admin",
"status": "A",
"name": "Asia Pacific"
}
]
}
}
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
The following example shows how to get the location information of Seoul and expand to address.
Sample request:
Operation GET
URI https://<hostname>/odata/v2/FOLocation?
$filter=externalCode eq 'KO_SEO'&
$expand=addressNavDEFLT&$format=JSON
Sample response:
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
FOLocation(externalCode='KO_SEO',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.FOLocation"
},
"startDate": "/Date(631152000000)/",
"externalCode": "KO_SEO",
"status": "A",
"endDate": "/Date(253402300799000)/",
"lastModifiedDateTime": "/Date(1317104275000+0000)/",
"lastModifiedOn": "/Date(1317104275000)/",
To create or update a location, you can use the UPSERT operation. The following example shows how to create a
location whose external code is "KO_SEO".
Sample request:
Operation POST
URI http://<Hostname>.com/odata/v2/upsert
Payload {
"__metadata":{
"uri":"FOLocation(externalCode='KO_SEO',
startDate=datetime'1990-01-01T00:00:00')
",
"type":"SFOData.FOLocation"
},
"startDate":"/Date(631152000000)/",
"externalCode":"KO_SEO",
"status":"A",
"endDate":"/Date(253402300799000)/",
"timezone":"Asia/Seoul",
"geozoneFlx":"APAC",
"description":"Seoul, Korea",
"name":"Seoul",
"locationGroup":"APAC",
"addressCountry": "KOR"
}
Sample response:
Sample Code
{
"d": [
{
"key": "FOLocation/externalCode=KO_SEO,FOLocation/
startDate=1990-01-01T00:00:00.000+08:00",
"status": "OK",
"editStatus": "UPSERTED",
"message": null,
"index": 0,
"httpCode": 200,
8.7 FOLocationGroup
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
8.8 FOPayComponent
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayComponent(externalCode='Base Salary',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FOPayComponent"
},
"startDate": "/Date(0)/",
"externalCode": "Base Salary",
"basePayComponentGroup": null,
"usedForCompPlanning": "COMP",
"payComponentType": "AMOUNT",
"endDate": "/Date(253370764800000)/",
"lastModifiedDateTime": "/Date(1304801484000+0000)/",
"currency": "USD",
"selfServiceDescription": null,
"isEarning": true,
"description": "Base Salary for USA",
"name": "Base Salary",
"recurring": true,
"status": "A",
"lastModifiedOn": "/Date(1304787084000)/",
"createdOn": "/Date(1299914597000)/",
"displayOnSelfService": true,
"createdBy": "v4admin",
"canOverride": true,
"frequencyCode": "ANN",
"payComponentValue": null,
"taxTreatment": null,
"createdDateTime": "/Date(1299932597000+0000)/",
"lastModifiedBy": "admin",
"target": false,
"basePayComponentGroupNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayComponent(externalCode='Base Salary',startDate=datetime'1970-01-01T00:00:00')/
basePayComponentGroupNav"
}
},
"taxTreatmentNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayComponent(externalCode='Base Salary',startDate=datetime'1970-01-01T00:00:00')/
taxTreatmentNav"
}
},
"frequencyCodeNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayComponent(externalCode='Base Salary',startDate=datetime'1970-01-01T00:00:00')/
frequencyCodeNav"
}
}
}
]
}
}
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayComponentGroup(externalCode='Base
Salary',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FOPayComponentGroup"
},
"externalCode": "Base Salary"
}
]
}
8.10 FOPayGrade
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
https://<hostname>.com/odata/v2/ Get all PayGrades with the status A and the externalCode XXX
FOPayGrade?$filter=status eq 'A' and
externalCode eq 'GR-1'&$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayGrade(externalCode='GR-1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.FOPayGrade"
},
"startDate": "/Date(631152000000)/",
8.11 FOPayRange
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayRange(externalCode='PR-1-EU',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.FOPayRange"
},
"startDate": "/Date(631152000000)/",
"externalCode": "PR-1-EU",
"minimumPay": "7146",
"status": "A",
"endDate": "/Date(253402214400000)/",
"lastModifiedOn": "/Date(1311238423000)/",
"lastModifiedDateTime": "/Date(1311252823000+0000)/",
"midPoint": "10718.5",
"companyFlx": null,
"currency": "USD",
"createdOn": "/Date(1300225256000)/",
"createdBy": "admin",
"payGradeFlx": "GR-12",
"geozoneFlx": "EMEA",
"description": null,
"frequencyCode": "ANN",
"name": "Pay Range 1-3",
"createdDateTime": "/Date(1300239656000+0000)/",
"lastModifiedBy": "admin",
"maximumPay": "14291",
"geozoneFlxNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayRange(externalCode='PR-1-EU',startDate=datetime'1990-01-01T00:00:00')/
geozoneFlxNav"
}
},
"frequencyCodeNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayRange(externalCode='PR-1-EU',startDate=datetime'1990-01-01T00:00:00')/
frequencyCodeNav"
}
},
"payGradeFlxNav": {
"__deferred": {
"uri": "https://<hostname>.com:443/odata/v2/
FOPayRange(externalCode='PR-1-EU',startDate=datetime'1990-01-01T00:00:00')/
payGradeFlxNav"
}
},
"companyFlxNav": {
"__deferred": {
"uri": "<hostname>.com:443/odata/v2/
FOPayRange(externalCode='PR-1-EU',startDate=datetime'1990-01-01T00:00:00')/
companyFlxNav"
}
}
}
]
}
}
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
FOWfConfig('GRT_TEST')",
"type": "SFOData.FOWfConfig"
},
"externalCode": "GRT_TEST",
"createdOn": "/Date(1379578155000)/",
"futureDatedAlternateWorkflow": null,
"createdBy": "admin",
"description": "GRT_TEST",
"name": "GRT_TEST",
"lastModifiedBy": "admin",
8.13 FOWfConfigStepApprover
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
You can use this entity to get detailed workflow information about these fields:
● actionType
● approverPositionRelationship
● approverType
● approverRole
● context
● relationshipToApprover
● respectRBP
● skipType
Request Information
Operation GET
URI http://<Hostname>/odata/v2/
FOWfConfigStepApprover
Sample Code
....
<entry>
<id>https://<hostname>.com/odata/v2/
FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)</id>
<title type="text"></title>
<updated>2016-10-11T08:22:03Z</updated>
<author>
<name></name>
</author>
<link rel="edit" title="FOWfConfigStepApprover"
href="FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)"></link>
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/
approverDynamicRoleNav" type="application/atom+xml;type=feed"
title="approverDynamicRoleNav"
href="FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)/
approverDynamicRoleNav"></link>
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/
approverGroupNav" type="application/atom+xml;type=entry"
title="approverGroupNav"
href="FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)/approverGroupNav"></
link>
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/
approverPositionNav" type="application/atom+xml;type=feed"
title="approverPositionNav"
href="FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)/
approverPositionNav"></link>
<category term="SFOData.FOWfConfigStepApprover" scheme="http://
schemas.microsoft.com/ado/2007/08/dataservices/scheme"></category>
<content type="application/xml">
<m:properties>
<d:stepNum m:type="Edm.Int64">1</d:stepNum>
<d:externalCode>LOA</d:externalCode>
<d:approverPositionRelationship m:null="true"></
d:approverPositionRelationship>
<d:lastModifiedDateTime
m:type="Edm.DateTimeOffset">2011-12-06T18:34:27Z</d:lastModifiedDateTime>
<d:actionType>NO_EDIT</d:actionType>
<d:skipType m:null="true"></d:skipType>
<d:approverRole>EH</d:approverRole>
<d:relationshipToApprover m:null="true"></
d:relationshipToApprover>
<d:approverType>ROLE</d:approverType>
<d:createdBy>admin</d:createdBy>
<d:lastModifiedBy>admin</d:lastModifiedBy>
<d:createdDateTime
m:type="Edm.DateTimeOffset">2011-07-28T00:28:27Z</d:createdDateTime>
<d:context>SOURCE</d:context>
<d:respectRBP m:null="true"></d:respectRBP>
<d:relationshipToPosition m:null="true"></
d:relationshipToPosition>
</m:properties>
</content>
</entry>
You can either query this entity directly as described above or via $expand=wfStepApproverNav from FOWfConfig.
Related Information
Contains information on working with FO (Foundation Objects) that have been migrated to MDF (Metadata
Framework)
As part of the phased migration of Foundation Objects (FO) to Metadata Framework (MDF), the FOs Cost Center,
Business Unit, Division, Department, Legal Entity, Job Classification, Job Function, Job Family, Pay Group, and
PayCalendar have been migrated. After migration, these FOs are now Generic Objects.
For these newly created GOs, you can influence the way the fields behave in API queries. For example, if Division
was not mapped, it would be displayed as any other MDF OData source, and you would still have the field
effectiveStartDate in the API query. In element field mapping, effectiveStartDate is mapped to the HRIS element ID
start-date. Here, we are telling the system that the original field name for effectiveStartDate is startdate. Likewise,
effectiveStatus is mapped to status, cust_string1 is mapped to custom_string1, cust_string2 is mapped to
custom_string2, and so on.
Let’s see how it works for the various fields. The system searches the object definition and then the element type
map. If there is a mapping in the Element Type Map (see Element Field Map for EC Migration section), it displays the
field name from the map. For example, you define a new custom field called cust_string7.
You have a picklist field and now you define a field in the object definition, for example, cust_string4 is mapped to
custom-string4.
Now you will have four attributes in OData. This entry means that you will have the following four fields:
The cust_string4 and cust_string4Nav coming from the MDF object definition will be available even if you do not
have an entry in the element type map.
If the element type map does not have cust_string4, that is, if it is not mapped there, you still have the cust_string4
and cust_string4Nav
The customString4 gives the optionID of picklist option from ECV2 and customString4Nav provides navigation to
the old ECV2 picklist option as illustrated in the screenshot below. If you do not have an element type map , a
default mapping is made available.
To delete a cust_string, select Take Action Make Correction , and delete cust_string4.
The two extra fields will not be available now since there is no mapping.
Before the migration, migrated FOs exposed language-independent texts for Name and Description. In addition, it
provided two links to FOTranslation to find the language-dependent texts for both fields. For example, the Odata
entities FOJobFunction and FOPayGroup provided the navigation attributes nameTranslationNav and
descriptionTranslationNav to FoTranslation, if the translation of FOs is activated in Provisioning.
After the migration, Name and Description will still be available for migrated FOs,to expose language-independent
texts. In addition, the two navigation attributes will also be available. However, they will not be really linked to
FOTranslation, but will always return an empty value. So the language-dependent texts will be integrated as
additional attributes into the migrated FO Odata entity (for example FOJobFunction, FOPayGroup) in the standard
MDF way.
If you are not using FOTranslation for migrated FOs, de-select the FOTranslation navigation in Boomi. In case you
are using FOTranslation for migrated FOs, you need to adapt the UI.
The element type mapping shows the mapping between HRIS field names and field names for the GOs. The steps
to view the element type mapping for a migrated Foundation Object are described here
Note
Not everyone can view the element Element Type Mapping. Grant the relevant permissions in User
Permissions Miscellaneous Permissions as follows:
8.14.2 Associations
Let’s say, in the object definition you have an association defined. The association is called cust_toLegalEntity and
the definition is called Legal Entity. In the Element Type map (under Element Association Map for EC Migration
section), you have the association name cust_toLegalEntity, which is mapped to HRIS destination entity company.
This association is handled in the same way as an association for an FO is defined in the Corporate Data Model.
This means that you have the fields companyFlx and companyFlxNav in OData object definition. These fields will be
available only if the association defined in the object definition is added to the Association Element Type map.
For GO associations, if the field is not in the association mapping, you will only have the field that has the same
name as the association, for example, cust_toLegalEntity. This field can be queried and upserted. If this field is
added to the element association map, you will have the fields companyFlxNav and companyFlx for query and
upsert respectively.
If you want to add an association or a field, and want the field to behave in the same way as before the migration,
you must manually adjust the mapping objects.
Country-specific fields are fields of an object that are only relevant for specific countries. For example, for legal
entities in the US, you have to specify a Federal Reserve Bank ID, which is not relevant for legal entities in other
countries.
The only migrated FOs, which have country-specific fields, are Legal Entity (company) and Job Classification
(jobCode).
In OData (as well as the MDF object model), these fields are not stored directly in the main entity (FO Company or
FO Job Code). Instead, they are part of additional country-specific entities (see the sections LegalEntity<Country>
and JobClassification<Country>). These country-specific entities can be reached from the main entity using
navigation attributes.
Points to note:
● For FO Company, the navigation attributes for the delivered country specializations follow the naming
conventions toLegalEntity<Country> (see the section FOCompany).
● For FO Job Code, there is an intermediate entity JobClassificationCountry (see the section
JobClassificationCountry).
These navigation attributes and entity names differ from the legacy names. To ensure backward compatibility, you
can activate the old behavior for individual countries by maintaining the localization map in the element type map.
The following is an example of the element type map of Legal Entity (company):
Here, the localization map is maintained for two countries (USA and Germany). The effect of this is that, for these
two countries, additional navigation attributes and target entities will be available in addition to the standard
navigation attributes and entities described above. For USA, the effects are as follows:
● In addition to the standard entity LegalEntityUSA, there will be the backward-compatible entity
FOLegalEntityLocalUSA. This means that the MDF object LegalEntityUSA has two different OData
representations.
● In addition to the standard navigation attribute toLegalEntityUSA (with a target LegalEntityUSA), there is a
navigation attribute localNavUSA (with a target FOLegalEntityLocalUSA).
Similarly, if you maintain the localization map for USA in the element type map of Job Classification (jobCode), the
effects are as follows:
● In addition to the standard entity JobClassificationUSA, there will be the backward-compatible entity
FOJobCodeLocalUSA. These are different representations of the same MDF object JobClassificationUSA.
● In addition to the standard navigation chain toJobClassificationCountry/toJobClassificationUSA
(with target JobClassificationUSA), there is a shortcut navigation attribute called localNavUSA (with target
FOJobClassLocalUSA).
If you do not maintain an element type map, you have the following localization mapping that is used (as a fall
back):
GO Association Country
toLegalEntityARG ARG
toLegalEntityDEU DEU
toLegalEntityESP ESP
toLegalEntityFRA FRA
toLegalEntityUSA USA
GO Association Country
toJobClassificationCountry.toJobClassificationAUS AUS
toJobClassificationCountry.toJobClassificationBRA BRA
toJobClassificationCountry.toJobClassificationCAN CAN
toJobClassificationCountry.toJobClassificationFRA FRA
toJobClassificationCountry.toJobClassificationGBR GBR
toJobClassificationCountry.toJobClassificationITA ITA
toJobClassificationCountry.toJobClassificationUSA USA
To add country-specific fields for a new country, refer to the section Adding Country-Specific Fields for a New
Country.
If you need the backward-compatible OData representation for a country added in this way, you must do the
following:
● Maintain an entry in the localization map of the host element type map.
For this, you must add the association name for the new country and the ISO country code for it.
● Create an element type map for the new MDF object that you have created.
If you want to map the new country-specific fields to the legacy field names (for example, genericString1), you
must maintain an element field map.
In the example for India (as in section Adding Country-Specific Fields for a New Country), you must add the
following:
Adding Country-Specific Fields for a New Country (For Legal Entity) [page 162]
Adding Country-Specific Fields for a New Country (For Job Classification) [page 167]
Assume that you want to add country-specific fields for a new country, let us take India.You need to follow these
steps:
Related Information
Adding Country-Specific Fields for a New Country (For Job Classification) [page 167]
Procedure
To assign the new country object to Legal Entity, the steps are as follows:
Procedure
Assume that you want to add country-specific fields for a new country, let us take Spain.You need to follow these
steps:
Adding Country-Specific Fields for a New Country (For Legal Entity) [page 162]
Procedure
To assign the new country object to JobClassificationCountry, the steps are as follows:
Procedure
Let's take an example. The FO Business Unit is associated to Legal Entity and you have an association to company
1. You do an upsert by specifying the start date and external code of the business unit. In this case, either the
business unit is changed or a new one is created. Additionally, you list down the field that you want to change, for
example, companyFlx for company 2 and a pipe-separated list of the association target for company 3. Now the
existing association to company 1 is replaced and you have an association to company 2.
However, if you do an upsert through the MDF field cust_toLegalEntity, and specify company 1 and company 2, you
will have three associations. The upsert through the MDF field will only add or merge the existing ones.
Hence for example, Position will behave in the MDF way (merge behavior), and Job Classification, which is not on
MDF, will behave in the other manner (replacement).
8.14.5 CurrencyExchangeRate
The OData API entity CurrencyExchangeRate provides information about currency conversions in Employee
Central. It is based on the MDF object Currency Exchange Rate.
The source currency is 1 unit of USD and the target currency is 1 unit of CAD. The exchange rate shows how much
of the target currency (CAD) is needed to purchase one unit of the source currency (USD). Therefore, if the
exchange rate is 1.0950, it costs 1.0950 Canadian dollars to purchase 1 U.S. dollar.
The currency exchange rate type DEFAULT corresponds to the Compensation legacy currency conversion table
ECT_CONV_TABLE. The currency exchange rate type is defined as a picklist.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object Information
MDF Object:CurrencyExchangeRate
Business Keys:sourceCurrency,targetCurrency,currencyExchangeRateType
Required
Fields:sourceCurrency,targetCurrency,effectiveStartDate,exchangeRate,currencyExchang
eRateType
Full Purge:Yes
Incremental Purge:Yes
Effective-date:true
Operation Query
Request https://<localhost:port>/odata/v2/CurrencyExchangeRate?
$format=json&$select=externalCode&$top=3
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-ARS-MYR')",
"type": "SFOData.CurrencyExchangeRate"
},
"externalCode": "DEFAULT-ARS-MYR"
}, {
"__metadata": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-HKD-EUR')",
"type": "SFOData.CurrencyExchangeRate"
},
"externalCode": "DEFAULT-HKD-EUR"
}, {
"__metadata": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-HKD-SGD')",
"type": "SFOData.CurrencyExchangeRate"
},
"externalCode": "DEFAULT-HKD-SGD"
}]
}
}
Operation Query
Request https://<localhost:port>/odata/v2/
CurrencyExchangeRate(externalCode='DEFAULT-USD-
EUR',effectiveStartDate=datetime'1900-01-01T00:00:00')?
$format=json
Response
Sample Code
{
"d": {
"__metadata": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-USD-EUR')",
"type": "SFOData.CurrencyExchangeRate"
},
"effectiveStartDate": "\/Date(-2208988800000)\/",
"externalCode": "DEFAULT-USD-EUR",
"exchangeRate": "1.125",
"targetCurrency": "EUR",
"effectiveStatus": "A",
"sourceCurrency": "USD",
"currencyExchangeRateType": "DEFAULT",
"sourceCurrencyNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-USD-EUR')/sourceCurrencyNav"
}
},
"targetCurrencyNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-USD-EUR')/targetCurrencyNav"
}
},
"currencyExchangeRateTypeNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-USD-EUR')/currencyExchangeRateTypeNav"
}
},
"effectiveStatusNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
CurrencyExchangeRate(effectiveStartDate=datetime'1900-01-01T00:00:00',externalCod
e='DEFAULT-USD-EUR')/effectiveStatusNav"
}
}
}
}
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Content-Type: application/json;charset=utf-8
Response
Sample Code
Operation Delete
Request https://<localhost:port>/odata/v2/
CurrencyExchangeRate(externalCode='DEFAULT-USD-
EUR',effectiveStartDate=datetime'1900-01-01T00:00:00')
Response
Sample Code
Error Messages
The table below lists the error messages generated when using this API:
WORKSTRUCTURE_VALIDATION_IDENTICAL_SOURCE_TAR Exchange rate with the same source currency and target
GET_CURRENCIES_NOT_ALLOWED
currency is not allowed.
WORKSTRUCTURE_VALIDATION_REVERSE_RATE_OF_CURR A reverse exchange rate with source currency USD and target
ENCY_PAIR_ALREADY_EXISTS
currency EUR of currency exchange rate type DEFAULT
already exists.
8.14.6 FOBusinessUnit
Object Information
MDF Object:BusinessUnit
Business Keys: externalCode + startDate
Effective-date:true
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Operation Query
Request https://<localhost:port>/odata/v2/FOBusinessUnit?$format=json&$select=externalCode&
$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<localhost:port>/odata/v2/
FOBusinessUnit(externalCode='BU1',startDate=datetime'1970-01-01T00:00:00')",
"type" : "SFOData.FOBusinessUnit"
}, "externalCode" : "BU1"
}, {
"__metadata" : {
"uri" : "https://<localhost:port>/odata/v2/
FOBusinessUnit(externalCode='BU2',startDate=datetime'2013-12-12T00:00:00')",
"type" : "SFOData.FOBusinessUnit"
}, "externalCode" : "BU2"
}, {
"__metadata" : {
"uri" : "https://<localhost:port>/odata/v2/
FOBusinessUnit(externalCode='BU3',startDate=datetime'1970-01-01T00:00:00')",
"type" : "SFOData.FOBusinessUnit"
}, "externalCode" : "BU3"
}
]
}
}
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Sample Code
<d:editStatus>UPSERTED</d:editStatus>
<d:message
m:null="true" />
<d:index
m:type="Edm.Int32">0</d:index>
<d:httpCode
m:type="Edm.Int32">200</d:httpCode>
<d:inlineResults
m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
</content>
</entry>
</feed>
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
Related Information
Business Unit
Object Information
Use Cases
Operation Query
Request https://<hostname>/odata/v2/FOCostCenter&$format=json
Response
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOCostCenter(externalCode='aaaa',startDate=datetime'2014-04-22T00:00:00')",
"type": "SFOData.FOCostCenter"
},
"startDate": "\/Date(1398124800000)\/",
"externalCode": "aaaa",
"costcenterManager": null,
"description_de_DE": null,
"endDate": "\/Date(253402214400000)\/",
"lastModifiedDateTime": "\/Date(1398306271000+0000)\/",
"name_ja_JP": null,
"businessUnitFlx": null,
"description": null,
"name_defaultValue": "aaaa",
"name_en_US": "aaaa",
"glStatementCode": "SA49163",
"description_en_US": null,
"status": "A",
...
...
"customString1Nav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
FOCostCenter(externalCode='aaaa',startDate=datetime'2014-04-22T00:00:00')/
customString1Nav"
}
Note
Any custom navigations and fields added after migration without any mapping maintained by the customer will
be returned as cust_<type><number>. For example, cust_string1Nav. For existing ones with mapping, the field
and navigation will be returned as–is. For example, customString1.
Operation Upsert
Request http://<hostname>/odata/v2/upsert?updateChangesOnly=true
Content-Type: application/json;charset=utf-8
Payload {
"__metadata":{
"uri":"FOCostCenter(startDate=datetime'2014-09-11T00:00:00',externalCo
de='20000')"
},
"status":"A"
}
Response
Operation Query
Request https://<hostname>/odata/v2/FOCostCenter?$select=externalCode
Content-Type: application/json;charset=utf-8
Error Codes
The table below lists different error codes generated when using this API.
8.14.8 FOCompany
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Note
Do not use the localNavDEFLT as this navigates to the empty entity FOJobClassLocalDEFLT.
Object Information
MDF Object:LegalEntity
Business Keys: externalCode + startDate
Effective-date:true
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/FOCompany?$format=json&$select=externalCode&$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Payload { "__metadata":
{ "uri":"FOCompany(startDate=datetime'2014-09-11T00:00:00',externalCode='20000')" }, "status":"A" }
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.9 FODepartment
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object Information
MDF Object:Department
Business Keys: externalCode + startDate
Effective-date:true
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/FODepartment?$format=json&$select=externalCode&
$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FODepartment(externalCode='Dept 1',startDate=datetime'2015-03-11T00:00:00')",
"type": "SFOData.FODepartment"
},
"externalCode": "Dept 1"
}, {
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FODepartment(externalCode='Dept 3',startDate=datetime'2013-09-24T00:00:00')",
"type": "SFOData.FODepartment"
},
"externalCode": "Dept 3"
}, {
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FODepartment(externalCode='ADBE-Eng',startDate=datetime'2014-03-26T00:00:00')",
"type": "SFOData.FODepartment"
},
"externalCode": "ADBE-Eng"
}]
}
}
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Payload { "__metadata":
{ "uri":"FODepartment(startDate=datetime'2014-09-11T00:00:00',externalCode='20000')" }, "status":"A" }
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.10 FODivision
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object Information
MDF Object:Division
Business Keys: externalCode + startDate
Effective-date:true
Use Cases
Operation Query
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FODivision(externalCode='Div 1',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FODivision"
},
"externalCode": "Div 1"
}, {
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FODivision(externalCode='Div 2',startDate=datetime'2013-11-04T00:00:00')",
"type": "SFOData.FODivision"
},
"externalCode": "Div 2"
}, {
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FODivision(externalCode='Div 3',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FODivision"
},
"externalCode": "Div 3"
}]
}
}
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.11 FOLegalEntityLocal<Country>
This chapter covers several entities containing country-specific fields of legal entities. The country identifier in the
entity name is the country ISO Code. For example, for Germany, the name of this entity will be
FOLegalEntityLocalDEU.
These entities are made available for backward-compatibility reasons only. For a particular country, the
corresponding entity exists if the following pre-requisites are fulfilled:
● There is an MDF object modeled that holds the country-specific legal entity fields for this country.
● The API Visibility of the entity is different from Not Visible.
● The element type map contains information, which indicates that the backward-compatible entity should be
offered for this country.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
By default, five such country-specific entities are pre-shipped. These are FOLegalEntityLocalARG,
FOLegalEntityLocalDEU, FOLegalEntityLocalFRA, FOLegalEntityLocalESP, and FOLegalEntityLocalUSA.
MDF Object:LegalEntity<Country>
Business Keys: externalCode + startDate + country
Effective-date:true
The country-specific properties for the five pre-shipped countries are listed below.
For Argentina:
genericString1 cuitCode
For Germany:
genericString1 taxUnit
genericString2 socialAccidentInsurance
genericString3 socialAccidentInsuranceRegistrationNu
mber
For Spain:
genericString1 certificadoDeIdentificacionFiscal
For France:
genericNumber1 nafCode
genericNumber2 sirenCode
For USA:
genericString1 federalReserveBankID
genericString2 fedReserveBankDistrict
genericString3 employerID
genericString4 eeoCompanyCode
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/FOLegalEntityLocalCAN?$format=json&
$select=externalCode&$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FOLegalEntityLocalCAN(country='CAN',externalCode='comTest2',startDate=datetime'20
13-12-02T00:00:00')",
"type": "SFOData.FOLegalEntityLocalCAN"
},
"externalCode": "comTest2"
}, {
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FOLegalEntityLocalCAN(country='CAN',externalCode='SF2',startDate=datetime'2014-05
-07T00:00:00')",
"type": "SFOData.FOLegalEntityLocalCAN"
},
"externalCode": "SF2"
}, {
"__metadata": {
"uri": "https://<localhost:port>/odata/v2/
FOLegalEntityLocalCAN(country='CAN',externalCode='ADOBEIND',startDate=datetime'20
15-02-11T00:00:00')",
"type": "SFOData.FOLegalEntityLocalCAN"
},
"externalCode": "ADOBEIND"
}]
}
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
Related Information
8.14.11.1 LegalEntity<Country>
This chapter covers several entities containing country-specific fields of legal entities. The country identifier in the
entity name is the country ISO Code. For example, for USA, the name of this entity will be LegalEntityUSA. Five such
country-specific entities are pre-shipped. These are LegalEntityESP, LegalEntityARG, LegalEntityUSA,
LegalEntityDEU, and LegalEntityFRA.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object information
MDF Object:LegalEntity<Country>
Business Keys:LegalEntity_effectiveStartDate, LegalEntity_externalCode, externalCode
Effective-date:true
The country-specific properties for the five pre-shipped countries are listed below.
cuitCode
For Germany:
taxUnit
socialAccidentInsurance
socialAccidentInsuranceRegistrationNumber
For Spain:
certificadoDeIdentificacionFiscal
For France:
nafCode
sirenCode
For USA:
legalEntityType
federalReserveBankID
fedReserveBankDistrict
employerID
eeoCompanyCode
Navigation Properties
For USA
legalEntityTypeNav PickListValueV2
cust_string6Nav PickListValueV2
cust_string7Nav PickListValueV2
cust_string8Nav PickListValueV2
LegalEntityUSAPermissionsNav LegalEntityUSAPermissions
cust_employerIDNav PickListValueV2
cust_fedReserveBankDistrictNav PickListValueV2
For Germany
cust_string6Nav PickListValueV2
cust_string7Nav PickListValueV2
cust_string8Nav PickListValueV2
LegalEntityDEUPermissionsNav LegalEntityDEUPermissions
For Argentina
cust_string6Nav PickListValueV2
cust_string7Nav PickListValueV2
cust_string8Nav PickListValueV2
LegalEntityARGPermissionsNav LegalEntityARGPermissions
For Spain
cust_string6Nav PickListValueV2
cust_string7Nav PickListValueV2
cust_string8Nav PickListValueV2
LegalEntityESPPermissionsNav LegalEntityESPPermissions
For France
cust_string6Nav PickListValueV2
cust_string7Nav PickListValueV2
cust_string8Nav PickListValueV2
LegalEntityFRAPermissionsNav LegalEntityFRAPermissions
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/LegalEntityUSA?$format=json
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://localhost:443/odata/v2/
LegalEntityUSA(LegalEntity_effectiveStartDate=datetime'1990-01-01T00:00:00',Legal
Entity_externalCode='ACE_USA',externalCode=6596L)",
"type": "SFOData.LegalEntityUSA"
},
"LegalEntity_externalCode": "ACE_USA",
"LegalEntity_effectiveStartDate": "\/Date(631152000000)\/",
"externalCode": "6596",
"mdfSystemEffectiveEndDate": "\/Date(253402214400000)\/",
"mdfSystemObjectType": "LegalEntityUSA",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "\/Date(1341142694000+0000)\/",
"mdfSystemTransactionSequence": "1",
"cust_string1": null,
"mdfSystemRecordId": "159A8AB02B040C6EE050007F020046AE",
"mdfSystemEntityId": "159A8AB02B050C6EE050007F020046AE",
"mdfSystemStatus": "A",
"federalReserveBankID": "11-1231/2721",
"lastModifiedDateWithTZ": "\/Date(1341142694000+0000)\/",
"createdDate": "\/Date(1341171494000)\/",
"mdfSystemRecordStatus": "N",
"employerID": "44-98765",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "\/Date(1341142694000+0000)\/",
"lastModifiedDate": "\/Date(1341171494000)\/",
"mdfSystemEffectiveStartDate": "\/Date(-2208988800000)\/",
"fedReserveBankDistrict": "San Francisco",
"legalEntityType": "C",
"eeoCompanyCode": "123145-9",
"legalEntityTypeNav": {
"__deferred": {
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.12 FOJobClassLocal<Country>
Describes several entities containing country-specific fields of job classifications. The country identifier in the
entity name is the country ISO Code. For example, for Brazil, the name of this entity will be FOJobClassLocalBRA.
These entities are made available for backward-compatibility reasons only. For a particular country, the
corresponding entity exists if the following prerequisites are fulfilled:
● There is an MDF object modeled that holds the country-specific job classification fields for this country.
● The API Visibility of the entity is different from Not Visible.
● The element type map contains information, which indicates that the backward-compatible entity should be
offered for this country.
Object Information
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
The country-specific properties for the seven pre-shipped countries are listed below.
For Australia:
genericString1 ascoCode
genericNumber1 occupationalCode
For Canada:
genericString1 occupationalClassification
For France:
genericString1 inseeCode
genericNumber2 employeeCategory
genericNumber1 occupationalCode
For USA:
genericString1 localJobTitle
For Brazil:
For Italy:
genericNumber1 inailCode
Navigation Properties
For USA
genericNumber1Nav PicklistOption
genericNumber2Nav PicklistOption
genericNumber3Nav PicklistOption
genericNumber4Nav PicklistOption
genericNumber5Nav PicklistOption
genericNumber6Nav PicklistOption
eeo1JobCategoryNav PickListValueV2
eeo4JobCategoryNav PickListValueV2
eeo5JobCategoryNav PickListValueV2
eeo6JobCategoryNav PickListValueV2
eeoJobGroupNav PickListValueV2
flsaStatusUSANav PickListValueV2
genericString1Nav PicklistOption
occupationalCodeNav PickListValueV2
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/FOJobClassLocalCAN?$format=json&
$select=externalCode&$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobClassLocalCAN(country='CAN',externalCode='PS',startDate=datetime'2013-10-17T
00:00:00')",
"type": "SFOData.FOJobClassLocalCAN"
},
"externalCode": "PS"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobClassLocalCAN(country='CAN',externalCode='ACC',startDate=datetime'2015-09-03
T00:00:00')",
"type": "SFOData.FOJobClassLocalCAN"
},
"externalCode": "ACC"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobClassLocalCAN(country='CAN',externalCode='JC1',startDate=datetime'2015-08-25
T00:00:00')",
"type": "SFOData.FOJobClassLocalCAN"
},
"externalCode": "JC1"
}]
}
}
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
Related Information
8.14.13 JobClassificationCountry
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object information
MDF Object:JobClassificationCountry
Business Keys:JobClassification_effectiveStartDate, JobClassification_externalCode,
country
Effective-date:true
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/JobClassificationCountry?$format=json
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"__metadata": {
"uri": "https://localhost:443/odata/v2/
JobClassificationCountry(JobClassification_effectiveStartDate=datetime'1990-01-01
T00:00:00',JobClassification_externalCode='EXE-CEO',country='USA')",
"type": "SFOData.JobClassificationCountry"
},
"JobClassification_effectiveStartDate": "\/Date(631152000000)\/",
"JobClassification_externalCode": "EXE-CEO",
"country": "USA",
"mdfSystemEffectiveEndDate": "\/Date(253402214400000)\/",
"mdfSystemObjectType": "JobClassificationCountry",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "\/Date(1447406820000+0000)\/",
"effectiveStatus": "A",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "4FCA7B68851E41C1936B2AE1D5E25E4C",
"mdfSystemEntityId": "D5D533446DEA400FBC3388F5DDBA5C14",
"lastModifiedDateWithTZ": "\/Date(1447406820000+0000)\/",
"createdDate": "\/Date(1447435620000)\/",
"mdfSystemRecordStatus": "N",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "\/Date(1447406820000+0000)\/",
"lastModifiedDate": "\/Date(1447435620000)\/",
"mdfSystemEffectiveStartDate": "\/Date(-2208988800000)\/",
"toJobClassificationAUS": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
JobClassificationCountry(JobClassification_effectiveStartDate=datetime'1990-01-01
T00:00:00',JobClassification_externalCode='EXE-CEO',country='USA')/
toJobClassificationAUS"
}
},
"toJobClassificationGBR": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
JobClassificationCountry(JobClassification_effectiveStartDate=datetime'1990-01-01
T00:00:00',JobClassification_externalCode='EXE-CEO',country='USA')/
toJobClassificationGBR"
}
},
"countryNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
JobClassificationCountry(JobClassification_effectiveStartDate=datetime'1990-01-01
T00:00:00',JobClassification_externalCode='EXE-CEO',country='USA')/countryNav"
}
},
"toJobClassificationFRA": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/
JobClassificationCountry(JobClassification_effectiveStartDate=datetime'1990-01-01
T00:00:00',JobClassification_externalCode='EXE-CEO',country='USA')/
toJobClassificationFRA"
}
},
"toJobClassificationCAN": {
"__deferred": {
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object Information
MDF Object:JobFunction
Business Keys: externalCode + startDate
Effective-date:true
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/FOJobFunction?$format=json&$select=externalCode&
$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobFunction(externalCode='JF Code 2',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FOJobFunction"
},
"externalCode": "JF Code 2"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobFunction(externalCode='JF Code 3',startDate=datetime'2013-10-16T00:00:00')",
"type": "SFOData.FOJobFunction"
},
"externalCode": "JF Code 3"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobFunction(externalCode='test1',startDate=datetime'2013-07-10T00:00:00')",
"type": "SFOData.FOJobFunction"
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Payload { "__metadata":
{ "uri":"FOJobFunction(startDate=datetime'2014-09-11T00:00:00',externalCode='20000')" }, "status":"A" }
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.15 FOJobCode
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Note
Do not use the localNavDEFLT as this navigates to the empty entity FOJobClassLocalDEFLT.
Before the migration, you could handle the translatable fields in two ways. You would do translations for Job Code
using Legacy Translations and FOTranslations. This is replaced with the MDF standard translation approach. Now
translatable fields are handled in the same way as translatable fields in other migrated objects. This means that
you have these additional fields such as name_en_US, name_en_GB, and so on in the object structure. To maintain
backward compatibility, the old navigations to translations are maintained. However, they come with certain
restrictions. Have a look:
Important changes to FOJobCode – name, description and custom string fields in APIs
● Used locale to return data: During migration of Job Code Translations, the Corporate Locale will be used to
copy translations to the new persistency. While copying, the corporate language will be used to copy a default
translations into the translatable fields of FO Job Code (such as name, description or custom string). After
enabling the new translation feature, the SOAP and OData API will return those default values in the corporate
language while it returned the values in the language of the API user before activating the feature. In case this
corporate locale differs from the locale of the API user (can be seen in Employee Central UI through options for
this user), the result of the translatable fields could differ. To avoid this, ensure that corporate language and API
user language are the same before migrating or activating the new Job Code Translation feature in
Provisioning. This is described later below.
● Before the migration, every custom string field of type worker was regarded as translatable if legacy translation
was used. Thus, for every worker field, a navigation attribute was added leading to LocalizedData. After the
migration, navigation attribute is still available, but this will not lead to any instance data.
● Filters and sort on translation navigation: After switching to the new Job Code Translation, the OData API will
no longer support filter, and order by for the navigations of translatable fields in FO Job Code. Filter is still
supported for default translation in field name. This means queries such as /odata/v2/FOJobCode?
$filter=nameTranslatioNav/localizedDataTranslation+eq+'My Job Code' will no longer be possible. Query such
as /odata/v2/FOJobCode?$filter=name+eq+'My Job Code'&$expand=nameTranslationNav will still work.
● Custom user ID fields: If a custom string field was configured as of type user, the corresponding user ID was
added to the translation table. With the new feature enabled, this user ID will now be returned in the
corresponding field itself and is not available anymore in the translation table.
● Top, skip, orderby, and query without filter: After switching to the new Job Code Translation, the
LocalizedData Entity can be queried using simple filter (using eq or in). However, there is no support anymore
for query without filter or paging, and ordering or sorting. LocalizedData must be retrieved using the Job Code
query using expand and not queried directly.
● Shortcut access: Direct access to the LocalizedData without $filter such as odata/vs2/
LocalizedData(localizedDataCode=(‘TR:421:,localizedDataLocale=‘en_GB’) is not possible anymore. Use
odata/v2/LocalizedData?$filter=localizedDataCode+eq+’TR:421’+and+localizedDataLocale+eq+‘en_GB’)
instead or do a direct expand from FOJobCode entity.
● Changed business keys: LocalizedData will have a different code instead of TR:11. A number such as 34569811
originating from the new GOLocalizedData will be returned.
● Null-values for a translation: This happens if LocalizedData is not returned anymore by the OData API. This is
also true for expanded navigations in FOJobCode.
Additional Information
To minimize impact of change, make sure that you deal with setting the language as follows:
1. You have set the default language for your corporation in Provisioning.
2. You have set the user language under Options Change Langaguage . Make sure that the user language
and the default language are the same.
3. Activate the Provisioning settings.
FO Job Code has a navigation attribute localNavDEFLT going to FOJobClassLocalDEFLT. This target entity
FOJobClassLocalDEFLT does not contain any business field. Before the migration, if the object data was
inconsistent, this navigation would lead to instance data. This was the case if you imported JobClassLocal data
for countries, which were not configured, or if you removed countries from country-specific Corporate Data Model,
after data was created. This inconsistency is not there now. After the migration, the navigation and the target entity
are still made available for compatibility reasons, even though they do not return any data.
Object information
MDF Object:JobClassification
Business Keys: externalCode + startDate
Effective-date:true
Operation Query
Request https://<localhost:port>/odata/v2/FOJobCode?$format=json&$select=externalCode&$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobCode(externalCode='TestCodePD',startDate=datetime'2012-05-21T00:00:00')",
"type": "SFOData.FOJobCode"
},
"externalCode": "TestCodePD"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobCode(externalCode='sales',startDate=datetime'1970-01-01T00:00:00')",
"type": "SFOData.FOJobCode"
},
"externalCode": "sales"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOJobCode(externalCode='PS',startDate=datetime'2013-10-17T00:00:00')",
"type": "SFOData.FOJobCode"
},
"externalCode": "PS"
}]
}
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.16 FOPayGroup
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object Information
MDF Object:PayGroup
Business Keys: externalCode + startDate
Effective-date:true
Operation Query
Request https://<localhost:port>/odata/v2/FOPayGroup?$format=json&$select=externalCode&$top=3
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOPayGroup(externalCode='SAP',startDate=datetime'2013-11-02T00:00:00')",
"type": "SFOData.FOPayGroup"
},
"externalCode": "SAP"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOPayGroup(externalCode='pG1',startDate=datetime'2013-09-02T00:00:00')",
"type": "SFOData.FOPayGroup"
},
"externalCode": "pG1"
}, {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
FOPayGroup(externalCode='PG1',startDate=datetime'2014-12-09T00:00:00')",
"type": "SFOData.FOPayGroup"
},
"externalCode": "PG1"
}]
}
}
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Payload { "__metadata":
{ "uri":"FOPayGroup(startDate=datetime'2014-09-11T00:00:00',externalCode='20000')" }, "status":"A" }
Response
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
8.14.17 PayCalendar
This is a foundation object that describes a pay calendar for a particular pay group. This means it is the collection of
all pay periods referring to the same pay group.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object information
MDF Object:PayCalendar
Business Keys: payGroup
Effective-date:false
Operation Query
Request https://<localhost:port>/odata/v2/PayCalendar?$format=json
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"__metadata": {
"uri": "https://localhost:443/odata/v2/PayCalendar('APAC_GROUP')",
"type": "SFOData.PayCalendar"
},
"payGroup": "APAC_GROUP",
"mdfSystemEffectiveEndDate": "\/Date(253402214400000)\/",
"mdfSystemObjectType": "PayCalendar",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "\/Date(1447049529000+0000)\/",
"mdfSystemTransactionSequence": "1",
"createdBy": "admin",
"mdfSystemRecordId": "B48CD96182B440348ECAE2439136091E",
"mdfSystemEntityId": "A2FF33F88E724BF386D5D225975D0F17",
"createdDateTime": "\/Date(1442990456000+0000)\/",
"lastModifiedBy": "admin",
"mdfSystemStatus": "A",
"lastModifiedDate": "\/Date(1447078329000)\/",
"mdfSystemEffectiveStartDate": "\/Date(-2208988800000)\/",
"lastModifiedDateWithTZ": "\/Date(1447049529000+0000)\/",
"createdDate": "\/Date(1443019256000)\/",
"mdfSystemRecordStatus": "N",
"payGroupNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/PayCalendar('APAC_GROUP')/
payGroupNav"
}
},
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/PayCalendar('APAC_GROUP')/
mdfSystemRecordStatusNav"
}
},
"toPayPeriod": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/PayCalendar('APAC_GROUP')/
toPayPeriod"
}
},
"mdfSystemStatusNav": {
"__deferred": {
"uri": "https://localhost:443/odata/v2/PayCalendar('APAC_GROUP')/
mdfSystemStatusNav"
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
AFFECTED_EXTERNAL_CODE_ERROR This record cannot be saved since one or more records of this
Code have reported errors.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Object information
MDF Object:PayPeriod
Business Keys: PayCalendar_payGroup,externalCode
Effective-date:false
Use Cases
Operation Query
Request https://<localhost:port>/odata/v2/PayPeriod?$format=json
Here, localhost is the name of your host and port is usually 443 or left blank.
Response
Sample Code
{
"__metadata": {
"uri": "https://localhost:443/odata/v2/
PayPeriod(PayCalendar_payGroup='APAC_GROUP',externalCode=6636L)",
"type": "SFOData.PayPeriod"
},
"PayCalendar_payGroup": "APAC_GROUP",
"externalCode": "6636",
"payPeriodBeginDate": "\/Date(946684800000)\/",
"mdfSystemEffectiveEndDate": "\/Date(253402214400000)\/",
"mdfSystemObjectType": "PayPeriod",
"mdfSystemVersionId": null,
"runType": "INC",
"offcycle": false,
"lastModifiedDateTime": "\/Date(1447049529000+0000)\/",
"mdfSystemTransactionSequence": "1",
"cust_string1": "b",
"mdfSystemRecordId": "1ACED403FA1E4132B37D839DBDB87FB7",
"createdBy": "admin",
"mdfSystemEntityId": "818F9E53B6654906BFCDA0E1BAA5F607",
"processingRunId": "1",
"createdDateTime": "\/Date(1442990456000+0000)\/",
Operation Post
Request https://<localhost:port>/odata/v2/upsert
Here, localhost is the name of your host and port is usually 443 or left blank.
Content-Type: application/json;charset=utf-8
Response
Sample Code
Error Codes
The table below lists different error codes generated when using this API.
Global Benefits offers a simplified, one-stop shop Benefits administration tool for organizations spread across the
globe.
9.1 Benefit
This entity is used to create and configure benefits. It is used for reimbursements and allowances, such as medical
bills, higher education, and a company car.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
9.2 BenefitClaimAccumulation
This enitity enables the accumulation of benefit claims sot they can be tracked within a defined cycle.
Permissions
Role-based Assign the relevant permissions for claim accumulation in User Permissions Miscellaneous
Permissions .
Operation Description
Properties
Property Description
Navigation Properties
Benefit Claim Accumulation benefitClaims Gets the Benefit Employee Claim details.
Use Cases
None.
9.3 BenefitCompanyCarAllowedModels
This entity is used to create values for different car models that are selected from the drop-down list in the
application.
Role-based Assign the relevant permissions for the car models in User Permissions Miscellaneous
Permissions .
Supported Operations
Operation Description
Properties
Property Description
Navigation Properties
Use Cases
None.
This entity is used to create values for car lease service providers.
Permissions
Role-based Assign the relevant permissions for car service provider in User Permissions Miscellaneous
Permissions .
Supported Operations
Operation Description
Properties
Property Description
effectiveStartDate The effective start date of the car lease from the service provider.
emiInterestRate The interest rate from the service provider for the equated monthly installments.
Navigation Properties
This entity is meant for mapping the template to various legal entity. Here Legal Entity is external code to address
the requirement of having only one template mapped per legal entity.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitsConfirmationStatementConfiguration
?$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitsConfirmationStatementConfiguration",
"type": "SFOData.BenefitsConfirmationStatementConfiguration"
},
"legalEntity": "ACE_USA",
"effectiveStartDate": "/Date(1496016000000)/",
" templateId ": "benefits",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
" legalEntityNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitsConfirmationStatementConfiguration/legalEntityNav"
},
Additional Information
9.6 BenefitCompanyCarRecommendedVendors
This entity stores the details of recommended vendors for the company car benefit.
Permissions
Supported Operations
Operation Description
Properties
Property Description
Use Cases
9.7 BenefitContact
This entity stores the contact details of persons who are responsible for providing benefit-related information.
Permissions
Supported Operations
Operation Description
Property Description
Use Cases
9.8 BenefitDeductibleDetails
This object is used to capture the Benefit Deduction details during Benefit creation.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitDeductionDetails?$format=json
Response
Sample Code
{
"d": {
"results": [
{
Additional Information
9.9 BenefitDocuments
This enity is used to store all kinds of documents related to the benefits, including policy documents, forms, and
relevant web links.
Role-based
Go to Admin Center Configure Object Definition Create New Object Definition
Secured . Set Yes and set the Permission Category as Miscellaneous Permissions.
Operations Allowed
Operation Description
Properties
Property Description
Use Cases
This entity stores the details of the claim transactions made by the employees for the various benefits in the
company.
Permissions
Supported Operations
Operation Description
Properties
Property Description
benefitDataSourceWithExternalCode The list of benefits that the employee is eligible to claim for
Navigation Properties
Use Cases
9.11 BenefitEnrollment
This entity contains a list of all the benefits for which an Employee is eligible.An employee uses this object to enroll
for eligible benefits.
Permissions
Role-based ● Only the eligible employees can create a benefit enrollment for the eligible benefits
● An administrator cannot do this unless he or she uses the proxy feature
● RBP must be enabled for this entity
Secured . Set Yes and set the Permission Category as Miscellaneous Permissions.
Operation Description
Properties
Property Description
Navigation Properties
Use Cases
This Object is used to capture the Benefit Dependency containing Benefit Dependency Configuration Id, Comment
and Benefit Dependency Details. Benefit Dependency Details contains the Lead Benefit, Lead Insurance Plan,
Dependent Benefit, Dependent Insurance Plan and Enrollment Condition.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitEnrollmentDependencyConfiguration(e
ffectiveStartDate=datetime'2017-10-02T00:0
0:00',id=694L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitEnrollmentDependencyConfiguration",
"type": "SFOData. BenefitEnrollmentDependencyConfiguration"
},
"benefitDependencyId": "DEPENDENCY CONFIGURATION ID",
"comment": "Benefit Dependency Configuration with details",
"benefitDependencyDetails": "benefitDependencydetailList",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitEnrollmentDependencyConfiguration(/mdfSystemRecordStatusNav"
}
}
}
]
}
Additional Information
9.13 BenefitEnrollmentDependencyDetails
This Object is used to capture the Lead and Dependent Benefits with some Enrollment Condition.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitEnrollmentDependencyDetails(effecti
veStartDate=datetime'2017-10-02T00:00:00',
id=694L)/$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitEnrollmentDependencyDetails",
"type": "SFOData. BenefitEnrollmentDependencyDetails"
},
"leadBenefit": "DummyBenefit1",
"leadInsurancePlan": "DummyPlan1",
"enrollmentCondition": "ENROLLED",
"dependentBenefit": "DummyBenefit2",
"dependentInsurancePlan": "DummyPlan2",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"leadBenefitNav": {
9.14 BenefitEnrollmentOptoutDetail
Supported Operations
Operataion Description
Query Yes
Navigation Properties
These are not complete lists of properties. For more information about the entity metadata, please refer to your
OData API dictionary in the Admin Center or use the entity query:https://<hostname>/odata/v2/<Entity>/
$metadata.
Request
Operation Query
URI http://<hostname>/odata/v2/
BenefitEnrollmentOptoutDetails?
$format=json
Sample Code
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitEnrollmentOptoutDetails",
"type": "SFOData. BenefitEnrollmentOptoutDetails"
},
"benefitEnrollment": "BenefitEnrollment1",
“benefitEnrollmentId”: “AHDGJ879709BDJ”,
“benefitSchedulePeriod”: “BenefitSchedulePeriod1”,
“optoutRequestDate”: "/Date(1521763200000)/",
“enrollmentChangeDate”: "/Date(1523163200000)/",
“contributionChangeDate”: "/Date(1526263200000)/",
“optedoutBy”: “admin1”,
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname/odata/v2/
BenefitEnrollmentOptoutDetails/mdfSystemRecordStatusNav"
}
}
}
]
}
}
9.15 BenefitEmployeeOptoutRequests
This entity is used to get the worked ID and Enrollment Optout details of an employee. This entity is used to store
the enrollment optout details for an employee.
Supported Operations
Operataion Description
Query Yes
These are not complete lists of properties. For more information about the entity metadata, please refer to your
OData API dictionary in the Admin Center or use the entity query:https://<hostname>/odata/v2/<Entity>/
$metadata.
Request
Operation Query
URI http://<hostname>/odata/v2/
BenefitEmployeeOptoutRequests?$format=json
Response
Sample Code
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitEmployeeOptoutRequests",
"type": "SFOData. BenefitEmployeeOptoutRequests"
},
"workerId": "user1",
"benefitEnrollmentOptoutDetails": "benefitOptoutDetailsList",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitEmployeeOptoutRequests/mdfSystemRecordStatusNav"
}
}
}
]
}
}
This entity contains the details of the Open Enrollment cycle – the benefits that are part of it, the legal entity it is
valid, the schedule it is applicable for. This is used to configure the Open Enrollment Cycle, based on which the
employee would be able to enroll into the related benefits.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitOpenEnrollmentCycleConfiguration?
$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https:<Hostname>/odata/v2/
BenefitOpenEnrollmentCycleConfiguration",
"type": "SFOData.BenefitOpenEnrollmentCycleConfiguration"
},
"openEnrollmentSchedule": "Schedule 1",
"legalEntity": "ACE_USA",
"instructionTextURL": "https://www.example.com",
"tncURL": "https://www.example.com",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"wfRequestNav": {
"__deferred": {
Additional Information
Related Information
9.17 BenefitsException
This entity contains information about all the exceptions that occur if the enrollment amount does not match the
eligiblility criteria or if the enrollment period has expired.
Permissions
Secured . Set Yes and set the Permission Category as Miscellaneous Permissions.
Operation Description
Properties
Property Description
Navigation Properties
Use Cases
9.18 BenefitHyperlinkConfiguration
This object is used to capture the URL and label for the URL to display with each benefit. The hyperlinks configured
in each benefit will be displayed with benefit on the employee screen.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitHyperlinkConfiguration/$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/BenefitHyperlinkConfiguration",
"type": "SFOData. BenefitHyperlinkConfiguration"
},
"url": "https://www.website.com",
"label": "Website",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/BenefitHyperlinkConfiguration(/
mdfSystemRecordStatusNav"
}
}
}
]
}
}
9.19 BenefitInsurancePlan
This entity fetches the employee insurance plan details such as plan name, insurance provider, pay component,
coverage option and so on. This entity is available under Create Benefit portlet
Business Fields
● effectiveStartDate
● id
Required Fields
● frequency
● planName_en_US
● premiumType
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsurancePlan?$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitInsurancePlan(effectiveStartDate=datetime'2015-03-05T00:00:00',id=2664L)",
"type": "SFOData.BenefitInsurancePlan"
},
"id": "2664",
"effectiveStartDate": "/Date(1425513600000)/",
"planName_pt_BR": null,
"mdfSystemLastModifiedDate": "/Date(1425527952000)/",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "BenefitInsurancePlan",
"planName_es_ES": null,
"mdfSystemVersionId": null,
"planName_ru_RU": null,
"mdfSystemLastModifiedDateWithTZ": "/Date(1425545952000+0000)/",
"lastModifiedDateTime": "/Date(1425545952000+0000)/",
"frequency": null,
"planName_en_US": "Medical Plan A",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "1A93F027A29145E9AAFCE32C7C451741",
"planName_defaultValue": "Medical Plan A",
"mdfSystemEntityId": "B5DCF12B37A1422DA825FBCBD51D0578",
"planName_fr_CA": null,
Related Information
9.20 BenefitInsurancePlanEnrollmentDetails
Business Fields
● BenefitEnrollment_effectiveStartDate
● BenefitEnrollment_id
● externalCode
● BenefitEnrollment_effectiveStartDate
● BenefitEnrollment_id
● smoking
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/BenefitInsurancePlanEnroll-
mentDetails?$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
Related Information
9.21 BenefitInsurancePlanUSA
This entity contains information about a benefit enrollment record when the insurance plans are subject to COBRA.
This entity is specific to the USA.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation GET
URI http://<Hostname>/odata/v2/v2/
BenefitInsurancePlan(effectiveStartDate=da
tetime'2017-01-02T00:00:00',id=694L)/
insurancePlanUSA?$format=json
Response
Sample Code
{
"d":{
"results":[
{
"__metadata":{
"uri":"https://<Hostname>/odata/v2/
BenefitInsurancePlanUSA(BenefitInsurancePlan_effectiveStartDate=datetime'2017-01-
02T00:00:00',BenefitInsurancePlan_id=694L,externalCode=695L)",
"type":"SFOData.BenefitInsurancePlanUSA"
},
"BenefitInsurancePlan_effectiveStartDate":"\/Date(1483315200000)\/",
"externalCode":"695",
"BenefitInsurancePlan_id":"694",
"enrolleeOptions":"692",
"createdBy":"admin",
"lastModifiedBy":"admin",
"createdDateTime":"\/Date(1490175536000+0000)\/",
"lastModifiedDateTime":"\/Date(1490175713000+0000)\/",
"mdfSystemRecordStatus":"N",
"cobraRelevant":{
"__deferred":{
"uri":"https://<Hostname>/odata/v2/
BenefitInsurancePlanUSA(BenefitInsurancePlan_effectiveStartDate=datetime'2017-01-
02T00:00:00',BenefitInsurancePlan_id=694L,externalCode=695L)/cobraRelevant "
},
"mdfSystemRecordStatusNav":{
"__deferred":{
"uri":"https://<Hostname>/odata/v2/
BenefitInsurancePlanUSA(BenefitInsurancePlan_effectiveStartDate=datetime'2017-01-
02T00:00:00',BenefitInsurancePlan_id=694L,externalCode=695L)/
mdfSystemRecordStatusNav"
}
}
}
]
}
}
● To be able to query this entity, BenefitInsurancePlan entity as of 1705 API version and above is available; this
version contains the prerequisite country field and the nav insurancePlanUSA.
● BenefitInsurancePlanUSA is a composite entity and queried via BenefitInsurancePlan.
● Entity is visible on the UI when USA is the country selected.
● BenefitInsurancePlanUSA has a Boolean field cobraRelevant to designate an insurance plan as COBRA-relevant
● Business Context: Compliance with COBRA is critical. This entity supports you with that compliance - as well
as capturing benefit enrollment records with insurance plans subject to COBRA, you can use this entity in the
Integration Center to, for example, check which employees' benefit enrollment details are subject to COBRA.
Details can then be passed to a third party for further processing.
9.22 BenefitInsuranceDependentDetail
This entity fetches the employee’s insurance dependent details such as dependent option and dependent type.
This entity is available under Insurance Plan portlet.
Business Fields
● BenefitEnrollment_effectiveStartDate
● BenefitEnrollment_id
● BenefitInsurancePlanEnrollmentDetails_externalCode
● dependentName
Required Fields
● BenefitEnrollment_effectiveStartDate
● BenefitEnrollment_id
● BenefitInsurancePlanEnrollmentDetails_externalCode
● dependentName
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceDependentDetail?
$format=json&$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitInsuranceDependentDetail(BenefitEnrollment_effectiveStartDate=datetime'201
6-01-01T00:00:00',BenefitEnrollment_id=4441L,BenefitInsurancePlanEnrollmentDetail
s_externalCode=4442L,dependentName='4240')",
"type": "SFOData.BenefitInsuranceDependentDetail"
},
"dependentName": "4240",
"BenefitInsurancePlanEnrollmentDetails_externalCode": "4442",
"BenefitEnrollment_id": "4441",
Related Information
This entity fetches the employee insurance coverage such as coverage name and type . This entity is available
under Insurance Plan portlet.
It allows you to retrieve information about an employee’s coverage such as coverage name, type and so on..
Business Fields
● coverageid
Required Fields
● amount
● coverageName_en_US
● coverageType
● factor
● percentage
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceCoverage?$format=json&
$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitInsuranceCoverage(2663L)",
"type": "SFOData.BenefitInsuranceCoverage"
},
"coverageId": "2663",
"mdfSystemLastModifiedDate": "/Date(1443075312000)/",
"mdfSystemObjectType": "BenefitInsuranceCoverage",
"mdfSystemLastModifiedDateWithTZ": "/Date(1443089712000+0000)/",
"lastModifiedDateTime": "/Date(1443089712000+0000)/",
"coverageLevel": "Wordlwide Cover incl. Winter",
"amount": "15000",
"coverageName_nl_NL": null,
"mdfSystemRecordId": "B239102F458F42BCAB96F2C0D3D6234B",
"mdfSystemEntityId": "1BEB3323C16E4D7E91D8EEA976E27913",
"mdfSystemStatus": "A",
"coverageName_defaultValue": "Annual",
"coverageName_ja_JP": null,
"mdfSystemLastModifiedBy": "admin",
"coverageName_es_ES": null,
"mdfSystemRecordStatus": "N",
"coverageName_fr_FR": null,
"benefitSalaryCalculationRule": null,
"minimumCoverageAmount": null,
"coverageName_en_GB": null,
"coverageName_ko_KR": null,
"mdfSystemCreatedDate": "/Date(1425525775000)/",
"createdBy": "admin",
"maximumCoverageAmount": null,
"createdDateTime": "/Date(1425543775000+0000)/",
"lastModifiedBy": "admin",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"basePayComponentGroup": null,
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
9.24 BenefitInsuranceProvider
This entity fetches the e insurance provider details. This entity is available under Insurance Plan portlet
Business Fields
● providerId
Required Fields
● providerName
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceProvider?$format=json&
$top=1
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitInsuranceProvider(2661L)",
"type": "SFOData.BenefitInsuranceProvider"
},
"providerId": "2661",
"mdfSystemLastModifiedDate": "/Date(1425525515000)/",
"contactPhone": "+4487989000982",
"mdfSystemObjectType": "BenefitInsuranceProvider",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"contactEmail": "help@aig.com",
"mdfSystemLastModifiedDateWithTZ": "/Date(1425543515000+0000)/",
"lastModifiedDateTime": "/Date(1425543515000+0000)/",
"mdfSystemCreatedDate": "/Date(1425525504000)/",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "43201A09918840F1B87D878FF128F94A",
"createdBy": "admin",
"providerName": "AIG",
"mdfSystemEntityId": "777611AD2B674B528C32082B9705AAA0",
"createdDateTime": "/Date(1425543504000+0000)/",
"lastModifiedBy": "admin",
Related Information
9.25 BenefitInsuranceEnrolleeOptions
This entity fetches the employee enrollee options such as enrollee option name and dependent option. This entity
is available under Insurance Plan portlet.
Business Fields
● id
Required Fields
● enrolleeOptionsName
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceEnrolleeOptions?
$format=json&$top=1
Sample Code
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<hostname>/odata/v2/BenefitInsuranceEnrolleeOptions(2662L)",
"type" : "SFOData.BenefitInsuranceEnrolleeOptions"
}, "id" : "2662", "mdfSystemLastModifiedDate" : "\/Date(1425525745000)\/",
"mdfSystemObjectType" : "BenefitInsuranceEnrolleeOptions",
"mdfSystemEffectiveEndDate" : "\/Date(253402214400000)\/",
"mdfSystemVersionId" : null, "enrolleeOptionsName" : "Self+Family",
"mdfSystemLastModifiedDateWithTZ" : "\/Date(1425543745000+0000)\/",
"lastModifiedDateTime" : "\/Date(1425543745000+0000)\/",
"mdfSystemCreatedDate" : "\/Date(1425525745000)\/",
"mdfSystemTransactionSequence" : "1", "dependentOption" : "Self+Family",
"mdfSystemRecordId" : "982370C227EC4F30857B4E75EE06E4C1", "createdBy" : "admin",
"mdfSystemEntityId" : "C13F8D8D493D4207B714C69E6BB7F2DF", "createdDateTime" : "\/
Date(1425543745000+0000)\/", "lastModifiedBy" : "admin", "mdfSystemStatus" :
"A", "mdfSystemEffectiveStartDate" : "\/Date(-2208988800000)\/",
"mdfSystemLastModifiedBy" : "admin", "mdfSystemRecordStatus" : "N",
"mdfSystemCreatedBy" : "admin", "mdfSystemRecordStatusNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/BenefitInsuranceEnrolleeOptions(2662L)/
mdfSystemRecordStatusNav"
}
}, "enrolleType" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/BenefitInsuranceEnrolleeOptions(2662L)/
enrolleType"
}
}, "dependentOptionNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/BenefitInsuranceEnrolleeOptions(2662L)/
dependentOptionNav"
}
}, "toCoverageOptions" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/BenefitInsuranceEnrolleeOptions(2662L)/
toCoverageOptions"
}
}, "mdfSystemStatusNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/BenefitInsuranceEnrolleeOptions(2662L)/
mdfSystemStatusNav"
}
}
}
]
}
}
Related Information
This entity fetches the rate chart details such as employee’s age, Insurance plan, factor, flat amount and per
dependent. This entity is available under Insurance Plan portlet.
Business Fields
● effectiveStartDate
● rateChartId
Required Fields
● effectiveStartDate
● factor
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceRateChart?$format=json&
$top=1
Response
Sample Code
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChart(effectiveStartDate=datetime'2015-04-28T00:00:00',rateCh
artId='C20')", "type" : "SFOData.BenefitInsuranceRateChart"
}, "effectiveStartDate" : "\/Date(1430179200000)\/", "rateChartId" : "C20",
"insurancePlan" : "3943", "mdfSystemLastModifiedDate" : "\/
Date(1438848870000)\/", "mdfSystemObjectType" : "BenefitInsuranceRateChart",
"mdfSystemEffectiveEndDate" : "\/Date(253402214400000)\/",
"mdfSystemVersionId" : null, "mdfSystemLastModifiedDateWithTZ" : "\/
Date(1438863270000+0000)\/", "lastModifiedDateTime" : "\/
Date(1438863270000+0000)\/", "mdfSystemTransactionSequence" : "1", "currency" :
"BRL", "mdfSystemRecordId" : "174CBED54BCF48818B758CD287B3589B", "ageAsOfYear" :
null, "mdfSystemEntityId" : "85F93890789240C2B49E905AC99727C4",
"mdfSystemStatus" : "A", "mdfSystemLastModifiedBy" : "admin",
"mdfSystemRecordStatus" : "N", "ageAsOfMonth" : null, "mdfSystemCreatedBy" :
"admin", "provider" : "3083", "factor" : "-1", "mdfSystemCreatedDate" : "\/
Date(1430231715000)\/", "createdBy" : "admin", "coverage" : "5789",
"createdDateTime" : "\/Date(1430246115000+0000)\/", "ageAsOfDay" : null,
"lastModifiedBy" : "admin", "coverageNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChart(effectiveStartDate=datetime'2015-04-28T00:00:00',rateCh
artId='C20')/coverageNav"
}
}, "rateChartEnrollee" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChart(effectiveStartDate=datetime'2015-04-28T00:00:00',rateCh
artId='C20')/rateChartEnrollee"
}
}, "ageAsOfMonthNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChart(effectiveStartDate=datetime'2015-04-28T00:00:00',rateCh
artId='C20')/ageAsOfMonthNav"
Related Information
This entity fetches the enrollee rate chart details. This entity is available under Insurance Rate Chart portlet.
Business Fields
● BenefitInsuranceRateChart_effectiveStartDate
● BenefitInsuranceRateChart_rateChartId
● externalCode
Required Fields
● BenefitInsuranceRateChart_effectiveStartDate
● BenefitInsuranceRateChart_rateChartId
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceRateChartEnrollee?
$format=json&$top=1
Response
Sample Code
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChartEnrollee(BenefitInsuranceRateChart_effectiveStartDate=da
tetime'2015-03-05T00:00:00',BenefitInsuranceRateChart_rateChartId='Medical Plan
A',externalCode=2668L)", "type" : "SFOData.BenefitInsuranceRateChartEnrollee"
}, "BenefitInsuranceRateChart_rateChartId" : "Medical Plan A",
"BenefitInsuranceRateChart_effectiveStartDate" : "\/Date(1425513600000)\/",
"externalCode" : "2668", "ageTo" : "60", "mdfSystemLastModifiedDate" : "\/
Date(1425526156000)\/", "mdfSystemEffectiveEndDate" : "\/
Date(253402214400000)\/", "mdfSystemObjectType" :
"BenefitInsuranceRateChartEnrollee", "mdfSystemVersionId" : null,
"mdfSystemLastModifiedDateWithTZ" : "\/Date(1425544156000+0000)\/",
"lastModifiedDateTime" : "\/Date(1425544156000+0000)\/",
"mdfSystemTransactionSequence" : "1", "mdfSystemRecordId" :
"D6076F81CBB5405794DC71B639ADB04F", "mdfSystemEntityId" :
"F36C85DBD840482EA084AF17FE6DD8CF", "mdfSystemStatus" : "A",
"benefitInsuranceEnrolleeType" : "2", "mdfSystemLastModifiedBy" : "admin",
"mdfSystemCreatedBy" : "admin", "mdfSystemRecordStatus" : "N",
"employeeContribution" : "100", "mdfSystemCreatedDate" : "\/
Date(1425526156000)\/", "employerContribution" : "100", "createdBy" : "admin",
"ageFrom" : "10", "lastModifiedBy" : "admin", "createdDateTime" : "\/
Date(1425544156000+0000)\/", "mdfSystemEffectiveStartDate" : "\/
Date(-2208988800000)\/", "mdfSystemRecordStatusNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChartEnrollee(BenefitInsuranceRateChart_effectiveStartDate=da
tetime'2015-03-05T00:00:00',BenefitInsuranceRateChart_rateChartId='Medical Plan
A',externalCode=2668L)/mdfSystemRecordStatusNav"
}
}, "mdfSystemStatusNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChartEnrollee(BenefitInsuranceRateChart_effectiveStartDate=da
tetime'2015-03-05T00:00:00',BenefitInsuranceRateChart_rateChartId='Medical Plan
A',externalCode=2668L)/mdfSystemStatusNav"
Related Information
9.28 BenefitInsuranceRateChartFixedAmount
This entity fetches the insurance rate chart with fixed amount.
It allows you to retrieve information about insurance rate chart with fixed amount.
Business Fields
● BenefitInsuranceRateChart_effectiveStartDate
● BenefitInsuranceRateChart_rateChartId
● externalCode
Required Fields
● BenefitInsuranceRateChart_effectiveStartDate
● BenefitInsuranceRateChart_rateChartId
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceRateChartFixedAmount?
$format=json&$top=1
Response
Sample Code
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceRateChartFixedAmount(BenefitInsuranceRateChart_effectiveStartDate
=datetime'2015-03-05T00:00:00',BenefitInsuranceRateChart_rateChartId='Medical
Plan A',externalCode=2667L)", "type" :
"SFOData.BenefitInsuranceRateChartFixedAmount"
9.29 BenefitInsuranceCoverageOptions
This entity fetches the employee’s insurance coverage options such coverage details and enrollment for details.
Coverage Details consists of coverage and rate chart information. Enrollment For consists of enrollee option name,
dependent option and dependent type. This entity is available under Insurance Plan portlet.
Business Fields
● BenefitInsurancePlan_effectiveStartDate
● BenefitInsurancePlan_id
● externalCode
Required Fields
● BenefitInsurancePlan_effectiveStartDate
● BenefitInsurancePlan_id
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceCoverageOptions?
$format=json&$top=1
Response
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceCoverageOptions(BenefitInsurancePlan_effectiveStartDate=datetime'201
5-03-05T00:00:00',BenefitInsurancePlan_id=2664L,externalCode=2665L)", "type" :
"SFOData.BenefitInsuranceCoverageOptions"
}, "BenefitInsurancePlan_effectiveStartDate" : "\/Date(1425513600000)\/",
"externalCode" : "2665", "BenefitInsurancePlan_id" : "2664",
"mdfSystemLastModifiedDate" : "\/Date(1425527952000)\/", "enrolleeOptions" :
"2662", "mdfSystemObjectType" : "BenefitInsuranceCoverageOptions",
"mdfSystemEffectiveEndDate" : "\/Date(253402214400000)\/", "mdfSystemVersionId" :
null, "mdfSystemLastModifiedDateWithTZ" : "\/Date(1425545952000+0000)\/",
"lastModifiedDateTime" : "\/Date(1425545952000+0000)\/", "mdfSystemCreatedDate" :
"\/Date(1425525792000)\/", "mdfSystemTransactionSequence" : "1",
"mdfSystemRecordId" : "29309129560944A69F1786D1A6EA5270", "createdBy" : "admin",
"mdfSystemEntityId" : "FD498B65E0C44131969392EF503E5D42", "createdDateTime" : "\/
Date(1425543792000+0000)\/", "lastModifiedBy" : "admin", "mdfSystemStatus" : "A",
"mdfSystemEffectiveStartDate" : "\/Date(-2208988800000)\/",
"mdfSystemLastModifiedBy" : "admin", "mdfSystemRecordStatus" : "N",
"mdfSystemCreatedBy" : "admin", "enrolleeOptionsNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceCoverageOptions(BenefitInsurancePlan_effectiveStartDate=datetime'201
5-03-05T00:00:00',BenefitInsurancePlan_id=2664L,externalCode=2665L)/
enrolleeOptionsNav"
Related Information
9.30 BenefitInsuranceCoverageDetails
This entity fetches the employee insurance coverage details such as coverage and rate chart. This entity is available
under Insurance Plan portlet.
Business Fields
● mdfSystemEffectiveStartDate
Required Fields
● BenefitInsuranceCoverageOptions_externalCode
● BenefitInsurancePlan_effectiveStartDate
● BenefitInsurancePlan_id
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceCoverageDetails?
$format=json&$top=1
Response
{
"d" : {
Related Information
This entity fetches the employee insurance enrollee type details such as self, self+family, self+spouse. This entity is
available under Insurance Plan portlet.
Business Fields
● mdfSystemEffectiveStartDate
● relationShipType
Note
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following queryhttps://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Operation Description
Use Case:
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
BenefitInsuranceEnrolleeType?$format=json&
$top=1
Response
Sample Code
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceEnrolleeType(mdfSystemEffectiveStartDate=datetime'1900-01-01T00:0
0:00',relationShipType='2')", "type" : "SFOData.BenefitInsuranceEnrolleeType"
}, "relationShipType" : "2", "mdfSystemEffectiveStartDate" : "\/
Date(-2208988800000)\/", "mdfSystemLastModifiedDate" : "\/
Date(1425525722000)\/", "mdfSystemEffectiveEndDate" : "\/
Date(253402214400000)\/", "mdfSystemObjectType" :
"BenefitInsuranceEnrolleeType", "mdfSystemVersionId" : null,
"mdfSystemLastModifiedDateWithTZ" : "\/Date(1425543722000+0000)\/",
"lastModifiedDateTime" : "\/Date(1425543722000+0000)\/",
"mdfSystemCreatedDate" : "\/Date(1425525722000)\/",
"mdfSystemTransactionSequence" : "1", "mdfSystemRecordId" :
"8B742C5C791745FEAB0481E464E48CEB", "createdBy" : "admin", "mdfSystemEntityId" :
"432103DBE8B64354A41EE26776B00996", "createdDateTime" : "\/
Date(1425543722000+0000)\/", "lastModifiedBy" : "admin", "mdfSystemStatus" :
"A", "mdfSystemLastModifiedBy" : "admin", "mdfSystemRecordStatus" : "N",
"mdfSystemCreatedBy" : "admin", "relationShipTypeNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceEnrolleeType(mdfSystemEffectiveStartDate=datetime'1900-01-01T00:0
0:00',relationShipType='2')/relationShipTypeNav"
}
}, "mdfSystemRecordStatusNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceEnrolleeType(mdfSystemEffectiveStartDate=datetime'1900-01-01T00:0
0:00',relationShipType='2')/mdfSystemRecordStatusNav"
}
}, "mdfSystemStatusNav" : {
"__deferred" : {
"uri" : "https://<hostname>/odata/v2/
BenefitInsuranceEnrolleeType(mdfSystemEffectiveStartDate=datetime'1900-01-01T00:0
0:00',relationShipType='2')/mdfSystemStatusNav"
}
Related Information
9.32 BenefitOverviewHyperlinkConfiguration
This object is used to capture the Benefit Hyperlink Configuration to display hyperlinks on the Benefits Overview
page. It contains hyperlink configuration Id, hyperlink configuration name, and hyperlink configuration details.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitOverviewHyperlinkConfiguration?
$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitOverviewHyperlinkConfiguration",
"type": "SFOData. BenefitOverviewHyperlinkConfiguration "
},
"hyperlinkConfigurationId": "Benefits Hyperlink Configuration",
"hyperlinkConfigurationName": "Hyperlink Configuration",
Additional Information
9.33 BenefitOverviewHyperlinkDetails
This Object is used to capture the Label, URL and the Eligibility rule for the Hyperlinks. The hyperlinks configured
will be displayed on the Benefits Overview page
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitOverviewHyperlinkDetails/
$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
Additional Information
9.34 BenefitProgramEnrollment
This entity contains the list of all of the benefit programs for which an employee is eligible.
Permissions
Role-based ● Only the Eligible Employee can create Benefit Enrollment for the eligible benefits.
● Adminstrators cannot do this unless he uses the proxy feature.
● RBP must be enabled for this MDF Object.
Secured . Set Yes and set the Permission Category as Miscellaneous Permissions.
Operation Description
Properties
Property Description
benefitProgramDataSourceWithExternal- The list of all benefit programs for which employee is eligible.
Code
effectiveEndDate The end date after which program enrollment is no longer active.
Navigation Properties
Benefit Program Enrollment BenefitProgramEnrollmentDetail This field contains the information for
benefit program enrollment.
Use Cases
9.35 BenefitProgram
This entity is a bucket or pool that contains more than one benefit.
Role-based Assign the relevant permissions for BenefitProgram in User Permissions Miscellaneous
Permissions .
Supported Operations
Operation Description
Properties
Property Description
Navigation Properties
Use Cases
This object is used to capture the annual and per pay period contribution amounts of the employee for Savings
Plan benefit. It contains the annual and per pay period contribution amounts of the employee, the minimum and
maximum contribution amounts.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanEnrollmentDetails?
$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanEnrollmentDetails(BenefitEnrollment_effectiveStartDate=datetime
'2018-03-23T00:00:00',BenefitEnrollment_id=25292L,id=25293L)",
"type": "SFOData.BenefitSavingsPlanEnrollmentDetails"
},
"id": "25293",
"BenefitEnrollment_id": "25292",
"BenefitEnrollment_effectiveStartDate": "/Date(1521763200000)/",
"annualMaxContributionAmount": "12",
"annualMinContributionAmount": "12",
"lastModifiedDateTime": "/Date(1521786370000+0000)/",
"perPayPeriodMaxContributionAmount": "12",
"perPayPeriodMinContributionAmount": "12",
"createdBy": "admin",
"annualContributionAmount": "12",
"empBenefitPayComponent": "Savings plan paycomp",
"createdDateTime": "/Date(1521786370000+0000)/",
"lastModifiedBy": "admin",
9.37 BenefitSavingsPlanCatchUpDetail
This object is used to capture the catchup contribution details for the Health Savings Account Savings Plan benefit.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanCatchUpDetail(effectiveS
tartDate=datetime'2017-10-02T00:00:00',id=
694L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/BenefitSavingsPlanCatchUpDetail",
"type": "SFOData.BenefitSavingsPlanCatchUpDetail"
},
"id": "2L",
"payComponent": "BasicPay",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/BenefitSavingsPlanCatchUpDetail/
mdfSystemRecordStatusNav"
}
}
}
Additional Information
9.38 BenefitSavingsPlanContingentBeneficiary
This object is used to capture the Employee's Contingent Beneficiaries for the Savings Plan
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanContingentBeneficiary(id
=694L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanContingentBeneficiary",
"type": "SFOData.BenefitSavingsPlanContingentBeneficiary"
},
"id": "2L",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
Additional Information
9.39 BenefitSavingsPlanERContributionConfigDetail
This object is used to capture the Employer Contribution details for the Health Savings Account Savings Plan
benefit.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanERContributionConfigDeta
il(effectiveStartDate=datetime'2017-10-02T
00:00:00',id=694L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanERContributionConfigDetail",
"type": "SFOData.BenefitSavingsPlanERContributionConfigDetail"
},
Additional Information
9.40 BenefitSavingsPlanERContributionConfig
This object is used to capture the Employer Contribution details for the Health Savings Account Savings Plan
benefit.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanERContributionConfig(eff
ectiveStartDate=datetime'2017-10-02T00:00:
00',id=694L)?$format=json
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanERContributionConfig",
"type": "SFOData.BenefitSavingsPlanERContributionConfig"
},
"id": "2L",
"payComponent": "BasicPay",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanERContributionConfig/mdfSystemRecordStatusNav"
}
}
}
]
}
}
Additional Information
9.41 BenefitSavingsPlanPrimaryBeneficiary
This object is used to capture the Employee's Primary Beneficiaries for the Savings Plan
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanPrimaryBeneficiary(id=69
4L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanPrimaryBeneficiary",
"type": "SFOData.BenefitSavingsPlanPrimaryBeneficiary"
},
"id": "2L",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanPrimaryBeneficiary/mdfSystemRecordStatusNav"
}
}
}
]
}
}
Additional Information
9.42 BenefitSavingsPlanTierConfiguration
This object is used to capture the Tier related contribution details for the Health Savings Account Savings Plan
benefit.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitSavingsPlanTierConfiguration(effect
iveStartDate=datetime'2017-10-02T00:00:00'
,id=694L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanTierConfiguration",
"type": "SFOData.BenefitSavingsPlanTierConfiguration"
},
"id": "2L",
"payComponent": "BasicPay",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitSavingsPlanTierConfiguration/mdfSystemRecordStatusNav"
}
}
}
]
}
}
9.43 BenefitSchedulePeriod
This is used for defining a period (set of dates) within which a particular benefit and claim is available for enrollment
and eligible for an employee.
Permissions
Role-based
Go to Admin Center Configure Object Definition Create New Object Definition
Secured . Set Yes and set the Permission Category as Miscellaneous Permissions.
Supported Operations
Operation Description
Properties
Property Description
balanceCarryForwardUptoDate The balance of a claim that is allowed to carry forward to a specific date.
9.44 BenefitSchedules
This entity is used for grouping two or more schedule periods. BenefitSchedules is required for allowances and
reimbursements. It defines the time period, by date, that an employee can enroll for and claim a benefit.
Permissions
Role-based ● Only eligible employees can create Benefit Enrollment for eligible benefits.
● The administrator cannot do this unless he or she uses the proxy feature.
● RBP must be enabled for this entity.
Secured . Set Yes and set the Permission Category as Miscellaneous Permissions.
Supported Operations
Operation Description
Properties
Property Description
Use Cases
9.45 BenefitEffectiveDate
This entity contains the details of the benefit and the effective from rule for the respective benefit. This is used to
configure the benefit and the effective from date rule the benefit.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
Response
Sample Code
{
"d": {
"results": [
Additional Information
Related Information
This entity contains the details of Event like EventId and EventName for Benefit Event. This is used to configure a
benefit event.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/BenefitEvent",
"type": "SFOData. BenefitEvent"
},
"eventCode": "Newhireevent",
"eventId": "NEW HIRE",
"effectiveStartDate": "/Date(1496016000000)/",
"eventName": "newHire",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/BenefitEvent(/
mdfSystemRecordStatusNav"
}
}
}
]
}
}
Related Information
9.47 BenefitLifeEvent
This entity contains the details of the Benefit Event, Legal Entity and Exception Window Rule for Life Event
Configuration. This is used to configure Life Event Configuration for particular legal Entity and will be used for
creating exception for particular user.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitLifeEventConfiguration",
"type": "SFOData. BenefitLifeEventConfiguration"
},
"effectiveStartDate": "/Date(1496016000000)/",
" configurationId ": "LifeEvent",
"configurationName": "Life Event",
"benefitEvent": "newhire(new_hire)",
"legalEntity": "ACE_USA",
Additional Information
Related Information
9.48 BenefitDeductibleAllowanceEnrollment
This object is used to capture the employee and employer contribution details for Deductible Allowance
Enrollment. It contains the employee and employer contributions and respective pay components.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation Query
URI http://<hostname>/odata/v2/
BenefitDeductibleAllowanceEnrollment(effec
tiveStartDate=datetime'2017-10-02T00:00:00
',id=694L)?$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
BenefitDeductibleAllowanceEnrollment",
"type": "SFOData. BenefitDeductibleAllowanceEnrollment"
},
"id": "2L",
"employeeContribution": "1000",
"employerContribution": "1500",
"employeeContributionPayComponent": "PayComponent",
"employerContributionPayComponent": "PayComponent",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"employeeContributionPayComponentNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitDeductibleAllowanceEnrollment/employeeContributionPayComponentNav "
},
"employerContributionPayComponentNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitDeductibleAllowanceEnrollment/employerContributionPayComponentNav "
},
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
BenefitDeducibleAllowanceEnrollment(/mdfSystemRecordStatusNav"
}
}
}
}
}
]
}
}
9.49 EmployeeDismissalProtection
This entity provides ability for the user to create, modify, or delete EmployeeDismissalProtection entity. It also
provides the ability to link the EmployeeDismissalProtection to EmployeeDismissalProtectionDetail.
Supported Operations
Operataion Description
Query Yes
Insert Yes
Upsert Yes
Delete Yes
These are not complete lists of properties. For more information about the entity metadata, please refer to your
OData API dictionary in the Admin Center or use the entity query:https://<hostname>/odata/v2/<Entity>/
$metadata.
Request
Operation Query
Response
Sample Code
{
"d": {
"__metadata": {
Request
Operation Query
URI http://<hostname>/odata/v2/upsert
{
"__metadata": {
"uri": "https://
<hostname>/odata/v2/restricted/
EmployeeDismissalProtection('fdgg45')
",
"type":
"SFOData.EmployeeDismissalProtection"
},
"workerId": "fdgg45"
}
Response
Sample Code
9.50 EmployeeDismissalProtectionDetail
This entity provides ability for the user to create, modify or delete EmployeeDismissalProtectionDetail entity.
<OPTIONAL>
Operataion Description
Query Yes
Insert Yes
Upsert Yes
Delete Yes
Properties
Request
Operation Query
URI http://<hostname>/odata/v2/
EmployeeDismissalProtectionDetail?
$filter=EmployeeDismissalProtection_worker
Id eq 'SouzaB'
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/restricted/
EmployeeDismissalProtectionDetail(EmployeeDismissalProtection_workerId='SouzaB',e
xternalCode='80A2D2A19694440CB1261E3D91629AEC')",
"type": "SFOData.EmployeeDismissalProtectionDetail"
},
"EmployeeDismissalProtection_workerId": "SouzaB",
"externalCode": "80A2D2A19694440CB1261E3D91629AEC",
"protectionStartDate": "/Date(1483228800000)/",
"createdBy": "sriadmin",
"lastModifiedBy": "sriadmin",
"createdDateTime": "/Date(1539065718000+0000)/",
"lastModifiedDateTime": "/Date(1539065718000+0000)/",
Request
Operation Query
URI http://<hostname>/odata/v2/upsert
{
"__metadata": {
"uri": "https://
<hostname>/odata/v2//
EmployeeDismissalProtectionDetail",
"type":
"SFOData.EmployeeDismissalProtectionD
etail"
},
"EmployeeDismissalProtection_workerId
": "SouzaB",
"protectionStartDate": "/
Date(1483228800000)/",
"dismissalProtectionType": "Military
Service1",
"protectionEndDate":
"/Date(1514677700000)/"
}
Response
<A successful query returns this and that.>
Sample Code
This object is used to maintain the seniority details of the employee. Seniority details includes Seniority Type,
Seniority Years, Seniority Months and Seniority Days.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
Request Information
Operation Query
URI http://<hostname>/odata/v2/
EmployeeSeniority(effectiveStartDate=datet
ime'2017-10-02T00:00:00',id=694L)/
$format=json
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/ EmployeeSeniority",
"type": "SFOData. EmployeeSeniority"
},
"user": "user",
"validOn": "/Date(1496016000000)/",
"seniorityType": "SeniorityType",
"seniorityYears": "5L",
"seniorityMonths": "2L",
"seniorityDays": "10L",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1496123038000+0000)/",
"lastModifiedDateTime": "/Date(1496123038000+0000)/",
"mdfSystemRecordStatus": "N",
"seniorityTypeNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/EmployeeSeniority/
seniorityTypeNav "
},
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/EmployeeSeniority(/
mdfSystemRecordStatusNav"
Additional Information
In this section, you´ll find the APIs available for Payment Information.
10.1 Bank
This entity contains bank-related information such as Bank Name, BIC, Bank Address, and so on.
For information about metadata and supported operations, please refer to your OData API dictionary available in
the Admin Center or use this query:
https://<hostname>/odata/v2/Entity('<Your Entity')?$format=json
Use Cases
Request Information
Operation QUERY
URI http://<Hostname>/odata/v2/Bank
Response
Sample Code
Additional Information
The property <bankCountry> stores the internal ID of the country MDF object.
You can use this entity to access the Payment Information Screen for South Africa (ZAF).
Operations Allowed
Operation Description
Properties
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following query https://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json
Use Cases
Request Information
Operation GET
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3ZAF(PaymentInformationDetailV3_externalCode=6853L,Payme
ntInformationV3_effectiveStartDate=datetime'2016-05-25T00:00:00',PaymentInformati
onV3_worker='ykumar',externalCode=6854L)",
"type": "SFOData.PaymentInformationDetailV3ZAF"
},
"PaymentInformationV3_effectiveStartDate": "/Date(1464134400000)/",
"PaymentInformationDetailV3_externalCode": "6853",
"PaymentInformationV3_worker": "ykumar",
"externalCode": "6854",
"accountHolderRelationship": "THIRDPARTY",
"accountType": "NOTPAIDEFT",
"accountHolderRelationshipNav": {
"__deferred": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3ZAF(PaymentInformationDetailV3_externalCode=6853L,Payme
ntInformationV3_effectiveStartDate=datetime'2016-05-25T00:00:00',PaymentInformati
onV3_worker='ykumar',externalCode=6854L)/accountHolderRelationshipNav"
}
},
"accountTypeNav": {
"__deferred": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3ZAF(PaymentInformationDetailV3_externalCode=6853L,Payme
ntInformationV3_effectiveStartDate=datetime'2016-05-25T00:00:00',PaymentInformati
onV3_worker='ykumar',externalCode=6854L)/accountTypeNav"
}
}
},
{
"__metadata": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3ZAF(PaymentInformationDetailV3_externalCode=6851L,Payme
ntInformationV3_effectiveStartDate=datetime'2016-05-25T00:00:00',PaymentInformati
onV3_worker='ykumar',externalCode=6852L)",
"type": "SFOData.PaymentInformationDetailV3ZAF"
},
"PaymentInformationV3_effectiveStartDate": "/Date(1464134400000)/",
"PaymentInformationDetailV3_externalCode": "6851",
"PaymentInformationV3_worker": "ykumar",
"externalCode": "6852",
"accountHolderRelationship": "OWN",
"accountType": "CREDITCARD",
"accountHolderRelationshipNav": {
"__deferred": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3ZAF(PaymentInformationDetailV3_externalCode=6851L,Payme
ntInformationV3_effectiveStartDate=datetime'2016-05-25T00:00:00',PaymentInformati
onV3_worker='ykumar',externalCode=6852L)/accountHolderRelationshipNav"
}
Use Case: Get all Payments including the South Africa specific fields.
Request Information
Operation Query
URI http://<Hostname>/odata/v2/
PaymentInformationDetailV3?$format=json&
$EXPAND=PaymentInformationDetailV3ZAFMETHO
D: GET
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3(PaymentInformationV3_effectiveStartDate=datetime'2016-
05-25T00:00:00',PaymentInformationV3_worker='ykumar',externalCode=6853L)",
"type": "SFOData.PaymentInformationDetailV3"
},
"PaymentInformationV3_effectiveStartDate": "/Date(1464134400000)/",
"PaymentInformationV3_worker": "ykumar",
"externalCode": "6853",
"percent": null,
"amount": "23",
"accountNumber": "2332323",
"bank": null,
"paySequence": "1",
"payType": "PAYROLL",
"iban": null,
"purpose": null,
"currency": "ZAR",
"businessIdentifierCode": null,
"bankCountry": "ZAF",
"customPayType": null,
"accountOwner": "kumar",
"routingNumber": "123456",
"paymentMethod": "05",
"toPaymentInformationDetailV3JPN": {
"__deferred": {
"uri": "https://10.97.147.58:443/odata/v2/
PaymentInformationDetailV3(PaymentInformationV3_effectiveStartDate=datetime'2016-
Related Information
11.1 DataReplicationProxy
This entity stores references to Employee Central Time data that is relevant for the replication to Employee Central
Payroll and it is used to identify delta changes of time data that should be replicated to Employee Central Payroll. It
only contains a limited number of references to available Employee Central Time objects.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Operation Query
URI http://<Hostname>/odata/v2/DataReplicationProxy?$fil-
ter=(earliestReplicationDateTime le datetimeoff-
set'2016-09-01T00:00:00Z' and (dataReplicationProxyStatus
eq 'OUT_OF_SYNC' or dataReplicationProxyStatus eq 'DELE
TED') and replicationContentType eq 'EMPLOYEE_TIME_DATA'
and replicationTargetSystem eq 'XXXCLNT100')&$for
mat=json
Response
Sample Code
{
"d": {
"results": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
DataReplicationProxy('75846be1b99b413f8d0f8872e89d3acf')",
"type": "SFOData.DataReplicationProxy"
},
"externalCode": "75846be1b99b413f8d0f8872e89d3acf",
11.2 EmployeePayrollRunResults
You use this entity to retain information about the employees payroll run results for a particular period of time.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Role-based Assign the relevant permission for Employee Payroll Run Results in User Permissions
Miscellaneous Permissions .
This is the query operation for EmployeePayrollRunResults entity which is further associated with
EmployeePayrollRunResultsItems with 1:N relationship. This query is requesting the data for an employee called
‘maryusa1’ and in response, the required data will be retrieved.
Request Information
Operation QUERY
URI https://sfapiqacand.sflab.ondemand.com/
odata/v2/EmployeePayrollRunResults?
$format=json&$filter=userId eq 'maryusa1'&
$expand=employeePayrollRunResults
{
"__metadata": {
"uri": "https://<hostname>/
odata/v2/
EmployeePayrollRunResults(externalCod
e='SAP_EC_PAYROLL_US01_01012015013120
15_3991_4031',mdfSystemEffectiveStart
Date=datetime'2015-01-31T00:00:00')",
"type":
"SFOData.EmployeePayrollRunResults"
},
"mdfSystemEffectiveStartDate": "/
Date(1422662400000)/",
"externalCode":
"SAP_EC_PAYROLL_US01_0101201501312015
_3991_4031",
"payrollRunType": "EC_PRT_001",
"mdfSystemEffectiveEndDate": "/
Date(253402214400000)/",
"mdfSystemObjectType":
"EmployeePayrollRunResults",
"payrollId": null,
"mdfSystemVersionId": null,
"employmentId": "4031",
"lastModifiedDateTime": "/
Date(1436522255000+0000)/",
"sequenceNumber": "15",
"mdfSystemTransactionSequence":
"1",
"currency": "USD",
"payrollProviderPayrollRunType":
"R",
"payrollProviderId":
"SAP_EC_PAYROLL",
"isVoid": false,
"mdfSystemRecordId":
"376D2FFE74E64F23BFF86DC13FEF3F6B",
"mdfSystemEntityId":
"5921769D435546AA9C5F650789047230",
"userId": "maryusa1",
"personId": "3991",
"mdfSystemStatus": "A",
"payDate": "/
Date(1422662400000)/",
"systemId": "QK8",
"lastModifiedDateWithTZ": "/
Date(1436522255000+0000)/",
"createdDate": "/
Date(1427788173000)/",
"mdfSystemRecordStatus": "N",
"startDateWhenPaid": "/
Date(1420070400000)/",
"externalName": null,
"endDateWhenPaid": "/
Date(1422662400000)/",
"clientId": "507",
"createdBy": "hajek",
"createdDateTime": "/
Date(1427788173000+0000)/",
"lastModifiedBy": "admin",
"lastModifiedDate": "/
Date(1436522255000)/",
Response
Sample Code
{
"d": {
"results": [{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeePayrollRunResults(externalCode='SAP_EC_PAYROLL_US01_0101201501312015_3991
_4031',mdfSystemEffectiveStartDate=datetime'2015-01-31T00:00:00')",
"type": "SFOData.EmployeePayrollRunResults"
},
"mdfSystemEffectiveStartDate": "/Date(1422662400000)/",
"externalCode":
"SAP_EC_PAYROLL_US01_0101201501312015_3991_4031",
"payrollRunType": "EC_PRT_001",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "EmployeePayrollRunResults",
"payrollId": null,
"mdfSystemVersionId": null,
"employmentId": "4031",
"lastModifiedDateTime": "/Date(1436522255000+0000)/",
"sequenceNumber": "15",
"mdfSystemTransactionSequence": "1",
"currency": "USD",
"payrollProviderPayrollRunType": "R",
"payrollProviderId": "SAP_EC_PAYROLL",
"isVoid": false,
"mdfSystemRecordId": "376D2FFE74E64F23BFF86DC13FEF3F6B",
"mdfSystemEntityId": "5921769D435546AA9C5F650789047230",
"userId": "maryusa1",
"personId": "3991",
"mdfSystemStatus": "A",
"payDate": "/Date(1422662400000)/",
"systemId": "QK8",
"lastModifiedDateWithTZ": "/Date(1436522255000+0000)/",
"createdDate": "/Date(1427788173000)/",
"mdfSystemRecordStatus": "N",
"startDateWhenPaid": "/Date(1420070400000)/",
"externalName": null,
"endDateWhenPaid": "/Date(1422662400000)/",
"clientId": "507",
"createdBy": "hajek",
"createdDateTime": "/Date(1427788173000+0000)/",
"lastModifiedBy": "admin",
"lastModifiedDate": "/Date(1436522255000)/",
"companyId": "US01",
"payrollRunTypeNav": {
"__deferred": {
"EmployeePayrollRunResults_mdfSystemEffectiveStartDate": "/Date(1422662400000)/",
"EmployeePayrollRunResults_externalCode":
"SAP_EC_PAYROLL_US01_0101201501312015_3991_4031",
"externalCode": "3991_/101_0101201501312015",
"payrollProviderWageType": "/101",
"payrollProviderGroupingValue": null,
"mdfSystemEffectiveEndDate": "/
Date(253402214400000)/",
"mdfSystemObjectType":
"EmployeePayrollRunResultsItems",
"mdfSystemVersionId": null,
"payrollProviderUnitOfMeasurement": null,
"lastModifiedDateTime": "/
Date(1436522255000+0000)/",
"mdfSystemTransactionSequence": "1",
"amount": "85.27",
"mdfSystemRecordId":
"A863859AFD61418A95EABD522652F7D9",
"mdfSystemEntityId":
"DBB2408595F64423AB0CCCB17466E59E",
"mdfSystemStatus": "A",
"quantity": "0",
"lastModifiedDateWithTZ": "/
Date(1436522255000+0000)/",
"createdDate": "/Date(1429517937000)/",
"mdfSystemRecordStatus": "N",
"wageType": "EC_MOB_US_GROSS",
"unitOfMeasurement": null,
"externalName": null,
"payrollProviderGroupingReason": null,
"createdBy": "hajek",
"groupingReason": null,
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1429517937000+0000)/",
"startDateWhenEarned": "/Date(1420070400000)/",
"lastModifiedDate": "/Date(1436522255000)/",
"mdfSystemEffectiveStartDate": "/
Date(-2208988800000)/",
"endDateWhenEarned": "/Date(1422662400000)/",
"groupingReasonNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeePayrollRunResultsItems(EmployeePayrollRunResults_externalCode='SAP_EC_PAY
ROLL_US01_0101201501312015_3991_4031',EmployeePayrollRunResults_mdfSystemEffectiv
eStartDate=datetime'2015-01-31T00:00:00',externalCode='3991_/
101_0101201501312015')/groupingReasonNav"
}
},
"wageTypeNav": {
"__deferred": {
"EmployeePayrollRunResults_mdfSystemEffectiveStartDate": "/Date(1422662400000)/",
"EmployeePayrollRunResults_externalCode":
"SAP_EC_PAYROLL_US01_0101201501312015_3991_4031",
"externalCode": "3991_/845_0101201501312015",
"payrollProviderWageType": "/845",
"payrollProviderGroupingValue": null,
"mdfSystemEffectiveEndDate": "/
Date(253402214400000)/",
"mdfSystemObjectType":
"EmployeePayrollRunResultsItems",
"mdfSystemVersionId": null,
"payrollProviderUnitOfMeasurement": null,
"lastModifiedDateTime": "/
Date(1435563657000+0000)/",
"mdfSystemTransactionSequence": "1",
"amount": "120.9",
"mdfSystemRecordId":
"44748190EB8C4986B57A96C5E70FA540",
"mdfSystemEntityId":
"CD3CD50DFE9D40C6BE9802B835D8ABF3",
"mdfSystemStatus": "A",
"quantity": "37.5",
"lastModifiedDateWithTZ": "/
Date(1435563657000+0000)/",
"createdDate": "/Date(1429517937000)/",
"mdfSystemRecordStatus": "N",
"wageType": "EC_WT_845",
"unitOfMeasurement": null,
"externalName": null,
"payrollProviderGroupingReason": null,
"createdBy": "hajek",
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Role-based Assign the relevant permission for Employee Payroll Run Results Items in User Permissions
Miscellaneous Permissions .
11.3 PayrollDataMaintenanceTask
The Employee Central Payroll system uses this entity to upsert a JSON-Array of PayrollDataMaintenanceTask
objects. These objects are used to monitor the status of additional end-user tasks, for example payroll-relevant
employee data that has to be entered for a new hire.
Supported Operations
Operation Description
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation Upsert
URI http://<Hostname>/odata/v2/upsert?
$format=json
{
"__metadata":{
"uri":"PayrollDataMaintenanceTask(ext
ernalCode='40F2E963-0B8A-1EE7-82C7-63
DDD7D2A169')"
},
"userIdNav":{
"__metadata":{
"uri":"User(userId='111')"
}
},
"taskType":"NEW_HIRE",
"legalEntity":"AE01",
"employeeDataEffectiveFromDate":"/
Date(1489190400000)/"
},
{
"__metadata":{
"uri":"PayrollDataMaintenanceTask(ext
ernalCode='40F2E963-0B8A-1EE7-82C7-63
DDD7D2E169')"
},
"userIdNav":{
"__metadata":{
"uri":"User(userId='111')"
}
},
"taskType":"NEW_HIRE",
"legalEntity":"AE01",
"employeeDataEffectiveFromDate":"/
Date(1489449600000)/"
},
{
"__metadata":{
"uri":"PayrollDataMaintenanceTask(ext
ernalCode='40F2E963-0B8A-1EE7-82C7-63
DDD7D2C169')"
},
"userIdNav":{
"__metadata":{
"uri":"User(userId='111')"
}
},
"taskType":"NEW_HIRE",
"legalEntity":"AE01",
"employeeDataEffectiveFromDate":"/
Date(1489363200000)/"
}
Employee Central Payroll uses this entity to upsert a JSON-Array of PayrollEvent configuration objects. Use
these objects for payroll configuration.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Additional Information
The PayrollDataMaintenanceTaskConfiguration entity is an external API for the Employee Central Payroll solution. It
is used by the Employee Central Payroll system to upsert a JSON-Array of PayrollDataMaintnanceTaskConfiguration
objects that are used for country-specific payroll configuration. It includes additional payroll-relevant tasks for the
admin. For example, after a hire, there is additional payroll-relevant employee data that needs to be entered. It gives
the admin a list of infotypes that need to be maintained to complete the payroll aspect of the new hire.
Additional information:
● Child MDF: PayrollDataMaintenanceTaskTypeConfiguration. It contains the enum of the task type (for example
new_hire) and the list of infotypes that are required for the configuration of events.
● Grandchild MDF: PayrollDataMaintenanceTaskTypeLinkConfiguration. It contains the infotype details that are
required for the configuration of events.
Use Case
Request Information
Operation Upsert
URI http://<Hostname>/odata/v2/upsert?
$format=json
„{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PayrollDataMaintenanceTaskConfigurati
on('05ce0ba5c4d34818ac0ecc5694c8f2df'
)",
"type":
"SFOData.PayrollDataMaintenanceTaskCo
nfiguration"
},
"status": "A",
"country": "AUS",
"taskTypes": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PayrollDataMaintenanceTaskTypeConfigu
ration(PayrollDataMaintenanceTaskConf
iguration_externalCode='05ce0ba5c4d34
818ac0ecc5694c8f2df',externalCode='c7
4874772d1c497f9d0f231fa51d9eea')",
"type":
"SFOData.PayrollDataMaintenanceTaskTy
peConfiguration"
},
"externalCode":
"c74874772d1c497f9d0f231fa51d9eea",
"taskType": "NEW_HIRE",
"links": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PayrollDataMaintenanceTaskTypeLinkCon
figuration(PayrollDataMaintenanceTask
Configuration_externalCode='05ce0ba5c
4d34818ac0ecc5694c8f2df',PayrollDataM
aintenanceTaskTypeConfiguration_exter
nalCode='c74874772d1c497f9d0f231fa51d
9eea',externalCode='1be43d5e0e9046ffb
15610409fa989ea')",
"type":
"SFOData.PayrollDataMaintenanceTaskTy
peLinkConfiguration"
},
"infotypeName": "227"
},
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PayrollDataMaintenanceTaskTypeLinkCon
figuration(PayrollDataMaintenanceTask
Configuration_externalCode='05ce0ba5c
4d34818ac0ecc5694c8f2df',PayrollDataM
aintenanceTaskTypeConfiguration_exter
nalCode='c74874772d1c497f9d0f231fa51d
9eea',externalCode='339e500eb4264e81b
02cc4c2f3007df7')",
Related Information
11.5 PayrollSystemConfiguration
This is an external API for Employee Central Payroll application. This will be used by the Employee Central Payroll
System to fetch PayrollSystemConfiguration objects which can be used in new Payroll Configuration UI, where we
need to fetch and display payroll system configuration data, payroll data maintenance task configuration data and
payroll portlets data.
Permissions
None.
Supported Operations
Operataion Description
Query Yes
Insert Yes
Upsert Yes
Merge No
Delete No
Property Description
payrollSystemUrl String
payrollSystemClientId Long
enableBSI Boolean
thirdPartyIdpURL String
enableEnhancedValidationsForProduction Boolean
These are not complete lists of properties. For more information about the entity metadata, please refer to your
OData API dictionary in the Admin Center or use the entity query:https://<hostname>/odata/v2/
Payrollsystemconfiguration/$metadata.
Request
Operation Upsert
URI http://<hostname>/odata/v2/upsert?
$format=json
{
"d": {
"results": [{
"__metadata": {
"uri": "
PayrollSystemConfiguration(81L)",
"type":
"SFOData.PayrollSystemConfiguration"
},
"enablePayStatement":
true,
"status": "I",
"thirdPartyIdpUrl": null,
"enableBsi": false,
"payrollSystemClientId":
"801",
"payrollSystemUrl":
"https://
my010010.payroll.ondemand.com",
"enablePayrollUiIntegration": true,
"enableEnhancedValidationsForProducti
on": true,
"country": "AUS",
"categories": {
"results": [{
"__metadata": {
"uri": "
PayrollConfigurationCategory(PayrollS
ystemConfiguration_externalCode=81L,e
xternalCode=82L)",
"type":
"SFOData.PayrollConfigurationCategory
"
},
"externalCategoryName_defaultValue":
"Earnings and Deductions",
"links": {
"results": [{
"__metadata": {
"uri":
PayrollConfigurationCategoryLink(Payr
ollConfigurationCategory_externalCode
=82L,
PayrollSystemConfiguration_externalCo
de=81L,
externalCode=85L)",
"type":
"SFOData.PayrollConfigurationCategory
Link"
}
"selfService": false,
"adminService": true,
"infotypeNumber": "11"
},
{
"__metadata": {
"uri":
"PayrollConfigurationCategoryLink(Pay
rollConfigurationCategory_externalCod
e=82L,
PayrollSystemConfiguration_externalCo
de=81L,
externalCode=84L)",
"type":
"SFOData.PayrollConfigurationCategory
Link"
},
"selfService": false,
"adminService": true,
"service": null,
"url":
null,
"infotypeNumber": "850"
},
{
"__metadata": {
"uri":
"PayrollConfigurationCategoryLink(Pay
rollConfigurationCategory_externalCod
e=82L,
PayrollSystemConfiguration_externalCo
de=81L,
externalCode=83L)",
"type":
"SFOData.PayrollConfigurationCategory
Link"
},
"selfService": false,
"adminService": true,
"service": null,
"url":
null,
"infotypeNumber": "849"
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://localhost:443/odata/v2/
PayrollSystemConfiguration('77c90c013d2c42b89fd5ec53b7edee8b')",
"type": "SFOData.PayrollSystemConfiguration"
},
"externalCode": "77c90c013d2c42b89fd5ec53b7edee8b",
"externalName": "ARG",
"status": "I",
"enablePayStatement": false,
"payrollSystemUrl": null,
"payrollSystemClientId": null,
"enablePayrollUiIntegration": false,
"lastModifiedDateTime": "/Date(1547633032000+0000)/",
"country": "ARG",
"sapSystemConfiguration": null,
"thirdPartyIdpUrl": null,
"enableBsi": false,
"enablePaystatementDownloadFunctionality": false,
"lastModifiedBy": "admin",
"enableEnhancedValidationsForProduction": true,
"statusNav": {
"__metadata": {
"uri": "https://localhost:443/odata/v2/
MDFEnumValue(key='com.successfactors.genericobject.api.StatusEnum',value='I')",
"type": "SFOData.MDFEnumValue"
},
"value": "I",
"key": "com.successfactors.genericobject.api.StatusEnum",
"en_US": "InActive",
"localized": "InActive"
},
"countryNav": {
"results": [
{
"__metadata": {
"uri": "https://localhost:443/odata/v2/
Country(code='ARG',effectiveStartDate=datetime'1900-01-01T00:00:00')",
"type": "SFOData.Country"
},
"code": "ARG",
"externalName_localized": "Argentina"
}
]
},
"sapSystemConfigurationNav": {
"__deferred": {
Additional Information
11.6 SAPSystemConfiguration
The SAPSystemConfiguration entity is an external API for the Employee Central Payroll solution. It is used by the
Employee Central Payroll system to fetch and display SAPSystemConfiguration objects. It is used to maintain data
required to connect to payroll systems.
Note
To be able to use this API, you must have Employee Central Payroll or Payroll Integration enabled in your
instance. Please contact SAP Cloud Support to enable these features.
Operation Description
Properties
Property Description
payrollSystemClientId Client ID
These are not complete lists of properties. For more information about the entity metadata, please refer to your
OData API dictionary in the Admin Center or use the entity query:https://<hostname>/odata/v2/<Entity>/
$metadata.
Request
Operation Upsert
URI https://<hostname>/odata/v2/upsert
[
{
"__metadata":{
"uri":"SAPSystemConfiguration(externa
lCode='ABC/123')"
},
"payrollSystemUrl":"https://
<hostname>",
"payrollSystemClientId":"123"
},
{
"__metadata":{
"uri":"SAPSystemConfiguration(externa
lCode='DEF/456')"
},
"payrollSystemUrl":"https://
<hostname>",
"payrollSystemClientId":"456"
}
]
12.1 PerAddressDEFLT
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedOn:
Use Cases
Sample Code
{
d: {
results: [1 ]
0:
{
__metadata: {
uri: "https://localhost:port/odata/v2/public/
PerAddressDEFLT(addressType='business',personIdExternal='jtong1',startDate=dateti
me'1993-02-15T00:00:00') "
type: " SFOData.PerAddressDEFLT "}-
personIdExternal: " jtong1 "
state: " CA "
address1: " 1500 Fashion Island Blvd. "
address2: " Ste. 300 "
}-
-}
-}
Related Information
12.2 PerEmail
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://localhost:port/odata/v2/public/
PerPerson('mhoff1')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "mhoff1",
"dateOfBirth": "/Date(-775008000000)/",
"personalInfoNav": {
"results": [
{
"__metadata": {
"uri": "https://localhost:port/odata/v2/public/
PerPersonal(personIdExternal='mhoff1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.PerPersonal"
},
"lastName": "Hoff",
"firstName": "Marcus"
}
]
}
}
]
}
}
Operation Upsert
URI http://<Hostname>/odata/v2/Upsert
Content-Type: application/json
Payload
Sample Code
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PerEmail(emailType='8448',personIdExt
ernal='106015')",
"type": "SFOData.PerEmail"
},
"emailAddress":
"Marcushoff@samplecorporation.com"
}
Related Information
12.3 PersonEmpTerminationInfo
In SAP SuccessFactors Employee Central, you can use PersonEmpTerminationInfo to expose the latest termination
date of an employee.
Operations Allowed
You query PersonEmpTerminationInfo via $expand from the PerPerson entity. You cannot query
PersonEmpTerminationInfo directly.
Properties
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following query https://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json.
If you need to use the latest termination date for your processes, you can retrieve with $expand from PerPerson.
The latest termination date of an employee is represented by the field latestTerminationDate.
Request Information
URI http://<Hostname>/odata/v2/PerPerson?
$format=json&
$expand=personEmpTerminationInfoNav &
$select= personEmpTerminationInfoNav&
$filter=personEmpTerminationInfoNav/
personIdExternal+eq+'admin'
Response
Response:
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<Hostname>/odata/v2/PerPerson('admin')",
"type": "SFOData.PerPerson"
},
"personEmpTerminationInfoNav": {
"__metadata": {
"uri": "https://<Hostname>/odata/v2/PersonEmpTerminationInfo('admin')",
"type": "SFOData.PersonEmpTerminationInfo"
},
"personIdExternal": "admin",
"activeEmploymentsCount": 1,
"latestTerminationDate": null
}
}
]
}
}
Additional Information
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
https://<hostname>.com/odata/v2/ Get all persons who have more than one emergency contact
PerEmergencyContacts?$filter=primaryFlag
ne 'Y'&
$select=personIdExternal,relationship&
$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerEmergencyContacts(name='Chad
Hoff',personIdExternal='mhoff1',relationship='Brother')",
"type": "SFOData.PerEmergencyContacts"
},
"relationship": "Brother",
"personIdExternal": "mhoff1"
},
{
Operation Upsert
URI http://<Hostname>/odata/v2/Upsert
Content-Type: application/json
Payload
Sample Code
"__metadata": {
"uri": "https://<Hostname>/odata/v2/
PerEmergencyContacts(name='Karen
Grant',personIdExternal='cgrant1',rel
ationship='1767')",
"type":
"SFOData.PerEmergencyContacts"
},
"addressCountry": "DEU"
}}
Related Information
Operations Allowed
Operation Description
UPSERT/POST Update (upsert, full or incremental purge) an object, such as employee, person or foundation.
Properties
Property Description
createdBy The ID of the person who created the global information entry.
lastModifiedBy The ID of the person who made the last update to the global information entry.
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedOn:
Related Information
12.6 PerNationalId
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
https://<hostname>.com/odata/v2/ Get all person whose nationalId is not Primary in the country
PerNationalId?$filter=isPrimary eq they are living in
'false'&
$select=personIdExternal,nationalId,countr
y&$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerNationalId(cardType='itin',country='USA',personIdExternal='vstokes1')",
"type": "SFOData.PerNationalId"
},
"personIdExternal": "vstokes1",
"country": "USA",
"nationalId": "48-98493057"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerNationalId(cardType='itin',country='USA',personIdExternal='wsown1')",
"type": "SFOData.PerNationalId"
},
"personIdExternal": "wsown1",
"country": "USA",
"nationalId": "47-49409408"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerNationalId(cardType='itin',country='USA',personIdExternal='smormony1')",
"type": "SFOData.PerNationalId"
},
"personIdExternal": "smormony1",
"country": "USA",
"nationalId": "45-34593835"
}
]
}
}
Related Information
In SAP Success Factors Employee Central, you can use this entity to display information about an employee such
as date and place of birth, and date of death.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Take a look at the HRIS object information in this table here. If you need more information about these attributes,
you can refer to the links in Related Information below.
Take a look at PerPerson Upsert [page 530] for information on how you can use this entity to add a new employee.
SecondaryAssignmentNav lets you know which employment contract is the primary one for replication scenarios.
You can see how to use it in Differentiating primary from secondary employment during concurrent employment
replication [page 548].
personEmpTerminationInfoNav lets you retrieve the latest employment date for an employee. You can see a sample
use case in the entity documentationPersonEmpTerminationInfo [page 361] personEmpTerminationInfo.
Request Information
URI http://<Hostname>/odata/v2/PerPerson?
$top=1&$format=JSON
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<Hostname>/odata/v2/PerPerson('aaaa')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "aaaa",
"dateOfBirth": null,
"lastModifiedOn": "/Date(1303743709000)/",
"lastModifiedDateTime": "/Date(1303758109000+0000)/",
"dateOfDeath": null,
"createdOn": "/Date(1303743708000)/",
"countryOfBirth": null,
"createdBy": "v4admin",
"createdDateTime": "/Date(1303758108000+0000)/",
"lastModifiedBy": "v4admin",
"personId": "4",
"personRerlationshipNav": {
"__deferred": {
"uri": "https://apisalesdemo4.successfactors.com:443/odata/v2/
PerPerson('aaaa')/personRerlationshipNav"
}
},
"emergencyContactNav": {
"__deferred": {
"uri": "https://apisalesdemo4.successfactors.com:443/odata/v2/
PerPerson('aaaa')/emergencyContactNav"
}
},
"phoneNav": {
"__deferred": {
"uri": "https://apisalesdemo4.successfactors.com:443/odata/v2/
PerPerson('aaaa')/phoneNav"
}
},
"personalInfoNav": {
"__deferred": {
"uri": "https://apisalesdemo4.successfactors.com:443/odata/v2/
PerPerson('aaaa')/personalInfoNav"
}
},
"homeAddressNavDEFLT": {
"__deferred": {
"uri": "https://apisalesdemo4.successfactors.com:443/odata/v2/
PerPerson('aaaa')/homeAddressNavDEFLT"
}
},
"secondaryAssignmentsNav": {
"__deferred": {
"uri": "https://apisalesdemo4.successfactors.com:443/odata/v2/
PerPerson('aaaa')/secondaryAssignmentsNav"
}
},
"nationalIdNav": {
"__deferred": {
Additional Information
Although the PerPerson entity is created when the user entity is upserted, it remains hidden. It only becomes
visible when:
● It is explicitly upserted
● EmpEmployment has been upserted. For more information, seeEmpEmployment Upsert [page 531]
● Filters for including or excluding internal and external users are available. For more information, see Filtering
out external user data [page 535]
Related Information
You use this entity to generate the next person ID assigned for a new hire, incrementing it as required.
For more information about the properties and navigation properties, please go to Admin Center API Center
OData API Data Dictionary or use the API query: https://<hostname>/odata/v2/<Entity>/$metadata.
Use Cases
The generated IDs are used in the entities User Entity (fields: username and userID), PerPerson Entity (field:
personIdExternal, UserID), Employment Entity (fields: personIdExternal and userID), Per* Entities (field:
personIdExternal), Emp* Entities (field: userID)
Operation Insert
Request https://<hostname>/odata/v2/generateNextPersonID?$format=json
Response
{
"d" : {
"GenerateNextPersonIDResponse" : {
"personID" : "214"
}
}
}
When you generate more then one ID, use a $BATCH statement to avoid too many roundtrips. Please make sure
that the consumer uses the generated IDs in a unique way. Any unused numbers will create gaps since the API
generates the numbers in an incremental fashion.
Request https://<Hostname>/odata/v2/$batch
Host: <Hostname>
Content-Length: 668
Payload --batch_36522ad7-fc75-4b56-8c71-56071383e77b
--changeset_1
Content-Transfer-Encoding: binary
Content-Type: application/http
--changeset_1
Content-Transfer-Encoding: binary
Content-Type: application/http
--changeset_1
Content-Transfer-Encoding: binary
Content-Type: application/http
--changeset_1--
--batch_36522ad7-fc75-4b56-8c71-56071383e77b--
Response
--batch_840c9610-df87-42ce-bd42-948f9e3f8e04
Content-Type: multipart/mixed; boundary=changeset_75c877a0-4c68-4b0e-af47-
b8bdb19c117b
--changeset_75c877a0-4c68-4b0e-af47-b8bdb19c117b
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
DataServiceVersion: 1.0
Content-Length: 314
--changeset_75c877a0-4c68-4b0e-af47-b8bdb19c117b
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
DataServiceVersion: 1.0
Content-Length: 314
--changeset_75c877a0-4c68-4b0e-af47-b8bdb19c117b
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
DataServiceVersion: 1.0
Content-Length: 314
--changeset_75c877a0-4c68-4b0e-af47-b8bdb19c117b--
--batch_840c9610-df87-42ce-bd42-948f9e3f8e04--
Related Information
12.8 PerPersonal
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedDateTime:
https://<hostname>/odata/v2/PerPersonal? Get all Persons (First and Lastname) where first or last name
$filter=firstName like 'Ca%' or lastName starts with Ca
like 'Ca%'&$select=firstName,lastName&
$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerPersonal(personIdExternal='wcarver1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.PerPersonal"
},
"lastName": "Carver",
"firstName": "William"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerPersonal(personIdExternal='mclements1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.PerPersonal"
},
"lastName": "Carvalho",
"firstName": "Marcelo"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerPersonal(personIdExternal='ecarpenter1',startDate=datetime'1990-01-01T00:00:00')"
,
"type": "SFOData.PerPersonal"
},
"lastName": "Carpenter",
"firstName": "Elizabeth"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerPersonal(personIdExternal='cclark1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.PerPersonal"
},
"lastName": "Clark",
"firstName": "Caroline"
},
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/public/
PerPersonal(personIdExternal='charper1',startDate=datetime'1990-01-01T00:00:00')",
"type": "SFOData.PerPersonal"
},
You can also choose whether to include or exclude internal and external user data from these queries. You can do
this by using the filter described in Filtering out external user data [page 535].
Related Information
12.9 PerPersonRelationship
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation GET
URI http://<Hostname>/odata/v2/
PerPersonRelationship?$top=1&$format=JSON
Response
"d":
{
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExternal='gcharles1',relatedPersonIdExternal='197_d
637',startDate=datetime'2013-02-20T00:00:00')",
"type": "SFOData.PerPersonRelationship"
},
"startDate": "/Date(1361318400000)/",
"relatedPersonIdExternal": "197_d637",
"personIdExternal": "gcharles1",
"lastName": "Zamora-Smith",
"customString2": null,
"isBeneficiary": null,
"endDate": "/Date(253402300799000)/",
"lastModifiedDateTime": "/Date(1361363017000+0000)/",
"lastModifiedOn": "/Date(1361345017000)/",
"createdOn": "/Date(1361345017000)/",
"relationshipType": "6117",
"createdBy": "admin",
"createdDateTime": "/Date(1361363017000+0000)/",
"lastModifiedBy": "admin",
"customString1": null,
"firstName": "Debby",
"isAccompanyingDependent": null,
"relNationalIdNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExternal='gcharles1',relatedPersonIdExternal='197_d
637',startDate=datetime'2013-02-20T00:00:00')/relNationalIdNav"
}
},
"personNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExternal='gcharles1',relatedPersonIdExternal='197_d
637',startDate=datetime'2013-02-20T00:00:00')/personNav"
}
},
"relationshipTypeNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExternal='gcharles1',relatedPersonIdExternal='197_d
637',startDate=datetime'2013-02-20T00:00:00')/relationshipTypeNav"
}
},
"relPersonNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExternal='gcharles1',relatedPersonIdExternal='197_d
637',startDate=datetime'2013-02-20T00:00:00')/relPersonNav"
}
},
"relPersonalNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExternal='gcharles1',relatedPersonIdExternal='197_d
637',startDate=datetime'2013-02-20T00:00:00')/relPersonalNav"
}
}
}
]
}
Request Information
Operation Upsert
URI http://<Hostname>/odata/v2/upsert
Content-Type: application/json
Payload
Sample Code
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PerPersonRelationship(personIdExterna
l='hmueller1',relatedPersonIdExternal
='1397_d1417',startDate=datetime'2014
-01-01T00:00:00')",
"type":
"SFOData.PerPersonRelationship"
},
"customString2": "test"
}
Response
Sample Code
When you make a last modified query, take a look at how this entity behaves with $filter and lastModifiedOn:
relNationalIdNav PerNationalId
Related Information
12.10 PerPhone
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PerPhone(personIdExternal='cgrant1',phoneType='5847')",
"type": "SFOData.PerPhone"
},
"phoneNumber": "565-3345",
"personNav": {
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
PerPerson('cgrant1')",
"type": "SFOData.PerPerson"
},
"personalInfoNav": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
PerPersonal(personIdExternal='cgrant1',startDate=datetime'2014-10-30T00:00:00')",
"type": "SFOData.PerPersonal"
},
"lastName": "Grant-Miller3",
"firstName": "Carla"
}
]
}
}
}
]
}
}
Related Information
12.11 PerSocialAccount
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
https://<hostname>.com/odata/v2/ Get all social accounts which do not equal the domain 1764
PerSocialAccount?$filter=domain ne '1764' and 1765
and domain ne '1765'&
$select=domain,personIdExternal,imId&
$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/
PerSocialAccount(domain='1762',personIdExternal='cgrant1')",
"type": "SFOData.PerSocialAccount"
},
Related Information
12.12 PersonKey
You can use this entity to expose the person UUID for integration and import scenarios.
Operations Allowed
You query PersonKey via $expand from the User entity. You cannot query PersonKey directly.
Properties
You can get detailed information about the entity properties from the OData API dictionary or by exposing the
entity metadata. To do this, use the following query https://<hostname>/odata/v2/Entity('<Your
Entity')?$format=json.
In integration and import scenarios, you can use PersonKey to retrieve the person UUID represented by the field
perPersonUuid. This field is automatically populated by the system when a user is created. The value is immutable
meaning that you cannot change it.
Request Information
Response
Sample Code
Response:
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/User('admin')",
"type": "SFOData.User"
},
....
},
"personKeyNav": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/PersonKey('admin')",
"type": "SFOData.PersonKey"
},
"personIdExternal": "admin",
"personId": "2",
"perPersonUuid": "3A085DB0D9184B49B0E3E70D6F07EB1A"
}
Additional Information
User
Related Information
PersonType is an entity that indicates the type of person. Examples are like ONBOARDEE for Onboardee users,
STUDENT for LMS users, DEPENDENT, and so on.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
PersonType is an MDF object. Please get permissions for MDF before you use this entity.
Supported Operations
Operation Description
Use Cases
Sample request:
Operation GET
URI https://<hostname>/odata/v2/PersonType
Sample response:
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/PersonType('Onboardee')",
"type": "SFOData.PersonType"
},
"externalCode": "Onboardee",
"personTypeName_ru_RU": null,
12.14 PersonTypeUsage
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
PersonTypeUsage is an MDF object. Please get permissions for MDF before you use this entity.
Supported Operations
Operation Description
Navigation Properties
Navigation Description
Note
The PersonTypeUsage entity is used by the PerPerson entity to query person records, and can be filtered by
person type. You can use the personTypeUsageNav property to navigate from PerPerson to PersonTypeUsage.
Operation GET
URI https://<hostname>/odata/v2/
PersonTypeUsage
Sample response:
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/PersonTypeUsage(5961L)",
"type": "SFOData.PersonTypeUsage"
},
"externalCode": "5961",
"startDate": "/Date(-2208988800000)/",
"person": "ONB001",
"endDate": "/Date(253402214400000)/",
"lastModifiedDateTime": "/Date(1512400831000+0000)/",
"createdBy": "admin",
"createdDateTime": "/Date(1512400831000+0000)/",
"lastModifiedBy": "admin",
"mdfSystemStatus": "A",
"personType": "Onboardee",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PersonTypeUsage(5961L)/mdfSystemRecordStatusNav"
}
},
"personTypeNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PersonTypeUsage(5961L)/personTypeNav"
}
},
"mdfSystemStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PersonTypeUsage(5961L)/mdfSystemStatusNav"
}
}
}
]
}
}
Operation GET
URI http://<hostname>/odata/v2/PerPerson?
$format=json&$filter=personTypeUsageNav/
personTypeNav/personType eq 'ONBORDEE'
Sample response:
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/PerPerson('SUPTtest')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "SUPTtest",
"dateOfBirth": null,
"perPersonUuid": "04FE29A7092D4142A3C3D99717E4D1ED",
"lastModifiedOn": "/Date(1524725000000)/",
"customString11": null,
"lastModifiedDateTime": "/Date(1524725000000+0000)/",
"createdOn": "/Date(1524725000000)/",
"createdBy": "admin",
"createdDateTime": "/Date(1524725000000+0000)/",
"lastModifiedBy": "admin",
"personId": "2767",
"customString1": null,
"personRerlationshipNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPerson('SUPTtest')/personRerlationshipNav"
}
},
"emergencyContactNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPerson('SUPTtest')/emergencyContactNav"
}
},
"phoneNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPerson('SUPTtest')/phoneNav"
}
},
"personalInfoNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPerson('SUPTtest')/personalInfoNav"
}
},
"homeAddressNavDEFLT": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
PerPerson('SUPTtest')/homeAddressNavDEFLT"
13.1 PositionRightToReturn
PositionRightToReturn indicates whether an employee is allowed to return to their original position after a Leave of
Absence or Global Assignment.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Permissions
Definition Load .
Code Examples
Sample Request
Operation Query
Sample Response
Sample Code
In this section, you'll find the APIs available for Time Off. You can use Time Off to manage absences such as
vacation, sick leave, and paid time off.
Before using any of the Time Off entities described here, you need to switch on Time Off in the Admin Center. For
details of how to do this, take a look at the Switching On Time Off documentation in the Implementing Employee
Central Time Off guide.
In addition, you need to have permission to use the individual objects in question. For information on these
permissions, take a look at the Permissions in Time Off documentation in the Implementing Employee Central Time
Off guide.
14.1.1 AbsenceCountingMethod
You can enter an absence counting method in a time type, to determine which days are included in calculating an
absence taken of that particular time type. You can also determine the basis on which the calculation takes place
and the weekdays to which the calculation base should apply.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
URI: http://<hostname>/odata/v2/AbsenceCountingMethod('ACM_EXAMPLE')$format=JSON
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/AbsenceCountingMethod('ACM_EXAMPLE')",
"type": "SFOData.AbsenceCountingMethod"
},
"externalCode": "ACM_EXAMPLE",
"externalName_ko_KR": null,
"mdfSystemObjectType": "AbsenceCountingMethod",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"monday": true,
"externalName_de_DE": null,
"externalName_localized": "ACM_EXAMPLE",
"externalName_defaultValue": "ACM_EXAMPLE",
"externalName_es_MX": null,
"lastModifiedDateTime": "/Date(1464005812000+0000)/",
14.1.2 AccrualCalculationBase
The entity is used to store reported times (per user and date). The records need to be provided to this storage from
a data source outside Time Off, such as by import or integration using OData. The entity represents the raw data.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
Accept: application/json
Content-Type: application/json;charset=utf-8
Payload
{
"__metadata" : {
"uri" : "http://localhost:8080/odata/v2/
AccrualCalculationBase(externalCode='country_2015-12-28')",
"type" : "SFOData.AccrualCalculationBase"
},
"externalCode" : "country_2015-12-28",
"userId" : "country",
"actualQuantity" : 6,
"date" : "\/Date(1451260800000)\/"
}
Response:
{
"d" : [
{
"key" : null,
"status" : "OK",
"editStatus" : "UPSERTED",
"message" : null,
"index" : 0,
"httpCode" : 200,
"inlineResults" : null
}
]
}
URI: http://<hostname>/odata/v2/AccrualCalculationBase?$format=json
Operation: GET
Response:
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://localhost:443/odata/v2/
AccrualCalculationBase('country_2015-12-28')", "type" :
"SFOData.AccrualCalculationBase"
},
"externalCode" : "country_2015-12-28",
"mdfSystemEffectiveEndDate" : "\/Date(253402214400000)\/", "mdfSystemObjectType" :
"AccrualCalculationBase",
"mdfSystemVersionId" : null,
"lastModifiedDateTime" : "\/Date(1451465919000+0000)\/",
"date" : "\/Date(1451260800000)\/",
"mdfSystemTransactionSequence" : "1",
"mdfSystemRecordId" : "02114EA3DE97476A910F425807E9C03E",
"mdfSystemEntityId" : "A38105E8A5354C81A7AF20895B66924F",
"userId" : "country",
14.1.3 AvailableTimeType
Contains information about the available time type, which is one of the time types that an employee is allowed to
take.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Case
"d": {
"results": [
{
"__metadata": {
"uri": "https://<host.sap.com>/odata/v2/
AvailableTimeType(TimeTypeProfile_externalCode='TP_normal',externalCode='13')",
"type": "SFOData.AvailableTimeType"
},
"TimeTypeProfile_externalCode": "TP_normal",
"externalCode": "13",
"mdfSystemObjectType": "AvailableTimeType",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"favoriteTimeType": false,
"lastModifiedDateTime": "/Date(1457380136000+0000)/",
"hideAccountBalance": null,
"timeType": "TRAVEL",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "0E9AC4A2D7574B5B91D6AA865E529E76",
"createdBy": "sfadmin",
"mdfSystemEntityId": "5F277D467E2D42628AA4082BCA12A785",
"createdDateTime": "/Date(1440598493000+0000)/",
"enabledInEssScenario": true,
"lastModifiedBy": "sfadmin",
"mdfSystemStatus": "A",
"lastModifiedDate": "/Date(1457362136000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDateWithTZ": "/Date(1457380136000+0000)/",
"createdDate": "/Date(1440584093000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<host.sap.com>/odata/v2/
AvailableTimeType(TimeTypeProfile_externalCode='TP_normal',externalCode='13')/
mdfSystemRecordStatusNav"
}
},
"mdfSystemStatusNav": {
"__deferred": {
"uri": "https://<host.sap.com>/odata/v2/
AvailableTimeType(TimeTypeProfile_externalCode='TP_normal',externalCode='13')/
mdfSystemStatusNav"
}
},
"timeTypeNav": {
"__deferred": {
"uri": "https://<host.sap.com>/odata/v2/
AvailableTimeType(TimeTypeProfile_externalCode='TP_normal',externalCode='13')/
timeTypeNav"
}
}
}
]
}
}
This entity contains information related to attendance times of hourly and salaried employees.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
https://<hostname>/odata/v2/EmployeeTime?& Get employee time for the user defined in the call.
$format=json&$filter=userId%20eq
%20'sampleemployee'
Code Examples
{
d: {
results: [104]
0: {
__metadata: {
uri: "https://<hostname>/odata/v2/EmployeeTime('50f007dd864e448691e8f2cf0ae5f0fe')"
type: "SFOData.EmployeeTime"
}-
externalCode: "50f007dd864e448691e8f2cf0ae5f0fe"
quantityInDays: null
mdfSystemObjectType: "EmployeeTime"
cancellationWorkflowRequestId: null
endDate: "/Date(1420416000000)/"
lastModifiedDateTime: "/Date(1429101050000+0000)/"
endTime: null
timeType: "HGB_WORK"
startTime: null
cust_Division: null
mdfSystemRecordId: "93B1732C8E5545219D995A5E0C068E64"
mdfSystemEntityId: "7A3FCE07910B4CDEB28584A3F373526E"
userId: "raji1505emp"
fractionQuantity: null
approvalStatus: "APPROVED"
mdfSystemStatus: "A"
cust_company: null
createdDate: "/Date(1429101050000)/"
mdfSystemRecordStatus: "N"
cust_Department: null
editable: null
createdBy: "raji1505emp"
lastModifiedBy: "raji1505emp"
createdDateTime: "/Date(1429101050000+0000)/"
loaExpectedReturnDate: null
mdfSystemEffectiveStartDate: "/Date(-2208988800000)/"
comment: null
loaStartJobInfoId: null
14.1.5 EmployeeTime<Country>
Country-specific entities for EmployeeTime are available. Take a look at the sub-sections to see which countries are
supported with country-specific fields. These entities are child entities of EmployeeTime.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Colombia: EmployeeTimeCOL
Admin can use this object to store Colombia-specific details of an EmployeeTime created for sick leave. It is used
only Colombia is the country in the time type and contains only the GO reference to the EmployeeTimeGroup used
for linking of absences. This MDF is effective dated from parent
Germany: EmployeeTimeDEU
This entity contains information about employee time created for sick leave. It is specific to Germany and is a child
of the entity EmployeeTime.
This entity contains information about employee time created for sick leave. It is specific to Spain and is a child of
the entity EmployeeTime.
Mexico: EmployeeTimeMEX
This entity contains information about employee time created for sick leave. It is specific to Mexico and contains
the field Reference Number which is only required for maintaining employee time in Mexico. Apart from this
country-specific field, this object also holds the GO reference to the group Identical Sicknesses which is used for
the linking of absences.
Sample Query for creating EmployeeTimeMex http://<Hostname>/odata/v2/EmployeeTime(‘<external-
code of Employee Time>’)/countryExtensionMEX
14.1.5.1 EmployeeTimeCOL
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
URI: http://<hostname>/odata/v2/EmployeeTimeDEU?$format=json
Method: GET
Response:
Sample Code
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
URI: http://<hostname>/odata/v2/EmployeeTimeDEU?$format=json
Method: GET
Response:
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeDEU(EmployeeTime_externalCode='592af6d3d06f410db56ab71aaecea896',exte
rnalCode=13714L)",
"type": "SFOData.EmployeeTimeDEU"
},
"externalCode": "13714",
"EmployeeTime_externalCode": "592af6d3d06f410db56ab71aaecea896",
"continuedPayEndDate": null,
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "EmployeeTimeDEU",
"mdfSystemVersionId": null,
"identicalSicknessGroup": "2022ffa1320141fd93c070b9be459865",
"sicknessCertificateStartDate": null,
"lastModifiedDateTime": "/Date(1492598128000+0000)/",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "8F47FCE6A1DE4DE18287FACFEABD0E40",
"mdfSystemEntityId": "3C92D5967437427DB416737306F7239A",
"overlappingSicknessGroup": null,
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1492598128000+0000)/",
"createdDate": "/Date(1492598092000)/",
"mdfSystemRecordStatus": "N",
"paySupplementStartDate": null,
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1492598092000+0000)/",
"lastModifiedDate": "/Date(1492598128000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"continuedPayCreditedDays": null,
"paySupplementEndDate": null,
"overlappingSicknessGroupNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeDEU(EmployeeTime_externalCode='592af6d3d06f410db56ab71aaecea896',exte
rnalCode=13714L)/overlappingSicknessGroupNav"
14.1.5.3 EmployeeTimeESP
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
Example: Retrieve data of the EmployeeTimeESP objects in JSON. (In this case there are no such objects)
URI: http://<hostname>/odata/v2/EmployeeTimeESP?$format=json
Method: GET
Response:
Sample Code
{
"d": {
"results": []
}
}
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
Example: Retrieve data of the EmployeeTimeMEX objects in JSON. (In this case there are no such objects)
URI: http://<hostname>/odata/v2/EmployeeTimeMEX?$format=json
Method: GET
Response
Sample Code
{
"d": {
"results": []
}
}
14.1.6 EmployeeTimeCalendar
Contains absence information on a daily basis. There is one entry for every working day with the relevant number of
days and number of hours. For example, if there is a half day absence on an eight-hour working day, the resulting
calendar entry has 0.5 days and 4 hours
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
OData Examples
Example – Retrieve data of the employee time calendar which belongs to the employee time with specific external
code
URI http://<hostname>/odata/v2/
EmployeeTimeCalendar(EmployeeTime_externalCode=57d8c995114f421eb97ebcce2a9c3324',externalCode='57d
8c995114f421eb97ebcce2a9c3324'')?$format=json
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeCalendar(EmployeeTime_externalCode='9d59e47c10434d91afeb3fd664c01093'
,externalCode='57d8c995114f421eb97ebcce2a9c3324')",
"type": "SFOData.EmployeeTimeCalendar"
},
"externalCode": "57d8c995114f421eb97ebcce2a9c3324",
"EmployeeTime_externalCode": "9d59e47c10434d91afeb3fd664c01093",
"quantityInDays": "1",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "EmployeeTimeCalendar",
"workScheduleInternalId": "50257",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "/Date(1486480298000+0000)/",
"endTime": null,
"date": "/Date(1486425600000)/",
"mdfSystemTransactionSequence": "1",
"startTime": null,
"mdfSystemRecordId": "C663DFE9A67E43289A3183B51B614CF0",
"mdfSystemEntityId": "C1ADC4497A9E44C9878F1FEC00753817",
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1486480298000+0000)/",
"createdDate": "/Date(1486462298000)/",
"quantityInHours": "8",
"mdfSystemRecordStatus": "N",
"deductionQuantity": "1",
"createdBy": "sfadmin",
"lastModifiedBy": "sfadmin",
"createdDateTime": "/Date(1486480298000+0000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDate": "/Date(1486462298000)/",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeCalendar(EmployeeTime_externalCode='9d59e47c10434d91afeb3fd664c01093'
,externalCode='57d8c995114f421eb97ebcce2a9c3324')/mdfSystemRecordStatusNav"
}
},
"mdfSystemStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeCalendar(EmployeeTime_externalCode='9d59e47c10434d91afeb3fd664c01093'
,externalCode='57d8c995114f421eb97ebcce2a9c3324')/mdfSystemStatusNav"
}
}
}
}
The entity is used to group EmployeeTime objects for special use cases. Currently it is used for recurring absences
and linking of absences.
Operations Allowed
Operation Description
Properties
This table shows the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Navigation Properties
URI: http://<hostname>/odata/v2/EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')?
$expand=items&$format=JSON
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')",
"type": "SFOData.EmployeeTimeGroup"
},
"externalCode": "76931234932b4666820c4be07a0a7c2a",
"mdfSystemObjectType": "EmployeeTimeGroup",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "/Date(1461325378000+0000)/",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "7EC32545B28C4888AF677383389ED2AF",
"createdBy": "admin",
"mdfSystemEntityId": "42D3F5A0CF3F47BA8ED3D9B42A029444",
"userId": "mhoff",
"createdDateTime": "/Date(1461325377000+0000)/",
"lastModifiedBy": "admin",
"mdfSystemStatus": "A",
"lastModifiedDate": "/Date(1461332578000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"itemsCategory": "LINKED_ABSENCES",
"lastModifiedDateWithTZ": "/Date(1461325378000+0000)/",
"createdDate": "/Date(1461332577000)/",
"mdfSystemRecordStatus": "N",
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')/mdfSystemRecordStatusNav"
}
},
"itemsCategoryNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')/itemsCategoryNav"
}
},
"userIdNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')/userIdNav"
}
},
"items": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroupItem(EmployeeTimeGroup_externalCode='76931234932b4666820c4be07a0
a7c2a',mdfSystemExternalCode='462e517c09dc49248f6d25b704ede3ac')",
"type": "SFOData.EmployeeTimeGroupItem"
},
"EmployeeTimeGroup_externalCode": "76931234932b4666820c4be07a0a7c2a",
"mdfSystemExternalCode": "462e517c09dc49248f6d25b704ede3ac",
"mdfSystemObjectType": "EmployeeTimeGroupItem",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"employeeTime": "ad2946e1c07d4f97a61535c0b7f796aa",
14.1.8 EmployeeTimeGroupItem
Properties
This table shows the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Code Examples
URI: http://<hostname>/odata/v2/EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')?
$select=items&$expand=items,items/employeeTimeNav&$format=JSON
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroup('76931234932b4666820c4be07a0a7c2a')",
"type": "SFOData.EmployeeTimeGroup"
},
"items": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTimeGroupItem(EmployeeTimeGroup_externalCode='76931234932b4666820c4be07a0
a7c2a',mdfSystemExternalCode='462e517c09dc49248f6d25b704ede3ac')",
"type": "SFOData.EmployeeTimeGroupItem"
},
"EmployeeTimeGroup_externalCode": "76931234932b4666820c4be07a0a7c2a",
"mdfSystemExternalCode": "462e517c09dc49248f6d25b704ede3ac",
"mdfSystemObjectType": "EmployeeTimeGroupItem",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"employeeTime": "ad2946e1c07d4f97a61535c0b7f796aa",
"lastModifiedDateTime": "/Date(1461325378000+0000)/",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "AD58F8FFFCD741F7974C3ADDF0C96DE6",
"createdBy": "admin",
"mdfSystemEntityId": "197DDFB6AF8E4D61AFBE5FF516C0F8DD",
"createdDateTime": "/Date(1461325378000+0000)/",
"lastModifiedBy": "admin",
"mdfSystemStatus": "A",
"lastModifiedDate": "/Date(1461332578000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDateWithTZ": "/Date(1461325378000+0000)/",
"comment": null,
"createdDate": "/Date(1461332578000)/",
"mdfSystemRecordStatus": "N",
"employeeTimeNav": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
EmployeeTime('ad2946e1c07d4f97a61535c0b7f796aa')",
"type": "SFOData.EmployeeTime"
},
"externalCode": "ad2946e1c07d4f97a61535c0b7f796aa",
"quantityInDays": "1",
"mdfSystemObjectType": "EmployeeTime",
"cancellationWorkflowRequestId": null,
"endDate": "/Date(1461024000000)/",
"lastModifiedDateTime": "/Date(1461325378000+0000)/",
"endTime": null,
"timeType": "SICK_LEAVE_ESP",
You use the Holiday object to create holidays for inclusion in a holiday calendar.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
URI http://<Hostname>/odata/v2/Holiday?
$format=json&$filter=holidayCode%20eq
%20'FR-Victory Day
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/Holiday('FR-Victory
Day')",
"type": "SFOData.Holiday"
},
"holidayCode": "FR-Victory Day",
"name_ko_KR": "유럽 전승 기념일",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "Holiday",
"mdfSystemVersionId": null,
"name_ru_RU": "День Победы в Европе (Франция)",
"lastModifiedDateTime": "/Date(1461163954000+0000)/",
"name_ja_JP": "ヨーロッパ戦勝記念日",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "E49E3AB6C7D14896A6C1FFD4E839A315",
"mdfSystemEntityId": "139D108B9314467783E6AB93FE05FC98",
"name_localized": "Victory in Europe Day",
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1461163954000+0000)/",
"name_es_ES": "Día de la Victoria en Europa",
"createdDate": "/Date(1443711833000)/",
"name_defaultValue": "Victory in Europe Day",
"name_fr_FR": "Jour de la Victoire en Europe",
"mdfSystemRecordStatus": "N",
"name_en_US": "Victory in Europe Day",
"name_pt_BR": "Dia da Vitória da Forças Aliadas na Europa",
"oldName": null,
"name_zh_CN": "欧洲胜利日(法国)",
"country": "FRA",
"createdBy": "sfadmin",
"name_de_DE": "Tag des Sieges",
14.1.10 HolidayCalendar
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
http://<hostname>/odata/v2/HolidayCalendar?$for Get a holiday calendar for country defined in the call (USA) and
mat=json&$filter=country%20eq%20'USA' in JSON format.
http://<hostname>/odata/v2/HolidayCalendar?$format=json&$filter=country%20eq%20'USA'
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/HolidayCalendar('USA')",
"type": "SFOData.HolidayCalendar"
},
"externalCode": "USA",
"name_ko_KR": null,
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemObjectType": "HolidayCalendar",
"mdfSystemVersionId": null,
"name_ru_RU": null,
"lastModifiedDateTime": "/Date(1461164062000+0000)/",
"name_ja_JP": null,
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "935BC7ACBB31419D95265B6AC2699860",
"mdfSystemEntityId": "10AE9CC099AB718BE0530B28080AD5E1",
"name_localized": "USA",
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1461164062000+0000)/",
"name_es_ES": null,
"createdDate": "/Date(1443711857000)/",
"name_defaultValue": "USA",
"name_fr_FR": null,
"mdfSystemRecordStatus": "N",
"name_en_US": "USA",
"name_pt_BR": null,
"oldName": null,
"name_zh_CN": null,
"country": "USA",
"createdBy": "sfadmin",
"name_de_DE": null,
"lastModifiedBy": "sfadmin",
"createdDateTime": "/Date(1443726257000+0000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDate": "/Date(1461149662000)/",
"name_en_GB": null,
"holidayAssignments": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
HolidayCalendar('USA')/holidayAssignments"
}
},
"countryNav": {
14.1.11 ShiftClassification
This object defines the shift classification for either a whole work schedule or a day model. It only holds
information.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Properties
This table shows the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Code Examples
URI: http://<hostname>/odata/v2/restricted/ShiftClassification('LATE_SHIFT')?$format=JSON
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/restricted/
ShiftClassification('LATE_SHIFT')",
"type": "SFOData.ShiftClassification"
},
"externalCode": "LATE_SHIFT",
"externalName_ko_KR": null,
"mdfSystemObjectType": "ShiftClassification",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"externalName_de_DE": "Spätschicht",
"externalName_localized": "Late Shift",
"externalName_defaultValue": "Late Shift",
"externalName_es_MX": null,
"lastModifiedDateTime": "/Date(1464014355000+0000)/",
"externalName_da_DK": null,
"mdfSystemTransactionSequence": "1",
"externalName_fi_FI": null,
"mdfSystemRecordId": "660CD9D767214291B4EF30BF7AC20174",
"mdfSystemEntityId": "35E1CD6E033C4A588BE8AAD064F8F4AE",
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1464014355000+0000)/",
"externalName_zh_TW": null,
"externalName_en_US": "Late Shift",
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1464021555000)/",
"externalName_ja_JP": null,
"mdfSystemRecordStatus": "N",
"externalName_pl_PL": null,
"country": "DEU",
"createdBy": "admin",
"externalName_it_IT": null,
"externalName_en_RTL": null,
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1464014355000+0000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDate": "/Date(1464021555000)/",
"externalName_en_GB": null,
"externalName_es_ES": null,
"externalName_nl_NL": null,
"externalName_zh_CN": null,
14.1.12 TemporaryTimeInformation
This entity defines deviating time information for a specific period for a specific user. It is used, for example, if an
employee is on vacation and someone else needs to take over his or her work schedule for the vacation period.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Properties
This table shows the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Code Examples
URI: http://<hostname>/odata/v2/restricted/
TemporaryTimeInformation('d9ad6aea798143d599c63e9f4f251048')?$format=JSON{
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/restricted/
TemporaryTimeInformation('d9ad6aea798143d599c63e9f4f251048')",
"type": "SFOData.TemporaryTimeInformation"
},
"externalCode": "d9ad6aea798143d599c63e9f4f251048",
"startDate": "/Date(1450569600000)/",
"mdfSystemObjectType": "TemporaryTimeInformation",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"workSchedule": "i90306d711",
"endDate": "/Date(1451088000000)/",
"effectiveStatus": "A",
"lastModifiedDateTime": "/Date(1450424588000+0000)/",
"mdfSystemTransactionSequence": "1",
"mdfSystemRecordId": "7E23FCD86F7B49568C902989041B1C94",
"createdBy": "admin",
"mdfSystemEntityId": "552984EB4B424F7481EA66DF3F9C2A7A",
"userId": "mhoff",
"createdDateTime": "/Date(1450424588000+0000)/",
"lastModifiedBy": "admin",
"lastModifiedDate": "/Date(1450428188000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDateWithTZ": "/Date(1450424588000+0000)/",
"comment": null,
"createdDate": "/Date(1450428188000)/",
"mdfSystemRecordStatus": "N",
"userIdNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/restricted/
TemporaryTimeInformation('d9ad6aea798143d599c63e9f4f251048')/userIdNav"
}
},
"workScheduleNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/restricted/
TemporaryTimeInformation('d9ad6aea798143d599c63e9f4f251048')/workScheduleNav"
}
}
}
}
When an employee has a time profile assigned with time types that refer to time account types, time accounts need
to be created. This is done automatically when you assign a time profile to an employee’s job information and also
during the account creation calendar run.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Major Navigations
● timeAccountDetails – Navigation to account bookings resulting from different scenarios like leave request
creation, calendar runs, or manual adjustments
Remember
To query TimeAccountDetails and use filtering you need to query the TimeAccountDetail, not the TimeAccount
object with expand to timeAccountDetails.
Code Examples
Example 1: Retrieve data of the time accounts for user Carla Grant of time account type sickness with all
included bookings in JSON.
URI: http://<hostname>/odata/v2/TimeAccount?$filter=userId%20eq%20'cgrant1'%20and%20accountType
%20eq%20'SICKNESS_CURRENT'&$expand=timeAccountDetails&$format=json
Method: GET
Response:
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
TimeAccount('cgrant_sick_current')",
"type": "SFOData.TimeAccount"
},
"externalCode": "cgrant_sick_current",
"startDate": "/Date(978307200000)/",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
Example 2: Create a new time account for user Carla Grant of time account type Standard_ACM for the year
2018.
URI: http://<hostname>/odata/v2/TimeAccount?$format=json
Method: POST
Body:
Sample Code
{
"externalCode": "TA_odata",
"startDate": "/Date(1514764800000)/",
"endDate": "/Date(1546214400000)/",
"userId": "cgrant1",
"bookingEndDate": "/Date(1546214400000)/",
"bookingStartDate": "/Date(1514764800000)/",
"accountTypeNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
TimeAccountType('Standard_ACM')"
}
}
}
Response:
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/TimeAccount('TA_odata')",
"type": "SFOData.TimeAccount"
},
"startDate": "/Date(1514764800000)/",
Example 3: Close the time account for user Carla Grant of time account type Standard_ACM for the year
2018.
URI: http://<hostname>/odata/v2/TimeAccount('TA_odata')?$format=json
Method: PUT
Body:
Sample Code
{
"externalCode": "TA_odata",
"startDate": "/Date(1514764800000)/",
"endDate": "/Date(1546214400000)/",
"userId": "cgrant1",
"bookingEndDate": "/Date(1546214400000)/",
"bookingStartDate": "/Date(1514764800000)/",
"accountClosed": true,
"accountTypeNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/
TimeAccountType('Standard_ACM')"
}
}
}
Example 4: Update or insert a time account for user Carla Grant of time account type Standard_ACM for
the year 2018.
URI: http://<hostname>/odata/v2/upsert?$format=JSON
Method: POST
Body:
Sample Code
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
TimeAccount('TA_odata')",
"type": "SFOData.TimeAccount"
},
"externalCode": "TA_odata",
"startDate": "/Date(1514764800000)/",
"endDate": "/Date(1546214400000)/",
"userId": "cgrant1",
Response:
Sample Code
{
"d": [
{
"key": null,
"status": "OK",
"editStatus": "UPSERTED",
"message": null,
"index": 0,
"httpCode": 200,
"inlineResults": null
}
]
}
URI: http://<hostname>/odata/v2/TimeAccount('TA_odata')?$format=JSON
Method: DELETE
14.1.14 TimeAccountDetail
The entity describes account bookings resulting from different scenarios such as leave request creation or manual
adjustments.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Tip
We recommend that you only use the OData API to create Time Account Details that use the Manual
Adjustment booking type to adjust the time account accruals which have been calculated by Employee Central
Time Off. The OData API is not intended to create Time Account Details with the Accrual or Entitlement posting
types. These are calculated outside of the system, and Employee Central Time Off is not designed to support
this use case.
Remember
To query TimeAccountDetails and use filtering you need to query the TimeAccountDetail, not the TimeAccount
object with expand to timeAccountDetails.
URI: http://<hostname>/odata/v2/upsert
Operation: POST
Content-Type: application/json;charset=utf-8
Payload:
{
"__metadata" : {
"uri" : "http://hostname/odata/v2/
TimeAccountDetail(TimeAccount_externalCode='1dfca28bf0c84c8b846719feffba225d',
externalCode='MyTimeAccountDetail')",
"type" : "SFOData.TimeAccountDetail"
}, "TimeAccount_externalCode" : "1dfca28bf0c84c8b846719feffba225d",
"externalCode" : "MyTimeAccountDetail",
"bookingUnit" : "DAYS",
"referenceObject" : null,
"bookingType" : "MANUAL_ADJUSTMENT",
"bookingDate" : "\/Date(1420070400000)\/",
"employeeTime" : null,
"bookingAmount" : "2.0",
"comment" : null
}
Response:
{
"d" : [
{
"key" : null,
"status" : "OK",
"editStatus" : "UPSERTED",
"message" : null,
"index" : 0,
"httpCode" : 200,
"inlineResults" : null
}
]
}
URI: http://hostname/odata/v2/
TimeAccountDetail(TimeAccount_externalCode='1dfca28bf0c84c8b846719feffba225d',externalCode='62d7d936
18244c28922fdc4b94001e53')?$format=json
Operation: GET
Response:
{
"d" : {
"__metadata" : {
"uri" : "https://hostname/odata/v2/
TimeAccountDetail(TimeAccount_externalCode='1dfca28bf0c84c8b846719feffba225d',extern
alCode='62d7d93618244c28922fdc4b94001e53')", "type" : "SFOData.TimeAccountDetail"
},
"TimeAccount_externalCode" : "1dfca28bf0c84c8b846719feffba225d",
Time account posting rule associates a time type with a time account type to determine whether time accounts
should be managed for the time type. For example, you can use it to enable automatic checks against a balance
when time off is requested.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Example
Example – Retrieve data of the time account posting rule which belongs to the time type ’Vacation’
URI: http://<hostname>/odata/v2/
TimeAccountPostingRule(TimeType_externalCode='Vacation',externalCode='Annually_VAC')?$format=json
Response:
{
"d" : {
"__metadata" : {
"uri" : "https://localhost:443/odata/v2/
TimeAccountPostingRule(TimeType_externalCode='Vacation',externalCode='Annually_VAC')
", "type" : "SFOData.TimeAccountPostingRule"
},
"TimeType_externalCode" : "Vacation",
"externalCode" : "Annually_VAC",
"mdfSystemEffectiveEndDate" : "\/Date(253402214400000)\/",
"mdfSystemObjectType" : "TimeAccountPostingRule",
"mdfSystemVersionId" : null,
"lastModifiedDateTime" : "\/Date(1422284110000+0000)\/",
"timeAccountType" : "ANNUALLY", "mdfSystemTransactionSequence" : "1", "createdBy" :
"loa",
"mdfSystemRecordId" : "877FE3EF357D4A4B825EF1C8EB0A675A",
"mdfSystemEntityId" : "3009BBBA98A14011A5DA5FC863C43B4F",
"createdDateTime" : "\/Date(1420710506000+0000)\/",
"lastModifiedBy" : "daily",
"mdfSystemStatus" : "A",
"lastModifiedDate" : "\/Date(1422287710000)\/", "mdfSystemEffectiveStartDate" : "\/
Date(-2208988800000)\/",
"lastModifiedDateWithTZ" : "\/Date(1422284110000+0000)\/",
"createdDate" : "\/Date(1420714106000)\/",
"mdfSystemRecordStatus" : "N",
"timeAccountTypeNav" : {
"__deferred" : {
"uri" : "https://localhost:443/odata/v2/
TimeAccountPostingRule(TimeType_externalCode='Vacation',externalCode='Annually_VAC')
/timeAccountTypeNav"
}
},
"mdfSystemRecordStatusNav" : {
"__deferred" : {
"uri" : "https://localhost:443/odata/v2/
TimeAccountPostingRule(TimeType_externalCode='Vacation',externalCode='Annually_VAC')
/mdfSystemRecordStatusNav"
}
14.1.16 TimeAccountSnapshot
This MDF entity contains balance information for a specific time account for a user. It is created while running a
snapshot job for leave liability-related calculation for the user.
Permissions
Supported Operations
Operation Description
Navigation Properties
wfRequestNav wfRequest
unitNav MDFEnumValue
userIdnav UserId
accountTypeNav TimeAccountType
Request
Operation Query
URI https://<hostname>/odata/v2/
TimeAccountSnapshot?$format=JSON&
$filter=userId eq '585'
Response
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/restricted/
TimeAccountSnapshot('585_370265_20170221')",
"type": "SFOData.TimeAccountSnapshot"
},
"externalCode": "585_370265_20170221",
"balanceEffectiveDate": "\\/Date(1487635200000)\\/",
"approvedAbsenceBalance": null,
"approvedAbsenceBalanceAccrualSeparated": null,
"asOfPayPeriodEnd": false,
"balanceAccrualSeparated": null,
"unit": "DAYS",
"balance": "23",
"asOfAccountingPeriodEnd": true,
"outdated": false,
"userId": "585",
"accountType": "ENT#--35411_Recurring",
"wfRequestNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/restricted/
TimeAccountSnapshot('585_370265_20170221')/wfRequestNav"
}
},
"unitNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/restricted/
TimeAccountSnapshot('585_370265_20170221')/unitNav"
}
},
"userIdNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/restricted/
TimeAccountSnapshot('585_370265_20170221')/userIdNav"
}
},
"accountTypeNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/restricted/
TimeAccountSnapshot('585_370265_20170221')/accountTypeNav"
}
}
}
]
}
14.1.17 TimeAccountType
The entity is the template regulating what user-specific time accounts should look like.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
OData Examples
URI: http://<hostname>/odata/v2/TimeAccountType('Standard_ACM')$format=JSON
Method: GET
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/TimeAccountType('Standard_ACM')",
"type": "SFOData.TimeAccountType"
},
"externalCode": "Standard_ACM",
"pepCalendarAutomationLevel": "NONE",
"timeCollectorType": null,
"accountBookingOffsetInMonths": null,
"externalName_ru_RU": null,
"lastModifiedDateTime": "/Date(1435913291000+0000)/",
"levelOfSimulationPrecision": "CALCULATION",
"calculateSnapshotApprovedAbsenceBalance": null,
"accrualWaitingPeriodUnit": null,
"mdfSystemRecordId": "DB1BCEEA57DD4AACA21F000063594EC6",
"accrualPeriodStartDay": null,
"initialFlexibleAccountStartDateRule": null,
"payComponentTerminationAccrualSeparated": null,
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1435913291000)/",
"accrualFrequencyStartDate": null,
"payComponentGroup": null,
"accrualCalculationMethod": "STANDARD",
"accountCreationReferenceDate": "REFERENCE_DAY_MONTH",
"payComponentAccrualSeparated": null,
"accountCreationOffsetInMonths": "-10",
"createdBy": "admin",
"createdDateTime": "/Date(1435913291000+0000)/",
"lastModifiedBy": "admin",
"externalName_en_GB": null,
"advancesAllowed": null,
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"externalName_zh_CN": null,
"creation": "RECURRING",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"accrualRule": "Accrual_30",
14.1.18 TimeType
A time type is created for each type of leave. You can use this entity to read the time types created.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Major Navigations
Code Examples
Example: Get a specific time type including attached time account types
URI: http://<hostname>/odata/v2/TimeType('VACATION')?$expand=timeAccountPostingRules&$format=JSON
Method: GET
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/TimeType('VACATION')",
"type": "SFOData.TimeType"
},
"externalCode": "VACATION",
"mdfSystemObjectType": "TimeType",
"externalName_pt_BR": null,
"requestingOnNonWorkingDaysAllowed": null,
"collisionGrouping": null,
"externalName_ru_RU": null,
"lastModifiedDateTime": "/Date(1401013041000+0000)/",
"balanceCalculationSetting": "STANDARD",
"mdfSystemRecordId": "0D15EB009B066032E0537A54740A259C",
"mdfSystemEntityId": "0D15EB00F5876032E0537A54740A259C",
"activateCancellationWorkflow": null,
"mdfSystemStatus": "A",
"externalName_en_US": "Vacation",
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1351123200000)/",
"mdfSystemRecordStatus": "N",
14.1.19 TimeProfile
In a time profile, you specify which time types the employee is allowed to take. The time profile is part of an
employee's job information.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Major Navigations
Code Example
Example – Retrieve data of the time type profile with time recording variant clock times.
URI
http://<hostname>/odata/v2/TimeTypeProfile?$format=json&$filter=timeRecordingVariant%20eq
%20'CLOCK_TIME' Headers: Authorization: Basic <Base 64 encoded (“user@company:password”)>
{
"d" : {
"results" : [
{
"__metadata" : {
"uri" : "https://localhost:443/odata/v2/TimeTypeProfile('Vacation CLT')", "type" :
"SFOData.TimeTypeProfile"
},
"externalCode" : "Vacation CLT",
"mdfSystemObjectType" : "TimeTypeProfile",
"mdfSystemEffectiveEndDate" : "\/Date(253402214400000)\/", "mdfSystemVersionId" :
null,
"mainBreakTimeType" : "BREAK CLT",
"externalName_ru_RU" : null,
"externalName_defaultValue" : "Vacation CLT",
"lastModifiedDateTime" : "\/Date(1440400906000+0000)\/", "timeRecordingVariant" :
"CLOCK_TIME",
"mdfSystemTransactionSequence" : "1",
"mdfSystemRecordId" : "97613000C22F405FA9B3FB681ABACDD6", "mdfSystemEntityId" :
"EB2F5C3870EB43D0A455DF60B09665FF", "mainAttendanceTimeType" : null,
"mdfSystemStatus" : "A",
"externalName_en_US" : null,
"lastModifiedDateWithTZ" : "\/Date(1440400906000+0000)\/",
"createdDate" : "\/Date(1440408106000)\/",
"mdfSystemRecordStatus" : "N",
A work schedule defines the employee´s working pattern. It is assigned to an employee´s job information, showing
how many days per week the employee is going to work.
There are three models for setting up a work schedule. You specify which one you want to use in the Model field.
Your options are:
● Simple
● Period
● Schedule
Depending on the configuration, different fields are relevant for the work schedule.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Properties
This table shows the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Navigation Properties
Code Examples
Example 1: Retrieve example work schedule defined as SIMPLE model (expand workScheduleDays)
Method: GET
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('WS_SIMPLE_TEST')",
"type": "SFOData.WorkSchedule"
},
"externalCode": "WS_SIMPLE_TEST",
"mdfSystemObjectType": "WorkSchedule",
"lastModifiedDateTime": "/Date(1464090885000+0000)/",
"averageHoursPerDay": "8",
"timeRecordingVariant": "DURATION",
"startingDate": "/Date(978307200000)/",
"mdfSystemRecordId": "5C2CF4E58ABE44738046964DA9FEBE81",
"mdfSystemEntityId": "EF0EA6F4F5F54B57BF33303CB2032F74",
"userId": null,
"mdfSystemStatus": "A",
"externalName_en_US": "Simple Work Schedule Test",
"averageHoursPerMonth": "160",
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1464098085000)/",
"individualWorkSchedule": false,
"mdfSystemRecordStatus": "N",
"periodModel": null,
"country": null,
"externalName_it_IT": null,
"createdBy": "admin",
"externalName_en_RTL": null,
"createdDateTime": "/Date(1464090885000+0000)/",
"lastModifiedBy": "admin",
"externalName_en_GB": null,
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"externalName_nl_NL": null,
"externalName_zh_CN": null,
"externalName_en_DEBUG": null,
"flexibleRequestingAllowed": false,
"externalName_ko_KR": null,
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"searchString": null,
"externalName_de_DE": null,
"externalName_localized": "Simple Work Schedule Test",
"externalName_es_MX": null,
"externalName_defaultValue": "Simple Work Schedule Test",
Example 2: Retrieve example work schedule defined as PERIOD model (expand workScheduleDayModels)
URI: http://<hostname>/odata/v2/WorkSchedule('5DAYS_8HOURS')?
$expand=workScheduleDays,workScheduleDayModels&$format=JSON
Method: GET
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('5DAYS_8HOURS')",
"type": "SFOData.WorkSchedule"
},
"externalCode": "5DAYS_8HOURS",
"mdfSystemObjectType": "WorkSchedule",
"lastModifiedDateTime": "/Date(1433317499000+0000)/",
"averageHoursPerDay": "8",
"timeRecordingVariant": "DURATION",
"startingDate": "/Date(-2208988800000)/",
"mdfSystemRecordId": "6A86982271F541CD884CE18DD95B8808",
"mdfSystemEntityId": "558C5D80215C49548B6F2D5A4DE7F0A5",
"userId": null,
"mdfSystemStatus": "A",
"externalName_en_US": null,
"averageHoursPerMonth": "160",
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1429632098000)/",
"individualWorkSchedule": false,
"mdfSystemRecordStatus": "N",
"periodModel": null,
"country": null,
"externalName_it_IT": null,
"createdBy": "admin",
"externalName_en_RTL": null,
"createdDateTime": "/Date(1429624898000+0000)/",
"lastModifiedBy": "admin",
Example 3: Retrieve example work schedule defined as SCHEDULE model (expand periodModelNav)
Method: GET
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('WS_SCHEDULE_EXAMPLE')",
"type": "SFOData.WorkSchedule"
},
"externalCode": "WS_SCHEDULE_EXAMPLE",
"mdfSystemObjectType": "WorkSchedule",
"lastModifiedDateTime": "/Date(1464156863000+0000)/",
"averageHoursPerDay": null,
"timeRecordingVariant": "DURATION",
"startingDate": "/Date(1464739200000)/",
"mdfSystemRecordId": "DE20B024E70446EC8C66FE8B3BE99F73",
"mdfSystemEntityId": "AA994A78C1E84BADB36FE9F60A5388D4",
"userId": null,
"mdfSystemStatus": "A",
"externalName_en_US": "WS Schedule Model Example",
"averageHoursPerMonth": null,
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1464164063000)/",
"individualWorkSchedule": false,
"mdfSystemRecordStatus": "N",
"periodModel": "5DAYS_8HOURS",
"country": null,
"externalName_it_IT": null,
"createdBy": "admin",
"externalName_en_RTL": null,
"createdDateTime": "/Date(1464156863000+0000)/",
"lastModifiedBy": "admin",
"externalName_en_GB": null,
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"externalName_nl_NL": null,
"externalName_zh_CN": null,
"externalName_en_DEBUG": null,
"flexibleRequestingAllowed": false,
"externalName_ko_KR": null,
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"searchString": null,
"externalName_de_DE": null,
"externalName_localized": "WS Schedule Model Example",
"externalName_es_MX": null,
"externalName_defaultValue": "WS Schedule Model Example",
"externalName_da_DK": null,
"mdfSystemTransactionSequence": "1",
"externalName_fi_FI": null,
"shiftClassification": null,
"externalName_zh_TW": null,
"lastModifiedDateWithTZ": "/Date(1464156863000+0000)/",
"externalName_ja_JP": null,
"averageHoursPerYear": null,
"externalName_pl_PL": null,
"averageWorkingDaysPerWeek": null,
"modelCategory": "SCHEDULE",
"externalName_es_ES": null,
"averageHoursPerWeek": null,
"lastModifiedDate": "/Date(1464164063000)/",
"externalName_fr_FR": null,
"countryNav": {
"__deferred": {
URI: http://<hostname>/odata/v2/WorkSchedule/?$format=JSON
Method: POST
Body
Sample Code
{
"externalCode":"5DAY8HOURo",
"externalName_defaultValue":"5DAY8HOURo",
"timeRecordingVariant":"DURATION",
"startingDate":"/Date(1136073600000)/",
"individualWorkSchedule":false,
Response
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('5DAY8HOURo')",
"type": "SFOData.WorkSchedule"
},
"externalName_defaultValue": "5DAY8HOURo",
"timeRecordingVariant": "DURATION",
"startingDate": "/Date(1136073600000)/",
"individualWorkSchedule": false,
"modelCategory": "SCHEDULE",
"externalCode": "5DAY8HOURo",
"periodModelNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('5DAY8HOURo')/
periodModelNav"
}
}
}
}
URI: http://<hostname>/odata/v2/WorkSchedule('5DAY8HOURo')/?$format=JSON
Method: PUT
Sample Code
{
"externalCode":"5DAY8HOURo",
"externalName_defaultValue":"5DAY8HOURo",
"timeRecordingVariant":"DURATION",
"startingDate":"/Date(1167609600000)/",
"individualWorkSchedule":false,
"modelCategory":"SCHEDULE",
"periodModelNav":{
"__deferred":{
"uri":"https://<hostname>/odata/v2/WorkSchedule('5DAY8HOUR')/
periodModelNav"
}
}
}
URI: http://<hostname>/odata/v2/upsert?$format=JSON
Method: POST
Sample Code
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('5DAY8HOURo')",
"type": "SFOData.WorkSchedule"
},
"externalCode": "5DAY8HOURo",
"externalName_defaultValue": "5DAY8HOURo",
"timeRecordingVariant": "DURATION",
"startingDate": "/Date(1136073600000)/",
"individualWorkSchedule": false,
"modelCategory": "SCHEDULE",
"periodModelNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('5DAY8HOUR')/
periodModelNav"
}
}
}
Response:
Sample Code
{
"d": [
{
"key": null,
"status": "OK",
"editStatus": "UPSERTED",
"message": null,
"index": 0,
"httpCode": 200,
"inlineResults": null
}
}
URI: http://<hostname>/odata/v2/WorkSchedule('5DAY8HOURo')?$format=JSON
Method: DELETE
Sample Code
With a work schedule day model, you can define how the number of hours worked on a particular day should look.
You can then use the day models in your work schedule if you choose the Period or Schedule models in your work
schedule.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Navigation Properties
Code Examples
URI: http://<hostname>/odata/v2/WorkScheduleDayModel('CLT_0800-1700')?$format=JSON
Method: GET
Response:
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
WorkScheduleDayModel('CLT_0800-1700')",
"type": "SFOData.WorkScheduleDayModel"
},
"externalCode": "CLT_0800-1700",
"externalName_ko_KR": null,
"mdfSystemObjectType": "WorkScheduleDayModel",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"externalName_pt_BR": null,
"externalName_de_DE": null,
"externalName_localized": "CLT - 08:00 - 17:00 w/ Breaks",
"externalName_defaultValue": "CLT - 08:00 - 17:00 w/ Breaks",
"externalName_fr_CA": null,
"externalName_ru_RU": null,
URI: http://<hostname>/odata/v2/WorkScheduleDayModel?$format=JSON
Method: POST
Body:
Sample Code
{
"externalCode": "DUR_odata",
"externalName_defaultValue": "DUR_odata",
"timeRecordingVariant": "DURATION",
"workingHours": "8"
}
Response:
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
WorkScheduleDayModel('DUR_odata')",
"type": "SFOData.WorkScheduleDayModel"
},
"externalName_defaultValue": "DUR_odata",
"timeRecordingVariant": "DURATION",
"workingHours": "8",
"externalCode": "DUR_odata"
}
}
URI: http://<hostname>/odata/v2/WorkScheduleDayModel('DUR_odata')?$format=JSON
Method: PUT
Body:
Sample Code
{
"externalCode": "DUR_odata",
"externalName_defaultValue": "DUR_odata",
"timeRecordingVariant": "DURATION",
"workingHours": "6"
}
URI: http://<hostname>/odata/v2/upsert?$format=JSON
Method: POST
Body:
Sample Code
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
WorkScheduleDayModel('DUR_odata')",
"type": "SFOData.WorkScheduleDayModel"
},
"externalCode": "DUR_odata",
"externalName_defaultValue": "DUR_odata",
"timeRecordingVariant": "DURATION",
"workingHours": "4"
}
Response:
Sample Code
{
"d": [
{
"key": null,
"status": "OK",
"editStatus": "UPSERTED",
"message": null,
"index": 0,
"httpCode": 200,
"inlineResults": null
}
]
}
URI: http://<hostname>/odata/v2/WorkScheduleDayModel('DUR_odata')?$format=JSON
Method: DELETE
14.1.22 WorkScheduleDayModelAssignment
With a work schedule day model assignment, you can define how the number of hours worked on a particular day
should look.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
For code examples, please read look at Example 2 in the WorkSchedule [page 447] documentation.
14.1.23 WorkScheduleDayModelAssignmentSegment
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Properties
This table shows the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Code Examples
Example: Retrieve the work schedule day model assignments and the corresponding segments for a defined work
schedule
URI: http://<hostname>/odata/v2/WorkSchedule('WS_PERIOD_TEST')?
$expand=workScheduleDayModels,workScheduleDayModels/segments&$format=JSON
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/WorkSchedule('WS_PERIOD_TEST')",
"type": "SFOData.WorkSchedule"
},
"externalCode": "WS_PERIOD_TEST",
"mdfSystemObjectType": "WorkSchedule",
"lastModifiedDateTime": "/Date(1464186573000+0000)/",
"averageHoursPerDay": null,
"timeRecordingVariant": "CLOCK_TIME",
"startingDate": "/Date(978307200000)/",
"mdfSystemRecordId": "DA634C4D7BE34AEBBEE92D9A737C0E41",
"mdfSystemEntityId": "961371476F5A4AF599A7C30EA1CF852D",
"userId": null,
"mdfSystemStatus": "A",
"externalName_en_US": "WS Period Test",
"averageHoursPerMonth": null,
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1464193773000)/",
"individualWorkSchedule": false,
"mdfSystemRecordStatus": "N",
"periodModel": null,
"country": null,
"externalName_it_IT": null,
"createdBy": "admin",
"externalName_en_RTL": null,
"createdDateTime": "/Date(1464186573000+0000)/",
"lastModifiedBy": "admin",
"externalName_en_GB": null,
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"externalName_nl_NL": null,
"externalName_zh_CN": null,
"externalName_en_DEBUG": null,
"flexibleRequestingAllowed": false,
"externalName_ko_KR": null,
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"searchString": null,
"externalName_de_DE": null,
14.1.24 WorkScheduleDayModelSegment
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
Example: Get the work schedule day model segments for a work schedule day model
URI: http://<hostname>/odata/v2/WorkScheduleDayModel('08:00-16:00_15MB_60LB')?$expand=segments&
$format=JSON
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/
WorkScheduleDayModel('08:00-16:00_15MB_60LB')",
"type": "SFOData.WorkScheduleDayModel"
},
"externalCode": "08:00-16:00_15MB_60LB",
"externalName_ko_KR": null,
"mdfSystemObjectType": "WorkScheduleDayModel",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"externalName_de_DE": null,
"externalName_localized": "08:00 - 16:00 (15 min MB, 60 min LB)",
"externalName_defaultValue": "08:00 - 16:00 (15 min MB, 60 min LB)",
"externalName_es_MX": null,
"lastModifiedDateTime": "/Date(1464069892000+0000)/",
"externalName_da_DK": null,
"hoursAndMinutes": "06:45",
"timeRecordingVariant": "CLOCK_TIME",
"mdfSystemTransactionSequence": "1",
"externalName_fi_FI": null,
"workingHours": "6.75",
"mdfSystemRecordId": "3F852D69599F47F19619E5A3E539131A",
"shiftClassification": null,
"mdfSystemEntityId": "45571C76E084410EA47AC84183A54B41",
"description": null,
"mdfSystemStatus": "A",
"lastModifiedDateWithTZ": "/Date(1464069892000+0000)/",
"externalName_zh_TW": null,
"externalName_en_US": "08:00 - 16:00 (15 min MB, 60 min LB)",
"externalName_en_SAP_SLS": null,
"createdDate": "/Date(1442412745000)/",
"externalName_ja_JP": null,
"mdfSystemRecordStatus": "N",
"externalName_pl_PL": null,
"country": null,
"createdBy": "admin",
"externalName_it_IT": null,
"externalName_en_RTL": null,
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1442405545000+0000)/",
"mdfSystemEffectiveStartDate": "/Date(-2208988800000)/",
"lastModifiedDate": "/Date(1464077092000)/",
"externalName_en_GB": null,
"externalName_es_ES": null,
"externalName_nl_NL": null,
"externalName_zh_CN": null,
"externalName_en_DEBUG": null,
"externalName_fr_FR": null,
"segments": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/
WorkScheduleDayModelSegment(WorkScheduleDayModel_externalCode='08:00-16:00_15MB_6
0LB',externalCode='1')",
"type": "SFOData.WorkScheduleDayModelSegment"
},
"externalCode": "1",
"WorkScheduleDayModel_externalCode": "08:00-16:00_15MB_60LB",
"mdfSystemObjectType": "WorkScheduleDayModelSegment",
"mdfSystemEffectiveEndDate": "/Date(253402214400000)/",
"mdfSystemVersionId": null,
"lastModifiedDateTime": "/Date(1464069892000+0000)/",
14.1.25 WorkScheduleDay
Work schedule day defines the working time on a day. This entity is only used for work schedule of type SIMPLE.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Here you can see the required fields and business keys for this entity. Check the OData API dictionary in your
instance to see the complete list of properties, and check your metadata for navigations and associations.
Code Examples
For code examples, please look at Example 1 in the WorkSchedule [page 447] documentation.
In this section, you'll find the APIs available for Payroll Time Sheet. Employees are able to record their attendances,
overtime, on-call times, and allowances using the Payroll Time Sheet.
Before using any of the Payroll Time Sheet entities described here, you need to switch on Payroll Time Sheet in the
Admin Center. For details of how to do this, take a look at the Activate Payroll Time Sheet documentation in the
Implementing Employee Central Payroll Time Sheet guide.
In addition, you need to have permission to use the individual objects in question. For information on these
permissions, take a look at the Set Up Role-Based Permission Settings documentation in the Implementing
Employee Central Payroll Time Sheet guide.
14.2.1 ExternalTimeData
The External Time Data object contains recorded time data from an external system so that it can be included in
the Employee Central Payroll Time Sheet.
The entity must be used every time a customer wants to import external time data into the Employee Central
system.
Use Cases
This upserts external data for a user who records time on a Duration basis.
Operation Upsert
URI http://<hostname>/odata/v2/upsert
<Payload>
Sample Code
{
"__metadata":{
"uri":"ExternalTimeData('test1')"
},
"externalCode":"test1",
"startDate":"\/
Date(1511218800000)\/",
"userId":"ashirly1",
"hours":"8.5",
"timeType":"HGB_WORK1"
}
Note
No response is required here because for upserts just return a status 200 OK with a response body indicating
all upsert results.
This upserts external data for a user who records time on a Clock Time basis.
Operation Upsert
<Payload>
Sample Code
{
"__metadata":{
"uri":"ExternalTimeData('test1')"
},
"externalCode":"test1",
"startDate":"\/
Date(1511218800000)\/",
"userId":"ashirly1",
"startTime":"PT13H20M",
"endTime":"PT13H50M",
"timeType":"HGB_WORK1"
}
Note
No response is required here because for upserts just return a status 200 OK with a response body indicating
all upsert results.
Operation Query
URI http://<hostname>/odata/v2/
ExternalTimeData('test10001')
Sample Response
Sample Code
Operation Delete
URI http://<hostname>/odata/v2/
ExternalTimeData('test10001')
Operation Insert
URI http://<hostname>/odata/v2/
ExternalTimeData
<Payloads>
Sample Code
{
"__metadata": {
"uri":
"ExternalTimeData('test10001')"
},
"externalCode": "test10001",
"startDate": "/
Date(1526976229000)/",
"startTime": "PT16H00M",
"endTime": "PT17H00M",
"userIdNav" : {
"__deferred": {
"uri": "https://
<hostname>/odata/v2/restricted/
User('croller')"
}
}
}
Sample Response
Sample Code
14.2.2 ExternalTimeRecord
The entity represents a time record created outside of the Employee Central system.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Business Context
The ExternalTimeRecord OData API is used to import employee time records recorded in an external system into
the Employee Central system. After import, the employee time records are converted into time sheet entries. These
time records are later valuated within the Payroll Time Sheet and transferred to Employee Central Payroll.
This OData API performs mass replication of time records from an external time recording system into Employee
Central. It is possible to use the $BATCH directive, which we assume is the standard method to use this API.
Use cases
This is a sample use case for the ExternalTimeRecord OData API - the creation of an external time record with
external time segments. This involves uploading an external time record containing time segments into the time
sheet database in the SAP SuccessFactors system.
● Sending a POST request containing a JSON representation of both External Time Record and External Time
Segment MDF entities
● The response to the POST request
Use Case: Creation of an external time record with external time segments
OData API ExternalTimeRecord - creation of an external time record with external time segments.
Request Information
Operation POST
URI http://<Hostname>/odata/v2/upsert
Payload
Sample Code
{
"__metadata":{
"uri":"
ExternalTimeRecord('test1')"
},
"externalCode":"test1",
"date":"\/Date(1453104229000)\/",
"userId":"cgrant1",
"externalTimeSegments":[
{
"externalCode":"",
"hours":4.0
},
{
"externalCode":"",
"hours":4.0
},
{
"externalCode":"",
"hours":1.0
}
]
}
Related Information
14.2.3 TimeCollector
Time collectors are configurable multi-purpose counters that are processed in time valuation.
During time valuation, time collectors can be created, augmented, or reset (to zero) as the result of time valuation
operations ('collector update'). The frequency at which a collector is reset is configurable. Time collectors either
contain a number of accumulated minutes ('direct counting') or the number of accumulated threshold events: the
collector is increased by 1 if the threshold is surpassed or not ('event counting').
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Code Examples
Sample Code
Method: GET
Response:
{
"d": {
"results": [
{
"__metadata": {
"uri":
https://<hostname>/odata/v2/ TimeCollector('891f04a35f4b41889a2b3644202000a5')",
"type": "SFOData.TimeCollector"
},
"externalCode": "891f04a35f4b41889a2b3644202000a5",
"startDate": "/Date(1509494400000)/",
"timeCollectorType": "DAILYCOLL",
"bookingDate": "/Date(1512000000000)/",
"endDate": "/Date(1512000000000)/",
"lastModifiedDateTime": "/Date(1519200242000+0000)/",
"collectorValue": "1",
"createdBy": "v4admin",
"userId": "mhoff1",
"createdDateTime": "/Date(1519200242000+0000)/",
"lastModifiedBy": "v4admin",
"changeValue": "0",
"mdfSystemRecordStatus": "N",
"wfRequestNav": {
"__deferred": {
"uri": "https:// <hostname>/odata/v2/
TimeCollector('891f04a35f4b41889a2b3644202000a5')/wfRequestNav"
}
},
"mdfSystemRecordStatusNav": {
"__deferred": {
"uri": "https:// <hostname>/odata/v2/
TimeCollector('891f04a35f4b41889a2b3644202000a5')/mdfSystemRecordStatusNav"
}
},
"userIdNav": {
"__deferred": {
"uri": "https:// <hostname>/odata/v2/
TimeCollector('891f04a35f4b41889a2b3644202000a5')/userIdNav"
}
}
},
{
"__metadata": {
"uri": "https:// <hostname>/odata/v2/
TimeCollector('187203bbaf8f40968765810c2ed52f37')",
Workflow entities allow you to query the data of workflow requests, workflow steps, comments, participators,
allowed actions, as well as other workflow information displayed on the Workflow Details page. You can also use the
workflow function imports to change workflow statuses and post comments.
Permissions
Role Based
Manage Workflows Manage Workflow Requests
Note
* For EC workflows, only the workflow admin can decline a request. For MDF workflows, the current approver
can decline a request.
** In the case of escalation or delegation, the escalatee or delegatee becomes the current approver. The
workflow request still follows its own course of status transition. Additional statuses are available to indicate the
escalation or delegation progress.
This entity stores basic data of a workflow such as the overall status and the current step number. This is the
workflow used by Employee Central as well as MDF objects.
Supported Operations
Operation Description
Edit operations are not supported by the entity itself. However, you can use the following function imports to modify
your workflow requests:
Properties
This section lists only the properties and navigation properties that require special business logic, permission, or
other additional information. For a complete list, please go to Admin Center API Center OData API Data
Dictionary or use the API query: https://<hostname>/odata/v2/<Entity>/$metadata.
Property Description
Navigation Property
workflowAllowedActionListNav WorkflowAllowedActionList [page 512] Navigate to the list of allowed action for
the workflow request.
The following example shows how to query the basic information of a workflow by ID:
Request
Operation Query
URI https://<hostname>/odata/v2/
WfRequest(65L)?$format=JSON
Response
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/WfRequest(65L)",
"type": "SFOData.WfRequest"
},
"wfRequestId": "65",
"lastModifiedDateTime": "/Date(1496851039000+0000)/",
"lastModifiedBy": "101013",
"module": "HRIS",
"reminderSentDate": null,
"totalSteps": 1,
"createdDateTime": "/Date(1496851006000+0000)/",
"createdOn": "/Date(1496851006000)/",
"url": "https://<hostname>/sf/hrisworkflowapprovelink?workflowRequestId=V2-
nlxRHnYcTrR1jnB17z3o8Q%3D%3D&prevPage=HOME&company=BESTRUN&username=cgrant",
"lastModifiedOn": "/Date(1496851039000)/",
"parentWfRequestId": null,
"createdBy": "adminJY",
"currentStepNum": 1,
"status": "COMPLETED",
"wfRequestUINav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WfRequest(65L)/wfRequestUINav"
}
},
"parentWfRequestNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WfRequest(65L)/
parentWfRequestNav"
}
},
"workflowAllowedActionListNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WfRequest(65L)/
workflowAllowedActionListNav"
}
},
"empWfRequestNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WfRequest(65L)/empWfRequestNav"
}
},
"wfRequestParticipatorNav": {
"__deferred": {
"uri": "https://<hostname>/odata/v2/WfRequest(65L)/
wfRequestParticipatorNav"
}
},
This example shows how to query all workflow requests that were rejected:
Request
Operation Query
URI https://<hostname>/odata/v2/WfRequest?
$format=JSON&$filter=status eq 'PENDING
Response
The response returns a full list of pending workflow requests in the system. For demonstration purpose, some
results have been omitted:
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/WfRequest(162L)",
"type": "SFOData.WfRequest"
},
"wfRequestId": "162",
"lastModifiedBy": "80286",
"status": "PENDING"
},
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/WfRequest(41L)",
"type": "SFOData.WfRequest"
},
"wfRequestId": "41",
"lastModifiedBy": "101009",
"status": "PENDING"
},
... ...
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/WfRequest(740L)",
"type": "SFOData.WfRequest"
},
Related Information
Use the Todo entity to retrieve your assigned workflow requests. The Todo entity contains the list of tasks assigned
to a user. You will find a workflow item in the following Todo task categories 14 ( HRIS Employee Change Requests
Category26), 17 (Generic Object Category), 18 (Absence Management Category), 24 (IT Category), and 25
( Deductions Category) .
Tell me more
1.Run a Todo query for the relevant task category (14, 17, 18, 24, or 25)
For this example, we'll use the task category 14 ( HRIS Employee Change Requests Category26):
Sample Response
Sample Code
<m:properties>
<d:categoryId>14</d:categoryId>
<d:todos m:type="Bag(SFOData.ToDoBean)">
<d:element>
<d:categoryId>14</d:categoryId>
<d:completedDate m:null="true" />
<d:dueDate m:null="true" />
<d:dueDateOffSet m:type="Edm.Int32">0</d:dueDateOffSet>
<d:entries m:type="Bag(SFOData.ToDoEntry)">
<d:element>
<d:completedDate m:null="true" />
<d:formDataId m:type="Edm.Int64">0</d:formDataId>
<d:status m:type="Edm.Int32">2</d:status>
<d:statusLabel>Active</d:statusLabel>
<d:subjectFullName>New Hire , Tammy Aberts</d:subjectFullName>
<d:subjectId>462</d:subjectId>
<d:url>https://<hostname>/sf/hrisworkflowapprovelink?
workflowRequestId=V2-ypU9jRAxxzV2pyMHsQn1BQ%3D
%3D&prevPage=HOME&company=ACE1321&username=admin</d:url>
</d:element>
</d:entries>
<d:entryId m:type="Edm.Int32">20375</d:entryId>
<d:name>Requests Waiting for My Approval</d:name>
<d:status m:type="Edm.Int32">2</d:status>
<d:statusLabel>Active</d:statusLabel>
<d:stepDescAlt>Requests Waiting for My Approval</d:stepDescAlt>
<d:todoItemId m:null="true" />
<d:url m:null="true" />
</d:element>
</d:todos>
<d:categoryLabel>Employee Change Requests</d:categoryLabel>
<d:displayOrder m:type="Edm.Int32">14</d:displayOrder>
</m:properties>
Here you can see that in there is one workflow item, subjectId 462 in the task category 14 (HRIS Employee Change
Requests Category26). Let's now look at our wfRequest query.
Sample Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/WfRequest(462L)",
"type": "SFOData.WfRequest"
},
You can use the URL in the response to access your workflow item on the UI.
Note
The Todo entity is user-centric and will only return the ToDos for the API login user.
You can read up on the Todo entity, and what task categories are supported here.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
https://<hostname>.com/odata/v2/ Get all comments created by admin which have the action type
WfRequestComments?$filter=(actionType eq initiate or decline
'INITIATE' or actionType eq 'DECLINE') and
createdBy eq 'admin'&
$select=createdBy,actionType&$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>/odata/v2/WfRequestComments(46L)",
"type": "SFOData.WfRequestComments"
},
"createdBy": "admin",
"actionType": "INITIATE"
}
]
}
}
Related Information
15.3 WfRequestParticipator
Properties
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Request Information
Operation GET
URI http://<Hostname>/odata/v2/
WfRequestParticipator?$top=1&
$filter=actorType eq 'ROLE' &$select
wfRequestParticipatorId, ownerId,
actorType&$format=JSON
Response
Sample Code
{
"d": {
"results": [
Related Information
15.4 WfRequestStep
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
https://<hostname>.com/odata/v2/
WfRequestStep?$filter=createdBy eq
'cgrant1' and ownerId eq 'cgrant1' and
status eq 'COMPLETED'&
$select=wfRequestStepId,stepNum,ownerId,ap
proverType&$format=JSON
Code Examples
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com:443/odata/v2/WfRequestStep(1L)",
"type": "SFOData.WfRequestStep"
},
"wfRequestStepId": "1",
"stepNum": "1",
"approverType": "ROLE",
"ownerId": "cgrant1"
}
]
}
}
15.5 WfRequestUIData
This entity enables you to query the workflow data displayed on the Workflow Details page. You cannot query this
entity on its own. You can only query the entity as a navigation property through other entities, for example,
TodoEntryV2.
Supported Operations
Operation Description
Properties
This section lists only the properties and navigation properties that require special business logic, permission, or
other additional information. For a complete list, please go to Admin Center API Center OData API Data
Dictionary or use the API query: https://<hostname>/odata/v2/<Entity>/$metadata.
Property Description
actions Possible actions for the workflow request. Note that the action
is only available for the designated user in the workflow.
In this example, we try to query the to-do item 623M and expand to its workflow request, and then further expands
the wfRequestUINav navigation property to fetch the UI data.
Request
Operation Query
URI https://<hostname>/odata/v2/TodoEntryV2(623M)?$format=JSON&
$expand=wfRequestNav/wfRequestUINav
Response
{
"d": {
"__metadata": {
"uri": "https://<hostname>/odata/v2/TodoEntryV2(623M)",
"type": "SFOData.TodoEntryV2"
},
"todoEntryId": "623",
"lastModifiedDateTime": "/Date(1500336000000+0000)/",
"dueDate": null,
"todoEntryName": "Requests Waiting for My Approval",
"categoryLabel": "Employee Change Requests",
"completedDateTime": null,
"mobileLinkUrl": null,
"subjectId": "162",
"createdDate": "/Date(1500336000000+0000)/",
"linkUrl": null,
"formDataId": null,
"categoryId": "14",
"status": 2,
"userNav": {
Related Information
Describes how this entity lets you see what actions a consumer can take on a the WfRequest entity. Using Boolean
values TRUE/FALSE, you can see what a consumer can or cannot do for a given workflow step. The workflow steps
include returning, withdrawing, commenting, declining, updating, resubmitting, or allowing a delegate to decline,
revoke, or grant a WfRequest.
For information about the entity metadata and supported operations, please refer to your OData API dictionary in
the Admin Center or use the Entity query:https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Use Cases
Code Examples
Sample Code
Here is a code extract from such a query focussing on one particular workflow request ID:
workflowAllowedActionListNav: {
results: [1]
0: {
__metadata: {
uri: "https:/<hostname.com>/odata/v2/WorkflowAllowedActionList(1563L)"
type: "SFOData.WorkflowAllowedActionList"
}-
wfRequestId: "1563"
allowResubmit: false
allowReject: false
allowDelegateGrant: false
allowDelegateDecline: false
allowApprove: false
allowWithdraw: true
allowSendback: false
allowPostComment: true
allowUpdateRequest: false
allowDelegateRevoke: false
}-
-
}
Related Information
Function imports modify an entity. You use them as you would any OData API.
Example
The function import rejectWfRequest can be used in the following POST Operation:
https://<hostname>/odata/v2/withdrawWfRequest?wfRequestId=1234L
When you post this request, and it is successful, you'll change the status of the request to Rejected and the
code looks like this:
<d:WfRequestActionResponse>
<d:element m:type="SFOData.WfRequestActionResponse">
<d:status>success</d:status>
<d:wfRequestId m:type="Edm.Int64">1234L</d:wfRequestId>
</d:element>
</d:WfRequestActionResponse>
15.7.1 approveWfRequest
Lets you approve a workflow request assuming that you have authorization to approve the next step in the workflow
as described in the topic WorkflowAllowedActionList.
Operations Allowed
Operation Description
Parameters
Use Case
<d:WfRequestActionResponse>
<d:element m:type="SFOData.WfRequestActionResponse">
<d:status>success</d:status>
<d:wfRequestId m:type="Edm.Int64">1234L</d:wfRequestId>
</d:element>
</d:WfRequestActionResponse>
Error Codes
COE_GENERAL_BAD_REQUEST Message will tell you if the error is due to lack of user authori
zation or if there is an issue with the workflow itself.
Related Information
15.7.2 commentWfRequest
Lets you comment a workflow request assuming that you have authorization in the WorkflowAllowedActionList.
Operations Allowed
Operation Description
Parameters
Use Case
Code Examples
Sample Code
<d:WfRequestActionResponse>
<d:element m:type="SFOData.WfRequestActionResponse">
<d:status>success</d:status>
<d:wfRequestId m:type="Edm.Int64">1563</d:wfRequestId>
</d:element>
</d:WfRequestActionResponse>
Error Codes
COE_GENERAL_BAD_REQUEST Message will tell you if the error is due to lack of user authori
zation or if there is an issue with the workflow itself.
Related Information
Lets you reject a workflow request assuming that you have authorization in the WorkflowAllowedActionList.
Operations Allowed
Operation Description
Parameters
Use Case
Code Examples
Sample Code
<d:WfRequestActionResponse>
<d:element m:type="SFOData.WfRequestActionResponse">
<d:status>success</d:status>
<d:wfRequestId m:type="Edm.Int64">1234L</d:wfRequestId>
</d:element>
</d:WfRequestActionResponse>
COE_GENERAL_BAD_REQUEST Message will tell you if the error is due to lack of user authori
zation or if there is an issue with the workflow itself.
Related Information
15.7.4 sendbackWfRequest
Lets you send back a workflow request assuming that you have authorization in the WorkflowAllowedActionList.
Operations Allowed
Operation Description
Parameters
Code Examples
Sample Code
<d:WfRequestActionResponse>
<d:element m:type="SFOData.WfRequestActionResponse">
<d:status>success</d:status>
<d:wfRequestId m:type="Edm.Int64">1234L</d:wfRequestId>
</d:element>
</d:WfRequestActionResponse>
Error Codes
COE_GENERAL_BAD_REQUEST Message will tell you if the error is due to lack of user authori
zation or if there is an issue with the workflow itself.
Related Information
Lets you withdraw a workflow request assuming that you have authorization in the WorkflowAllowedActionList.
Operations Allowed
Operation Description
Parameters
Use Case
Code Examples
Sample Code
<d:WfRequestActionResponse>
<d:element m:type="SFOData.WfRequestActionResponse">
<d:status>success</d:status>
<d:wfRequestId m:type="Edm.Int64">1234L</d:wfRequestId>
</d:element>
</d:WfRequestActionResponse>
COE_GENERAL_BAD_REQUEST Message will tell you if the error is due to lack of user authori
zation or if there is an issue with the workflow itself.
Related Information
15.7.6 getWorkflowPendingData
You can use getWorkflowPendingData to query the changed data in a workflow that is not yet approved or rejected,
as well as fully completed.
Note
As of Q2 2019, the getWorkflowPendingData API is converted from Beta to Public. If you are using the Beta
version, please change the endpoint URL.
This API supports entities that are in the label: value pair format. Refer to the following list for the supported
entities:
● EmpCompensation
● EmpEmployment
● EmpGlobalAssignment
● EmpJob
Note
For EmpJob, the DirectReportee, Reportee, Deactivate, and TimeBalanceSection attributes are not
supported, because they do not have corresponding HRIS elements.
● EmpPayCompRecurring
● EmpPensionPayout
● FOPayComponentGroup
● PerAddress
● PerGlobalInfo
● PerPerson
● PerPersonal
● PerPersonRelationship
The following entities are not supported, because there are multiple fields for each record:
Permissions
User-based None.
Supported Operations
Operation Description
Properties
For a complete list of the entity metadata and support operations, please refer to your OData API dictionary in the
Admin Center or user the Entity query: https://<hostname>/odata/v2/Entity('<Your Entity')?
$format=json.
Property Description
fieldId The ids of HrisElementField for only the work permit group and
national id group of ESS workflow. For other groups, the value
is null.
payComponents The value is not null only when the workflow involves compen
sation amount change.
type For label: value pair change set, the value is null. For grid type
of data, which means the data format is a table, the value is
"grid".
title The change set group title, which is the same as displayed in
UI.
entityName The OData entity name, which is the same as displayed in the
Metadata file.
Parameters
wfRequestID A number, ending with L, that uniquely identifies the work Long
flow request
Use Case
Sample Request
Operation Query
Note
Please be noted that although the operation is query, the
HTTP method must be POST.
URI http://<hostname>/odata/v2/beta/getWorkflowPending-
Data?wfRequestId=2621L
Response
Sample Code
{
"d": [{
"wfRequestId": "2621",
"workflowAttributeGroups": {
You can map the change to an HRIS element using the entityName and fieldName fields.
If you want to save time when adding new employees to your organization, you can use an Upsert operation. This
will prove less time-consuming that adding the employees one-by-one in the Employee Central UI.
At a minimum you can insert the User, PerPerson, EmpEmployment, EmpJob, and PerPersonal entity to add an
employee. The order in which you perform the Upsert operations is critical. Be sure to follow it.
1. User entity
2. PerPerson
3. EmpEmployment
4. EmpJob
5. PerPersonal
Caution
Before inserting or updating employee information using OData API, check whether an HRIS sync job is
currently running in your instance. An active HRIS sync job may overwrite the values of certain fields, such as
username. This could lead to inconsistent user data. We recommend that you avoid all API edit operations
when an HRIS sync job is running.
Please contact your Implementation Partner to find out whether an HRIS sync job is scheduled for your
instance. If you are no longer working with an Implementation Partner, contact SAP Cloud Support.
Related Information
When you add a new employee, you need to upsert the User entity. The order in which you upsert your entities for
adding a new employee is crucial and the user entity is the first one. The other ones are PerPerson (2nd upsert),
EmpEmployment (3rd upsert), EmpJob (4th upsert) and PerPersonal (5th upsert).
Good to know
When you upsert the user entity, this also creates the PerPerson and EmpEmployment entity. However, both these
entities remain hidden until you explicitly upsert them.
Please also note that the PerPerson entity will only be visible after you have upserted the EmpEmployment entity.
URI: http://<Hostname>.com/odata/v2/upsert
Payload
Source Code
{
"__metadata": {
"uri": "User('cgrant')"
},
"username": "carlagrant",
"status": "Active",
"userId": "cgrant"
}}
Tip
To see the required fields for this entity for your instance, check your OData dictionary. There you'll see any other
insertable fields available and you can add them to your payload, if required.
Response
When the insert is successful, you'll have the following response. Please note that the operation always returns
status 200 (OK) with a response body indicating all Upsert results. Individual Upsert failures are not reported as
errors.
Source Code
<feed>
<entry>
<content type="application/xml">
<m:properties>
<d:key>cgrant</d:key>
<d:status>OK</d:status>
<d:editStatus>INSERTED</d:editStatus>
<d:message m:null="true" />
<d:index m:type="Edm.Int32">0</d:index>
<d:httpCode m:type="Edm.Int32">201</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
Related Information
When you add a new employee, you need to upsert the PerPerson entity. The order in which you upsert your
entities for adding a new employee is crucial and the PerPerson entity is the second one when you use the
minimum number of entities to add a new employee. The other ones are User (first upsert), this one PerPerson
(2nd upsert), EmpEmployment (3rd upsert), EmpJob (4th upsert) and PerPersonal (5th upsert).
Good to know
Although the PerPerson entity is created when the user entity is upserted, it remains hidden. It will only become
visible when:
URI: http://<Hostname>.com/odata/v2/upsert
Payload
Source Code
{
"__metadata": {
"uri": "PerPerson('cgrant')"
},
"personIdExternal": "grantcarla",
"userId": "cgrant"
}}
To see the required fields for this entity for your instance, check your OData dictionary. There you'll see any other
insertable fields available and you can add them to your payload, if required.
Response
When the insert is successful, you'll have the following response. Please note that the operation always returns
status 200 (OK) with a response body indicating all Upsert results. Individual Upsert failures are not reported as
errors.
Source Code
<feed>
<entry>
<content type="application/xml">
<m:properties>
<d:key m:null="true" />
<d:status>OK</d:status>
<d:editStatus>UPSERTED</d:editStatus>
<d:message m:null="true" />
<d:index m:type="Edm.Int32">0</d:index>
<d:httpCode m:type="Edm.Int32">200</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
</content>
</entry>
</feed>
Related Information
When you add a new employee, you need to upsert the EmpEmployment entity. The order in which you upsert your
entities for adding a new employee is crucial and the EmpEmployment entity is the third one when you use the
minimum number of entities to add a new employee. The other ones are User (1st upsert), PerPerson (2nd
upsert),this one EmpEmployment (3rd upsert), EmpJob (4th upsert), and PerPersonal (5th upsert).
Good to know
When you upsert EmpEmployment, the PerPerson entity will also become visible assuming that it has been
explicitly upserted (and not just created as a hidden entity during the User upsert).
Payload
Sample Code
Source Code
{"__metadata": {
"uri": "EmpEmployment(personIdExternal='grantcarla',userId='cgrant')"
},
"startDate":"/Date(1388534400000)/",
"personIdExternal":"grantcarla",
"userId":"cgrant"
}}
Tip
To see the required fields for this entity, check the OData dictionary in your company instance. You can also see the
other insertable fields and can add them to your payload, if required.
Response
When the insert is successful, you'll have the following response. Please note that the operation always returns
status 200 (OK) with a response body indicating all Upsert results. Individual Upsert failures are not reported as
errors.
Source Code
<feed>
<entry>
<content type="application/xml">
<m:properties>
<d:key m:null="true" />
<d:status>OK</d:status>
<d:editStatus>UPSERTED</d:editStatus>
<d:message m:null="true" />
<d:index m:type="Edm.Int32">0</d:index>
<d:httpCode m:type="Edm.Int32">200</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
</content>
</entry>
</feed>
Related Information
When you add a new employee, you need to upsert the EmpJob entity. The order in which you upsert your entities
for adding a new employee is crucial and the EmpJob entity is the fourth one when you use the minimum number
of entities to add a new employee. The other ones are User (1st upsert), PerPerson (2nd upsert), EmpEmployment
(3rd upsert), this one, EmpJob (4th upsert), and PerPersonal (5th upsert).
URI: http://<Hostname>.com/odata/v2/upsert
Payload
Source Code
{"__metadata": {
"uri": "EmpJob"
},
"jobCode":"ADMIN-1",
"userId":"cgrant",
"startDate":"/Date(1388534400000)/",
"eventReason":"HIRNEW",
"company":"ACE_USA",
"businessUnit":"ACE_CORP",
"managerId":"NO_MANAGER"
}
}
}
Tip
To see the required fields for this entity for your instance, check your OData dictionary. There you'll see any other
insertable fields available and you can add them to your payload, if required.
Response
When the insert is successful, you'll have the following response. Please note that the operation always returns
status 200 (OK) with a response body indicating all Upsert results. Individual Upsert failures are not reported as
errors.
Source Code
<feed>
<entry>
<content type="application/xml">
Related Information
When you add a new employee, you need to upsert the PerPersonal entity. The order in which you upsert your
entities for adding a new employee is crucial and the PerPersonal entity is the last one when you use the minimum
number of entities to add a new employee. The other ones are User (first upsert), PerPerson (2nd upsert),
EmpEmployment (3rd upsert), EmpJob (4th upsert) and this one PerPersonal (5th upsert).
URI: http://<Hostname>.com/odata/v2/upsert
Payload
Source Code
{ "__metadata":{
"uri":"PerPersonal(personIdExternal='grantcarla',startDate=datetime'2014-01-01T00
:00:00')"},
"personIdExternal":"grantcarla",
"namePrefix": "Ms",
"gender":"F",
"initials": "cg",
"firstName":"Carla",
"lastName":"Grant"
}
Tip
To see the required fields for this entity for your instance, check your OData dictionary. There you'll see any other
insertable fields available and you can add them to your payload, if required.
Response
When the insert is successful, you'll have the following response. Please note that the operation always returns
status 200 (OK) with a response body indicating all Upsert results. Individual Upsert failures are not reported as
errors.
Source Code
<feed>
<entry>
<content type="application/xml">
<m:properties>
<d:key m:null="true" />
<d:status>OK</d:status>
<d:editStatus>UPSERTED</d:editStatus>
<d:message m:null="true" />
<d:index m:type="Edm.Int32">0</d:index>
<d:httpCode m:type="Edm.Int32">200</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
</content>
</entry>
</feed>
Related Information
Background
In this topic, we’re talking about external and internal user data.
Internal user data refers to EC users, that is employees, as well as any users that have a dependent relationship
with an EC user (for example, a spouse, a child, or, an emergency contact).
The EC entities, EmpEmployment, PerAddressDEFLT, PerEmail, PerPhone, PerPerson, and PerPersonal are often
reused by other non-EC modules to store user data. This data is external user data. Up to now, you haven't been
able to filter out this external user data for PerAddressDEFLT, PerEmail, PerPhone, or for PerPersonal . So, if, for
example you’re using EC OData APIs for a scenario such as payroll replication, your response could include
applicants from Recruiting. And, conversely, you have not been able to include external user data for
EmpEmployment or PerPerson. Now, however, we're offering filterable and selectable fields to model queries to
meet your requirements.
We're offering you the following Boolean fields to use with $filter:
For EmpEmployment, you can use this combination to return external user data:
Upserta
Field Type Nullable Required Creatable Updatable ble Visible Sortable Filterable
includeAll Edm.Boo True False False False False False True True
Records lean
isECRe Edm.Boo True False False False False True False True
cord lean
includeAllRecords works on the root entity only. If you specify it on the navigation entity, it won't work.
Works:
Query: https://<hostname>.com/odata/v2/PerPerson?$expand=personalInfoNav&
$filter=includeAllRecords eq true
Query: https://<hostname>.com/odata/v2/PerPerson?$expand=personalInfoNav&
$filter=personalInfoNav/includeAllRecords eq true
Your want your query to return You'll need to Use the following filter
Internal user data Filter out external user data Option 1: isECRecord=true
Option 3: includeAllRecords=false
Option 5: no filter
External user data Filter out internal user data isECRecord=false, includeAllRecords=
true
Note
Only available for EmpEmployment
External and internal user data Include external and internal user data includeAllRecords= true
Please remember that includeAllRecords is a hidden field, so you won't see it in the response.
Query: https://<hostname>.com/odata/v2/PerPhone
Response
Sample Code
<m:properties>
<d:personIdExternal>llll</d:personIdExternal>
<d:phoneType>5845</d:phoneType>
<d:extension m:null="true"></d:extension>
<d:createdOn m:type="Edm.DateTime">2011-03-17T21:39:02</
d:createdOn>
<d:isPrimary m:type="Edm.Boolean">true</d:isPrimary>
<d:phoneNumber>707 2000</d:phoneNumber>
<d:createdBy>admin</d:createdBy>
<d:lastModifiedBy>admin</d:lastModifiedBy>
<d:createdDateTime
m:type="Edm.DateTimeOffset">2011-03-17T21:39:02Z</d:createdDateTime>
<d:lastModifiedOn m:type="Edm.DateTime">2011-03-17T21:39:02</
d:lastModifiedOn>
<d:lastModifiedDateTime
m:type="Edm.DateTimeOffset">2011-03-17T21:39:02Z</d:lastModifiedDateTime>
</m:properties>
Sample Code
<m:properties>
<d:personIdExternal>GAdams</d:personIdExternal>
<d:userId>GAdams</d:userId>
<d:startDate m:type="Edm.DateTime">1900-01-01T00:00:00</
d:startDate>
<d:eligibleForStock m:null="true"></d:eligibleForStock>
<d:initialOptionGrant m:null="true"></d:initialOptionGrant>
<d:payrollEndDate m:null="true"></d:payrollEndDate>
<d:serviceDate m:null="true"></d:serviceDate>
<d:professionalServiceDate m:null="true"></
d:professionalServiceDate>
<d:okToRehire m:null="true"></d:okToRehire>
<d:regretTermination m:null="true"></d:regretTermination>
<d:customString23 m:null="true"></d:customString23>
<d:endDate m:null="true"></d:endDate>
<d:lastModifiedDateTime
m:type="Edm.DateTimeOffset">2016-06-21T08:54:09Z</d:lastModifiedDateTime>
<d:eligibleForSalContinuation m:null="true"></
d:eligibleForSalContinuation>
<d:StockEndDate m:null="true"></d:StockEndDate>
Response
Sample Code
<m:properties>
<d:personIdExternal>121</d:personIdExternal>
<d:userId>121</d:userId>
<d:startDate m:type="Edm.DateTime">2011-12-05T00:00:00</
d:startDate>
<d:eligibleForStock m:type="Edm.Boolean">false</
d:eligibleForStock>
<d:initialOptionGrant m:null="true"></d:initialOptionGrant>
<d:payrollEndDate m:type="Edm.DateTime">2011-11-28T00:00:00</
d:payrollEndDate>
<d:serviceDate m:null="true"></d:serviceDate>
<d:professionalServiceDate m:null="true"></
d:professionalServiceDate>
<d:okToRehire m:null="true"></d:okToRehire>
<d:regretTermination m:type="Edm.Boolean">false</
d:regretTermination>
<d:customString23 m:null="true"></d:customString23>
<d:endDate m:null="true"></d:endDate>
<d:lastModifiedDateTime
m:type="Edm.DateTimeOffset">2011-12-06T00:00:42Z</d:lastModifiedDateTime>
<d:eligibleForSalContinuation m:type="Edm.Boolean">false</
d:eligibleForSalContinuation>
<d:StockEndDate m:type="Edm.DateTime">2011-11-28T00:00:00</
d:StockEndDate>
<d:assignmentClass>ST</d:assignmentClass>
<d:lastDateWorked m:type="Edm.DateTime">2011-11-28T00:00:00</
d:lastDateWorked>
<d:salaryEndDate m:type="Edm.DateTime">2011-11-28T00:00:00</
d:salaryEndDate>
<d:isECRecord m:type="Edm.Boolean">true</d:isECRecord>
<d:originalStartDate m:type="Edm.DateTime">2011-05-11T00:00:00</
d:originalStartDate>
A person UUID (unique universal identifier) is now available for integration and import scenarios.
Background
We’ve introduced the concept of a person UUID for the entire SAP SuccessFactors HCM Suite. When a new hire or
user is created, the system generates this identifier – called “perPersonUuid”. This field is immutable meaning that
once the field is populated with a value, it cannot be changed.
In the SAP SF HCM Suite, you can now expose perPersonUuid for integration and import scenarios for all
employees. So even if the employment field IS_EC_SYSTEM_OF_RECORD=F and the record is for a non-EC user,
the perPersonUuid can be exposed.
perPersonUuid cannot be queried directly, but is available from the User entity with the new navigation
personKeyNav.
perPersonUuid is exposed regardless of data model configuration, RBP settings, or provisioning settings.
perPersonUuid can also be added to PerPerson.
These tables show you the properties for PersonKey, PersonKeyNav and perPersonUuid.
Property Upserta
Name Type Nullable Required Creatable Updatable ble Visible Sortable Filterable
personI Edm.String False True False False False True True True
dExternal
personId Edm.Int64 True False False False False True True True
perPerso Edm.String True False False False False True True True
nUuid
Upserta Relation
Required Creatable Updatable ble Visible Sortable Filterable ship FromRole ToRole
False False False False True False True SFO User PersonKey
Data.Per
son
Key_User
Good to know
Note
● The only way to expose this field in a query is with $expand from the User entity. If you try to query the entity
directly, the error message <COE_UNSUPPORTED_FEATURE> is raised.
To query it, personKeyNav has now been added to the User entity and you use $expand to expose perPersonUuid.
Request: https://<hostname.com/odata/v2/User('admin')?$format=json&$expand=personKeyNav&
$select=personKeyNav
Response
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/User('admin')",
"type": "SFOData.User"
},
"personKeyNav": {
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/PersonKey('admin')",
"type": "SFOData.PersonKey"
},
"personIdExternal": "admin",
"personId": "2",
"perPersonUuid": "3A085DB0D9184B49B0E3E70D6F07EB1A"
}
}
},
Request: https://<hostname>.com/odata/v2/User('admin')?$format=json&
$expand=personKeyNav&$filter=personKeyNav/pePersonUuid eq
"3A085DB0D9184B49B0E3E70D6F07EB1A"
Response
Sample Code
Response:
{
"d": {
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/User('admin')",
"type": "SFOData.User"
},
....
Related Information
Background
FOWfConfig contains workflow information but - as with all entity fields - you can only read the fields that have the
attribute visible=true. In FOWfConfig, this means that you couldn't read the following fields:
However, you can use this nav, wfStepApproverNav to navigate to FOWfConfigStepApprover where these fields
have the attribute visible=true.
Being able to read these fields means that you can get much more detailed workflow information.
You can access these fields for more detailed information as follows:
Tell me more
wfStepApproverNav: Properties
Sample Code
<NavigationProperty Name="wfStepApproverNav"
sap:required="false"
sap:creatable="false"
sap:updatable="false"
sap:upsertable="false"
sap:visible="true"
sap:sortable="true"
sap:filterable="true"
Relationship="SFOData.FOWfConfig_FOWfConfigStepApprover"
FromRole="FOWfConfig" ToRole="FOWfConfigStepApprover_ref"
sap:label="wfStepApproverNav">
</NavigationProperty>
FOWfConfigStepApprover: Properties
Sample Code
Extract from $metadata focussing on the fields that have the attribute visible=true (up to now only available in
FOWfConfig with the attribute visible=false)
<EntityType Name="FOWfConfigStepApprover">
<Property Name="actionType" Type="Edm.String" Nullable="true"
sap:required="false" sap:creatable="false" sap:updatable="false"
sap:upsertable="false" sap:visible="true" sap:sortable="false"
sap:filterable="false" sap:label="Edit Transaction"></Property>
<Property Name="approverRole" Type="Edm.String" Nullable="true"
sap:required="false" sap:creatable="false" sap:updatable="false"
sap:upsertable="false" sap:visible="true" sap:sortable="false"
sap:filterable="false" sap:label="Approver Role"></Property>
<Property Name="approverType" Type="Edm.String" Nullable="true"
sap:required="false" sap:creatable="false" sap:updatable="false"
sap:upsertable="false" sap:visible="true" sap:sortable="false"
sap:filterable="false" MaxLength="32" sap:label="Approver Type"></Property>
<Property Name="context" Type="Edm.String" Nullable="true"
sap:required="false" sap:creatable="false" sap:updatable="false"
sap:upsertable="false" sap:visible="true" sap:sortable="false"
sap:filterable="false" MaxLength="32" sap:label="Context"></Property>
<Property Name="relationshipToApprover" Type="Edm.String"
Nullable="true" sap:required="false" sap:creatable="false" sap:updatable="false"
sap:upsertable="false" sap:visible="true" sap:sortable="false"
sap:filterable="false" sap:label="relationshipToApprover"></Property>
<Property Name="respectRBP" Type="Edm.Boolean" Nullable="true"
sap:required="false" sap:creatable="false" sap:updatable="false"
Response
Sample Code
{
"d": {
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/FOWfConfig('LOA')",
"type": "SFOData.FOWfConfig"
},
"externalCode": "LOA",
"createdOn": "/Date(1300533482000)/",
"futureDatedAlternateWorkflow": null,
"createdBy": "admin",
"description": "HR Business Partner assigned to manager's business unit",
"name": "Leave of Absence",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1300533482000+0000)/",
"remindIndays": null,
"lastModifiedOn": "/Date(1323196467000)/",
"lastModifiedDateTime": "/Date(1323196467000+0000)/",
"isDelegateSupported": null,
"wfStepApproverNav": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/
FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)",
"type": "SFOData.FOWfConfigStepApprover"
},
"stepNum": "1",
"externalCode": "LOA",
"approverPositionRelationship": null,
"lastModifiedDateTime": "/Date(1323196467000+0000)/",
"actionType": "NO_EDIT",
"skipType": null,
"approverRole": "EH",
"relationshipToApprover": null,
"approverType": "ROLE",
"createdBy": "admin",
"lastModifiedBy": "admin",
"createdDateTime": "/Date(1311812907000+0000)/",
Response
Sample Code
....
<entry>
<id>https://<hostname>.com/odata/v2/
FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)</id>
<title type="text"></title>
<updated>2016-10-11T08:22:03Z</updated>
<author>
<name></name>
</author>
<link rel="edit" title="FOWfConfigStepApprover"
href="FOWfConfigStepApprover(externalCode='LOA',stepNum=1L)"></link>
Related Information
What's new?
The mdf entities, SecondaryAssignments and SecondaryAssignmentsItem are now available. This means that it is
now possible to know which employment contract is the primary one for replication scenarios. In a nutshell you can
now build a concurrent employment replication from Employee Central to other 3rd Party systems using OData
APIs. Please note that secondary employment is also known as concurrent employment.
Previously it was not possible to differentiate primary from secondary employments using OData APIs. By offering
SecondaryAssignments and SecondaryAssignmentsItems, important data has been made available in one single
API call and you benefit from:
The PerPerson entity now has a navigation secondaryAssignmentsNav that lets you navigate to the MDF entity
SecondaryAssignments.
Tell me more
SecondaryAssignments has a business key externalCode (Person ID External) meaning that it references a person.
It has a one to multiple association with the MDF entity SecondaryAssignmentsItem.
SecondaryAssignmentsItems contains the userSysId (Employment/User ID) – this is the unique user ID generated
when a secondary employment is created. It is a child entity of SecondaryAssignments. These assignments are
created and maintained automatically based on the creation or editing of Concurrent Employment.
Both entities are effective-dated. If the concept of effective dating is new to you, please take a look at Effective
Dating so that you can make the most out of this new entity.
In the PerPerson entity, you use the secondaryAssignmentsNav, a visible, sortable, and filterable field to build a
query that navigates to the entity SecondaryAssignments.
GET Operation: Retrieves the secondaryAssignmentsNav which in turn will return the
SecondaryAssignmentsItems, that is information about the secondary employment.
Request: https://<hostname>.com/odata/v2/PerPerson?$format=json&$filter=personIdExternal
%20eq%20'jsmith'&$expand=secondaryAssignmentsNav/allSfProcesses
Response
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://<hostname>.com/odata/v2/PerPerson('jsmith')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "jsmith",
"dateOfBirth": null,
"lastModifiedOn": "/Date(1303743709000)/",
"lastModifiedDateTime": "/Date(1303743709000+0000)/",
"dateOfDeath": null,
"createdOn": "/Date(1303743708000)/",
"countryOfBirth": null,
"createdBy": "v4admin",
"regionOfBirth": null,
"createdDateTime": "/Date(1303743708000+0000)/",
"lastModifiedBy": "v4admin",
"personId": "11",
"personRerlationshipNav": {
"__deferred": {
"uri": "https://<hostname>.com/odata/v2/
PerPerson('jsmith')/personRerlationshipNav"
}
},
"emergencyContactNav": {
"__deferred": {
"uri": "https://<hostname>.com/odata/v2/
PerPerson('jsmith')/emergencyContactNav"
}
},
Upsert Operation: Retrieves the secondaryAssignmentsNav which in turn will return the
SecondaryAssignmentsItems, that is information about the secondary employment. There is not often a business
case for this operation but it has been provided to support the cloning or transfer of data between similar instances
in a different environment. In this example here, user system ID (represented by the externalcode) for the primary
employment is PrimaryEmployment and the userSysID for secondary employment is represented by 301 (a
number automatically generated when a secondary employment is created).
Request: https://<hostname>.com/odata/v2/upsert
Payload Data
Sample Code
You can take a look at the tips and FAQs here to see if they can answer your questions or help you with your APIs. In
some cases, you'll find a brief explanation, and others will guide you to existing topics for your answer.
The permission setting, Allow Admin to Access OData API through Basic Authentication, lets admins use Basic
Authorization to make API calls. It's available in Permission Settings under Administrator Settings in Manager
Integration Tools.
Two authentication types are available in OData APIs - HTTP Basic Authorization and OAuth 2.0.
HTTP Basic Authorization is less secure but simpler to set up and use - so you might want to use it for testing or in
test clients. OAuth is more complex to set up but more secure.
Note
Please don't use SOAP APIs or Ad hoc APIs for building new integrations in Employee Central. The only
exception to this rule is the SOAP based Compound Employee API (CE API).
UI consumption Yes No
17.3 APIs are missing or not up-to-date in the OData API Data
Dictionary?
Sometimes you cannot find an entity in the OData API Data Dictionary, or the definition in the dictionary is out of
dated. That might be because the entity is an MDF object and it is not exposed to OData API properly.
For detailed steps on how to solve this problem, see Exposing MDF Objects.
In EC OData APIs, you use either HTTP Basic Authentication or OAuth 2.0 as an authentication type.
The main difference between basic authentication and OAuth 2.0 is the level of security each type offers for making
API calls. Basic authorization is less secure but easier to set up and OAuth 2.0 is more secure and more complex to
set up. However, you can secure the access with basic authentication using IP whitelisting. For more information,
see OData IP Whitelisting.
Related Information
This document explains the types of authentication used to access OData API, how to enable session reuse for
OData API access, and how to set exceptions for API login.
Basic Auth requires users to have admin access to the OData API and have valid accounts with usernames and
passwords. OAuth 2.0 lets all users log in regardless of whether they are SSO users, so long as they have a valid
token and the OAuth client is registered.
HTTP Basic Authentication (Basic Auth) allows you to access OData API by providing username, company ID, and
password information on an HTTP user agent, such as a web browser.
To log in with Basic Auth, you must have the Allow Admin to Access OData API through Basic Authentication
permission. Basic Auth is good for integration purposes.
● Username, company ID, and password are combined into a string as such: username@company
ID:password
● The resulting string literal is then encoded using Base64.
● The authentication method ("Basic") followed by a space is then put before the encoded string. For example,
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
HTTP Basic Authentication is generally considered less secure than authentication using OAuth 2.0. However, you
can increase the security by controlling the access using IP whitelisting.
Related Information
Once OData is enabled, you must grant access to the API to activate Basic Auth for a given user.
Assign the permission in Administrator Permissions Manage Integration Tools Allow Admin to Access OData
API through Basic Authentication .
1. Click Administrative Privileges Integration Tools , and select Allow Admin to Access OData API through
Basic Authentication.
2. On the Managing Administrative Privilege page, select the Employee Export and Employee Import checkboxes
to grant those permissions to the given user.
You will not need to re-enter this information for subsequent queries until the browser is closed. If the user name
and password verification fails, you will need to open a new window and try again
Note
When you query in atom format in Firefox, the xml result will not be displayed, because Firefox regards atom
format as RSS content by default. You can check the result in JSON format or view the source code to check
the query result.
Use this feature to set the maximum password age and login exceptions for individual users for OData API and
SFAPI access.
Context
Your SAP SuccessFactors HCM Suite administrator sets password policies for all users in the system, including the
timing for password expirations. However, you may want to set different expiration times for passwords for
integrations that are built against a specially designed API user account. You can set exceptions to the password
policy for your API users, and specify a different password expiration (maximum password age) policy. To maintain
security, users who have password policy exceptions are required to have an IP address restriction to connect to
the API.
Follow the instructions below to set password policy and login exceptions for your API users.
Procedure
1. Go to Admin Center Password & Login Policy Settings , and choose Set API login exceptions.... You can
also access the Password & Login Policy Settings tool from API Center Legacy SFAPI IP Whitelisting .
2. Click Add to create a new policy. In the pop-up dialog, enter the following:
Field Description
Username Enter the username for whom you want to apply the policy.
Maximum password age (days) Enter the number of days the password is valid for. To set a
password to never expire, enter -1.
Note
For security reasons, we do not recommend setting a
password to never expire.
Note
The maximum password age applies only when the user
is accessing from the IP addresses specified here.
OAuth 2.0 lets all users log in regardless of whether they are SSO users . If you are planning to use OAuth 2.0 for
authentication, you will first need to register your OAuth client, and set up the permissions required for. this
registration. Then you can register your OAuth client application.
From the admin menu Manage Permission Roles, select the desired role for which you want to add the permission.
As a best practice, create role named "API Administrator". Under the Manage Integration Tools link, select the
Manage OAuth2 Client Applications checkbox.
After you have done this, you will see a link, Manage OAuth2 Client Applicationsunder the Company Settings
category in the new admin tools, and under Integration Tools in the older administration tools interface.
From the Admin Menu click Manage Security Administrative Privileges . For the user you are logged in as, look
under Integration Tools and check the box under Access to OAuth 2 Management.
After you have done this, you will see a link under Integration Tools to where you can register your OAuth client.
To register an OAuth client, log into your application instance with an administrator account. From the Admin
menu, click Manage OAuth2 Client Applications Register New Client Application . After you register an OAuth
client, any user of the registered client can connect to SuccessFactors HCM Suite using this method.
Enter the following parameters in the form that is displayed, and click Register:
VALUE DESCRIPTION
Company The name of your company. This value is pre-filled based on the instance of
the company currently logged in.
Application URL A unique URL of the page that the client wants to display to the end user. The
page might contain more information about the client application. This is
needed for 3-legged OAuth, however it is not currently supported.
X.509 Certificate The certificate corresponding to the private and public key used in the OAuth
2.0 authentication process. In this flow, the SuccessFactors HCM Suite sys
tem will need the public key (the certificate) and the client application will
have the private key. To register a client application, you will need to install
the public key (aka certificate) in SuccessFactors HCM Suite. If you supply
that certificate, you must use the RSA-SHA1 signature type for authenticat
ing. As an optional feature, you can generate a public and private key pair
with the Generate X.509 Certificate button. If you do this, you must download
the private key (or key pair) and install it into your client application.
Generate X.509 Certificate Button A button that generates an X.509 certificate if the customer doesn't have one
already. When clicked, a dialog box is displayed, in which the customer can
enter the following information then click "Generate" to generate a self-
signed certificate:
If you have generated the X-509 Certificate, you must download the private key to use it in your client application to
make token requests. The system saves the public key. You will need to regenerate the private key if you lose it.
Note
You will need to save the Private Key before you register you client. Only the Public Key is available for viewing
when the client is registered. You will have the API Key and Private Key available to you in the generated
certificate.
You can modify the X 509 certificate and the application description, for an existing client application by clicking
the Edit button for the client application on the application list page. In the client application edit page that appears,
you can make the modifications.
You can either replace the existing X.509 certificate, or regenerate the certificate by clicking the Generate X.509
Certificate button.
You can enable or disable an existing OAuth 2 client by clicking the Disable (Enable) button on the client button for
the client application on the application list page
SAP SuccessFactors OData API supports two-legged authentication for OAuth 2.0. You can use three simple OData
API to generate Bearer tokens for subsequent API calls.
Here is the list of APIs and the recommended order for using them:
Step 1 oauth/idp Pass a private key to this API to generate a signed SAML asser
tion.
Note
This step is only required for SAML certificates generated in
API Center. A more secure approach is to use certificates gen
erated by client.
Step 2 oauth/token Pass the signed SAML assertion to this API to generate a new
Bearer token. Once a token is generated, you can use it in the
header of OData API calls for authentication.
Step 3 oauth/validate Pass the Bearer token to the API and verify if it is still valid. A token
is only valid for 24 hours after it is generated.
The following diagram explains the OAuth 2.0 authentication sequence with SAML Bearer assertion handshaking.
Use API oauth/idp to generate a Security Assertion Markup Language (SAML) assertion for authentication.
Caution
To generate a SAML assertion using the /oauth/idp API, you are required to provide an X.509 private key.
Proceed with caution because it is considered a security risk.
When you change or regenerate an X.509 certificate for an application, the existing application client
configurations will be invalidated. This could lead to application failure until you update the configurations with
the new certificate information.
URI https://<hostname>/oauth/idp
Note
When the use_email value is set to "true", the subject nameId format in the
generated SAML assertion will change from nameid-format:unspecified
to nameid-format:emailAddress. An email address has to be mapped to
a unique user. If such email can be mapped to more than one userId, an HTTP 401
error "Unable to map xxx@xxx.xxx to a valid BizX User ID" will be returned.
Do not set the values of use_username and use_email to "true" at the same
time.
A successful response returns a header with status code 200 OK and a Base64-encoded SAML assertion. You can
use this assertion to request a Bearer token in the next step.
QE4pB4mXg7+JPzOiL6LetEhfpad5sCYajmf2lFALHjzMbkAUL7zVCsXh3IVCKRkC/89Lv7EESscH
7/xITBXyzX58k1f+WiIoEbDlf2ZWgDLJhmWeR2vPTl/
szeDF9FuUk0jbCPxBQTj8ufqTTnkCf7EM
pTdv+Ytqpz4EcDmYGYxbbQyp8+xezZ1CDMxENg==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
MIICDTCCAXagAwIBAgIETJj9LjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJVUzEbMBkGA1UE
ChMSU3VjY2Vzc2ZhY3RvcnMuY29tMQwwCgYDVQQLEwNPcHMxETAPBgNVBAMTCFNGIEFkbWluMB4X
DTEwMDkyMTE4NDUwMloXDTI1MDkxOTE4NDUwMlowSzELMAkGA1UEBhMCVVMxGzAZBgNVBAoTElN1
Y2Nlc3NmYWN0b3JeLmNvbTEMMAoGA1UECxMDT3BzMREwDwYDVQQDEwhTRiBBZG1pbjCBnzANBgkq
hkiG9w0BAQEFAAOQjQAwgYkCgYEArA9RLNnL9Pt6xynFfYfa8VXAXFDG9Y8xkgs3lhIOlsjqEYwb
SoghiqJIJvfYM45kx3aS7ZrN96tAR5uUupEsu/
GcS6ACxhfruW+BY6uw8v6/w2vXhBdfFjBoO+Ke
Lx4k3llleVgKsmNlf81okOXv1ree8wErfZ3ssnNxkuQgGB0CAwEAATANBgkqhkiG9w0BAQUFAAOB
gQBeBCSMFnY8TB6jtWoSP/lorBudhptgvO7/3r+l/
QK0hdk6CVv+VQmSilNPgWVgU9ktZGbNkZhw
IgwnqIQHAi6631ufkYQJB+48YUe1q/
pv6EWaeIwGvcGYSXZp/E/aGZPtceTIXFPfqOyHQoFtb0nq
MMFWoDhpXUHmlroyTc9sGg==
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml2:Subject>
<saml2:NameID Format="urn:oasis:names:tc:SAML:
1.1:nameid-format:unspecified">UserABC</saml2:NameID>
<saml2:SubjectConfirmation
Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData
NotOnOrAfter="2018-09-10T12:30:19.690Z" Recipient="https://<hostname>/oauth/idp"/>
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions NotBefore="2018-09-10T12:10:19.690Z"
NotOnOrAfter="2018-09-10T12:30:19.690Z">
<saml2:AudienceRestriction>
<saml2:Audience>www.successfactors.com</
saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
With the SAML assertion, you can now call API oauth/token to request a Bearer token for authentication.
The API returns the token type, expiration time in seconds, and the token value to authorize API requests. A Bearer
token expires in 24 hours. Here is a sample request:
URI https://<hostname>/oauth/token
Sample response:
{
"access_token": "eyJ0b2tlbkNvbnRlbnQ***ZMm5Tdz0ifQ==",
"token_type": "Bearer",
"expires_in": 86399
}
URI https://<hostname>/oauth/validate
A valid token returns status 200 OK in the header. The response body contains the access token, token type, and
expiry time in seconds. Example:
{
"access_token": "<Your Bearer token>",
"token_type": "Bearer",
"expires_in": 86312
}
Sometimes a system is changed in a way that leads to an API breaking. More often than not, such incompatible
changes are made during configuration of the system and not by the API consumers. Take a look at this list to see
what actions could lead to an incompatible change - by avoiding these actions in the first place, you should be free
of incompatible changes in your system.
● Removing any field that is exposed by an API from the MDF object definition or HRIS succession data model
will break that API
● Changing the visibility of any field that is exposed by an API in the MDF object definition or HRIS succession
data model from visible/enabled to invisible/none will break that API
● Removing permissions or provisioning settings for OData APIs will break the API
● Renaming the identifier of customString field in the succession datamodel - this breaks the API because
technically what is actually happening is the deletion of the customString field and creation of a new one.
In contrast to these incompatible changes, compatible changes will not break the APIs. Some examples of
compatible changes include:
● Changing the RBP setting for a field from read-only to view not allowed
If your're having problems with duplicate records, take a look at these tips.
Picklists
When you use a picklist label (picklistLabels) in a $filter query, specify the locale to avoid duplicate records.
Background: When a picklist has more than one locale and this is not defined in a query, all the locales will be
queried. This could result in duplicate records.
$filter=<entity>Nav/picklistLabels/locale eq 'en_US'
Paging
If pages have duplicates or missing records, one possible reason is undefined sorting. Try using orderBy on the
whole business key to fix this issue.
Upsert statements have a single record error message behavior; for each record that fails, an error message is
issued.
Payload Information:
Sample Code
[
{
"__metadata" : {
"uri" : "https://<Hostname>/odata/v2/
PerPersonal(personIdExternal='aaaa',startDate=datetime'1990-01-01T00:00:00')",
"type" : "SFOData.PerPersonal"
Response:
Sample Code
<feed>
<entry>
<content type="application/xml">
<m:properties>
<d:key m:null="true" />
<d:status>OK</d:status>
<d:editStatus>UPSERTED</d:editStatus>
<d:message m:null="true" />
<d:index m:type="Edm.Int32">0</d:index>
<d:httpCode m:type="Edm.Int32">200</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
</content>
</entry>
<entry>
<content type="application/xml">
<m:properties>
<d:key>PerPersonal/personIdExternal=dddd,PerPersonal/
startDate=1990-01-01T00:00:00.000-05:00</d:key>
<d:status>ERROR</d:status>
<d:editStatus m:null="true" />
<d:message>Field Gender is Invalid. Field Gender takes "M" / "m" for Male, "F" /
"f" for Female and " " for No Gender. Failed record info: {PerPersonal/
startDate=1990-01-01T00:00:00.000-05:00, PerPersonal/personIdExternal=dddd,
PerPersonal/initials=LT, PerPersonal/gender=H, PerPersonal/namePrefix=LT}.</
d:message>
<d:index m:type="Edm.Int32">1</d:index>
<d:httpCode m:type="Edm.Int32">500</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
</content>
</entry>
<entry>
<content type="application/xml">
<m:properties>
<d:key m:null="true" />
<d:status>OK</d:status>
<d:editStatus>UPSERTED</d:editStatus>
<d:message m:null="true" />
<d:index m:type="Edm.Int32">2</d:index>
<d:httpCode m:type="Edm.Int32">200</d:httpCode>
<d:inlineResults m:type="Bag(SFOData.UpsertResult)" />
</m:properties>
Describes how deleted objects in $expand can be handled as a change in certain Employee Central OData APIs.
The standard behavior in Employee Central OData API queries, such as the one below, is to ignore any records that
have been deleted.
To override this standard behavior, go to Admin Center Manage Employee Central Settings , and turn on the
switch for Consider Deletion of Expanded Entities As A Change.
Example
This query shows you any changes to the e-mail records for the employee and time frame specified:
https://<hostname>/odata/v2/PerPerson?$expand=emailNav&$filter=personIdExternal eq
'106015' and emailNav/lastModifiedDateTime ge
datetimeoffset'2000-01-01T01:00:00.000Z'
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://qaautocand-api.lab-rot.ondemand.com/
odata/v2/PerPerson('106015')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "106015",
....
"emailNav": {
"results": [
{
"__metadata": {
"uri": "https://qaautocand-api.lab-
rot.ondemand.com/odata/v2/
PerEmail(emailType='8448',personIdExternal='106015')",
"type": "SFOData.PerEmail"
},
"emailType": "8448",
"personIdExternal": "106015",
"lastModifiedDateTime": "/
Date(1441833666000+0000)/",
"createdDateTime": "/Date(1441833666000+0000)/",
"createdOn": "/Date(1441833666000)/",
"emailAddress": "Jack.McAfee@bestrun.com",
"customDouble1": null,
"isPrimary": true,
"customDate1": null,
"lastModifiedBy": "admindlr",
"customString5": null,
"customString4": null,
"customString3": null,
"customString2": null,
"customString8": null,
"customString7": null,
"customString6": null,
"lastModifiedOn": "/Date(1441833666000)/",
"customString1": null,
"createdBy": "admindlr",
"customLong1": null,
"customString3Nav": {
"__deferred": {
"uri": "https://qaautocand-api.lab-
rot.ondemand.com/odata/v2/PerEmail(emailType='8448',personIdExternal='106015')/
customString3Nav"
}
},
....
}
]
}
}
]
}
}
Without "Consider Deletion of Expanded Entities As A Change" and after an agent has deleted the e-mail
information for the employee in the system
Let's run the query again, https://<hostname>/odata/v2/PerPerson?$expand=emailNav&
$filter=personIdExternal eq '106015' and emailNav/lastModifiedDateTime ge
datetimeoffset'2000-01-01T01:00:00.000Z'
Sample Code
Response
{
"d": {
"results": []
}
}
All records of the employee have been removed. This causes issues - if instead of e-mail information, for
example, an address or a dependent is deleted - the system responds in the same way to the lastmodified
query. Instead of updating the response with an empty value for deleted object, all records are removed.
Example
With "Consider Deletion of Expanded Entities As A Change" and after an agent has deleted the e-mail
information for the employee in the system
Sample Code
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://qaautocand-api.lab-rot.ondemand.com/
odata/v2/PerPerson('106015')",
"type": "SFOData.PerPerson"
},
"personIdExternal": "106015",
"lastModifiedDateTime": "/Date(1441580677000+0000)/",
"createdDateTime": "/Date(1441568467000+0000)/",
"createdOn": "/Date(1441568467000)/",
"countryOfBirth": "AUS",
"lastModifiedBy": "admindlr",
"dateOfBirth": "/Date(-520387200000)/",
"perPersonUuid": "BE297AA97D004D29ADCBE89546F323EA",
"lastModifiedOn": "/Date(1441580677000)/",
"createdBy": "admindlr",
"regionOfBirth": null,
"personId": "339",
....
"emailNav": {
"results": []
}
}
]
}
}
17.9 How to have more than one pay component on the same
pay date
When an employee is due more than one non-recurring payment on the same pay date, an additional business key,
sequenceNumber, can be added to EmpPayCompNonRecurring.
You can configure the data model to add this field as an additional business key (as long as it is upsertable in the
data model).
Related Information
To ignore inactive users in your EC OData API calls, you have to explicitly select them in the User entity using the
property status. Terminated employees will still appear on entities such as PerPerson or EmpJob so the only way to
exclude them is by using the User entity and filtering by the property status which supports the values "t / f / T /
F / e / d" or "active / inactive / active_external / inactive_external / active_external_suite /
inactive_external_suite".
If you want to link to a custom MDF object, you will need a combination of UPSERT and POST. This is because the
upserts for MDF objects and EC OData APIs are not compatible.
Example
Let's assume that you want to add information about where an employee's office is located in the employee job
information. To do this, you will need the following:
Note
This is a prerequisite. Even if you update the EmpJob entity with a business key for office and then
upsert, the office will not be created. Updating the entity with the key allows you to link to an existing
object only.
2. Add the business key for the MDF object (which already exists) to EmpJob
Here are some tips on how to improve API performance and consumption:
Too many deep filters in a query Make sure you are using all the direct available fields in the en
tity
$expand for unnecessary navigations Do you really need those navigations? Are they directly availa
ble fields in the entity.
Merging API calls using navigation (if this is negatively impact Use $BATCH instead
ing performance)
Calculated fields in expanded entities in empCompensation Use rules instead in custom fields to persist the values
Calculated and empCompensationGroupSumCalculated
Writing data using incremental update Use full purge instead, if possible.
Writing data including triggering of rules for job information Disable Triggering of Rules in Company and Logo settings and
(EmpJob) calculate values for rules in consumer.
If you're getting roundtrip errors, this might be down to a conflict between the user locale and the fileLocale.
You can resolve this problem by making sure that your user locale and fileLocale are both en_US. Take a look
atfileLocale [page 56] for more information.
A side effect is sometimes triggered when a consumer performs a write operation; the side effects triggered by the
write operation will be different in the OData API to the side effects triggered in UI. You will find that sometimes the
difference in the side effects is profound - for example a workflow triggered in the UI but not in the OData API. In
other cases, the difference in the side effects is minor such as when an HRIS Sync is triggered directly in the UI but
indirectly in the API/imports indirectly via an asynchronous Sync Job sending e-mails when started and finished.
Take a look a these examples to get an overview of what side effects are triggered when:
● Triggering of business rules: The only OData APIs that trigger business rules are EmpJob and EmpTermination
● Triggering of HRIS Sync: Each upsert on HRIS entities triggers the HRIS sync report as an asynchronous job.
This only happens if no other HRIS sync job is running.
● Triggering of Intelligence Services (Smart Event): Remember that Smart Events are triggered by rules only. The
only entity that can trigger them is EmpJob.
● Triggering of hard coded business logic in Position Management, Global Assignment and Time Off: An
asynchronous process synchronizes Postion and Time-off data in these products and this event is hard-coded
and monitored by provisioning. The only OData API that can trigger this hard-coded business logic is EmpJob.
In contrast to the standard OData API $batch processing specification, a partial upsert failure reverts the
transaction for the current changeset.
In the standard OData API $batch calls, the changeset response code is HTTP 200 even when one or more of the
records in the payload fail. In a use case such as new hire, using $batch with this standard behavior means that
some users are not created, some are created but in either case HTTP 200 is the resulting changeset response
code and behavior.
In the upsert request, the parameter strictTransactionIsolate lets you influence this behavior. When
strictTransactionIsolate=true for a $batch upsert multiple records request, the behavior is as follows:
The behavior of a normal upsert remains → when upserting multiple records and one fails, the other records
work and HTTP 200 is the response code.
Related Information
UpsertSingle allows the success of records even if some records fail in a multiple record upsert. UpsertSingle is
used for records with inline properties and records that do not support full purge.
Changeset rollback reverts the entire transaction when there is a partial upsert failure.
Rollback changeset in $batch true When one record fails, changeset will roll
back
Full purge entities, upsertMultiple true This parameter makes no sense for enti
ties that do not support full purge
Related Information
If you're puzzled by the results you get from queries such as https://<hostname>.com/odata/v2/EmpJob?
$filter=standardHours+gt+'20'&fromDate=2000-12-31, then take a quick look at the examples here
$filter with toDate and fromDate [page 40].
Hyperlinks
Some links are classified by an icon and/or a mouseover text. These links provide additional information.
About the icons:
● Links with the icon : You are entering a Web site that is not hosted by SAP. By using such links, you agree (unless expressly stated otherwise in your agreements
with SAP) to this:
● The content of the linked-to site is not SAP documentation. You may not infer any product claims against SAP based on this information.
● SAP does not agree or disagree with the content on the linked-to site, nor does SAP warrant the availability and correctness. SAP shall not be liable for any
damages caused by the use of such content unless damages have been caused by SAP's gross negligence or willful misconduct.
● Links with the icon : You are leaving the documentation for that particular SAP product or service and are entering a SAP-hosted Web site. By using such links, you
agree that (unless expressly stated otherwise in your agreements with SAP) you may not infer any product claims against SAP based on this information.
Example Code
Any software coding and/or code snippets are examples. They are not for productive use. The example code is only intended to better explain and visualize the syntax and
phrasing rules. SAP does not warrant the correctness and completeness of the example code. SAP shall not be liable for errors or damages caused by the use of example
code unless damages have been caused by SAP's gross negligence or willful misconduct.
Gender-Related Language
We try not to use gender-specific word forms and formulations. As appropriate for context and readability, SAP may use masculine word forms to refer to all genders.
SAP and other SAP products and services mentioned herein as well as
their respective logos are trademarks or registered trademarks of SAP
SE (or an SAP affiliate company) in Germany and other countries. All
other product and service names mentioned are the trademarks of their
respective companies.