지금 지원 담당자와 채팅
지원 담당자와 채팅

Starling Connect Hosted - One Identity Manager Administration Guide

About this guide One Identity Starling Connect overview One Identity Starling Supported cloud applications Working with connectors Connector versions Salesforce Facebook Workplace SAP Cloud Platform JIRA Server RSA Archer SuccessFactors Amazon S3 AWS ServiceNow Dropbox Crowd Atlassian JIRA Confluence Trello Box Pipedrive SuccessFactors HR NutShell Insightly Egnyte SugarCRM Oracle IDCS Statuspage Zendesk Sell Workbooks DocuSign Citrix ShareFile Zendesk Azure AD Google Workspace Concur Tableau GoToMeeting Coupa AWS Cognito Okta DataDog Hideez Opsgenie Informatica Cloud Services AppDynamics Marketo Workday HR OneLogin PingOne Aha! SAP Litmos HackerRank Slack ActiveCampaign Webex Apigee Databricks Hive PagerDuty Dayforce Smartsheet Pingboard SAP Cloud for Customer Azure Infrastructure Oracle Fusion Cloud Majesco LuccaHR OpenText Appendix: Creating a service account in Google Workspace Appendix: Setting a trial account on Salesforce Registering the application, providing necessary permissions, retrieving Client Id and Client Secret from the Azure AD tenant Generating a private key for service account in GoToMeeting Configuring Amazon S3 AWS connector to support entitlements for User and Group Configuring Box connector to support additional email IDs for users One Identity Manager E2E integration needs for Hideez connector Configuring custom attributes for ServiceNow v.1.0 Configuring custom attributes for Coupa v.1.0 Configuring custom attributes in connectors Disabling attributes Configuring a connector that uses the consent feature Synchronization and integration of Roles object type with One Identity Manager Synchronization and integration of Workspaces object type with One Identity Manager Synchronization and integration of Products object type with One Identity Manager User centric membership Creating multi-valued custom fields in One Identity Manager Synchronization and assignment of PermissionSets to Users with One Identity Manager Connectors that support password attribute in User object Connectors that do not support special characters in the object ID Creating an app for using SCIM on Slack Enterprise Grid Organization Creating a Webex integration application, providing necessary scopes, retrieving Client Id and Client Secret Retrieving the API key from Facebook Workplace Outbound IP addresses Values for customer-specific configuration parameters in Workday HR connector Initiate an OAuth connection to SuccessFactors Creating custom editable/upsertable attributes in Successfactors employee central Custom Foundation Objects in Successfactors HR connector Configuring additional datetime offset in connectors How to Create custom attribute for Users in SuccessFactors portal SAP Cloud for Customer - Steps to add custom fields at One Identity Manager attributes Creating Service Principal to authenticate the Azure resource management REST APIs for Azure Infrastructure connector

Connector limitations

The WorkdayHR connector allows you to connect WorkdayHR with One Identity Starling enabling you to take advantage of the features and products available with Starling Connect that complement and enhance WorkdayHR’s cloud-based human resource management services.

Supervisor configuration parameters

To configure the connector, following parameters are required:

  • Connector name

  • Tenant

  • API Version

  • Username

  • Password
  • WorkdayHR instance URL (Cloud application's instance URL used as target URI in the payload)

  • Customer-specific configuration parameters must be configured based on the Workday HR instance.

    • OrganizationTypeID for Department

    • OrganizationTypeID for Division

    • OrganizationTypeID for Desk

    • OrganizationTypeID for CostCenter

    • OrganizationTypeID for Company

    • OrganizationTypeID for Region

    • OrganizationTypeID for Personal Assistant

    • OrganizationTypeID for Asset Class

    • OrganizationTypeID for DepartmentHead

    • OrganizationSubTypeID for Department

    • OrganizationSubTypeID for Division

    • OrganizationSubTypeID for Desk

    • OrganizationSubTypeID for CostCenter

    • OrganizationSubTypeID for Company

    • OrganizationSubTypeID for Region

    • OrganizationSubTypeID for Personal Assistant

    • OrganizationSubTypeID for Asset Class

    • OrganizationRoleID for Department Head

    • CustomIDTypeID for Date Joined Industry

    • CustomIDTypeID for Code Of Conduct

    • CustomIDTypeID for External ID

    • Certification Names

    • Additional Names Types

    • OrganizationType reference ID for Location Hierarchy

    • SAMAccount ID Type

    • Mobile Device Type ID

    • Landline Device Type ID

    • OrgTypeID for Custom Organizations

    • OrgSubTypeID for Custom Organizations

    • OrganizationTypeID for Matrix

    • OrganizationSubTypeID for Matrix

    • Future Hire Interval

    • Business Process Types

    • Retry Server Call

      IMPORTANT:

      • Retry Server Call is used to make a retry request to WorkdayHR target instance in-case of failures related to the instance being unreachable at a given point in time.
      • By Default the value is set to false. The customer can enable it in-case such failures are encountered.
    • Increase Request Time out

      IMPORTANT:The default request time out is 100 seconds, please enable this option if time out exception occurs.

  • Use Change Contact Information API for Update.

    IMPORTANT:

    • This configuration defines which update API will be used to update the contact details including email, cell phone and business phone. When the configuration is enabled the Change_Work_Contact_Information API and Change_Home_Contact_Information API would be used to update the work and home contact information respectively.

    • By default, the configuration would be disabled and the update will use Maintain_Contact_Information API.

    • For additional information on update configurations in One Identity Manager, refer Additional configuration for update.

NOTE:

Supported objects and operations

Employees

Table 248: Supported operations for Employees

Operation

VERB

Get Employee GET
Get All Employees GET

Update Employee

PUT

NOTE:

  • The Get Employee endpoint fetches the primary work email, primary cellphone and landline for home and work. The Update Employee endpoint sets the default value for email to type work and public to false, when the values for type and public flag are not provided. IsPrimary is always set to true.

Locations

Table 249: Supported operations for Locations

Operation

VERB

Get Location GET
Get All Locations GET

CustomOrgs

Table 250: Supported operations for CustomOrgs

Operation

VERB

Get CustomOrg GET
Get All CustomOrgs GET

NOTE:

  • CustomOrgs is a single endpoint that provides information on Departments, SubDivisions, Divisions, Desks, LegalEntities and CostCenters.
  • To extract specific entities from CustomOrgs you must create the mappings, workflow steps and set up the filter.
  • For more information, see OneIM_CloudHRSystems_Administration guide on the Support site.

JobClassifications

Table 251: Supported operations for JobClassifications

Operation

VERB

Get JobClassification GET
Get All JobClassifications GET

FutureDatedEmployees

Table 252: Supported operations for FutureDatedEmployees

Operation

VERB

Get FutureDatedEmployees GET
Get All FutureDatedEmployees GET

NOTE:

  • The Get All FutureDatedEmployees endpoint is dependent on the Starling UI config parameters Business process type and Future Hire Interval.

  • The FutureDatedEmployees endpoint does not support any filters.

DeltaSyncEmployees

Table 253: Supported operations for DeltaSyncEmployees

Operation

VERB

Get DeltaSyncEmployees GET
Get All DeltaSyncEmployees GET GET

NOTE: This endpoint is only for supporting the delta sync.

Positions

Table 254: Supported operations for Positions

Operation

VERB

Get Position GET
Get All Position GET

NOTE: This Endpoint requires additional permission for the API.

Mappings

Endpoint Mapping

Table 255: Target system objects mapping
Target system objects SCIM endpoints
Workers Employees
Locations Locations
Organizations CustomOrgs

Job Classification Groups

JobClassifications

Attributes Mapping

Different mappings associated with this connector are listed in the tables below:

Table 256: Employees mapping
SCIM parameter WorkDayHR parameter

AdditionalNames.details[]

Additional_Name_Type_ID;First_Name;Last_Name

Addresses.country

Worker/Worker_Data/Personal_Data/Contact_Data/Address_Data[@Defaul ted_Business_Site_Address=1]/Country_Reference/ID[@wd:type='ISO_31 66-1_Alpha-3_Code']/text()

Addresses.countryCode2

wd:Worker/Worker_Data/Personal_Data/Contact_Data/Address_Data[@Defaulted_Business_Site_Address=1]/Country_Reference/ID[@wd:type='ISO_31 66-1_Alpha-2_Code']/text()

Addresses.locality

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Addre ss_Data[@wd:Defaulted_Business_Site_Address=1]/wd:Municipality/text()

Addresses.postalCode

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/Address_ Data[@Defaulted_Business_Site_Address=1]/Postal_Code/text()

Addresses.region

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Addre ss_Data[@wd:Defaulted_Business_Site_Address=1]/wd:Country_Region_Descriptor/text()

Addresses.streetAddress

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Addre ss_Data[@wd:Defaulted_Business_Site_Address=1]/@wd:Formatted_Address

assetClass

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_AssetClass>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@wd:type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_AssetClass>']/wd:Organization_Reference/wd:ID[@wd:type='WID']/text()

businessUnitWID

wd:Worker/wd:Worker_ Data/wd:Organization_Data/wd:Worker_Organization_Data/wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text()='Business_Unit'/ID [@type='WID']/text()

Certificates.certificateDetails[]

Certification_Name;Certification_ID;Certification_Skill_ID;Issued_Date;Expiry_Date

codeOfConduct

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<CodeOfConductValue>']/wd:ID/text()

company

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organiz

ation_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Company>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Company>']/Organization_Reference/ID[@type='WID']/text()

costCenter

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_CostCenter>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_CostCenter>']/Organization_Reference/ID[@type='WID']/text()

dateJoinedIndustry

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<DateJoinedIndustryValue>']/wd:ID/text()

dateOfBirth

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Birth_Date/text()

daysUnemployed

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/daysUnemployed/text()

department

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_for_Department>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Department>']/Organization_Reference/ID[@type='WID']/text()

departmentHeadID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_DepartmentHead>' and string(wd:Organization_Support_Role_Data/wd:Organization_Support_Role/wd:Organization_Role_Reference/wd:ID[@wd:type='Organization_Role_ID']/text())='<OrganizationRoleID_For_DepartmentHead>' and string(wd:Organization_Support_Role_Data/wd:Organization_Support_Role/Organization_Role_Data/Assignment_From/text())='assigned']/wd:Organization_Support_Role_Data/wd:Organization_Support_Role/wd:Organization_Role_Data/Worker_Reference/ID[@wd:type='WID']/text()

desk

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Desk>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Desk>']/Organization_Reference/ID[@type='WID']/text()

DisplayName

wd:Worker/wd:Worker_Descriptor/text()

division

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_for_Division>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Division>']/Organization_Reference/ID[@type='WID']/text()

Emails.value

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Email _Address_Data/wd:Email_Address/text()

endDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:End_Date/text()

estimatedLeaveEndDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Estimated_Leave_End_Date/text()

externalID

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<ExternalIDValue>']/wd:ID/text()

externalIDDescription

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<ExternalIDValue>']/wd:Custom_Description/text()

externalIDType

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data/wd:ID_Type_Reference[string(wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<ExternalIDValue>']/wd:ID[@wd:type='Custom_ID_Type_ID']/text()

fullTimeEquivalentPercentage

/wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Data/wd:Full_Time_Equivalent_Percentage/text()

Gender

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Gender_Reference/wd:ID[@wd:type="Gender_Code"]/text()

hireDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Hire_Date/text()

hireReason

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Hire_Reason_Reference/wd:ID/[@wd:type='General_Event_Subcategory_ID']/text()

hireRescinded

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/hireRescinded/text()

Id

wd:Worker/wd:Worker_Reference/wd:ID[@wd:type='WID']/text()

isContingentWorker

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd :Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@w d:type='Contingent_Worker_Type_ID'

isEmployee

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd :Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@w d:type='Employee_Type_ID'

jobClassificationReference.id

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data

[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Classification_Summary_Data/wd:Job_Classification_Reference/wd:ID[@wd:type='WID']

jobClassificationReference.referenceID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data

[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Classification_Summary_Data/wd:Job_Classification_Reference/wd:ID[@wd:type='Job_Classification_Reference_ID']

jobClassifications.id

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Classification_Summary_Data/wd:Job_Group_Reference/wd:ID[@wd:type='WID']

jobFamilyID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Data/wd:Job_Profile_Summary_Data/wd:Job_Family_Reference/wd:ID[@wd:type='Job_Family_ID']/text()

jobProfileID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Profile_Summary_Data/wd:Job_Profile_Reference/wd:ID[wd:type='Job_Profile_ID']/text()

jobTitle

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Business_Title/text()

lastHierarchicalManagerWID

wd:Worker/wd:Worker_

Data/wd:Management_Chain_Data/wd:Worker_Supervisory_Management_Chain_Data/wd:Management_Chain_Data/wd:Manager/wd:Worker_Reference/wd:ID[@wd:type='WID']/text()

leaveAbsenceType

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Leave_of_Absence_Type_Reference/wd:ID[@wd:type='Leave_of_Absence_Type_ID']/text()

leaveEndDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Leave_End_Date/text()

leaveStartDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Leave_Start_Date/text()

localFirstName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Local_Name_Detail_Data/wd:First_Name/text()

localLastName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Local_Name_Detail_Data/wd:Last_Name/text()

localTerminationReasonID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Local_Termination_Reason_Reference/wd:ID/[@wd:type='Local_Termination_Reason_ID']/text()

managementLevelID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Profile_Summary_Data/wd:Management_Level_Reference/wd:ID[wd:type='Management_Level_ID']/text()

managerEmployeeID

wd:Worker/wd:Worker_ Data/wd:Employment_Data/wd:Worker_ Job_Data[@wd:Primary_ Job=1]/wd:Position_Data/wd:Manager_as_ of_last_detected_manager_change_ Reference/wd:ID[@wd:type='Employee_ID']/text()

managerId

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Manager_as_of_last_detected_manager_change_Reference/wd:ID[@wd:type='WID']/text()

Name.FamilyName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Legal_Na me_Data/wd:Name_Detail_Data/wd:Last_Name /text()

Name.Formatted

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Legal_Na me_Data/wd:Name_Detail_Dat/@wd:Formatted_Name

Name.GivenName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Legal_Na me_Data/wd:Name_Detail_Data/wd:First_Name/text()

notReturning

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/notReturning/text()

onLeave

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data/wd:On_Leave

OrganizationSubTypeID for Cost Center Hierarchy

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID'])/text()=’{value_for_the_UI_config_field_OrganizationSubTypeID for Cost Center Hierarchy}']/Organization_Type_Reference/wd:ID[@type='Organization_subType_ID']/text()

OrganizationSubTypeID for Matrix

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Type_Reference/wd:ID[@type='Organization_Type_ID'])/text()='{value_for_the_UI_config_field_OrganizationTypeID for Matrix}']/Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text()

OrganizationTypeID for Cost Center Hierarchy

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_type_ID'])/text()=’{value_for_the_UI_config_field_OrganizationTypeID for Cost Center Hierarchy}']/Organization_Type_Reference/wd:ID[@type='Organization_Type_ID']/text()

OrganizationTypeID for Matrix

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID'])/text()='{value_for_the_UI_config_field_OrganizationSubTypeID for Matrix}']/Organization_Type_Reference/wd:ID[@type='Organization_Type_ID']/text()

OrgSubTypeID for Custom Organizations

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID'])/text()=’{value_for_the_UI_config_field_OrgSubTypeID for Custom Organizations}']/Organization_Type_Reference/wd:ID[@type='Organization_Type_ID']/text()

