Fonctions de mappage d’expressions Workday pour le provisionnement d’ID Microsoft Entra

Cet article fournit un guide complet pour les fonctions de mappage d’expressions couramment utilisées lors de la configuration de Workday sur active Directory local / Provisionnement d’utilisateurs Microsoft Entra ID. Ces fonctions permettent de transformer et de mapper des données de Workday pour créer des attributs utilisateur appropriés dans Microsoft Entra ID.

Table des matières

Fonctions de manipulation de chaînes

Opérations de chaîne de base

Scénario 1 : Vous souhaitez nettoyer une valeur de numéro de téléphone provenant de Workday en supprimant des espaces, des crochets et des tirets.

Attribut cible : telephoneNumber, mobile

Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )

Exemple:

  • Valeurs d’entrée : [PrimaryWorkTelephone] = « +1 (555) 123-4567 »
  • Sortie de l’expression : +15551234567

Scénario 2 : Vous devez extraire le nom d’un PreferredNameData champ qui contient « FirstName LastName ».

Attribut cible : sn dans Active Directory local, surname dans l’ID Microsoft Entra

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

Exemple:

  • Valeurs d’entrée : [PreferredNameData] = « John Smith »
  • Sortie de l’expression : Smith

Scénario 3 : Vous souhaitez supprimer les zéros non significatifs d’un ID de travail avant de le mettre en correspondance avec un ID d’employé dans Active Directory local ou Microsoft Entra ID.

Attribut cible : employeeId

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

Exemple:

  • Valeurs d’entrée : [WorkerID] = « 00012345 »
  • Sortie de l’expression : 12345

Scénario 4 : L’attribut HereditarySuffix contient des informations de suffixe marquées avec le code ISO du pays et vous souhaitez uniquement extraire les informations de suffixe et l’ajouter au nom de famille.

Attribut cible : sn dans Active Directory local, surname dans l’ID Microsoft Entra

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

Exemple:

  • Valeurs d’entrée : [HéréditaireSuffix] = « NLD_Van_der3 », [PreferredLastName] = « Hof »
  • Sortie de l’expression : Van der Hof

Conversion de cas de texte

Scénario 1 : Vous devez convertir le texte en cas approprié, mais gérer correctement les apostrophes (par exemple, « hôpital st john » doit devenir « Hôpital St John »).

Attribut cible : entreprise

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

Exemple:

  • Valeurs d’entrée : texte statique « hôpital st john »
  • Sortie de l’expression : St John's Hospital

Scénario 2 : Vous souhaitez créer un nom d’utilisateur en minuscules à partir du prénom et du nom.

Attribut cible : mailNickname

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

Exemple:

  • Valeurs d’entrée : [PreferredFirstName] = « José », [PreferredLastName] = « García-López »
  • Sortie de l’expression : jose.garcia-lopez

Logique d’affectation de noms spécifique au pays

Scénario 1 : Vous devez appliquer différentes conventions d’affectation de noms en fonction du pays de l’utilisateur (par exemple, « Last, First » pour certains pays).

Attribut cible : displayName, cn

Switch([CountryReferenceTwoLetter], 
    Join(" ", [PreferredFirstName], [PreferredLastName]),  
    "HU", Join(",", [PreferredLastName], [PreferredFirstName]), 
    "JP", Join(",", [PreferredLastName], [PreferredFirstName]), 
    "KR", Join(",", [PreferredLastName], [PreferredFirstName])
)

Exemple:

  • Valeurs d’entrée : [CountryReferenceTwoLetter] = « JP », [PreferredFirstName] = « Hiroshi », [PreferredLastName] = « Tanaka »
  • Sortie de l’expression : Tanaka,Hiroshi (convention d’affectation de noms japonaise)
  • Autre entrée : [CountryReferenceTwoLetter] = « US », [PreferredFirstName] = « John », [PreferredLastName] = « Smith »
  • Autre sortie : John Smith (convention d’affectation de noms occidentale par défaut)

Génération d’adresses e-mail

Génération de messagerie de base

Scénario 1 : Vous souhaitez construire une adresse e-mail en joignant le prénom et le nom, en supprimant les espaces et les caractères spéciaux et en ajoutant un domaine.

Attribut cible : courrier électronique

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

Exemple:

  • Valeurs d’entrée : [PreferredFirstName] = « María », [PreferredLastName] = « José González »
  • Sortie de l’expression : maria.josegonzalez@contoso.com

