SAP SuccessFactors to JSM Assets

Please review instructions here to get started with setting up an Assets import configuration. You can then access OnLink app from the “Manage your apps” menu to further configure and set the field level mapping. Here’s an example configuration:

 

 

image-20240325-035003.png

 

 

 

 

  1. Set a descriptive name for this map

  2. Set source system to SAP SuccessFactors

  3. Asset Schema is pre-filled. This is the schema in JSM Assets on which you started the configuration.

  4. Select the Object Type within your schema.

  5. Select schedule frequency

  6. Attribute mapping - see below for more details.

 

Sample Schema

image-20240325-035045.png

 

 

 

Here’s the associated mapping

key:userId=UserID
map:userNav_firstName=FirstName
map:userNav_lastName=LastName
map:userNav_email=JiraUser
map:startDate=HireDate
map:positionNav_jobTitle=JobTitle
map:departmentNav_name=Department

 

Below is a detailed breakdown of each of the mapping items:

Key or Map

Description

Key or Map

Description

key:userId=UserID

The keyword “key” refers to using userId (from SuccessFactors) as a unique identifier. This allows OnLink to update the record.

map:userNav_firstName=FirstName

Maps firstName from SAP SuccessFactors to FirstName text attribute

map:userNav_email=JiraUser

The email field containing email address of worker is mapped to JiraUser, which is an attribute of type “User”. Here OnLink looks-up the Atlassian User object based on the email address.

map:positionNav_jobTitle=JobTitle

This maps jobTitle from positionNav section of the API response to JobTitle attribute. Here are sections that can be expanded: positionNav, departmentNav

config:data_limit=100

Optional parameter to limit the number of users to pull from SuccessFactors. This can be used for initial testing.

OnLink processes data in two steps - Get Data and Import Data. To manually test, you can click on Get Data first and then wait until you see “No more pending records. Data will be imported on next Import run.” message in Job Logs. Then, click on Import. Production runs are fully automated based on the schedule you choose.

Here’s the full list of fields available for mapping.

Fields in EmpJob can be referenced as-is e.g. map:startDate=SchemaAttributeName

Fields in others should be referenced with a prefix e.g. map:userNav_firstName=SchemaAttributeName

EmpJob

userId, startDate, occupationalLevels, workscheduleCode, timeEventTypeGroupId, effectiveLatestChange, endDate, contractType, createdDateTime, jobCode, validFrom, fgtsDate, payScaleLevel, division, timeTypeProfileCode, eeoClass, probationaryPeriodMeasure, fromCurrency, eeo5JobCategory, flsaStatus, costCenter, residentVote, timeRecordingProfileCode, laborProtection, sickPaySupplementMeasure, exclExecutiveSector, isFulltimeEmployee, emplStatus, ineligibleStatutoryMinWage, guaranteedPayment, occupationGtm, occupationPer, payScaleType, countryOfCompany, eeo6JobCategory, createdOn, municipalInseeCode, creditForPreviousService, localJobTitle, healthRisk, dismissalsNoticePeriodForEmployer, timeRecordingAdmissibilityCode, fte, payGrade, travelDistance, event, timeRecordingVariant, calculationBase, assedicCertObjectNum, degreeOfProductivity, assessmentStatus, managerId, spclRuleNonManualWorker, customString13, lastModifiedOn, dynamicBreakConfigCode, workerCategory, defaultOvertimeCompensationVariant, contractDate, businessUnit, lastModifiedDateTime, notes, harmfulAgentExposure, jobTitle, probationaryPeriod, sickPaySupplement, electoralCollegeForWorksCouncil, codeOfJobForEldp, familyRelationshipWithEmployer, exchangeRate, workPermitExpiry, currentWageLevel, holidayCalendarCode, empRelationship, standardHours, contractNumber, electoralCollegeForWorkersRepresentatives, jobGroup, eeo4JobCategory, eventReason, isCompetitionClauseActive, assedicCertInitialStateNum, fgtsPercent, toCurrency, position, payScaleArea, probationPeriodEndDate, timezone, workingDaysPerWeek, regularTemp, workLocation, contractReferenceForAed, isSideLineJobAllowed, company, department, eeo1JobCategory, periodIndicator, employeeClass, employmentType, lastModifiedBy, customString3, customString2, customString8, customString7, payScaleGroup, employeeWorkgroupMembership, positionEntryDate, sickPaySupplementPeriod, createdBy, contractId, location, paymentInLieuOfNotice

UserNav

