Funkcje mapowania wyrażeń produktu Workday dla aprowizacji identyfikatorów entra firmy Microsoft

Ten artykuł zawiera kompleksowy przewodnik dotyczący często używanych funkcji mapowania wyrażeń podczas konfigurowania produktu Workday do lokalnej aprowizacji użytkowników usługi Active Directory /Microsoft Entra ID. Te funkcje ułatwiają przekształcanie i mapowanie danych z produktu Workday w celu utworzenia odpowiednich atrybutów użytkownika w identyfikatorze Entra firmy Microsoft.

Spis treści

Funkcje manipulowania ciągami

Podstawowe operacje na ciągach

Scenariusz 1: Chcesz wyczyścić wartość numeru telefonu pochodzącą z produktu Workday, usuwając spacje, nawiasy i kreski.

Atrybut docelowy: phoneNumber, mobile

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

Przykład:

  • Wartości wejściowe: [PrimaryWorkTelephone] = "+1 (555) 123-4567"
  • Dane wyjściowe wyrażenia: +15551234567

Scenariusz 2. Musisz wyodrębnić nazwisko z pola zawierającego PreferredNameData "FirstName LastName".

Atrybut docelowy: sn w lokalnej usłudze Active Directory surname w usłudze Microsoft Entra ID

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

Przykład:

  • Wartości wejściowe: [PreferredNameData] = "John Smith"
  • Dane wyjściowe wyrażenia: Smith

Scenariusz 3: chcesz usunąć zer wiodących z identyfikatora procesu roboczego przed dopasowaniem go do identyfikatora pracownika w lokalnej usłudze Active Directory lub identyfikatorze entra firmy Microsoft.

Atrybut docelowy: employeeId

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

Przykład:

  • Wartości wejściowe: [WorkerID] = "00012345"
  • Dane wyjściowe wyrażenia: 12345

Scenariusz 4. Atrybut HereditarySuffix zawiera informacje o sufiksie oznaczone kodem ISO kraju i chcesz wyodrębnić tylko informacje o sufiksie i dołączyć je do nazwiska.

Atrybut docelowy: sn w lokalnej usłudze Active Directory surname w usłudze Microsoft Entra ID

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

Przykład:

  • Wartości wejściowe: [HereditarySuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
  • Dane wyjściowe wyrażenia: Van der Hof

Konwersja wielkości liter tekstowych

Scenariusz 1: Należy przekonwertować tekst na prawidłowy przypadek, ale poprawnie obsłużyć apostrofy (na przykład "st john's hospital" powinien stać się "St John's Hospital").

Atrybut docelowy: firma

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

Przykład:

  • Wartości wejściowe: Tekst statyczny "st john's hospital"
  • Dane wyjściowe wyrażenia: St John's Hospital

Scenariusz 2. Chcesz utworzyć małą nazwę użytkownika na podstawie imienia i nazwiska.

Atrybut docelowy: mailNickname

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

Przykład:

  • Wartości wejściowe: [PreferredFirstName] = "José", [PreferredLastName] = "García-López"
  • Dane wyjściowe wyrażenia: jose.garcia-lopez

Logika nazewnictwa specyficzna dla kraju

Scenariusz 1: Należy zastosować różne konwencje nazewnictwa na podstawie kraju użytkownika (na przykład "Last, First" dla niektórych krajów).

Atrybut docelowy: displayName, cn

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

Przykład:

  • Wartości wejściowe: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
  • Dane wyjściowe wyrażenia: Tanaka,Hiroshi (japońska konwencja nazewnictwa)
  • Dane wejściowe alternatywne: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
  • Alternatywne dane wyjściowe: John Smith (domyślna zachodnia konwencja nazewnictwa)

Generowanie adresu e-mail

Podstawowa generacja poczty e-mail

Scenariusz 1: Chcesz utworzyć adres e-mail, łącząc imię i nazwisko, usuwając spacje i znaki specjalne oraz dołączając domenę.

Atrybut docelowy: poczta

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

Przykład:

  • Wartości wejściowe: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
  • Dane wyjściowe wyrażenia: maria.josegonzalez@contoso.com

Scenariusz 2. Podczas generowania adresów e-mail należy obsługiwać znaki specjalne, takie jak cudzysłowy i przecinki.

Atrybut docelowy: 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")
)