Scénario 2 : Vous devez gérer des caractères spéciaux tels que des guillemets et des virgules dans des noms lors de la génération d’adresses e-mail.

Attribut cible : 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")
)

Exemple:

  • Valeurs d’entrée : [PreferredFirstName] = « Mary-Ann », [PreferredLastName] = « O’Connor »
  • Sortie de l’expression : maryann.oconnor@contoso.com (ou m.oconnor@contoso.com si la première option est prise, ou ma.oconnor@contoso.com si les deux premières sont prises)

Domaines de messagerie spécifiques à l’entreprise

Scénario 1 : Vous avez plusieurs entreprises et avez besoin de générer des adresses e-mail avec différents suffixes de domaine en fonction de l’entreprise.

Attribut cible : courrier électronique

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")
)

Exemple:

  • Valeurs d’entrée : [Company] = « Fabrikam », [FirstName] = « John », [LastName] = « Smith »
  • Sortie de l’expression : john.smith@fabrikam.com
  • Alternative Input : [Company] = « Woodgrove », [FirstName] = « Sarah », [LastName] = « Johnson »
  • Autre sortie : s.johnson@woodgrove.com

Configuration de ProxyAddresses

Scénario 1 : Vous devez définir plusieurs adresses proxy pour Exchange, notamment les adresses SMTP primaires et secondaires.

Attribut cible : 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"))
    ), ","
)

Exemple:

  • Valeurs d’entrée : [PreferredFirstName] = « Michael », [PreferredLastName] = « Brown »
  • Sortie de l’expression : ["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]

Traitement des numéros de téléphone

Ces mappages d’expressions peuvent être utilisés dans l’application Workday Writeback.

Analyse des numéros de téléphone internationaux

Scénario 1 : Vous avez des numéros de téléphone au format international (+1 737-626-8331) et devez extraire uniquement le numéro de téléphone sans code de pays.

Attribut cible : telephoneNumber

Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )

Exemple:

  • Valeurs d’entrée : [telephoneNumber] = « +1 737-626-8331 »
  • Sortie de l’expression : 7376268331

Scénario 2 : Vous devez extraire le code du pays à partir d’un numéro de téléphone pour déterminer le pays à des fins d’annuaire.

Attribut cible : c

Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
  "1", "USA",
  "44", "GBR", 
  "49", "DEU"
)

Exemple:

  • Valeurs d’entrée : [telephoneNumber] = « +44 20 7946 0958 »
  • Sortie de l’expression : GBR
  • Entrée alternative : [telephoneNumber] = « +1 555-123-4567 »
  • Autre sortie : USA

Scénario 3 : Vous devez écrire le numéro de téléphone que Microsoft Teams génère et définit dans l’ID Microsoft Entra (par exemple + 4926180001111). Dans ce numéro de téléphone, il n’y a pas d’espace entre CountryCode et le numéro de téléphone réel. Vous pouvez utiliser le mécanisme d’analyse d’expression régulière suivant pour extraire les codes de pays pertinents pour votre organisation et l’utiliser pour définir Workday CountryCodeName.

Attribut cible : 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")

Exemple:

  • Valeurs d’entrée : [telephoneNumber] = « +493012345678 »
  • Sortie de l’expression : GER
  • Autre entrée : [telephoneNumber] = « +919876543210 »
  • Autre sortie : IND
  • Entrée alternative : [telephoneNumber] = « +15551234567 »
  • Autre sortie : USA

Mise en forme des numéros de téléphone pour différents systèmes

Scénario 1 : Vous devez traiter les numéros de téléphone qui incluent des extensions (par exemple, « +1 (206) 291-8163 x8125 »).

Attribut cible : telephoneNumber

Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )

Exemple:

  • Valeurs d’entrée : [telephoneNumber] = « +1 (206) 291-8163 x8125 »
  • Sortie de l’expression : 2062918163

Scénario 2 : Vous souhaitez extraire uniquement l’extension d’un numéro de téléphone.

Attribut cible : extensionAttribute1

Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )

Exemple:

  • Valeurs d’entrée : [telephoneNumber] = « +1 (206) 291-8163 x8125 »
  • Sortie de l’expression : 8125

Logique d’état du compte pour Active Directory

