Workday-uttrycksmappningsfunktioner för Microsoft Entra ID-etablering

Den här artikeln innehåller en omfattande guide till vanliga uttrycksmappningsfunktioner när du konfigurerar Workday till lokal Active Directory/Microsoft Entra ID-användaretablering. Dessa funktioner hjälper till att transformera och mappa data från Workday 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 rensa ett telefonnummervärde som kommer från Workday genom att ta bort blanksteg, hakparenteser och bindestreck.

Målattribut: telephoneNumber, mobile

Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )

Exempel:

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

Scenario 2: Du måste extrahera efternamnet från ett PreferredNameData fält som innehåller "FirstName LastName".

Målattribut: sn i lokal Active Directory i surname Microsoft Entra-ID

Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)

Exempel:

  • Indatavärden: [PreferredNameData] = "John Smith"
  • Utdata för uttryck: Smith

Scenario 3: Du vill ta bort inledande nollor från ett arbets-ID innan du matchar det med ett medarbetar-ID i lokal Active Directory eller Microsoft Entra-ID.

Målattribut: employeeId

Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)

Exempel:

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

Scenario 4: Attributet HereditarySuffix innehåller suffixinformation som är taggad med lands-ISO-kod och du vill bara extrahera suffixinformationen och lägga till den i efternamnet.

Målattribut: sn i lokal Active Directory i surname Microsoft Entra-ID

Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])

Exempel:

  • Indatavärden: [HereditarySuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
  • Utdata för uttryck: Van der Hof

Konvertering av textfall

Scenario 1: Du måste konvertera text till rätt fall men hantera apostrofer korrekt (till exempel "st john's hospital" bör bli "St John's Hospital").

Målattribut: företag

Replace(PCase("st john's hospital"),"'S", , ,"'s", , )

Exempel:

  • Indatavärden: Statisk text "st john's hospital"
  • Utdata för uttryck: St John's Hospital

Scenario 2: Du vill skapa ett gemener användarnamn från för- och efternamn.

Målattribut: mailNickname

ToLower(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))))

Exempel:

  • Indatavärden: [PreferredFirstName] = "José", [PreferredLastName] = "García-López"
  • Utdata för uttryck: jose.garcia-lopez

Landsspecifik namngivningslogik

Scenario 1: Du måste tillämpa olika namngivningskonventioner baserat på användarens land (till exempel "Sista, Första" för vissa länder).

Målattribut: displayName, cn

Switch([CountryReferenceTwoLetter], 
    Join(" ", [PreferredFirstName], [PreferredLastName]),  
    "HU", Join(",", [PreferredLastName], [PreferredFirstName]), 
    "JP", Join(",", [PreferredLastName], [PreferredFirstName]), 
    "KR", Join(",", [PreferredLastName], [PreferredFirstName])
)

Exempel:

  • Indatavärden: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
  • Utdata från uttryck: Tanaka,Hiroshi (japansk namngivningskonvention)
  • Alternativa indata: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
  • Alternativa utdata: John Smith (standardkonvention för västerländsk namngivning)

Generering av e-postadress

Grundläggande e-postgenerering

Scenario 1: Du vill skapa en e-postadress genom att ansluta till förnamn och efternamn, ta bort blanksteg och specialtecken och lägga till en domän.

Målattribut: e-post

Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com")

Exempel:

  • Indatavärden: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
  • Utdata för uttryck: maria.josegonzalez@contoso.com

Scenario 2: Du måste hantera specialtecken som citattecken och kommatecken i namn när du genererar e-postadresser.

Målattribut: userPrincipalName

SelectUniqueValue(
    Join("@", Replace(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), , "[\"',]+", , "", , ), "contoso.com"), 
    Join("@", Replace(NormalizeDiacritics(StripSpaces(Join(".", Mid([PreferredFirstName], "1", "1"), [PreferredLastName]))), , "[\"',]+", , "", , ), "contoso.com"), 
    Join("@", Replace(NormalizeDiacritics(StripSpaces(Join(".", Mid([PreferredFirstName], "1", "2"), [PreferredLastName]))), , "[\"',]+", , "", , ), "contoso.com")
)