Przykład:

  • Wartości wejściowe: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
  • Dane wyjściowe wyrażenia: maryann.oconnor@contoso.com (lub m.oconnor@contoso.com jeśli zostanie podjęta pierwsza opcja lub ma.oconnor@contoso.com jeśli zostaną podjęte pierwsze dwa)

Domeny poczty e-mail specyficzne dla firmy

Scenariusz 1: Masz wiele firm i musisz wygenerować adresy e-mail z różnymi sufiksami domeny na podstawie firmy.

Atrybut docelowy: poczta

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

Przykład:

  • Wartości wejściowe: [Company] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
  • Dane wyjściowe wyrażenia: john.smith@fabrikam.com
  • Dane wejściowe alternatywne: [Company] = "Woodgrove", [FirstName] = "Sarah", [LastName] = "Johnson"
  • Alternatywne dane wyjściowe: s.johnson@woodgrove.com

Konfiguracja serwera proxyAddresses

Scenariusz 1. Należy ustawić wiele adresów proxy dla programu Exchange, w tym podstawowe i pomocnicze adresy SMTP.

Atrybut docelowy: 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"))
    ), ","
)

Przykład:

  • Wartości wejściowe: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
  • Dane wyjściowe wyrażenia: ["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]

Przetwarzanie numeru telefonu

Te mapowania wyrażeń mogą być używane w aplikacji Workday Writeback.

Analizowanie numerów telefonów międzynarodowych

Scenariusz 1: Masz numery telefonów w formacie międzynarodowym (+1 737-626-8331) i musisz wyodrębnić tylko numer telefonu bez kodu kraju.

Atrybut docelowy: phoneNumber

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

Przykład:

  • Wartości wejściowe: [phoneNumber] = "+1 737-626-8331"
  • Dane wyjściowe wyrażenia: 7376268331

Scenariusz 2: Należy wyodrębnić kod kraju z numeru telefonu, aby określić kraj do celów katalogowych.

Atrybut docelowy: c

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

Przykład:

  • Wartości wejściowe: [phoneNumber] = "+44 20 7946 0958"
  • Dane wyjściowe wyrażenia: GBR
  • Dane wejściowe alternatywne: [phoneNumber] = "+1 555-123-4567"
  • Alternatywne dane wyjściowe: USA

Scenariusz 3. Należy zapisać zwrotny numer telefonu generowany przez usługę Microsoft Teams i ustawiać go w identyfikatorze Entra firmy Microsoft (na przykład +4926180001111). W tym numerze telefonu nie ma spacji między numerem CountryCode i rzeczywistym numerem telefonu. Możesz użyć następującego mechanizmu analizowania wyrażeń regularnych, aby wyodrębnić kody kraju istotne dla organizacji i użyć go do ustawienia produktu Workday CountryCodeName.

Atrybut docelowy: 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")

Przykład:

  • Wartości wejściowe: [phoneNumber] = "+493012345678"
  • Dane wyjściowe wyrażenia: GER
  • Alternatywne dane wejściowe: [phoneNumber] = "+919876543210"
  • Alternatywne dane wyjściowe: IND
  • Alternatywne dane wejściowe: [phoneNumber] = "+15551234567"
  • Alternatywne dane wyjściowe: USA

Formatowanie numeru telefonu dla różnych systemów

Scenariusz 1: Należy przetworzyć numery telefonów, które zawierają rozszerzenia (na przykład "+1 (206) 291-8163 x8125").

Atrybut docelowy: phoneNumber

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

Przykład:

  • Wartości wejściowe: [phoneNumber] = "+1 (206) 291-8163 x8125"
  • Dane wyjściowe wyrażenia: 2062918163

Scenariusz 2. Chcesz wyodrębnić tylko rozszerzenie z numeru telefonu.

Atrybut docelowy: extensionAttribute1

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

Przykład:

  • Wartości wejściowe: [phoneNumber] = "+1 (206) 291-8163 x8125"
  • Dane wyjściowe wyrażenia: 8125

Logika stanu konta dla usługi Active Directory

Wyrażenia w tej sekcji mają zastosowanie do atrybutu accountDisabled będącego częścią "Workday to on-premises Active Directory user provisioning app". Aby ustawić accountEnabled atrybut, który jest częścią "Workday to Microsoft Entra ID user provisioning app", zapoznaj się z sekcją Logika stanu konta dla identyfikatora entra firmy Microsoft.

Zarządzanie stanem konta podstawowego

Scenariusz 1: Chcesz wyłączyć lokalne konta usługi Active Directory dla użytkowników, którzy nie są aktywni w programie Workday.

Atrybut docelowy: accountDisabled

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

Przykład:

  • Wartości wejściowe: [Active] = "1"
  • Dane wyjściowe wyrażenia: False (włączone konto)
  • Dane wejściowe alternatywne: [Active] = "0"
  • Alternatywne dane wyjściowe: True (konto jest wyłączone)

Przetwarzanie ponownego hire

Scenariusz 1. Potrzebujesz scenariusza 1: musisz obsługiwać scenariusze ponownego programowania, w których konta powinny być włączone tylko po dacie zatrudnienia.

Atrybut docelowy: accountDisabled

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

Przykład:

  • Wartości wejściowe: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: True (konto wyłączone do daty zatrudnienia)
  • Dane wejściowe alternatywne: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
  • Dane wyjściowe alternatywne: False (konto włączone jako data zatrudnienia minęło)

Tworzenie konta przed zatrudnieniem

Scenariusz 1: Chcesz utworzyć konta dla przyszłych pracowników, ale zachować je wyłączone do 14 dni przed datą rozpoczęcia.

Atrybut docelowy: accountDisabled

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

Przykład:

  • Wartości wejściowe: [Active] = "1", [StatusHireDate] = "2025-08-10" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: False (konto włączone jako data zatrudnienia wynosi 14 dni)
  • Dane wejściowe alternatywne: [Active] = "1", [StatusHireDate] = "2025-09-15"
  • Alternatywne dane wyjściowe: True (konto wyłączone, ponieważ data zatrudnienia jest większa niż 14 dni)

Obsługa odwołań zatrudnienia

Scenariusz 1. Podczas ustawiania atrybutu należy obsługiwać scenariusze ponownego zatrudniania accountDisabled . Chcesz zaimplementować logikę:

  • Jeśli zakończono = 1 w dniu roboczym, accountDisabled = True
  • Jeśli rescinded = 1 w workday, accountDisabled = True
  • Jeśli aktywny =1 w dniu roboczym,
    • jeśli
      • HireDate jest ponad siedem dni w przyszłości, a następnie accountDisabled = True (wyłącz konto)
      • HireDate jest <= siedem dni w przyszłości, a następnie accountDisabled = False (włącz konto)
  • Jeśli wartość Active = 0, accountDisabled = True

Atrybut docelowy: 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"
         )
    )
)