OrgTypeID for Custom Organizations

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Type_Reference/wd:ID[@type='Organization_Type_ID'])/text()=’{value_for_the_UI_config_field_OrgTypeID for Custom Organizations}']/Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text()

originalHireDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Orignial_Hire_Date/text(

personalAssistantID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_PersonalAssistant>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@wd:type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_PersonalAssistant>']/wd:Organization_Reference/wd:ID[@wd:type='WID']/text()

PhoneNumbers.businessPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_ID'])=<Landline_ Device_Type_ID>]/wd:Phone_Number/text() wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Home']

PhoneNumbers.cellPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_ ID'])=<Mobile_ Device_Type_ID>]/wd:Phone_Number /text() wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Home']

PhoneNumbersWork.businessPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_ID'])=<Landline_ Device_Type_ID>]/wd:Phone_Number/text()

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Work']

PhoneNumbersWork.cellPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_

ID'])=<Mobile_Device_Type_ID>]/wd:Phone_Number/text()

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Work']

positionReferenceWID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Position_Reference/wd:ID[@wd:type='WID']

preferredCommunicationLanguageReference

/wd:Worker/wd:Worker_Data/wd:User_Account_Data/wd:Preferred_Communication_Language_Reference/text()

preferredFirstName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:First_Name/text()

preferredLastName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Last_Name/text()

preferredLastNameSuffix

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Suffix_Data/wd:Hereditary_Suffix_Reference/wd:Descriptor/text()

preferredMiddleName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Middle_Name/text()

primaryTerminationCategoryID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Primary_Termination_Category_Reference/wd:ID/[@wd:type='Termination_Category_ID']/text()

primaryTerminationSubCategoryID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Primary_Termination_Reason_Reference/wd:ID/[@wd:type='Termination_Subcategory_ID']/text()

region

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Region>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@wd:type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Region>']/wd:Organization_Reference/wd:ID[@wd:type='WID']/text()

rehire

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/rehire/text()

retired

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Retired/text()

returnUnknown

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/returnUnknown/text()

samAccountName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<SAMAccountID>']/wd:ID/text()

startDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Start_Date/text()

status

Active (A): wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Active/text()='1' Or Terminated (L): wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Terminated/text()='1'

terminationDate

wd:Worker/wd:Worker_Data/wd:Employment_Data[string(wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@wd:type)='Employee_Type_ID']/wd:Worker_Status_Data/Termination_Date/text() or wd:Worker/wd:Worker_Data/wd:Employment_Data[string(wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@wd:type)='Contingent_Worker_Type_ID']/wd:Worker_Contract_Data/Contract_End_Date/text()

terminationLastDayOfWork

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Termination_Last_Day_Of_Work/text()

title

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Position_Title/text()

userId

wd:Worker/wd:Worker_Data/wd:User_ID/text()

userLanguageReference

/wd:Worker/wd:Worker_Data/wd:User_Account_Data/wd:User_Language__Reference/text()

UserName

wd:Worker/wd:Worker_Data/wd:User_ID/text()

workerId

wd:Worker/wd:Worker_Data/wd:Worker_ID/text()

workerType

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd

:Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID[@w d:type='Employee_Type_ID' Or @wd:type='Contingent_Worker_Type_ID']/text()

Table 257: FutureDatedEmployees Mapping

SCIM Parameter

WorkDayHR Parameter

managerID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data/wd:Organization_Support_Role_Data/wd:Organization_Support_Role/wd:Organization_Role_Data/wd:Worker_Reference/wd:ID[@wd:type='WID']

NOTE:

  • All the other SCIM Parameter mapping is same as the Employees Mapping.
Table 258: DeltaSyncEmployees Mapping
   

NOTE:

  • All the SCIM Parameter mapping is same as the Employees Mapping.
Table 259: Locations Mapping

SCIM Parameter

WorkDayHR Parameter

Addresses.country

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Refer ence/ID[@type='ISO_3166-1_Alpha-3_Code']/text()

