Microsoft Entra 预配如何与 SAP SuccessFactors 集成

Microsoft Entra 用户预配服务SAP SuccessFactors Employee Central 相集成,以便于管理用户的标识生命周期。 Microsoft Entra ID 提供三个预生成集成:

本文介绍集成的工作原理,以及如何为不同的 HR 方案自定义预配行为。

Microsoft Entra 还支持到 SuccessFactors 的单一登录。 有关详细信息,请参阅 Microsoft Entra 单一登录 (SSO) 与 SuccessFactors 的集成

建立连接

Microsoft Entra 预配服务使用基本身份验证连接到 Employee Central OData API 终结点。 设置 SuccessFactors 预配应用时,请使用“管理员凭据”部分中的“租户 URL”参数来配置 API 数据中心 URL

若要进一步保护 Microsoft Entra 预配服务与 SuccessFactors 之间的连接,请在 SuccessFactors IP 允许列表中添加 Microsoft Entra IP 范围:

  1. 下载 Azure 公有云的最新 IP 范围
  2. 打开该文件并搜索标记 AzureActiveDirectory
  3. 复制 addressPrefixes 元素中列出的所有 IP 地址范围,并使用范围生成 IP 地址限制列表。
  4. 将 CIDR 值转换为 IP 范围。
  5. 登录到 SuccessFactors 管理门户以将 IP 范围添加到允许列表。 请参阅 SAP 支持说明 2253200。 现在可以在此工具中输入 IP 范围

受支持的实体

对于 SuccessFactors 中的每个用户,Microsoft Entra 预配服务将检索以下实体。 使用 OData API $expand 查询参数扩展每个实体,如检索规则列中所述。 有些实体默认已扩展,而有些实体仅在映射中存在特定的特性时才会扩展。

# SuccessFactors 实体 OData 节点 检索规则
1 PerPerson *root node* 始终
2 PerPersonal personalInfoNav 始终
3 PerPhone phoneNav 始终
4 PerEmail emailNav 始终
5 EmpEmployment employmentNav 始终
6 User employmentNav/userNav 始终
7 EmpJob employmentNav/jobInfoNav 始终
8 EmpEmploymentTermination activeEmploymentsCount 始终
9 User's manager employmentNav/userNav/manager/empInfo 始终
10 FOCompany employmentNav/jobInfoNav/companyNav 仅当已映射 companycompanyId 特性时
11 FODepartment employmentNav/jobInfoNav/departmentNav 仅当已映射 departmentdepartmentId 特性时
12 FOBusinessUnit employmentNav/jobInfoNav/businessUnitNav 仅当已映射 businessUnitbusinessUnitId 特性时
13 FOCostCenter employmentNav/jobInfoNav/costCenterNav 仅当已映射 costCentercostCenterId 特性时
14 FODivision employmentNav/jobInfoNav/divisionNav 仅当已映射 divisiondivisionId 特性时
15 FOJobCode employmentNav/jobInfoNav/jobCodeNav 仅当已映射 jobCodejobCodeId 特性时
16 FOPayGrade employmentNav/jobInfoNav/payGradeNav 仅当已映射 payGrade 特性时
17 FOLocation employmentNav/jobInfoNav/locationNav 仅当已映射 location 特性时
18 FOCorporateAddressDEFLT employmentNav/jobInfoNav/addressNavDEFLT 如果映射包含以下特性之一:officeLocationAddress, officeLocationCity, officeLocationZipCode
19 FOEventReason employmentNav/jobInfoNav/eventReasonNav 仅当已映射 eventReason 特性时
20 EmpGlobalAssignment employmentNav/empGlobalAssignmentNav 仅当已映射 assignmentType
21 EmploymentType Picklist employmentNav/jobInfoNav/employmentTypeNav 仅当已映射 employmentType
22 EmployeeClass Picklist employmentNav/jobInfoNav/employeeClassNav 仅当已映射 employeeClass
23 EmplStatus Picklist employmentNav/jobInfoNav/emplStatusNav 仅当已映射 emplStatus
24 AssignmentType Picklist employmentNav/empGlobalAssignmentNav/assignmentTypeNav 仅当已映射 assignmentType
25 Position employmentNav/jobInfoNav/positionNav 仅当已映射 positioNav
26 Manager User employmentNav/jobInfoNav/managerUserNav 仅当已映射 managerUserNav

完全同步的工作原理

在完全同步期间,Microsoft Entra 预配服务将基于特性映射发送以下“GET”OData API 查询,以提取所有有效的和已离职的员工的有效数据。

参数 说明
OData API 主机 将 https 追加到租户 URL。 示例:https://api4.successfactors.com
OData API 终结点 /odata/v2/PerPerson
OData $format 查询参数 json
OData $filter 查询参数 (personEmpTerminationInfoNav/activeEmploymentsCount ne null) and (lastModifiedDateTime le <CurrentExecutionTime>)
OData $expand 查询参数 此参数值取决于映射的特性。 示例:employmentNav/userNav,employmentNav/jobInfoNav,personalInfoNav,personEmpTerminationInfoNav,phoneNav,emailNav,employmentNav/jobInfoNav/companyNav/countryOfRegistrationNav,employmentNav/jobInfoNav/divisionNav,employmentNav/jobInfoNav/departmentNav
OData customPageSize 查询参数 100