Exempel:

  • Indatavärden: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
  • Utdata för uttryck: maryann.oconnor@contoso.com (eller m.oconnor@contoso.com om det första alternativet tas, eller ma.oconnor@contoso.com om de två första tas)

Företagsspecifika e-postdomäner

Scenario 1: Du har flera företag och måste generera e-postadresser med olika domänsuffix baserat på företaget.

Målattribut: e-post

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")
)

Exempel:

  • Indatavärden: [Företag] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
  • Utdata för uttryck: john.smith@fabrikam.com
  • Alternativa indata: [Company] = "Woodgrove", [FirstName] = "Sarah", [LastName] = "Johnson"
  • Alternativa utdata: s.johnson@woodgrove.com

ProxyAddresses-konfiguration

Scenario 1: Du måste ange flera proxyadresser för Exchange, inklusive primära och sekundära SMTP-adresser.

Målattribut: proxyAddresses

Split(
    Join(",",
        Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.mail.onmicrosoft.com")),
        Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.onmicrosoft.com")),
        Append("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com"))
    ), ","
)

Exempel:

  • Indatavärden: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
  • Utdata för uttryck: ["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]

Bearbetning av telefonnummer

Dessa uttrycksmappningar kan användas i Workday Writeback-programmet.

Parsning av internationellt telefonnummer

Scenario 1: Du har telefonnummer i internationellt format (+1 737-626-8331) och behöver bara extrahera telefonnumret utan landskoden.

Målattribut: telephoneNumber

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

Exempel:

  • Indatavärden: [telephoneNumber] = "+1 737-626-8331"
  • Utdata för uttryck: 7376268331

Scenario 2: Du måste extrahera landskoden från ett telefonnummer för att fastställa landet i katalogsyfte.

Målattribut: c

Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
  "1", "USA",
  "44", "GBR", 
  "49", "DEU"
)

Exempel:

  • Indatavärden: [telephoneNumber] = "+44 20 7946 0958"
  • Utdata för uttryck: GBR
  • Alternativ inmatning: [telephoneNumber] = "+1 555-123-4567"
  • Alternativa utdata: USA

Scenario 3: Du måste skriva tillbaka det telefonnummer som Microsoft Teams genererar och anger i Microsoft Entra-ID (till exempel +4926180001111). I det här telefonnumret finns det inget utrymme mellan CountryCode och det faktiska telefonnumret. Du kan använda följande regex-parsningsmekanism för att extrahera landskoder som är relevanta för din organisation och använda den för att ange Workday CountryCodeName.

Målattribut: CountryCodeName

Switch(Replace([telephoneNumber], , "\+(?<isdCode>49|44|43|1|352|91|31|32|55|237|420|45|20|212|216|234|263|27|30|33|34|351|352|36|372|380|381|383|39|40|41|421|46|47|48|58|60|7|90|91|92|94|961|971|98|995)(?<phoneNumber>.*)", , "${isdCode}", , ), , "43", "AUT", "32", "BEL", "1", "USA", "420", "CZE", "45", "DNK", "372", "EST", "33", "FRA", "49", "GER", "30", "GRC", "36", "HUN", "91", "IND", "39", "ITA", "352", "LUX", "31", "NLD", "47", "NOR", "48", "POL", "40", "ROU", "421", "SVK", "27", "ZAF", "34", "ESP", "46", "SWE", "41", "CHE", "90", "TUR")

Exempel:

  • Indatavärden: [telephoneNumber] = "+493012345678"
  • Utdata för uttryck: GER
  • Alternativa indata: [telephoneNumber] = "+919876543210"
  • Alternativa utdata: IND
  • Alternativa indata: [telephoneNumber] = "+15551234567"
  • Alternativa utdata: USA

