Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporciona una guía completa para las funciones de asignación de expresiones que se usan habitualmente al configurar Workday en active Directory local o aprovisionamiento de usuarios de Microsoft Entra ID. Estas funciones ayudan a transformar y asignar datos de Workday para crear atributos de usuario adecuados en el identificador de Microsoft Entra.
Tabla de contenido
- Funciones de manipulación de cadenas
- Generación de direcciones de correo electrónico
- Procesamiento de números de teléfono
- Lógica de estado de la cuenta para Active Directory
- Lógica de estado de la cuenta para microsoft Entra ID
- Funciones de fecha
- Asignación de unidad organizativa (OU)
- Generación de identificadores aleatorios
- Procesamiento de nombres
Funciones de manipulación de cadenas
Operaciones básicas de cadena
Escenario 1: quiere limpiar un valor de número de teléfono procedente de Workday quitando espacios, corchetes y guiones.
Atributo de destino: telephoneNumber, móvil
Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )
Ejemplo:
- Valores de entrada: [PrimaryWorkTelephone] = "+1 (555) 123-4567"
-
Salida de expresión:
+15551234567
Escenario 2: debe extraer el apellido de un PreferredNameData campo que contenga "FirstName LastName".
Atributo de destino: sn en Active Directory local, surname en el identificador de Entra de Microsoft
Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)
Ejemplo:
- Valores de entrada: [PreferredNameData] = "John Smith"
-
Salida de expresión:
Smith
Escenario 3: quiere quitar ceros iniciales de un identificador de trabajo antes de hacer coincidirlo con un identificador de empleado en Active Directory local o microsoft Entra ID.
Atributo de destino: employeeId
Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)
Ejemplo:
- Valores de entrada: [WorkerID] = "00012345"
-
Salida de expresión:
12345
Escenario 4: el HereditarySuffix atributo contiene información de sufijo etiquetada con código ISO de país y solo desea extraer la información del sufijo y anexarla al apellido.
Atributo de destino: sn en Active Directory local, surname en el identificador de Entra de Microsoft
Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])
Ejemplo:
- Valores de entrada: [OvarianSuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
-
Salida de expresión:
Van der Hof
Conversión de mayúsculas y minúsculas de texto
Escenario 1: Debe convertir texto en mayúsculas y minúsculas adecuadas, pero controlar los apóstrofos correctamente (por ejemplo, "hospital de San Juan" debe convertirse en "Hospital de San Juan").
Atributo de destino: company
Replace(PCase("st john's hospital"),"'S", , ,"'s", , )
Ejemplo:
- Valores de entrada: texto estático "st john's hospital"
-
Salida de expresión:
St John's Hospital
Escenario 2: quiere crear un nombre de usuario en minúscula a partir del nombre de usuario y el apellido.
Atributo de destino: mailNickname
ToLower(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))))
Ejemplo:
- Valores de entrada: [PreferredFirstName] = "José", [PreferredLastName] = "García-López"
-
Salida de expresión:
jose.garcia-lopez
Lógica de nomenclatura específica del país
Escenario 1: Debe aplicar diferentes convenciones de nomenclatura basadas en el país del usuario (por ejemplo, "Last, First" para determinados países).
Atributo de destino: displayName, cn
Switch([CountryReferenceTwoLetter],
Join(" ", [PreferredFirstName], [PreferredLastName]),
"HU", Join(",", [PreferredLastName], [PreferredFirstName]),
"JP", Join(",", [PreferredLastName], [PreferredFirstName]),
"KR", Join(",", [PreferredLastName], [PreferredFirstName])
)
Ejemplo:
- Valores de entrada: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
-
Salida de expresión:
Tanaka,Hiroshi(convención de nomenclatura japonesa) - Entrada alternativa: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
-
Salida alternativa:
John Smith(convención de nomenclatura occidental predeterminada)
Generación de direcciones de correo electrónico
Generación básica de correo electrónico
Escenario 1: quiere construir una dirección de correo electrónico mediante la combinación de nombre y apellidos, la eliminación de espacios y caracteres especiales y la anexión de un dominio.
Atributo de destino: correo
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com")
Ejemplo:
- Valores de entrada: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
-
Salida de expresión:
maria.josegonzalez@contoso.com
Escenario 2: debe controlar caracteres especiales como comillas y comas en nombres al generar direcciones de correo electrónico.
Atributo de destino: 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")
)
Ejemplo:
- Valores de entrada: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
-
Salida de expresión:
maryann.oconnor@contoso.com(om.oconnor@contoso.comsi se toma la primera opción oma.oconnor@contoso.comsi se toman las dos primeras)
Dominios de correo electrónico específicos de la empresa
Escenario 1: tiene varias empresas y necesita generar direcciones de correo electrónico con diferentes sufijos de dominio basados en la empresa.
Atributo de destino: correo
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")
)
Ejemplo:
- Valores de entrada: [Company] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
-
Salida de expresión:
john.smith@fabrikam.com - Entrada alternativa: [Company] = "Woodgrove", [FirstName] = "Sarah", [LastName] = "Johnson"
-
Salida alternativa:
s.johnson@woodgrove.com
Configuración de ProxyAddresses
Escenario 1: debe establecer varias direcciones de proxy para Exchange, incluidas las direcciones SMTP principales y secundarias.
Atributo de destino: 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"))
), ","
)
Ejemplo:
- Valores de entrada: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
-
Salida de expresión:
["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]
Procesamiento de números de teléfono
Estas asignaciones de expresiones se pueden usar en la aplicación Workday Writeback.
Análisis de números de teléfono internacionales
Escenario 1: Tiene números de teléfono en formato internacional (+1 737-626-8331) y necesita extraer solo el número de teléfono sin el código de país.
Atributo de destino: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Ejemplo:
- Valores de entrada: [telephoneNumber] = "+1 737-626-8331"
-
Salida de expresión:
7376268331
Escenario 2: debe extraer el código de país de un número de teléfono para determinar el país con fines de directorio.
Atributo de destino: c
Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
"1", "USA",
"44", "GBR",
"49", "DEU"
)
Ejemplo:
- Valores de entrada: [telephoneNumber] = "+44 20 7946 0958"
-
Salida de expresión:
GBR - Entrada alternativa: [telephoneNumber] = "+1 555-123-4567"
-
Salida alternativa:
USA
Escenario 3: debe escribir el número de teléfono que Microsoft Teams genera y establece en el identificador de Entra de Microsoft (por ejemplo, +4926180001111). En este número de teléfono, no hay espacio entre CountryCode y el número de teléfono real. Puede usar el siguiente mecanismo de análisis de expresiones regulares para extraer códigos de país relevantes para su organización y usarlo para establecer Workday CountryCodeName.
Atributo de destino: 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")
Ejemplo:
- Valores de entrada: [telephoneNumber] = "+493012345678"
-
Salida de expresión:
GER - Entrada alternativa: [telephoneNumber] = "+919876543210"
-
Salida alternativa:
IND - Entrada alternativa: [telephoneNumber] = "+15551234567"
-
Salida alternativa:
USA
Formato de número de teléfono para diferentes sistemas
Escenario 1: debe procesar números de teléfono que incluyan extensiones (por ejemplo, "+1 (206) 291-8163 x8125").
Atributo de destino: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Ejemplo:
- Valores de entrada: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
Salida de expresión:
2062918163
Escenario 2: desea extraer solo la extensión de un número de teléfono.
Atributo de destino: extensionAttribute1
Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )
Ejemplo:
- Valores de entrada: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
Salida de expresión:
8125
Lógica de estado de la cuenta para Active Directory
Las expresiones de esta sección son aplicables al accountDisabled atributo que forma parte de "Workday a la aplicación de aprovisionamiento de usuarios de Active Directory local". Para establecer el accountEnabled atributo que forma parte de "Workday to Microsoft Entra ID user provisioning app", consulte la sección Account Status Logic for Microsoft Entra ID (Lógica de estado de la cuenta para el identificador de Microsoft Entra).
Administración básica del estado de la cuenta
Escenario 1: quiere deshabilitar las cuentas locales de Active Directory para los usuarios que no están activos en Workday.
Atributo de destino: accountDisabled
Switch([Active], , "1", "False", "0", "True")
Ejemplo:
- Valores de entrada: [Activo] = "1"
-
Salida de expresión:
False(cuenta habilitada) - Entrada alternativa: [Activo] = "0"
-
Salida alternativa:
True(cuenta deshabilitada)
Recontratar procesamiento
Escenario 1: Necesita escenario 1: debe controlar escenarios de recontratación en los que las cuentas solo deben habilitarse en o después de la fecha de contratación.
Atributo de destino: accountDisabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"),
"0", "True")
Ejemplo:
- Valores de entrada: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (fecha actual: 2025-07-30)
-
Salida de expresión:
True(cuenta deshabilitada hasta la fecha de contratación) - Entrada alternativa: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Salida alternativa:
False(la cuenta habilitada como fecha de contratación ha pasado)
Creación de cuentas previas a la contratación
Escenario 1: quiere crear cuentas para contrataciones futuras, pero mantenerlas deshabilitadas hasta 14 días antes de su fecha de inicio.
Atributo de destino: accountDisabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")
Ejemplo:
- Valores de entrada: [Active] = "1", [StatusHireDate] = "2025-08-10" (fecha actual: 2025-07-30)
-
Salida de la expresión:
False(la cuenta habilitada como fecha de contratación está en un plazo de 14 días) - Entrada alternativa: [Active] = "1", [StatusHireDate] = "2025-09-15"
-
Salida alternativa:
True(la cuenta deshabilitada como fecha de contratación es superior a 14 días)
Control de las rescinciones de contrataciones
Escenario 1: debe controlar los escenarios de rescind de contratación al establecer el accountDisabled atributo . Quiere implementar la lógica:
- Si Terminated = 1 in workday then accountDisabled = True
- Si rescinded = 1 en workday, accountDisabled = True
- Si Activo =1 en workday,
- si
- HireDate es más de siete días en el futuro y, a continuación, accountDisabled = True (deshabilitar la cuenta)
- HireDate es <= siete días en el futuro, accountDisabled = False (habilitar la cuenta)
- si
- Si Activo = 0, accountDisabled = True
Atributo de destino: 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"
)
)
)
Ejemplo:
- Valores de entrada: [Terminated] = "1", [Active] = "1", [StatusHireDate] = "2025-08-15"
-
Salida de expresión:
True(cuenta deshabilitada debido a la finalización) - Entrada alternativa: [Terminated] = "0", [Rescinded] = "1", [Active] = "1"
-
Salida alternativa:
True(cuenta deshabilitada debido a la rescinción) - Entrada alternativa: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-15" (fecha actual: 2025-07-30)
-
Salida alternativa:
True(la cuenta deshabilitada como fecha de contratación es superior a 7 días) - Entrada alternativa: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-05"
-
Salida alternativa:
False(la cuenta habilitada como fecha de contratación está en un plazo de 7 días)
Lógica de estado de la cuenta para microsoft Entra ID
Las expresiones de esta sección son aplicables al accountEnabled atributo que forma parte de "Workday to Microsoft Entra ID user provisioning app". Para establecer el accountDisabled atributo que forma parte de "Workday en una aplicación de aprovisionamiento de usuarios de Active Directory local", consulte la sección Lógica de estado de la cuenta para Active Directory.
Administración básica del estado de la cuenta
Escenario 1: quiere deshabilitar las cuentas de Id. de Entra de Microsoft para los usuarios que no están activos en Workday.
Atributo de destino: accountEnabled
Switch([Active], , "1", "True", "0", "False")
Ejemplo:
- Valores de entrada: [Activo] = "1"
-
Salida de expresión:
True(cuenta habilitada) - Entrada alternativa: [Activo] = "0"
-
Salida alternativa:
False(cuenta deshabilitada)
Recontratar procesamiento
Escenario 1: Debe controlar escenarios de recontratación en los que las cuentas solo deben habilitarse en o después de la fecha de contratación.
Atributo de destino: accountEnabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"),
"0", "False")
Ejemplo:
- Valores de entrada: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (fecha actual: 2025-07-30)
-
Salida de expresión:
False(cuenta deshabilitada hasta la fecha de contratación) - Entrada alternativa: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Salida alternativa:
True(la cuenta habilitada como fecha de contratación ha pasado)
Creación de cuentas previas a la contratación
Escenario 1: quiere crear cuentas para contrataciones futuras, pero mantenerlas deshabilitadas hasta 14 días antes de su fecha de inicio.
Atributo de destino: accountEnabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")
Ejemplo:
- Valores de entrada: [Active] = "1", [StatusHireDate] = "2025-08-10" (fecha actual: 2025-07-30)
-
Salida de la expresión:
True(la cuenta habilitada como fecha de contratación está en un plazo de 14 días) - Entrada alternativa: [Active] = "1", [StatusHireDate] = "2025-09-15"
-
Salida alternativa:
False(la cuenta deshabilitada como fecha de contratación es superior a 14 días)
Funciones de fecha
Formato de fecha y conversión
Escenario 1: debe convertir una fecha de finalización del contrato de Workday en formato de Active Directory para el atributo accountExpires, por lo que la cuenta expira en la fecha de finalización del contrato.
Atributo de destino: accountExpires
NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))
Ejemplo:
- Valores de entrada: [StatusHireDate] = "2025-12-31"
-
Salida de expresión:
133835135990000000(representación numérica de 2025-12-31T23:59:59-07:00)
Escenario 2: quiere establecer una fecha de expiración de la cuenta cinco años a partir de la fecha de contratación.
Atributo de destino: accountExpires
NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))
Ejemplo:
- Valores de entrada: [StatusHireDate] = "2025-01-15"
-
Salida de expresión:
139418879990000000(representación numérica de 2030-01-15 23:59:59-05:00)
Lógica basada en fechas condicionales
Escenario 1: desea fluir la información del departamento solo si el empleado ha iniciado el trabajo (se ha superado la fecha de contratación).
Atributo de destino: departamento
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, [Department], IgnoreAttributeFlow)
Ejemplo:
- Valores de entrada: [StatusHireDate] = "2025-07-15", [Department] = "Engineering" (fecha actual: 2025-07-30)
-
Salida de expresión:
Engineering(se ha superado la fecha de contratación) - Entrada alternativa: [StatusHireDate] = "2025-08-15", [Department] = "Marketing"
-
Salida alternativa:
IgnoreAttributeFlow(la fecha de contratación está en el futuro)
Escenario 2: solo debe crear objetos de usuario si la fecha de contratación está en un plazo de 14 días.
Atributo de destino: objectFilter
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)
Ejemplo:
- Valores de entrada: [StatusHireDate] = "2025-08-10" (fecha actual: 2025-07-30)
-
Salida de expresión:
False(crear objeto de usuario como fecha de contratación está en un plazo de 14 días) - Entrada alternativa: [StatusHireDate] = "2025-09-15"
-
Salida alternativa:
IgnoreObjectFlow(no cree un objeto de usuario, ya que la fecha de contratación es superior a 14 días)
Asignación de unidad organizativa (OU)
Asignación de unidad organizativa simple
Escenario 1: quiere colocar usuarios en distintas UNIDADES organizativas en función de su ciudad.
Atributo de destino: 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"
)
Ejemplo:
- Valores de entrada: [City] = "Seattle"
-
Salida de expresión:
OU=Seattle,OU=Users,DC=contoso,DC=com - Entrada alternativa: [City] = "Chicago"
-
Salida alternativa:
OU=Default,OU=Users,DC=contoso,DC=com(valor predeterminado para ciudades no especificadas)
Estructura de unidad organizativa compleja
Escenario 1: debe crear una estructura compleja de unidades organizativas en función del departamento, el centro de costos y el país.
Atributo de destino: 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"
)
Ejemplo:
- Valores de entrada: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
-
Salida de expresión:
OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com - Entrada alternativa: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
-
Salida alternativa:
OU=Users,DC=contoso,DC=com(valores predeterminados cuando los valores no coinciden)
Asignación de unidades organizativas de usuario terminadas
Escenario 1: quiere mover usuarios terminados a una unidad organizativa especial en su fecha de finalización.
Atributo de destino: 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"
)
)
Ejemplo:
- Valores de entrada: [StatusTerminationLastDayOfWork] = "2025-07-25", [City] = "Seattle" (fecha actual: 2025-07-30)
-
Salida de expresión:
OU=Leavers,OU=Users,DC=contoso,DC=com(se ha movido a la unidad organizativa Leavers como fecha de finalización ha pasado) - Entrada alternativa: [StatusTerminationLastDayOfWork] = "2025-08-15", [City] = "Dallas"
-
Salida alternativa:
OU=Dallas,OU=Users,DC=contoso,DC=com(permanece en la unidad organizativa normal, ya que la fecha de finalización está en el futuro)
Generación de identificadores aleatorios
Generación aleatoria basada en GUID
Escenario 1: debe generar una cadena aleatoria de 5 caracteres que no contenga dígitos.
Atributo de destino: 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", , )
)
Ejemplo:
- Valores de entrada: GUID generado convertido a Base64 (por ejemplo, "mV8dXr...")
-
Salida de expresión:
mVAdX(dígitos reemplazados por "A" o por "B"/"C" si se toma la primera opción)
Escenario 2: quiere generar una cadena aleatoria que comience por "D" seguida de 4 caracteres alfabéticos.
Atributo de destino: 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}", ,))
)
Ejemplo:
- Valores de entrada: GUID generado convertido a Base64 que contiene la secuencia alfabética "mVdX"
-
Salida de expresión:
DMVDX(o diferente si se toma la primera opción)
Generación de identificadores numéricos
Escenario 1: debe generar un número aleatorio de 4 dígitos a partir de un GUID.
Atributo de destino: 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}", ,)
)
Ejemplo:
- Valores de entrada: GUID generado como "a1b2c3d4-e5f6-7890-1234-567890abcdef"
-
Salida de expresión:
D7890(oD1234,D5678, etc. dependiendo de la secuencia de 4 dígitos que coincida primero)
Procesamiento de nombres
Generación de nombres para mostrar
Escenario 1: desea crear un nombre para mostrar en formato "Last, First".
Atributo de destino: displayName
Join(", ", [PreferredLastName], [PreferredFirstName])
Ejemplo:
- Valores de entrada: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
-
Salida de expresión:
Smith, John
Escenario 2: debe crear un nombre para mostrar que incluya el identificador inicial y del empleado intermedios.
Atributo de destino: displayName
Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])
Ejemplo:
- Valores de entrada: [PreferredLastName] = "Johnson", [PreferredFirstName] = "Sarah", [PreferredMiddleName] = "Elizabeth", [WorkerID] = "12345"
-
Salida de expresión:
Johnson,Sarah E-12345
Generación de nombres comunes (CN) con unicidad
Escenario 1: quiere generar un nombre común único con opciones de reserva para duplicados.
Atributo de destino: cn
SelectUniqueValue(
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)
Ejemplo:
- Valores de entrada: [PreferredFirstName] = "José", [PreferredLastName] = "García", [PreferredMiddleName] = "Antonio"
-
Salida de expresión:
Jose Garcia(oJose A Garciasi se toma la primera opción oJose Antonio Garciasi se toman las dos primeras)
Generación samAccountName
Escenario 1: quiere crear un samAccountName de 20 caracteres con el nombre inicial y el apellido con sufijos numéricos para duplicados.
Atributo de destino: 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")
)
Ejemplo:
- Valores de entrada: [FirstName] = "María José", [LastName] = "González-López"
-
Salida de expresión:
mgonzalezlopez(omgonzalezlopez1si se toma la primera opción omgonzalezlopez2si se toman las dos primeras)
Escenarios avanzados
Ocultar de la lógica de listas de direcciones
En esta sección se describe cómo establecer el atributo msExchHideFromAddressListsbooleano . Use todos los límites "TRUE" o "FALSE" para establecer el atributo booleano. El uso de cualquier otro valor produce un HybridSynchronizationActiveDirectoryInvalidParameter error.
Escenario 1: quiere establecer msExchHideFromAddressLists en función del estado de la cuenta activa del usuario de Workday.
Atributo de destino: msExchHideFromAddressLists
Switch([Active], , "1", "FALSE", "0", "TRUE")
Ejemplo:
- Valores de entrada: [Activo] = "0"
-
Salida de expresión:
TRUE(ocultar de las listas de direcciones a medida que el usuario está inactivo en Workday) - Entrada alternativa: [Activo] = "1"
-
Salida alternativa:
FALSE(mostrar en las listas de direcciones a medida que el usuario está activo en Workday)
Escenario 2: quiere establecer msExchHideFromAddressLists en función de la fecha de contratación del trabajador. Mostrar al usuario en la lista de direcciones de Exchange solo después de la fecha de contratación.
Atributo de destino: msExchHideFromAddressLists
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")
Ejemplo:
- Valores de entrada: [StatusHireDate] = "2025-07-31" (fecha actual: 2025-07-30)
-
Salida de la expresión:
TRUE(ocultar de las listas de direcciones como fecha de contratación está en el futuro) - Entrada alternativa: [StatusHireDate] = "2025-07-31" (fecha actual: 2025-08-01)
-
Salida alternativa:
FALSE(mostrar en listas de direcciones como fecha de contratación está en el pasado)
Configuración de atributos multivalor
Escenario 1: debe establecer varios valores para el atributo msExchPoliciesExcluded en Active Directory.
Atributo de destino: msExchPoliciesExcluded
Split(
Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
","
)
Ejemplo:
- Valores de entrada: valores GUID estáticos
-
Salida de expresión:
["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]
Escenarios de escritura diferida
Escenario 1: desea volver a escribir el nombre de usuario en Workday solo si se ha superado la fecha de contratación del empleado.
Atributo de destino: Nombre de usuario
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))
Ejemplo:
- Valores de entrada: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com" (fecha actual: 2025-07-30)
-
Salida de expresión:
user@contoso.com(la fecha de contratación ha pasado, el nombre de usuario de escritura diferida) - Entrada alternativa: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
- Salida alternativa: (vacía- omitida, la fecha de contratación está en el futuro)
procedimientos recomendados
Use siempre SelectUniqueValue para los atributos que requieren unicidad (como UPN, samAccountName, email).
Controle valores NULL y vacíos mediante funciones como
IsNullOrEmptyinstrucciones ,IsPresentoSwitch.Use NormalizeDiacritics al procesar nombres con caracteres especiales para garantizar la compatibilidad.
La lógica de fecha de prueba exhaustivamente , ya que diferentes zonas horarias y formatos de fecha pueden afectar a los resultados.
Use IgnoreFlowIfNullOrEmpty cuando quiera omitir las actualizaciones de atributos para los valores vacíos.
Considere la posibilidad de usar Switch en lugar de instrucciones IIF anidadas para mejorar la legibilidad.
Valide siempre las expresiones regulares en un evaluador de expresiones regulares en línea antes de implementar.