本文提供將 Workday 設定為內部部署 Active Directory/Microsoft Entra ID 使用者布建時常用運算式對應函式的完整指南。 這些函式可協助轉換和對應 Workday 中的資料,以在 Microsoft Entra ID 中建立適當的使用者屬性。
目錄
- 字串操作函數
- 電子郵件地址產生
- 電話號碼處理
- Active Directory 的帳戶狀態邏輯
- Microsoft Entra ID 的帳戶狀態邏輯
- 日期函數
- 組織單位 (OU) 指派
- 隨機 ID 產生
- 名稱處理
字串操作函數
基本字串運算
案例 1:您想要移除空格、括弧和破折號,以清除來自 Workday 的電話號碼值。
目標屬性:telephoneNumber、mobile
Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )
例:
- 輸入值: [PrimaryWorkTelephone] = “+1 (555) 123-4567”
-
表達式的輸出:
+15551234567
場景 2:您需要從包含「FirstName LastName」的欄位中 PreferredNameData 提取姓氏。
目標屬性: sn 在內部部署 Active Directory 中, surname 在 Microsoft Entra ID 中
Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)
例:
- 輸入值: [PreferredNameData] = “John Smith”
-
表達式的輸出:
Smith
案例 3:您想要先從背景工作識別碼移除前導零,再將它與內部部署 Active Directory 或 Microsoft Entra ID 中的員工識別碼進行比對。
目標屬性:employeeId
Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)
例:
- 輸入值: [WorkerID] = “00012345”
-
表達式的輸出:
12345
案例 4:屬性 HereditarySuffix 包含以國家/地區 ISO 代碼標記的尾碼資訊,而您只想擷取尾碼資訊,並將其附加至姓氏。
目標屬性: sn 在內部部署 Active Directory 中, surname 在 Microsoft Entra ID 中
Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])
例:
- 輸入值:[HereditarySuffix] = “NLD_Van_der3”, [PreferredLastName] = “Hof”
-
表達式的輸出:
Van der Hof
文字大小寫轉換
場景 1:您需要將文本轉換為正確的大小寫,但正確處理撇號(例如,“st john's hospital”應該變成“St John's Hospital”)。
目標屬性:公司
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:您需要根據使用者所在的國家/地區應用不同的命名慣例(例如,某些國家/地區的「最後、第一個」)。
目標屬性: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如果採用前兩個選項)
公司特定的電子郵件網域
場景一:您有多家公司,需要根據公司產生不同網域後綴的電子郵件地址。
目標屬性:郵件
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")
)
例:
- 輸入值:[Company] = “Fabrikam”, [FirstName] = “John”, [LastName] = “Smith”
-
表達式的輸出:
john.smith@fabrikam.com - 替代輸入: [Company] = “Woodgrove”, [FirstName] = “Sarah”, [LastName] = “Johnson”
-
替代輸出:
s.johnson@woodgrove.com
ProxyAddresses 組態
場景一:您需要為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 回寫應用程式。
國際電話號碼解析
場景 1:您有國際格式的電話號碼 (+1 737-626-8331),並且只需要提取電話號碼而不包含國家/地區代碼。
目標屬性:telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
例:
- 輸入值: [telephoneNumber] = “+1 737-626-8331”
-
表達式的輸出:
7376268331
場景 2:您需要從電話號碼中提取國家/地區代碼,以確定用於目錄目的的國家/地區。
目標屬性:c
Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
"1", "USA",
"44", "GBR",
"49", "DEU"
)
例:
- 輸入值: [telephoneNumber] = “+44 20 7946 0958”
-
表達式的輸出:
GBR - 替代輸入: [telephoneNumber] = “+1 555-123-4567”
-
替代輸出:
USA
案例 3:您必須回寫 Microsoft Teams 在 Entra ID 中產生和設定的電話號碼Microsoft例如 +4926180001111。 在此電話號碼中,國家代碼與實際電話號碼之間沒有空格。 您可以使用下列正規表示式剖析機制來擷取與組織相關的國家/地區代碼,並使用它來設定工作日 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")
例:
- 輸入值:[telephoneNumber] = “+493012345678”
-
表達式的輸出:
GER - 替代輸入:[telephoneNumber] = “+919876543210”
-
替代輸出:
IND - 替代輸入:[telephoneNumber] = “+15551234567”
-
替代輸出:
USA
不同系統的電話號碼格式
案例 1:您需要處理包含分機的電話號碼 (例如「+1 (206) 291-8163 x8125」)。
目標屬性:telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
例:
- 輸入值: [telephoneNumber] = “+1 (206) 291-8163 x8125”
-
表達式的輸出:
2062918163
案例 2:您只想從電話號碼擷取分機。
目標屬性:extensionAttribute1
Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )
例:
- 輸入值: [telephoneNumber] = “+1 (206) 291-8163 x8125”
-
表達式的輸出:
8125
Active Directory 的帳戶狀態邏輯
本節中的運算式適用於 accountDisabled 屬於「Workday 至內部部署 Active Directory 使用者布建應用程式」一部分的屬性。 若要設定 accountEnabled 屬於「Workday 至 Microsoft Entra ID 使用者布建應用程式」一部分的屬性,請參閱 Microsoft Entra ID 的帳戶狀態邏輯一節。
基本帳戶狀態管理
案例 1:您想要停用 Workday 中未作用中的使用者的內部部署 Active Directory 帳戶。
目標屬性: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")
例:
- 輸入值:[Active] = “1”, [StatusRehire] = “1”, [StatusHireDate] = “2025-08-15” (目前日期:2025-07-30)
-
運算式的輸出:
True(帳戶在僱用日期之前已停用) - 替代輸入: [Active] = “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")
例:
- 輸入值:[Active] = “1”, [StatusHireDate] = “2025-08-10” (目前日期:2025-07-30)
-
運算式的輸出:
False(帳戶啟用,因為僱用日期在 14 天內) - 替代輸入:[Active] = “1”, [StatusHireDate] = “2025-09-15”
-
替代輸出:
True(帳戶已停用,因為距離僱用日期超過 14 天)
處理取消租用
案例 1:設定 accountDisabled 屬性時,您需要處理僱用撤銷案例。 您想要實作邏輯:
- 如果工作日終止 = 1,則 accountDisabled = True
- 如果 Rescinded = 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"
)
)
)
例:
- 輸入值:[terminated] = “1”, [Active] = “1”, [StatusHireDate] = “2025-08-15”
-
運算式的輸出:
True(帳戶因終止而停用) - 替代輸入:[已終止] = “0”, [已撤銷] = “1”, [有效] = “1”
-
替代輸出:
True(帳戶因撤銷而停用) - 替代輸入: [已終止] = “0”, [已撤銷] = “0”, [作用中] = “1”, [StatusHireDate] = “2025-08-15” (目前日期:2025-07-30)
-
替代輸出:
True(帳戶已停用,因為距離僱用日期超過 7 天) - 替代輸入: [已終止] = “0”, [已撤銷] = “0”, [作用中] = “1”, [StatusHireDate] = “2025-08-05”
-
替代輸出:
False(帳戶啟用,因為僱用日期在 7 天內)
Microsoft Entra ID 的帳戶狀態邏輯
本節中的運算式適用於 accountEnabled 屬於「Workday 至 Microsoft Entra ID 使用者布建應用程式」一部分的屬性。 若要設定 accountDisabled 屬於「Workday 至內部部署 Active Directory 使用者佈建應用程式」一部分的屬性,請參閱 Active Directory 的帳戶狀態邏輯一節。
基本帳戶狀態管理
案例 1:您想要停用 Workday 中未作用中的使用者的 Microsoft Entra ID 帳戶。
目標屬性: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")
例:
- 輸入值:[Active] = “1”, [StatusRehire] = “1”, [StatusHireDate] = “2025-08-15” (目前日期:2025-07-30)
-
運算式的輸出:
False(帳戶在僱用日期之前已停用) - 替代輸入: [Active] = “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")
例:
- 輸入值:[Active] = “1”, [StatusHireDate] = “2025-08-10” (目前日期:2025-07-30)
-
運算式的輸出:
True(帳戶啟用,因為僱用日期在 14 天內) - 替代輸入:[Active] = “1”, [StatusHireDate] = “2025-09-15”
-
替代輸出:
False(帳戶已停用,因為距離僱用日期超過 14 天)
日期函數
日期格式和轉換
案例 1:您必須將 accountExpires 屬性的 Workday 合約結束日期轉換為 Active Directory 格式,讓帳戶在合約結束日期到期。
目標屬性: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-05: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 天)
組織單位 (OU) 指派
簡單的 OU 指派
案例 1:您想要根據使用者的城市將使用者放置在不同的 OU 中。
目標屬性: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"
)
例:
- 輸入值:[City] = “Seattle”
-
表達式的輸出:
OU=Seattle,OU=Users,DC=contoso,DC=com - 替代輸入: [City] = “芝加哥”
-
替代輸出:
OU=Default,OU=Users,DC=contoso,DC=com(未指定城市的預設值)
複雜的 OU 結構
案例 1:您需要根據部門、成本中心和國家/地區建立複雜的 OU 結構。
目標屬性: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(值不相符時的預設值)
已終止的使用者 OU 指派
案例 1:您想要在終止日期將已終止的使用者移至特殊 OU。
目標屬性: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”, [City] = “Seattle” (目前日期:2025-07-30)
-
運算式的輸出:
OU=Leavers,OU=Users,DC=contoso,DC=com(隨著終止日期已過,移至 Leavers OU) - 替代輸入: [StatusTerminationLastDayOfWork] = “2025-08-15”, [City] = “達拉斯”
-
替代輸出:
OU=Dallas,OU=Users,DC=contoso,DC=com(保持在正常 OU 中,因為終止日期是未來的)
隨機 ID 產生
以 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 轉換成包含字母序列 「mVdX」 的 Base64
-
表達式的輸出:
DMVDX(如果採用第一個選項,則不同)
數值 ID 產生
案例 1:您必須從 GUID 產生隨機的 4 位數數字。
目標屬性: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(或D1234、D5678等,取決於首先匹配哪個 4 位數序列)
名稱處理
顯示名稱產生
場景 1:您想要以「最後、第一個」格式建立顯示名稱。
目標屬性:displayName
Join(", ", [PreferredLastName], [PreferredFirstName])
例:
- 輸入值:[PreferredLastName] = “Smith”, [PreferredFirstName] = “John”
-
表達式的輸出:
Smith, John
案例 2:您需要建立包含中間名首字母和員工 ID 的顯示名稱。
目標屬性:displayName
Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])
例:
- 輸入值:[PreferredLastName] = “Johnson”, [PreferredFirstName] = “Sarah”, [PreferredMiddleName] = “Elizabeth”, [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] = “Antonio”
-
表達式的輸出:
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:您想要根據 Workday 使用者的作用中帳戶狀態進行設定 msExchHideFromAddressLists 。
目標屬性: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:您必須在 Active Directory 中為 msExchPoliciesExcluded 屬性設定多個值。
目標屬性: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) 。
使用 、
IsPresent或Switch語句等IsNullOrEmpty函數處理空值和空值。處理具有特殊字元的名稱時,請使用 NormalizeDiacritics 以確保相容性。
徹底測試日期邏輯,因為不同的時區和日期格式可能會影響結果。
當您想要略過空值的屬性更新時,請使用 IgnoreFlowIfNullOrEmpty。
考慮使用 Switch 而不是巢狀 IIF 語句以獲得更好的可讀性。
在實作之前,請務必在線上正則運算式測試器中驗證正規表示式。