Formatering av telefonnummer för olika system

Scenario 1: Du måste bearbeta telefonnummer som innehåller tillägg (till exempel "+1 (206) 291-8163 x8125").

Målattribut: telephoneNumber

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

Exempel:

  • Indatavärden: [telephoneNumber] = "+1 (206) 291-8163 x8125"
  • Utdata för uttryck: 2062918163

Scenario 2: Du vill extrahera tillägget från ett telefonnummer.

Målattribut: extensionAttribute1

Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )

Exempel:

  • Indatavärden: [telephoneNumber] = "+1 (206) 291-8163 x8125"
  • Utdata för uttryck: 8125

Kontostatuslogik för Active Directory

Uttrycken i det här avsnittet gäller för attributet accountDisabled som ingår i "Workday to on-premises Active Directory user provisioning app". Om du vill ange attributet accountEnabled som är en del av "Workday to Microsoft Entra ID user provisioning app" (Användaretableringsapp för Microsoft Entra-ID) läser du avsnittet Kontostatuslogik för Microsoft Entra-ID.

Grundläggande kontostatushantering

Scenario 1: Du vill inaktivera lokala Active Directory-konton för användare som inte är aktiva i Workday.

Målattribut: accountDisabled

Switch([Active], , "1", "False", "0", "True")

Exempel:

  • Indatavärden: [Active] = "1"
  • Utdata för uttryck: False (konto aktiverat)
  • Alternativa indata: [Aktiv] = "0"
  • Alternativa utdata: True (kontot är inaktiverat)

Återanställ bearbetning

Scenario 1: Du behöver scenario 1: Du behöver hantera återanställningsscenarier där konton endast ska aktiveras på eller efter anställningsdatumet.

Målattribut: accountDisabled

Switch([Active], , 
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"), 
"0", "True")

Exempel:

  • Indatavärden: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: True (kontot har inaktiverats fram till anställningsdatumet)
  • Alternativa indata: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
  • Alternativa utdata: False (kontot har aktiverats när anställningsdatumet har passerat)

Skapa föruthyrningskonto

Scenario 1: Du vill skapa konton för framtida anställningar men behålla dem inaktiverade till 14 dagar före startdatumet.

Målattribut: accountDisabled

Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")

Exempel:

  • Indatavärden: [Active] = "1", [StatusHireDate] = "2025-08-10" (aktuellt datum: 2025-07-30)
  • Utdata från uttryck: False (kontot aktiveras som anställningsdatum är inom 14 dagar)
  • Alternativa indata: [Active] = "1", [StatusHireDate] = "2025-09-15"
  • Alternativa utdata: True (kontot har inaktiverats eftersom anställningsdatumet är mer än 14 dagar bort)

Hantering av anställningsåterstingar

Scenario 1: Du måste hantera scenarier som återkallas när du anger accountDisabled attributet. Du vill implementera logiken:

  • Om avslutad = 1 i arbetsdagen sedan accountDisabled = True
  • Om återkallad = 1 i arbetsdagen sedan accountDisabled = True
  • Om Aktiv =1 i arbetsdagen då
    • om
      • HireDate är mer än sju dagar i framtiden och sedan accountDisabled = True (inaktivera kontot)
      • HireDate är <= sju dagar i framtiden och sedan accountDisabled = False (aktivera kontot)
  • Om Aktiv = 0 sedan accountDisabled = True

Målattribut: accountDisabled

Switch([StatusTerminated], "False", "1", "True", "0",
  Switch([StatusHireRescinded], "False", "1", "True", "0",
     Switch([Active], "False", 
         "1", IIF(DateDiff("d", Now(), CDate(IIF(IsNullOrEmpty([StatusHireDate]), "9999-01-01", [StatusHireDate]))) < 7, "False", "True"), 
         "0", "True"
         )
    )
)

