Microsoft Entra ID 布建的工作日運算式對應函式

本文提供將 Workday 設定為內部部署 Active Directory/Microsoft Entra ID 使用者布建時常用運算式對應函式的完整指南。 這些函式可協助轉換和對應 Workday 中的資料,以在 Microsoft Entra 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 語句以獲得更好的可讀性。

  • 在實作之前,請務必在線上正則運算式測試器中驗證正規表示式。

更多資源