Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
- Génération d’adresses e-mail
- Traitement des numéros de téléphone
- Logique d’état du compte pour Active Directory
- Logique d’état du compte pour l’ID Microsoft Entra
- Fonctions date
- Affectation d’unité d’organisation (UO)
- Génération d’ID aléatoire
- Traitement des noms
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(oum.oconnor@contoso.comsi la première option est prise, ouma.oconnor@contoso.comsi 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)
- si
- 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(ouD1234,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(ouJose A Garciasi la première option est prise, ouJose Antonio Garciasi 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(oumgonzalezlopez1si la première option est prise, oumgonzalezlopez2si 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,IsPresentouSwitchdes 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.