Exempel:

  • Indatavärden: [Terminated] = "1", [Active] = "1", [StatusHireDate] = "2025-08-15"
  • Utdata för uttryck: True (kontot har inaktiverats på grund av avslutning)
  • Alternativa indata: [Terminated] = "0", [Rescinded] = "1", [Active] = "1"
  • Alternativa utdata: True (kontot har inaktiverats på grund av återkallande)
  • Alternativa indata: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-15" (aktuellt datum: 2025-07-30)
  • Alternativa utdata: True (kontot har inaktiverats eftersom anställningsdatumet är mer än 7 dagar bort)
  • Alternativa indata: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-05"
  • Alternativa utdata: False (kontot aktiveras som anställningsdatum är inom 7 dagar)

Kontostatuslogik för Microsoft Entra-ID

Uttrycken i det här avsnittet gäller för attributet accountEnabled som ingår i "Workday to Microsoft Entra ID user provisioning app". Om du vill ange attributet accountDisabled som är en del av "Workday till lokal Active Directory-användaretableringsapp" läser du avsnittet Kontostatuslogik för Active Directory.

Grundläggande kontostatushantering

Scenario 1: Du vill inaktivera Microsoft Entra-ID-konton för användare som inte är aktiva i Workday.

Målattribut: accountEnabled

Switch([Active], , "1", "True", "0", "False")

Exempel:

  • Indatavärden: [Active] = "1"
  • Utdata för uttryck: True (konto aktiverat)
  • Alternativa indata: [Aktiv] = "0"
  • Alternativa utdata: False (kontot är inaktiverat)

Återanställ bearbetning

Scenario 1: Du behöver hantera återanställningsscenarier där konton endast ska aktiveras på eller efter anställningsdatumet.

Målattribut: accountEnabled

Switch([Active], , 
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"), 
"0", "False")

Exempel:

  • Indatavärden: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: False (kontot har inaktiverats fram till anställningsdatumet)
  • Alternativa indata: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
  • Alternativa utdata: True (kontot har aktiverats när anställningsdatumet har passerat)

Skapa föruthyrningskonto

Scenario 1: Du vill skapa konton för framtida anställningar men behålla dem inaktiverade till 14 dagar före startdatumet.

Målattribut: accountEnabled

Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")

Exempel:

  • Indatavärden: [Active] = "1", [StatusHireDate] = "2025-08-10" (aktuellt datum: 2025-07-30)
  • Utdata från uttryck: True (kontot aktiveras som anställningsdatum är inom 14 dagar)
  • Alternativa indata: [Active] = "1", [StatusHireDate] = "2025-09-15"
  • Alternativa utdata: False (kontot har inaktiverats eftersom anställningsdatumet är mer än 14 dagar bort)

Datumfunktioner

Datumformatering och konvertering

Scenario 1: Du måste konvertera ett slutdatum för Workday-kontraktet till Active Directory-format för attributet accountExpires, så kontot upphör att gälla på kontraktets slutdatum.

Målattribut: accountExpires

NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))

Exempel:

  • Indatavärden: [StatusHireDate] = "2025-12-31"
  • Utdata för uttryck: 133835135990000000 (numerisk representation av 2025-12-31T23:59:59-07:00)

Scenario 2: Du vill ange ett kontos förfallodatum fem år från anställningsdatumet.

Målattribut: accountExpires

NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))

Exempel:

  • Indatavärden: [StatusHireDate] = "2025-01-15"
  • Utdata för uttryck: 139418879990000000 (numerisk representation av 2030-01-15 23:59:59-05:00)

Villkorsstyrd datumbaserad logik

Scenario 1: Du vill endast skicka avdelningsinformation om medarbetaren har börjat arbeta (anställningsdatumet har passerat).

Målattribut: avdelning

IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, [Department], IgnoreAttributeFlow)