Przykład:

  • Wartości wejściowe: [Zakończone] = "1", [Active] = "1", [StatusHireDate] = "2025-08-15"
  • Dane wyjściowe wyrażenia: True (konto wyłączone z powodu zakończenia)
  • Dane wejściowe alternatywne: [Zakończone] = "0", [Rescinded] = "1", [Active] = "1"
  • Alternatywne dane wyjściowe: True (konto wyłączone z powodu unieważnienia)
  • Dane wejściowe alternatywne: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-15" (bieżąca data: 2025-07-30)
  • Alternatywne dane wyjściowe: True (konto wyłączone, ponieważ data zatrudnienia jest większa niż 7 dni)
  • Dane wejściowe alternatywne: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-05"
  • Dane wyjściowe alternatywne: False (konto włączone jako data zatrudnienia wynosi w ciągu 7 dni)

Logika stanu konta dla identyfikatora Entra firmy Microsoft

Wyrażenia w tej sekcji mają zastosowanie do atrybutu accountEnabled będącego częścią "Workday to Microsoft Entra ID user provisioning app". Aby ustawić accountDisabled atrybut, który jest częścią "Workday to on-premises Active Directory user provisioning app", zapoznaj się z sekcją Logika stanu konta dla usługi Active Directory.

Zarządzanie stanem konta podstawowego

Scenariusz 1: Chcesz wyłączyć konta identyfikatorów Entra firmy Microsoft dla użytkowników, którzy nie są aktywni w usłudze Workday.

Atrybut docelowy: accountEnabled

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

Przykład:

  • Wartości wejściowe: [Active] = "1"
  • Dane wyjściowe wyrażenia: True (włączone konto)
  • Dane wejściowe alternatywne: [Active] = "0"
  • Alternatywne dane wyjściowe: False (konto jest wyłączone)

Przetwarzanie ponownego hire

