Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Generowanie adresu e-mail
- Przetwarzanie numeru telefonu
- Logika stanu konta dla usługi Active Directory
- Logika stanu konta dla identyfikatora Entra firmy Microsoft
- Funkcje daty
- Przypisanie jednostki organizacyjnej
- Generowanie identyfikatorów losowych
- Przetwarzanie nazw
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(lubm.oconnor@contoso.comjeśli zostanie podjęta pierwsza opcja lubma.oconnor@contoso.comjeś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
- 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(lubD1234,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(lubJose A Garciajeśli zostanie podjęta pierwsza opcja lubJose Antonio Garciajeś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(lubmgonzalezlopez1jeśli zostanie podjęta pierwsza opcja lubmgonzalezlopez2jeś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,IsPresentlubSwitchinstrukcje.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.