注意

在完全初始同步期间,会提取 SAP SuccessFactors 中的活动辅助角色和已终止的辅助角色。

对于每个 SuccessFactors 用户,预配服务将使用映射中定义的匹配特性来查找目标(Microsoft Entra ID/本地 Active Directory)中的帐户。 例如:如果 personIdExternal 映射到 employeeId 并设置为匹配特性,则预配服务将结合使用 personIdExternal 值和 employeeId 筛选器来搜索用户 。 如果找到用户匹配项,则预配服务会更新目标特性。 如果未找到匹配项,则它会在目标中创建一个新条目。

若要验证 OData API 终结点为特定 personIdExternal 返回的数据,请使用你的 API 数据中心服务器 URL 更新 API 查询中的 SuccessFactorsAPIEndpoint,并使用 cURL 或 Graph 浏览器等工具调用该查询。 如果“in”筛选器不起作用,可以尝试“eq”筛选器。

https://[SuccessFactorsAPIEndpoint]/odata/v2/PerPerson?$format=json&
$filter=(personIdExternal in '[personIdExternalValue]')&
$expand=employmentNav/userNav,employmentNav/jobInfoNav,personalInfoNav,personEmpTerminationInfoNav,
phoneNav,phoneNav/phoneTypeNav,emailNav,employmentNav/jobInfoNav/businessUnitNav,employmentNav/jobInfoNav/companyNav,
employmentNav/jobInfoNav/companyNav/countryOfRegistrationNav,employmentNav/jobInfoNav/costCenterNav,
employmentNav/jobInfoNav/divisionNav,employmentNav/jobInfoNav/departmentNav,employmentNav/jobInfoNav/jobCodeNav,
employmentNav/jobInfoNav/locationNav,employmentNav/jobInfoNav/locationNav/addressNavDEFLT,employmentNav/jobInfoNav/payGradeNav,
employmentNav/empGlobalAssignmentNav,employmentNav/empGlobalAssignmentNav/assignmentTypeNav,employmentNav/jobInfoNav/emplStatusNav,
employmentNav/jobInfoNav/employmentTypeNav,employmentNav/jobInfoNav/employeeClassNav,employmentNav/jobInfoNav/eventReasonNav

增量同步的工作原理

完全同步后,Microsoft Entra 预配服务会维护 LastExecutionTimestamp 并用它来创建增量查询以检索增量更改。 将计算每个 SuccessFactors 实体中的时间戳特性(例如 lastModifiedDateTimestartDateendDatelatestTerminationDate),以确定更改是否发生在 LastExecutionTimestampCurrentExecutionTime 之间。 如果是,则将条目更改视为有效,并对其进行同步处理。

下面是 Microsoft Entra ID 用于查询 SuccessFactors 是否发生增量更改的 OData API 请求模板。 可以更新请求模板中的 SuccessFactorsAPIEndpointLastExecutionTimestampCurrentExecutionTime 变量,并使用 cURL 或 Graph 浏览器等工具查看返回的数据。 或者,还可以通过启用 OData API 审核日志从 SuccessFactors 检索实际请求有效负载。