Addresses.countryCode2

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Reference/ID[@type='ISO_3166-1_Alpha-2_Code']/text()

Addresses.locality

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Municipality/

text()

Addresses.postalCode

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Postal_Code/t ext()

Addresses.region

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Region_Descriptor/text()

Addresses.streetAddress

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/@Formatted_Addre ss

addressLineData.addressData

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Address_Line_Data/text()

countryRegionCode2

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Region_Reference/wd:ID[@wd:type='ISO_3166-2_Code']

countryRegionCode

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Region_Reference/wd:ID[@wd:type='ISO_3166-2_Country-Region_Code']

citySubDivisionData.citySubdivisionData

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Submunicipality_Data/text()

Emails.value

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Email_Address_Data/wd:Email_A ddress/text()

fax

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Phone_Data[string(Phone_Devic e_Type_Reference/ID[@wd:type='Phone_Device_Type_ID']/text())='Fax']/wd:Phone_ Number/text()

Id

wd:Location/Location_Reference/ID[@type='WID']/text()

locationID

wd:Location/wd:Location_Data/wd:Location_ID/text()

name

wd:Location/wd:Location_Data/wd:Location_Name/text()

regionSubDivisionData.regionSubdivisionData

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Subregion_Data/text()

status

wd:Location/wd:Location_Data/wd:Inactive/text()

telephone

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Phone_Data[string(Phone_Devic e_Type_Reference/ID[@wd:type='Phone_Device_Type_ID']/text())='Landline']/wd:P hone_Number/text()

Table 260: CustomOrgs Mapping

SCIM Parameter

WorkDayHR Parameter

companyReferenceID

wd:Organization/wd:Organization_Data/wd:Supervisory_Data/wd:Organization_Assignments_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Company>']/Organization_Reference/ID[@wd:type='WID']/text()

costCenterID

wd:Organization/wd:Organization_Data/wd:Supervisory_Data/wd:Organization_Assignments_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_CostCenter>']/Organization_Reference/ID[@wd:type='WID']/text()

Id

wd:Organization/Organization_Reference/ID[@type='WID']/text()

lastModifiedOn

wd:Organization/wd:Organization_Data/Last_Updated_DateTime/text()

locationID

wd:Organization/wd:Organization_Data/Supervisory_Data/Location_Reference/ID[@type='WID']/text()

managerReferenceID

wd:Organization/wd:Organization_Data/wd:Manager_Reference/wd:ID[@wd:type='WID']/text()

Meta.LastModified

wd:Organization/wd:Organization_Data/Last_Updated_DateTime/text()

name

wd:Organization/wd:Organization_Data/wd:Name/text()

organizationCode

wd:Organization/wd:Organization_Data/wd:Organization_Code/text()

organizationOwnerID

wd:Organization/wd:Organization_Data/Organization_Owner_Reference/ID[@type='WID']/text()

organizationTypeReferenceID

wd:Organization/wd:Organization_Data/Organization_Type_Reference/ID[@type='Organization_Type_ID']/text()

referenceID

wd:Organization/wd:Organization_Data/wd:Reference_ID/text()

regionReferenceID

wd:Organization/wd:Organization_Data/wd:Supervisory_Data/wd:Organization_Assignments_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Region>']/Organization_Reference/ID[@wd:type='WID']/text()

status

wd:Organization/wd:Organization_Data/wd:Inactive/text()

type

wd:Organization/wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text()

includedInOrganizationReferenceWID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Position_Reference/wd:ID[@wd:type='WID']

Table 261: JobClassifications

SCIM Parameter

WorkDayHR Parameter

groupId

Job_Classification_Group/Job_Classification_Group_Data/ID/text()

groupName

Job_Classification_Group/Job_Classification_Group_Name_Data/ Job_Classification_Group_Name/text()

Id

Job_Classification_Group/Job_Classification_Group_Reference/ID[@type='WID']/text()

inActive

Job_Classification_Group/Job_Classification_Group_Data/Inactive/text()

Table 262: Positions

SCIM Parameter

WorkDayHR Parameter

ID

wd:Position/wd:Position_Reference/wd:Employment_Data/ID[@type='WID']/text()

jobPostingTitle

wd:Position/wd:Position_Data/wd:Position_Definition_Data/wd:Job_Posting_Title/text()

jobDescriptionSummary

wd:Position/wd:Position_Data/wd:Position_Definition_Data/wd:Job_Description_Summary/text()

positionID

wd:Position/wd:Position_Data/wd:Position_Definition_Data/wd:Position_ID/text()

Filter Resource

Workday Employee resource response does not provide 'meta.lastModified' in the response. This makes impossible to get the revision filtered employees list. The full employee list without revision filters will be too slow for frequent synchronizations. As a work-around for this the Workday HR connector has been modified to support filtering only on the Employees endpoint. Even though the intension to support filtering is only on 'meta.lastModified', the connector has been modified to support some more attributes for filtering. Below are the details on the supported attributes and operations on filter functionality on the Employee resource on the SCIM connector.

NOTE:

WorkdayHR supports two kind of updates -

  • Manual update- when an employee record is updated manually on workdayHR.

  • effective update - when an employee is updated manually with an effective date and workdayHR updates the record as the effective date is reached

A new endpoint DeltaSyncEmployees has been added to support these two updates using combination of two filters - meta.lastModified and manualupdate

Supported attributes for Filtering Employee Resource

Table 263: Supported attributes for Filtering Employee Resource
Attribute Supported Operations
addresses.country eq (equal to)
assetClass eq
company eq
costCenter eq
department eq
desk eq
division eq

futurehire

eq

meta.lastModified

gt (greater than)

ge (greater than or equal to)

personalAssistantID

eq

region

eq

status

eq

manualUpdate

eq

NOTE: As the WorkDayHR API supports only filtering of Active Employees, Status filter has been implemented to support only Active employees. Filtering of inactive employees is not supported. Valid values for Status filter is 'A' for active Employees.

NOTE: manualUpdate is only applicable for DeltaSyncEmployees endpoint

More information about Filtering Resource

  • As the Workday API supports only AND conditions in the request filter criteria, the connector has been implemented to support only AND in SCIM filter condition.

  • In the connector filter functionality, any invalid or non-supported filter criteria will be ignored in the filter. If no valid criteria found, then normal LIST employees will be carried out.

  • Due to timezone differences there is a considerable difference in the Workday returned date time data and the local date time date. Since the Workday documentation do not mention on the supported timezone, as a work around, 1 day is subtracted from current date time while implementing the filter in the Workday HR connector for meta.lastModified. Similarly 1 day is subtracted from the meta.lastModified value in the filter criteria while making a request to the target system.

  • The filter functionality searches generously for the filter condition and values instead of performing a greedy and strict match. For example: the meta.lastModified with below are some of the valid formats:

    filter=meta.lastModified gt xxxx-xx-xxTxx:xx:xx

    filter=meta.lastModified gt xxxx-xx-xx xx:xx:xx

    filter=meta.lastModified gt xxxx-xx-xxTxx:xx:xx.xxx

    filter=meta.lastModified gt "xxxx-xx-xxTxx:xx:xx"

    filter=meta.lastModified gt xxxx-xx-xx xx:xx:xxZ

    filter=meta.lastModified gt xxxx-xx-xxTxx:xx:xx.xxxZ

    filter=meta.lastModified gt 'xxxx-xx-xxTxx:xx:xx'

For more information about Filter Resource, see Workday documentation of filtering on Workers endpoints.

One IM Configuration for Delta Synchronization

Modifying the FullProjection process

  1. In Designer, locate the 'DPR_DPRProjectionStartInfo_Run_Synchronization' process click to edit it. Under 'Pre-script for generating' add the script as mentioned below:

    'Starling Delta Sync Handling (search sync project variables with their names staring with dprRevisionDate and put the corresponding revision data value in)

    Dim f = session.SqlFormatter

    Dim nameSchema as String

    Dim nameVariable as String

    Dim variableValue as String

    values("OverrideVariables") = ""

     

    'search project variables dprRevisionDate*

    Dim qVariables = Query _

    .From("DPRSystemVariable") _

    .Orderby("UID_DPRSystemVariable") _

    .Where( f.AndRelation( _

    f.Comparison("Name", "dprRevisionDate%", ValType.String, CompareOperator.Like, FormatterOptions.IgnoreCase), _

    f.UidComparison("UID_DPRSystemVariableSet", $UID_DPRSystemVariableSet$, CompareOperator.Equal))) _

    .Select("Name")

    Dim colVariables = Session.Source.GetCollection(qVariables)

     

    If colVariables.Count > 0 then

    'fetching revision data from last synchronization of that sync project configuration

    Dim qRevStore = Query _

    .From("DPRRevisionStore") _

    .Where( f.AndRelation( _

    f.UidComparison("UID_DPRProjectionConfig", $UID_DPRProjectionConfig$, CompareOperator.Equal), _

    f.UidComparison("UID_DPRSystemVariableSet", $UID_DPRSystemVariableSet$, CompareOperator.Equal))) _

    .Select("Value", "SchemaTypeKey")

     

    Dim colRevStore = Session.Source.GetCollection(qRevStore)

    Dim dictRevStore = new System.Collections.Generic.Dictionary(of String, String)()

     

    For Each elemRevStore As IEntity In colRevStore

    nameSchema = elemRevStore.GetValue("SchemaTypeKey").String 'Schema[FTP#C04A6567-9EAE-4121-973E-AF1EE514D728].Type[Employees]

    If string.IsNullOrEmpty(nameSchema) OrElse not nameSchema.Contains(".") then

    Continue For

    End If

    nameSchema = nameSchema.Split("."c)(1)

     

    dictRevStore.Add(nameSchema, elemRevStore.GetValue("Value").String)

    Next

     

    'put the revision date into the variables if available, else provide the revision data as 1900-01-01

    Dim lstVariables = new System.Collections.Generic.List(of String)()

    For Each elemVariable As IEntity In colVariables

    nameVariable = elemVariable.GetValue("Name").String 'e.g. dprRevisionDateEmployees

    nameSchema = string.Format("Type[{0}]", nameVariable.Trim().Substring(15)) 'e.g. Type[Employees]

     

    If dictRevStore.TryGetValue(nameSchema, variableValue) then

    values(nameVariable) = variableValue.Replace(" ", "T")

    Else

    values(nameVariable) = "1900-01-01"

    End If

    lstVariables.Add(nameVariable)

    Next

    values("OverrideVariables") = string.Join(";", lstVariables.ToArray())

    End If

  2. Under 'Run Synchronization' select 'Parameters' tab and provide the below script under 'OverrideVariables'.

    If not String.IsNullOrEmpty(values("OverrideVariables").ToString()) then

    Imports System.Data.Common

    Dim sb as DbConnectionStringBuilder = new DbConnectionStringBuilder(false)

    For each varName as String in values("OverrideVariables").ToString().Split(";"c)

    sb.Add(varName, values(varName).ToString())

    Next

    Value = sb.ConnectionString

    End if

  3. 'Commit to database' and then 'Compile database'.

