PowerApps - [진행절차-초기] 2. Entra ID 그룹 만들기
Power Apps 으로 만든 조직도 앱과 Entra ID를 동기화 해서 사용자 및 그룹 정보를 업데이트 하려고 한다.
아래 진행절차는 아직 구현하지 않은 상태 이며 추후 필요시 내용이 수정 될 수 있다.
진행 절차를 정리하고 차례대로 구현 예정 이다.
여기서는 아래 [진행절차-초기] 2. Entra ID 그룹 만들기를 구현했다.
[진행절차 - 초기]
1. Entra ID의 그룹 정보를 가져오기
2. Entra ID 그룹 만들기
Entra ID의 그룹과 조직도 앱의 그룹의 메일 주소가 같은지 확인 - Entra ID에는 그룹 이름이 존재 할 수 있음.
3. 직원 선택할 경우 해당 직원의 모든 부서 확인
4. 3번에서 확인한 Entra ID 부서에 직원 추가
[진행절차 - 입사]
1. 직원의 소속그룹을 확인하여 그룹 멤버 추가
[진행절차 - 조직 변경]
1. 조직 부서 이름이 변경되면 Entra ID 그룹의 이름이 변경
2. 직원의 소속그룹을 변경하면 기존 그룹에서 멤버 제거, 선택된 그룹에 멤버 추가
[진행절차 - 퇴사]
1. 기존 그룹에서 멤버를 제거한다.
Microsoft 365는 3개의 그룹을 관리 할 수 있다.
아래 3가지 장 단점은 앱을 구성하기 위해 파악한 내용을 정리한 것이다.
Power Apps에서 직접 만들 수 있는 방법은 MicrosoftEntraID Connect를 이용해서 만드는 방법으로 별도 비용이 발생하지 않는다.
여기서는 최소한의 비용으로 그룹을 만들고 관리하는 방법을 기준으로 하여 Microsoft 365 그룹의 메일만 보내기 위한 그룹을 만드는 것을 기준으로 하기로 하였다.

| 그룹명 | 장점 | 단점 |
| Microsoft 365 그룹 | MicrosoftEntraID Connect로 그룹을 만들 수 있다. 메일, 보안 그룹을 모두 만들 수 있다. |
중첩 그룹 (Nested 그룹)을 구성 할 수 없다. 중첩 그룹 : 그룹에 그룹을 넣는 것 메일 도메인 이름을 지정 할 수 없다. |
| 메일 그룹 | 메일만 주고 받을 수 있고, 권한을 부여하지 못하는 그룹 |
그룹에 권한을 부여하지 못한다. |
| 보안 그룹 | 중첩 그룹 (Nested 그룹)을 구성 할 수 있다. 중첩 그룹 : 그룹에 그룹을 넣는 것 |
MicrosoftEntraID Connect로 그룹을 만들 수 없다. Power Automate 유료 버전으로 만들 수 있다. |
Power Apps에서 MicrosoftEntraID 로 만들 수 있는 그룹은 Microsoft 365 그룹만 만들 수 있다.
그룹을 만들면서 그룹 메일 기능을 true로 하면 <mailNickName>@<테넌트이름>.onmicrosoft.com 으로 만들어지게 된다.
아래 코드로 만들면 메일만 보낼 수 있는 메일 그룹으로 생성.
사용자만 포함 할 수 있으며 그룹을 포함하지 못하게 됩니다. (중첩 그룹 지원하지 않음)

IfError(
// 오류가 발생할 수 있는 블록을 감싸고, 오류 발생 시 대체 동작을 수행하는 함수입니다.
MicrosoftEntraID.CreateGroup(
"영업 1팀", // DisplayName: 그룹의 표시 이름 (예: 팀 이름)
"영업본부/영업 1팀", // Description: 그룹에 대한 설명
"PA-Sales1Team", // MailNickname: 그룹 이메일 주소의 앞부분 (예: PA-Sales1Team@도메인)
["Unified"], // GroupTypes: "Unified"는 Microsoft 365 그룹을 의미함
true, // MailEnabled: 그룹에 메일 기능을 부여 (Microsoft 365 그룹일 때 true)
true // SecurityEnabled: 보안 기능 활성화 (Microsoft 365 그룹일 경우 true로 설정 가능)
),
Notify(
"이미 존재하는 보안 그룹입니다.", // 오류 발생 시 사용자에게 보여줄 메시지
NotificationType.Warning // 메시지 유형: 경고 (노란색 알림창)
)
)
여러 그룹 한꺼번에 만들기
1. 컬렉션으로 여러개의 그룹을 만든다.
2. 컬렉션으로 만든 그룹을 확인한다.
3. 버튼을 클릭하면 컬렉션의 그룹이 자동으로 만들어 진다.

