Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce una guida completa alle funzioni di mapping delle espressioni di uso comune durante la configurazione del provisioning utenti di Workday in Active Directory locale/Microsoft Entra ID. Queste funzioni consentono di trasformare e mappare i dati da Workday per creare attributi utente appropriati in Microsoft Entra ID.
Sommario
- Funzioni di manipolazione delle stringhe
- Generazione di indirizzi di posta elettronica
- Elaborazione dei numeri di telefono
- Logica di stato dell'account per Active Directory
- Logica di stato dell'account per Microsoft Entra ID
- Funzioni di data
- Assegnazione di unità organizzativa
- Generazione di ID casuali
- Elaborazione dei nomi
Funzioni di manipolazione delle stringhe
Operazioni di base su stringhe
Scenario 1: si vuole pulire un valore del numero di telefono proveniente da Workday rimuovendo spazi, parentesi quadre e trattini.
Attributo di destinazione: telephoneNumber, cellulare
Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )
Esempio:
- Valori di input: [PrimaryWorkTelephone] = "+1 (555) 123-4567"
-
Output dell'espressione:
+15551234567
Scenario 2: è necessario estrarre il cognome da un PreferredNameData campo contenente "FirstName LastName".
Attributo di destinazione: sn in Active Directory locale, surname in Microsoft Entra ID
Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)
Esempio:
- Valori di input: [PreferredNameData] = "John Smith"
-
Output dell'espressione:
Smith
Scenario 3: rimuovere gli zeri iniziali da un ID di lavoro prima di associarlo a un ID dipendente in Active Directory locale o a MICROSOFT Entra ID.
Attributo di destinazione: employeeId
Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)
Esempio:
- Valori di input: [WorkerID] = "00012345"
-
Output dell'espressione:
12345
Scenario 4: l'attributo HereditarySuffix contiene informazioni sul suffisso contrassegnate con il codice ISO del paese e si desidera estrarre solo le informazioni sul suffisso e aggiungerle al cognome.
Attributo di destinazione: sn in Active Directory locale, surname in Microsoft Entra ID
Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])
Esempio:
- Valori di input: [EreditarioSuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
-
Output dell'espressione:
Van der Hof
Conversione di maiuscole/minuscole
Scenario 1: è necessario convertire il testo in caso corretto, ma gestire correttamente gli apostrofi (ad esempio, "st john's hospital" dovrebbe diventare "St John's Hospital").
Attributo di destinazione: società
Replace(PCase("st john's hospital"),"'S", , ,"'s", , )
Esempio:
- Valori di input: testo statico "st john's hospital"
-
Output dell'espressione:
St John's Hospital
Scenario 2: si vuole creare un nome utente minuscolo dal nome e dal cognome.
Attributo di destinazione: mailNickname
ToLower(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))))
Esempio:
- Valori di input: [PreferredFirstName] = "José", [PreferredLastName] = "Garciaía-López"
-
Output dell'espressione:
jose.garcia-lopez
Logica di denominazione specifica del paese
Scenario 1: è necessario applicare convenzioni di denominazione diverse in base al paese dell'utente ,ad esempio "Last, First" per determinati paesi.
Attributo di destinazione: displayName, cn
Switch([CountryReferenceTwoLetter],
Join(" ", [PreferredFirstName], [PreferredLastName]),
"HU", Join(",", [PreferredLastName], [PreferredFirstName]),
"JP", Join(",", [PreferredLastName], [PreferredFirstName]),
"KR", Join(",", [PreferredLastName], [PreferredFirstName])
)
Esempio:
- Valori di input: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
-
Output dell'espressione:
Tanaka,Hiroshi(convenzione di denominazione giapponese) - Input alternativo: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
-
Output alternativo:
John Smith(convenzione di denominazione occidentale predefinita)
Generazione di indirizzi di posta elettronica
Generazione di posta elettronica di base
Scenario 1: si vuole costruire un indirizzo di posta elettronica aggiungendo nome e cognome, rimuovendo spazi e caratteri speciali e aggiungendo un dominio.
Attributo di destinazione: posta elettronica
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com")
Esempio:
- Valori di input: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
-
Output dell'espressione:
maria.josegonzalez@contoso.com
Scenario 2: è necessario gestire caratteri speciali come virgolette e virgole nei nomi durante la generazione di indirizzi di posta elettronica.
Attributo di destinazione: 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")
)
Esempio:
- Valori di input: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
-
Output dell'espressione:
maryann.oconnor@contoso.com(om.oconnor@contoso.comse viene eseguita la prima opzione oma.oconnor@contoso.comse vengono eseguite le prime due opzioni)
Domini di posta elettronica specifici della società
Scenario 1: sono presenti più aziende e devono generare indirizzi di posta elettronica con suffissi di dominio diversi in base all'azienda.
Attributo di destinazione: posta elettronica
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")
)
Esempio:
- Valori di input: [Company] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
-
Output dell'espressione:
john.smith@fabrikam.com - Input alternativo: [Company] = "Woodgrove", [FirstName] = "Sarah", [LastName] = "Johnson"
-
Output alternativo:
s.johnson@woodgrove.com
Configurazione di ProxyAddresses
Scenario 1: è necessario impostare più indirizzi proxy per Exchange, inclusi gli indirizzi SMTP primari e secondari.
Attributo di destinazione: 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"))
), ","
)
Esempio:
- Valori di input: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
-
Output dell'espressione:
["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]
Elaborazione dei numeri di telefono
Questi mapping di espressioni possono essere usati nell'applicazione writeback workday.
Analisi dei numeri di telefono internazionali
Scenario 1: hai numeri di telefono in formato internazionale (+1 737-626-8331) e devi estrarre solo il numero di telefono senza il codice paese.
Attributo di destinazione: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Esempio:
- Valori di input: [telephoneNumber] = "+1 737-626-8331"
-
Output dell'espressione:
7376268331
Scenario 2: è necessario estrarre il codice paese da un numero di telefono per determinare il paese a scopo di directory.
Attributo di destinazione: c
Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
"1", "USA",
"44", "GBR",
"49", "DEU"
)
Esempio:
- Valori di input: [telephoneNumber] = "+44 20 7946 0958"
-
Output dell'espressione:
GBR - Input alternativo: [telephoneNumber] = "+1 555-123-4567"
-
Output alternativo:
USA
Scenario 3: è necessario eseguire il writeback del numero di telefono generato e impostato da Microsoft Teams in MICROSOFT Entra ID (ad esempio +4926180001111). In questo numero di telefono non c'è spazio tra CountryCode e il numero di telefono effettivo. È possibile usare il meccanismo di analisi regex seguente per estrarre i codici paese rilevanti per l'organizzazione e usarlo per impostare Workday CountryCodeName.
Attributo di destinazione: 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")
Esempio:
- Valori di input: [telephoneNumber] = "+493012345678"
-
Output dell'espressione:
GER - Input alternativo: [telephoneNumber] = "+919876543210"
-
Output alternativo:
IND - Input alternativo: [telephoneNumber] = "+15551234567"
-
Output alternativo:
USA
Formattazione dei numeri di telefono per sistemi diversi
Scenario 1: è necessario elaborare numeri di telefono che includono estensioni (ad esempio, "+1 (206) 291-8163 x8125").
Attributo di destinazione: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Esempio:
- Valori di input: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
Output dell'espressione:
2062918163
Scenario 2: si vuole estrarre solo l'estensione da un numero di telefono.
Attributo di destinazione: extensionAttribute1
Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )
Esempio:
- Valori di input: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
Output dell'espressione:
8125
Logica di stato dell'account per Active Directory
Le espressioni in questa sezione sono applicabili all'attributo accountDisabled che fa parte di "Workday to on-premises Active Directory user provisioning app". Per impostare l'attributo accountEnabled che fa parte di "Workday su Microsoft Entra ID user provisioning app", vedere la sezione Logica di stato dell'account per Microsoft Entra ID.
Gestione dello stato dell'account di base
Scenario 1: si vuole disabilitare gli account Active Directory locali per gli utenti che non sono attivi in Workday.
Attributo di destinazione: accountDisabled
Switch([Active], , "1", "False", "0", "True")
Esempio:
- Valori di input: [Active] = "1"
-
Output dell'espressione:
False(account abilitato) - Input alternativo: [Active] = "0"
-
Output alternativo:
True(account disabilitato)
Elaborazione del rehire
Scenario 1: è necessario lo scenario 1: è necessario gestire gli scenari di rehire in cui gli account devono essere abilitati solo in o dopo la data di assunzione.
Attributo di destinazione: accountDisabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"),
"0", "True")
Esempio:
- Valori di input: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (data corrente: 2025-07-30)
-
Output dell'espressione:
True(account disabilitato fino alla data di assunzione) - Input alternativo: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Output alternativo:
False(account abilitato come data di assunzione superato)
Creazione dell'account pre-assunzione
Scenario 1: si vogliono creare account per assunzioni future, ma mantenerli disabilitati fino a 14 giorni prima della data di inizio.
Attributo di destinazione: accountDisabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")
Esempio:
- Valori di input: [Active] = "1", [StatusHireDate] = "2025-08-10" (data corrente: 2025-07-30)
-
Output dell'espressione:
False(l'account abilitato come data di assunzione è entro 14 giorni) - Input alternativo: [Active] = "1", [StatusHireDate] = "2025-09-15"
-
Output alternativo:
True(account disabilitato come data di assunzione è superiore a 14 giorni di distanza)
Gestione dei rescinds di assunzione
Scenario 1: è necessario gestire gli scenari di assunzione di recinto quando si imposta l'attributo accountDisabled . Si vuole implementare la logica:
- Se terminato = 1 in workday, accountDisabled = True
- Se Rescinded = 1 in workday, accountDisabled = True
- Se Attivo =1 nel giorno lavorativo,
- se
- HireDate è più di sette giorni in futuro, quindi accountDisabled = True (disabilitare l'account)
- HireDate è <= sette giorni in futuro, quindi accountDisabled = False (abilitare l'account)
- se
- Se Attivo = 0, accountDisabled = True
Attributo di destinazione: 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"
)
)
)
Esempio:
- Valori di input: [Terminato] = "1", [Active] = "1", [StatusHireDate] = "2025-08-15"
-
Output dell'espressione:
True(account disabilitato a causa della terminazione) - Input alternativo: [Terminato] = "0", [Rescinded] = "1", [Active] = "1"
-
Output alternativo:
True(account disabilitato a causa della disattivazione) - Input alternativo: [Terminato] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-15" (data corrente: 2025-07-30)
-
Output alternativo:
True(account disabilitato come data di assunzione è superiore a 7 giorni di distanza) - Input alternativo: [Terminato] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-05"
-
Output alternativo:
False(l'account abilitato come data di assunzione è entro 7 giorni)
Logica di stato dell'account per Microsoft Entra ID
Le espressioni in questa sezione sono applicabili all'attributo accountEnabled che fa parte di "Workday to Microsoft Entra ID user provisioning app". Per impostare l'attributo accountDisabled che fa parte di "Workday su app di provisioning utenti di Active Directory locale", vedere la sezione Logica di stato dell'account per Active Directory.
Gestione dello stato dell'account di base
Scenario 1: si vuole disabilitare gli account ID Entra di Microsoft per gli utenti che non sono attivi in Workday.
Attributo di destinazione: accountEnabled
Switch([Active], , "1", "True", "0", "False")
Esempio:
- Valori di input: [Active] = "1"
-
Output dell'espressione:
True(account abilitato) - Input alternativo: [Active] = "0"
-
Output alternativo:
False(account disabilitato)
Elaborazione del rehire
Scenario 1: è necessario gestire gli scenari di rehire in cui gli account devono essere abilitati solo in o dopo la data di assunzione.
Attributo di destinazione: accountEnabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"),
"0", "False")
Esempio:
- Valori di input: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (data corrente: 2025-07-30)
-
Output dell'espressione:
False(account disabilitato fino alla data di assunzione) - Input alternativo: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Output alternativo:
True(account abilitato come data di assunzione superato)
Creazione dell'account di pre-assunzione
Scenario 1: si vogliono creare account per assunzioni future, ma mantenerli disabilitati fino a 14 giorni prima della data di inizio.
Attributo di destinazione: accountEnabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")
Esempio:
- Valori di input: [Active] = "1", [StatusHireDate] = "2025-08-10" (data corrente: 2025-07-30)
-
Output dell'espressione:
True(l'account abilitato come data di assunzione è entro 14 giorni) - Input alternativo: [Active] = "1", [StatusHireDate] = "2025-09-15"
-
Output alternativo:
False(account disabilitato come data di assunzione è superiore a 14 giorni di distanza)
Funzioni di data
Formattazione e conversione della data
Scenario 1: è necessario convertire una data di fine del contratto Workday in formato Active Directory per l'attributo accountExpires, in modo che l'account scada alla data di fine del contratto.
Attributo di destinazione: accountExpires
NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))
Esempio:
- Valori di input: [StatusHireDate] = "2025-12-31"
-
Output dell'espressione:
133835135990000000(rappresentazione numerica di 2025-12-31T23:59:59-07:00)
Scenario 2: si vuole impostare una data di scadenza dell'account cinque anni dalla data di assunzione.
Attributo di destinazione: accountExpires
NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))
Esempio:
- Valori di input: [StatusHireDate] = "2025-01-15"
-
Output dell'espressione:
139418879990000000(rappresentazione numerica di 2030-01-15 23:59:59-05:00)
Logica basata su data condizionale
Scenario 1: si vogliono trasmettere informazioni sul reparto solo se il dipendente ha iniziato il lavoro (data di assunzione è passata).
Attributo di destinazione: reparto
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, [Department], IgnoreAttributeFlow)
Esempio:
- Valori di input: [StatusHireDate] = "2025-07-15", [Department] = "Engineering" (data corrente: 2025-07-30)
-
Output dell'espressione:
Engineering(data di assunzione superata) - Input alternativo: [StatusHireDate] = "2025-08-15", [Reparto] = "Marketing"
-
Output alternativo:
IgnoreAttributeFlow(la data di assunzione è in futuro)
Scenario 2: è necessario creare oggetti utente solo se la data di assunzione è compresa tra 14 giorni.
Attributo di destinazione: objectFilter
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)
Esempio:
- Valori di input: [StatusHireDate] = "2025-08-10" (data corrente: 2025-07-30)
-
Output dell'espressione:
False(creare un oggetto utente come data di assunzione entro 14 giorni) - Input alternativo: [StatusHireDate] = "2025-09-15"
-
Output alternativo:
IgnoreObjectFlow(non creare l'oggetto utente perché la data di assunzione è superiore a 14 giorni)
Assegnazione di unità organizzativa
Assegnazione di unità organizzative semplici
Scenario 1: si vuole posizionare gli utenti in unità organizzative diverse in base alla propria città.
Attributo di destinazione: 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"
)
Esempio:
- Valori di input: [City] = "Seattle"
-
Output dell'espressione:
OU=Seattle,OU=Users,DC=contoso,DC=com - Input alternativo: [City] = "Chicago"
-
Output alternativo:
OU=Default,OU=Users,DC=contoso,DC=com(impostazione predefinita per le città non specificate)
Struttura dell'unità organizzativa complessa
Scenario 1: è necessario creare una struttura organizzativa complessa basata su reparto, centro di costo e paese.
Attributo di destinazione: 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"
)
Esempio:
- Valori di input: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
-
Output dell'espressione:
OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com - Input alternativo: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
-
Output alternativo:
OU=Users,DC=contoso,DC=com(impostazione predefinita quando i valori non corrispondono)
Assegnazione dell'unità organizzativa dell'utente terminata
Scenario 1: si vuole spostare gli utenti terminati in un'unità organizzativa speciale alla data di chiusura.
Attributo di destinazione: 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"
)
)
Esempio:
- Valori di input: [StatusTerminationLastDayOfWork] = "2025-07-25", [City] = "Seattle" (data corrente: 2025-07-30)
-
Output dell'espressione:
OU=Leavers,OU=Users,DC=contoso,DC=com(spostato nell'unità organizzativa Leavers come data di terminazione è passata) - Input alternativo: [StatusTerminationLastDayOfWork] = "2025-08-15", [City] = "Dallas"
-
Output alternativo:
OU=Dallas,OU=Users,DC=contoso,DC=com(rimane nella normale unità organizzativa perché la data di terminazione è in futuro)
Generazione di ID casuali
Generazione casuale basata su GUID
Scenario 1: è necessario generare una stringa di 5 caratteri casuale che non contiene cifre.
Attributo di destinazione: 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", , )
)
Esempio:
- Valori di input: GUID generato convertito in Base64 (ad esempio, "mV8dXr...")
-
Output dell'espressione:
mVAdX(cifre sostituite con 'A' o con 'B'/'C' se viene eseguita la prima opzione)
Scenario 2: si vuole generare una stringa casuale che inizia con "D" seguita da 4 caratteri alfabetici.
Attributo di destinazione: 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}", ,))
)
Esempio:
- Valori di input: GUID generato convertito in Base64 contenente sequenza alfabetica "mVdX"
-
Output dell'espressione:
DMVDX(o diverso se viene eseguita la prima opzione)
Generazione di ID numerici
Scenario 1: è necessario generare un numero casuale a 4 cifre da un GUID.
Attributo di destinazione: 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}", ,)
)
Esempio:
- Valori di input: GUID generato come "a1b2c3d4-e5f6-7890-1234-567890abcdef"
-
Output dell'espressione:
D7890(oD1234,D5678e così via) a seconda della sequenza a 4 cifre corrispondente per prima.
Elaborazione dei nomi
Generazione di nomi visualizzati
Scenario 1: si vuole creare un nome visualizzato in formato "Last, First".
Attributo di destinazione: displayName
Join(", ", [PreferredLastName], [PreferredFirstName])
Esempio:
- Valori di input: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
-
Output dell'espressione:
Smith, John
Scenario 2: è necessario creare un nome visualizzato che includa l'ID iniziale intermedio e l'ID dipendente.
Attributo di destinazione: displayName
Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])
Esempio:
- Valori di input: [PreferredLastName] = "Johnson", [PreferredFirstName] = "Sarah", [PreferredMiddleName] = "Elizabeth", [WorkerID] = "12345"
-
Output dell'espressione:
Johnson,Sarah E-12345
Generazione di nomi comuni (CN) con univocità
Scenario 1: si vuole generare un nome comune univoco con opzioni di fallback per i duplicati.
Attributo di destinazione: cn
SelectUniqueValue(
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)
Esempio:
- Valori di input: [PreferredFirstName] = "José", [PreferredLastName] = "Garciaía", [PreferredMiddleName] = "Antonio"
-
Output dell'espressione:
Jose Garcia(oJose A Garciase viene eseguita la prima opzione oJose Antonio Garciase vengono eseguite le prime due opzioni)
Generazione di SamAccountName
Scenario 1: si vuole creare un samAccountName di 20 caratteri usando il nome iniziale e il cognome con suffissi numerici per i duplicati.
Attributo di destinazione: 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")
)
Esempio:
- Valori di input: [FirstName] = "María José", [LastName] = "González-López"
-
Output dell'espressione:
mgonzalezlopez(omgonzalezlopez1se viene eseguita la prima opzione omgonzalezlopez2se vengono eseguite le prime due opzioni)
Scenari avanzati
Nascondi dalla logica degli elenchi di indirizzi
Questa sezione descrive come impostare l'attributo msExchHideFromAddressListsbooleano . Usare tutte le maiuscole "TRUE" o "FALSE" per impostare l'attributo booleano. L'uso di qualsiasi altro valore genera un HybridSynchronizationActiveDirectoryInvalidParameter errore.
Scenario 1: si vuole impostare msExchHideFromAddressLists in base allo stato attivo dell'account dell'utente di Workday.
Attributo di destinazione: msExchHideFromAddressLists
Switch([Active], , "1", "FALSE", "0", "TRUE")
Esempio:
- Valori di input: [Active] = "0"
-
Output dell'espressione:
TRUE(nascondi dagli elenchi di indirizzi perché l'utente è inattivo in Workday) - Input alternativo: [Active] = "1"
-
Output alternativo:
FALSE(mostra negli elenchi di indirizzi perché l'utente è attivo in Workday)
Scenario 2: si vuole impostare msExchHideFromAddressLists in base alla data di assunzione del lavoratore. Mostra l'utente nell'elenco indirizzi di Exchange solo dopo la data di assunzione.
Attributo di destinazione: msExchHideFromAddressLists
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")
Esempio:
- Valori di input: [StatusHireDate] = "2025-07-31" (data corrente: 2025-07-30)
-
Output dell'espressione:
TRUE(nascondersi dagli elenchi di indirizzi come data di assunzione è in futuro) - Input alternativo: [StatusHireDate] = "2025-07-31" (data corrente: 2025-08-01)
-
Output alternativo:
FALSE(mostra negli elenchi indirizzi come data di assunzione è in passato)
Impostazione dell'attributo multivalore
Scenario 1: è necessario impostare più valori per l'attributo msExchPoliciesExcluded in Active Directory.
Attributo di destinazione: msExchPoliciesExcluded
Split(
Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
","
)
Esempio:
- Valori di input: valori GUID statici
-
Output dell'espressione:
["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]
Scenari di writeback
Scenario 1: si vuole scrivere il nome utente in Workday solo se la data di assunzione del dipendente è passata.
Attributo di destinazione: Nome utente
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))
Esempio:
- Valori di input: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com" (data corrente: 2025-07-30)
-
Output dell'espressione:
user@contoso.com(data di assunzione passata, nome utente writeback) - Input alternativo: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
- Output alternativo: (vuoto - ignorato, data di assunzione è in futuro)
Procedure consigliate
Usare sempre SelectUniqueValue per gli attributi che richiedono univocità( ad esempio UPN, samAccountName, posta elettronica).
Gestire valori Null e vuoti usando funzioni come
IsNullOrEmptyle istruzioni ,IsPresentoSwitch.Usare NormalizeDiacritics durante l'elaborazione dei nomi con caratteri speciali per garantire la compatibilità.
Testare accuratamente la logica della data perché diversi fusi orari e formati di data possono influire sui risultati.
Usare IgnoreFlowIfNullOrEmpty quando si desidera ignorare gli aggiornamenti degli attributi per i valori vuoti.
È consigliabile usare Switch anziché istruzioni IIF annidate per migliorare la leggibilità.
Convalidare sempre le espressioni regolari in un tester regex online prima dell'implementazione.