Les expressions de cette section s’appliquent à l’attribut accountDisabled qui fait partie de « Workday to on-premises Active Directory user provisioning app ». Pour définir l’attribut accountEnabled qui fait partie de « Workday to Microsoft Entra ID user provisioning app », reportez-vous à la section Account Status Logic for Microsoft Entra ID.

Gestion de l’état du compte de base

Scénario 1 : Vous souhaitez désactiver les comptes Active Directory locaux pour les utilisateurs qui ne sont pas actifs dans Workday.

Attribut cible : accountDisabled

Switch([Active], , "1", "False", "0", "True")

Exemple:

  • Valeurs d’entrée : [Active] = « 1 »
  • Sortie de l’expression : False (compte activé)
  • Entrée alternative : [Actif] = « 0 »
  • Autre sortie : True (compte désactivé)

Réinscrire le traitement

Scénario 1 : Vous avez besoin du scénario 1 : vous devez gérer les scénarios de réhirsion où les comptes ne doivent être activés qu’après ou après la date d’embauche.

Attribut cible : accountDisabled

Switch([Active], , 
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"), 
"0", "True")

Exemple:

  • Valeurs d’entrée : [Active] = « 1 », [StatusRehire] = « 1 », [StatusHireDate] = « 2025-08-15 » (date actuelle : 2025-07-30)
  • Sortie de l’expression : True (compte désactivé jusqu’à la date d’embauche)
  • Autre entrée : [Active] = « 1 », [StatusRehire] = « 1 », [StatusHireDate] = « 2025-07-15 »
  • Autre sortie : False (compte activé à mesure que la date d’embauche est passée)

Création d’un compte de pré-embauche

Scénario 1 : Vous souhaitez créer des comptes pour les futurs employés, mais les conserver désactivés jusqu’à 14 jours avant leur date de début.

Attribut cible : accountDisabled

Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")

Exemple:

  • Valeurs d’entrée : [Active] = « 1 », [StatusHireDate] = « 2025-08-10 » (date actuelle : 2025-07-30)
  • Sortie de l’expression : False (compte activé comme date d’embauche est dans les 14 jours)
  • Entrée alternative : [Active] = « 1 », [StatusHireDate] = « 2025-09-15 »
  • Autre sortie : True (compte désactivé en tant que date d’embauche est supérieure à 14 jours)

Gestion des annulations d’embauche

Scénario 1 : Vous devez gérer les scénarios de réinscrire lors de la définition de l’attribut accountDisabled . Vous souhaitez implémenter la logique :

  • Si terminé = 1 dans workday, accountDisabled = True
  • Si Rescinded = 1 in workday, accountDisabled = True
  • Si Actif =1 dans workday, puis
    • si
      • HireDate est supérieur à sept jours à l’avenir, puis accountDisabled = True (désactivez le compte)
      • HireDate est <= sept jours à venir, puis accountDisabled = False (activer le compte)
  • If Active = 0 then accountDisabled = True

Attribut cible : 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"
         )
    )
)

Exemple:

  • Valeurs d’entrée : [Terminated] = « 1 », [Active] = « 1 », [StatusHireDate] = « 2025-08-15 »
  • Sortie de l’expression : True (compte désactivé en raison de l’arrêt)
  • Entrée alternative : [Terminated] = « 0 », [Rescinded] = « 1 », [Active] = « 1 »
  • Autre sortie : True (compte désactivé en raison d’une annulation)
  • Entrée alternative : [Terminated] = « 0 », [Rescinded] = « 0 », [Active] = « 1 », [StatusHireDate] = « 2025-08-15 » (date actuelle : 2025-07-30)
  • Autre sortie : True (compte désactivé en tant que date d’embauche est supérieure à 7 jours)
  • Autre entrée : [Terminated] = « 0 », [Rescinded] = « 0 », [Active] = « 1 », [StatusHireDate] = « 2025-08-05 »
  • Autre sortie : False (compte activé comme date d’embauche est dans les 7 jours)

Logique d’état du compte pour l’ID Microsoft Entra

Les expressions de cette section s’appliquent à l’attribut accountEnabled qui fait partie de « Workday to Microsoft Entra ID user provisioning app ». Pour définir l’attribut accountDisabled qui fait partie de « Workday to on-premises Active Directory user provisioning app », reportez-vous à la section Account Status Logic for Active Directory.

Gestion de l’état du compte de base

Scénario 1 : Vous souhaitez désactiver les comptes d’ID Microsoft Entra pour les utilisateurs qui ne sont pas actifs dans Workday.

