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:
Set a descriptive name for this map
Set source system to SAP SuccessFactors
Asset Schema is pre-filled. This is the schema in JSM Assets on which you started the configuration.
Select the Object Type within your schema.
Select schedule frequency
Attribute mapping - see below for more details.
Sample Schema
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 |
---|---|
| The keyword “key” refers to using userId (from SuccessFactors) as a unique identifier. This allows OnLink to update the record. |
| Maps firstName from SAP SuccessFactors to FirstName text attribute |
| 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. |
| This maps jobTitle from positionNav section of the API response to JobTitle attribute. Here are sections that can be expanded: positionNav, departmentNav |
| 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