Exempel:

  • Indatavärden: [StatusHireDate] = "2025-07-15", [Avdelning] = "Engineering" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: Engineering (anställningsdatumet har passerat)
  • Alternativa indata: [StatusHireDate] = "2025-08-15", [Avdelning] = "Marknadsföring"
  • Alternativa utdata: IgnoreAttributeFlow (anställningsdatumet är i framtiden)

Scenario 2: Du behöver bara skapa användarobjekt om anställningsdatumet är inom 14 dagar.

Målattribut: objectFilter

IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)

Exempel:

  • Indatavärden: [StatusHireDate] = "2025-08-10" (aktuellt datum: 2025-07-30)
  • Utdata från uttryck: False (skapa användarobjekt som anställningsdatum är inom 14 dagar)
  • Alternativa indata: [StatusHireDate] = "2025-09-15"
  • Alternativa utdata: IgnoreObjectFlow (skapa inte användarobjekt eftersom anställningsdatumet är mer än 14 dagar bort)

Organisationsenhetstilldelning (OU)

Enkel OU-tilldelning

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

Målattribut: parentDistinguishedName

Switch([City], "OU=Default,OU=Users,DC=contoso,DC=com", 
"Dallas", "OU=Dallas,OU=Users,DC=contoso,DC=com", 
"Austin", "OU=Austin,OU=Users,DC=contoso,DC=com", 
"Seattle", "OU=Seattle,OU=Users,DC=contoso,DC=com", 
"London", "OU=London,OU=Users,DC=contoso,DC=com" 
)

Exempel:

  • Indatavärden: [City] = "Seattle"
  • Utdata för uttryck: OU=Seattle,OU=Users,DC=contoso,DC=com
  • Alternativa indata: [City] = "Chicago"
  • Alternativ utdata: OU=Default,OU=Users,DC=contoso,DC=com (standard för ospecificerade städer)

Komplex organisationsenhetsstruktur

Scenario 1: Du måste skapa en komplex organisationsenhetsstruktur baserat på avdelning, kostnadsställe och land.

Målattribut: parentDistinguishedName

Join("", 
    Switch([SupervisoryOrganization],"",
        "Engineering", "OU=Engineering,",
        "Shared Services", "OU=Shared Services,",
        "Information Technology", "OU=Information Technology,",
        "Development", "OU=Development,"
        ),
    Switch([CostCenter],"",
        "Finance and Info. Mgmt.","OU=Finance and Information Management,",
        "Modern Workplace","OU=Modern Workplace,",
        "Green Energy","OU=Green Energy,"
        ),
    Switch([CountryReferenceTwoLetter],"",
        "US","OU=USA,",
        "UK","OU=UK,",
        "IN","OU=IN,"
        ),
    "OU=Users,DC=contoso,DC=com"
)

Exempel:

  • Indatavärden: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
  • Utdata för uttryck: OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com
  • Alternativa indata: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
  • Alternativa utdata: OU=Users,DC=contoso,DC=com (standardvärden när värdena inte matchar)

Avslutad användar-OU-tilldelning

Scenario 1: Du vill flytta avslutade användare till en särskild organisationsenhet på deras uppsägningsdatum.

Målattribut: parentDistinguishedName

IIF(DateDiff("d", Now(),CDate(Switch([StatusTerminationLastDayOfWork],[StatusTerminationLastDayOfWork],
        "","9999-12-31"
        ))
    ) <= 0, 
    "OU=Leavers,OU=Users,DC=contoso,DC=com", 
    Switch([City], "OU=Default,OU=Users,DC=contoso,DC=com", 
        "Dallas", "OU=Dallas,OU=Users,DC=contoso,DC=com", 
        "Austin", "OU=Austin,OU=Users,DC=contoso,DC=com", 
        "Seattle", "OU=Seattle,OU=Users,DC=contoso,DC=com", 
        "London", "OU=London,OU=Users,DC=contoso,DC=com" 
    ) 
)