Attribut cible : accountEnabled

Switch([Active], , "1", "True", "0", "False")

Exemple:

  • Valeurs d’entrée : [Active] = « 1 »
  • Sortie de l’expression : True (compte activé)
  • Entrée alternative : [Actif] = « 0 »
  • Autre sortie : False (compte désactivé)

Réinscrire le traitement

Scénario 1 : Vous devez gérer les scénarios de réhirsion où les comptes ne doivent être activés qu’après ou après la date d’embauche.

Attribut cible : accountEnabled

Switch([Active], , 
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"), 
"0", "False")

Exemple:

  • Valeurs d’entrée : [Active] = « 1 », [StatusRehire] = « 1 », [StatusHireDate] = « 2025-08-15 » (date actuelle : 2025-07-30)
  • Sortie de l’expression : False (compte désactivé jusqu’à la date d’embauche)
  • Autre entrée : [Active] = « 1 », [StatusRehire] = « 1 », [StatusHireDate] = « 2025-07-15 »
  • Autre sortie : True (compte activé à mesure que la date d’embauche est passée)

Création d’un compte de pré-embauche

Scénario 1 : Vous souhaitez créer des comptes pour les futurs employés, mais les conserver désactivés jusqu’à 14 jours avant leur date de début.

Attribut cible : accountEnabled

Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")

Exemple:

  • Valeurs d’entrée : [Active] = « 1 », [StatusHireDate] = « 2025-08-10 » (date actuelle : 2025-07-30)
  • Sortie de l’expression : True (compte activé comme date d’embauche est dans les 14 jours)
  • Entrée alternative : [Active] = « 1 », [StatusHireDate] = « 2025-09-15 »
  • Autre sortie : False (compte désactivé en tant que date d’embauche est supérieure à 14 jours)

Fonctions date

Mise en forme et conversion de date

Scénario 1 : Vous devez convertir une date de fin de contrat Workday au format Active Directory pour l’attribut accountExpires. Par conséquent, le compte expire à la date de fin du contrat.

Attribut cible : accountExpires

NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))

Exemple:

  • Valeurs d’entrée : [StatusHireDate] = « 2025-12-31 »
  • Sortie de l’expression : 133835135990000000 (représentation numérique de 2025-12-31T23:59:59-07:00)

Scénario 2 : Vous souhaitez définir une date d’expiration de compte cinq ans à partir de la date d’embauche.

Attribut cible : accountExpires

NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))

Exemple:

  • Valeurs d’entrée : [StatusHireDate] = « 2025-01-15 »
  • Sortie de l’expression : 139418879990000000 (représentation numérique de 2030-01-15 23:59:59-05:00)

Logique basée sur des dates conditionnelles

Scénario 1 : Vous souhaitez transmettre les informations du service uniquement si l’employé a commencé à travailler (la date d’embauche est passée).

Attribut cible : service

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

Exemple:

  • Valeurs d’entrée : [StatusHireDate] = « 2025-07-15 », [Department] = « Engineering » (date actuelle : 2025-07-30)
  • Sortie de l’expression : Engineering (date d’embauche passée)
  • Autre entrée : [StatusHireDate] = « 2025-08-15 », [Department] = « Marketing »
  • Autre sortie : IgnoreAttributeFlow (la date d’embauche est à l’avenir)

Scénario 2 : Vous devez créer des objets utilisateur uniquement si la date d’embauche est comprise dans les 14 jours.

Attribut cible : objectFilter

IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)

Exemple:

  • Valeurs d’entrée : [StatusHireDate] = « 2025-08-10 » (date actuelle : 2025-07-30)
  • Sortie de l’expression : False (créer un objet utilisateur en tant que date d’embauche est comprise entre 14 jours)
  • Autre entrée : [StatusHireDate] = « 2025-09-15 »
  • Autre sortie : IgnoreObjectFlow (ne créez pas d’objet utilisateur à mesure que la date d’embauche est supérieure à 14 jours)

Affectation d’unité d’organisation (UO)

Affectation d’unité d’organisation simple

Scénario 1 : Vous souhaitez placer des utilisateurs dans différentes unités d’organisation en fonction de leur ville.

Attribut cible : 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" 
)