userId, salaryBudgetFinalSalaryPercentage, dateOfCurrentPosition, matrix1Label, salary, objective, ssn, state, issueComments, timeZone, defaultLocale, nationality, salaryBudgetLumpsumPercentage, sysCostOfSource, ethnicity, displayName, payGrade, nickname, email, salaryBudgetExtra2Percentage, stockBudgetOther1Amount, raiseProrating, sysStartingSalary, finalJobCode, lumpsum2Target, stockBudgetOptionAmount, country, lastModifiedDateTime, stockBudgetStockAmount, sciLastModified, criticalTalentComments, homePhone, veteranSeparated, stockBudgetOther2Amount, firstName, stockBudgetUnitAmount, salutation, impactOfLoss, benchStrength, sysSource, futureLeader, title, meritEffectiveDate, veteranProtected, lumpsumTarget, employeeClass, hireDate, matrix2Label, salaryLocal, citizenship, reasonForLeaving, riskOfLoss, location, reloComments, username, serviceDate, reviewFreq, salaryBudgetTotalRaisePercentage, jobCode, lastModifiedWithTZ, division, custom02, meritTarget, custom01, custom04, custom03, custom06, custom05, custom08, reloWilling, custom07, stockBudgetOther3Amount, custom09, onboardingId, fax, bonusBudgetAmount, salaryBudgetPromotionPercentage, dateOfPosition, finalJobFamily, teamMembersSize, compensationEligible, lastReviewDate, compensationStockEligible, businessPhone, status, lastName, gender, city, competency, businessSegment, compensationSalaryRateUnits, newToPosition, assignmentUUID, dateOfBirth, localCurrencyCode, jobLevel, custom11, defaultFullName, custom10, compensationReadOnly, custom13, custom12, custom15, custom14, veteranDisabled, totalTeamSize, married, cellPhone, veteranMedal, compensationSalaryRateType, zipCode, jobTitle, minority, suffix, matrixManaged, bonusTarget, addressLine1, jobFamily, jobRole, addressLine2, addressLine3, mi, potential, origHireDate, level, salaryBudgetMeritPercentage, salaryProrating, pronouns, lastModified, promotionAmount, impactOfLossComments, empId, compensationSalaryEligible, department, isPrimaryAssignment, reloLocation, companyExitDate, seatingChart, finalJobRole, performance, compensationBonusEligible, keyPosition, salaryBudgetExtraPercentage

PositionNav

code, effectiveStartDate, externalName_da_DK, businessUnit, lastModifiedDateTime, jobTitle, criticality, createdDateTime, jobCode, mdfSystemVersionId, type, incumbent, division, externalName_zh_TW, externalName_ja_JP, externalName_fi_FI, mdfSystemEntityId, payRange, regularTemporary, externalName_pt_PT, costCenter, cust_recruiter, standardHours, legacyPositionId, externalName_zh_CN, externalName_localized, mdfSystemRecordStatus, externalName_nb_NO, vacant, effectiveStatus, externalName_fr_FR, technicalParameters, externalName_en_GB, effectiveEndDate, positionCriticality, externalName_nl_NL, positionTitle, description, externalName_defaultValue, externalName_ar_SA, externalName_es_ES, positionControlled, externalName_pt_BR, payGrade, company, department, employeeClass, mdfSystemObjectType, creationSource, changeReason, targetFTE, lastModifiedDate, externalName_ru_RU, externalName_it_IT, lastModifiedBy, lastModifiedDateWithTZ, jobLevel, transactionSequence, externalName_de_DE, externalName_ko_KR, createdDate, createdBy, mdfSystemOptimisticLockUUID, mdfSystemRecordId, comment, externalName_sv_SE, location, multipleIncumbentsAllowed, externalName_en_US, externalName_en_DEBUG

EmpEmploymentTermination

endDate, personIdExternal, userId, benefitsEndDate, lastModifiedDateTime, notes, eligibleForSalContinuation, lastModifiedBy, bonusPayExpirationDate, okToRehire, createdDateTime, regretTermination, createdOn, lastDateWorked, lastModifiedOn, payrollEndDate, createdBy, salaryEndDate, StockEndDate

To validate the data returned by your OData API endpoint, use a tool like Insomnia or Postman to invoke the query. Here’s a sample URL:

{{successfactors url}}/odata/v2/User?$expand=userNav,positionNav,departmentNav&$select=userId,firstName,lastName,email,phone,hireDate,positionNav/jobTitle,departmentNav/name