Power Apps 으로 만든 조직도 앱과 Entra ID를 동기화 해서 사용자 및 그룹 정보를 업데이트 하려고 한다.
아래 진행절차는 아직 구현하지 않은 상태 이며 추후 필요시 내용이 수정 될 수 있다.
진행 절차를 정리하고 차례대로 구현 예정 이다.
여기서는 아래 [진행절차 - 조직 변경] 2. 직원의 소속그룹을 변경하면 기존 그룹에서 멤버 제거, 선택된 그룹에 멤버 추가 를 구현했다.
아래 내용은 삭제전 리스트를 확인하는 것으로 Remove 하는 것은 이전 자료 참고
[진행절차 - 초기]
1. Entra ID의 그룹 정보를 가져오기
2. Entra ID 그룹 만들기
Entra ID의 그룹과 조직도 앱의 그룹의 메일 주소가 같은지 확인 - Entra ID에는 그룹 이름이 존재 할 수 있음.
3. 선택한 직원의 모든 부서 확인
4. 3번에서 확인한 Entra ID 부서에 직원 추가
[진행절차 - 입사]
1. 소속그룹에 그룹 멤버 추가 및 제거
직원의 소속그룹을 확인하여 그룹 멤버 추가를 할 수 있어야 하고 사용자가 잘못 등록된 경우 제거 필요
[진행절차 - 조직 변경]
1. 조직 부서 이름이 변경되면 Entra ID 그룹의 이름이 변경 - 여기서는 제외 (추가 라이선스 필요)
조직의 이름을 변경하는 것은 Power Apps으로는 표현이 불가능함을 확인하여 제외. (Power Automate Http 호출 기능 가능)
2. 직원의 소속그룹을 변경하면 기존 그룹에서 멤버 제거, 선택된 그룹에 멤버 추가
기존 직원 소속 그룹으로 상위 그룹의 모든 정보를 모두 확인
변경될 그룹을 선택하였을 경우 변경될 그룹의 상위 그룹의 모든 그룹 정보 확인
그룹 정보 비교하여 값 변경
[진행절차 - 퇴사]
1. 기존 그룹에서 멤버를 제거한다.
소속 변경 시 그룹 멤버 관리 절차
소속이 변경되었을 때, 이전 소속 그룹과 변경된 소속 그룹을 비교하여 다르면 다음과 같은 작업을 수행합니다:
🔄 변경 전후 예시
- 예시 1:
- 변경 전: 영업본부/영업1팀
- 변경 후: 영업본부/영업2팀
- 처리:
- 영업1팀에서 멤버 제거
- 영업2팀에 멤버 추가
- 예시 2:
- 변경 전: 영업본부/영업1팀/영업1파트
- 변경 후: 영업본부/영업2팀/영업2파트
- 처리:
- 영업1팀, 영업1파트에서 멤버 제거
- 영업2팀, 영업2파트에 멤버 추가
✅ 처리 절차 요약
- 기존 소속 그룹 경로 확인: col_PreDeptPath
- 변경될 소속 그룹 경로 확인: col_NextDeptPath
- 변경된 경로 비교 및 처리:
- col_PreDeptPath 중 col_NextDeptPath와 다른 값이 있는 경우 → 멤버 제거
- col_NextDeptPath 중 col_PreDeptPath와 다른 값이 있는 경우 → 멤버 추가