Exemple:

  • Valeurs d’entrée : [City] = « Seattle »
  • Sortie de l’expression : OU=Seattle,OU=Users,DC=contoso,DC=com
  • Entrée alternative : [City] = « Chicago »
  • Autre sortie : OU=Default,OU=Users,DC=contoso,DC=com (par défaut pour les villes non spécifiées)

Structure d’unité d’organisation complexe

Scénario 1 : Vous devez créer une structure d’unité d’organisation complexe basée sur le service, le centre de coûts et le pays.

Attribut cible : 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"
)

Exemple:

  • Valeurs d’entrée : [SupervisoryOrganization] = « Engineering », [CostCenter] = « Modern Workplace », [CountryReferenceTwoLetter] = « US »
  • Sortie de l’expression : OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com
  • Autre entrée : [SupervisoryOrganization] = « Sales », [CostCenter] = « Marketing », [CountryReferenceTwoLetter] = « UK »
  • Autre sortie : OU=Users,DC=contoso,DC=com (valeurs par défaut lorsque les valeurs ne correspondent pas)

Affectation d’unité d’organisation d’utilisateur terminée

Scénario 1 : Vous souhaitez déplacer les utilisateurs arrêtés vers une unité d’organisation spéciale à leur date d’arrêt.

Attribut cible : 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" 
    ) 
)

Exemple:

  • Valeurs d’entrée : [StatusTerminationLastDayOfWork] = « 2025-07-25 », [City] = « Seattle » (date actuelle : 2025-07-30)
  • Sortie de l’expression : OU=Leavers,OU=Users,DC=contoso,DC=com (déplacé vers l’unité d’organisation Leavers à mesure que la date d’arrêt est passée)
  • Autre entrée : [StatusTerminationLastDayOfWork] = « 2025-08-15 », [City] = « Dallas »
  • Autre sortie : OU=Dallas,OU=Users,DC=contoso,DC=com (reste dans une unité d’organisation normale à mesure que la date d’arrêt est à l’avenir)

Génération d’ID aléatoire

Génération aléatoire basée sur GUID

Scénario 1 : Vous devez générer une chaîne de 5 caractères aléatoire qui ne contient pas de chiffres.

Attribut cible : 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", , )
)

Exemple:

  • Valeurs d’entrée : GUID généré converti en base64 (par exemple, « mV8dXr... »)
  • Sortie de l’expression : mVAdX (chiffres remplacés par « A » ou « B » /« C » si la première option est prise)

Scénario 2 : Vous souhaitez générer une chaîne aléatoire commençant par « D » suivie de 4 caractères alphabétiques.

Attribut cible : 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}", ,))
)

Exemple:

  • Valeurs d’entrée : GUID généré converti en base64 contenant la séquence alphabétique « mVdX »
  • Sortie de l’expression : DMVDX (ou différent si la première option est prise)

Génération d’ID numérique

Scénario 1 : Vous devez générer un nombre à 4 chiffres aléatoire à partir d’un GUID.

Attribut cible : 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}", ,)
)

Exemple:

  • Valeurs d’entrée : GUID généré comme « a1b2c3d4-e5f6-7890-1234-567890abcdef »
  • Sortie de l’expression : D7890 (ou D1234, D5678, etc. selon la séquence à 4 chiffres correspondant en premier)

Traitement des noms

Génération de nom complet

Scénario 1 : Vous souhaitez créer un nom complet au format « Last, First ».

Attribut cible : displayName

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

Exemple:

  • Valeurs d’entrée : [PreferredLastName] = « Smith », [PreferredFirstName] = « John »
  • Sortie de l’expression : Smith, John

Scénario 2 : Vous devez créer un nom complet qui inclut l’ID initial intermédiaire et l’ID d’employé.

Attribut cible : displayName

Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])

Exemple:

  • Valeurs d’entrée : [PreferredLastName] = « Johnson », [PreferredFirstName] = « Sarah », [PreferredMiddleName] = « Elizabeth », [WorkerID] = « 12345 »
  • Sortie de l’expression : Johnson,Sarah E-12345

Génération de nom commun (CN) avec unicité

Scénario 1 : Vous souhaitez générer un nom commun unique avec des options de secours pour les doublons.

Attribut cible : cn

SelectUniqueValue(
    NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
    NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
    NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)

Exemple:

  • Valeurs d’entrée : [PreferredFirstName] = « José », [PreferredLastName] = « García », [PreferredMiddleName] = « Antonio »
  • Sortie de l’expression : Jose Garcia (ou Jose A Garcia si la première option est prise, ou Jose Antonio Garcia si les deux premières sont prises)