- con_CreateGroups:
Control: GroupContainer@1.3.0
Variant: ManualLayout
Properties:
Fill: =RGBA(236, 236, 235, 1)
Height: =545
Width: =455
X: =61
Y: =133
Children:
- btn_CreateGroups:
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'
Height: =37
HoverBorderColor: =RGBA(0, 0, 0, 0)
HoverColor: =RGBA(255, 255, 255, 1)
HoverFill: =RGBA(16, 110, 190, 1)
OnSelect: |-
=ForAll(
col_CreateGroups, // col_CreateGroups 컬렉션의 각 항목을 반복
IfError( // 에러가 발생할 수 있는 작업을 실행하고, 에러 시 대체 동작 수행
MicrosoftEntraID.CreateGroup( // Microsoft Entra ID에 그룹을 생성
groupName, // 그룹의 표시 이름 (예: "영업 1팀")
groupDescription, // 그룹 설명 (예: "영업본부/영업 1팀")
groupMail, // 메일 닉네임 (예: "PA-Sales1Team")
["Unified"], // 그룹 유형: "Unified"는 Microsoft 365 그룹을 의미
true, // MailEnabled: 메일 기능 사용 (Microsoft 365 그룹은 true)
true // SecurityEnabled: 보안 기능 사용 (Microsoft 365 그룹은 true여야 함)
),
Blank() // 에러 발생 시 아무 동작도 하지 않고 조용히 넘어감
)
)
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: =13
Text: ="그룹 한번에 만들기"
Width: =238
X: =40
Y: =462
- gal_Grouplists:
Control: Gallery@2.15.0
Variant: BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0
Properties:
BorderColor: =RGBA(245, 245, 245, 1)
Fill: =RGBA(255, 255, 255, 1)
Height: =321
Items: =col_CreateGroups
Width: =335
X: =40
Y: =116
Children:
- Title1:
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: =Self.Size * 1.8
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =14
Text: =ThisItem.groupMail
VerticalAlign: =VerticalAlign.Top
Width: =Parent.TemplateWidth - 173
X: =38
Y: =35
- Subtitle1:
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.'Lato Black'
FontWeight: =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height: =Self.Size * 1.8
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =14
Text: =ThisItem.groupName
VerticalAlign: =VerticalAlign.Top
Width: =Title1.Width
X: =38
Y: =5
- NextArrow1:
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)
- Separator1:
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
- Rectangle1:
Control: Rectangle@2.3.0
Properties:
BorderColor: =RGBA(0, 0, 0, 0)
Fill: =RGBA(0, 120, 212, 1)
Height: =Parent.TemplateHeight - Separator1.Height
OnSelect: =Select(Parent)
Visible: =ThisItem.IsSelected
Width: =4
- Title1_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: =Self.Size * 1.8
OnSelect: =Select(Parent)
PaddingBottom: =0
PaddingLeft: =12
PaddingRight: =0
PaddingTop: =0
Size: =14
Text: =ThisItem.groupDescription
VerticalAlign: =VerticalAlign.Top
Width: =Parent.TemplateWidth - 173
X: =38
Y: =65
- btn_CreateCollect:
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'
Height: =39
HoverBorderColor: =RGBA(0, 0, 0, 0)
HoverColor: =RGBA(255, 255, 255, 1)
HoverFill: =RGBA(16, 110, 190, 1)
OnSelect: |-
=ClearCollect(col_CreateGroups,
{groupName:"영업본부",groupMail:"PA-Sales",groupDescription : "영업본부"},
{groupName:"영업 1팀",groupMail:"PA-Sales1Team",groupDescription : "영업본부/영업 1팀"},
{groupName:"영업 2팀",groupMail:"PA-Sales2Team",groupDescription : "영업본부/영업 2팀"}
)
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: =13
Text: ="그룹 컬렉션 만들기"
Width: =238
X: =40
Y: =40
[참고자료]
PowerApps - [진행절차-초기] 1. 그룹 정보를 가져오기
Power Apps 으로 만든 조직도 앱과 Entra ID를 동기화 해서 사용자 및 그룹 정보를 업데이트 하려고 한다.아래 진행절차는 아직 구현하지 않은 상태 이며 추후 필요시 내용이 수정 될 수 있다.진행 절
leemcse.tistory.com

