SuccessFactors-uttrycksmappningsfunktioner för Microsoft Entra ID-etablering

Den här artikeln innehåller en omfattande guide till vanliga uttrycksmappningsfunktioner när du konfigurerar SuccessFactors till Microsoft Entra ID-användaretablering. Dessa funktioner hjälper till att transformera och mappa data från SuccessFactors för att skapa lämpliga användarattribut i Microsoft Entra-ID.

Innehållsförteckning

Funktioner för strängmanipulering

Grundläggande strängåtgärder

Scenario 1: Du vill fylla på ett person-ID med inledande nollor för att skapa en sträng med 8 tecken.

Målattribut: employeeId

Replace(Join("","00000000",[personIdExternal]), ,"(.*?)(?<id>.{0,8})$", ,"${id}", ,)

Exempel:

  • Indatavärden: [personIdExternal] = "12345"
  • Utdata för uttryck: 00012345

Scenario 2: Du måste fylla på kostnadsställe med inledande nollor så att det blir 10 tecken.

Målattribut: extensionAttribute1

Replace(Join("","0000000000",[costCenterId]), ,"(.*?)(?<id>.{0,10})$", ,"${id}", ,)

Exempel:

  • Indatavärden: [costCenterId] = "567"
  • Utdata för uttryck: 0000000567

Scenario 3: Du vill skapa ett medarbetar-ID genom att lägga till ett prefix på ett vadderat personalnummer.

Målattribut: employeeId

Append("05",Replace(Join("","000000",[employeeId]), ,"(.*?)(?<id>.{0,6})$", ,"${id}", ,))

Exempel:

  • Indatavärden: [employeeId] = "789"
  • Utdata för uttryck: 05000789

Konvertering av textfall

Scenario 1: Du måste konvertera namn från alla versaler till rätt skiftläge (rubrikfall).

Målattribut: sn

Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64)))

Exempel:

  • Indatavärden: [lastName] = "JOHNSON"
  • Utdata för uttryck: Johnson

Scenario 2: Du vill skapa ett visningsnamn med rätt skiftlägesformatering.

Målattribut: displayName

Join(", ", Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64))), Join("",Mid([firstName],1,1),ToLower(Mid([firstName],2,64))))

Exempel:

  • Indatavärden: [lastName] = "SMITH", [firstName] = "JOHN"
  • Utdata för uttryck: Smith, John

Scenario 3: Du måste hantera namn med blanksteg genom att ersätta blanksteg med punkter.

Målattribut: givenName

Replace([firstName]," ", , ,".", , )

Exempel:

  • Indatavärden: [firstName] = "Mary Ann"
  • Utdata för uttryck: Mary.Ann

Generering av e-postadress

Grundläggande e-postgenerering

Scenario 1: Du vill generera e-postadresser med förnamn och efternamn med företagsspecifika domäner.

Målattribut: e-post

SelectUniqueValue(
    Switch([company], 
        Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
        "Contoso", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
        "Fabrikam", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "fabrikam.com"),
        "Woodgrove", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "woodgrove.com")
    ),
    Switch([company], 
        Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com"), 
        "Contoso", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com"), 
        "Fabrikam", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "fabrikam.com"), 
        "Woodgrove", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), Mid([middleName],1,1), [lastName]))), "woodgrove.com")
    )
)

Exempel:

  • Indatavärden: [företag] = "Contoso", [firstName] = "John", [lastName] = "Smith", [middleName] = "Michael"
  • Utdata för uttryck: john.smith@contoso.com (eller john.m.smith@contoso.com om det första alternativet tas)

Gruppbaserad e-postgenerering för medarbetare

Scenario 1: Du vill generera olika e-postformat baserat på klassificering av anställda (permanent jämfört med tillfälligt).

Målattribut: userPrincipalName

StripSpaces(NormalizeDiacritics(Switch([custom06], 
    Join("", [firstName], ".", [lastName], "@ltts.com"), 
    "Temporary", Join("", [firstName], ".", [lastName], "_ext@ltts.com"), 
    "External", Join("", [firstName], ".", [lastName], "_ext@ltts.com"), 
    "Permanent", Join("", [firstName], ".", [lastName], "@ltts.com")
)))

Exempel:

  • Indatavärden: [custom06] = "Temporary", [firstName] = "Sarah", [lastName] = "Wilson"
  • Utdata för uttryck: sarah.wilson_ext@ltts.com

Validering av företagsdomän

Scenario 1: Du vill bara skicka e-postadresser som tillhör en specifik företagsdomän.

Målattribut: e-post

IgnoreFlowIfNullOrEmpty(IIF(InStr([emailAddress],"@contoso.com")=0,"",[emailAddress]))