Exempel:

  • Indatavärden: [StatusTerminationLastDayOfWork] = "2025-07-25", [City] = "Seattle" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: OU=Leavers,OU=Users,DC=contoso,DC=com (flyttas till Leavers OU när avslutningsdatumet har passerat)
  • Alternativa indata: [StatusTerminationLastDayOfWork] = "2025-08-15", [City] = "Dallas"
  • Alternativa utdata: OU=Dallas,OU=Users,DC=contoso,DC=com (förblir i normal organisationsenhet eftersom slutdatumet är i framtiden)

Generering av slumpmässigt ID

GUID-baserad slumpmässig generation

Scenario 1: Du måste generera en slumpmässig sträng på 5 tecken som inte innehåller siffror.

Målattribut: extensionAttribute15

SelectUniqueValue (
   Replace(Mid(ConvertToBase64(Guid()), 1, 5 ), ,"[0-9]", ,"A", , ),
   Replace(Mid(ConvertToBase64(Guid()), 1, 5 ), ,"[0-9]", ,"B", , ),
   Replace(Mid(ConvertToBase64(Guid()), 1, 5 ), ,"[0-9]", ,"C", , )
)

Exempel:

  • Indatavärden: Genererad GUID konverterad till Base64 (till exempel "mV8dXr...")
  • Utdata för uttryck: mVAdX (siffror som ersätts med "A" eller med "B"/"C" om det första alternativet tas)

Scenario 2: Du vill generera en slumpmässig sträng som börjar med "D" följt av 4 alfabetiska tecken.

Målattribut: extensionAttribute14

SelectUniqueValue(
    ToUpper(Replace(ConvertToBase64(Guid()), , "(.*?)(?<id>[a-zA-Z]{4})(.*)", , "D${id}", ,)),
    ToUpper(Replace(ConvertToBase64(Guid()), , "(.*?)(?<id>[a-zA-Z]{4})(.*)", , "D${id}", ,)),
    ToUpper(Replace(ConvertToBase64(Guid()), , "(.*?)(?<id>[a-zA-Z]{4})(.*)", , "D${id}", ,))
)

Exempel:

  • Indatavärden: Genererad GUID konverterad till Base64 som innehåller alfabetisk sekvens "mVdX"
  • Utdata för uttryck: DMVDX (eller annorlunda om det första alternativet tas)

Generering av numeriskt ID

Scenario 1: Du måste generera ett slumpmässigt 4-siffrigt tal från ett GUID.

Målattribut: extensionAttribute13

SelectUniqueValue(
    Replace(Replace(Guid(), ,"-", ,"", , ), ,"(.*?)(?<id>[0-9]{4})(.*)", , "D${id}", ,),
    Replace(Replace(Guid(), ,"-", ,"", , ), ,"(.*?)(?<id>[0-9]{4})(.*)", , "D${id}", ,),
    Replace(Replace(Guid(), ,"-", ,"", , ), ,"(.*?)(?<id>[0-9]{4})(.*)", , "D${id}", ,)
)

Exempel:

  • Indatavärden: Genererad GUID som "a1b2c3d4-e5f6-7890-1234-567890abcdef"
  • Utdata från uttryck: D7890 (eller D1234, D5678osv. beroende på vilken 4-siffrig sekvens som matchas först)

Namnbearbetning

Generering av visningsnamn

Scenario 1: Du vill skapa ett visningsnamn i formatet "Senaste, Första".

Målattribut: displayName

Join(", ", [PreferredLastName], [PreferredFirstName])

Exempel:

  • Indatavärden: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
  • Utdata för uttryck: Smith, John

Scenario 2: Du måste skapa ett visningsnamn som innehåller mellan- och medarbetar-ID.

Målattribut: displayName

Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])

Exempel:

  • Indatavärden: [PreferredLastName] = "Johnson", [PreferredFirstName] = "Sarah", [PreferredMiddleName] = "Elizabeth", [WorkerID] = "12345"
  • Utdata för uttryck: Johnson,Sarah E-12345

