次の方法で共有


Microsoft Entra ID プロビジョニングの Workday 式マッピング関数

この記事では、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 フィールドから姓を抽出する必要があります。

ターゲット属性: オンプレミスの Active Directory のsn、Microsoft Entra ID のsurname

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

例:

  • 入力値: [PreferredNameData] = "John Smith"
  • 式の出力: Smith

シナリオ 3: オンプレミスの Active Directory または Microsoft Entra ID の従業員 ID と照合する前に、ワーカー ID から先頭のゼロを削除する必要があります。

ターゲット属性: employeeId

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

例:

  • 入力値: [WorkerID] = "00012345"
  • 式の出力: 12345

シナリオ 4: HereditarySuffix 属性には、国の ISO コードでタグ付けされたサフィックス情報が含まれており、サフィックス情報のみを抽出して姓に追加する必要があります。

ターゲット属性: オンプレミスの Active Directory のsn、Microsoft Entra ID のsurname

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

例:

  • 入力値: [SshySuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
  • 式の出力: Van der Hof

テキスト の大文字と小文字の変換

シナリオ 1: テキストを適切なケースに変換し、アポストロフィを正しく処理する必要があります (たとえば、"st john's hospital" は "St John's Hospital" になります)。

ターゲット属性: company

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

例:

  • 入力値: 静的テキスト "st john's hospital"
  • 式の出力: St John's Hospital

シナリオ 2: 名と姓から小文字のユーザー名を作成する必要があります。

ターゲット属性: mailNickname

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

例:

  • 入力値: [PreferredFirstName] = "ホセ", [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: 名と姓を結合し、スペースと特殊文字を削除し、ドメインを追加して、電子メール アドレスを作成する必要があります。

ターゲット属性: mail

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

例:

  • 入力値: [PreferredFirstName] = "María", [PreferredLastName] = "ホセ ゴンザレス"
  • 式の出力: 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 、最初の 2 つが取得された場合は ma.oconnor@contoso.com )

会社固有の電子メール ドメイン

シナリオ 1: 複数の会社があり、会社に基づいて異なるドメイン サフィックスを持つ電子メール アドレスを生成する必要があります。

ターゲット属性: mail

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 の構成

シナリオ 1: プライマリ SMTP アドレスとセカンダリ SMTP アドレスを含む、Exchange の複数のプロキシ アドレスを設定する必要があります。

ターゲット属性: 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 Entra ID で生成および設定Microsoft Teams電話番号を書き戻す必要があります (例: +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")

例:

  • 入力値: [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 のアカウント状態ロジック

このセクションの式は、"Workday to on-premises Active Directory ユーザー プロビジョニング アプリ" の一部である accountDisabled 属性に適用されます。 "Workday to Microsoft Entra ID ユーザー プロビジョニング アプリ" の一部である accountEnabled 属性の設定については、「 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 属性を設定するときに、採用の取り消しシナリオを処理する必要があります。 次のロジックを実装する必要があります。

  • Workday で Terminated = 1 の場合、accountDisabled = True
  • Workday で Rescinded = 1 の場合、accountDisabled = True
  • 稼働日にアクティブ =1 の場合は、次の操作を行います。
    • もし
      • HireDate は 7 日以上後に accountDisabled = True (アカウントを無効にする)
      • HireDate は <= 7 日後、accountDisabled = False (アカウントを有効にする) です
  • Active = 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 (終了によりアカウントが無効)
  • 代替入力: [Terminated] = "0"、[Rescinded] = "1"、[Active] = "1"
  • 代替出力: True (取り消しによりアカウントが無効)
  • 代替入力: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-15" (現在の日付: 2025-07-30)
  • 代替出力: True (雇用日が 7 日を超える場合はアカウントが無効になります)
  • 代替入力: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-05"
  • 代替出力: False (採用日が 7 日以内に有効になっているアカウント)

Microsoft Entra ID のアカウント状態ロジック

このセクションの式は、"Workday to Microsoft Entra ID ユーザー プロビジョニング アプリ" の一部である accountEnabled 属性に適用されます。 "Workday からオンプレミス Active Directory ユーザー プロビジョニング アプリ" の一部である accountDisabled 属性の設定については、「 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: 採用日から 5 年後にアカウントの有効期限を設定する必要があります。

ターゲット属性: 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: 従業員が作業を開始した場合 (採用日が過ぎた) 場合にのみ、部門情報をフローさせる必要があります。

ターゲット属性: department

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

例:

  • 入力値: [StatusHireDate] = "2025-07-15"、[Department] = "Engineering" (現在の日付: 2025-07-30)
  • 式の出力: Engineering (採用日が経過しました)
  • 代替入力: [StatusHireDate] = "2025-08-15", [Department] = "Marketing"
  • 代替出力: 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] = "Chicago"
  • 代替出力: 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] = "Dallas"
  • 代替出力: 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}", ,)
)

例:

  • 入力値: "a1b2c3d4-e5f6-7890-1234-567890abcdef" のような生成された GUID
  • 式の出力: D7890 (最初に一致する 4 桁のシーケンスに応じて、 D1234D5678など)

名前の処理

表示名の生成

シナリオ 1: "Last, First" 形式で表示名を作成します。

ターゲット属性: displayName

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

例:

  • 入力値: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
  • 式の出力: Smith, John

シナリオ 2: 中央の初期 ID と従業員 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] = "ホセ", [PreferredLastName] = "García", [PreferredMiddleName] = "Antonio"
  • 式の出力: Jose Garcia (最初のオプションを使用する場合は Jose A Garcia 、最初の 2 つが取得された場合は 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 、最初の 2 つが取得された場合は 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"
  • 代替出力: (空 - 無視、採用日は将来)

ベスト プラクティス

  • 一意性を必要とする属性 (UPN、samAccountName、電子メールなど) には、常に SelectUniqueValue を使用します。

  • IsNullOrEmptyIsPresentSwitch ステートメントなどの関数を使用して、null 値と空の値を処理します。

  • 互換性を確保するために、特殊文字で名前を処理する場合は NormalizeDiacritics を使用します。

  • 異なるタイム ゾーンと日付形式が結果に影響を与える可能性があり、日付ロジックを十分にテストします。

  • 空の値の属性の更新をスキップする場合は、IgnoreFlowIfNullOrEmpty を使用します。

  • 読みやすくするために、入れ子になった IIF ステートメントの代わりに Switch を使用することを検討してください

  • 実装する前に、必ず オンライン正規表現テスターで正規表現を検証してください。

その他のリソース