Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece um guia abrangente para funções de mapeamento de expressão comumente usadas ao configurar o Workday para o provisionamento de usuário do Active Directory/Microsoft Entra ID local. Essas funções ajudam a transformar e mapear dados do Workday para criar atributos de usuário apropriados na ID do Microsoft Entra.
Sumário
- Funções de manipulação de cadeia de caracteres
- Geração de endereços de email
- Processamento de número de telefone
- Lógica de status da conta para o Active Directory
- Lógica de status da conta para a ID do Microsoft Entra
- Funções de data
- Atribuição de UO (unidade organizacional)
- Geração de ID aleatória
- Processamento de nomes
Funções de manipulação de cadeia de caracteres
Operações básicas de cadeia de caracteres
Cenário 1: você deseja limpar um valor de número de telefone proveniente do Workday removendo espaços, colchetes e traços.
Atributo de destino: telephoneNumber, mobile
Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )
Exemplo:
- Valores de entrada: [PrimaryWorkTelephone] = "+1 (555) 123-4567"
-
Saída da expressão:
+15551234567
Cenário 2: você precisa extrair o sobrenome de um PreferredNameData campo que contenha "NomeDoQuivoDoQuivo".
Atributo de destino: sn no Active Directory local, surname na ID do Microsoft Entra
Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)
Exemplo:
- Valores de entrada: [PreferredNameData] = "John Smith"
-
Saída da expressão:
Smith
Cenário 3: você deseja remover zeros à esquerda de uma ID de Trabalho antes de correspondê-la com uma ID de funcionário no Active Directory local ou na ID do Microsoft Entra.
Atributo de destino: employeeId
Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)
Exemplo:
- Valores de entrada: [WorkerID] = "00012345"
-
Saída da expressão:
12345
Cenário 4: O HereditarySuffix atributo contém informações de sufixo marcadas com o código ISO do país e você deseja extrair apenas as informações do sufixo e anexá-la ao sobrenome.
Atributo de destino: sn no Active Directory local, surname na ID do Microsoft Entra
Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])
Exemplo:
- Valores de entrada: [HereditarySuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
-
Saída da expressão:
Van der Hof
Conversão de maiúsculas e minúsculas
Cenário 1: você precisa converter texto em caso adequado, mas tratar apóstrofos corretamente (por exemplo, "hospital st john" deve se tornar "Hospital São João").
Atributo de destino: empresa
Replace(PCase("st john's hospital"),"'S", , ,"'s", , )
Exemplo:
- Valores de entrada: texto estático "hospital st john's"
-
Saída da expressão:
St John's Hospital
Cenário 2: você deseja criar um nome de usuário minúsculo com base no nome e sobrenome.
Atributo de destino: mailNickname
ToLower(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))))
Exemplo:
- Valores de entrada: [PreferredFirstName] = "José", [PreferredLastName] = "García-López"
-
Saída da expressão:
jose.garcia-lopez
Lógica de nomenclatura específica do país
Cenário 1: você precisa aplicar diferentes convenções de nomenclatura com base no país do usuário (por exemplo, "Último, Primeiro" 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])
)
Exemplo:
- Valores de entrada: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
-
Saída da expressão:
Tanaka,Hiroshi(convenção de nomenclatura japonesa) - Entrada alternativa: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
-
Saída alternativa:
John Smith(convenção de nomenclatura ocidental padrão)
Geração de endereços de email
Geração básica de email
Cenário 1: você deseja construir um endereço de email ingressando no nome e sobrenome, removendo espaços e caracteres especiais e acrescentando um domínio.
Atributo de destino: email
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com")
Exemplo:
- Valores de entrada: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
-
Saída da expressão:
maria.josegonzalez@contoso.com
Cenário 2: você precisa lidar com caracteres especiais, como aspas e vírgulas em nomes ao gerar endereços de email.
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")
)
Exemplo:
- Valores de entrada: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
-
Saída da expressão:
maryann.oconnor@contoso.com(oum.oconnor@contoso.comse a primeira opção for tomada ouma.oconnor@contoso.comse as duas primeiras forem tomadas)
Domínios de email específicos da empresa
Cenário 1: você tem várias empresas e precisa gerar endereços de email com sufixos de domínio diferentes com base na empresa.
Atributo de destino: email
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")
)
Exemplo:
- Valores de entrada: [Empresa] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
-
Saída da expressão:
john.smith@fabrikam.com - Entrada alternativa: [Empresa] = "Woodgrove", [FirstName] = "Sarah", [LastName] = "Johnson"
-
Saída alternativa:
s.johnson@woodgrove.com
Configuração de ProxyAddresses
Cenário 1: você precisa definir vários endereços proxy para o Exchange, incluindo endereços SMTP primários e secundários.
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"))
), ","
)
Exemplo:
- Valores de entrada: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
-
Saída da expressão:
["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]
Processamento de número de telefone
Esses mapeamentos de expressão podem ser usados no aplicativo write-back do Workday.
Análise de número de telefone internacional
Cenário 1: você tem números de telefone em formato internacional (+1 737-626-8331) e precisa extrair apenas o número de telefone sem o código do país.
Atributo de destino: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Exemplo:
- Valores de entrada: [telefoneNumber] = "+1 737-626-8331"
-
Saída da expressão:
7376268331
Cenário 2: você precisa extrair o código do país de um número de telefone para determinar o país para fins de diretório.
Atributo de destino: c
Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
"1", "USA",
"44", "GBR",
"49", "DEU"
)
Exemplo:
- Valores de entrada: [telefoneNumber] = "+44 20 7946 0958"
-
Saída da expressão:
GBR - Entrada alternativa: [telefoneNumber] = "+1 555-123-4567"
-
Saída alternativa:
USA
Cenário 3: você precisa fazer write-back do número de telefone que o Microsoft Teams gera e define na ID do Microsoft Entra (por exemplo, +4926180001111). Neste número de telefone, não há espaço entre o CountryCode e o número de telefone real. Você pode usar o seguinte mecanismo de análise regex para extrair códigos de país relevantes para sua organização e usá-los para definir o 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")
Exemplo:
- Valores de entrada: [telephoneNumber] = "+493012345678"
-
Saída da expressão:
GER - Entrada alternativa: [telephoneNumber] = "+919876543210"
-
Saída alternativa:
IND - Entrada alternativa: [telephoneNumber] = "+15551234567"
-
Saída alternativa:
USA
Formatação de número de telefone para sistemas diferentes
Cenário 1: você precisa processar números de telefone que incluem extensões (por exemplo, "+1 (206) 291-8163 x8125").
Atributo de destino: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Exemplo:
- Valores de entrada: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
Saída da expressão:
2062918163
Cenário 2: você deseja extrair apenas a extensão de um número de telefone.
Atributo de destino: extensionAttribute1
Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )
Exemplo:
- Valores de entrada: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
Saída da expressão:
8125
Lógica de status da conta para o Active Directory
As expressões nesta seção são aplicáveis ao accountDisabled atributo que faz parte do "Workday para o aplicativo de provisionamento de usuários do Active Directory local". Para definir o accountEnabled atributo que faz parte do "Aplicativo de provisionamento de usuário do Workday to Microsoft Entra ID", consulte a seção Lógica de Status da Conta para a ID do Microsoft Entra.
Gerenciamento básico de status da conta
Cenário 1: você deseja desabilitar contas do Active Directory local para usuários que não estão ativos no Workday.
Atributo de destino: accountDisabled
Switch([Active], , "1", "False", "0", "True")
Exemplo:
- Valores de entrada: [Ativo] = "1"
-
Saída da expressão:
False(conta habilitada) - Entrada alternativa: [Ativo] = "0"
-
Saída alternativa:
True(conta desabilitada)
Recontrata o processamento
Cenário 1: Você precisa do Cenário 1: você precisa lidar com cenários de recontratação em que as contas só devem ser habilitadas na data de contratação ou após a data de contratação.
Atributo de destino: accountDisabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"),
"0", "True")
Exemplo:
- Valores de entrada: [Ativo] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (data atual: 2025-07-30)
-
Saída da expressão:
True(conta desabilitada até a data de contratação) - Entrada alternativa: [Ativo] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Saída alternativa:
False(a conta habilitada como data de contratação foi aprovada)
Criação de conta de pré-contratação
Cenário 1: você deseja criar contas para contratações futuras, mas mantê-las desabilitadas até 14 dias antes da data de início.
Atributo de destino: accountDisabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")
Exemplo:
- Valores de entrada: [Ativo] = "1", [StatusHireDate] = "2025-08-10" (data atual: 2025-07-30)
-
Saída da expressão:
False(a conta habilitada como data de contratação está dentro de 14 dias) - Entrada alternativa: [Ativo] = "1", [StatusHireDate] = "2025-09-15"
-
Saída alternativa:
True(a conta desabilitada como data de contratação está a mais de 14 dias de distância)
Manipulação de rescindimentos de contratação
Cenário 1: você precisa lidar com cenários de rescisão de contratação ao definir o accountDisabled atributo. Você deseja implementar a lógica:
- Se Encerrado = 1 no workday, em seguida, accountDisabled = True
- Se Rescindido = 1 no workday, em seguida, accountDisabled = True
- Se Active =1 no workday, então
- se
- HireDate tem mais de sete dias no futuro e, em seguida, accountDisabled = True (desabilitar a conta)
- HireDate é <= sete dias no futuro, em seguida, accountDisabled = False (habilitar a conta)
- se
- Se Ativo = 0, em seguida, conta Desabilitada = 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"
)
)
)
Exemplo:
- Valores de entrada: [Encerrado] = "1", [Ativo] = "1", [StatusHireDate] = "2025-08-15"
-
Saída da expressão:
True(conta desabilitada devido ao encerramento) - Entrada alternativa: [Encerrado] = "0", [Rescindido] = "1", [Ativo] = "1"
-
Saída alternativa:
True(conta desabilitada devido a rescindir) - Entrada alternativa: [Encerrado] = "0", [Rescindido] = "0", [Ativo] = "1", [StatusHireDate] = "2025-08-15" (data atual: 2025-07-30)
-
Saída alternativa:
True(a conta desabilitada como data de contratação está a mais de 7 dias de distância) - Entrada alternativa: [Encerrado] = "0", [Rescindido] = "0", [Ativo] = "1", [StatusHireDate] = "2025-08-05"
-
Saída alternativa:
False(a conta habilitada como data de contratação é dentro de 7 dias)
Lógica de status da conta para a ID do Microsoft Entra
As expressões nesta seção são aplicáveis ao accountEnabled atributo que faz parte do "Workday to Microsoft Entra ID user provisioning app". Para definir o accountDisabled atributo que faz parte do "Aplicativo de provisionamento de usuário do Workday para o Active Directory local", consulte a seção Lógica de Status da Conta do Active Directory.
Gerenciamento básico de status da conta
Cenário 1: você deseja desabilitar contas da ID do Microsoft Entra para usuários que não estão ativos no Workday.
Atributo de destino: accountEnabled
Switch([Active], , "1", "True", "0", "False")
Exemplo:
- Valores de entrada: [Ativo] = "1"
-
Saída da expressão:
True(conta habilitada) - Entrada alternativa: [Ativo] = "0"
-
Saída alternativa:
False(conta desabilitada)
Recontrata o processamento
Cenário 1: você precisa lidar com cenários de recontratação em que as contas só devem ser habilitadas na data de contratação ou após a data de contratação.
Atributo de destino: accountEnabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"),
"0", "False")
Exemplo:
- Valores de entrada: [Ativo] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15" (data atual: 2025-07-30)
-
Saída da expressão:
False(conta desabilitada até a data de contratação) - Entrada alternativa: [Ativo] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
Saída alternativa:
True(a conta habilitada como data de contratação foi aprovada)
Criação de conta de pré-contratação
Cenário 1: você deseja criar contas para contratações futuras, mas mantê-las desabilitadas até 14 dias antes da data de início.
Atributo de destino: accountEnabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")
Exemplo:
- Valores de entrada: [Ativo] = "1", [StatusHireDate] = "2025-08-10" (data atual: 2025-07-30)
-
Saída da expressão:
True(a conta habilitada como data de contratação está dentro de 14 dias) - Entrada alternativa: [Ativo] = "1", [StatusHireDate] = "2025-09-15"
-
Saída alternativa:
False(a conta desabilitada como data de contratação está a mais de 14 dias de distância)
Funções de data
Formatação e conversão de data
Cenário 1: você precisa converter uma data de término do contrato do Workday no formato Active Directory para o atributo accountExpires, de modo que a conta expire na data de término do contrato.
Atributo de destino: accountExpires
NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))
Exemplo:
- Valores de entrada: [StatusHireDate] = "2025-12-31"
-
Saída da expressão:
133835135990000000(representação numérica de 2025-12-31T23:59:59-07:00)
Cenário 2: você deseja definir uma data de validade da conta cinco anos a partir da data de contratação.
Atributo de destino: accountExpires
NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))
Exemplo:
- Valores de entrada: [StatusHireDate] = "2025-01-15"
-
Saída da expressão:
139418879990000000(representação numérica de 2030-01-15 23:59:59-05:00)
Lógica baseada em data condicional
Cenário 1: você deseja fluir informações do departamento somente se o funcionário tiver iniciado o trabalho (a data de contratação foi aprovada).
Atributo de destino: departamento
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, [Department], IgnoreAttributeFlow)
Exemplo:
- Valores de entrada: [StatusHireDate] = "2025-07-15", [Departamento] = "Engenharia" (data atual: 2025-07-30)
-
Saída da expressão:
Engineering(a data de contratação foi aprovada) - Entrada alternativa: [StatusHireDate] = "2025-08-15", [Departamento] = "Marketing"
-
Saída alternativa:
IgnoreAttributeFlow(a data de contratação é no futuro)
Cenário 2: você precisa criar objetos de usuário somente se a data de contratação estiver dentro de 14 dias.
Atributo de destino: objectFilter
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)
Exemplo:
- Valores de entrada: [StatusHireDate] = "2025-08-10" (data atual: 2025-07-30)
-
Saída da expressão:
False(criar objeto de usuário como data de contratação é dentro de 14 dias) - Entrada alternativa: [StatusHireDate] = "2025-09-15"
-
Saída alternativa:
IgnoreObjectFlow(não crie objeto de usuário, pois a data de contratação é de mais de 14 dias)
Atribuição da UO (Unidade Organizacional)
Atribuição de UO simples
Cenário 1: você deseja colocar usuários em diferentes UOs com base em sua cidade.
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"
)
Exemplo:
- Valores de entrada: [Cidade] = "Seattle"
-
Saída da expressão:
OU=Seattle,OU=Users,DC=contoso,DC=com - Entrada alternativa: [Cidade] = "Chicago"
-
Saída alternativa:
OU=Default,OU=Users,DC=contoso,DC=com(padrão para cidades não especificadas)
Estrutura de UO complexa
Cenário 1: você precisa criar uma estrutura de UO complexa com base no departamento, no centro de custos e no 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"
)
Exemplo:
- Valores de entrada: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
-
Saída da expressão:
OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com - Entrada alternativa: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
-
Saída alternativa:
OU=Users,DC=contoso,DC=com(padrões quando os valores não correspondem)
Atribuição de UO de usuário encerrada
Cenário 1: você deseja mover usuários encerrados para uma UO especial na data de término.
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"
)
)
Exemplo:
- Valores de entrada: [StatusTerminationLastDayOfWork] = "2025-07-25", [Cidade] = "Seattle" (data atual: 2025-07-30)
-
Saída da expressão:
OU=Leavers,OU=Users,DC=contoso,DC=com(movida para a UO do Leavers conforme a data de término passou) - Entrada alternativa: [StatusTerminationLastDayOfWork] = "2025-08-15", [Cidade] = "Dallas"
-
Saída alternativa:
OU=Dallas,OU=Users,DC=contoso,DC=com(permanece na UO normal, pois a data de término é futura)
Geração de ID aleatória
Geração aleatória baseada em GUID
Cenário 1: você precisa gerar uma cadeia de caracteres aleatória de 5 caracteres que não contém 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", , )
)
Exemplo:
- Valores de entrada: GUID gerado convertido em Base64 (por exemplo, "mV8dXr...")
-
Saída da expressão:
mVAdX(dígitos substituídos por 'A' ou por 'B'/'C' se a primeira opção for tomada)
Cenário 2: você deseja gerar uma cadeia de caracteres aleatória que começa com "D" seguido por 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}", ,))
)
Exemplo:
- Valores de entrada: GUID gerado convertido em Base64 contendo a sequência alfabética "mVdX"
-
Saída da expressão:
DMVDX(ou diferente se a primeira opção for tomada)
Geração de ID numérica
Cenário 1: você precisa gerar um número aleatório de 4 dígitos de um 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}", ,)
)
Exemplo:
- Valores de entrada: GUID gerado como "a1b2c3d4-e5f6-7890-1234-567890abcdef"
-
Saída da expressão:
D7890(ouD1234,D5678etc. dependendo de qual sequência de 4 dígitos é correspondida primeiro)
Processamento de nomes
Geração de nome de exibição
Cenário 1: você deseja criar um nome de exibição no formato "Last, First".
Atributo de destino: displayName
Join(", ", [PreferredLastName], [PreferredFirstName])
Exemplo:
- Valores de entrada: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
-
Saída da expressão:
Smith, John
Cenário 2: você precisa criar um nome de exibição que inclua a inicial intermediária e a ID do funcionário.
Atributo de destino: displayName
Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])
Exemplo:
- Valores de entrada: [PreferredLastName] = "Johnson", [PreferredFirstName] = "Sarah", [PreferredMiddleName] = "Elizabeth", [WorkerID] = "12345"
-
Saída da expressão:
Johnson,Sarah E-12345
Geração cn (nome comum) com exclusividade
Cenário 1: você deseja gerar um nome comum exclusivo com opções de fallback para duplicatas.
Atributo de destino: cn
SelectUniqueValue(
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)
Exemplo:
- Valores de entrada: [PreferredFirstName] = "José", [PreferredLastName] = "García", [PreferredMiddleName] = "Antonio"
-
Saída da expressão:
Jose Garcia(ouJose A Garciase a primeira opção for tomada ouJose Antonio Garciase as duas primeiras forem tomadas)
Geração de SamAccountName
Cenário 1: você deseja criar um samAccountName de 20 caracteres usando o nome inicial e o sobrenome com sufixos numéricos para duplicatas.
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")
)
Exemplo:
- Valores de entrada: [FirstName] = "María José", [LastName] = "González-López"
-
Saída da expressão:
mgonzalezlopez(oumgonzalezlopez1se a primeira opção for tomada oumgonzalezlopez2se as duas primeiras forem tomadas)
Cenários avançados
Ocultar da lógica de listas de endereços
Esta seção descreve como definir o atributo booliano msExchHideFromAddressLists. Use todas as tampas "TRUE" ou "FALSE" para definir o atributo booliano. O uso de qualquer outro valor resulta em um HybridSynchronizationActiveDirectoryInvalidParameter erro.
Cenário 1: você deseja definir msExchHideFromAddressLists com base no status da conta ativa do usuário do Workday.
Atributo de destino: msExchHideFromAddressLists
Switch([Active], , "1", "FALSE", "0", "TRUE")
Exemplo:
- Valores de entrada: [Ativo] = "0"
-
Saída da expressão:
TRUE(ocultar de listas de endereços enquanto o usuário está inativo no Workday) - Entrada alternativa: [Ativo] = "1"
-
Saída alternativa:
FALSE(mostrar em listas de endereços como o usuário está ativo no Workday)
Cenário 2: você deseja definir msExchHideFromAddressLists com base na data de contratação do trabalhador. Mostrar o usuário na lista de endereços do Exchange somente após a data de contratação.
Atributo de destino: msExchHideFromAddressLists
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")
Exemplo:
- Valores de entrada: [StatusHireDate] = "2025-07-31" (data atual: 2025-07-30)
-
Saída da expressão:
TRUE(ocultar de listas de endereços como a data de contratação é no futuro) - Entrada alternativa: [StatusHireDate] = "2025-07-31" (data atual: 2025-08-01)
-
Saída alternativa:
FALSE(mostrar em listas de endereços como a data de contratação está no passado)
Configuração de atributo com vários valores
Cenário 1: você precisa definir vários valores para o atributo msExchPoliciesExcluded no Active Directory.
Atributo de destino: msExchPoliciesExcluded
Split(
Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
","
)
Exemplo:
- Valores de entrada: valores guid estáticos
-
Saída da expressão:
["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]
Cenários de write-back
Cenário 1: você deseja gravar de volta o nome de usuário no Workday somente se a data de contratação do funcionário tiver passado.
Atributo de destino: Nome de usuário
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))
Exemplo:
- Valores de entrada: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com" (data atual: 2025-07-30)
-
Saída da expressão:
user@contoso.com(a data de contratação passou, escreva o nome de usuário) - Entrada alternativa: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
- Saída alternativa: (vazia – ignorada, a data de contratação é futura)
Práticas recomendadas
Sempre use SelectUniqueValue para atributos que exigem exclusividade (como UPN, samAccountName, email).
Manipule valores nulos e vazios usando funções como
IsNullOrEmpty,IsPresentouSwitchinstruções.Use NormalizeDiacritics ao processar nomes com caracteres especiais para garantir a compatibilidade.
Testar completamente a lógica de data como diferentes fusos horários e formatos de data podem afetar os resultados.
Use IgnoreFlowIfNullOrEmpty quando quiser ignorar atualizações de atributo para valores vazios.
Considere usar o Switch em vez de instruções IIF aninhadas para melhor legibilidade.
Sempre valide expressões regulares em um testador regex online antes de implementar.