Scenariusz 1. Należy obsługiwać scenariusze ponownego programowania, w których konta powinny być włączone tylko po dacie zatrudnienia.

Atrybut docelowy: accountEnabled

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

Przykład:

  • Wartości wejściowe: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: False (konto wyłączone do daty zatrudnienia)
  • Dane wejściowe alternatywne: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
  • Dane wyjściowe alternatywne: True (konto włączone jako data zatrudnienia minęło)

Tworzenie konta przed zatrudnieniem

Scenariusz 1: Chcesz utworzyć konta dla przyszłych pracowników, ale zachować je wyłączone do 14 dni przed datą rozpoczęcia.

Atrybut docelowy: accountEnabled

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

Przykład:

  • Wartości wejściowe: [Active] = "1", [StatusHireDate] = "2025-08-10" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: True (konto włączone jako data zatrudnienia wynosi 14 dni)
  • Dane wejściowe alternatywne: [Active] = "1", [StatusHireDate] = "2025-09-15"
  • Alternatywne dane wyjściowe: False (konto wyłączone, ponieważ data zatrudnienia jest większa niż 14 dni)

Funkcje daty

Formatowanie i konwersja daty

Scenariusz 1. Musisz przekonwertować datę zakończenia kontraktu produktu Workday na format usługi Active Directory dla atrybutu accountExpires, aby konto wygasało w dniu zakończenia kontraktu.

Atrybut docelowy: accountExpires

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

Przykład:

  • Wartości wejściowe: [StatusHireDate] = "2025-12-31"
  • Dane wyjściowe wyrażenia: 133835135990000000 (reprezentacja liczbowa 2025-12-31T23:59:59-07:00)

Scenariusz 2: Chcesz ustawić datę wygaśnięcia konta pięć lat od daty zatrudnienia.

Atrybut docelowy: accountExpires

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

Przykład:

  • Wartości wejściowe: [StatusHireDate] = "2025-01-15"
  • Dane wyjściowe wyrażenia: 139418879990000000 (reprezentacja liczbowa 2030-01-15 23:59:59-05:00)

Warunkowa logika oparta na dacie

Scenariusz 1: Chcesz przepływać informacje o dziale tylko wtedy, gdy pracownik rozpoczął pracę (data zatrudnienia minęła).

Atrybut docelowy: dział

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

Przykład:

  • Wartości wejściowe: [StatusHireDate] = "2025-07-15", [Department] = "Engineering" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: Engineering (data zatrudnienia została przekazana)
  • Dane wejściowe alternatywne: [StatusHireDate] = "2025-08-15", [Dział] = "Marketing"
  • Alternatywne dane wyjściowe: IgnoreAttributeFlow (data zatrudnienia jest w przyszłości)

Scenariusz 2. Należy utworzyć obiekty użytkownika tylko wtedy, gdy data zatrudnienia mieści się w ciągu 14 dni.

Atrybut docelowy: objectFilter

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

Przykład:

  • Wartości wejściowe: [StatusHireDate] = "2025-08-10" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: False (utwórz obiekt użytkownika jako datę zatrudnienia w ciągu 14 dni)
  • Dane wejściowe alternatywne: [StatusHireDate] = "2025-09-15"
  • Alternatywne dane wyjściowe: IgnoreObjectFlow (nie twórz obiektu użytkownika, ponieważ data zatrudnienia jest większa niż 14 dni)

Przypisanie jednostki organizacyjnej

Proste przypisanie jednostki organizacyjnej

Scenariusz 1. Chcesz umieścić użytkowników w różnych jednostkach organizacyjnych w oparciu o ich miasto.

Atrybut docelowy: 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" 
)

Przykład:

  • Wartości wejściowe: [Miasto] = "Seattle"
  • Dane wyjściowe wyrażenia: OU=Seattle,OU=Users,DC=contoso,DC=com
  • Dane wejściowe alternatywne: [Miasto] = "Chicago"
  • Alternatywne dane wyjściowe: OU=Default,OU=Users,DC=contoso,DC=com (ustawienie domyślne dla nieokreślonych miast)

Złożona struktura jednostki organizacyjnej

Scenariusz 1. Musisz utworzyć złożoną strukturę jednostki organizacyjnej na podstawie działu, centrum kosztów i kraju.

Atrybut docelowy: 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"
)