Modifying the synchronization project

  1. Make sure that the local cache is turned off for the Synchronization project.

    NOTE: This is applicable for employees and DeltaSyncEmployees endpoint.

  2. Select the SCIM synchronization project and select 'Variables' to add a new variable similar to 'dprRevisionDateEmployees' (the variable name should be dprRevisionDate<schema name>).

  3. Create a new 'Schema Class' from the supported endpoints in the 'Target system'. For example: "Employees for Delta Sync".

  4. On the Schema Class set the System Filter: meta.LastModified gt $dprRevisionDate<Schema name>$. Under 'Select Objects' tab, use 'meta_lastModified' as the attribute, '>' as the operator and $dprRevisionDate<Schema name>$ as the text field value.

    NOTE:

    To get the all the updates from DeltaSyncEmployee Endpoint, please follow the additional step

    • Create two new 'Schema Class' from Employee in the 'Target system'. For example:

      "Manual Update Employees for Delta Sync" & "Effective Update Employees for Delta Sync"

    • On the respective Schema Classes set the System Filter: meta.LastModified gt

    $dprRevisionDateDeltaSyncEmployees$ and manualUpdate eq 'true' for manualUpdate, meta.LastModified gt

    $dprRevisionDateDeltaSyncEmployees$ and manualUpdate eq 'false' for effective update.

    Under 'Select Objects' tab, use 'meta_lastModified' as the attribute, '>' as the operator and $dprRevisionDateDeltaSyncEmployees$ as the text field value.

  5. As required, other supported attributes also can be added under filters.

  6. Create a new Mapping using the new Schema Class dialog box.

  7. Create a new Workflow using the new mapping. This workflow updates the existing records based on the revision filter.

  8. To improve the syncs performance, remove the update steps from the existing default Initial sync Work Flow.

  9. Create a new Startup Config using the new workflow. Select 'One Identity Manager' for the 'Synchronization in direction'. Use 'default variable set' for the 'Variable Set'.

  10. Use hotfix #33601 on One Identity Manager version 8.1.2 and 8.1.4.

  • It supports GET operation.
  • Currently, Update functionality is available only for the following attributes of the Employees object:

    NOTE:Update of phone information supports work and home based on the attribute being updated, phoneNumbersWork and phoneNumbers respectively.

    • cellPhone
    • businessPhone
    • email
    • username
    • SAMAccount ID (Custom ID for SAMAccount Name)

  • CREATE and DELETE operations are not supported by any object.

  • Any changes to the updatable employee attributes for contact information listed above will be performed effective immediately (EffectiveDate = today). Updates will only be successful if no future dated event is pending, that may conflict with the attribute update.

  • There is no meta.LastModified attribute available for Employees and Location endpoint. Delta sync could be performed by following the steps in One IM Configuration for Delta Synchronization.

  • When using futurehire filter, delta sync cannot be used as it will affect the future hire results returned from WorkdayHR API.

  • The target system WorkdayHR API supports:-

    • OR operation only within the same filter type.

    • AND operation only across different filter type.

    For example, costCenter and region belongs to Organization type. WorkdayHR API will perform OR operation and return employees that belong to either of the Organization. Conversely, in case of costCenter and country, WorkdayHR will perform AND operation and return employees that belong to Costcenter and Country.

Connector versions and features

The following subsections describe the different connector version(s) and features available with them.

Features available exclusively in Workday HR v.2.0

Following are the features that are available exclusively in Workday HRv.2.0:

  • The Employee endpoint is enhanced to support the PATCH operation to update the Employee details.

    NOTE:The supported attributes for Employee PATCH operation will be same as the UPDATE.

  • The Employee endpoint is enhanced to support the DELETE functionality for following attributes:

    • SamAccountName

    • Email

    • PhoneNumbers

    NOTE:Set the supported attributes value to blank in One Identity Manager to delete them from target system.

Connector versions and features

The WorkdayHR connector allows you to connect WorkdayHR with One Identity Starling enabling you to take advantage of the features and products available with Starling Connect that complement and enhance WorkdayHR’s cloud-based human resource management services.

Supervisor configuration parameters

