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 SuccessFactors para o provisionamento de usuário da ID do Microsoft Entra. Essas funções ajudam a transformar e mapear dados do SuccessFactors 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
- Lógica de gerenciamento de conta
- Funções de data e expiração da conta
- Atribuição de UO (unidade organizacional)
- Nomes de processamento e exibição de nomes
- Geração de SamAccountName
- Configuração de ProxyAddresses
- Processamento de número de telefone
- Lógica baseada em país e local
- Classificação de funcionários e funcionários contingentes
- Cenários avançados
Funções de manipulação de cadeia de caracteres
Operações básicas de cadeia de caracteres
Cenário 1: você deseja adicionar uma ID de pessoa com zeros à esquerda para criar uma cadeia de caracteres de 8 caracteres.
Atributo de destino: employeeId
Replace(Join("","00000000",[personIdExternal]), ,"(.*?)(?<id>.{0,8})$", ,"${id}", ,)
Exemplo:
- Valores de entrada: [personIdExternal] = "12345"
-
Saída da expressão:
00012345
Cenário 2: você precisa adicionar o centro de custo com zeros à esquerda para torná-lo 10 caracteres.
Atributo de destino: extensionAttribute1
Replace(Join("","0000000000",[costCenterId]), ,"(.*?)(?<id>.{0,10})$", ,"${id}", ,)
Exemplo:
- Valores de entrada: [costCenterId] = "567"
-
Saída da expressão:
0000000567
Cenário 3: você deseja criar uma ID de funcionário acrescentando um prefixo a um número de funcionário acolchoado.
Atributo de destino: employeeId
Append("05",Replace(Join("","000000",[employeeId]), ,"(.*?)(?<id>.{0,6})$", ,"${id}", ,))
Exemplo:
- Valores de entrada: [employeeId] = "789"
-
Saída da expressão:
05000789
Conversão de maiúsculas e minúsculas
Cenário 1: você precisa converter nomes de todas as letras maiúsculas em maiúsculas em maiúsculas e minúsculas apropriadas (Caso de Título).
Atributo de destino: sn
Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64)))
Exemplo:
- Valores de entrada: [lastName] = "JOHNSON"
-
Saída da expressão:
Johnson
Cenário 2: você deseja criar um nome de exibição com a formatação de maiúsculas e minúsculas adequada.
Atributo de destino: displayName
Join(", ", Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64))), Join("",Mid([firstName],1,1),ToLower(Mid([firstName],2,64))))
Exemplo:
- Valores de entrada: [lastName] = "SMITH", [firstName] = "JOHN"
-
Saída da expressão:
Smith, John
Cenário 3: você precisa lidar com nomes com espaços substituindo espaços por períodos.
Atributo de destino: givenName
Replace([firstName]," ", , ,".", , )
Exemplo:
- Valores de entrada: [firstName] = "Mary Ann"
-
Saída da expressão:
Mary.Ann
Geração de endereços de email
Geração básica de email
Cenário 1: você deseja gerar endereços de email usando o nome e o sobrenome com domínios específicos da empresa.
Atributo de destino: email
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")
)
)
Exemplo:
- Valores de Entrada: [empresa] = "Contoso", [firstName] = "John", [lastName] = "Smith", [middleName] = "Michael"
-
Saída da expressão:
john.smith@contoso.com(oujohn.m.smith@contoso.comse a primeira opção for tomada)
Geração de email baseada em grupo de funcionários
Cenário 1: você deseja gerar formatos de email diferentes com base na classificação de funcionários (permanente versus temporária).
Atributo de destino: 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")
)))
Exemplo:
- Valores de entrada: [custom06] = "Temporário", [firstName] = "Sarah", [lastName] = "Wilson"
-
Saída da expressão:
sarah.wilson_ext@ltts.com
Validação de domínio corporativo
Cenário 1: você deseja apenas fluir endereços de email que pertencem a um domínio corporativo específico.
Atributo de destino: email
IgnoreFlowIfNullOrEmpty(IIF(InStr([emailAddress],"@contoso.com")=0,"",[emailAddress]))
Exemplo:
- Valores de entrada: [emailAddress] = "john.doe@contoso.com"
-
Saída da expressão:
john.doe@contoso.com - Entrada alternativa: [emailAddress] = "john.doe@external.com"
- Saída alternativa: (vazia - ignorada)
Preservação de email existente
Cenário 1: você deseja usar emails existentes do SuccessFactors para determinadas divisões, mas gerar novos para outras.
Atributo de destino: 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")
)
Exemplo:
- Valores de entrada: [divisionId] = "8900", [email] = "existing.user@company.com", [firstName] = "Mike", [lastName] = "Brown"
-
Saída da expressão:
existing.user@company.com - Entrada alternativa: [divisionId] = "1200", [firstName] = "Mike", [lastName] = "Brown"
-
Saída alternativa:
mike.brown@contoso.com
Lógica de gerenciamento de conta
Status básico da conta
Cenário 1: você deseja determinar se uma conta deve ser desabilitada com base no status de emprego.
Atributo de destino: accountDisabled
Switch([emplStatus], "False", "741", "False", "749", "True", "746", "True")
Exemplo:
- Valores de entrada: [emplStatus] = "741"
-
Saída da expressão:
False(conta habilitada) - Entrada alternativa: [emplStatus] = "746"
-
Saída alternativa:
True(conta desabilitada)
Ocultar da lógica de listas de endereços
Cenário 1: você precisa definir o atributo msExchHideFromAddressLists com base nas datas de início e término.
Atributo de destino: 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")
Exemplo:
- Valores de entrada: [startDate] = "2025-01-15", [endDate] = "2025-12-31" (data atual: 2025-07-30)
-
Saída da expressão:
FALSE(não oculta de listas de endereços) - Entrada alternativa: [startDate] = "2025-01-15", [endDate] = "2025-06-30"
-
Saída alternativa:
TRUE(oculto de listas de endereços)
Lógica complexa de status do funcionário
Cenário 1: você tem um requisito complexo para desabilitar contas com base em campos personalizados e datas de contratação.
Atributo de destino: 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"
))
Exemplo:
- Valores de entrada: [empNavCustomString3] = "62220", [cust_hiredate] = "2025-07-27", [cust_customDate67] = "2025-07-30" (data atual: 2025-07-30)
-
Saída da expressão:
False(conta habilitada) - Entrada alternativa: [empNavCustomString3] = "62220", [cust_hiredate] = "2025-07-27", [cust_customDate67] = "2025-07-29"
-
Saída alternativa:
True(conta desabilitada)
Funções de data e expiração da conta
Expiração básica da conta
Cenário 1: você deseja definir a expiração da conta com base na data de término do SuccessFactors.
Atributo de destino: accountExpires
Switch([endDate],
NumFromDate(Join("", FormatDateTime([endDate], "M/d/yyyy hh:mm:ss tt", "yyyy-MM-dd"), " 23:59:59-05:00")),
"", "9223372036854775807"
)
Exemplo:
- Valores de entrada: [endDate] = "31/12/2025 12:00:00 AM"
-
Saída da expressão:
133835135990000000(representação numérica de 2025-12-31 23:59:59-05:00) - Entrada alternativa: [endDate] = "" (vazio)
-
Saída alternativa:
9223372036854775807(nunca expira)
Expiração baseada em tipo de emprego
Cenário 1: você precisa definir regras de expiração de conta diferentes com base no tipo de emprego (permanente versus contratante).
Atributo de destino: 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"))
)
Exemplo:
- Valores de entrada: [employmentType] = "PM", [DOB] = "15/1/1990 12:00:00 AM"
-
Saída da expressão:
158488415990000000(representação numérica de 2050-01-15 23:59:59-05:00, 60 anos após o nascimento) - Entrada alternativa: [employmentType] = "CON", [endDate] = "31/12/2025 12:00:00 AM"
-
Saída alternativa:
133835135990000000(representação numérica de 2025-12-31 23:59:59-05:00)
Expiração da conta baseada em motivo do evento
Cenário 1: você deseja definir a expiração da conta com base em eventos de término específicos e datas de indenização.
Atributo de destino: 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"))
)
Exemplo:
- Valores de entrada: [evento] = "SEVUNSATP", [severanceStartDate] = "15/8/2025 12:00:00 AM"
-
Saída da expressão:
133877247990000000(representação numérica de 2025-08-15 23:59:59-08:00) - Entrada alternativa: [evento] = "REGULAR", [latestTerminationDate] = "30/9/2025 12:00:00 AM"
-
Saída alternativa:
133886207990000000(representação numérica de 2025-09-30 23:59:59-08:00)
Manipulação de formato de data
Cenário 1: você precisa lidar com datas inválidas, como "31/12/9999" que causam erros no NumFromDate.
Atributo de destino: 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")
)
Exemplo:
- Valores de entrada: [endDate] = "31/12/9999 12:00:00 AM"
-
Saída da expressão:
441481535990000000(representação numérica de 2099-12-31T23:59:59-04:00) - Entrada alternativa: [endDate] = "15/8/2025 12:00:00 AM"
-
Saída alternativa:
133877283990000000(representação numérica de 2025-08-15T23:59:59-04:00)
Atribuição de UO (unidade organizacional)
Atribuição de UO baseada em departamento
Cenário 1: você deseja colocar usuários em diferentes UOs com base em seu departamento.
Atributo de destino: 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"
)
Exemplo:
- Valores de entrada: [departamento] = "SG de engenharia"
-
Saída da expressão:
OU=Engineering,OU=SuccessFactors,DC=contoso,DC=com - Entrada alternativa: [departamento] = "Marketing"
-
Saída alternativa:
OU=SuccessFactors,DC=contoso,DC=com(padrão)
Atribuição de UO baseada em status de emprego
Cenário 1: você precisa atribuir usuários a diferentes UOs com base em seu status de emprego e localização.
Atributo de destino: 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")
Exemplo:
- Valores de entrada: [emplStatus] = "741", [empJobNavCustomString13] = "LOC1015", [departmentId] = "DU1026"
-
Saída da expressão:
OU=IT,OU=Bangalore,DC=contoso,DC=com - Entrada alternativa: [emplStatus] = "749", [empJobNavCustomString13] = "LOC1016"
-
Saída alternativa:
OU=O365-NoSYNC,OU=Mysore,DC=contoso,DC=com - Entrada alternativa: [emplStatus] = "741", [empJobNavCustomString13] = "LOC9999" (não definido)
-
Saída alternativa:
OU=SFProvisoinngUsers,DC=contoso,DC=com(padrão)
Atribuição de UO baseada no país
Cenário 1: você deseja colocar usuários em diferentes UOs com base em seu país com uma UO desabilitada para usuários inativos.
Atributo de destino: 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"
)
Exemplo:
- Valores de entrada: [activeEmploymentsCount] = "1", [país] = "México"
-
Saída da expressão:
OU=Mexico,OU=Accounts,DC=corp,DC=contoso,DC=com - Entrada alternativa: [activeEmploymentsCount] = "0", [país] = "Suécia"
-
Saída alternativa:
OU=DisabledAccounts,OU=Accounts,DC=corp,DC=contoso,DC=com(os usuários desabilitados vão para a UO especial independentemente do país) - Entrada alternativa: [activeEmploymentsCount] = "1", [país] = "Alemanha"
-
Saída alternativa:
OU=Accounts,DC=corp,DC=contoso,DC=com(UO padrão para países não definidos especificamente)
Nomes de processamento e exibição de nomes
Geração de nome comum (CN)
Cenário 1: você deseja gerar um nome comum exclusivo com opções de fallback para duplicatas.
Atributo de destino: cn
SelectUniqueValue(
NormalizeDiacritics(Join(" ", [firstName], [lastName])),
NormalizeDiacritics(Join(" ", [firstName], Mid([middleName],1,1), [lastName])),
NormalizeDiacritics(Join(" ", [firstName], [middleName], [lastName]))
)
Exemplo:
- Valores de entrada: [firstName] = "José", [lastName] = "García", [middleName] = "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)
Nome de exibição com nomes preferenciais
Cenário 1: Você precisa criar um nome de exibição que use o nome preferencial quando disponível, caso contrário, retornará ao nome.
Atributo de destino: 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), )))
Exemplo:
- Valores de entrada: [lastName] = "JOHNSON", [preferredName] = "Mike", [firstName] = "Michael"
-
Saída da expressão:
Johnson, Mike - Entrada alternativa: [lastName] = "SMITH", [preferredName] = "", [firstName] = "Robert"
-
Saída alternativa:
Smith, Robert
Nome de exibição com sufixos numéricos
Cenário 1: você deseja gerar nomes de exibição exclusivos com sufixos numéricos para duplicatas.
Atributo de destino: 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])))
)
Exemplo:
- Valores de entrada: [lastName] = "García", [preferredName] = "Mike", [firstName] = "Michael"
-
Saída da expressão:
Garcia, Mike(ouGarcia2, Mikese a primeira opção for tomada, etc.) - Entrada alternativa: [lastName] = "Smith", [preferredName] = "", [firstName] = "John"
-
Saída alternativa:
Smith, John(ouSmith2, Johnse a primeira opção for tomada, etc.)
Geração de SamAccountName
Geração básica de samAccountName
Cenário 1: você deseja criar um samAccountName usando o nome inicial e o sobrenome com a sanitização de caractere adequada.
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] = "José", [lastName] = "García-López"
-
Saída da expressão:
jgarcialopez(oujgarcialopez1se a primeira opção for tomada oujgarcialopez2se as duas primeiras forem tomadas)
SamAccountName com comprimento de nome variável
Cenário 1: você deseja manipular duplicatas aumentando o número de caracteres do nome.
Atributo de destino: 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), , "(\\.)*$", , "", , )
)
Exemplo:
- Valores de entrada: [firstName] = "Christopher", [lastName] = "Anderson"
-
Saída da expressão:
canderson(ouchandersonse a primeira opção for tomada ouchrandersonse as duas primeiras forem tomadas) - Entrada alternativa: [firstName] = "María", [lastName] = "Rodríguez-Santos"
-
Saída alternativa:
mrodriguezsantos(oumarodriguezsantosse a primeira opção for tomada oumarrodriguezsantosse as duas primeiras forem tomadas)
SamAccountName do nome de usuário externo
Cenário 1: você deseja extrair a parte do nome de usuário de um nome de usuário externo no estilo email.
Atributo de destino: sAMAccountName
Replace(Mid(Replace(Replace([username],,"(?<id>.*)@(?<domain>.*)",,"${id}",,), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , )
Exemplo:
- Valores de entrada: [nome de usuário] = "john.smith@external.com"
-
Saída da expressão:
johnsmith
Configuração de ProxyAddresses
Configuração básica de proxyAddresses
Cenário 1: você deseja definir vários endereços proxy, incluindo endereços SMTP primários e secundários.
Atributo de destino: 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"))
),
","
)
Exemplo:
- Valores de Entrada: [personIdExternal] = "12345", [firstName] = "John", [lastName] = "Smith"
-
Saída da expressão:
["smtp:A12345@contoso.mail.onmicrosoft.com", "smtp:A12345@contoso.com", "SMTP:John.Smith@contoso.com"]
ProxyAddresses baseado em divisão
Cenário 1: você precisa de configurações de endereço proxy diferentes com base na divisão de funcionários.
Atributo de destino: 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])
)
),
","
)
Exemplo:
- Valores de Entrada: [divisionId] = "STANDARD", [personIdExternal] = "67890", [firstName] = "Sarah", [lastName] = "Johnson"
-
Saída da expressão:
["smtp:A67890@woodgrove.mail.onmicrosoft.com", "smtp:A67890@woodgrove.com", "SMTP:Sarah.Johnson@woodgrove.com"] - Entrada alternativa: [divisionId] = "EXEC", [firstName] = "Michael", [lastName] = "Brown", [email] = "mbrown@fabrikam.com"
-
Saída alternativa:
["smtp:Michael.Brown@contoso.com", "SMTP:mbrown@fabrikam.com"]
ProxyAddresses específicos da empresa
Cenário 1: você deseja gerar endereços proxy com base na afiliação da empresa.
Atributo de destino: 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"))
)
)
Exemplo:
- Valores de Entrada: [empresa] = "NGC", [firstName] = "Trinidad", [lastName] = "Williams", [middleName] = "James"
-
Saída da expressão:
SMTP:trinidad.williams@contoso.com(ouSMTP:trinidad.j.williams@contoso.comse a primeira opção for tomada) - Entrada alternativa: [empresa] = "National Energy", [firstName] = "Rebecca", [lastName] = "Thompson", [middleName] = "Marie"
-
Saída alternativa:
SMTP:r.thompson@fabrikam.com(ouSMTP:r.m.thompson@fabrikam.comse a primeira opção for tomada) - Entrada alternativa: [empresa] = "Other Company", [firstName] = "David", [lastName] = "Jones", [middleName] = "Paul"
-
Saída alternativa:
SMTP:david.jones@contoso.com(domínio padrão ouSMTP:david.p.jones@contoso.comse a primeira opção for tomada)
Processamento de número de telefone
Extração de número de telefone básico
Cenário 1: você deseja extrair a parte do número de telefone sem o código do país.
Atributo de destino: telephoneNumber
Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Exemplo:
- Valores de entrada: [móvel] = "+1 (555) 123-4567"
-
Saída da expressão:
5551234567
Cenário 2: você precisa extrair apenas o código do país de um número de telefone.
Atributo de destino: c
Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), ,"[()\\s-]+", ,"", , )
Exemplo:
- Valores de entrada: [móvel] = "+44 20 7946 0958"
-
Saída da expressão:
44
Padrões de número de telefone
Cenário 1: você deseja fornecer números de telefone padrão quando o campo estiver vazio.
Atributo de destino: telephoneNumber
IIF(IsNullOrEmpty([telephoneNumber]),"000-000-0000",[telephoneNumber])
Switch([mobile],[mobile],"","000-000-0000")
Exemplo:
- Valores de entrada: [telephoneNumber] = ""
-
Saída da expressão:
000-000-0000 - Entrada alternativa: [móvel] = "555-123-4567"
-
Saída alternativa:
555-123-4567
Lógica do telefone primário
Cenário 1: você precisa determinar qual número de telefone deve ser marcado como primário.
Atributo de destino: 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")
Exemplo:
- Valores de entrada: [businessPhoneIsPrimary] = "true", [cellPhoneIsPrimary] = "false"
-
Saída da expressão:
business phone is primary - Entrada alternativa: [businessPhoneIsPrimary] = "false", [cellPhoneIsPrimary] = "true"
-
Saída alternativa:
cell phone is primary - Entrada alternativa: [businessPhoneIsPrimary] = "", [cellPhoneIsPrimary] = "true"
-
Saída alternativa:
cell phone is primary
Lógica baseada em país e local
Mapeamento de código do país
Cenário 1: você deseja mapear nomes de país para códigos de país ISO.
Atributo de destino: c
Switch([country], ,
"Trinidad and Tobago", "TT",
"Barbados", "BB"
)
Exemplo:
- Valores de entrada: [país] = "Trinidad e Tobago"
-
Saída da expressão:
TT
Cenário 2: você precisa mapear países para códigos de país numéricos.
Atributo de destino: countryCode
Switch([country], ,
"Trinidad and Tobago", "780",
"Barbados", "52"
)
Exemplo:
- Valores de entrada: [país] = "Barbados"
-
Saída da expressão:
52
Domínios de email baseados em localização
Cenário 1: você deseja atribuir domínios de email diferentes com base na localização geográfica.
Atributo de destino: email
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")
)
)
Exemplo:
- Valores de entrada: [país] = "Índia", [firstName] = "Raj", [lastName] = "Patel"
-
Saída da expressão:
raj.patel@fabrikam.com(ou1raj.patel@fabrikam.comse a primeira opção for tomada) - Entrada alternativa: [país] = "Países Baixos", [firstName] = "Jan", [lastName] = "van der Berg"
-
Saída alternativa:
jan.vanderberg@contoso.com(ou1jan.vanderberg@contoso.comse a primeira opção for tomada) - Entrada alternativa: [país] = "Alemanha", [firstName] = "Klaus", [lastName] = "Müller"
-
Saída alternativa:
klaus.muller@fabrikam.com(domínio padrão ou1klaus.muller@fabrikam.comse a primeira opção for tomada)
Classificação de funcionários e funcionários contingentes
Classificação de tipo de emprego
Cenário 1: você deseja mapear códigos de tipo de funcionário para descrições legíveis.
Atributo de destino: extensionAttribute3
Switch([employeeType],"Default-value",
"31202","Employee",
"31230","Contractor"
)
Exemplo:
- Valores de entrada: [employeeType] = "31202"
-
Saída da expressão:
Employee - Entrada alternativa: [employeeType] = "99999"
-
Saída alternativa:
Default-value
Identificação de trabalhador contingente
Cenário 1: você precisa identificar e lidar com trabalhadores contingentes de forma diferente.
Atributo de destino: extensionAttribute4
Switch([isContingentWorker], "N/A", "True", "Contractor", "False", "Employee")
Exemplo:
- Valores de entrada: [isContingentWorker] = "True"
-
Saída da expressão:
Contractor
Mapeamento de título pessoal
Cenário 1: você deseja mapear códigos de título pessoais para títulos adequados.
IgnoreFlowIfNullOrEmpty(Switch([personalTitle], "", "4443", "Dr.", "4444", "Prof.", "4445", "Prof. Dr."))
Exemplo:
- Valores de entrada: [personalTitle] = "4443"
-
Saída da expressão:
Dr. - Entrada alternativa: [personalTitle] = ""
- Saída alternativa: (vazia - ignorada)
Cenários avançados
Tratamento condicional do departamento
Cenário 1: você deseja usar o departamento de atribuição global quando disponível, caso contrário, volte para o departamento regular.
Atributo de destino: departamento
Switch([globalAssignmentDepartment],[globalAssignmentDepartment],
"",[department])
Exemplo:
- Valores de entrada: [globalAssignmentDepartment] = "TI Global", [departamento] = "TI local"
-
Saída da expressão:
Global IT - Entrada alternativa: [globalAssignmentDepartment] = "", [departamento] = "Vendas"
-
Saída alternativa:
Sales
Tratamento de email de exclusão reversível
Cenário 1: você precisa modificar endereços de email quando os usuários são excluídos suavemente para cenários de write-back.
Atributo de destino: email
IIF([IsSoftDeleted]="True", Join("_",FormatDateTime(Now(), , "M/d/yyyy h:mm:ss tt", "yyyy-MM-dd"),[mail]), [mail])
Exemplo:
- Valores de entrada: [IsSoftDeleted] = "True", [mail] = "john.smith@company.com" (data atual: 2025-07-30)
-
Saída da expressão:
2025-07-30_john.smith@company.com - Entrada alternativa: [IsSoftDeleted] = "False", [mail] = "jane.doe@company.com"
-
Saída alternativa:
jane.doe@company.com
Atribuição de UO complexa com lógica de terminação
Cenário 1: você deseja mover usuários encerrados para uma UO especial após um número específico de dias.
Atributo de destino: 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"
)
)
Exemplo:
- Valores de entrada: [latestTerminationDate] = "2025-07-10", [departamento] = "Engenharia" (data atual: 2025-07-30)
-
Saída da expressão:
OU=DELETED,DC=company,DC=com(encerrada há mais de 14 dias) - Entrada alternativa: [latestTerminationDate] = "2025-07-25", [departamento] = "Finance"
-
Saída alternativa:
OU=Finance,DC=company,DC=com(encerrada há menos de 14 dias)
Geração UPN de várias empresas com classe de funcionário
Cenário 1: você precisa gerar UPNs com base nas informações de classe da empresa e dos funcionários.
Atributo de destino: 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")
)
)
Exemplo:
- Valores de entrada: [employeeClass] = "1915", [firstName] = "Anna", [lastName] = "Johnson"
-
Saída da expressão:
anna.johnson@fabrikam.com(ou01anna.johnson@fabrikam.comse a primeira opção for tomada)
Apostrophe e tratamento de caracteres especiais
Cenário 1: você precisa remover apóstrofos e traços de endereços de email para compatibilidade do Azure AD Connect.
Atributo de destino: email
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"), , "['-]+", , "", , )
)
Exemplo:
- Valores de Entrada: [divisionId] = "1200", [preferredName] = "Mary-Ann", [firstName] = "Mary", [lastName] = "O'Connor"
-
Saída da expressão:
maryann.oconnor@contoso.com(apóstrofos e traços removidos) - Entrada alternativa: [divisionId] = "8900", [email] = "existing.user@company.com"
-
Saída alternativa:
existing.user@company.com
Geração de endereço SIP
Cenário 1: você deseja gerar endereços SIP para integração do Skype for Business/Teams.
Atributo de destino: 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"))
)
Exemplo:
- Valores de entrada: [firstName] = "David", [lastName] = "Wilson"
-
Saída da expressão:
sip:david.wilson@contoso.com(ousip:01david.wilson@contoso.comse a primeira opção for tomada) - Entrada alternativa: [firstName] = "María José", [lastName] = "González-Perez"
-
Saída alternativa:
sip:mariajose.gonzalezperez@contoso.com(ousip:01mariajose.gonzalezperez@contoso.comse a primeira opção for tomada ousip:02mariajose.gonzalezperez@contoso.comse as duas primeiras forem tomadas)
Lógica condicional de write-back
Cenário 1: você deseja escrever condicionalmente endereços de email com base em critérios de data específicos.
Atributo de destino: mailNickname
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([extensionAttribute9])) <> 1, "", [mail]))
Exemplo:
- Valores de entrada: [extensionAttribute9] = "2025-07-31", [email] = "user@company.com" (data atual: 2025-07-30)
- Saída da expressão: (vazia – ignorada, pois a diferença de data é de 1 dia)
- Entrada alternativa: [extensionAttribute9] = "2025-08-01", [email] = "user@company.com"
-
Saída alternativa:
user@company.com
Cenário 2: você precisa lidar com atributos ausentes em cenários de write-back.
Atributo de destino: mailNickname
IgnoreFlowIfNullOrEmpty(IIF(IsPresent([extensionAttribute9]),IIF(DateDiff("d", Now(), CDate([extensionAttribute9])) <> 1, "", [mail]),"noemail@contoso.com"))
Exemplo:
- Valores de entrada: [extensionAttribute9] = "" (vazio), [email] = "user@company.com"
-
Saída da expressão:
noemail@contoso.com - Entrada alternativa: [extensionAttribute9] = "2025-08-01", [email] = "user@company.com" (data atual: 2025-07-30)
-
Saída alternativa:
user@company.com
Práticas recomendadas
Use SelectUniqueValue para todos os atributos que exigem exclusividade (UPN, samAccountName, email).
Manipular valores nulos e vazios usando funções como
IsNullOrEmpty,IsPresent,SwitchouCoalesce.Use NormalizeDiacritics e StripSpaces ao processar nomes para garantir a compatibilidade entre sistemas.
Valide expressões JSONPath em um testador JSONPath antes de implementar em produção.
Use a formatação de data adequada ao trabalhar com campos de data SuccessFactors para evitar erros de conversão.
Considere fusos horários ao trabalhar com comparações de data e lógica de expiração da conta.
Use IgnoreFlowIfNullOrEmpty para fluxos de atributo condicional e cenários de write-back.
Teste instruções complexas do Switch completamente, pois elas podem se tornar difíceis de depurar.
Documente claramente a lógica de negócios, especialmente para regras complexas de gerenciamento de contas e status de emprego.
Use padrões regex com cuidado e valide-os em testadores regex online antes da implementação.