Przykład:

  • Wartości wejściowe: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
  • Dane wyjściowe wyrażenia: OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com
  • Dane wejściowe alternatywne: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
  • Alternatywne dane wyjściowe: OU=Users,DC=contoso,DC=com (wartości domyślne, gdy wartości nie są zgodne)

Zakończone przypisanie jednostki organizacyjnej użytkownika

Scenariusz 1: Chcesz przenieść użytkowników zakończonych do specjalnej jednostki organizacyjnej w dniu zakończenia.

Atrybut docelowy: 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" 
    ) 
)

Przykład:

  • Wartości wejściowe: [StatusTerminationLastDayOfWork] = "2025-07-25", [City] = "Seattle" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: OU=Leavers,OU=Users,DC=contoso,DC=com (przeniesiono do jednostki organizacyjnej Leavers jako data zakończenia)
  • Dane wejściowe alternatywne: [StatusTerminationLastDayOfWork] = "2025-08-15", [City] = "Dallas"
  • Alternatywne dane wyjściowe: OU=Dallas,OU=Users,DC=contoso,DC=com (pozostaje w normalnej jednostki organizacyjnej, ponieważ data zakończenia przypada w przyszłości)

Generowanie identyfikatorów losowych

Generowanie losowe oparte na identyfikatorze GUID

Scenariusz 1. Musisz wygenerować losowy 5-znakowy ciąg, który nie zawiera cyfr.

Atrybut docelowy: 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", , )
)

Przykład:

  • Wartości wejściowe: wygenerowany identyfikator GUID przekonwertowany na base64 (na przykład "mV8dXr...")
  • Dane wyjściowe wyrażenia: mVAdX (cyfry zastąpione znakiem "A" lub "B"/"C", jeśli zostanie podjęta pierwsza opcja)

Scenariusz 2: Chcesz wygenerować losowy ciąg rozpoczynający się od "D", po którym następuje 4 znaki alfabetyczne.

Atrybut docelowy: 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}", ,))
)

Przykład:

  • Wartości wejściowe: wygenerowany identyfikator GUID przekonwertowany na base64 zawierający sekwencję alfabetyczną "mVdX"
  • Dane wyjściowe wyrażenia: DMVDX (lub inne, jeśli zostanie podjęta pierwsza opcja)

Generowanie identyfikatorów liczbowych

Scenariusz 1. Musisz wygenerować losową liczbę 4-cyfrową na podstawie identyfikatora GUID.

Atrybut docelowy: 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}", ,)
)

Przykład:

  • Wartości wejściowe: wygenerowany identyfikator GUID, taki jak "a1b2c3d4-e5f6-7890-1234-567890abcdef"
  • Dane wyjściowe wyrażenia: D7890 (lub D1234, D5678itp. w zależności od tego, która sekwencja 4-cyfrowa jest dopasowywana jako pierwsza)

Przetwarzanie nazw

Generowanie nazwy wyświetlanej

Scenariusz 1. Chcesz utworzyć nazwę wyświetlaną w formacie "Last, First".

Atrybut docelowy: displayName

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

Przykład:

  • Wartości wejściowe: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
  • Dane wyjściowe wyrażenia: Smith, John

Scenariusz 2. Musisz utworzyć nazwę wyświetlaną zawierającą środkowy identyfikator początkowy i identyfikator pracownika.

Atrybut docelowy: displayName

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

Przykład:

  • Wartości wejściowe: [PreferredLastName] = "Johnson", [PreferredFirstName] = "Sarah", [PreferredMiddleName] = "Elizabeth", [WorkerID] = "12345"
  • Dane wyjściowe wyrażenia: Johnson,Sarah E-12345

Generowanie nazwy pospolitej (CN) z unikatowością

Scenariusz 1: Chcesz wygenerować unikatową nazwę pospolitą z opcjami rezerwowymi dla duplikatów.

Atrybut docelowy: cn

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

Przykład:

  • Wartości wejściowe: [PreferredFirstName] = "José", [PreferredLastName] = "García", [PreferredMiddleName] = "Antonio"
  • Dane wyjściowe wyrażenia: Jose Garcia (lub Jose A Garcia jeśli zostanie podjęta pierwsza opcja lub Jose Antonio Garcia jeśli zostaną podjęte pierwsze dwa)

Generowanie samAccountName

