Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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 provisionamento de usuário do Microsoft Entra ID. Essas funções ajudam a transformar e mapear dados de SuccessFactors para criar atributos de usuário apropriados no Microsoft Entra ID.
Índice
- Funções de manipulação de cadeia de caracteres
- Geração de endereços de e-mail
- Lógica de gerenciamento de contas
- Funções de data e expiração da conta
- Atribuição de unidade organizacional (UO)
- Processamento de nomes e nomes de exibição
- Geração de SamAccountName
- Configuração de ProxyAddresses
- Processamento do número de telefone
- Lógica baseada no país e na localização
- Classificação de empregados e trabalhadores 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 preencher um 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 de expressão:
00012345
Cenário 2: Você precisa preencher 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 de expressão:
0000000567
Cenário 3: Você deseja criar uma ID de funcionário anexando 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 de expressão:
05000789
Conversão de maiúsculas e minú
Cenário 1: Você precisa converter nomes de todas as letras maiúsculas para maiúsculas (Title Case).
Atributo de destino: sn
Join("",Mid([lastName],1,1),ToLower(Mid([lastName],2,64)))
Exemplo:
- Valores de entrada: [lastName] = "JOHNSON"
-
Saída de expressão:
Johnson
Cenário 2: Você deseja criar um nome de exibição com 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 de expressão:
Smith, John
Cenário 3: Você precisa lidar com nomes com espaços substituindo espaços por pontos.
Atributo de destino: givenName
Replace([firstName]," ", , ,".", , )
Exemplo:
- Valores de entrada: [firstName] = "Mary Ann"
-
Saída de expressão:
Mary.Ann
Geração de endereços de e-mail
Geração básica de e-mails
Cenário 1: Você deseja gerar endereços de e-mail usando nome e sobrenome com domínios específicos da empresa.
Atributo de destino: mail
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 de expressão:
john.smith@contoso.com(oujohn.m.smith@contoso.comse a primeira opção for tomada)
Geração de e-mail baseada em grupo de funcionários
Cenário 1: Você deseja gerar diferentes formatos de e-mail com base na classificação dos funcionários (permanente versus temporário).
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 de expressão:
sarah.wilson_ext@ltts.com
Validação de domínio corporativo
Cenário 1: Você deseja fluir apenas endereços de e-mail que pertencem a um domínio corporativo específico.
Atributo de destino: mail
IgnoreFlowIfNullOrEmpty(IIF(InStr([emailAddress],"@contoso.com")=0,"",[emailAddress]))
Exemplo:
- Valores de entrada: [emailAddress] = "john.doe@contoso.com"
-
Saída de expressão:
john.doe@contoso.com - Entrada alternativa: [emailAddress] = "john.doe@external.com"
- Saída alternativa: (vazio - ignorado)
Preservação de e-mail existente
Cenário 1: Você deseja usar o e-mail existente do SuccessFactors para determinadas divisões, mas gerar novas 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 de 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 contas
Estado da conta básica
Cenário 1: Você deseja determinar se uma conta deve ser desativada 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 de expressão:
False(conta habilitada) - Entrada alternativa: [emplStatus] = "746"
-
Saída alternativa:
True(conta desativada)
Ocultar da lógica das listas de endereços
Cenário 1: Você precisa definir o atributo msExchHideFromAddressLists com base nas datas de início e fim.
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 de expressão:
FALSE(não oculto das listas de endereços) - Entrada alternativa: [startDate] = "2025-01-15", [endDate] = "2025-06-30"
-
Saída alternativa:
TRUE(oculta das 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 de expressão:
False(conta habilitada) - Entrada alternativa: [empNavCustomString3] = "62220", [cust_hiredate] = "2025-07-27", [cust_customDate67] = "2025-07-29"
-
Saída alternativa:
True(conta desativada)
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 final de 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 de 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 no 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/01/1990 12:00:00 AM"
-
Saída de 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 no motivo do evento
Cenário 1: Você deseja definir a expiração da conta com base em eventos de encerramento específicos e datas de desligamento.
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: [event] = "SEVUNSATP", [severanceStartDate] = "8/15/2025 12:00:00 AM"
-
Saída de expressão:
133877247990000000(representação numérica de 2025-08-15 23:59:59-08:00) - Entrada alternativa: [event] = "REGULAR", [latestTerminationDate] = "9/30/2025 12:00:00 AM"
-
Saída alternativa:
133886207990000000(representação numérica de 2025-09-30 23:59:59-08:00)
Tratamento de formato de data
Cenário 1: Você precisa lidar com datas inválidas como "31/12/9999" que causam erros em 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 de expressão:
441481535990000000(representação numérica de 2099-12-31T23:59:59-04:00) - Entrada alternativa: [endDate] = "15/08/2025 12:00:00 AM"
-
Saída alternativa:
133877283990000000(representação numérica de 2025-08-15T23:59:59-04:00)
Atribuição de unidade organizacional (UO)
Atribuição de UO baseada em departamento
Cenário 1: Você deseja colocar os usuários em UOs diferentes 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] = "Engenharia SG"
-
Saída de 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 no status de emprego
Cenário 1: Você precisa atribuir usuários a UOs diferentes 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 de 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 UOs diferentes 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", [country] = "México"
-
Saída de expressão:
OU=Mexico,OU=Accounts,DC=corp,DC=contoso,DC=com - Entrada alternativa: [activeEmploymentsCount] = "0", [país] = "Suécia"
-
Saída alternativa: (usuários com deficiência vão para UO especial,
OU=DisabledAccounts,OU=Accounts,DC=corp,DC=contoso,DC=comindependentemente 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)
Processamento de nomes e nomes de exibição
Geração de denominação comum (NC)
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 de expressão:
Jose Garcia(ouJose A Garciase a primeira opção for tomada, ouJose Antonio Garciase as duas primeiras forem tomadas)
Nome para exibição com nomes preferidos
Cenário 1: Você precisa criar um nome de exibição que use o nome preferencial quando disponível, caso contrário, recorre ao primeiro 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 de expressão:
Johnson, Mike - Entrada alternativa: [lastName] = "SMITH", [preferredName] = "", [firstName] = "Robert"
-
Saída alternativa:
Smith, Robert
Nome para 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 de 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 primeiro nome e o sobrenome com a limpeza de caracteres 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 de expressão:
jgarcialopez(oujgarcialopez1se a primeira opção for tomada, oujgarcialopez2se as duas primeiras forem tomadas)
SamAccountName com comprimento variável do nome próprio
Cenário 1: Você deseja lidar com duplicatas aumentando o número de caracteres do primeiro 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 de 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 de email.
Atributo de destino: sAMAccountName
Replace(Mid(Replace(Replace([username],,"(?<id>.*)@(?<domain>.*)",,"${id}",,), , "([\\/\\\\\\[\\]\\:\\;\\|\\=\\,\\+\\*\\?\\<\\>])", , "", , ), 1, 20), , "(\\.)*$", , "", , )
Exemplo:
- Valores de entrada: [username] = "john.smith@external.com"
-
Saída de 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 de expressão:
["smtp:A12345@contoso.mail.onmicrosoft.com", "smtp:A12345@contoso.com", "SMTP:John.Smith@contoso.com"]
ProxyAddresses baseados em divisão
Cenário 1: Você precisa de diferentes configurações de endereço proxy 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 de 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"]
Endereços proxy 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 de expressão:
SMTP:trinidad.williams@contoso.com(ouSMTP:trinidad.j.williams@contoso.comse a primeira opção for tomada) - Entrada alternativa: [empresa] = "Energia Nacional", [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] = "Outra Empresa", [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 do número de telefone
Extração básica de número de telefone
Cenário 1: Você deseja extrair a parte do número de telefone sem o código do país.
Atributo de destino: phoneNumber
Replace(Replace([mobile], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
Exemplo:
- Valores de entrada: [mobile] = "+1 (555) 123-4567"
-
Saída de 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: [mobile] = "+44 20 7946 0958"
-
Saída de 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: phoneNumber
IIF(IsNullOrEmpty([telephoneNumber]),"000-000-0000",[telephoneNumber])
Switch([mobile],[mobile],"","000-000-0000")
Exemplo:
- Valores de entrada: [phoneNumber] = ""
-
Saída de expressão:
000-000-0000 - Entrada alternativa: [mobile] = "555-123-4567"
-
Saída alternativa:
555-123-4567
Lógica do telefone principal
Cenário 1: Você precisa determinar qual número de telefone deve ser marcado como principal.
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 de 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 no país e na localização
Mapeamento de código de país
Cenário 1: Você deseja mapear nomes de países 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 de expressão:
TT
Cenário 2: Você precisa mapear países para códigos numéricos de país.
Atributo de destino: countryCode
Switch([country], ,
"Trinidad and Tobago", "780",
"Barbados", "52"
)
Exemplo:
- Valores de entrada: [país] = "Barbados"
-
Saída de expressão:
52
Domínios de e-mail baseados em localização
Cenário 1: Você deseja atribuir diferentes domínios de e-mail com base na localização geográfica.
Atributo de destino: mail
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: [country] = "India", [firstName] = "Raj", [lastName] = "Patel"
-
Saída de 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", [nome] = "Klaus", [sobrenome] = "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 empregados e trabalhadores contingentes
Classificação do 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 de expressão:
Employee - Entrada alternativa: [employeeType] = "99999"
-
Saída alternativa:
Default-value
Identificação de trabalhadores contingentes
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 de 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 de expressão:
Dr. - Entrada alternativa: [personalTitle] = ""
- Saída alternativa: (vazio - ignorado)
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] = "Global IT", [department] = "Local IT"
-
Saída de expressão:
Global IT - Entrada alternativa: [globalAssignmentDepartment] = "", [department] = "Sales"
-
Saída alternativa:
Sales
Tratamento de e-mail de exclusão suave
Cenário 1: Você precisa modificar endereços de e-mail quando os usuários são excluídos suavemente para cenários de write-back.
Atributo de destino: mail
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 de 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", [department] = "Engineering" (data atual: 2025-07-30)
-
Saída de expressão:
OU=DELETED,DC=company,DC=com(encerrado há mais de 14 dias) - Entrada alternativa: [latestTerminationDate] = "2025-07-25", [department] = "Finance"
-
Saída alternativa:
OU=Finance,DC=company,DC=com(terminada há menos de 14 dias)
Geração de UPN multi-empresa com classe de funcionários
Cenário 1: Você precisa gerar UPNs com base nas informações da empresa e da classe 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 de expressão:
anna.johnson@fabrikam.com(ou01anna.johnson@fabrikam.comse a primeira opção for tomada)
Apóstrofo e manuseamento 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: mail
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 de 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ços 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 de 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-Pérez"
-
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 e-mail 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", [mail] = "user@company.com" (data atual: 2025-07-30)
- Saída da expressão: (vazio - ignorado, pois a diferença de data é de 1 dia)
- Entrada alternativa: [extensionAttribute9] = "2025-08-01", [mail] = "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), [mail] = "user@company.com"
-
Saída de expressão:
noemail@contoso.com - Entrada alternativa: [extensionAttribute9] = "2025-08-01", [mail] = "user@company.com" (data atual: 2025-07-30)
-
Saída alternativa:
user@company.com
Melhores práticas
Use SelectUniqueValue para todos os atributos que exigem exclusividade (UPN, samAccountName, email).
Manipule 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 na produção.
Use a formatação de data adequada ao trabalhar com campos de data SuccessFactors para evitar erros de conversão.
Considere os fusos horários ao trabalhar com comparações de data e lógica de expiração de conta.
Use IgnoreFlowIfNullOrEmpty para fluxos de atributos condicionais e cenários de write-back.
Teste instruções complexas do Switch completamente, pois elas podem se tornar difíceis de depurar.
Documente a lógica de negócios com clareza, especialmente para status de emprego complexo e regras de gerenciamento de contas.
Use padrões de regex cuidadosamente e valide-os em testadores de regex on-line antes da implementação.