https://[SuccessFactorsAPIEndpoint]/odata/v2/PerPerson/$count?$format=json&$filter=(personEmpTerminationInfoNav/activeEmploymentsCount ne null) and
((lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>') or
(personalInfoNav/startDate ge datetimeoffset'<LastExecutionTimestamp>' and personalInfoNav/startDate le datetimeoffset'<CurrentExecutionTime>') or
((personalInfoNav/lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and personalInfoNav/lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>') and (personalInfoNav/startDate le datetimeoffset'<CurrentExecutionTime>' and (personalInfoNav/endDate ge datetimeoffset'<CurrentExecutionTime>' or  personalInfoNav/endDate eq null))) or
(employmentNav/startDate ge datetimeoffset'<LastExecutionTimestamp>' and employmentNav/startDate le datetimeoffset'<CurrentExecutionTime>') or
((employmentNav/lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and employmentNav/lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>') and (employmentNav/startDate le datetimeoffset'<CurrentExecutionTime>' and (employmentNav/endDate ge datetimeoffset'<CurrentExecutionTime>' or employmentNav/endDate eq null))) 
(employmentNav/jobInfoNav/startDate ge datetimeoffset'<LastExecutionTimestamp>' and employmentNav/jobInfoNav/startDate le datetimeoffset'<CurrentExecutionTime>') or
((employmentNav/jobInfoNav/lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and employmentNav/jobInfoNav/lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>') and (employmentNav/jobInfoNav/startDate le datetimeoffset'<CurrentExecutionTime>' and (employmentNav/jobInfoNav/endDate ge datetimeoffset'<CurrentExecutionTime>' or employmentNav/jobInfoNav/endDate eq null))) or
(phoneNav/lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and phoneNav/lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>') or
(emailNav/lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and emailNav/lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>') or
(personEmpTerminationInfoNav/latestTerminationDate ge datetimeoffset'<previousDayDateStartTime24hrs>' and personEmpTerminationInfoNav/latestTerminationDate le datetimeoffset'<previousDayDateTime24hrs>') or
(employmentNav/userNav/lastModifiedDateTime ge datetimeoffset'<LastExecutionTimestamp>' and employmentNav/userNav/lastModifiedDateTime le datetimeoffset'<CurrentExecutionTime>'))
&$expand=employmentNav/userNav,employmentNav/jobInfoNav,personalInfoNav,personEmpTerminationInfoNav,phoneNav,emailNav,employmentNav/userNav/manager/empInfo,employmentNav/jobInfoNav/companyNav,employmentNav/jobInfoNav/departmentNav,employmentNav/jobInfoNav/locationNav,employmentNav/jobInfoNav/locationNav/addressNavDEFLT,employmentNav/jobInfoNav/locationNav/addressNavDEFLT/stateNav&customPageSize=100

预聘处理的工作原理

本部分介绍了 SAP SuccessFactors 连接器如何处理预聘记录(聘用日期/开始日期为将来时间的员工)。 假设 SuccessFactors Employee Central 中存在 employeeId 为“1234”的预聘人员,其开始日期为 2023 年 6 月 1 日。 我们进一步假设此预聘记录是在 Employee Central 或入职模块中首次创建的,且首次创建时间为 2023 年 5 月 15 日。 当预配服务在 2023 年 5 月 15 日首次观察到此记录(作为完全同步或增量同步的一部分)时,此记录仍处于预聘状态。 因此,SuccessFactors 不会向预配服务发送与用户关联的所有属性(例如:userNav/username)。 而是只会提供有关用户的最少量数据,例如 companyNamepersonIdExternalfirstnamelastnamestartDate。 要成功处理预聘,必须满足以下先决条件:

  1. 属性 personIdExternal 必须设置为主要匹配标识符(联接属性)。 如果配置了其他属性(例如:userName)作为联接属性,则预配服务将无法检索预聘信息。
  2. 必须提供 startDate 特性,其 JSONPath 必须设置为 $.employmentNav.results[0].startDate$.employmentNav.results[-1:].startDate
  3. 在 Employee Central 中,预聘记录必须处于以下状态之一:“活动”(t)、“非活动”(f) 或“active_external_suite”(e)。 有关这些状态的详细信息,请参阅 SAP 支持说明 2736579

注意

对于没有组织历史记录的预聘人员,[0] 和 [-1:] 索引都将适用于 startDate。 对于重新雇用或转岗的预聘人员,我们无法确定性判断顺序,这可能会导致某些重新雇用/转岗员工在其实际开始日期进行处理。 这是连接器中的已知限制。

在完全同步或增量同步或按需预配期间,当预配服务遇到预聘记录时,它会将以下 OData 查询发送到 SuccessFactors,并将“asOfDate”筛选器设置为用户的 startDate(例如 asOfDate=2023-06-01)。

https://[SuccessFactorsAPIEndpoint]/odata/v2/PerPerson?$format=json&$
filter=(personIdExternal in '1234' and employmentNav/userNav/status in 't','f','e')&asOfDate=2023-06-01&$
expand=employmentNav/userNav,employmentNav/jobInfoNav,personalInfoNav,personEmpTerminationInfoNav,phoneNav,emailNav,employmentNav/userNav/manager/empInfo,employmentNav/jobInfoNav/companyNav,employmentNav/jobInfoNav/costCenterNav,employmentNav/jobInfoNav/divisionNav,employmentNav/jobInfoNav/departmentNav,employmentNav/

如果发现预聘处理存在问题,则可以通过将 API 终结点 personIdExternalasOfDate 筛选器替换为与测试方案相对应的值来使用上述 OData 请求格式查询 SuccessFactors 实例。

读取特性数据

当 Microsoft Entra 预配服务查询 SuccessFactors 时,将检索 JSON 结果集。 JSON 结果集包括存储在 Employee Central 中的许多属性。 默认情况下,预配架构配置为仅检索这些特性的子集。

若要检索更多属性,请按照列出的步骤操作:

  1. 浏览到“企业应用程序”->“SuccessFactors 应用”->“预配”->“编辑预配”->“特性映射页”。

  2. 向下滚动,然后单击“显示高级选项”。

  3. 单击“编辑 SuccessFactors 属性列表”。

    注意

    如果“编辑 SuccessFactors 属性列表”选项未显示在 Microsoft Entra 管理中心,则使用 URL https://portal.azure.com/?Microsoft_AAD_IAM_forceSchemaEditorEnabled=true 来访问该页面。

  4. 此视图中的“API 表达式”列显示连接器使用的 JSONPath 表达式。

    API 表达式

  5. 可以编辑现有的 JSONPath 值,或者使用有效的 JSONPath 表达式向架构添加新的特性。

下一部分提供了用于编辑 JSONPath 值的常用方案列表。

处理不同的 HR 方案

JSONPath 是适用于 JSON 的一种查询语言,类似于 XML 的 XPath。 与 XPath 类似,JSONPath 允许从 JSON 有效负载中提取和筛选数据。

使用 JSONPath 转换可以自定义 Microsoft Entra 预配应用的行为,以检索自定义属性并处理重新雇佣、员工转换和全球分配等场景。

本部分介绍如何为以下 HR 方案自定义预配应用:

检索更多属性

默认的 Microsoft Entra SuccessFactors 预配应用架构随附了 90 多个预定义的特性。 若要将更多 SuccessFactors 属性添加到预配架构,请使用列出的以下步骤:

  1. 使用 OData 查询从 Employee Central 检索有效测试用户的数据。

     https://[SuccessFactorsAPIEndpoint]/odata/v2/PerPerson?$format=json&
     $filter=(personIdExternal in '[personIdExternalValue]')&
     $expand=employmentNav/userNav,employmentNav/jobInfoNav,personalInfoNav,personEmpTerminationInfoNav,
     phoneNav,phoneNav/phoneTypeNav,emailNav,employmentNav/jobInfoNav/businessUnitNav,employmentNav/jobInfoNav/companyNav,
     employmentNav/jobInfoNav/companyNav/countryOfRegistrationNav,employmentNav/jobInfoNav/costCenterNav,
     employmentNav/jobInfoNav/divisionNav,employmentNav/jobInfoNav/departmentNav,employmentNav/jobInfoNav/jobCodeNav,
     employmentNav/jobInfoNav/locationNav,employmentNav/jobInfoNav/locationNav/addressNavDEFLT,employmentNav/jobInfoNav/payGradeNav,
     employmentNav/empGlobalAssignmentNav,employmentNav/empGlobalAssignmentNav/assignmentTypeNav,employmentNav/jobInfoNav/emplStatusNav,
     employmentNav/jobInfoNav/employmentTypeNav,employmentNav/jobInfoNav/employeeClassNav,employmentNav/jobInfoNav/eventReasonNav
    
  2. 确定与特性关联的 Employee Central 实体

    • 如果该特性是 EmpEmployment 实体的一部分,则在 employmentNav 节点下查看该特性 。
    • 如果该特性是 User 实体的一部分,则在 employmentNav/userNav 节点下查看该特性 。
    • 如果该特性是 EmpJob 实体的一部分,则在 employmentNav/jobInfoNav 节点下查看该特性 。
  3. 构造与特性关联的 JSON 路径,并将此新特性添加到 SuccessFactors 特性列表中。

    • 示例 1:假设你要添加属于 employmentNav 实体一部分的 okToRehire 属性,请使用 JSONPath $.employmentNav.results[0].okToRehire
    • 示例 2:假设你要添加属于 userNav 实体一部分的特性 timeZone,请使用 JSONPath $.employmentNav.results[0].userNav.timeZone
    • 示例 3:假设你要添加属于 jobInfoNav 实体一部分的特性 flsaStatus,请使用 JSONPath $.employmentNav.results[0].jobInfoNav.results[0].flsaStatus
  4. 保存该架构。

  5. 重新开始预配。

检索自定义特性

默认情况下,Microsoft Entra SuccessFactors 预配应用中预定义了以下自定义特性:

  • User (userNav) 实体中的 custom01-custom15
  • 名为 empNavCustomString1-empNavCustomString15 的 EmpEmployment (employmentNav) 实体中的 customString1-customString15
  • 名为 empJobNavCustomString1-empNavJobCustomString15 的 EmpJobInfo (jobInfoNav) 实体中的 customString1-customString15

假设在你的 Employee Central 实例中,EmpJobInfo 中的 customString35 特性存储了位置说明 。 你想要将此值传送到 Active Directory physicalDeliveryOfficeName 特性。 若要为此场景配置属性映射,请使用以下步骤:

  1. 编辑 SuccessFactors 特性列表以添加名为 empJobNavCustomString35 的新特性。
  2. 将此特性的 JSONPath API 表达式设置为:$.employmentNav.results[0].jobInfoNav.results[0].customString35
  3. 在 Microsoft Entra 管理中心保存并重新加载映射更改。
  4. 在特性映射边栏选项卡中,将 empJobNavCustomString35 映射到 physicalDeliveryOfficeName 。
  5. 保存映射。

扩展此方案:

  • 如果你要映射 User 实体中的 custom35 特性,请使用 JSONPath $.employmentNav.results[0].userNav.custom35
  • 如果你要映射 EmpEmployment 实体中的 customString35 特性,请使用 JSONPath $.employmentNav.results[0].customString35

将就业状态映射到帐户状态

默认情况下,Microsoft Entra SuccessFactors 连接器使用 PersonEmpTerminationInfo 对象的 activeEmploymentsCount 字段来设置帐户状态。 对于此特性,你可能会遇到以下问题之一。

  1. 有一个已知的问题,连接器可能会在工作的最后一天、终止的前一天禁用已终止员工的帐户。
  2. 如果 PersonEmpTerminationInfo 对象设置为 null,则在终止期间,AD 帐户禁用不起作用,因为预配引擎会筛选掉 personEmpTerminationInfoNav 对象设置为 null 的记录。

如果遇到这些问题中的任何一个或希望将就业状态映射到帐户状态,可以更新映射以展开 emplStatus 字段,并使用字段 emplStatus.externalCode 中显示的就业状态代码。 根据 SAP 支持说明 2505526,下面列出了可在预配应用中检索的就业状态代码。

  • A = 活动
  • D = 暂停活动
  • U = 无薪休假
  • U = 带薪休假
  • S = 已停职
  • F = 休假
  • O = 已解雇
  • R = 已退休
  • T = 已终止

使用以下步骤更新映射以检索这些代码。

  1. 打开 SuccessFactors 预配应用的特性映射边栏选项卡。

  2. 在“显示高级选项”下,单击“编辑 SuccessFactors 属性列表”。

  3. 查找属性 emplStatus 并将 JSONPath 更新为 $.employmentNav.results[0].jobInfoNav.results[0].emplStatusNav.externalCode。 更新使连接器能够检索表中的就业状态代码。

  4. 保存更改。

  5. 在属性映射边栏选项卡中,更新帐户状态标志的表达式映射。

    预配作业 帐户状态属性 映射表达式
    SuccessFactors 到 Active Directory 域服务用户预配 accountDisabled Switch([emplStatus], "True", "A", "False", "U", "False", "P", "False")
    SuccessFactors 到 Microsoft Entra 用户预配 accountEnabled Switch([emplStatus], "False", "A", "True", "U", "True", "P", "True")
  6. 保存更改。

  7. 使用按需预配测试配置。

  8. 确认同步按预期运行后,重启预配作业。

处理员工转换和重新雇佣场景

关于员工转换场景:员工转换是将现有的全职员工转换为合同工或将合同工转换为全职员工的过程。 在此方案中,Employee Central 将为同一个 Person 实体添加新的 EmpEmployment 实体以及新的User 实体 。 在上一个 EmpEmployment 实体下嵌套的 User 实体设置为 null 。

关于重新雇用场景:在 SuccessFactors 中,有两个选项可用于处理重新聘用的员工:

  • 选项 1:在 Employee Central 中创建新的人员配置文件
  • 选项 2:在 Employee Central 中重复使用现有的人员配置文件

如果 HR 流程使用选项 1,则不需要对预配架构进行任何更改。 如果 HR 流程使用选项 2,则 Employee Central 将为同一个 Person 实体添加新的 EmpEmployment 实体以及新的User 实体 。

可以处理这两种情况,以便在发生转换或重新雇用时显示新的雇佣数据。 使用列出的步骤批量更新预配应用架构:

  1. 打开 SuccessFactors 预配应用的特性映射边栏选项卡。

  2. 向下滚动,然后单击“显示高级选项”。

  3. 单击“在此处查看架构”链接打开架构编辑器。

    该屏幕截图显示了用于打开架构编辑器的“在此处查看架构”链接。

  4. 单击“下载”链接,以便在编辑之前保存架构副本。

    该屏幕截图显示了架构编辑器,其中选择了“下载”以保存架构副本。

  5. 在架构编辑器中,按 Ctrl-H 键打开“查找-替换”控件。

  6. 在“查找”文本框中,复制并粘贴值 $.employmentNav.results[0]

  7. 在“替换”文本框中,复制并粘贴值 $.employmentNav.results[-1:]。 此 JSONPath 表达式返回最新的 EmpEmployment 记录。

    查找-替换-转换

  8. 单击“全部替换”选项以更新架构。

  9. 保存该架构。

  10. 上述过程将按如下所示更新所有 JSONPath 表达式:

    • 旧 JSONPath:$.employmentNav.results[0].jobInfoNav.results[0].departmentNav.name_localized
    • 新 JSONPath:$.employmentNav.results[-1:].jobInfoNav.results[0].departmentNav.name_localized
  11. 使用按需预配测试配置。

  12. 确认同步按预期运行后,重启预配作业。

注意

上述方法仅在 SAP SuccessFactors 按升序返回就业对象的情况下适用,其中最新的就业记录始终为 employmentNav 结果数组中的最后一条记录。 SuccessFactors 无法保证返回多条就业记录的顺序。 如果 SuccessFactors 实例有多条与某位工作人员对应的就业记录,并且始终希望检索与活动就业记录关联的属性,请使用下一部分中所述的步骤。

检索当前活动就业记录

使用 $.employmentNav.results[0]$.employmentNav.results[-1:] 的 JSONPath 根提取就业记录适用于大多数场景,并可使配置保持简单。 但是,根据 SuccessFactors 实例的配置方式,可能需要更新此配置,以确保连接器始终提取最新的活动就业记录。

本部分介绍如何更新 JSONPath 设置,以明确检索用户的当前活动就业记录。 还介绍了如何处理员工转换和重新雇佣场景。

  1. 打开 SuccessFactors 预配应用的特性映射边栏选项卡。

  2. 向下滚动,然后单击“显示高级选项”。

  3. 单击“在此处查看架构”链接打开架构编辑器。

  4. 单击“下载”链接,以便在编辑之前保存架构副本。

  5. 在架构编辑器中,按 Ctrl-H 键打开“查找-替换”控件。

  6. 执行以下查找替换操作。 执行查找替换操作时,请确保没有前导或尾部空格。 如果使用的是 [-1:] 索引而不是 [0],请相应地更新“要查找的字符串”字段。

    要查找的字符串 要用于替换的字符串 用途
    $.employmentNav.results[0].jobInfoNav.results[0].emplStatus $.employmentNav..jobInfoNav..results[?(@.emplStatusNav.externalCode == 'A' || @.emplStatusNav.externalCode == 'U' || @.emplStatusNav.externalCode == 'P' )].emplStatusNav.externalCode 借助此查找替换操作,我们能够扩展 emplStatusNav OData 对象。
    $.employmentNav.results[0].jobInfoNav.results[0] $.employmentNav..jobInfoNav..results[?(@.emplStatusNav.externalCode == 'A' || @.emplStatusNav.externalCode == 'U' || @.emplStatusNav.externalCode == 'P')] 借助此查找替换操作,我们可以指示连接器始终检索与活动 SuccessFactors EmpJobInfo 记录关联的属性。 忽略与 SuccessFactors 中已终止/非活动记录关联的属性。
    $.employmentNav.results[0] $.employmentNav..results[?(@.jobInfoNav..results[?(@.emplStatusNav.externalCode == 'A' || @.emplStatusNav.externalCode == 'U' || @.emplStatusNav.externalCode == 'P')])] 借助此查找替换操作,我们可以指示连接器始终检索与活动 SuccessFactors 就业记录关联的属性。 忽略与 SuccessFactors 中已终止/非活动记录关联的属性。
  7. 保存该架构。

  8. 上述过程将更新所有 JSONPath 表达式。

  9. 要使雇用前处理流程正常进行,与 startDate 属性关联的 JSONPath 必须使用 [0][-1:] 索引。 在“显示高级选项”下,单击“编辑 SuccessFactors 属性列表”。 查找属性 startDate 并将其设置为值 $.employmentNav.results[-1:].startDate

  10. 保存该架构。

  11. 若要确保按预期处理离职,可以在属性映射部分中使用以下设置之一。

    预配作业 帐户状态属性 在帐户状态基于“activeEmploymentsCount”时要使用的表达式 在帐户状态基于“emplStatus”值时要使用的表达式
    SuccessFactors 到 Active Directory 域服务用户预配 accountDisabled Switch([activeEmploymentsCount], "False", "0", "True") Switch([emplStatus], "True", "A", "False", "U", "False", "P", "False")
    SuccessFactors 到 Microsoft Entra 用户预配 accountEnabled Switch([activeEmploymentsCount], "True", "0", "False") Switch([emplStatus], "False", "A", "True", "U", "True", "P", "True")
  12. 保存更改。 1.

  13. 使用按需预配测试配置。

  14. 确认同步按预期运行后,重启预配作业。

处理全局分配方案

为 Employee Central 中的用户处理全局分配时,SuccessFactors 将添加新的 EmpEmployment 实体,并将 assignmentClass 设置为“GA” 。 它还会创建新的 User 实体。 因此,该用户现在具有:

  • 一个 EmpEmployment + User 实体,该实体对应于 assignmentClass 设置为“ST”的本地分配 ;
  • 另一个 EmpEmployment + User 实体,该实体对应于 assignmentClass 设置为“GA”的全局分配

若要提取属于标准分配和全球分配用户配置文件的属性,请使用列出的步骤:

  1. 打开 SuccessFactors 预配应用的特性映射边栏选项卡。

  2. 向下滚动,然后单击“显示高级选项”。

  3. 单击“在此处查看架构”链接打开架构编辑器。

  4. 单击“下载”链接,以便在编辑之前保存架构副本。

  5. 在架构编辑器中,按 Ctrl-H 键打开“查找-替换”控件。

  6. 在“查找”文本框中,复制并粘贴值 $.employmentNav.results[0]

  7. 在“替换”文本框中,复制并粘贴值 $.employmentNav.results[?(@.assignmentClass == 'ST')]。 请注意 == 运算符两边的空格,这对于成功处理 JSONPath 表达式很重要。

  8. 单击“全部替换”选项以更新架构。

  9. 保存该架构。

  10. 上述过程将按如下所示更新所有 JSONPath 表达式:

    • 旧 JSONPath:$.employmentNav.results[0].jobInfoNav.results[0].departmentNav.name_localized
    • 新 JSONPath:$.employmentNav.results[?(@.assignmentClass == 'ST')].jobInfoNav.results[0].departmentNav.name_localized
  11. 重载应用的特性映射边栏选项卡。

  12. 向下滚动,然后单击“显示高级选项”。

  13. 单击“编辑 SuccessFactors 属性列表”。

  14. 添加新特性以提取全局分配数据。 例如:如果你要提取与某个全局分配配置文件关联的部门名称,可以在将 JSONPath 表达式设置为 $.employmentNav.results[?(@.assignmentClass == 'GA')].jobInfoNav.results[0].departmentNav.name_localized 的情况下添加特性 globalAssignmentDepartment。

  15. 现在,可以将这两个部门值传送到 Active Directory 特性,或者选择地使用表达式映射来传送某个值。 示例:以下表达式将 AD department 属性的值设置为 globalAssignmentDepartment(如果存在),否则它会将值设置为与标准分配关联的部门。

    • IIF(IsPresent([globalAssignmentDepartment]),[globalAssignmentDepartment],[department])
  16. 保存映射。

  17. 使用按需预配测试配置。

  18. 确认同步按预期运行后,重启预配作业。

处理并发作业方案

当 Employee Central 中的用户具有并发/多个作业时,将存在 assignmentClass 设置为“ST”的两个 EmpEmployment 和 User 实体 。 若要提取属于这两个职务的属性,请使用列出的步骤:

  1. 打开 SuccessFactors 预配应用的特性映射边栏选项卡。
  2. 向下滚动,然后单击“显示高级选项”。
  3. 单击“编辑 SuccessFactors 属性列表”。
  4. 假设你想要拉取与作业 1 和作业 2 关联的部门。 预定义的特性 department 已提取第一个作业的 department 值。 可以定义一个名为 secondJobDepartment 的新特性,并将 JSONPath 表达式设置为 $.employmentNav.results[1].jobInfoNav.results[0].departmentNav.name_localized
  5. 现在,可以将这两个部门值传送到 Active Directory 特性,或者选择地使用表达式映射来传送某个值。
  6. 保存映射。
  7. 使用按需预配测试配置。
  8. 确认同步按预期运行后,重启预配作业。

正在检索位置详细信息

SuccessFactors 连接器支持位置对象的展开。 若要展开和检索特定语言的职位对象属性(例如职务级别或职位名称),可以使用 JSONPath 表达式,如下所示。

属性名称 JSONPath 表达式
positionJobLevel $.employmentNav.results[0].jobInfoNav.results[0].positionNav.jobLevel
positionNameFR $.employmentNav.results[0].jobInfoNav.results[0].positionNav.externalName_fr_FR
positionNameDE $.employmentNav.results[0].jobInfoNav.results[0].positionNav.externalName_de_DE

在 Onboarding 模块中预配用户

从 SAP SuccessFactors 到本地 Active Directory 和 Microsoft Entra ID 的入站用户预配现在支持预配 SAP SuccessFactors Onboarding 2.0 模块中的预雇用。 Microsoft Entra 预配服务发现具有未来开始日期的新员工配置文件时,会查询 SAP SuccessFactors,以使用以下状态代码之一来获取新员工:activeinactiveactive_external_suite。 状态代码 active_external_suite 对应于 SAP SuccessFactors Onboarding 2.0 模块中的预雇用项。 有关这些状态代码的说明,请参阅 SAP 支持说明 2736579

预配服务的默认行为是在 Onboarding 模块中处理预先雇用的问题。

如果要在 Onboarding 模块中排除预先雇用的处理进程,请按如下所示更新预配作业配置:

  1. 打开 SuccessFactors 预配应用的特性映射边栏选项卡。
  2. 编辑 SuccessFactors 特性列表以添加名为 userStatus 的新特性。
  3. 将此特性的 JSONPath API 表达式设置为:$.employmentNav.results[0].userNav.status
  4. 保存架构,返回到属性映射边栏选项卡。
  5. 编辑源对象范围以应用范围筛选器 userStatus NOT EQUALS
  6. 保存映射并验证范围筛选器是否按需使用预配服务进行工作。

在 SuccessFactors 中启用 OData API 审核日志

Microsoft Entra SuccessFactors 连接器使用 SuccessFactors OData API 检索更改并预配用户。 如果在预配服务时发现问题,并希望确认从 SuccessFactors 检索到的数据,可以在 SuccessFactors 中启用 OData API 审核日志。 从审核日志中检索 Microsoft Entra ID 发送的请求有效负载。 要排除鼓掌,可以在 cURL 或 Graph 浏览器等工具中复制该请求有效负载,将其设置为使用与连接器相同的 API 用户,然后查看它是否能从 SuccessFactors 返回所需的更改。

写回方案

本部分介绍不同的写回方案。 其中将会根据 SuccessFactors 中设置电子邮件和电话号码的方式推荐配置方法。

电话和电子邮件写回支持的方案

# 方案要求 电子邮件主要
标志值
工作电话
主要标志值
移动电话
主要标志值
工作电话
mapping
移动电话
mapping
1 * 仅将业务电子邮件设置为主要联系方式。
* 不设置电话号码。
true true false [不设置] [不设置]
2 * 在 SuccessFactors 中,业务电子邮件和业务电话是主要联系方式
* 始终将 Microsoft Entra 电话号码传送到业务电话,并将移动电话传送到手机。
true false telephoneNumber mobile
3 * 在 SuccessFactors 中,业务电子邮件和手机是主要联系方式
* 始终将 Microsoft Entra 电话号码传送到业务电话,并将移动电话传送到手机
true false true telephoneNumber mobile
4 * 在 SuccessFactors 中,业务电子邮件是主要联系方式。
* 在 Microsoft Entra ID 中,检查工作电话号码是否存在,如果存在,请检查手机号码是否也存在。 只有当手机号码不存在时,才将工作电话号码标记为主要电话号码。
true 使用表达式映射:IIF(IsPresent([telephoneNumber]), IIF(IsPresent([mobile]),"false", "true"), "false") 使用表达式映射:IIF(IsPresent([mobile]),"false", "true") telephoneNumber mobile
5 * 在 SuccessFactors 中,业务电子邮件和业务电话是主要联系方式。
* 在 Microsoft Entra ID 中,如果移动电话可用,请将其设置为业务电话,否则请使用 telephoneNumber。
true false IIF(IsPresent([mobile]), [mobile], [telephoneNumber]) [不设置]
  • 如果写回特性映射中没有电话号码的映射,则写回中仅包括电子邮件。
  • 在 Employee Central 中加入新员工时,业务电子邮件和电话号码可能不可用。 如果在加入期间必须将业务电子邮件和业务电话设置为主要联系方式,可以在创建新员工期间为业务电话和电子邮件设置虚构值。 一段时间后,写回应用会更新该值。

使用 UserID 启用写回

SuccessFactors 写回应用使用以下逻辑更新用户对象属性:

  • 第一步,它在更改集中查找 userId 属性。 如果存在,使用“UserId”进行 SuccessFactors API 调用。
  • 如果 未找到 userId,默认使用 personIdExternal 属性值。

通常 SuccessFactors 中的 personIdExternal 属性值与 userId 属性值相匹配。 但是,在重新聘用和员工转换等情况下,SuccessFactors 中的员工可能有两条雇佣记录,一条处于活动状态,一条处于非活动状态。 在这种情况下,为了确保写回更新活动用户配置文件,请按照说明更新 SuccessFactors 预配应用的配置。 此配置可确保 userId 始终出现在连接器可见的更改集中,并在 SuccessFactors API 调用中使用。

  1. 打开 SuccessFactors 到 Microsoft Entra 用户预配应用或 SuccessFactors 到本地 AD 用户预配应用。
  2. 确保 Microsoft Entra ID 中的 extensionAttribute[1-15] 始终存储每个员工活动雇佣记录的 userId。 该记录将 SuccessFactors userId 属性映射到 Microsoft Entra ID 中的 extensionAttribute[1-15]

    入站 UserID 属性映射

  3. 有关 JSONPath 设置的指导,请参阅处理员工转换和重新雇佣场景部分,以确保有效就业记录的 userId 值流入 Microsoft Entra ID。
  4. 保存映射。
  5. 运行预配作业以确保 userId 值流入 Microsoft Entra ID。

    注意

    如果使用 SuccessFactors 到本地 Active Directory 用户预配,请将 Microsoft Entra Connect 配置为将 userId 属性值从本地 Active Directory 同步到 Microsoft Entra ID。

  6. 在 Azure 门户中打开 SuccessFactors 写回应用。
  7. 将需要的包含 userId 值的 extensionAttribute 映射到 SuccessFactors userId 属性。

    写回 UserID 属性映射

  8. 保存映射。
  9. 转到“属性映射”->“高级”->“查看架构”,打开 JSON 架构编辑器。
  10. 下载作为备份的架构副本。
  11. 在架构编辑器中,按 Ctrl-F 并搜索包含 userId 映射的 JSON 节点,该节点映射到源 Microsoft Entra 属性。
  12. 将 flowBehavior 属性从“FlowWhenChanged”更新为“FlowAlways”,如下所示。

    映射流行为更新

  13. 保存映射,并通过按需预配来测试写回方案。

电话和电子邮件写回不支持的方案

  • 在 Employee Central 中加入新员工期间,个人电子邮件和个人电话将设置为主要联系方式。 写回应用无法切换此设置,因此无法将业务电子邮件和业务电话设置为主要联系方式。
  • 在 Employee Central 中,业务电话将设置为主要联系方式。 写回应用无法更改此设置,因此无法将手机设置为主要联系方式。
  • 写回应用无法读取当前的主要标志设置,因此无法为写入操作使用相同的值。 始终使用特性映射中配置的标志值。

后续步骤