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 SuccessFactors sur le provisionnement d’utilisateurs Microsoft Entra ID. Ces fonctions permettent de transformer et de mapper des données de SuccessFactors pour créer des attributs utilisateur appropriés dans l’ID Microsoft Entra.
Table des matières
- Fonctions de manipulation de chaînes
- Génération d’adresses e-mail
- Logique de gestion des comptes
- Fonctions de date et expiration du compte
- Affectation d’unité d’organisation (UO)
- Traitement des noms et noms d’affichage
- Génération SamAccountName
- Configuration de ProxyAddresses
- Traitement des numéros de téléphone
- Logique basée sur le pays et l’emplacement
- Classification des employés et travailleurs contingents
- Scénarios avancés
Fonctions de manipulation de chaînes
Opérations de chaîne de base
Scénario 1 : Vous souhaitez remplir un ID de personne avec des zéros de début pour créer une chaîne de 8 caractères.
Attribut cible : employeeId
Replace(Join("","00000000",[personIdExternal]), ,"(.*?)(?<id>.{0,8})$", ,"${id}", ,)
Exemple:
- Valeurs d’entrée : [personIdExternal] = « 12345 »
-
Sortie de l’expression :
00012345
Scénario 2 : Vous devez remplir le centre de coûts avec des zéros de début pour le rendre à 10 caractères.
Attribut cible : extensionAttribute1
Replace(Join("","0000000000",[costCenterId]), ,"(.*?)(?<id>.{0,10})$", ,"${id}", ,)
Exemple:
- Valeurs d’entrée : [costCenterId] = « 567 »
-
Sortie de l’expression :
0000000567
Scénario 3 : Vous souhaitez créer un ID d’employé en ajoutant un préfixe à un numéro d’employé rembourré.
Attribut cible : employeeId
Append("05",Replace(Join("","000000",[employeeId]), ,"(.*?)(?<id>.{0,6})$", ,"${id}", ,))
Exemple:
- Valeurs d’entrée : [employeeId] = « 789 »
-
Sortie de l’expression :
05000789
Conversion de cas de texte
Scénario 1 : Vous devez convertir des noms de tous les majuscules en casse appropriée (case de titre).
Attribut cible : sn
Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64)))
Exemple:
- Valeurs d’entrée : [lastName] = « JOHNSON »
-
Sortie de l’expression :
Johnson
Scénario 2 : Vous souhaitez créer un nom complet avec une mise en forme appropriée de la casse.
Attribut cible : displayName
Join(", ", Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64))), Join("",Mid([firstName],1,1),ToLower(Mid([firstName],2,64))))
Exemple:
- Valeurs d’entrée : [lastName] = « SMITH », [firstName] = « JOHN »
-
Sortie de l’expression :
Smith, John
Scénario 3 : Vous devez gérer les noms par des espaces en remplaçant les espaces par des points.
Attribut cible : givenName
Replace([firstName]," ", , ,".", , )
Exemple:
- Valeurs d’entrée : [firstName] = « Mary Ann »
-
Sortie de l’expression :
Mary.Ann
Génération d’adresses e-mail
Génération de messagerie de base
Scénario 1 : Vous souhaitez générer des adresses e-mail à l’aide du prénom et du nom avec des domaines spécifiques à l’entreprise.
Attribut cible : courrier électronique
SelectUniqueValue(
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")
),
Switch([company],
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com"),
"Contoso", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com"),
"Fabrikam", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "fabrikam.com"),
"Woodgrove", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), Mid([middleName],1,1), [lastName]))), "woodgrove.com")
)
)
Exemple:
- Valeurs d’entrée : [company] = « Contoso », [firstName] = « John », [lastName] = « Smith », [middleName] = « Michael »
-
Sortie de l’expression :
john.smith@contoso.com(oujohn.m.smith@contoso.comsi la première option est prise)
Génération d’e-mail basée sur un groupe d’employés
Scénario 1 : Vous souhaitez générer différents formats de courrier en fonction de la classification des employés (permanente ou temporaire).
Attribut cible : userPrincipalName
StripSpaces(NormalizeDiacritics(Switch([custom06],
Join("", [firstName], ".", [lastName], "@ltts.com"),
"Temporary", Join("", [firstName], ".", [lastName], "_ext@ltts.com"),
"External", Join("", [firstName], ".", [lastName], "_ext@ltts.com"),
"Permanent", Join("", [firstName], ".", [lastName], "@ltts.com")
)))
Exemple:
- Valeurs d’entrée : [custom06] = « Temporary », [firstName] = « Sarah », [lastName] = « Wilson »
-
Sortie de l’expression :
sarah.wilson_ext@ltts.com
Validation du domaine d’entreprise
Scénario 1 : Vous souhaitez uniquement transmettre des adresses e-mail appartenant à un domaine d’entreprise spécifique.
Attribut cible : courrier électronique
IgnoreFlowIfNullOrEmpty(IIF(InStr([emailAddress],"@contoso.com")=0,"",[emailAddress]))
Exemple:
- Valeurs d’entrée : [emailAddress] = « john.doe@contoso.com »
-
Sortie de l’expression :
john.doe@contoso.com - Autre entrée : [emailAddress] = « john.doe@external.com »
- Autre sortie : (vide - ignoré)
Conservation des e-mails existante
Scénario 1 : Vous souhaitez utiliser l’e-mail existant de SuccessFactors pour certaines divisions, mais en générer de nouveaux pour d’autres.
Attribut cible : userPrincipalName
SelectUniqueValue(
Switch([divisionId],
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
"8900", [email]
),
Join("1@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
Join("2@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")
)
Exemple:
- Valeurs d’entrée : [divisionId] = « 8900 », [email] = « existing.user@company.com », [firstName] = « Mike », [lastName] = « Brown »
-
Sortie de l’expression :
existing.user@company.com - Entrée alternative : [divisionId] = « 1200 », [firstName] = « Mike », [lastName] = « Brown »
-
Autre sortie :
mike.brown@contoso.com
Logique de gestion des comptes
État du compte de base
Scénario 1 : Vous souhaitez déterminer si un compte doit être désactivé en fonction de l’état de l’emploi.
Attribut cible : accountDisabled
Switch([emplStatus], "False", "741", "False", "749", "True", "746", "True")
Exemple:
- Valeurs d’entrée : [emplStatus] = « 741 »
-
Sortie de l’expression :
False(compte activé) - Entrée alternative : [emplStatus] = « 746 »
-
Autre sortie :
True(compte désactivé)
Masquer dans la logique des listes d’adresses
Scénario 1 : Vous devez définir l’attribut msExchHideFromAddressLists en fonction des dates de début et de fin.
Attribut cible : msExchHideFromAddressLists
IIF(DateDiff("d", CDate(IIF(IsPresent([startDate]), [startDate], DateAdd("d", "10", Now()))), Now()) >= -1, IIF(DateDiff("d", Now(), CDate(IIF(IsPresent([endDate]), [endDate], DateAdd("d", "1", Now())))) >= 0, "FALSE", "TRUE"), "TRUE")
Exemple:
- Valeurs d’entrée : [startDate] = « 2025-01-15 », [endDate] = « 2025-12-31 » (date actuelle : 2025-07-30)
-
Sortie de l’expression :
FALSE(non masquée dans les listes d’adresses) - Entrée alternative : [startDate] = « 2025-01-15 », [endDate] = « 2025-06-30 »
-
Autre sortie :
TRUE(masquée dans les listes d’adresses)
Logique d’état d’employé complexe
Scénario 1 : Vous avez une exigence complexe pour désactiver les comptes en fonction des champs personnalisés et des dates d’embauche.
Attribut cible : accountEnabled
Switch([empNavCustomString3], "True",
"62220", Switch([cust_hiredate],
IIF(DateDiff("d", CDate([cust_hiredate]), Now()) = 3,
Switch([cust_customDate67],
IIF(DateDiff("d", CDate([cust_customDate67]), Now())=0, "False", "True"),
"", "False"
), "True"
),
"", "True"
))
Exemple:
- Valeurs d’entrée : [empNavCustomString3] = « 62220 », [cust_hiredate] = « 2025-07-27 », [cust_customDate67] = « 2025-07-30 » (date actuelle : 2025-07-30)
-
Sortie de l’expression :
False(compte activé) - Autre entrée : [empNavCustomString3] = « 62220 », [cust_hiredate] = « 2025-07-27 », [cust_customDate67] = « 2025-07-29 »
-
Autre sortie :
True(compte désactivé)
Fonctions de date et expiration du compte
Expiration du compte de base
Scénario 1 : Vous souhaitez définir l’expiration du compte en fonction de la date de fin de SuccessFactors.
Attribut cible : accountExpires
Switch([endDate],
NumFromDate(Join("", FormatDateTime([endDate], "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-05:00")),
"", "9223372036854775807"
)
Exemple:
- Valeurs d’entrée : [endDate] = « 12/31/2025 12:00:00 AM »
-
Sortie de l’expression :
133835135990000000(représentation numérique de 2025-12-31 23:59:59-05:00) - Autre entrée : [endDate] = « » (vide)
-
Autre sortie :
9223372036854775807(jamais expire)
Expiration basée sur le type d’emploi
Scénario 1 : Vous devez définir différentes règles d’expiration de compte en fonction du type d’emploi (permanent ou entrepreneur).
Attribut cible : accountExpires
Switch([employmentType],
NumFromDate(Join("",FormatDateTime([endDate], ,"M/d/yyyy hh:mm:ss tt","yyyy-MM-dd")," 23:59:59-05:00")),
"PM", NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 60, CDate([DOB])), ,"M/d/yyyy hh:mm:ss tt","yyyy-MM-dd")," 23:59:59-05:00")),
"CON", NumFromDate(Join("",FormatDateTime([endDate], ,"M/d/yyyy hh:mm:ss tt","yyyy-MM-dd")," 23:59:59-05:00"))
)
Exemple:
- Valeurs d’entrée : [employmentType] = « PM », [DOB] = « 1/15/1990 12:00:00 AM »
-
Sortie de l’expression :
158488415990000000(représentation numérique de 2050-01-15 23:59:59-05:00, 60 ans après la naissance) - Entrée alternative : [employmentType] = « CON », [endDate] = « 12/31/2025 12:00:00 AM »
-
Autre sortie :
133835135990000000(représentation numérique de 2025-12-31 23:59:59-05:00)
Expiration du compte basé sur la raison de l’événement
Scénario 1 : Vous souhaitez définir l’expiration du compte en fonction des événements d’arrêt spécifiques et des dates de départ.
Attribut cible : accountExpires
Switch([event],
IIF(IsPresent([latestTerminationDate]), NumFromDate(Join("", FormatDateTime([latestTerminationDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00")), "9223372036854775807"),
"SEVUNSATP", NumFromDate(Join("", FormatDateTime([severanceStartDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00")),
"SEVPOSELIM", NumFromDate(Join("", FormatDateTime([severanceStartDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00")),
"POSELIM", NumFromDate(Join("", FormatDateTime([severanceStartDate], , "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-08:00"))
)
Exemple:
- Valeurs d’entrée : [event] = « SEVUNSATP », [severanceStartDate] = « 8/15/2025 12:00:00 AM »
-
Sortie de l’expression :
133877247990000000(représentation numérique de 2025-08-15 23:59:59-08:00) - Autre entrée : [event] = « REGULAR », [latestTerminationDate] = « 9/30/2025 12:00:00 AM »
-
Autre sortie :
133886207990000000(représentation numérique de 2025-09-30 23:59:59-08:00)
Gestion des formats de date
Scénario 1 : Vous devez gérer des dates non valides telles que « 12/31/9999 » qui provoquent des erreurs dans NumFromDate.
Attribut cible : accountExpires
Switch([endDate],
NumFromDate(Join("", FormatDateTime([endDate], "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), "T23:59:59-04:00")),
"12/31/9999 12:00:00 AM", NumFromDate("2099-12-31T23:59:59-04:00")
)
Exemple:
- Valeurs d’entrée : [endDate] = « 12/31/9999 12:00:00 AM »
-
Sortie de l’expression :
441481535990000000(représentation numérique de 2099-12-31T23:59:59-04:00) - Autre entrée : [endDate] = « 8/15/2025 12:00:00 AM »
-
Autre sortie :
133877283990000000(représentation numérique de 2025-08-15T23:59:59-04:00)
Affectation d’unité d’organisation (UO)
Affectation d’unité d’organisation basée sur le service
Scénario 1 : Vous souhaitez placer des utilisateurs dans différentes unités d’organisation en fonction de leur service.
Attribut cible : parentDistinguishedName
Switch([department], "OU=SuccessFactors,DC=contoso,DC=com",
"Engineering SG", "OU=Engineering,OU=SuccessFactors,DC=contoso,DC=com",
"Shared Services", "OU=Shared Services,OU=SuccessFactors,DC=contoso,DC=com",
"Retail - Finance", "OU=Retail Finance,OU=SuccessFactors,DC=contoso,DC=com",
"Information Technology BR", "OU=Information Technology,OU=SuccessFactors,DC=contoso,DC=com",
"Development", "OU=Development,OU=SuccessFactors,DC=contoso,DC=com"
)
Exemple:
- Valeurs d’entrée : [department] = « Engineering SG »
-
Sortie de l’expression :
OU=Engineering,OU=SuccessFactors,DC=contoso,DC=com - Autre entrée : [department] = « Marketing »
-
Autre sortie :
OU=SuccessFactors,DC=contoso,DC=com(par défaut)
Affectation d’unité d’organisation basée sur l’état de l’emploi
Scénario 1 : Vous devez affecter des utilisateurs à différentes unités d’organisation en fonction de leur statut d’emploi et de leur emplacement.
Attribut cible : parentDistinguishedName
Join("",
Switch([emplStatus], "OU=SFProvisoinngUsers",
"741", Switch([empJobNavCustomString13],
"OU=SFProvisoinngUsers",
"LOC1016", "OU=Mysore",
"LOC1019", "OU=Baroda",
"LOC1015", Switch([departmentId],
"OU=Bangalore",
"DU1026","OU=IT,OU=Bangalore",
"DU1025","OU=IT,OU=Bangalore"
)
),
"749", Switch([empJobNavCustomString13],
"OU=O365-NoSYNC,OU=SFProvisoinngUsers",
"LOC1016", "OU=O365-NoSYNC,OU=Mysore",
"LOC1019", "OU=O365-NoSYNC,OU=Baroda",
"LOC1015", "OU=O365-NoSYNC,OU=Bangalore"
)
),
",DC=contoso,DC=com")
Exemple:
- Valeurs d’entrée : [emplStatus] = « 741 », [empJobNavCustomString13] = « LOC1015 », [departmentId] = « DU1026 »
-
Sortie de l’expression :
OU=IT,OU=Bangalore,DC=contoso,DC=com - Autre entrée : [emplStatus] = « 749 », [empJobNavCustomString13] = « LOC1016 »
-
Autre sortie :
OU=O365-NoSYNC,OU=Mysore,DC=contoso,DC=com - Autre entrée : [emplStatus] = « 741 », [empJobNavCustomString13] = « LOC9999 » (non défini)
-
Autre sortie :
OU=SFProvisoinngUsers,DC=contoso,DC=com(par défaut)
Affectation d’unité d’organisation basée sur le pays
Scénario 1 : Vous souhaitez placer des utilisateurs dans différents unités d’organisation en fonction de leur pays avec une unité d’organisation désactivée pour les utilisateurs inactifs.
Attribut cible : parentDistinguishedName
Switch([activeEmploymentsCount],
Switch([country], "OU=Accounts,DC=corp,DC=contoso,DC=com",
"Mexico", "OU=Mexico,OU=Accounts,DC=corp,DC=contoso,DC=com",
"Sweden", "OU=Sweden,OU=Accounts,DC=corp,DC=contoso,DC=com",
"Colombia", "OU=Internal Accounts,OU=Colombia,OU=Accounts,DC=corp,DC=contoso,DC=com",
"Brazil", "OU=Internal Accounts,OU=Brazil,OU=Accounts,DC=corp,DC=contoso,DC=com"
),
"0", "OU=DisabledAccounts,OU=Accounts,DC=corp,DC=contoso,DC=com"
)
Exemple:
- Valeurs d’entrée : [activeEmploymentsCount] = « 1 », [country] = « Mexico »
-
Sortie de l’expression :
OU=Mexico,OU=Accounts,DC=corp,DC=contoso,DC=com - Autre entrée : [activeEmploymentsCount] = « 0 », [country] = « Suède »
-
Autre sortie :
OU=DisabledAccounts,OU=Accounts,DC=corp,DC=contoso,DC=com(les utilisateurs désactivés accèdent à une unité d’organisation spéciale, quel que soit le pays) - Autre entrée : [activeEmploymentsCount] = « 1 », [country] = « Allemagne »
-
Autre sortie :
OU=Accounts,DC=corp,DC=contoso,DC=com(unité d’organisation par défaut pour les pays non spécifiquement définis)
Traitement des noms et noms d’affichage
Génération de nom commun (CN)
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(" ", [firstName], [lastName])),
NormalizeDiacritics(Join(" ", [firstName], Mid([middleName],1,1), [lastName])),
NormalizeDiacritics(Join(" ", [firstName], [middleName], [lastName]))
)
Exemple:
- Valeurs d’entrée : [firstName] = « José », [lastName] = « García », [middleName] = « 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)
Nom complet avec noms préférés
Scénario 1 : Vous devez créer un nom complet qui utilise le nom préféré lorsqu’il est disponible, sinon revient au prénom.
Attribut cible : displayName
Join(", ", Join("", Mid([lastName], 1, 1), ToLower(Mid([lastName], 2, 64), )), Join("", Mid(Coalesce([preferredName], [firstName]), 1, 1), ToLower(Mid(Coalesce([preferredName], [firstName]), 2, 64), )))
Exemple:
- Valeurs d’entrée : [lastName] = « JOHNSON », [preferredName] = « Mike », [firstName] = « Michael »
-
Sortie de l’expression :
Johnson, Mike - Entrée alternative : [lastName] = « SMITH », [preferredName] = « », [firstName] = « Robert »
-
Autre sortie :
Smith, Robert
Nom complet avec suffixes numériques
Scénario 1 : Vous souhaitez générer des noms d’affichage uniques avec des suffixes numériques pour les doublons.
Attribut cible : displayName
SelectUniqueValue(
Join("", NormalizeDiacritics(Join("", [lastName], ", ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName]))),
Join("", NormalizeDiacritics(Join("", [lastName], "2, ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName]))),
Join("", NormalizeDiacritics(Join("", [lastName], "3, ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName]))),
Join("", NormalizeDiacritics(Join("", [lastName], "4, ")), NormalizeDiacritics(Switch([preferredName], [preferredName], "", [firstName])))
)
Exemple:
- Valeurs d’entrée : [lastName] = « García », [preferredName] = « Mike », [firstName] = « Michael »
-
Sortie de l’expression :
Garcia, Mike(ouGarcia2, Mikesi la première option est prise, etc.) - Autre entrée : [lastName] = « Smith », [preferredName] = « », [firstName] = « John »
-
Autre sortie :
Smith, John(ouSmith2, Johnsi la première option est prise, etc.)
Génération SamAccountName
Génération samAccountName de base
Scénario 1 : Vous souhaitez créer un samAccountName à l’aide du prénom initial et du nom avec une réinitialisation appropriée des caractères.
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] = « José », [lastName] = « García-López »
-
Sortie de l’expression :
jgarcialopez(oujgarcialopez1si la première option est prise, oujgarcialopez2si les deux premières sont prises)
SamAccountName avec longueur de prénom variable
Scénario 1 : Vous souhaitez gérer les doublons en augmentant le nombre de caractères du prénom.
Attribut cible : sAMAccountName
SelectUniqueValue(
Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,1), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , ),
Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,2), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , ),
Replace(Mid(Replace(NormalizeDiacritics(StripSpaces(Join("", Mid([firstName],1,3), [lastName]))), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , )
)
Exemple:
- Valeurs d’entrée : [firstName] = « Christopher », [lastName] = « Anderson »
-
Sortie de l’expression :
canderson(ouchandersonsi la première option est prise, ouchrandersonsi les deux premières sont prises) - Alternative Input : [firstName] = « María », [lastName] = « Rodríguez-Santos »
-
Autre sortie :
mrodriguezsantos(oumarodriguezsantossi la première option est prise, oumarrodriguezsantossi les deux premières sont prises)
SamAccountName à partir d’un nom d’utilisateur externe
Scénario 1 : Vous souhaitez extraire la partie nom d’utilisateur d’un nom d’utilisateur externe de style e-mail.
Attribut cible : sAMAccountName
Replace(Mid(Replace(Replace([username],,"(?<id>.*)@(?<domain>.*)",,"${id}",,), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , )
Exemple:
- Valeurs d’entrée : [username] = « john.smith@external.com »
-
Sortie de l’expression :
johnsmith
Configuration de ProxyAddresses
Configuration de proxyAddresses de base
Scénario 1 : Vous souhaitez définir plusieurs adresses proxy, notamment les adresses SMTP primaires et secondaires.
Attribut cible : proxyAddresses
Split(
Join(",",
Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "contoso.mail.onmicrosoft.com")),
Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "contoso.com")),
Append("SMTP:", Join("@", Join(".", StripSpaces([firstName]), StripSpaces([lastName])), "contoso.com"))
),
","
)
Exemple:
- Valeurs d’entrée : [personIdExternal] = « 12345 », [firstName] = « John », [lastName] = « Smith »
-
Sortie de l’expression :
["smtp:A12345@contoso.mail.onmicrosoft.com", "smtp:A12345@contoso.com", "SMTP:John.Smith@contoso.com"]
ProxyAddresses basé sur la division
Scénario 1 : Vous avez besoin de différentes configurations d’adresses proxy en fonction de la division des employés.
Attribut cible : proxyAddresses
Split(
Switch([divisionId],
Join(",",
Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "woodgrove.mail.onmicrosoft.com")),
Append("smtp:", Join("@", NormalizeDiacritics(StripSpaces(Join("", "A", [personIdExternal]))), "woodgrove.com")),
Append("SMTP:", Join("@", Join(".", StripSpaces([firstName]), StripSpaces([lastName])), "woodgrove.com"))
),
"EXEC", Join(",",
Append("smtp:", Join("@", Join(".", StripSpaces([firstName]), StripSpaces([lastName])), "contoso.com")),
Append("SMTP:", [email])
)
),
","
)
Exemple:
- Valeurs d’entrée : [divisionId] = « STANDARD », [personIdExternal] = « 67890 », [firstName] = « Sarah », [lastName] = « Johnson »
-
Sortie de l’expression :
["smtp:A67890@woodgrove.mail.onmicrosoft.com", "smtp:A67890@woodgrove.com", "SMTP:Sarah.Johnson@woodgrove.com"] - Entrée alternative : [divisionId] = « EXEC », [firstName] = « Michael », [lastName] = « Brown », [email] = « mbrown@fabrikam.com »
-
Autre sortie :
["smtp:Michael.Brown@contoso.com", "SMTP:mbrown@fabrikam.com"]
ProxyAddresses spécifiques à l’entreprise
Scénario 1 : Vous souhaitez générer des adresses proxy en fonction de l’affiliation de l’entreprise.
Attribut cible : proxyAddresses
SelectUniqueValue (
Switch([company],
Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
"NGC", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
"CNG", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
"National Energy", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "fabrikam.com"))
),
Switch([company],
Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com")),
"NGC", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com")),
"CNG", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], Mid([middleName],1,1), [lastName]))), "contoso.com")),
"National Energy", Append ("SMTP:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), Mid([middleName],1,1), [lastName]))), "fabrikam.com"))
)
)
Exemple:
- Valeurs d’entrée : [company] = « NGC », [firstName] = « Trinidad », [lastName] = « Williams », [middleName] = « James »
-
Sortie de l’expression :
SMTP:trinidad.williams@contoso.com(ouSMTP:trinidad.j.williams@contoso.comsi la première option est prise) - Alternative Input : [company] = « National Energy », [firstName] = « Rebecca », [lastName] = « Thompson », [middleName] = « Marie »
-
Autre sortie :
SMTP:r.thompson@fabrikam.com(ouSMTP:r.m.thompson@fabrikam.comsi la première option est prise) - Alternative Input : [company] = « Other Company », [firstName] = « David », [lastName] = « Jones », [middleName] = « Paul »
-
Autre sortie :
SMTP:david.jones@contoso.com(domaine par défaut ouSMTP:david.p.jones@contoso.comsi la première option est prise)
Traitement des numéros de téléphone
Extraction de numéros de téléphone de base
Scénario 1 : Vous souhaitez extraire la partie numéro de téléphone sans code de pays.
Attribut cible : telephoneNumber
Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Exemple:
- Valeurs d’entrée : [mobile] = « +1 (555) 123-4567 »
-
Sortie de l’expression :
5551234567
Scénario 2 : Vous devez extraire uniquement le code du pays à partir d’un numéro de téléphone.
Attribut cible : c
Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), ,"[()\\s-]+", ,"", , )
Exemple:
- Valeurs d’entrée : [mobile] = « +44 20 7946 0958 »
-
Sortie de l’expression :
44
Numéros de téléphone par défaut
Scénario 1 : Vous souhaitez fournir des numéros de téléphone par défaut lorsque le champ est vide.
Attribut cible : telephoneNumber
IIF(IsNullOrEmpty([telephoneNumber]),"000-000-0000",[telephoneNumber])
Switch([mobile],[mobile],"","000-000-0000")
Exemple:
- Valeurs d’entrée : [telephoneNumber] = « »
-
Sortie de l’expression :
000-000-0000 - Entrée alternative : [mobile] = « 555-123-4567 »
-
Autre sortie :
555-123-4567
Logique du téléphone principal
Scénario 1 : Vous devez déterminer quel numéro de téléphone doit être marqué comme principal.
Attribut cible : extensionAttribute2
Switch(Join("+",Switch([businessPhoneIsPrimary],[businessPhoneIsPrimary],"","other"),Switch([cellPhoneIsPrimary],[cellPhoneIsPrimary],"","other")), "no primary phone",
"false+false", "no primary phone",
"true+false", "business phone is primary",
"false+true", "cell phone is primary",
"true+true", "business phone is primary, cell phone is primary",
"other+true", "cell phone is primary",
"other+false", "no primary phone",
"true+other", "business phone is primary",
"false+other", "no primary phone")
Exemple:
- Valeurs d’entrée : [businessPhoneIsPrimary] = « true », [cellPhoneIsPrimary] = « false »
-
Sortie de l’expression :
business phone is primary - Autre entrée : [businessPhoneIsPrimary] = « false », [cellPhoneIsPrimary] = « true »
-
Autre sortie :
cell phone is primary - Autre entrée : [businessPhoneIsPrimary] = « », [cellPhoneIsPrimary] = « true »
-
Autre sortie :
cell phone is primary
Logique basée sur le pays et l’emplacement
Mappage de code de pays
Scénario 1 : Vous souhaitez mapper les noms de pays aux codes de pays ISO.
Attribut cible : c
Switch([country], ,
"Trinidad and Tobago", "TT",
"Barbados", "BB"
)
Exemple:
- Valeurs d’entrée : [pays] = « Trinité-et-Tobago »
-
Sortie de l’expression :
TT
Scénario 2 : Vous devez mapper des pays à des codes de pays numériques.
Attribut cible : countryCode
Switch([country], ,
"Trinidad and Tobago", "780",
"Barbados", "52"
)
Exemple:
- Valeurs d’entrée : [pays] = « Barbade »
-
Sortie de l’expression :
52
Domaines de messagerie basés sur l’emplacement
Scénario 1 : Vous souhaitez affecter différents domaines de messagerie en fonction de l’emplacement géographique.
Attribut cible : courrier électronique
SelectUniqueValue (
Switch([country],
Join("@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
"India", Join("@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
"Netherlands", Join("@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "contoso.com")
),
Switch([country],
Join("1@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
"India", Join("1@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "fabrikam.com"),
"Netherlands", Join("1@", NormalizeDiacritics(StripSpaces(Join("", [firstName], [lastName]))), "contoso.com")
)
)
Exemple:
- Valeurs d’entrée : [country] = « India », [firstName] = « Raj », [lastName] = « Patel »
-
Sortie de l’expression :
raj.patel@fabrikam.com(ou1raj.patel@fabrikam.comsi la première option est prise) - Autre entrée : [country] = « Pays-Bas », [firstName] = « Jan », [lastName] = « van der Berg »
-
Autre sortie :
jan.vanderberg@contoso.com(ou1jan.vanderberg@contoso.comsi la première option est prise) - Alternative Input : [country] = « Germany », [firstName] = « Klaus », [lastName] = « Müller »
-
Autre sortie :
klaus.muller@fabrikam.com(domaine par défaut ou1klaus.muller@fabrikam.comsi la première option est prise)
Classification des employés et travailleurs contingents
Classification des types d’emploi
Scénario 1 : Vous souhaitez mapper des codes de type d’employé à des descriptions lisibles.
Attribut cible : extensionAttribute3
Switch([employeeType],"Default-value",
"31202","Employee",
"31230","Contractor"
)
Exemple:
- Valeurs d’entrée : [employeeType] = « 31202 »
-
Sortie de l’expression :
Employee - Autre entrée : [employeeType] = « 99999 »
-
Autre sortie :
Default-value
Identification des travailleurs contingents
Scénario 1 : Vous devez identifier et gérer les travailleurs contingents différemment.
Attribut cible : extensionAttribute4
Switch([isContingentWorker], "N/A", "True", "Contractor", "False", "Employee")
Exemple:
- Valeurs d’entrée : [isContingentWorker] = « True »
-
Sortie de l’expression :
Contractor
Mappage de titre personnel
Scénario 1 : Vous souhaitez mapper les codes de titre personnels aux titres appropriés.
IgnoreFlowIfNullOrEmpty(Switch([personalTitle], "", "4443", "Dr.", "4444", "Prof.", "4445", "Prof. Dr."))
Exemple:
- Valeurs d’entrée : [personalTitle] = « 4443 »
-
Sortie de l’expression :
Dr. - Entrée alternative : [personalTitle] = « »
- Autre sortie : (vide - ignoré)
Scénarios avancés
Gestion des services conditionnels
Scénario 1 : Vous souhaitez utiliser le service d’affectation globale lorsqu’il est disponible ; sinon, revenez au service normal.
Attribut cible : service
Switch([globalAssignmentDepartment],[globalAssignmentDepartment],
"",[department])
Exemple:
- Valeurs d’entrée : [globalAssignmentDepartment] = « Global IT », [department] = « Local IT »
-
Sortie de l’expression :
Global IT - Autre entrée : [globalAssignmentDepartment] = « », [department] = « Sales »
-
Autre sortie :
Sales
Gestion réversible des e-mails de suppression réversible
Scénario 1 : Vous devez modifier les adresses e-mail lorsque les utilisateurs sont supprimés de manière réversible pour les scénarios d’écriture différée.
Attribut cible : courrier électronique
IIF([IsSoftDeleted]="True", Join("_",FormatDateTime(Now(), , "M/d/yyyy h:mm:ss tt", "yyyy-MM-dd"),[mail]), [mail])
Exemple:
- Valeurs d’entrée : [IsSoftDeleted] = « True », [mail] = « john.smith@company.com » (date actuelle : 2025-07-30)
-
Sortie de l’expression :
2025-07-30_john.smith@company.com - Entrée alternative : [IsSoftDeleted] = « False », [mail] = « jane.doe@company.com »
-
Autre sortie :
jane.doe@company.com
Affectation d’unité d’organisation complexe avec une logique d’arrêt
Scénario 1 : Vous souhaitez déplacer des utilisateurs arrêtés vers une unité d’organisation spéciale après un nombre spécifique de jours.
Attribut cible : parentDistinguishedName
IIF(DateDiff("d", Now(), CDate(Switch([latestTerminationDate], [latestTerminationDate], "", "9999-01-01"))) <= -14,
"OU=DELETED,DC=company,DC=com",
Switch([department], "OU=Default,DC=company,DC=com",
"Engineering", "OU=Engineering,DC=company,DC=com",
"Finance", "OU=Finance,DC=company,DC=com"
)
)
Exemple:
- Valeurs d’entrée : [latestTerminationDate] = « 2025-07-10 », [department] = « Engineering » (date actuelle : 2025-07-30)
-
Sortie de l’expression :
OU=DELETED,DC=company,DC=com(terminé il y a plus de 14 jours) - Entrée alternative : [latestTerminationDate] = « 2025-07-25 », [department] = « Finance »
-
Autre sortie :
OU=Finance,DC=company,DC=com(terminée il y a moins de 14 jours)
Génération UPN multi-entreprise avec classe d’employés
Scénario 1 : Vous devez générer des UPN en fonction des informations de classe d’entreprise et d’employé.
Attribut cible : userPrincipalName
SelectUniqueValue (
Switch([employeeClass],
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
"1916", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
"1915", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "fabrikam.com"),
"1917", Join("@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "woodgrove.com")
),
Switch([employeeClass],
Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
"1916", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"),
"1915", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "fabrikam.com"),
"1917", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", Mid([firstName],1,1), [lastName]))), "woodgrove.com")
)
)
Exemple:
- Valeurs d’entrée : [employeeClass] = « 1915 », [firstName] = « Anna », [lastName] = « Johnson »
-
Sortie de l’expression :
anna.johnson@fabrikam.com(ou01anna.johnson@fabrikam.comsi la première option est prise)
Apostrophe et gestion spéciale des caractères
Scénario 1 : Vous devez supprimer les apostrophes et les tirets des adresses e-mail pour la compatibilité d’Azure AD Connect.
Attribut cible : courrier électronique
SelectUniqueValue(
Switch ([divisionId],
Replace(Join("@", NormalizeDiacritics(StripSpaces(Join(".", Coalesce([preferredName], [firstName]), [lastName]))), "contoso.com"), , "['-]+", , "", , ),
"8900", [email]
),
Replace(Join("1@", NormalizeDiacritics(StripSpaces(Join(".", Coalesce([preferredName], [firstName]), [lastName]))), "contoso.com"), , "['-]+", , "", , ),
Replace(Join("2@", NormalizeDiacritics(StripSpaces(Join(".", Coalesce([preferredName], [firstName]), [lastName]))), "contoso.com"), , "['-]+", , "", , )
)
Exemple:
- Valeurs d’entrée : [divisionId] = « 1200 », [preferredName] = « Mary-Ann », [firstName] = « Mary », [lastName] = « O’Connor »
-
Sortie de l’expression :
maryann.oconnor@contoso.com(apostrophes et tirets supprimés) - Entrée alternative : [divisionId] = « 8900 », [email] = « existing.user@company.com »
-
Autre sortie :
existing.user@company.com
Génération d’adresses SIP
Scénario 1 : Vous souhaitez générer des adresses SIP pour l’intégration de Skype Entreprise/Teams.
Attribut cible : proxyAddresses
SelectUniqueValue(
Append("sip:", Join("@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
Append("sip:", Join("01@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com")),
Append("sip:", Join("02@", NormalizeDiacritics(StripSpaces(Join(".", [firstName], [lastName]))), "contoso.com"))
)
Exemple:
- Valeurs d’entrée : [firstName] = « David », [lastName] = « Wilson »
-
Sortie de l’expression :
sip:david.wilson@contoso.com(ousip:01david.wilson@contoso.comsi la première option est prise) - Alternative Input : [firstName] = « María José », [lastName] = « González-Pérez »
-
Autre sortie :
sip:mariajose.gonzalezperez@contoso.com(ousip:01mariajose.gonzalezperez@contoso.comsi la première option est prise, ousip:02mariajose.gonzalezperez@contoso.comsi les deux premières sont prises)
Logique conditionnelle d’écriture différée
Scénario 1 : Vous souhaitez réécrire conditionnellement des adresses e-mail en fonction de critères de date spécifiques.
Attribut cible : mailNickname
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([extensionAttribute9])) <> 1, "", [mail]))
Exemple:
- Valeurs d’entrée : [extensionAttribute9] = « 2025-07-31 », [mail] = « user@company.com » (date actuelle : 2025-07-30)
- Sortie de l’expression : (vide - ignoré, car la différence de date est de 1 jour)
- Autre entrée : [extensionAttribute9] = « 2025-08-01 », [mail] = « user@company.com »
-
Autre sortie :
user@company.com
Scénario 2 : Vous devez gérer les attributs manquants dans les scénarios d’écriture différée.
Attribut cible : mailNickname
IgnoreFlowIfNullOrEmpty(IIF(IsPresent([extensionAttribute9]),IIF(DateDiff("d", Now(), CDate([extensionAttribute9])) <> 1, "", [mail]),"noemail@contoso.com"))
Exemple:
- Valeurs d’entrée : [extensionAttribute9] = « » (vide), [mail] = « user@company.com »
-
Sortie de l’expression :
noemail@contoso.com - Autre entrée : [extensionAttribute9] = « 2025-08-01 », [mail] = « user@company.com » (date actuelle : 2025-07-30)
-
Autre sortie :
user@company.com
Meilleures pratiques
Utilisez SelectUniqueValue pour tous les attributs qui nécessitent unicité (UPN, samAccountName, email).
Gérez les valeurs null et vides à l’aide de fonctions telles que
IsNullOrEmpty, ,IsPresentSwitchouCoalesce.Utilisez NormalizeDiacritics et StripSpaces lors du traitement des noms pour garantir la compatibilité entre les systèmes.
Validez les expressions JSONPath dans un testeur JSONPath avant d’implémenter en production.
Utilisez une mise en forme de date appropriée lors de l’utilisation des champs de date SuccessFactors pour éviter les erreurs de conversion.
Tenez compte des fuseaux horaires lors de l’utilisation des comparaisons de dates et de la logique d’expiration du compte.
Utilisez IgnoreFlowIfNullOrEmpty pour les flux d’attributs conditionnels et les scénarios d’écriture différée.
Testez soigneusement les instructions Switch complexes , car elles peuvent devenir difficiles à déboguer.
Documentez clairement la logique métier , en particulier pour les règles complexes d’état d’emploi et de gestion des comptes.
Utilisez soigneusement des modèles regex et validez-les dans des testeurs regex en ligne avant l’implémentation.