Generering av eget namn (CN) med unikhet

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

Målattribut: cn

SelectUniqueValue(
    NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
    NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
    NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)

Exempel:

  • Indatavärden: [PreferredFirstName] = "José", [PreferredLastName] = "García", [PreferredMiddleName] = "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)

SamAccountName-generering

Scenario 1: Du vill skapa ett samAccountName med 20 tecken med första initiala och efternamn med numeriska suffix för dubbletter.

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] = "María José", [LastName] = "González-López"
  • Utdata för uttryck: mgonzalezlopez (eller mgonzalezlopez1 om det första alternativet tas, eller mgonzalezlopez2 om de två första tas)

Avancerade scenarier

Dölj från logik för adresslistor

I det här avsnittet beskrivs hur du anger det booleska attributet msExchHideFromAddressLists. Använd alla versaler "TRUE" eller "FALSE" för att ange det booleska attributet. Om du använder andra värden resulterar det i ett HybridSynchronizationActiveDirectoryInvalidParameter fel.

Scenario 1: Du vill ange msExchHideFromAddressLists baserat på den aktiva kontostatusen för Workday-användaren.

Målattribut: msExchHideFromAddressLists

Switch([Active], , "1", "FALSE", "0", "TRUE")

Exempel:

  • Indatavärden: [Active] = "0"
  • Utdata från uttryck: TRUE (dölj från adresslistor eftersom användaren är inaktiv i Workday)
  • Alternativa indata: [Aktiv] = "1"
  • Alternativa utdata: FALSE (visas i adresslistor när användaren är aktiv i Workday)

Scenario 2: Du vill ange msExchHideFromAddressLists baserat på anställningsdatumet för arbetaren. Visa användaren i Exchange-adresslistan först efter anställningsdatumet.

Målattribut: msExchHideFromAddressLists

IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")

Exempel:

  • Indatavärden: [StatusHireDate] = "2025-07-31" (aktuellt datum: 2025-07-30)
  • Utdata från uttryck: TRUE (dölj från adresslistor eftersom anställningsdatumet är i framtiden)
  • Alternativa indata: [StatusHireDate] = "2025-07-31" (aktuellt datum: 2025-08-01)
  • Alternativa utdata: FALSE (visas i adresslistor som anställningsdatum är tidigare)

Inställning för flervärdesattribut

Scenario 1: Du måste ange flera värden för attributet msExchPoliciesExcluded i Active Directory.

Målattribut: msExchPoliciesExcluded

Split(
    Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
    ","
)

Exempel:

  • Indatavärden: Statiska GUID-värden
  • Utdata för uttryck: ["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]

Tillbakaskrivningsscenarier

Scenario 1: Du vill bara skriva tillbaka användarnamnet till Workday om anställningsdatumet har passerat.

Målattribut: Användarnamn

IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))

Exempel:

  • Indatavärden: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com" (aktuellt datum: 2025-07-30)
  • Utdata för uttryck: user@contoso.com (anställningsdatumet har passerat, skriv tillbaka användarnamnet)
  • Alternativa indata: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
  • Alternativa utdata: (tom – ignoreras, anställningsdatumet är i framtiden)

Metodtips

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

  • Hantera null- och tomma värden med hjälp av funktioner som IsNullOrEmpty, IsPresenteller Switch -instruktioner.

  • Använd NormalizeDiacritics när du bearbetar namn med specialtecken för att säkerställa kompatibilitet.

  • Testa datumlogik noggrant eftersom olika tidszoner och datumformat kan påverka resultatet.

  • Använd IgnoreFlowIfNullOrEmpty när du vill hoppa över attributuppdateringar för tomma värden.

  • Överväg att använda Switch i stället för kapslade IIF-instruktioner för bättre läsbarhet.

  • Verifiera alltid reguljära uttryck i en regex-testare online innan du implementerar.

Fler resurser