To configure the connector, following parameters are required:

  • Connector name

  • Tenant

  • API Version

  • Username

  • Password
  • WorkdayHR instance URL (Cloud application's instance URL used as target URI in the payload)

  • Customer-specific configuration parameters must be configured based on the Workday HR instance.

    • OrganizationTypeID for Department

    • OrganizationTypeID for Division

    • OrganizationTypeID for Desk

    • OrganizationTypeID for CostCenter

    • OrganizationTypeID for Company

    • OrganizationTypeID for Region

    • OrganizationTypeID for Personal Assistant

    • OrganizationTypeID for Asset Class

    • OrganizationTypeID for DepartmentHead

    • OrganizationSubTypeID for Department

    • OrganizationSubTypeID for Division

    • OrganizationSubTypeID for Desk

    • OrganizationSubTypeID for CostCenter

    • OrganizationSubTypeID for Company

    • OrganizationSubTypeID for Region

    • OrganizationSubTypeID for Personal Assistant

    • OrganizationSubTypeID for Asset Class

    • OrganizationRoleID for Department Head

    • CustomIDTypeID for Date Joined Industry

    • CustomIDTypeID for Code Of Conduct

    • CustomIDTypeID for External ID

    • Certification Names

    • Additional Names Types

    • OrganizationType reference ID for Location Hierarchy

    • SAMAccount ID Type

    • Mobile Device Type ID

    • Landline Device Type ID

    • OrgTypeID for Custom Organizations

    • OrgSubTypeID for Custom Organizations

    • OrganizationTypeID for Matrix

    • OrganizationSubTypeID for Matrix

    • Future Hire Interval

    • Business Process Types

    • Retry Server Call

      IMPORTANT:

      • Retry Server Call is used to make a retry request to WorkdayHR target instance in-case of failures related to the instance being unreachable at a given point in time.
      • By Default the value is set to false. The customer can enable it in-case such failures are encountered.
    • Increase Request Time out

      IMPORTANT:The default request time out is 100 seconds, please enable this option if time out exception occurs.

  • Use Change Contact Information API for Update.

    IMPORTANT:

    • This configuration defines which update API will be used to update the contact details including email, cell phone and business phone. When the configuration is enabled the Change_Work_Contact_Information API and Change_Home_Contact_Information API would be used to update the work and home contact information respectively.

    • By default, the configuration would be disabled and the update will use Maintain_Contact_Information API.

    • For additional information on update configurations in One Identity Manager, refer Additional configuration for update.

NOTE:

Supported objects and operations

Employees

Table 248: Supported operations for Employees

Operation

VERB

Get Employee GET
Get All Employees GET

Update Employee

PUT

NOTE:

  • The Get Employee endpoint fetches the primary work email, primary cellphone and landline for home and work. The Update Employee endpoint sets the default value for email to type work and public to false, when the values for type and public flag are not provided. IsPrimary is always set to true.

Locations

Table 249: Supported operations for Locations

Operation

VERB

Get Location GET
Get All Locations GET

CustomOrgs

Table 250: Supported operations for CustomOrgs

Operation

VERB

Get CustomOrg GET
Get All CustomOrgs GET

NOTE:

  • CustomOrgs is a single endpoint that provides information on Departments, SubDivisions, Divisions, Desks, LegalEntities and CostCenters.
  • To extract specific entities from CustomOrgs you must create the mappings, workflow steps and set up the filter.
  • For more information, see OneIM_CloudHRSystems_Administration guide on the Support site.

JobClassifications

Table 251: Supported operations for JobClassifications

Operation

VERB

Get JobClassification GET
Get All JobClassifications GET

FutureDatedEmployees

Table 252: Supported operations for FutureDatedEmployees

Operation

VERB

Get FutureDatedEmployees GET
Get All FutureDatedEmployees GET

NOTE:

  • The Get All FutureDatedEmployees endpoint is dependent on the Starling UI config parameters Business process type and Future Hire Interval.

  • The FutureDatedEmployees endpoint does not support any filters.

DeltaSyncEmployees

Table 253: Supported operations for DeltaSyncEmployees

Operation

VERB

Get DeltaSyncEmployees GET
Get All DeltaSyncEmployees GET GET

NOTE: This endpoint is only for supporting the delta sync.

Positions

Table 254: Supported operations for Positions

Operation

VERB

Get Position GET
Get All Position GET

NOTE: This Endpoint requires additional permission for the API.

Mappings

Endpoint Mapping

Table 255: Target system objects mapping
Target system objects SCIM endpoints
Workers Employees
Locations Locations
Organizations CustomOrgs

Job Classification Groups

JobClassifications

Attributes Mapping

Different mappings associated with this connector are listed in the tables below:

Table 256: Employees mapping
SCIM parameter WorkDayHR parameter

AdditionalNames.details[]

Additional_Name_Type_ID;First_Name;Last_Name

Addresses.country

Worker/Worker_Data/Personal_Data/Contact_Data/Address_Data[@Defaul ted_Business_Site_Address=1]/Country_Reference/ID[@wd:type='ISO_31 66-1_Alpha-3_Code']/text()

Addresses.countryCode2

wd:Worker/Worker_Data/Personal_Data/Contact_Data/Address_Data[@Defaulted_Business_Site_Address=1]/Country_Reference/ID[@wd:type='ISO_31 66-1_Alpha-2_Code']/text()

Addresses.locality

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Addre ss_Data[@wd:Defaulted_Business_Site_Address=1]/wd:Municipality/text()

Addresses.postalCode

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/Address_ Data[@Defaulted_Business_Site_Address=1]/Postal_Code/text()

Addresses.region

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Addre ss_Data[@wd:Defaulted_Business_Site_Address=1]/wd:Country_Region_Descriptor/text()

Addresses.streetAddress

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Addre ss_Data[@wd:Defaulted_Business_Site_Address=1]/@wd:Formatted_Address

assetClass

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_AssetClass>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@wd:type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_AssetClass>']/wd:Organization_Reference/wd:ID[@wd:type='WID']/text()

businessUnitWID

wd:Worker/wd:Worker_ Data/wd:Organization_Data/wd:Worker_Organization_Data/wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text()='Business_Unit'/ID [@type='WID']/text()

Certificates.certificateDetails[]

Certification_Name;Certification_ID;Certification_Skill_ID;Issued_Date;Expiry_Date

codeOfConduct

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<CodeOfConductValue>']/wd:ID/text()

company

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organiz

ation_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Company>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Company>']/Organization_Reference/ID[@type='WID']/text()

costCenter

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_CostCenter>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_CostCenter>']/Organization_Reference/ID[@type='WID']/text()

dateJoinedIndustry

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<DateJoinedIndustryValue>']/wd:ID/text()

dateOfBirth

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Birth_Date/text()

daysUnemployed

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/daysUnemployed/text()

department

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_for_Department>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Department>']/Organization_Reference/ID[@type='WID']/text()

departmentHeadID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_DepartmentHead>' and string(wd:Organization_Support_Role_Data/wd:Organization_Support_Role/wd:Organization_Role_Reference/wd:ID[@wd:type='Organization_Role_ID']/text())='<OrganizationRoleID_For_DepartmentHead>' and string(wd:Organization_Support_Role_Data/wd:Organization_Support_Role/Organization_Role_Data/Assignment_From/text())='assigned']/wd:Organization_Support_Role_Data/wd:Organization_Support_Role/wd:Organization_Role_Data/Worker_Reference/ID[@wd:type='WID']/text()

desk

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Desk>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Desk>']/Organization_Reference/ID[@type='WID']/text()

DisplayName

wd:Worker/wd:Worker_Descriptor/text()

division

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_for_Division>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Division>']/Organization_Reference/ID[@type='WID']/text()

Emails.value

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Email _Address_Data/wd:Email_Address/text()

endDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:End_Date/text()

estimatedLeaveEndDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Estimated_Leave_End_Date/text()

externalID

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<ExternalIDValue>']/wd:ID/text()

externalIDDescription

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<ExternalIDValue>']/wd:Custom_Description/text()

externalIDType

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data/wd:ID_Type_Reference[string(wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<ExternalIDValue>']/wd:ID[@wd:type='Custom_ID_Type_ID']/text()

fullTimeEquivalentPercentage

/wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Data/wd:Full_Time_Equivalent_Percentage/text()

Gender

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Gender_Reference/wd:ID[@wd:type="Gender_Code"]/text()

hireDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Hire_Date/text()

hireReason

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Hire_Reason_Reference/wd:ID/[@wd:type='General_Event_Subcategory_ID']/text()

hireRescinded

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/hireRescinded/text()

Id

wd:Worker/wd:Worker_Reference/wd:ID[@wd:type='WID']/text()

isContingentWorker

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd :Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@w d:type='Contingent_Worker_Type_ID'

isEmployee

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd :Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@w d:type='Employee_Type_ID'

jobClassificationReference.id

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data

[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Classification_Summary_Data/wd:Job_Classification_Reference/wd:ID[@wd:type='WID']

jobClassificationReference.referenceID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data

[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Classification_Summary_Data/wd:Job_Classification_Reference/wd:ID[@wd:type='Job_Classification_Reference_ID']

jobClassifications.id

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Classification_Summary_Data/wd:Job_Group_Reference/wd:ID[@wd:type='WID']

jobFamilyID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Data/wd:Job_Profile_Summary_Data/wd:Job_Family_Reference/wd:ID[@wd:type='Job_Family_ID']/text()

jobProfileID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Profile_Summary_Data/wd:Job_Profile_Reference/wd:ID[wd:type='Job_Profile_ID']/text()

jobTitle

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Business_Title/text()

lastHierarchicalManagerWID

wd:Worker/wd:Worker_

Data/wd:Management_Chain_Data/wd:Worker_Supervisory_Management_Chain_Data/wd:Management_Chain_Data/wd:Manager/wd:Worker_Reference/wd:ID[@wd:type='WID']/text()

leaveAbsenceType

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Leave_of_Absence_Type_Reference/wd:ID[@wd:type='Leave_of_Absence_Type_ID']/text()

leaveEndDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Leave_End_Date/text()

leaveStartDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data[wd:On_Leave='1']/wd:Leave_Start_Date/text()

localFirstName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Local_Name_Detail_Data/wd:First_Name/text()

localLastName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Local_Name_Detail_Data/wd:Last_Name/text()

localTerminationReasonID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Local_Termination_Reason_Reference/wd:ID/[@wd:type='Local_Termination_Reason_ID']/text()

managementLevelID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Job_Profile_Summary_Data/wd:Management_Level_Reference/wd:ID[wd:type='Management_Level_ID']/text()

managerEmployeeID

wd:Worker/wd:Worker_ Data/wd:Employment_Data/wd:Worker_ Job_Data[@wd:Primary_ Job=1]/wd:Position_Data/wd:Manager_as_ of_last_detected_manager_change_ Reference/wd:ID[@wd:type='Employee_ID']/text()

managerId

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Manager_as_of_last_detected_manager_change_Reference/wd:ID[@wd:type='WID']/text()

Name.FamilyName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Legal_Na me_Data/wd:Name_Detail_Data/wd:Last_Name /text()

Name.Formatted

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Legal_Na me_Data/wd:Name_Detail_Dat/@wd:Formatted_Name

Name.GivenName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Legal_Na me_Data/wd:Name_Detail_Data/wd:First_Name/text()

notReturning

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/notReturning/text()

onLeave

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Leave_Status_Data/wd:On_Leave

OrganizationSubTypeID for Cost Center Hierarchy

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID'])/text()=’{value_for_the_UI_config_field_OrganizationSubTypeID for Cost Center Hierarchy}']/Organization_Type_Reference/wd:ID[@type='Organization_subType_ID']/text()

OrganizationSubTypeID for Matrix

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Type_Reference/wd:ID[@type='Organization_Type_ID'])/text()='{value_for_the_UI_config_field_OrganizationTypeID for Matrix}']/Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text()

OrganizationTypeID for Cost Center Hierarchy

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_type_ID'])/text()=’{value_for_the_UI_config_field_OrganizationTypeID for Cost Center Hierarchy}']/Organization_Type_Reference/wd:ID[@type='Organization_Type_ID']/text()

OrganizationTypeID for Matrix

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID'])/text()='{value_for_the_UI_config_field_OrganizationSubTypeID for Matrix}']/Organization_Type_Reference/wd:ID[@type='Organization_Type_ID']/text()

OrgSubTypeID for Custom Organizations

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID'])/text()=’{value_for_the_UI_config_field_OrgSubTypeID for Custom Organizations}']/Organization_Type_Reference/wd:ID[@type='Organization_Type_ID']/text()

OrgTypeID for Custom Organizations

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data[string(wd:Organization_Type_Reference/wd:ID/@type\)='Organization_Type_ID' and string(wd:Organization_Subtype_Reference/wd:ID/@type\)='Organization_Subtype_ID' and string(wd:Organization_Type_Reference/wd:ID[@type='Organization_Type_ID'])/text()=’{value_for_the_UI_config_field_OrgTypeID for Custom Organizations}']/Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text()

originalHireDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Orignial_Hire_Date/text(

personalAssistantID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_PersonalAssistant>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@wd:type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_PersonalAssistant>']/wd:Organization_Reference/wd:ID[@wd:type='WID']/text()

PhoneNumbers.businessPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_ID'])=<Landline_ Device_Type_ID>]/wd:Phone_Number/text() wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Home']

PhoneNumbers.cellPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_ ID'])=<Mobile_ Device_Type_ID>]/wd:Phone_Number /text() wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Home']

PhoneNumbersWork.businessPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_ID'])=<Landline_ Device_Type_ID>]/wd:Phone_Number/text()

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Work']