Exempel:

  • Indatavärden: [emailAddress] = "john.doe@contoso.com"
  • Utdata för uttryck: john.doe@contoso.com
  • Alternativa indata: [emailAddress] = "john.doe@external.com"
  • Alternativa utdata: (tom – ignorerad)

Befintlig e-postbevarande

Scenario 1: Du vill använda befintlig e-post från SuccessFactors för vissa divisioner, men generera nya för andra.

Målattribut: userPrincipalName

SelectUniqueValue(
    Switch([divisionId], 
        Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"), 
        "8900", [email]
    ), 
    Join("1@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"), 
    Join("2@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")
)

Exempel:

  • Indatavärden: [divisionId] = "8900", [email] = "existing.user@company.com", [firstName] = "Mike", [lastName] = "Brown"
  • Utdata för uttryck: existing.user@company.com
  • Alternativa indata: [divisionId] = "1200", [firstName] = "Mike", [lastName] = "Brown"
  • Alternativa utdata: mike.brown@contoso.com

Kontohanteringslogik

Grundläggande kontostatus

Scenario 1: Du vill avgöra om ett konto ska inaktiveras baserat på anställningsstatus.

Målattribut: accountDisabled

Switch([emplStatus], "False", "741", "False", "749", "True", "746", "True")

Exempel:

  • Indatavärden: [emplStatus] = "741"
  • Utdata för uttryck: False (konto aktiverat)
  • Alternativa indata: [emplStatus] = "746"
  • Alternativa utdata: True (kontot är inaktiverat)

Dölj från logik för adresslistor

Scenario 1: Du måste ange attributet msExchHideFromAddressLists baserat på start- och slutdatum.

Målattribut: msExchHideFromAddressLists

IIF(DateDiff("d", CDate(IIF(IsPresent([startDate]), [startDate], DateAdd("d", "10", Now()))), Now()) >= -1, IIF(DateDiff("d", Now(), CDate(IIF(IsPresent([endDate]), [endDate], DateAdd("d", "1", Now())))) >= 0, "FALSE", "TRUE"), "TRUE")

Exempel:

  • Indatavärden: [startDate] = "2025-01-15", [endDate] = "2025-12-31" (aktuellt datum: 2025-07-30)
  • Utdata från uttryck: FALSE (inte dolt från adresslistor)
  • Alternativa indata: [startDate] = "2025-01-15", [endDate] = "2025-06-30"
  • Alternativa utdata: TRUE (dolda från adresslistor)

Komplex statuslogik för medarbetare

Scenario 1: Du har ett komplext krav på att inaktivera konton baserat på anpassade fält och anställningsdatum.

Målattribut: accountEnabled

Switch([empNavCustomString3], "True",
"62220", Switch([cust_hiredate], 
    IIF(DateDiff("d", CDate([cust_hiredate]), Now()) = 3, 
        Switch([cust_customDate67], 
            IIF(DateDiff("d", CDate([cust_customDate67]), Now())=0, "False", "True"),
            "", "False" 
        ), "True"
    ),
    "", "True"
))

Exempel:

  • Indatavärden: [empNavCustomString3] = "62220", [cust_hiredate] = "2025-07-27", [cust_customDate67] = "2025-07-30" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: False (konto aktiverat)
  • Alternativa indata: [empNavCustomString3] = "62220", [cust_hiredate] = "2025-07-27", [cust_customDate67] = "2025-07-29"
  • Alternativa utdata: True (kontot är inaktiverat)

Datumfunktioner och förfallodatum för kontot

Förfallodatum för grundläggande konto

Scenario 1: Du vill ange kontots förfallodatum baserat på slutdatumet från SuccessFactors.

Målattribut: accountExpires

Switch([endDate], 
    NumFromDate(Join("", FormatDateTime([endDate], "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-05:00")), 
    "", "9223372036854775807"
)

Exempel:

  • Indatavärden: [endDate] = "12/31/2025 12:00:00 AM"
  • Utdata för uttryck: 133835135990000000 (numerisk representation av 2025-12-31 23:59:59-05:00)
  • Alternativa indata: [endDate] = "" (tom)
  • Alternativa utdata: 9223372036854775807 (upphör aldrig att gälla)

Anställningstypbaserad förfallotid

Scenario 1: Du måste ange olika förfalloregler för kontot baserat på anställningstyp (permanent jämfört med entreprenör).

Målattribut: accountExpires

Switch([employmentType], 
    NumFromDate(Join("",FormatDateTime([endDate], ,"M/d/yyyy hh:mm:ss tt","yyyy-MM-dd")," 23:59:59-05:00")),
    "PM", NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 60, CDate([DOB])), ,"M/d/yyyy hh:mm:ss tt","yyyy-MM-dd")," 23:59:59-05:00")),
    "CON", NumFromDate(Join("",FormatDateTime([endDate], ,"M/d/yyyy hh:mm:ss tt","yyyy-MM-dd")," 23:59:59-05:00"))
)