Scenariusz 1: Chcesz utworzyć 20-znakowy samAccountName przy użyciu pierwszego początkowego i nazwiska z sufiksami liczbowymi dla duplikatów.

Atrybut docelowy: 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")
)

Przykład:

  • Wartości wejściowe: [FirstName] = "María José", [LastName] = "González-López"
  • Dane wyjściowe wyrażenia: mgonzalezlopez (lub mgonzalezlopez1 jeśli zostanie podjęta pierwsza opcja lub mgonzalezlopez2 jeśli zostaną podjęte pierwsze dwa)

Scenariusze zaawansowane

Ukryj przed logiką list adresowych

W tej sekcji opisano sposób ustawiania atrybutu msExchHideFromAddressListslogicznego . Użyj wszystkich limitów "TRUE" lub "FALSE", aby ustawić atrybut logiczny. Użycie dowolnej innej wartości powoduje HybridSynchronizationActiveDirectoryInvalidParameter błąd.

Scenariusz 1: Chcesz ustawić msExchHideFromAddressLists na podstawie stanu aktywnego konta użytkownika produktu Workday.

Atrybut docelowy: msExchHideFromAddressLists

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

Przykład:

  • Wartości wejściowe: [Active] = "0"
  • Dane wyjściowe wyrażenia: TRUE (ukryj listy adresów, ponieważ użytkownik jest nieaktywny w programie Workday)
  • Dane wejściowe alternatywne: [Active] = "1"
  • Alternatywne dane wyjściowe: FALSE (pokaż na listach adresów, gdy użytkownik jest aktywny w programie Workday)

Scenariusz 2. Chcesz ustawić na msExchHideFromAddressLists podstawie daty zatrudnienia procesu roboczego. Pokaż użytkownika na liście adresów programu Exchange dopiero po dacie zatrudnienia.

Atrybut docelowy: msExchHideFromAddressLists

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

Przykład:

  • Wartości wejściowe: [StatusHireDate] = "2025-07-31" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: TRUE (ukryj listy adresów jako datę zatrudnienia w przyszłości)
  • Dane wejściowe alternatywne: [StatusHireDate] = "2025-07-31" (bieżąca data: 2025-08-01)
  • Alternatywne dane wyjściowe: FALSE (pokaż na listach adresów jako datę zatrudnienia jest w przeszłości)

Ustawienie atrybutu wielowartego

Scenariusz 1. Należy ustawić wiele wartości atrybutu msExchPoliciesExcluded w usłudze Active Directory.

Atrybut docelowy: msExchPoliciesExcluded

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

Przykład:

  • Wartości wejściowe: wartości statycznego identyfikatora GUID
  • Dane wyjściowe wyrażenia: ["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]

Scenariusze zapisywania zwrotnego

Scenariusz 1: Chcesz zapisać nazwę użytkownika z powrotem do produktu Workday tylko wtedy, gdy data zatrudnienia pracownika została przekazana.

Atrybut docelowy: nazwa użytkownika

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

Przykład:

  • Wartości wejściowe: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com" (bieżąca data: 2025-07-30)
  • Dane wyjściowe wyrażenia: user@contoso.com (data zatrudnienia została przekazana, zapisanie zwrotnej nazwy użytkownika)
  • Dane wejściowe alternatywne: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
  • Alternatywne dane wyjściowe: (puste — ignorowane, data zatrudnienia jest w przyszłości)

Najlepsze rozwiązania

  • Zawsze używaj polecenia SelectUniqueValue dla atrybutów, które wymagają unikatowości (np. UPN, samAccountName, email).

  • Obsługa wartości null i pustych przy użyciu funkcji, takich jak IsNullOrEmpty, IsPresentlub Switch instrukcje.

  • Użyj funkcji NormalizeDiacritics podczas przetwarzania nazw ze znakami specjalnymi, aby zapewnić zgodność.

  • Dokładnie przetestuj logikę daty, ponieważ różne strefy czasowe i formaty dat mogą mieć wpływ na wyniki.

  • Użyj polecenia IgnoreFlowIfNullOrEmpty , jeśli chcesz pominąć aktualizacje atrybutów dla pustych wartości.

  • Rozważ użycie instrukcji Switch zamiast zagnieżdżonych instrukcji IIF , aby uzyskać lepszą czytelność.

  • Przed wdrożeniem należy zawsze weryfikować wyrażenia regularne w testerze wyrażeń regularnych online.

Więcej zasobów