PhoneNumbersWork.cellPhone

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data[string(wd:Phone_Device_Type_ID/wd:ID[@wd:type='Phone_Device_Type_

ID'])=<Mobile_Device_Type_ID>]/wd:Phone_Number/text()

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Phone_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference/wd:ID[@wd:type='Communication_Usage_Type_ID'])='Work']

positionReferenceWID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Position_Reference/wd:ID[@wd:type='WID']

preferredCommunicationLanguageReference

/wd:Worker/wd:Worker_Data/wd:User_Account_Data/wd:Preferred_Communication_Language_Reference/text()

preferredFirstName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:First_Name/text()

preferredLastName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Last_Name/text()

preferredLastNameSuffix

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Suffix_Data/wd:Hereditary_Suffix_Reference/wd:Descriptor/text()

preferredMiddleName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Name_Data/wd:Preferred_Name_Data/wd:Name_Detail_Data/wd:Middle_Name/text()

primaryTerminationCategoryID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Primary_Termination_Category_Reference/wd:ID/[@wd:type='Termination_Category_ID']/text()

primaryTerminationSubCategoryID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/wd:Primary_Termination_Reason_Reference/wd:ID/[@wd:type='Termination_Subcategory_ID']/text()

region

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Organizations_Data/wd:Position_Organization_Data[string(wd:Organization_Data/wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Region>'] and string(wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@wd:type='Organization_Subtype_ID']/text())='<OrganizationSubTypeID_For_Region>']/wd:Organization_Reference/wd:ID[@wd:type='WID']/text()

rehire

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/rehire/text()

retired

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Retired/text()

returnUnknown

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/returnUnknown/text()

samAccountName

wd:Worker/wd:Worker_Data/wd:Personal_Data/wd:Identification_Data/wd:Custom_ID/wd:Custom_ID_Data[string(wd:ID_Type_Reference/wd:ID/@wd:type)='Custom_ID_Type_ID' and string(wd:ID_Type_Reference/wd:ID[@wd:type='Custom_ID_Type_ID']/text())='<SAMAccountID>']/wd:ID/text()

startDate

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Start_Date/text()

status

Active (A): wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Active/text()='1' Or Terminated (L): wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Terminated/text()='1'

terminationDate

wd:Worker/wd:Worker_Data/wd:Employment_Data[string(wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@wd:type)='Employee_Type_ID']/wd:Worker_Status_Data/Termination_Date/text() or wd:Worker/wd:Worker_Data/wd:Employment_Data[string(wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID/@wd:type)='Contingent_Worker_Type_ID']/wd:Worker_Contract_Data/Contract_End_Date/text()

terminationLastDayOfWork

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Status_Data/Termination_Last_Day_Of_Work/text()

title

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Position_Title/text()

userId

wd:Worker/wd:Worker_Data/wd:User_ID/text()

userLanguageReference

/wd:Worker/wd:Worker_Data/wd:User_Account_Data/wd:User_Language__Reference/text()

UserName

wd:Worker/wd:Worker_Data/wd:User_ID/text()

workerId

wd:Worker/wd:Worker_Data/wd:Worker_ID/text()

workerType

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd

:Primary_Job=1]/wd:Position_Data/wd:Worker_Type_Reference/wd:ID[@w d:type='Employee_Type_ID' Or @wd:type='Contingent_Worker_Type_ID']/text()

Table 257: FutureDatedEmployees Mapping

SCIM Parameter

WorkDayHR Parameter

managerID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data/wd:Position_Organizations_Data/wd:Position_Organization_Data/wd:Organization_Data/wd:Organization_Support_Role_Data/wd:Organization_Support_Role/wd:Organization_Role_Data/wd:Worker_Reference/wd:ID[@wd:type='WID']

NOTE:

  • All the other SCIM Parameter mapping is same as the Employees Mapping.
Table 258: DeltaSyncEmployees Mapping
   

NOTE:

  • All the SCIM Parameter mapping is same as the Employees Mapping.
Table 259: Locations Mapping

SCIM Parameter

WorkDayHR Parameter

Addresses.country

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Refer ence/ID[@type='ISO_3166-1_Alpha-3_Code']/text()

Addresses.countryCode2

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Reference/ID[@type='ISO_3166-1_Alpha-2_Code']/text()

Addresses.locality

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Municipality/

text()

Addresses.postalCode

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Postal_Code/t ext()

Addresses.region

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Region_Descriptor/text()

Addresses.streetAddress

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/@Formatted_Addre ss

addressLineData.addressData

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Address_Line_Data/text()

countryRegionCode2

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Region_Reference/wd:ID[@wd:type='ISO_3166-2_Code']

countryRegionCode

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Country_Region_Reference/wd:ID[@wd:type='ISO_3166-2_Country-Region_Code']

citySubDivisionData.citySubdivisionData

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Submunicipality_Data/text()

Emails.value

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Email_Address_Data/wd:Email_A ddress/text()

fax

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Phone_Data[string(Phone_Devic e_Type_Reference/ID[@wd:type='Phone_Device_Type_ID']/text())='Fax']/wd:Phone_ Number/text()

Id

wd:Location/Location_Reference/ID[@type='WID']/text()

locationID

wd:Location/wd:Location_Data/wd:Location_ID/text()

name

wd:Location/wd:Location_Data/wd:Location_Name/text()

regionSubDivisionData.regionSubdivisionData

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Address_Data/wd:Subregion_Data/text()

status

wd:Location/wd:Location_Data/wd:Inactive/text()

telephone

wd:Location/wd:Location_Data/wd:Contact_Data/wd:Phone_Data[string(Phone_Devic e_Type_Reference/ID[@wd:type='Phone_Device_Type_ID']/text())='Landline']/wd:P hone_Number/text()

Table 260: CustomOrgs Mapping

SCIM Parameter

WorkDayHR Parameter

companyReferenceID

wd:Organization/wd:Organization_Data/wd:Supervisory_Data/wd:Organization_Assignments_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Company>']/Organization_Reference/ID[@wd:type='WID']/text()

costCenterID

wd:Organization/wd:Organization_Data/wd:Supervisory_Data/wd:Organization_Assignments_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_CostCenter>']/Organization_Reference/ID[@wd:type='WID']/text()

Id

wd:Organization/Organization_Reference/ID[@type='WID']/text()

lastModifiedOn

wd:Organization/wd:Organization_Data/Last_Updated_DateTime/text()

locationID

wd:Organization/wd:Organization_Data/Supervisory_Data/Location_Reference/ID[@type='WID']/text()

managerReferenceID

wd:Organization/wd:Organization_Data/wd:Manager_Reference/wd:ID[@wd:type='WID']/text()

Meta.LastModified

wd:Organization/wd:Organization_Data/Last_Updated_DateTime/text()

name

wd:Organization/wd:Organization_Data/wd:Name/text()

organizationCode

wd:Organization/wd:Organization_Data/wd:Organization_Code/text()

organizationOwnerID

wd:Organization/wd:Organization_Data/Organization_Owner_Reference/ID[@type='WID']/text()

organizationTypeReferenceID

wd:Organization/wd:Organization_Data/Organization_Type_Reference/ID[@type='Organization_Type_ID']/text()

referenceID

wd:Organization/wd:Organization_Data/wd:Reference_ID/text()

regionReferenceID

wd:Organization/wd:Organization_Data/wd:Supervisory_Data/wd:Organization_Assignments_Data[string(wd:Organization_Type_Reference/wd:ID[@wd:type='Organization_Type_ID']/text())='<OrganizationTypeID_For_Region>']/Organization_Reference/ID[@wd:type='WID']/text()

status

wd:Organization/wd:Organization_Data/wd:Inactive/text()

type

wd:Organization/wd:Organization_Data/wd:Organization_Subtype_Reference/wd:ID[@type='Organization_Subtype_ID']/text()

includedInOrganizationReferenceWID

wd:Worker/wd:Worker_Data/wd:Employment_Data/wd:Worker_Job_Data[@wd:Primary_Job=1]/wd:Position_Data/wd:Position_Reference/wd:ID[@wd:type='WID']

Table 261: JobClassifications

SCIM Parameter

WorkDayHR Parameter

groupId

Job_Classification_Group/Job_Classification_Group_Data/ID/text()

groupName

Job_Classification_Group/Job_Classification_Group_Name_Data/ Job_Classification_Group_Name/text()

Id

Job_Classification_Group/Job_Classification_Group_Reference/ID[@type='WID']/text()

inActive

Job_Classification_Group/Job_Classification_Group_Data/Inactive/text()

Table 262: Positions

SCIM Parameter

WorkDayHR Parameter

ID

wd:Position/wd:Position_Reference/wd:Employment_Data/ID[@type='WID']/text()

jobPostingTitle

wd:Position/wd:Position_Data/wd:Position_Definition_Data/wd:Job_Posting_Title/text()

jobDescriptionSummary

wd:Position/wd:Position_Data/wd:Position_Definition_Data/wd:Job_Description_Summary/text()

positionID

wd:Position/wd:Position_Data/wd:Position_Definition_Data/wd:Position_ID/text()

Filter Resource

Workday Employee resource response does not provide 'meta.lastModified' in the response. This makes impossible to get the revision filtered employees list. The full employee list without revision filters will be too slow for frequent synchronizations. As a work-around for this the Workday HR connector has been modified to support filtering only on the Employees endpoint. Even though the intension to support filtering is only on 'meta.lastModified', the connector has been modified to support some more attributes for filtering. Below are the details on the supported attributes and operations on filter functionality on the Employee resource on the SCIM connector.

NOTE:

WorkdayHR supports two kind of updates -

  • Manual update- when an employee record is updated manually on workdayHR.

  • effective update - when an employee is updated manually with an effective date and workdayHR updates the record as the effective date is reached

A new endpoint DeltaSyncEmployees has been added to support these two updates using combination of two filters - meta.lastModified and manualupdate

Supported attributes for Filtering Employee Resource

Table 263: Supported attributes for Filtering Employee Resource
Attribute Supported Operations
addresses.country eq (equal to)
assetClass eq
company eq
costCenter eq
department eq
desk eq
division eq

futurehire

eq

meta.lastModified

gt (greater than)

ge (greater than or equal to)

personalAssistantID

eq

region

eq

status

eq

manualUpdate

eq

NOTE: As the WorkDayHR API supports only filtering of Active Employees, Status filter has been implemented to support only Active employees. Filtering of inactive employees is not supported. Valid values for Status filter is 'A' for active Employees.

NOTE: manualUpdate is only applicable for DeltaSyncEmployees endpoint

More information about Filtering Resource

  • As the Workday API supports only AND conditions in the request filter criteria, the connector has been implemented to support only AND in SCIM filter condition.

  • In the connector filter functionality, any invalid or non-supported filter criteria will be ignored in the filter. If no valid criteria found, then normal LIST employees will be carried out.

  • Due to timezone differences there is a considerable difference in the Workday returned date time data and the local date time date. Since the Workday documentation do not mention on the supported timezone, as a work around, 1 day is subtracted from current date time while implementing the filter in the Workday HR connector for meta.lastModified. Similarly 1 day is subtracted from the meta.lastModified value in the filter criteria while making a request to the target system.

  • The filter functionality searches generously for the filter condition and values instead of performing a greedy and strict match. For example: the meta.lastModified with below are some of the valid formats:

    filter=meta.lastModified gt xxxx-xx-xxTxx:xx:xx

    filter=meta.lastModified gt xxxx-xx-xx xx:xx:xx

    filter=meta.lastModified gt xxxx-xx-xxTxx:xx:xx.xxx

    filter=meta.lastModified gt "xxxx-xx-xxTxx:xx:xx"

    filter=meta.lastModified gt xxxx-xx-xx xx:xx:xxZ

    filter=meta.lastModified gt xxxx-xx-xxTxx:xx:xx.xxxZ

    filter=meta.lastModified gt 'xxxx-xx-xxTxx:xx:xx'

For more information about Filter Resource, see Workday documentation of filtering on Workers endpoints.

One IM Configuration for Delta Synchronization

Modifying the FullProjection process

  1. In Designer, locate the 'DPR_DPRProjectionStartInfo_Run_Synchronization' process click to edit it. Under 'Pre-script for generating' add the script as mentioned below:

    'Starling Delta Sync Handling (search sync project variables with their names staring with dprRevisionDate and put the corresponding revision data value in)

    Dim f = session.SqlFormatter

    Dim nameSchema as String

    Dim nameVariable as String

    Dim variableValue as String

    values("OverrideVariables") = ""

     

    'search project variables dprRevisionDate*

    Dim qVariables = Query _

    .From("DPRSystemVariable") _

    .Orderby("UID_DPRSystemVariable") _

    .Where( f.AndRelation( _

    f.Comparison("Name", "dprRevisionDate%", ValType.String, CompareOperator.Like, FormatterOptions.IgnoreCase), _

    f.UidComparison("UID_DPRSystemVariableSet", $UID_DPRSystemVariableSet$, CompareOperator.Equal))) _

    .Select("Name")

    Dim colVariables = Session.Source.GetCollection(qVariables)

     

    If colVariables.Count > 0 then

    'fetching revision data from last synchronization of that sync project configuration

    Dim qRevStore = Query _

    .From("DPRRevisionStore") _

    .Where( f.AndRelation( _

    f.UidComparison("UID_DPRProjectionConfig", $UID_DPRProjectionConfig$, CompareOperator.Equal), _

    f.UidComparison("UID_DPRSystemVariableSet", $UID_DPRSystemVariableSet$, CompareOperator.Equal))) _

    .Select("Value", "SchemaTypeKey")

     

    Dim colRevStore = Session.Source.GetCollection(qRevStore)

    Dim dictRevStore = new System.Collections.Generic.Dictionary(of String, String)()

     

    For Each elemRevStore As IEntity In colRevStore

    nameSchema = elemRevStore.GetValue("SchemaTypeKey").String 'Schema[FTP#C04A6567-9EAE-4121-973E-AF1EE514D728].Type[Employees]

    If string.IsNullOrEmpty(nameSchema) OrElse not nameSchema.Contains(".") then

    Continue For

    End If

    nameSchema = nameSchema.Split("."c)(1)

     

    dictRevStore.Add(nameSchema, elemRevStore.GetValue("Value").String)

    Next

     

    'put the revision date into the variables if available, else provide the revision data as 1900-01-01

    Dim lstVariables = new System.Collections.Generic.List(of String)()

    For Each elemVariable As IEntity In colVariables

    nameVariable = elemVariable.GetValue("Name").String 'e.g. dprRevisionDateEmployees

    nameSchema = string.Format("Type[{0}]", nameVariable.Trim().Substring(15)) 'e.g. Type[Employees]

     

    If dictRevStore.TryGetValue(nameSchema, variableValue) then

    values(nameVariable) = variableValue.Replace(" ", "T")

    Else

    values(nameVariable) = "1900-01-01"

    End If

    lstVariables.Add(nameVariable)

    Next

    values("OverrideVariables") = string.Join(";", lstVariables.ToArray())

    End If

  2. Under 'Run Synchronization' select 'Parameters' tab and provide the below script under 'OverrideVariables'.

    If not String.IsNullOrEmpty(values("OverrideVariables").ToString()) then

    Imports System.Data.Common

    Dim sb as DbConnectionStringBuilder = new DbConnectionStringBuilder(false)

    For each varName as String in values("OverrideVariables").ToString().Split(";"c)

    sb.Add(varName, values(varName).ToString())

    Next

    Value = sb.ConnectionString

    End if

  3. 'Commit to database' and then 'Compile database'.

Modifying the synchronization project

  1. Make sure that the local cache is turned off for the Synchronization project.

    NOTE: This is applicable for employees and DeltaSyncEmployees endpoint.

  2. Select the SCIM synchronization project and select 'Variables' to add a new variable similar to 'dprRevisionDateEmployees' (the variable name should be dprRevisionDate<schema name>).

  3. Create a new 'Schema Class' from the supported endpoints in the 'Target system'. For example: "Employees for Delta Sync".

  4. On the Schema Class set the System Filter: meta.LastModified gt $dprRevisionDate<Schema name>$. Under 'Select Objects' tab, use 'meta_lastModified' as the attribute, '>' as the operator and $dprRevisionDate<Schema name>$ as the text field value.

    NOTE:

    To get the all the updates from DeltaSyncEmployee Endpoint, please follow the additional step

    • Create two new 'Schema Class' from Employee in the 'Target system'. For example:

      "Manual Update Employees for Delta Sync" & "Effective Update Employees for Delta Sync"

    • On the respective Schema Classes set the System Filter: meta.LastModified gt

    $dprRevisionDateDeltaSyncEmployees$ and manualUpdate eq 'true' for manualUpdate, meta.LastModified gt

    $dprRevisionDateDeltaSyncEmployees$ and manualUpdate eq 'false' for effective update.

    Under 'Select Objects' tab, use 'meta_lastModified' as the attribute, '>' as the operator and $dprRevisionDateDeltaSyncEmployees$ as the text field value.

  5. As required, other supported attributes also can be added under filters.

  6. Create a new Mapping using the new Schema Class dialog box.

  7. Create a new Workflow using the new mapping. This workflow updates the existing records based on the revision filter.

  8. To improve the syncs performance, remove the update steps from the existing default Initial sync Work Flow.

  9. Create a new Startup Config using the new workflow. Select 'One Identity Manager' for the 'Synchronization in direction'. Use 'default variable set' for the 'Variable Set'.

  10. Use hotfix #33601 on One Identity Manager version 8.1.2 and 8.1.4.

Connector limitations

  • It supports GET operation.
  • Currently, Update functionality is available only for the following attributes of the Employees object:

    NOTE:Update of phone information supports work and home based on the attribute being updated, phoneNumbersWork and phoneNumbers respectively.

    • cellPhone
    • businessPhone
    • email
    • username
    • SAMAccount ID (Custom ID for SAMAccount Name)

  • CREATE and DELETE operations are not supported by any object.

  • Any changes to the updatable employee attributes for contact information listed above will be performed effective immediately (EffectiveDate = today). Updates will only be successful if no future dated event is pending, that may conflict with the attribute update.

  • There is no meta.LastModified attribute available for Employees and Location endpoint. Delta sync could be performed by following the steps in One IM Configuration for Delta Synchronization.

  • When using futurehire filter, delta sync cannot be used as it will affect the future hire results returned from WorkdayHR API.

  • The target system WorkdayHR API supports:-

    • OR operation only within the same filter type.

    • AND operation only across different filter type.

    For example, costCenter and region belongs to Organization type. WorkdayHR API will perform OR operation and return employees that belong to either of the Organization. Conversely, in case of costCenter and country, WorkdayHR will perform AND operation and return employees that belong to Costcenter and Country.

The following subsections describe the different connector version(s) and features available with them.

Features available exclusively in Workday HR v.2.0

Following are the features that are available exclusively in Workday HRv.2.0:

  • The Employee endpoint is enhanced to support the PATCH operation to update the Employee details.

    NOTE:The supported attributes for Employee PATCH operation will be same as the UPDATE.

  • The Employee endpoint is enhanced to support the DELETE functionality for following attributes:

    • SamAccountName

    • Email

    • PhoneNumbers

    NOTE:Set the supported attributes value to blank in One Identity Manager to delete them from target system.

OneLogin

The OneLogin connector allows you to connect OneLogin with One Identity Starling enabling you to take advantage of the features and products available with Starling Connect that complement and enhance the services provided by OneLogin.

OneLogin is a Unified Access Management (UAM) platform that provides several products and solutions, such as single sign-on, user provisioning and management and multi-factor authentication to manage identities.

Supervisor configuration parameters

To configure the connector, following parameters are required:

  • Connector name

  • Client Id

  • Client secret

  • SCIM URL (The base URL of the REST API of the Cloud application.)

  • Instance DateTime Offset (refer Configuring additional datetime offset in connectors for more details)

  • Request Delay (in ms)

    NOTE: To handle the OneLogin rate limit issue, the OneLogin connector has been enabled with user configurable delay in milliseconds so that the each request to the target API would wait for the specific amount of time to help the connector to prevent the throttling of the OneLogin APIs. The default value for the configuration is 500(milliseconds) and OneIdentity recommends to keep the value below 2000 (milliseconds).

Supported objects and operations

Users

Table 264: Supported operations for Users
Operation VERB
Create User POST
Update User PUT
Delete User DELETE
Get User by id GET
Get All Users GET

Get All Users with pagination

GET

Groups

Table 265: Supported operations for Groups

Operation

VERB

Get Group by id GET
Get All Groups GET
Get All Groups with pagination GET

Roles

Table 266: Supported operations for Roles

Operation

VERB

Get Role by id GET
Get All Roles GET
Get All Roles with pagination GET

Update Role

PUT

Application

Table 267: Supported operations for Application

Operation

VERB

Get an App GET
List Apps GET
List Apps with pagination GET

Mandatory fields

This section lists the mandatory fields required to create a User or a Group:

Users - Create (in v.1.0)

  • userName

  • name.givenName

  • name.familyName

  • emails.value

Users - Create (in v.2.0)

  • userName

  • emails.value

Users - Update

userName or emails.value

Roles - Update

roleName

Set Role Apps - update

application id

Mappings

The user and group mappings are listed in the tables below.

Table 268: User mapping
SCIM Parameter OneLogin parameter
Id Id
UserName username
ExternalId external_id
Name.GivenName firstname
Name.FamilyName lastname
Name.Formatted firstname +" " + lastname
DisplayName firstname +" " + lastname
Emails[0].Value email
PhoneNumbers[0].Value phone
Title title
Roles[].Value role_id[]

Groups[0].value

group_id

Locale

locale_code(in v1),preferred_locale_code(in v2)

Password (only in v2.0)

password

Extension.Manager.Value

manager_user_id

Extension.Organization

company

Extension.Department

department

Extension.OpenIdName

openid_name

Extension.DistinguishedName

distinguished_name

Extension.SamAccountName

samaccountname

Extension.UserPrincipalName

userprincipalname

Extension.MemberOf

member_of

Extension.DirectoryId

directory_id

Extension.UserStatus

status

Extension.LastLogin

last_login

Meta.Created

created_at

Meta.LastModified

updated_at

Groups

Table 269: Group mapping
SCIM parameter OneLogin parameter
Id id
DisplayName name

Roles

Table 270: Role mapping
SCIM parameter OneLogin parameter
Id id
Name name

Applications[].value

apps[].id

Applications[].name

apps[].name

users[].value

users[].id

users[].name

users[].name

Application

Table 271: Role mapping
SCIM parameter OneLogin parameter
Id id
Name name

Description

description

Auth_Method

auth_method

Visible

visible

Meta.Created

created_at

Meta.LastModified

updated_at

NOTE: OneLogin API for Users accepts two letter values for locale, for example: "en", "es" and so on.

Connector limitations

  • Target cloud application supports below given integer value for Status field. OneIdentity has created 'userStatus' integer type attribute in User extension schema and mapped with 'status' and it needs to be taken care in OneIM mapping:
    • (in v.1.0):

      • Can set through Api → Unactivated: 0, Active: 1, Suspended: 2, Locked: 3, Password expired: 4

      • Cannot set through Api → Awaiting password reset: 5, Pending password: 7, Security questions required: 8

    • (in v.2.0):

      • Can set through Api → Unactivated: 0, Active: 1, Suspended: 2, Locked: 3, Password expired: 4, Awaiting password reset: 5, Pending password: 7

      • Cannot set through Api → Security questions required: 8

  • Adding or removing a Group can be achieved by using the User update operation. Only one group can be assigned to a User.

  • For the User object, when NULL value is updated to openid_name, the cloud application considers the first part of the email Id as openid_name. For example, for the email id, email123@test.com , openIdname value will be email123.
  • API does not support the assignment of applications under users what it support is assigning application under roles and assigning roles under user.

Connector versions and features

The following subsections describe the different connector version(s) and features available with them.

Features available exclusively in OneLogin v.2.0

Following are the features that are available exclusively in OneLogin v.2.0:

  • Creation and updation of user password.
  • v.2.0 of OneLogin connector leverages v2 APIs of target system.

User centric membership configuration for OneLogin

For more information, see only the following sections in User centric membership:

Supervisor configuration parameters

The OneLogin connector allows you to connect OneLogin with One Identity Starling enabling you to take advantage of the features and products available with Starling Connect that complement and enhance the services provided by OneLogin.

OneLogin is a Unified Access Management (UAM) platform that provides several products and solutions, such as single sign-on, user provisioning and management and multi-factor authentication to manage identities.

To configure the connector, following parameters are required:

  • Connector name

  • Client Id

  • Client secret

  • SCIM URL (The base URL of the REST API of the Cloud application.)

  • Instance DateTime Offset (refer Configuring additional datetime offset in connectors for more details)

  • Request Delay (in ms)

    NOTE: To handle the OneLogin rate limit issue, the OneLogin connector has been enabled with user configurable delay in milliseconds so that the each request to the target API would wait for the specific amount of time to help the connector to prevent the throttling of the OneLogin APIs. The default value for the configuration is 500(milliseconds) and OneIdentity recommends to keep the value below 2000 (milliseconds).

Supported objects and operations

Users

Table 264: Supported operations for Users
Operation VERB
Create User POST
Update User PUT
Delete User DELETE
Get User by id GET
Get All Users GET

Get All Users with pagination

GET

Groups

Table 265: Supported operations for Groups

Operation

VERB

Get Group by id GET
Get All Groups GET
Get All Groups with pagination GET

Roles

Table 266: Supported operations for Roles

Operation

VERB

Get Role by id GET
Get All Roles GET
Get All Roles with pagination GET

Update Role

PUT

Application

Table 267: Supported operations for Application

Operation

VERB

Get an App GET
List Apps GET
List Apps with pagination GET

Mandatory fields

This section lists the mandatory fields required to create a User or a Group:

Users - Create (in v.1.0)

  • userName

  • name.givenName

  • name.familyName

  • emails.value

Users - Create (in v.2.0)

  • userName

  • emails.value

Users - Update

userName or emails.value

Roles - Update

roleName

Set Role Apps - update

application id

Mappings

The user and group mappings are listed in the tables below.

Table 268: User mapping
SCIM Parameter OneLogin parameter
Id Id
UserName username
ExternalId external_id
Name.GivenName firstname
Name.FamilyName lastname
Name.Formatted firstname +" " + lastname
DisplayName firstname +" " + lastname
Emails[0].Value email
PhoneNumbers[0].Value phone
Title title
Roles[].Value role_id[]

Groups[0].value

group_id

Locale

locale_code(in v1),preferred_locale_code(in v2)

Password (only in v2.0)

password

Extension.Manager.Value

manager_user_id

Extension.Organization

company

Extension.Department

department

Extension.OpenIdName

openid_name

Extension.DistinguishedName

distinguished_name

Extension.SamAccountName

samaccountname

Extension.UserPrincipalName

userprincipalname

Extension.MemberOf

member_of

Extension.DirectoryId

directory_id

Extension.UserStatus

status

Extension.LastLogin

last_login

Meta.Created

created_at

Meta.LastModified

updated_at

Groups

Table 269: Group mapping
SCIM parameter OneLogin parameter
Id id
DisplayName name

Roles

Table 270: Role mapping
SCIM parameter OneLogin parameter
Id id
Name name

Applications[].value

apps[].id

Applications[].name

apps[].name

users[].value

users[].id

users[].name

users[].name

Application

Table 271: Role mapping
SCIM parameter OneLogin parameter
Id id
Name name

Description

description

Auth_Method

auth_method

Visible

visible

Meta.Created

created_at

Meta.LastModified

updated_at

NOTE: OneLogin API for Users accepts two letter values for locale, for example: "en", "es" and so on.

Connector limitations

  • Target cloud application supports below given integer value for Status field. OneIdentity has created 'userStatus' integer type attribute in User extension schema and mapped with 'status' and it needs to be taken care in OneIM mapping:
    • (in v.1.0):

      • Can set through Api → Unactivated: 0, Active: 1, Suspended: 2, Locked: 3, Password expired: 4

      • Cannot set through Api → Awaiting password reset: 5, Pending password: 7, Security questions required: 8

    • (in v.2.0):

      • Can set through Api → Unactivated: 0, Active: 1, Suspended: 2, Locked: 3, Password expired: 4, Awaiting password reset: 5, Pending password: 7

      • Cannot set through Api → Security questions required: 8

  • Adding or removing a Group can be achieved by using the User update operation. Only one group can be assigned to a User.

  • For the User object, when NULL value is updated to openid_name, the cloud application considers the first part of the email Id as openid_name. For example, for the email id, email123@test.com , openIdname value will be email123.
  • API does not support the assignment of applications under users what it support is assigning application under roles and assigning roles under user.

Connector versions and features

The following subsections describe the different connector version(s) and features available with them.

Features available exclusively in OneLogin v.2.0

Following are the features that are available exclusively in OneLogin v.2.0:

  • Creation and updation of user password.
  • v.2.0 of OneLogin connector leverages v2 APIs of target system.

User centric membership configuration for OneLogin

For more information, see only the following sections in User centric membership:

관련 문서

The document was helpful.

평가 결과 선택

I easily found the information I needed.

평가 결과 선택