1. 변경 전 부서 선택 - OnChange
2. 변경 후 부서 선택 - OnChange
3. 두개의 컬렉션 비교하여 멤버를 제거할 그룹 확인
4. 두개의 컬렉션 비교하여 멤버를 추가할 그룹 확인
1. 변경 전 부서 선택 - OnChange
Set(CurrentDept,Self.Selected);
ClearCollect(
col_PreDeptPath, // 결과를 저장할 컬렉션
// 1. 회사 정보 추가
{
Level: 0,
Name: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,Name),
mailNickname: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,mailNickname),
Description: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,Description)
},
ForAll(
Sequence(CurrentDept.Level, 1, 1), // 1부터 현재 Level까지 반복
With(
{
dept: First(
Filter(
col_CreateDepartment,
StartsWith(
OrderNo,
Left(CurrentDept.OrderNo, 2 + 5 * (Value - 1))
) && Level = Value
)
)
},
{
Level: Value,
Name: dept.Name,
mailNickname: dept.mailNickname,
Description: dept.Description
}
)
)
);
Set(CurrentDept,Self.Selected);
ClearCollect(
col_DeptPath, // 결과를 저장할 컬렉션
// 1. 회사 정보 추가
{
Level: 0,
Name: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,Name),
mailNickname: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,mailNickname),
Description: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,Description)
},
ForAll(
Sequence(CurrentDept.Level, 1, 1), // 1부터 현재 Level까지 반복
With(
{
dept: First(
Filter(
col_CreateDepartment,
StartsWith(
OrderNo,
Left(CurrentDept.OrderNo, 2 + 5 * (Value - 1))
) && Level = Value
)
)
},
{
Level: Value,
Name: dept.Name,
mailNickname: dept.mailNickname,
Description: dept.Description
}
)
)
)2. 변경 후 부서 선택 - OnChange
Set(NextDept,Self.Selected);
ClearCollect(
col_NextDeptPath, // 결과를 저장할 컬렉션
// 1. 회사 정보 추가
{
Level: 0,
Name: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,Name),
mailNickname: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,mailNickname),
Description: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.Company,Description)
},
ForAll(
Sequence(NextDept.Level, 1, 1), // 1부터 현재 Level까지 반복
With(
{
dept: First(
Filter(
col_CreateDepartment,
StartsWith(
OrderNo,
Left(NextDept.OrderNo, 2 + 5 * (Value - 1))
) && Level = Value
)
)
},
{
Level: Value,
Name: dept.Name,
mailNickname: dept.mailNickname,
Description: dept.Description
}
)
)
)3. 두개의 컬렉션 비교하여 멤버를 제거할 그룹 확인
// col_NextDeptPath에서 col_PreDeptPath에 없는 항목(즉, 새로 추가되어야 할 그룹)을 필터링하여 col_Result에 저장
ClearCollect(
col_Result, // 결과 컬렉션 초기화 및 저장
Filter(
// mailNickname 필드를 Mail이라는 새 필드로 추가
AddColumns(col_NextDeptPath, Mail, mailNickname),
// col_PreDeptPath에 동일한 mailNickname이 존재하지 않는 항목만 필터링
IsBlank(
LookUp(col_PreDeptPath, mailNickname = Mail)
)
)
)4. 두개의 컬렉션 비교하여 멤버를 추가할 그룹 확인
// col_PreDeptPath에서 col_NextDeptPath에 없는 항목(즉, 제거해야 할 그룹)을 필터링하여 col_Result에 저장
ClearCollect(
col_Result, // 결과 컬렉션 초기화 및 저장
Filter(
// mailNickname 필드를 Mail이라는 새 필드로 추가
AddColumns(col_PreDeptPath, Mail, mailNickname),
// col_NextDeptPath에 동일한 mailNickname이 존재하지 않는 항목만 필터링
IsBlank(
LookUp(col_NextDeptPath, mailNickname = Mail)
)
)
)
전체 코드
Screens:
EntraID AddRemove Groups:
Properties:
Fill: =RGBA(255, 255, 255, 1)
LoadingSpinnerColor: =RGBA(0, 120, 212, 1)
Children:
- Button7:
Control: Classic/Button@2.2.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
BorderStyle: =BorderStyle.None
Color: =RGBA(255, 255, 255, 1)
DisabledBorderColor: =RGBA(0, 0, 0, 0)
DisabledColor: =RGBA(161, 159, 157, 1)
DisabledFill: =RGBA(242, 242, 241, 0)
Fill: =RGBA(0, 120, 212, 1)
Font: =Font.'Segoe UI'
HoverBorderColor: =RGBA(0, 0, 0, 0)
HoverColor: =RGBA(255, 255, 255, 1)
HoverFill: =RGBA(16, 110, 190, 1)
OnSelect: |+
=// col_PreDeptPath에서 col_NextDeptPath에 없는 항목(즉, 제거해야 할 그룹)을 필터링하여 col_Result에 저장
ClearCollect(
col_Result, // 결과 컬렉션 초기화 및 저장
Filter(
// mailNickname 필드를 Mail이라는 새 필드로 추가
AddColumns(col_PreDeptPath, Mail, mailNickname),
// col_NextDeptPath에 동일한 mailNickname이 존재하지 않는 항목만 필터링
IsBlank(
LookUp(col_NextDeptPath, mailNickname = Mail)
)
)
)
PressedBorderColor: =RGBA(0, 69, 120, 1)
PressedColor: =RGBA(255, 255, 255, 1)
PressedFill: =RGBA(16, 110, 190, 1)
RadiusBottomLeft: =0
RadiusBottomRight: =0
RadiusTopLeft: =0
RadiusTopRight: =0
Size: =10
Text: ="그룹에서 멤버 제거"
X: =784
Y: =268
- Gallery4_1:
Control: Gallery@2.15.0
Variant: BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0
Properties:
BorderColor: =RGBA(245, 245, 245, 1)
Height: =469
Items: =col_PreDeptPath
Width: =326
X: =12
Y: =126
Children:
- Title3_1:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(50, 49, 48, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =25
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =14
Text: =ThisItem.Name
VerticalAlign: =VerticalAlign.Top
Width: =Parent.TemplateWidth - 173
X: =20
Y: =16
- Subtitle3_2:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(96, 94, 92, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =27
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =12
Text: |
=ThisItem.mailNickname
VerticalAlign: =VerticalAlign.Top
Width: =300
X: =20
Y: =69
- NextArrow3_1:
Control: Classic/Icon@2.5.0
Properties:
AccessibleLabel: =Self.Tooltip
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(166, 166, 166, 1)
DisabledBorderColor: =RGBA(56, 56, 56, 1)
DisabledColor: =RGBA(119, 119, 119, 1)
FocusedBorderThickness: =4
Height: =50
Icon: =Icon.ChevronRight
OnSelect: =Select(Parent)
PaddingBottom: =16
PaddingLeft: =16
PaddingRight: =16
PaddingTop: =16
Tooltip: ="항목 세부 정보 보기"
Width: =50
X: =Parent.TemplateWidth - Self.Width - 12
Y: =(Parent.TemplateHeight / 2) - (Self.Height / 2)
- Separator3_1:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(255, 255, 255, 1)
Height: =8
OnSelect: =Select(Parent)
Width: =Parent.TemplateWidth
Y: =Parent.TemplateHeight - Self.Height
- Rectangle3_1:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(0, 120, 212, 1)
Height: =Parent.TemplateHeight - Separator3_1.Height
OnSelect: =Select(Parent)
Visible: =ThisItem.IsSelected
Width: =4
- Subtitle3_3:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(96, 94, 92, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =22
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =12
Text: |
=ThisItem.Description
VerticalAlign: =VerticalAlign.Top
Width: =255
X: =20
Y: =47
- Drop_Department_1:
Control: Classic/DropDown@2.3.1
Properties:
BorderColor: =RGBA(245, 245, 245, 1)
ChevronBackground: =RGBA(245, 245, 245, 1)
ChevronDisabledBackground: =RGBA(242, 242, 241, 0)
ChevronDisabledFill: =RGBA(161, 159, 157, 1)
ChevronFill: =RGBA(50, 49, 48, 1)
ChevronHoverBackground: =RGBA(245, 245, 245, 1)
ChevronHoverFill: =RGBA(50, 49, 48, 1)
Color: =RGBA(50, 49, 48, 1)
DisabledBorderColor: =RGBA(0, 0, 0, 0)
DisabledColor: =RGBA(161, 159, 157, 1)
DisabledFill: =RGBA(242, 242, 241, 0)
Fill: =RGBA(245, 245, 245, 1)
Font: =Font.'Segoe UI'
HoverBorderColor: =RGBA(16, 110, 190, 1)
HoverColor: =RGBA(50, 49, 48, 1)
HoverFill: =RGBA(245, 245, 245, 1)
Items: =col_CreateDepartment
Items.Value: =Name
OnChange: |-
=Set(CurrentDept,Self.Selected);
ClearCollect(
col_PreDeptPath, // 결과를 저장할 컬렉션
// 1. 회사 정보 추가
{
Level: 0,
Name: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',Name),
mailNickname: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',mailNickname),
Description: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',Description)
},
ForAll(
Sequence(CurrentDept.Level, 1, 1), // 1부터 현재 Level까지 반복
With(
{
dept: First(
Filter(
col_CreateDepartment,
StartsWith(
OrderNo,
Left(CurrentDept.OrderNo, 2 + 5 * (Value - 1))
) && Level = Value
)
)
},
{
Level: Value,
Name: dept.Name,
mailNickname: dept.mailNickname,
Description: dept.Description
}
)
)
);
Set(CurrentDept,Self.Selected);
ClearCollect(
col_DeptPath, // 결과를 저장할 컬렉션
// 1. 회사 정보 추가
{
Level: 0,
Name: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',Name),
mailNickname: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',mailNickname),
Description: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',Description)
},
ForAll(
Sequence(CurrentDept.Level, 1, 1), // 1부터 현재 Level까지 반복
With(
{
dept: First(
Filter(
col_CreateDepartment,
StartsWith(
OrderNo,
Left(CurrentDept.OrderNo, 2 + 5 * (Value - 1))
) && Level = Value
)
)
},
{
Level: Value,
Name: dept.Name,
mailNickname: dept.mailNickname,
Description: dept.Description
}
)
)
)
PaddingBottom: =5
PaddingLeft: =12
PaddingRight: =5
PaddingTop: =5
PressedBorderColor: =RGBA(16, 110, 190, 1)
PressedColor: =RGBA(255, 255, 255, 1)
PressedFill: =RGBA(0, 120, 212, 1)
SelectionColor: =RGBA(50, 49, 48, 1)
SelectionFill: =RGBA(0, 120, 212, 1)
X: =12
Y: =72
- Drop_Department_2:
Control: Classic/DropDown@2.3.1
Properties:
BorderColor: =RGBA(245, 245, 245, 1)
ChevronBackground: =RGBA(245, 245, 245, 1)
ChevronDisabledBackground: =RGBA(242, 242, 241, 0)
ChevronDisabledFill: =RGBA(161, 159, 157, 1)
ChevronFill: =RGBA(50, 49, 48, 1)
ChevronHoverBackground: =RGBA(245, 245, 245, 1)
ChevronHoverFill: =RGBA(50, 49, 48, 1)
Color: =RGBA(50, 49, 48, 1)
DisabledBorderColor: =RGBA(0, 0, 0, 0)
DisabledColor: =RGBA(161, 159, 157, 1)
DisabledFill: =RGBA(242, 242, 241, 0)
Fill: =RGBA(245, 245, 245, 1)
Font: =Font.'Segoe UI'
HoverBorderColor: =RGBA(16, 110, 190, 1)
HoverColor: =RGBA(50, 49, 48, 1)
HoverFill: =RGBA(245, 245, 245, 1)
Items: =col_CreateDepartment
Items.Value: =Name
OnChange: |-
=Set(NextDept,Self.Selected);
ClearCollect(
col_NextDeptPath, // 결과를 저장할 컬렉션
// 1. 회사 정보 추가
{
Level: 0,
Name: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',Name),
mailNickname: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',mailNickname),
Description: LookUp(col_CreateCompany,Name=Dropdown1.SelectedText.'data-ADB4D7A662F548B49FAC2B986E348A1BCompany',Description)
},
ForAll(
Sequence(NextDept.Level, 1, 1), // 1부터 현재 Level까지 반복
With(
{
dept: First(
Filter(
col_CreateDepartment,
StartsWith(
OrderNo,
Left(NextDept.OrderNo, 2 + 5 * (Value - 1))
) && Level = Value
)
)
},
{
Level: Value,
Name: dept.Name,
mailNickname: dept.mailNickname,
Description: dept.Description
}
)
)
)
PaddingBottom: =5
PaddingLeft: =12
PaddingRight: =5
PaddingTop: =5
PressedBorderColor: =RGBA(16, 110, 190, 1)
PressedColor: =RGBA(255, 255, 255, 1)
PressedFill: =RGBA(0, 120, 212, 1)
SelectionColor: =RGBA(50, 49, 48, 1)
SelectionFill: =RGBA(0, 120, 212, 1)
X: =382
Y: =72
- Gallery4_2:
Control: Gallery@2.15.0
Variant: BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0
Properties:
BorderColor: =RGBA(245, 245, 245, 1)
Height: =469
Items: =col_NextDeptPath
Width: =326
X: =382
Y: =126
Children:
- Title3_2:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(50, 49, 48, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =25
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =14
Text: =ThisItem.Name
VerticalAlign: =VerticalAlign.Top
Width: =Parent.TemplateWidth - 173
X: =20
Y: =16
- Subtitle3_4:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(96, 94, 92, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =27
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =12
Text: |
=ThisItem.mailNickname
VerticalAlign: =VerticalAlign.Top
Width: =300
X: =20
Y: =69
- NextArrow3_2:
Control: Classic/Icon@2.5.0
Properties:
AccessibleLabel: =Self.Tooltip
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(166, 166, 166, 1)
DisabledBorderColor: =RGBA(56, 56, 56, 1)
DisabledColor: =RGBA(119, 119, 119, 1)
FocusedBorderThickness: =4
Height: =50
Icon: =Icon.ChevronRight
OnSelect: =Select(Parent)
PaddingBottom: =16
PaddingLeft: =16
PaddingRight: =16
PaddingTop: =16
Tooltip: ="항목 세부 정보 보기"
Width: =50
X: =Parent.TemplateWidth - Self.Width - 12
Y: =(Parent.TemplateHeight / 2) - (Self.Height / 2)
- Separator3_2:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(255, 255, 255, 1)
Height: =8
OnSelect: =Select(Parent)
Width: =Parent.TemplateWidth
Y: =Parent.TemplateHeight - Self.Height
- Rectangle3_2:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(0, 120, 212, 1)
Height: =Parent.TemplateHeight - Separator3_2.Height
OnSelect: =Select(Parent)
Visible: =ThisItem.IsSelected
Width: =4
- Subtitle3_5:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(96, 94, 92, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =22
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =12
Text: |
=ThisItem.Description
VerticalAlign: =VerticalAlign.Top
Width: =255
X: =20
Y: =47
- Gallery4_3:
Control: Gallery@2.15.0
Variant: BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0
Properties:
BorderColor: =RGBA(245, 245, 245, 1)
Height: =434
Items: =col_Result
Width: =326
X: =985
Y: =144
Children:
- Title3_3:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(50, 49, 48, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =25
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =14
Text: =ThisItem.Name
VerticalAlign: =VerticalAlign.Top
Width: =Parent.TemplateWidth - 173
X: =20
Y: =16
- Subtitle3_6:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(96, 94, 92, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =27
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =12
Text: |
=ThisItem.mailNickname
VerticalAlign: =VerticalAlign.Top
Width: =300
X: =20
Y: =69
- NextArrow3_3:
Control: Classic/Icon@2.5.0
Properties:
AccessibleLabel: =Self.Tooltip
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(166, 166, 166, 1)
DisabledBorderColor: =RGBA(56, 56, 56, 1)
DisabledColor: =RGBA(119, 119, 119, 1)
FocusedBorderThickness: =4
Height: =50
Icon: =Icon.ChevronRight
OnSelect: =Select(Parent)
PaddingBottom: =16
PaddingLeft: =16
PaddingRight: =16
PaddingTop: =16
Tooltip: ="항목 세부 정보 보기"
Width: =50
X: =Parent.TemplateWidth - Self.Width - 12
Y: =(Parent.TemplateHeight / 2) - (Self.Height / 2)
- Separator3_3:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(255, 255, 255, 1)
Height: =8
OnSelect: =Select(Parent)
Width: =Parent.TemplateWidth
Y: =Parent.TemplateHeight - Self.Height
- Rectangle3_3:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(0, 120, 212, 1)
Height: =Parent.TemplateHeight - Separator3_3.Height
OnSelect: =Select(Parent)
Visible: =ThisItem.IsSelected
Width: =4
- Subtitle3_7:
Control: Label@2.5.1
Properties:
BorderColor: =RGBA(0, 0, 0, 1)
Color: =RGBA(96, 94, 92, 1)
DisabledColor: =RGBA(161, 159, 157, 1)
Font: =Font.'Segoe UI'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =22
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =12
Text: |
=ThisItem.Description
VerticalAlign: =VerticalAlign.Top
Width: =255
X: =20
Y: =47
- Button7_1:
Control: Classic/Button@2.2.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
BorderStyle: =BorderStyle.None
Color: =RGBA(255, 255, 255, 1)
DisabledBorderColor: =RGBA(0, 0, 0, 0)
DisabledColor: =RGBA(161, 159, 157, 1)
DisabledFill: =RGBA(242, 242, 241, 0)
Fill: =RGBA(0, 120, 212, 1)
Font: =Font.'Segoe UI'
HoverBorderColor: =RGBA(0, 0, 0, 0)
HoverColor: =RGBA(255, 255, 255, 1)
HoverFill: =RGBA(16, 110, 190, 1)
OnSelect: |
=// col_NextDeptPath에서 col_PreDeptPath에 없는 항목(즉, 새로 추가되어야 할 그룹)을 필터링하여 col_Result에 저장
ClearCollect(
col_Result, // 결과 컬렉션 초기화 및 저장
Filter(
// mailNickname 필드를 Mail이라는 새 필드로 추가
AddColumns(col_NextDeptPath, Mail, mailNickname),
// col_PreDeptPath에 동일한 mailNickname이 존재하지 않는 항목만 필터링
IsBlank(
LookUp(col_PreDeptPath, mailNickname = Mail)
)
)
)
PressedBorderColor: =RGBA(0, 69, 120, 1)
PressedColor: =RGBA(255, 255, 255, 1)
PressedFill: =RGBA(16, 110, 190, 1)
RadiusBottomLeft: =0
RadiusBottomRight: =0
RadiusTopLeft: =0
RadiusTopRight: =0
Size: =10
Text: ="그룹에서 멤버 추가"
X: =784
Y: =202
- Label12:
Control: Label@2.5.1
Properties:
Align: =Align.Center
BorderColor: =RGBA(0, 0, 0, 0)
BorderStyle: =BorderStyle.None
BorderThickness: =2
Color: =RGBA(255, 255, 255, 1)
DisabledBorderColor: =RGBA(0, 0, 0, 0)
DisabledColor: =RGBA(161, 159, 157, 1)
Fill: =RGBA(0, 120, 212, 1)
FocusedBorderThickness: =4
Font: =Font.'Segoe UI'
FontWeight: =FontWeight.Bold
Text: '="변경 전 그룹 col_PreDeptPath " '
Width: =328
X: =12
Y: =20
- Label12_1:
Control: Label@2.5.1
Properties:
Align: =Align.Center
BorderColor: =RGBA(0, 0, 0, 0)
BorderStyle: =BorderStyle.None
BorderThickness: =2
Color: =RGBA(255, 255, 255, 1)
DisabledBorderColor: =RGBA(0, 0, 0, 0)
DisabledColor: =RGBA(161, 159, 157, 1)
Fill: =RGBA(0, 120, 212, 1)
FocusedBorderThickness: =4
Font: =Font.'Segoe UI'
FontWeight: =FontWeight.Bold
Text: ="변경 후 그룹 col_NextDeptPath"
Width: =328
X: =380
Y: =20
[참고자료]
PowerApps - [진행절차-초기] 3. 선택한 직원의 모든 부서 확인
Power Apps 으로 만든 조직도 앱과 Entra ID를 동기화 해서 사용자 및 그룹 정보를 업데이트 하려고 한다.아래 진행절차는 아직 구현하지 않은 상태 이며 추후 필요시 내용이 수정 될 수 있다.진행 절
leemcse.tistory.com
PowerApps - [진행절차 - 입사] 소속그룹에 그룹 멤버 추가 및 제거
Power Apps 으로 만든 조직도 앱과 Entra ID를 동기화 해서 사용자 및 그룹 정보를 업데이트 하려고 한다.아래 진행절차는 아직 구현하지 않은 상태 이며 추후 필요시 내용이 수정 될 수 있다.진행 절
leemcse.tistory.com
댓글