이 문서에서는 Workday를 온-프레미스 Active Directory/Microsoft Entra ID 사용자 프로비저닝으로 구성할 때 일반적으로 사용되는 식 매핑 함수에 대한 포괄적인 가이드를 제공합니다. 이러한 함수는 Workday에서 데이터를 변환하고 매핑하여 Microsoft Entra ID에서 적절한 사용자 특성을 만드는 데 도움이 됩니다.
목차
- 문자열 조작 함수
- 전자 메일 주소 생성
- 전화 번호 처리
- Active Directory에 대한 계정 상태 논리
- Microsoft Entra ID에 대한 계정 상태 논리
- 날짜 함수
- OU(조직 구성 단위) 할당
- 임의 ID 생성
- 이름 처리
문자열 조작 함수
기본 문자열 작업
시나리오 1: 공백, 대괄호 및 대시를 제거하여 Workday에서 오는 전화 번호 값을 정리하려고 합니다.
대상 특성: phoneNumber, mobile
Replace([PrimaryWorkTelephone], , "[()\\s-]+", , "", , )
Replace([Mobile], , "[()\\s-]+", , "", , )
본보기:
- 입력 값: [PrimaryWorkTelephone] = "+1 (555) 123-4567"
-
식의 출력:
+15551234567
시나리오 2: "FirstName LastName"이 포함된 필드에서 성을 추출 PreferredNameData 해야 합니다.
대상 특성: sn 온-프레미스 Active Directory의 surname Microsoft Entra ID
Replace([PreferredNameData], , "(?<firstName>[a-zA-Z]+ )(?<lastName>[a-zA-Z]+)", ,"${lastName}", ,)
본보기:
- 입력 값: [PreferredNameData] = "John Smith"
-
식의 출력:
Smith
시나리오 3: 온-프레미스 Active Directory 또는 Microsoft Entra ID의 직원 ID와 일치하기 전에 작업자 ID에서 선행 0을 제거하려고 합니다.
대상 특성: employeeId
Replace([WorkerID], , "(?<leadingZeros>^0+)(?<actualValue>[a-zA-Z0-9]+)", , "${actualValue}", ,)
본보기:
- 입력 값: [WorkerID] = "00012345"
-
식의 출력:
12345
시나리오 4: 특성에는 HereditarySuffix 국가 ISO 코드로 태그가 지정된 접미사 정보가 포함되어 있으며 접미사 정보만 추출하여 성에 추가하려고 합니다.
대상 특성: sn 온-프레미스 Active Directory의 surname Microsoft Entra ID
Join(" ",Replace([HereditarySuffix], ,"(?<CountryISOCode>.*)_(?<suffix1>.*)_(?<suffix2>.*)[0-9]", ,"${suffix1} ${suffix2}", , ),[PreferredLastName])
본보기:
- 입력 값: [HereditarySuffix] = "NLD_Van_der3", [PreferredLastName] = "Hof"
-
식의 출력:
Van der Hof
텍스트 대/소문자 변환
시나리오 1: 텍스트를 적절한 사례로 변환해야 하지만 아포스트로피를 올바르게 처리해야 합니다(예: "st john's Hospital"은 "St John's Hospital"이 되어야 함).
대상 특성: 회사
Replace(PCase("st john's hospital"),"'S", , ,"'s", , )
본보기:
- 입력 값: 정적 텍스트 "st john's hospital"
-
식의 출력:
St John's Hospital
시나리오 2: 이름과 성에서 소문자 사용자 이름을 만들려고 합니다.
대상 특성: mailNickname
ToLower(NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))))
본보기:
- 입력 값: [PreferredFirstName] = "José", [PreferredLastName] = "García-López"
-
식의 출력:
jose.garcia-lopez
국가별 명명 논리
시나리오 1: 사용자의 국가에 따라 다른 명명 규칙을 적용해야 합니다(예: 특정 국가의 경우 "마지막, 첫 번째").
대상 특성: displayName, cn
Switch([CountryReferenceTwoLetter],
Join(" ", [PreferredFirstName], [PreferredLastName]),
"HU", Join(",", [PreferredLastName], [PreferredFirstName]),
"JP", Join(",", [PreferredLastName], [PreferredFirstName]),
"KR", Join(",", [PreferredLastName], [PreferredFirstName])
)
본보기:
- 입력 값: [CountryReferenceTwoLetter] = "JP", [PreferredFirstName] = "Hiroshi", [PreferredLastName] = "Tanaka"
-
식 출력:
Tanaka,Hiroshi(일본어 명명 규칙) - 대체 입력: [CountryReferenceTwoLetter] = "US", [PreferredFirstName] = "John", [PreferredLastName] = "Smith"
-
대체 출력:
John Smith(기본 서부 명명 규칙)
전자 메일 주소 생성
기본 전자 메일 생성
시나리오 1: 이름과 성을 조인하고 공백과 특수 문자를 제거하고 도메인을 추가하여 전자 메일 주소를 생성하려고 합니다.
대상 특성: 메일
Join("@", NormalizeDiacritics(StripSpaces(Join(".", [PreferredFirstName], [PreferredLastName]))), "contoso.com")
본보기:
- 입력 값: [PreferredFirstName] = "María", [PreferredLastName] = "José González"
-
식의 출력:
maria.josegonzalez@contoso.com
시나리오 2: 전자 메일 주소를 생성할 때 이름에 따옴표 및 쉼표와 같은 특수 문자를 처리해야 합니다.
대상 특성: 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")
)
본보기:
- 입력 값: [PreferredFirstName] = "Mary-Ann", [PreferredLastName] = "O'Connor"
-
식 출력:
maryann.oconnor@contoso.com(또는m.oconnor@contoso.com첫 번째 옵션을 사용하거나ma.oconnor@contoso.com처음 두 옵션을 사용할 경우)
회사별 전자 메일 도메인
시나리오 1: 여러 회사가 있으며 회사에 따라 서로 다른 도메인 접미사를 사용하여 전자 메일 주소를 생성해야 합니다.
대상 특성: 메일
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")
)
본보기:
- 입력 값: [Company] = "Fabrikam", [FirstName] = "John", [LastName] = "Smith"
-
식의 출력:
john.smith@fabrikam.com - 대체 입력: [회사] = "Woodgrove", [FirstName] = "Sarah", [LastName] = "Johnson"
-
대체 출력:
s.johnson@woodgrove.com
ProxyAddresses 구성
시나리오 1: 기본 및 보조 SMTP 주소를 포함하여 Exchange에 대해 여러 프록시 주소를 설정해야 합니다.
대상 특성: 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"))
), ","
)
본보기:
- 입력 값: [PreferredFirstName] = "Michael", [PreferredLastName] = "Brown"
-
식의 출력:
["smtp:michael.brown@contoso.mail.onmicrosoft.com", "smtp:michael.brown@contoso.onmicrosoft.com", "SMTP:michael.brown@contoso.com"]
전화 번호 처리
이러한 식 매핑은 Workday 쓰기 저장 애플리케이션에서 사용할 수 있습니다.
국제 전화 번호 구문 분석
시나리오 1: 국제 형식의 전화 번호(+1 737-626-8331)가 있으며 국가 코드 없이 전화 번호만 추출해야 합니다.
대상 특성: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
본보기:
- 입력 값: [telephoneNumber] = "+1 737-626-8331"
-
식의 출력:
7376268331
시나리오 2: 디렉터리 용도로 국가를 확인하려면 전화 번호에서 국가 코드를 추출해야 합니다.
대상 특성: c
Switch(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.*)", , "${isdCode}", , ), "USA",
"1", "USA",
"44", "GBR",
"49", "DEU"
)
본보기:
- 입력 값: [telephoneNumber] = "+44 20 7946 0958"
-
식의 출력:
GBR - 대체 입력: [telephoneNumber] = "+1 555-123-4567"
-
대체 출력:
USA
시나리오 3: Microsoft Teams에서 생성하고 Microsoft Entra ID로 설정하는 전화 번호를 쓰기 저장해야 합니다(예: +4926180001111). 이 전화 번호에는 CountryCode와 실제 전화 번호 사이에 공백이 없습니다. 다음 정규식 구문 분석 메커니즘을 사용하여 조직과 관련된 국가 코드를 추출하고 이를 사용하여 Workday CountryCodeName를 설정할 수 있습니다.
대상 특성: 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")
본보기:
- 입력 값: [telephoneNumber] = "+493012345678"
-
식의 출력:
GER - 대체 입력: [telephoneNumber] = "+919876543210"
-
대체 출력:
IND - 대체 입력: [telephoneNumber] = "+15551234567"
-
대체 출력:
USA
다른 시스템에 대한 전화 번호 서식 지정
시나리오 1: 확장이 포함된 전화 번호(예: "+1 (206) 291-8163 x8125")를 처리해야 합니다.
대상 특성: telephoneNumber
Replace(Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${phoneNumber}", , ), ,"[()\\s-]+", ,"", , )
본보기:
- 입력 값: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
식의 출력:
2062918163
시나리오 2: 전화 번호에서 확장만 추출하려고 합니다.
대상 특성: extensionAttribute1
Replace([telephoneNumber], , "\\+(?<isdCode>\\d* )(?<phoneNumber>.* )[x](?<extension>.*)", , "${extension}", , )
본보기:
- 입력 값: [telephoneNumber] = "+1 (206) 291-8163 x8125"
-
식의 출력:
8125
Active Directory에 대한 계정 상태 논리
이 섹션의 식은 "Workday에서 accountDisabled 온-프레미스 Active Directory 사용자 프로비저닝 앱"의 일부인 특성에 적용할 수 있습니다. "Workday에서 Microsoft Entra ID 사용자 프로비저닝 앱"의 일부인 특성을 설정 accountEnabled 하려면 Microsoft Entra ID에 대한 계정 상태 논리 섹션을 참조하세요.
기본 계정 상태 관리
시나리오 1: Workday에서 활성화되지 않은 사용자에 대해 온-프레미스 Active Directory 계정을 사용하지 않도록 설정하려고 합니다.
대상 특성: accountDisabled
Switch([Active], , "1", "False", "0", "True")
본보기:
- 입력 값: [활성] = "1"
-
식 출력:
False(계정 사용) - 대체 입력: [활성] = "0"
-
대체 출력:
True(계정 사용 안 함)
재시도 처리
시나리오 1: 시나리오 1이 필요합니다. 고용 날짜 또는 이후에만 계정을 사용하도록 설정해야 하는 재수용 시나리오를 처리해야 합니다.
대상 특성: accountDisabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "False", "True"), "False"),
"0", "True")
본보기:
- 입력 값: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15"(현재 날짜: 2025-07-30)
-
식 출력:
True(고용 날짜까지 계정 사용 안 함) - 대체 입력: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
대체 출력:
False(고용 날짜가 지났을 때 사용하도록 설정된 계정)
사전 고용 계정 만들기
시나리오 1: 향후 채용에 대한 계정을 만들지만 시작 날짜 14일 전까지 사용하지 않도록 유지하려고 합니다.
대상 특성: accountDisabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", "True"), "0", "True")
본보기:
- 입력 값: [Active] = "1", [StatusHireDate] = "2025-08-10"(현재 날짜: 2025-07-30)
-
식 출력:
False(고용 날짜로 사용하도록 설정된 계정은 14일 이내임) - 대체 입력: [Active] = "1", [StatusHireDate] = "2025-09-15"
-
대체 출력:
True(고용 날짜가 14일 이상 남았기 때문에 사용하지 않도록 설정된 계정)
채용 철회 처리
시나리오 1: 특성을 설정할 때 고용 철회 시나리오를 accountDisabled 처리해야 합니다. 논리를 구현하려고 합니다.
- terminated = workday에서 1이면 accountDisabled = True
- Rescinded = workday에서 1이면 accountDisabled = True
- Workday에서 활성 =1이면
- 면
- HireDate가 7일 이상 지난 후 accountDisabled = True(계정 사용 안 함)
- HireDate는 <= 7일 후 accountDisabled = False(계정 사용)
- 면
- Active = 0이면 accountDisabled = True
대상 특성: 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"
)
)
)
본보기:
- 입력 값: [Terminated] = "1", [Active] = "1", [StatusHireDate] = "2025-08-15"
-
식 출력:
True(종료로 인해 계정이 비활성화됨) - 대체 입력: [Terminated] = "0", [Rescinded] = "1", [Active] = "1"
-
대체 출력:
True(철회로 인해 계정이 비활성화됨) - 대체 입력: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-15"(현재 날짜: 2025-07-30)
-
대체 출력:
True(고용 날짜가 7일 이상 남았기 때문에 사용하지 않도록 설정된 계정) - 대체 입력: [Terminated] = "0", [Rescinded] = "0", [Active] = "1", [StatusHireDate] = "2025-08-05"
-
대체 출력:
False(채용 날짜가 7일 이내로 설정된 계정)
Microsoft Entra ID에 대한 계정 상태 논리
이 섹션의 식은 "Workday to accountEnabled Microsoft Entra ID 사용자 프로비저닝 앱"의 일부인 특성에 적용할 수 있습니다. "Workday에서 온-프레미스 Active Directory 사용자 프로비저닝 앱으로"의 일부인 특성을 설정 accountDisabled 하려면 Active Directory에 대한 계정 상태 논리 섹션을 참조하세요.
기본 계정 상태 관리
시나리오 1: Workday에서 활성화되지 않은 사용자에 대해 Microsoft Entra ID 계정을 사용하지 않도록 설정하려고 합니다.
대상 특성: accountEnabled
Switch([Active], , "1", "True", "0", "False")
본보기:
- 입력 값: [활성] = "1"
-
식 출력:
True(계정 사용) - 대체 입력: [활성] = "0"
-
대체 출력:
False(계정 사용 안 함)
재시도 처리
시나리오 1: 고용 날짜 또는 이후에만 계정을 사용하도록 설정해야 하는 재수용 시나리오를 처리해야 합니다.
대상 특성: accountEnabled
Switch([Active], ,
"1", IIF([StatusRehire]=1, IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "True", "False"), "True"),
"0", "False")
본보기:
- 입력 값: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-08-15"(현재 날짜: 2025-07-30)
-
식 출력:
False(고용 날짜까지 계정 사용 안 함) - 대체 입력: [Active] = "1", [StatusRehire] = "1", [StatusHireDate] = "2025-07-15"
-
대체 출력:
True(고용 날짜가 지났을 때 사용하도록 설정된 계정)
사전 고용 계정 만들기
시나리오 1: 향후 채용에 대한 계정을 만들지만 시작 날짜 14일 전까지 사용하지 않도록 유지하려고 합니다.
대상 특성: accountEnabled
Switch([Active], , "1", IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "True", "False"), "0", "False")
본보기:
- 입력 값: [Active] = "1", [StatusHireDate] = "2025-08-10"(현재 날짜: 2025-07-30)
-
식 출력:
True(고용 날짜로 사용하도록 설정된 계정은 14일 이내임) - 대체 입력: [Active] = "1", [StatusHireDate] = "2025-09-15"
-
대체 출력:
False(고용 날짜가 14일 이상 남았기 때문에 사용하지 않도록 설정된 계정)
날짜 함수
날짜 서식 지정 및 변환
시나리오 1: Workday 계약 종료 날짜를 accountExpires 특성에 대한 Active Directory 형식으로 변환해야 하므로 계정이 계약 종료 날짜에 만료됩니다.
대상 특성: accountExpires
NumFromDate(Join("", FormatDateTime([ContractEndDate], ,"yyyy-MM-ddzzz", "yyyy-MM-dd"), "T23:59:59-08:00"))
본보기:
- 입력 값: [StatusHireDate] = "2025-12-31"
-
식 출력:
133835135990000000(2025-12-31T23:59:59-07:00의 숫자 표현)
시나리오 2: 채용 날짜로부터 5년 후에 계정 만료 날짜를 설정하려고 합니다.
대상 특성: accountExpires
NumFromDate(Join("",FormatDateTime(DateAdd("yyyy", 5, CDate([StatusHireDate])), , "yyyy-MM-dd", "yyyy-MM-dd")," 23:59:59-05:00"))
본보기:
- 입력 값: [StatusHireDate] = "2025-01-15"
-
식 출력:
139418879990000000(2030-01-15 23:59:59-05:00의 숫자 표현)
조건부 날짜 기반 논리
시나리오 1: 직원이 작업을 시작한 경우에만 부서 정보를 전달하려고 합니다(고용 날짜가 지났습니다).
대상 특성: 부서
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, [Department], IgnoreAttributeFlow)
본보기:
- 입력 값: [StatusHireDate] = "2025-07-15", [Department] = "Engineering"(현재 날짜: 2025-07-30)
-
식 출력:
Engineering(고용 날짜가 지났습니다.) - 대체 입력: [StatusHireDate] = "2025-08-15", [Department] = "Marketing"
-
대체 출력:
IgnoreAttributeFlow(고용 날짜는 이후)
시나리오 2: 고용 날짜가 14일 이내인 경우에만 사용자 개체를 만들어야 합니다.
대상 특성: objectFilter
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) <= 14, "False", IgnoreObjectFlow)
본보기:
- 입력 값: [StatusHireDate] = "2025-08-10"(현재 날짜: 2025-07-30)
-
식 출력:
False(고용 날짜가 14일 이내이므로 사용자 개체 만들기) - 대체 입력: [StatusHireDate] = "2025-09-15"
-
대체 출력:
IgnoreObjectFlow(고용 날짜가 14일 이상 남았기 때문에 사용자 개체를 만들지 마세요.)
OU(조직 구성 단위) 할당
단순 OU 할당
시나리오 1: 도시를 기준으로 사용자를 다른 OU에 배치하려고 합니다.
대상 특성: 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"
)
본보기:
- 입력 값: [City] = "Seattle"
-
식의 출력:
OU=Seattle,OU=Users,DC=contoso,DC=com - 대체 입력: [City] = "Chicago"
-
대체 출력:
OU=Default,OU=Users,DC=contoso,DC=com(지정되지 않은 도시의 경우 기본값)
복합 OU 구조체
시나리오 1: 부서, 비용 센터 및 국가를 기반으로 복잡한 OU 구조를 만들어야 합니다.
대상 특성: 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"
)
본보기:
- 입력 값: [SupervisoryOrganization] = "Engineering", [CostCenter] = "Modern Workplace", [CountryReferenceTwoLetter] = "US"
-
식의 출력:
OU=Engineering,OU=Modern Workplace,OU=USA,OU=Users,DC=contoso,DC=com - 대체 입력: [SupervisoryOrganization] = "Sales", [CostCenter] = "Marketing", [CountryReferenceTwoLetter] = "UK"
-
대체 출력:
OU=Users,DC=contoso,DC=com(값이 일치하지 않는 경우 기본값)
종료된 사용자 OU 할당
시나리오 1: 종료된 사용자를 종료 날짜에 특별한 OU로 이동하려고 합니다.
대상 특성: 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"
)
)
본보기:
- 입력 값: [StatusTerminationLastDayOfWork] = "2025-07-25", [City] = "Seattle" (현재 날짜: 2025-07-30)
-
식 출력:
OU=Leavers,OU=Users,DC=contoso,DC=com(종료 날짜가 지났을 때 Leavers OU로 이동됨) - 대체 입력: [StatusTerminationLastDayOfWork] = "2025-08-15", [City] = "Dallas"
-
대체 출력:
OU=Dallas,OU=Users,DC=contoso,DC=com(종료 날짜가 이후이므로 정상적인 OU로 유지됨)
임의 ID 생성
GUID 기반 임의 생성
시나리오 1: 숫자를 포함하지 않는 임의의 5자 문자열을 생성해야 합니다.
대상 특성: 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", , )
)
본보기:
- 입력 값: Base64로 변환된 생성된 GUID(예: "mV8dXr...")
-
식 출력:
mVAdX(첫 번째 옵션을 사용하는 경우 숫자가 'A'로 대체되거나 'B'/'C'로 바뀝니다.)
시나리오 2: "D"로 시작하고 4개의 사전순 문자로 시작하는 임의의 문자열을 생성하려고 합니다.
대상 특성: 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}", ,))
)
본보기:
- 입력 값: 알파벳 시퀀스 "mVdX"를 포함하는 Base64로 변환된 생성된 GUID
-
식 출력:
DMVDX(또는 첫 번째 옵션을 사용할 경우 다른 경우)
숫자 ID 생성
시나리오 1: GUID에서 임의의 4자리 숫자를 생성해야 합니다.
대상 특성: 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}", ,)
)
본보기:
- 입력 값: "a1b2c3d4-e5f6-7890-1234-567890abcdef"와 같은 생성된 GUID
-
식의 출력:
D7890(또는D1234,D5678등 4자리 시퀀스가 먼저 일치하는지 여부에 따라 다름)
이름 처리
표시 이름 생성
시나리오 1: "마지막, 첫 번째" 형식으로 표시 이름을 만들려고 합니다.
대상 특성: displayName
Join(", ", [PreferredLastName], [PreferredFirstName])
본보기:
- 입력 값: [PreferredLastName] = "Smith", [PreferredFirstName] = "John"
-
식의 출력:
Smith, John
시나리오 2: 중간 초기 및 직원 ID를 포함하는 표시 이름을 만들어야 합니다.
대상 특성: displayName
Join("", [PreferredLastName], ",", [PreferredFirstName], " ", Mid([PreferredMiddleName],1,1), "-", [WorkerID])
본보기:
- 입력 값: [PreferredLastName] = "Johnson", [PreferredFirstName] = "Sarah", [PreferredMiddleName] = "Elizabeth", [WorkerID] = "12345"
-
식의 출력:
Johnson,Sarah E-12345
고유성을 가진 CN(공용 이름) 생성
시나리오 1: 중복에 대한 대체 옵션을 사용하여 고유한 일반 이름을 생성하려고 합니다.
대상 특성: cn
SelectUniqueValue(
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], Mid([PreferredMiddleName],1,1), [PreferredLastName])),
NormalizeDiacritics(Join(" ", [PreferredFirstName], [PreferredMiddleName], [PreferredLastName]))
)
본보기:
- 입력 값: [PreferredFirstName] = "José", [PreferredLastName] = "García", [PreferredMiddleName] = "Antonio"
-
식 출력:
Jose Garcia(또는Jose A Garcia첫 번째 옵션을 사용하거나Jose Antonio Garcia처음 두 옵션을 사용할 경우)
SamAccountName 생성
시나리오 1: 중복에 대한 숫자 접미사가 있는 첫 번째 이니셜 및 성을 사용하여 20자로 된 samAccountName을 만들려고 합니다.
대상 특성: 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")
)
본보기:
- 입력 값: [FirstName] = "María José", [LastName] = "González-López"
-
식 출력:
mgonzalezlopez(또는mgonzalezlopez1첫 번째 옵션을 사용하거나mgonzalezlopez2처음 두 옵션을 사용할 경우)
고급 시나리오
주소 목록 논리에서 숨기기
이 섹션에서는 부울 특성을 설정하는 방법을 설명합니다 msExchHideFromAddressLists. 모든 대문자 "TRUE" 또는 "FALSE"를 사용하여 부울 특성을 설정합니다. 다른 값을 사용하면 오류가 발생합니다 HybridSynchronizationActiveDirectoryInvalidParameter .
시나리오 1: Workday 사용자의 활성 계정 상태에 따라 설정 msExchHideFromAddressLists 하려고 합니다.
대상 특성: msExchHideFromAddressLists
Switch([Active], , "1", "FALSE", "0", "TRUE")
본보기:
- 입력 값: [활성] = "0"
-
식 출력:
TRUE(사용자가 Workday에서 비활성 상태이므로 주소 목록에서 숨기기) - 대체 입력: [활성] = "1"
-
대체 출력:
FALSE(사용자가 Workday에서 활성 상태이면 주소 목록에 표시)
시나리오 2: 작업자의 고용 날짜를 기준으로 설정 msExchHideFromAddressLists 하려고 합니다. 고용 날짜 이후에만 Exchange 주소 목록에 사용자를 표시합니다.
대상 특성: msExchHideFromAddressLists
IIF(DateDiff("d", Now(), CDate([StatusHireDate])) >= 0, "TRUE", "FALSE")
본보기:
- 입력 값: [StatusHireDate] = "2025-07-31"(현재 날짜: 2025-07-30)
-
식 출력:
TRUE(고용 날짜가 향후이므로 주소 목록에서 숨기기) - 대체 입력: [StatusHireDate] = "2025-07-31"(현재 날짜: 2025-08-01)
-
대체 출력:
FALSE(이전의 고용 날짜로 주소 목록에 표시)
다중값 특성 설정
시나리오 1: Active Directory에서 msExchPoliciesExcluded 특성에 대해 여러 값을 설정해야 합니다.
대상 특성: msExchPoliciesExcluded
Split(
Join(",","a8cccada-a108-47ae-bf9a-f130499aa4cb","{26491cfc-9e50-4857-861b-0cb8df22b5d7}"),
","
)
본보기:
- 입력 값: 정적 GUID 값
-
식의 출력:
["a8cccada-a108-47ae-bf9a-f130499aa4cb", "{26491cfc-9e50-4857-861b-0cb8df22b5d7}"]
쓰기 저장 시나리오
시나리오 1: 직원 고용 날짜가 경과한 경우에만 사용자 이름을 Workday에 다시 쓰려고 합니다.
대상 특성: 사용자 이름
IgnoreFlowIfNullOrEmpty(IIF(DateDiff("d", Now(), CDate([employeeHireDate])) > 0, "", [userPrincipalName]))
본보기:
- 입력 값: [employeeHireDate] = "2025-07-15", [userPrincipalName] = "user@contoso.com"(현재 날짜: 2025-07-30)
-
식 출력:
user@contoso.com(고용 날짜가 지났습니다. 다시 사용자 이름 쓰기) - 대체 입력: [employeeHireDate] = "2025-08-15", [userPrincipalName] = "future@contoso.com"
- 대체 출력: (비어 있음 - 무시됨, 고용 날짜는 미래임)
모범 사례
고유성이 필요한 특성(예: UPN, samAccountName, email)에는 항상 SelectUniqueValue를 사용합니다.
또는 문과 같은
IsNullOrEmptyIsPresentSwitch함수를 사용하여 null 및 빈 값을 처리합니다.특수 문자로 이름을 처리할 때 NormalizeDiacritics를 사용하여 호환성을 보장합니다.
서로 다른 표준 시간대 및 날짜 형식이 결과에 영향을 줄 수 있으므로 날짜 논리를 철저히 테스트합니다.
빈 값에 대한 특성 업데이트를 건너뛰려면 IgnoreFlowIfNullOrEmpty를 사용합니다.
가독성을 높이기 위해 중첩된 IIF 문 대신 Switch를 사용하는 것이 좋습니다.
구현하기 전에 항상 온라인 정규식 테스터에서 정규식의 유효성을 검사합니다.