Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержится комплексное руководство по часто используемым функциям сопоставления выражений при настройке Workday для локальной подготовки пользователей Active Directory / Microsoft Entra ID. Эти функции помогают преобразовывать и сопоставлять данные из Workday для создания соответствующих атрибутов пользователей в идентификаторе Microsoft Entra.
Оглавление
- Функции обработки строк
- Создание адреса электронной почты
- Обработка номеров телефонов
- Логика состояния учетной записи для Active Directory
- Логика состояния учетной записи для идентификатора Microsoft Entra
- Функции даты
- Назначение подразделения
- Случайное создание идентификаторов
- Обработка имен
Функции обработки строк
Базовые строковые операции
Сценарий 1. Вы хотите очистить значение номера телефона, полученное из Workday, удалив пробелы, скобки и дефисы.
Целевой атрибут: телефонный номер, мобильный
Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )
Пример:
- Входные значения: [PrimaryWorkTelephone] = "+1 (555) 123-4567"
-
Выходные данные выражения:
+15551234567
Сценарий 2. Необходимо извлечь фамилию из PreferredNameData поля, содержащего "LastName LastName".
Целевой атрибут: sn в локальной среде Active Directory в surname идентификаторе Microsoft Entra
Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)
Пример:
- Входные значения: [PreferredNameData] = "John Smith"
-
Выходные данные выражения:
Smith
Сценарий 3. Необходимо удалить начальные нули из идентификатора рабочей роли перед сопоставлением с идентификатором сотрудника в локальной среде Active Directory или идентификатором Microsoft Entra.
Целевой атрибут: employeeId
Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)
Пример:
- Входные значения: [WorkerID] = "00012345"
-
Выходные данные выражения:
12345
Сценарий 4. Атрибут HereditarySuffix содержит сведения суффикса, помеченные кодом ISO страны, и вы хотите извлечь только сведения суффикса и добавить его к фамилии.
Целевой атрибут: sn в локальной среде Active Directory в surname идентификаторе Microsoft Entra
Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])
Пример:
- Входные значения: [НаследственныйSuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
-
Выходные данные выражения:
Van der Hof
Преобразование текстового регистра
Сценарий 1. Необходимо преобразовать текст в правильный случай, но правильно обрабатывать апострофы (например, "больница святого Джона" должна стать "больница Святого Джона").
Целевой атрибут: компания
Replace(PCase("st john's hospital"),"'S", , ,"'s", , )
Пример:
- Входные значения: статический текст "больница святого Джона"
-
Выходные данные выражения:
St John's Hospital
Сценарий 2. Вы хотите создать нижнее имя пользователя из имени и фамилии.
Целевой атрибут: mailNickname
ToLower(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))))
Пример:
- Входные значения: [PreferredFirstName] = "José", [PreferredLastName] = "García-López"
-
Выходные данные выражения:
jose.garcia-lopez
Логика именования для конкретной страны
Сценарий 1. Необходимо применить различные соглашения об именовании в зависимости от страны пользователя (например, "Last, First" для определенных стран).
Целевой атрибут: displayName, cn
Switch([CountryReferenceTwoLetter],
Join(" ", [PreferredFirstName], [PreferredLastName]),
"HU", Join(",", [PreferredLastName], [PreferredFirstName]),
"JP", Join(",", [PreferredLastName], [PreferredFirstName]),
"KR", Join(",", [PreferredLastName], [PreferredFirstName])
)
Пример:
- Входные значения: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
-
Выходные данные выражения:
Tanaka,Hiroshi(соглашение об именовании на японском языке) - Альтернативные входные данные: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
-
Альтернативные выходные данные:
John Smith(соглашение об именовании запада по умолчанию)
Создание адреса электронной почты
Базовое создание электронной почты
Сценарий 1. Вы хотите создать адрес электронной почты, присоединив имя и фамилию, удаляя пробелы и специальные символы, а также добавляя домен.
Целевой атрибут: почта
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com")
Пример:
- Входные значения: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
-
Выходные данные выражения:
maria.josegonzalez@contoso.com
Сценарий 2. При создании адресов электронной почты необходимо обрабатывать специальные символы, такие как кавычки и запятые.
Целевой атрибут: 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")
)
Пример:
- Входные значения: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
-
Выходные данные выражения:
maryann.oconnor@contoso.com(илиm.oconnor@contoso.comесли используется первый вариант, илиma.oconnor@contoso.comесли первые два будут приняты)
Домены электронной почты для конкретной компании
Сценарий 1. У вас несколько компаний и необходимо создать адреса электронной почты с различными суффиксами домена на основе компании.
Целевой атрибут: почта
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")
)
Пример:
- Входные значения: [компания] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
-
Выходные данные выражения:
john.smith@fabrikam.com - Альтернативные входные данные: [компания] = "Woodgrove", [FirstName] = "Сара", [LastName] = "Джонсон"
-
Альтернативные выходные данные:
s.johnson@woodgrove.com
Конфигурация ProxyAddresses
Сценарий 1. Необходимо задать несколько прокси-адресов для Exchange, включая первичные и вторичные SMTP-адреса.
Целевой атрибут: 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"))
), ","
)
Пример:
- Входные значения: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
-
Выходные данные выражения:
["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]
Обработка номеров телефонов
Эти сопоставления выражений можно использовать в приложении Workday Writeback.
Синтаксический анализ международных номеров телефонов
Сценарий 1. У вас есть номера телефонов в международном формате (+1 737-626-8331) и необходимо извлечь только номер телефона без кода страны.
Целевой атрибут: телефонный номер
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Пример:
- Входные значения: [телефон] = "+1 737-626-8331"
-
Выходные данные выражения:
7376268331
Сценарий 2. Необходимо извлечь код страны из номера телефона, чтобы определить страну в целях каталогов.
Целевой атрибут: c
Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
"1", "USA",
"44", "GBR",
"49", "DEU"
)
Пример:
- Входные значения: [телефон] = "+44 20 7946 0958"
-
Выходные данные выражения:
GBR - Альтернативные входные данные: [телефон] = "+1 555-123-4567"
-
Альтернативные выходные данные:
USA
Сценарий 3. Необходимо написать номер телефона, который microsoft Teams создает и задает в идентификаторе Microsoft Entra (например, +4926180001111). В этом номере телефона нет места между CountryCode и фактическим номером телефона. Вы можете использовать следующий механизм синтаксического анализа для извлечения кодов стран, относящихся к вашей организации, и использовать его для задания Workday CountryCodeName.
Целевой атрибут: 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")
Пример:
- Входные значения: [телефонный номер] = "+493012345678"
-
Выходные данные выражения:
GER - Альтернативные входные данные: [телефон] = "+919876543210"
-
Альтернативные выходные данные:
IND - Альтернативные входные данные: [телефон] = "+15551234567"
-
Альтернативные выходные данные:
USA
Форматирование номеров телефонов для разных систем
Сценарий 1. Необходимо обработать номера телефонов, включающие расширения (например, "+1 (206) 291-8163 x8125").
Целевой атрибут: телефонный номер
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Пример:
- Входные значения: [телефон] = "+1 (206) 291-8163 x8125"
-
Выходные данные выражения:
2062918163
Сценарий 2. Вы хотите извлечь только расширение из номера телефона.
Целевой атрибут: extensionAttribute1
Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )
Пример:
- Входные значения: [телефон] = "+1 (206) 291-8163 x8125"
-
Выходные данные выражения:
8125
Логика состояния учетной записи для Active Directory
Выражения в этом разделе применимы к accountDisabled атрибуту, который является частью приложения подготовки пользователей Workday к локальной среде Active Directory. Чтобы задать accountEnabled атрибут, который входит в приложение подготовки пользователей Workday to Microsoft Entra ID, см. в разделе " Логика состояния учетной записи для идентификатора Microsoft Entra ID".
Базовое управление состоянием учетной записи
Сценарий 1. Вы хотите отключить локальные учетные записи Active Directory для пользователей, которые не активны в Workday.
Целевой атрибут: accountDisabled
Switch([Active], , "1", "False", "0", "True")
Пример:
- Входные значения: [Активный] = "1"
-
Выходные данные выражения:
False(включена учетная запись) - Альтернативные входные данные: [Активный] = "0"
-
Альтернативные выходные данные:
True(учетная запись отключена)
Повторная обработка
Сценарий 1. Вам нужен сценарий 1. Необходимо обрабатывать сценарии повторного заполнения, в которых учетные записи должны быть включены только по дате найма или после нее.
Целевой атрибут: accountDisabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"),
"0", "True")
Пример:
- Входные значения: [Активный] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
True(учетная запись отключена до даты найма) - Альтернативные входные данные: [Активный] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Альтернативные выходные данные:
False(учетная запись включена в качестве даты найма)
Создание предварительной учетной записи
Сценарий 1. Вы хотите создать учетные записи для будущих сотрудников, но сохранить их отключенными до 14 дней до даты начала.
Целевой атрибут: accountDisabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")
Пример:
- Входные значения: [Активный] = "1", [StatusHireDate] = "2025-08-10" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
False(учетная запись включена в качестве даты найма в течение 14 дней) - Альтернативные входные данные: [Активный] = "1", [StatusHireDate] = "2025-09-15"
-
Альтернативные выходные данные:
True(учетная запись отключена в качестве даты найма более 14 дней)
Обработка отмены аренды
Сценарий 1. При настройке атрибута accountDisabled необходимо обработать сценарии повторной обработки. Вы хотите реализовать логику:
- Если завершено = 1 в рабочем дне, то accountDisabled = True
- Если повтор = 1 в рабочий день, то accountDisabled = True
- Если активный =1 в рабочем дне, то
- если
- HireDate составляет более семи дней в будущем, а затем accountDisabled = True (отключить учетную запись)
- HireDate = <семь дней в будущем accountDisabled = False (включить учетную запись)
- если
- Если активный = 0, то accountDisabled = True
Целевой атрибут: 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"
)
)
)
Пример:
- Входные значения: [Завершено] = "1", [Активный] = "1", [StatusHireDate] = "2025-08-15"
-
Выходные данные выражения:
True(учетная запись отключена из-за завершения) - Альтернативные входные данные: [Завершено] = "0", [Rescinded] = "1", [Активный] = "1"
-
Альтернативные выходные данные:
True(учетная запись отключена из-за отмены) - Альтернативные входные данные: [Завершено] = "0", [Rescinded] = "0", [Активный] = "1", [StatusHireDate] = "2025-08-15" (текущая дата: 2025-07-30)
-
Альтернативные выходные данные:
True(учетная запись отключена в качестве даты найма более 7 дней) - Альтернативные входные данные: [Завершено] = "0", [Rescinded] = "0", [Активный] = "1", [StatusHireDate] = "2025-08-05"
-
Альтернативный результат:
False(учетная запись включена в качестве даты найма в течение 7 дней)
Логика состояния учетной записи для идентификатора Microsoft Entra
Выражения в этом разделе применимы к accountEnabled атрибуту, который является частью приложения подготовки пользователей Workday к идентификатору Microsoft Entra ID. Чтобы задать accountDisabled атрибут, который является частью "Workday в локальном приложении подготовки пользователей Active Directory", см. раздел "Логика состояния учетной записи для Active Directory".
Базовое управление состоянием учетной записи
Сценарий 1. Вы хотите отключить учетные записи идентификатора Microsoft Entra для пользователей, которые не активны в Workday.
Целевой атрибут: accountEnabled
Switch([Active], , "1", "True", "0", "False")
Пример:
- Входные значения: [Активный] = "1"
-
Выходные данные выражения:
True(включена учетная запись) - Альтернативные входные данные: [Активный] = "0"
-
Альтернативные выходные данные:
False(учетная запись отключена)
Повторная обработка
Сценарий 1. Необходимо обрабатывать сценарии повторного заполнения, в которых учетные записи должны быть включены только по дате найма или после нее.
Целевой атрибут: accountEnabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"),
"0", "False")
Пример:
- Входные значения: [Активный] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
False(учетная запись отключена до даты найма) - Альтернативные входные данные: [Активный] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Альтернативные выходные данные:
True(учетная запись включена в качестве даты найма)
Создание предварительной учетной записи
Сценарий 1. Вы хотите создать учетные записи для будущих сотрудников, но сохранить их отключенными до 14 дней до даты начала.
Целевой атрибут: accountEnabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")
Пример:
- Входные значения: [Активный] = "1", [StatusHireDate] = "2025-08-10" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
True(учетная запись включена в качестве даты найма в течение 14 дней) - Альтернативные входные данные: [Активный] = "1", [StatusHireDate] = "2025-09-15"
-
Альтернативные выходные данные:
False(учетная запись отключена в качестве даты найма более 14 дней)
Функции даты
Форматирование даты и преобразование
Сценарий 1. Необходимо преобразовать дату окончания контракта Workday в формат Active Directory для атрибута accountExpires, поэтому срок действия учетной записи истекает в дату окончания контракта.
Целевой атрибут: accountExpires
NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))
Пример:
- Входные значения: [StatusHireDate] = "2025-12-31"
-
Вывод выражения:
133835135990000000(числовое представление 2025-12-31T23:59:59-07:00)
Сценарий 2. Вы хотите установить срок действия учетной записи пять лет с даты найма.
Целевой атрибут: accountExpires
NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))
Пример:
- Входные значения: [StatusHireDate] = "2025-01-15"
-
Вывод выражения:
139418879990000000(числовое представление 2030-01-15 23:59:59-055:00)
Логика на основе условной даты
Сценарий 1. Вы хотите передавать сведения о отделе только в том случае, если сотрудник начал работу (дата найма прошла).
Целевой атрибут: отдел
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, [Department], IgnoreAttributeFlow)
Пример:
- Входные значения: [StatusHireDate] = "2025-07-15", [Департамент] = "Инженерия" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
Engineering(дата найма прошла) - Альтернативные входные данные: [StatusHireDate] = "2025-08-15", [Департамент] = "Маркетинг"
-
Альтернативные выходные данные:
IgnoreAttributeFlow(дата найма в будущем)
Сценарий 2. Необходимо создать объекты пользователей, только если дата найма находится в течение 14 дней.
Целевой атрибут: objectFilter
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)
Пример:
- Входные значения: [StatusHireDate] = "2025-08-10" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
False(создание объекта пользователя в качестве даты найма в течение 14 дней) - Альтернативные входные данные: [StatusHireDate] = "2025-09-15"
-
Альтернативные выходные данные:
IgnoreObjectFlow(не создавайте объект пользователя в качестве даты найма более 14 дней)
Назначение подразделения
Простое назначение подразделения
Сценарий 1. Вы хотите разместить пользователей в разных подразделениях в зависимости от своего города.
Целевой атрибут: 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"
)
Пример:
- Входные значения: [Город] = "Сиэтл"
-
Выходные данные выражения:
OU=Seattle,OU=Users,DC=contoso,DC=com - Альтернативные входные данные: [Город] = "Чикаго"
-
Альтернативные выходные данные:
OU=Default,OU=Users,DC=contoso,DC=com(по умолчанию для неопределенных городов)
Сложная структура подразделения
Сценарий 1. Необходимо создать сложную структуру подразделения на основе отдела, центра затрат и страны.
Целевой атрибут: 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"
)
Пример:
- Входные значения: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
-
Выходные данные выражения:
OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com - Альтернативные входные данные: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
-
Альтернативные выходные данные:
OU=Users,DC=contoso,DC=com(по умолчанию, когда значения не совпадают)
Завершенное назначение подразделения пользователя
Сценарий 1. Вы хотите переместить завершенных пользователей в специальную подразделение по дате завершения.
Целевой атрибут: 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"
)
)
Пример:
- Входные значения: [StatusTerminationLastDayOfWork] = "2025-07-25", [Город] = "Сиэтл" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
OU=Leavers,OU=Users,DC=contoso,DC=com(перемещено в подразделение Leavers по мере прохождения даты завершения) - Альтернативные входные данные: [StatusTerminationLastDayOfWork] = "2025-08-15", [Город] = "Даллас"
-
Альтернативные выходные данные:
OU=Dallas,OU=Users,DC=contoso,DC=com(остается в обычном подразделении, так как дата завершения находится в будущем)
Случайное создание идентификаторов
Случайное создание на основе GUID
Сценарий 1. Необходимо создать случайную 5-символьную строку, которая не содержит цифры.
Целевой атрибут: 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", , )
)
Пример:
- Входные значения: созданный GUID, преобразованный в Base64 (например, "mV8dXr...")
-
Выходные данные выражения:
mVAdX(цифры, замененные "A" или "B"/"C", если используется первый вариант)
Сценарий 2. Вы хотите создать случайную строку, которая начинается с "D", а затем 4 алфавитных символа.
Целевой атрибут: 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}", ,))
)
Пример:
- Входные значения: созданный GUID, преобразованный в Base64, содержащий алфавитную последовательность mVdX.
-
Вывод выражения:
DMVDX(или другой, если первый вариант принимается)
Создание числовых идентификаторов
Сценарий 1. Необходимо создать случайный 4-значный номер из GUID.
Целевой атрибут: 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}", ,)
)
Пример:
- Входные значения: созданный GUID, например "a1b2c3d4-e5f6-7890-1234-567890abcdef"
-
Выходные данные выражения:
D7890(илиD5678D1234, и т. д. в зависимости от того, какая 4-разрядная последовательность соответствует первой)
Обработка имен
Создание отображаемого имени
Сценарий 1. Вы хотите создать отображаемое имя в формате Last, First.
Целевой атрибут: displayName
Join(", ", [PreferredLastName], [PreferredFirstName])
Пример:
- Входные значения: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
-
Выходные данные выражения:
Smith, John
Сценарий 2. Необходимо создать отображаемое имя, включающее идентификатор среднего и начального и сотрудника.
Целевой атрибут: displayName
Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])
Пример:
- Входные значения: [PreferredLastName] = "Джонсон", [PreferredFirstName] = "Сара", [PreferredMiddleName] = "Элизабет", [WorkerID] = "12345"
-
Выходные данные выражения:
Johnson,Sarah E-12345
Общее поколение имен (CN) с уникальностью
Сценарий 1. Вы хотите создать уникальное общее имя с резервными параметрами для дубликатов.
Целевой атрибут: cn
SelectUniqueValue(
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)
Пример:
- Входные значения: [PreferredFirstName] = "José", [PreferredLastName] = "García", [PreferredMiddleName] = "Антонио"
-
Выходные данные выражения:
Jose Garcia(илиJose A Garciaесли используется первый вариант, илиJose Antonio Garciaесли первые два будут приняты)
Создание SamAccountName
Сценарий 1. Вы хотите создать 20-символьный samAccountName с использованием первого и фамилии с числовыми суффиксами для дубликатов.
Целевой атрибут: 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")
)
Пример:
- Входные значения: [FirstName] = "María José", [LastName] = "González-López"
-
Выходные данные выражения:
mgonzalezlopez(илиmgonzalezlopez1если используется первый вариант, илиmgonzalezlopez2если первые два будут приняты)
Расширенные сценарии
Скрытие из логики списков адресов
В этом разделе описывается, как задать логический атрибут msExchHideFromAddressLists. Используйте все заголовки TRUE или FALSE, чтобы задать логический атрибут. Использование любого другого значения приводит к ошибке HybridSynchronizationActiveDirectoryInvalidParameter .
Сценарий 1. Требуется задать msExchHideFromAddressLists состояние активной учетной записи пользователя Workday.
Целевой атрибут: msExchHideFromAddressLists
Switch([Active], , "1", "FALSE", "0", "TRUE")
Пример:
- Входные значения: [Активный] = "0"
- Вывод выражения:
TRUE(скрытие из списков адресов, так как пользователь неактивен в Workday) - Альтернативные входные данные: [активный] = "1"
-
Альтернативные выходные данные:
FALSE(отображаются в списках адресов, так как пользователь активен в Workday)
Сценарий 2. Вы хотите установить msExchHideFromAddressLists на основе даты найма рабочей роли. Отображение пользователя в списке адресов Exchange только после даты найма.
Целевой атрибут: msExchHideFromAddressLists
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")
Пример:
- Входные значения: [StatusHireDate] = "2025-07-31" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
TRUE(скрытие из списков адресов в качестве даты найма в будущем) - Альтернативные входные данные: [StatusHireDate] = "2025-07-31" (текущая дата: 2025-08-01)
-
Альтернативные выходные данные:
FALSE(отображение в списках адресов в качестве даты найма в прошлом)
Параметр атрибута с несколькими значениями
Сценарий 1. Необходимо задать несколько значений для атрибута msExchPoliciesExcluded в Active Directory.
Целевой атрибут: msExchPoliciesExcluded
Split(
Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
","
)
Пример:
- Входные значения: статические значения GUID
-
Выходные данные выражения:
["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]
Сценарии обратной записи
Сценарий 1. Вы хотите вернуть имя пользователя в Workday, только если дата найма сотрудника прошла.
Целевой атрибут: имя пользователя
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))
Пример:
- Входные значения: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com" (текущая дата: 2025-07-30)
-
Выходные данные выражения:
user@contoso.com(дата найма прошла, имя пользователя обратной записи) - Альтернативные входные данные: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
- Альтернативные выходные данные: (пустые — игнорируемые, дата найма в будущем)
Лучшие практики
Всегда используйте SelectUniqueValue для атрибутов, требующих уникальности (например, UPN, samAccountName, email).
Обработка пустых и пустых значений с помощью таких функций, как
IsNullOrEmpty,IsPresentилиSwitchоператоров.При обработке имен с особыми символами используйте нормализованныеDiacritics, чтобы обеспечить совместимость.
Логика даты тестирования тщательно, так как различные часовые пояса и форматы дат могут повлиять на результаты.
Используйте IgnoreFlowIfNullOrEmpty , если требуется пропустить обновления атрибутов для пустых значений.
Рекомендуется использовать switch вместо вложенных операторов IIF для повышения удобочитаемости.
Перед реализацией всегда проверяйте регулярные выражения в интерактивном ретекстере.