Exempel:

  • Indatavärden: [employmentType] = "PM", [DOB] = "1/15/1990 12:00:00 AM"
  • Utdata för uttryck: 158488415990000000 (numerisk representation av 2050-01-15 23:59:59-05:00, 60 år efter födseln)
  • Alternativa indata: [employmentType] = "CON", [endDate] = "12/31/2025 12:00:00 AM"
  • Alternativa utdata: 133835135990000000 (numerisk representation av 2025-12-31 23:59:59-05:00)

Förfallodatum för händelseorsaksbaserat konto

Scenario 1: Du vill ange kontots förfallodatum baserat på specifika uppsägningshändelser och avgångsvederlag.

Målattribut: accountExpires

Switch([event], 
    IIF(IsPresent([latestTerminationDate]), NumFromDate(Join("", FormatDateTime([latestTerminationDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00")), "9223372036854775807"), 
    "SEVUNSATP", NumFromDate(Join("", FormatDateTime([severanceStartDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00")), 
    "SEVPOSELIM", NumFromDate(Join("", FormatDateTime([severanceStartDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00")), 
    "POSELIM", NumFromDate(Join("", FormatDateTime([severanceStartDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00"))
)

Exempel:

  • Indatavärden: [event] = "SEVUNSATP", [severanceStartDate] = "8/15/2025 12:00:00 AM"
  • Utdata för uttryck: 133877247990000000 (numerisk representation av 2025-08-15 23:59:59-08:00)
  • Alternativa indata: [händelse] = "REGULAR", [latestTerminationDate] = "9/30/2025 12:00:00 AM"
  • Alternativa utdata: 133886207990000000 (numerisk representation av 2025-09-30 23:59:59-08:00)

Hantering av datumformat

Scenario 1: Du måste hantera ogiltiga datum som "12/31/9999" som orsakar fel i NumFromDate.

Målattribut: accountExpires

Switch([endDate],
    NumFromDate(Join("", FormatDateTime([endDate], "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), "T23:59:59-04:00")),
    "12/31/9999 12:00:00 AM", NumFromDate("2099-12-31T23:59:59-04:00")
)

Exempel:

  • Indatavärden: [endDate] = "12/31/9999 12:00:00 AM"
  • Utdata för uttryck: 441481535990000000 (numerisk representation av 2099-12-31T23:59:59-04:00)
  • Alternativa indata: [endDate] = "8/15/2025 12:00:00 AM"
  • Alternativa utdata: 133877283990000000 (numerisk representation av 2025-08-15T23:59:59-04:00)

Organisationsenhetstilldelning (OU)

Avdelningsbaserad organisationsenhetstilldelning

Scenario 1: Du vill placera användare i olika organisationsenheter baserat på deras avdelning.

Målattribut: parentDistinguishedName

Switch([department], "OU=SuccessFactors,DC=contoso,DC=com", 
    "Engineering SG", "OU=Engineering,OU=SuccessFactors,DC=contoso,DC=com", 
    "Shared Services", "OU=Shared Services,OU=SuccessFactors,DC=contoso,DC=com", 
    "Retail - Finance", "OU=Retail Finance,OU=SuccessFactors,DC=contoso,DC=com", 
    "Information Technology BR", "OU=Information Technology,OU=SuccessFactors,DC=contoso,DC=com", 
    "Development", "OU=Development,OU=SuccessFactors,DC=contoso,DC=com"
)

Exempel:

  • Indatavärden: [avdelning] = "Engineering SG"
  • Utdata för uttryck: OU=Engineering,OU=SuccessFactors,DC=contoso,DC=com
  • Alternativa indata: [avdelning] = "Marknadsföring"
  • Alternativa utdata: OU=SuccessFactors,DC=contoso,DC=com (standard)

Anställningsstatusbaserad organisationsenhetstilldelning

Scenario 1: Du måste tilldela användare till olika organisationsenheter baserat på deras anställningsstatus och plats.

Målattribut: parentDistinguishedName

Join("",
Switch([emplStatus], "OU=SFProvisoinngUsers", 
"741", Switch([empJobNavCustomString13],
    "OU=SFProvisoinngUsers",
    "LOC1016", "OU=Mysore",
    "LOC1019", "OU=Baroda",
    "LOC1015", Switch([departmentId],
        "OU=Bangalore",
        "DU1026","OU=IT,OU=Bangalore",
        "DU1025","OU=IT,OU=Bangalore"
        )
    ), 
"749", Switch([empJobNavCustomString13],
    "OU=O365-NoSYNC,OU=SFProvisoinngUsers",
    "LOC1016", "OU=O365-NoSYNC,OU=Mysore",
    "LOC1019", "OU=O365-NoSYNC,OU=Baroda",
    "LOC1015", "OU=O365-NoSYNC,OU=Bangalore"
    )
),
",DC=contoso,DC=com")

Exempel:

  • Indatavärden: [emplStatus] = "741", [empJobNavCustomString13] = "LOC1015", [departmentId] = "DU1026"
  • Utdata för uttryck: OU=IT,OU=Bangalore,DC=contoso,DC=com
  • Alternativa indata: [emplStatus] = "749", [empJobNavCustomString13] = "LOC1016"
  • Alternativa utdata: OU=O365-NoSYNC,OU=Mysore,DC=contoso,DC=com
  • Alternativa indata: [emplStatus] = "741", [empJobNavCustomString13] = "LOC9999" (inte definierad)
  • Alternativa utdata: OU=SFProvisoinngUsers,DC=contoso,DC=com (standard)

Landbaserad organisationsenhetstilldelning

Scenario 1: Du vill placera användare i olika organisationsenheter baserat på deras land med en inaktiverad organisationsenhet för inaktiva användare.

Målattribut: parentDistinguishedName

Switch([activeEmploymentsCount],
    Switch([country], "OU=Accounts,DC=corp,DC=contoso,DC=com", 
        "Mexico", "OU=Mexico,OU=Accounts,DC=corp,DC=contoso,DC=com", 
        "Sweden", "OU=Sweden,OU=Accounts,DC=corp,DC=contoso,DC=com", 
        "Colombia", "OU=Internal Accounts,OU=Colombia,OU=Accounts,DC=corp,DC=contoso,DC=com", 
        "Brazil", "OU=Internal Accounts,OU=Brazil,OU=Accounts,DC=corp,DC=contoso,DC=com"
    ),
    "0", "OU=DisabledAccounts,OU=Accounts,DC=corp,DC=contoso,DC=com"
)

Exempel:

  • Indatavärden: [activeEmploymentsCount] = "1", [land] = "Mexiko"
  • Utdata för uttryck: OU=Mexico,OU=Accounts,DC=corp,DC=contoso,DC=com
  • Alternativa indata: [activeEmploymentsCount] = "0", [land] = "Sverige"
  • Alternativa utdata: OU=DisabledAccounts,OU=Accounts,DC=corp,DC=contoso,DC=com (inaktiverade användare går till särskild organisationsenhet oavsett land)
  • Alternativa indata: [activeEmploymentsCount] = "1", [land] = "Tyskland"
  • Alternativ utdata: OU=Accounts,DC=corp,DC=contoso,DC=com (standard-OU för länder som inte har definierats specifikt)

Namnbearbetning och visningsnamn

Generering av eget namn (CN)

Scenario 1: Du vill generera ett unikt gemensamt namn med återställningsalternativ för dubbletter.

Målattribut: cn

SelectUniqueValue(
    NormalizeDiacritics(Join(" ", [firstName], [lastName])),
    NormalizeDiacritics(Join(" ", [firstName], Mid([middleName],1,1), [lastName])),
    NormalizeDiacritics(Join(" ", [firstName], [middleName], [lastName]))
)

Exempel:

  • Indatavärden: [firstName] = "José", [lastName] = "García", [middleName] = "Antonio"
  • Utdata för uttryck: Jose Garcia (eller Jose A Garcia om det första alternativet tas, eller Jose Antonio Garcia om de två första tas)

Visningsnamn med önskade namn

Scenario 1: Du måste skapa ett visningsnamn som använder önskat namn när det är tillgängligt, annars återgår du till förnamnet.

Målattribut: displayName

Join(", ", Join("", Mid([lastName], 1, 1), ToLower(Mid([lastName], 2, 64), )), Join("", Mid(Coalesce([preferredName], [firstName]), 1, 1), ToLower(Mid(Coalesce([preferredName], [firstName]), 2, 64), )))

Exempel:

  • Indatavärden: [lastName] = "JOHNSON", [preferredName] = "Mike", [firstName] = "Michael"
  • Utdata för uttryck: Johnson, Mike
  • Alternativa indata: [lastName] = "SMITH", [preferredName] = "", [firstName] = "Robert"
  • Alternativa utdata: Smith, Robert

Visningsnamn med numeriska suffix

Scenario 1: Du vill generera unika visningsnamn med numeriska suffix för dubbletter.

Målattribut: displayName

SelectUniqueValue(
    Join("", NormalizeDiacritics(Join("", [lastName], ", ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName]))), 
    Join("", NormalizeDiacritics(Join("", [lastName], "2, ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName]))), 
    Join("", NormalizeDiacritics(Join("", [lastName], "3, ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName]))), 
    Join("", NormalizeDiacritics(Join("", [lastName], "4, ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName])))
)

Exempel:

  • Indatavärden: [lastName] = "García", [preferredName] = "Mike", [firstName] = "Michael"
  • Utdata för uttryck: Garcia, Mike (eller Garcia2, Mike om det första alternativet tas osv.)
  • Alternativa indata: [lastName] = "Smith", [preferredName] = "", [firstName] = "John"
  • Alternativa utdata: Smith, John (eller Smith2, John om det första alternativet tas osv.)

SamAccountName-generering

Grundläggande samAccountName-generering

Scenario 1: Du vill skapa ett samAccountName med hjälp av första initiala och efternamn med korrekt teckensanering.

Målattribut: sAMAccountName

SelectUniqueValue(
    Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,1), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , ),
    Join("",Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,1), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 19), , "(\\.)*$", , "", , ),"1"),
    Join("",Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,1), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 19), , "(\\.)*$", , "", , ),"2")
)

Exempel:

  • Indatavärden: [firstName] = "José", [lastName] = "García-López"
  • Utdata för uttryck: jgarcialopez (eller jgarcialopez1 om det första alternativet tas, eller jgarcialopez2 om de två första tas)

SamAccountName med variabel förnamnslängd

Scenario 1: Du vill hantera dubbletter genom att öka antalet tecken från förnamnet.

Målattribut: sAMAccountName

SelectUniqueValue(
    Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,1), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , ),
    Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,2), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , ),
    Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,3), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , )
)

Exempel:

  • Indatavärden: [firstName] = "Christopher", [lastName] = "Anderson"
  • Utdata för uttryck: canderson (eller chanderson om det första alternativet tas, eller chranderson om de två första tas)
  • Alternativa indata: [firstName] = "María", [lastName] = "Rodríguez-Santos"
  • Alternativa utdata: mrodriguezsantos (eller marodriguezsantos om det första alternativet tas eller marrodriguezsantos om de två första tas)

SamAccountName från externt användarnamn

Scenario 1: Du vill extrahera användarnamnsdelen från ett externt användarnamn i e-postformat.

Målattribut: sAMAccountName

Replace(Mid(Replace(Replace([username],,"(?<id>.*)@(?<domain>.*)",,"${id}",,), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , )

Exempel:

  • Indatavärden: [användarnamn] = "john.smith@external.com"
  • Utdata för uttryck: johnsmith

ProxyAddresses-konfiguration

Grundläggande proxyAddresses-konfiguration

Scenario 1: Du vill ange flera proxyadresser, inklusive primära och sekundära SMTP-adresser.

Målattribut: proxyAddresses

Split(
    Join(",", 
        Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "contoso.mail.onmicrosoft.com")), 
        Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "contoso.com")), 
        Append("SMTP:", Join("@", Join(".", StripSpaces([firstName]), StripSpaces([lastName])), "contoso.com"))
    ), 
    ","
)

Exempel:

  • Indatavärden: [personIdExternal] = "12345", [firstName] = "John", [lastName] = "Smith"
  • Utdata för uttryck: ["smtp:A12345@contoso.mail.onmicrosoft.com", "smtp:A12345@contoso.com", "SMTP:John.Smith@contoso.com"]

Divisionsbaserad proxyAddresses

Scenario 1: Du behöver olika proxyadresskonfigurationer baserat på personalavdelningen.

Målattribut: proxyAddresses

Split(
    Switch([divisionId], 
        Join(",", 
            Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "woodgrove.mail.onmicrosoft.com")), 
            Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "woodgrove.com")), 
            Append("SMTP:", Join("@", Join(".", StripSpaces([firstName]), StripSpaces([lastName])), "woodgrove.com"))
        ),			
        "EXEC", Join(",", 
            Append("smtp:", Join("@", Join(".", StripSpaces([firstName]), StripSpaces([lastName])), "contoso.com")), 
            Append("SMTP:", [email])
        )
    ),
    ","	
)

Exempel:

  • Indatavärden: [divisionId] = "STANDARD", [personIdExternal] = "67890", [firstName] = "Sarah", [lastName] = "Johnson"
  • Utdata för uttryck: ["smtp:A67890@woodgrove.mail.onmicrosoft.com", "smtp:A67890@woodgrove.com", "SMTP:Sarah.Johnson@woodgrove.com"]
  • Alternativa indata: [divisionId] = "EXEC", [firstName] = "Michael", [lastName] = "Brown", [email] = "mbrown@fabrikam.com"
  • Alternativa utdata: ["smtp:Michael.Brown@contoso.com", "SMTP:mbrown@fabrikam.com"]

Företagsspecifik proxyAddresses

Scenario 1: Du vill generera proxyadresser baserat på företagets anknytning.

Målattribut: proxyAddresses

SelectUniqueValue (
    Switch([company], 
        Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
        "NGC", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
        "CNG", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
        "National Energy", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "fabrikam.com"))
    ),
    Switch([company], 
        Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com")), 
        "NGC", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com")), 
        "CNG", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com")), 
        "National Energy", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), Mid([middleName],1,1), [lastName]))), "fabrikam.com"))
    )
)

Exempel:

  • Indatavärden: [företag] = "NGC", [firstName] = "Trinidad", [lastName] = "Williams", [middleName] = "James"
  • Utdata för uttryck: SMTP:trinidad.williams@contoso.com (eller SMTP:trinidad.j.williams@contoso.com om det första alternativet tas)
  • Alternativa indata: [företag] = "National Energy", [firstName] = "Rebecca", [lastName] = "Thompson", [middleName] = "Marie"
  • Alternativa utdata: SMTP:r.thompson@fabrikam.com (eller SMTP:r.m.thompson@fabrikam.com om det första alternativet tas)
  • Alternativa indata: [företag] = "Other Company", [firstName] = "David", [lastName] = "Jones", [middleName] = "Paul"
  • Alternativa utdata: SMTP:david.jones@contoso.com (standarddomän eller SMTP:david.p.jones@contoso.com om det första alternativet tas)

Bearbetning av telefonnummer

Extrahering av grundläggande telefonnummer

Scenario 1: Du vill extrahera telefonnummerdelen utan landskoden.

Målattribut: telephoneNumber

Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )

Exempel:

  • Indatavärden: [mobil] = "+1 (555) 123-4567"
  • Utdata för uttryck: 5551234567

Scenario 2: Du behöver bara extrahera landskoden från ett telefonnummer.

Målattribut: c

Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), ,"[()\\s-]+", ,"", , )

Exempel:

  • Indatavärden: [mobil] = "+44 20 7946 0958"
  • Utdata för uttryck: 44

Standardvärden för telefonnummer

Scenario 1: Du vill ange standardtelefonnummer när fältet är tomt.

Målattribut: telephoneNumber

IIF(IsNullOrEmpty([telephoneNumber]),"000-000-0000",[telephoneNumber])
Switch([mobile],[mobile],"","000-000-0000")

Exempel:

  • Indatavärden: [telephoneNumber] = ""
  • Utdata för uttryck: 000-000-0000
  • Alternativa indata: [mobil] = "555-123-4567"
  • Alternativa utdata: 555-123-4567

Primär telefonlogik

Scenario 1: Du måste bestämma vilket telefonnummer som ska markeras som primärt.

Målattribut: extensionAttribute2

Switch(Join("+",Switch([businessPhoneIsPrimary],[businessPhoneIsPrimary],"","other"),Switch([cellPhoneIsPrimary],[cellPhoneIsPrimary],"","other")), "no primary phone", 
"false+false", "no primary phone",
"true+false", "business phone is primary",
"false+true", "cell phone is primary",
"true+true", "business phone is primary, cell phone is primary",
"other+true", "cell phone is primary",
"other+false", "no primary phone",
"true+other", "business phone is primary",
"false+other", "no primary phone")

Exempel:

  • Indatavärden: [businessPhoneIsPrimary] = "true", [cellPhoneIsPrimary] = "false"
  • Utdata för uttryck: business phone is primary
  • Alternativa indata: [businessPhoneIsPrimary] = "false", [cellPhoneIsPrimary] = "true"
  • Alternativa utdata: cell phone is primary
  • Alternativa indata: [businessPhoneIsPrimary] = "", [cellPhoneIsPrimary] = "true"
  • Alternativa utdata: cell phone is primary

Land- och platsbaserad logik

Landskodsmappning

Scenario 1: Du vill mappa landsnamn till ISO-landskoder.

Målattribut: c

Switch([country], ,
  "Trinidad and Tobago", "TT",
  "Barbados", "BB"
)

Exempel:

  • Indatavärden: [land] = "Trinidad och Tobago"
  • Utdata för uttryck: TT

Scenario 2: Du måste mappa länder till numeriska landskoder.

Målattribut: countryCode

Switch([country], ,
  "Trinidad and Tobago", "780",
  "Barbados", "52"
)

Exempel:

  • Indatavärden: [land] = "Barbados"
  • Utdata för uttryck: 52

Platsbaserade e-postdomäner

Scenario 1: Du vill tilldela olika e-postdomäner baserat på geografisk plats.

Målattribut: e-post

SelectUniqueValue (
    Switch([country], 
        Join("@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
        "India", Join("@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
        "Netherlands", Join("@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "contoso.com")
    ),
    Switch([country], 
        Join("1@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
        "India", Join("1@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
        "Netherlands", Join("1@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "contoso.com")
    )
)

Exempel:

  • Indatavärden: [country] = "India", [firstName] = "Raj", [lastName] = "Patel"
  • Utdata för uttryck: raj.patel@fabrikam.com (eller 1raj.patel@fabrikam.com om det första alternativet tas)
  • Alternativa indata: [land] = "Nederländerna", [firstName] = "Jan", [lastName] = "van der Berg"
  • Alternativa utdata: jan.vanderberg@contoso.com (eller 1jan.vanderberg@contoso.com om det första alternativet tas)
  • Alternativa indata: [land] = "Tyskland", [firstName] = "Klaus", [efternamn] = "Müller"
  • Alternativa utdata: klaus.muller@fabrikam.com (standarddomän eller 1klaus.muller@fabrikam.com om det första alternativet tas)

Klassificering av anställda och kontingentarbetare

Klassificering av anställningstyp

Scenario 1: Du vill mappa de anställdas typkoder till läsbara beskrivningar.

Målattribut: extensionAttribute3

Switch([employeeType],"Default-value",
    "31202","Employee",
    "31230","Contractor"
)

Exempel:

  • Indatavärden: [employeeType] = "31202"
  • Utdata för uttryck: Employee
  • Alternativa indata: [employeeType] = "99999"
  • Alternativa utdata: Default-value

Identifiering av kontingentarbetare

Scenario 1: Du måste identifiera och hantera kontingentarbetare på olika sätt.

Målattribut: extensionAttribute4

Switch([isContingentWorker], "N/A", "True", "Contractor", "False", "Employee")

Exempel:

  • Indatavärden: [isContingentWorker] = "True"
  • Utdata för uttryck: Contractor

Personlig rubrikmappning

Scenario 1: Du vill mappa personliga titelkoder till rätt rubriker.

IgnoreFlowIfNullOrEmpty(Switch([personalTitle], "", "4443", "Dr.", "4444", "Prof.", "4445", "Prof. Dr."))

Exempel:

  • Indatavärden: [personalTitle] = "4443"
  • Utdata för uttryck: Dr.
  • Alternativa indata: [personalTitle] = ""
  • Alternativa utdata: (tom – ignorerad)

Avancerade scenarier

Hantering av villkorsstyrd avdelning

Scenario 1: Du vill använda den globala tilldelningsavdelningen när den är tillgänglig, annars återgå till den vanliga avdelningen.

Målattribut: avdelning

Switch([globalAssignmentDepartment],[globalAssignmentDepartment],
"",[department])

Exempel:

  • Indatavärden: [globalAssignmentDepartment] = "Global IT", [avdelning] = "Lokal IT"
  • Utdata för uttryck: Global IT
  • Alternativa indata: [globalAssignmentDepartment] = "", [avdelning] = "Försäljning"
  • Alternativa utdata: Sales

Mjuk borttagning av e-posthantering

Scenario 1: Du måste ändra e-postadresser när användare tas bort mjukt för tillbakaskrivningsscenarier.

Målattribut: e-post

IIF([IsSoftDeleted]="True", Join("_",FormatDateTime(Now(), , "M/d/yyyy h:mm:ss tt", "yyyy-MM-dd"),[mail]), [mail])

Exempel:

  • Indatavärden: [IsSoftDeleted] = "True", [mail] = "john.smith@company.com" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: 2025-07-30_john.smith@company.com
  • Alternativa indata: [IsSoftDeleted] = "False", [mail] = "jane.doe@company.com"
  • Alternativa utdata: jane.doe@company.com

Komplex OU-tilldelning med avslutningslogik

Scenario 1: Du vill flytta avslutade användare till en särskild organisationsenhet efter ett visst antal dagar.

Målattribut: parentDistinguishedName

IIF(DateDiff("d", Now(), CDate(Switch([latestTerminationDate], [latestTerminationDate], "", "9999-01-01"))) <= -14,
    "OU=DELETED,DC=company,DC=com",
    Switch([department], "OU=Default,DC=company,DC=com", 
        "Engineering", "OU=Engineering,DC=company,DC=com", 
        "Finance", "OU=Finance,DC=company,DC=com"
    )
)

Exempel:

  • Indatavärden: [latestTerminationDate] = "2025-07-10", [avdelning] = "Engineering" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: OU=DELETED,DC=company,DC=com (avslutades för mer än 14 dagar sedan)
  • Alternativa indata: [latestTerminationDate] = "2025-07-25", [avdelning] = "Ekonomi"
  • Alternativa utdata: OU=Finance,DC=company,DC=com (avslutades för mindre än 14 dagar sedan)

UPN-generation med flera företag med medarbetarklass

Scenario 1: Du måste generera UPN baserat på klassinformation för både företag och anställda.

Målattribut: userPrincipalName

SelectUniqueValue (
    Switch([employeeClass], 
        Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
        "1916", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
        "1915", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "fabrikam.com"),
        "1917", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "woodgrove.com")
    ),
    Switch([employeeClass], 
        Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
        "1916", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
        "1915", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "fabrikam.com"),
        "1917", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "woodgrove.com")
    )
)

Exempel:

  • Indatavärden: [employeeClass] = "1915", [firstName] = "Anna", [lastName] = "Johnson"
  • Utdata för uttryck: anna.johnson@fabrikam.com (eller 01anna.johnson@fabrikam.com om det första alternativet tas)

Apostrofer och specialteckenhantering

Scenario 1: Du måste ta bort apostrofer och bindestreck från e-postadresser för Azure AD Connect-kompatibilitet.

Målattribut: e-post

SelectUniqueValue(
  Switch ([divisionId], 
    Replace(Join("@", NormalizeDiacritics(StripSpaces(Join(".", Coalesce([preferredName], [firstName]), [lastName]))), "contoso.com"), , "['-]+", , "", , ), 
    "8900", [email]
  ), 
  Replace(Join("1@", NormalizeDiacritics(StripSpaces(Join(".", Coalesce([preferredName], [firstName]), [lastName]))), "contoso.com"), , "['-]+", , "", , ), 
  Replace(Join("2@", NormalizeDiacritics(StripSpaces(Join(".", Coalesce([preferredName], [firstName]), [lastName]))), "contoso.com"), , "['-]+", , "", , )
)

Exempel:

  • Indatavärden: [divisionId] = "1200", [preferredName] = "Mary-Ann", [firstName] = "Mary", [lastName] = "O'Connor"
  • Utdata från uttryck: maryann.oconnor@contoso.com (apostrofer och bindestreck har tagits bort)
  • Alternativa indata: [divisionId] = "8900", [e-post] = "existing.user@company.com"
  • Alternativa utdata: existing.user@company.com

SIP-adressgenerering

Scenario 1: Du vill generera SIP-adresser för Skype för företag/Teams-integrering.

Målattribut: proxyAddresses

SelectUniqueValue( 
    Append("sip:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
    Append("sip:", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
    Append("sip:", Join("02@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"))
)

Exempel:

  • Indatavärden: [firstName] = "David", [lastName] = "Wilson"
  • Utdata för uttryck: sip:david.wilson@contoso.com (eller sip:01david.wilson@contoso.com om det första alternativet tas)
  • Alternativa indata: [firstName] = "María José", [lastName] = "González-Pérez"
  • Alternativa utdata: sip:mariajose.gonzalezperez@contoso.com (eller sip:01mariajose.gonzalezperez@contoso.com om det första alternativet tas eller sip:02mariajose.gonzalezperez@contoso.com om de två första tas)

Villkorslogik för tillbakaskrivning

Scenario 1: Du vill villkorligt skriva tillbaka e-postadresser baserat på specifika datumvillkor.

Målattribut: mailNickname

IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([extensionAttribute9])) <> 1, "", [mail]))

Exempel:

  • Indatavärden: [extensionAttribute9] = "2025-07-31", [mail] = "user@company.com" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: (tom – ignoreras, eftersom datumskillnaden är 1 dag)
  • Alternativa indata: [extensionAttribute9] = "2025-08-01", [mail] = "user@company.com"
  • Alternativa utdata: user@company.com

Scenario 2: Du måste hantera attribut som saknas i tillbakaskrivningsscenarier.

Målattribut: mailNickname

IgnoreFlowIfNullOrEmpty(IIF(IsPresent([extensionAttribute9]),IIF(DateDiff("d", Now(), CDate([extensionAttribute9])) <> 1, "", [mail]),"noemail@contoso.com"))

Exempel:

  • Indatavärden: [extensionAttribute9] = "" (tom), [e-post] = "user@company.com"
  • Utdata för uttryck: noemail@contoso.com
  • Alternativa indata: [extensionAttribute9] = "2025-08-01", [mail] = "user@company.com" (aktuellt datum: 2025-07-30)
  • Alternativa utdata: user@company.com

Metodtips

  • Använd SelectUniqueValue för alla attribut som kräver unikhet (UPN, samAccountName, e-post).

  • Hantera null- och tomma värden med hjälp av funktioner som IsNullOrEmpty, IsPresent, Switcheller Coalesce.

  • Använd NormalizeDiacritics och StripSpaces när du bearbetar namn för att säkerställa kompatibilitet mellan system.

  • Verifiera JSONPath-uttryck i en JSONPath-testare innan du implementerar i produktion.

  • Använd rätt datumformatering när du arbetar med SuccessFactors-datumfält för att undvika konverteringsfel.

  • Överväg tidszoner när du arbetar med datumjämförelser och kontoförfallologik.

  • Använd IgnoreFlowIfNullOrEmpty för villkorsstyrda attributflöden och tillbakaskrivningsscenarier.

  • Testa komplexa Switch-instruktioner noggrant eftersom de kan bli svåra att felsöka.

  • Dokumentera affärslogik tydligt, särskilt för komplexa anställningsstatus och kontohanteringsregler.

  • Använd regex-mönster noggrant och verifiera dem i regextestare online före implementeringen.

Fler resurser