Génération SamAccountName

Scénario 1 : Vous souhaitez créer un samAccountName de 20 caractères à l’aide du prénom initial et du nom avec des suffixes numériques pour les doublons.

Attribut cible : 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")
)

Exemple:

  • Valeurs d’entrée : [FirstName] = « María José », [LastName] = « González-López »
  • Sortie de l’expression : mgonzalezlopez (ou mgonzalezlopez1 si la première option est prise, ou mgonzalezlopez2 si les deux premières sont prises)

Scénarios avancés

Masquer dans la logique des listes d’adresses

Cette section explique comment définir l’attribut msExchHideFromAddressListsbooléen . Utilisez toutes les majuscules « TRUE » ou « FALSE » pour définir l’attribut booléen. L’utilisation d’une autre valeur entraîne une HybridSynchronizationActiveDirectoryInvalidParameter erreur.

Scénario 1 : Vous souhaitez définir msExchHideFromAddressLists en fonction de l’état du compte actif de l’utilisateur Workday.

Attribut cible : msExchHideFromAddressLists

Switch([Active], , "1", "FALSE", "0", "TRUE")

Exemple:

  • Valeurs d’entrée : [Active] = « 0 »
  • Sortie de l’expression : TRUE (masquer des listes d’adresses lorsque l’utilisateur est inactif dans Workday)
  • Entrée alternative : [Actif] = « 1 »
  • Autre sortie : FALSE (afficher dans les listes d’adresses lorsque l’utilisateur est actif dans Workday)

Scénario 2 : Vous souhaitez définir msExchHideFromAddressLists la date d’embauche du travailleur. Affichez l’utilisateur dans la liste d’adresses Exchange uniquement après la date d’embauche.

Attribut cible : msExchHideFromAddressLists

IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")

Exemple:

  • Valeurs d’entrée : [StatusHireDate] = « 2025-07-31 » (date actuelle : 2025-07-30)
  • Sortie de l’expression : TRUE (masquer les listes d’adresses à mesure que la date d’embauche est à l’avenir)
  • Autre entrée : [StatusHireDate] = « 2025-07-31 » (date actuelle : 2025-08-01)
  • Autre sortie : FALSE (afficher dans les listes d’adresses à mesure que la date d’embauche est passée)

Paramètre d’attribut à valeurs multiples

Scénario 1 : Vous devez définir plusieurs valeurs pour l’attribut msExchPoliciesExcluded dans Active Directory.

Attribut cible : msExchPoliciesExcluded

Split(
    Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
    ","
)

Exemple:

  • Valeurs d’entrée : valeurs GUID statiques
  • Sortie de l’expression : ["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]

Scénarios d’écriture différée

Scénario 1 : Vous souhaitez réécrire le nom d’utilisateur dans Workday uniquement si la date d’embauche de l’employé est passée.

Attribut cible : Nom d’utilisateur

IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))

Exemple:

  • Valeurs d’entrée : [employeeHireDate] = « 2025-07-15 », [userPrincipalName] = « user@contoso.com » (date actuelle : 2025-07-30)
  • Sortie de l’expression : user@contoso.com (date d’embauche passée, réécriture du nom d’utilisateur)
  • Entrée alternative : [employeeHireDate] = « 2025-08-15 », [userPrincipalName] = « future@contoso.com »
  • Autre sortie : (vide - ignoré, la date d’embauche est à l’avenir)

Meilleures pratiques

  • Utilisez toujours SelectUniqueValue pour les attributs qui nécessitent unicité (comme UPN, samAccountName, email).

  • Gérez les valeurs null et vides à l’aide de fonctions telles que IsNullOrEmpty, IsPresentou Switch des instructions.

  • Utilisez NormalizeDiacritics lors du traitement des noms avec des caractères spéciaux pour garantir la compatibilité.

  • La logique de date de test minutieusement , car différents fuseaux horaires et formats de date peuvent affecter les résultats.

  • Utilisez IgnoreFlowIfNullOrEmpty lorsque vous souhaitez ignorer les mises à jour d’attribut pour les valeurs vides.

  • Envisagez d’utiliser Switch au lieu d’instructions IIF imbriquées pour améliorer la lisibilité.

  • Validez toujours les expressions régulières dans un testeur regex en ligne avant d’implémenter.

Autres ressources