본문 바로가기
기술자료 (KB)/Power Platform

PowerApps으로 만드는 조직도 솔루션 - 10. 직원 (새로 만들기)

by 이완주 2024. 10. 10.

 

 

PowerApps으로 만든 조직도 솔루션 제안서

작년에 Power Apps으로 만들어 아직까지 저희 회사에 잘 쓰고 있는 솔루션 입니다.조직도는 연차 결재 솔루션과 연동하여 사용 중에 있습니다. 해당 솔루션의 구성 방법 입니다. 대략 10개 내외 정

leemcse.tistory.com

 

직원 새로 만들기

1. 필수 입력 값으로 이름, 메일, 소속 부서 값이 입력이 되지 않으면 저장 버튼 비활성화

2. 전문분야를 입력하여 검색에서 분야 전문가를 검색 할 수 있게 한다.

3. 사용자 입력을 최소화 하고 입력은 선택 값으로 사용자의 실수를 최소화 한다.

4. 값이 선택되면 OrderNo 등 값이 자동으로 설정하고 화면에 표시하지 않는다.

 

입력화면

아래 Visible = false로 처리하여 화면에 나타나지 않게 구성한다.

 

새로 만들기 버튼 설정

OnSelect = NewForm(Form1_5); UpdateContext({ newMode: true, editMode:false });

 

저장 버튼 설정

OnSelect 설정

SubmitForm(Form1_5);

// ColDepartment 초기화 및 생성
ClearCollect(ColDepartment,AddColumns(OrgDepartment,NewID,ID));

// OrgCompany의 회사 정보를 ColDepartment에 추가
ForAll(
    OrgCompany,
    Collect(
        ColDepartment,
        {
            No: Text(OrderNo,"00"),
            CompanyID : ID,
            Name: Name,
            Level: 0,
            OrderNo: Text(OrderNo,"00") & "000000000000000000000000000000",
            Visible:true
        }
    )
);

// ColEmployee 초기화 및 생성
ClearCollect(ColEmployee,AddColumns(OrgEmployee,NewID,ID));
ForAll(
    OrgCompany,
    Collect(
        ColEmployee,
        {
            No: Text(OrderNo,"00"),
            CompanyID : ID,
            Name: Name,
            Level: 0,
            OrderNo: Text(OrderNo,"00") & "000000000000000000000000000000",
            Visible:true
        }
    )
);

 

DisplayMode

// 이름, 메일주소, 소속부서 값이 비어 있으면 저장 버튼을 비활성화
If(!IsBlank(EmployeeName.Text) And !IsBlank(EmployeeMail.Text) And !IsBlank(EmployeeIDComboBox.Selected.Name),DisplayMode.Edit,DisplayMode.Disabled)

 

Dropdown 으로 기존 값을 가져와서 사용자 실수를 최소화 한다.

직위, 직책, 메일, 회사, 소속부서, 겸직부서1, 겸직부서2 

 

직위

Dropdown 메뉴 설정

// Items 값을 OrgJobtitle 값을 OrderNo로 정렬하여 표시  Value 값은 Name으로 설정
Items  = Sort
(OrgJobtitle,OrderNo)

// Default 값을 사원으로 설정
Default =
If(newMode,"사원",CurrentItem.Jobtitle)

 

 

Update 설정

Update = JobtitleDropdown2_1_2.Selected.Name

 

직책

Dropdown 메뉴 설정

Items = Sort(OrgPosition,OrderNo)
Default = If(newMode,"팀원", CurrentItem.Position)

 

Update 설정

Update = PositionDropdown3_1_2.Selected.Name

 

메일

메일 주소의 실수를 방지하기 위해 회사에서 정의해 둔 @domainName 선택으로 하고 앞에 메일 주소 부분만 입력

 

Dropdown 메뉴 설정

Items = Sort(OrgDomainName,OrderNo)
Default = If(!IsBlank(EmployeeGallery.Selected.Mail),"@" &Last(Split(Parent.Default,"@")).Value)

 

Text 입력

Default = Left(Parent.Default,Find("@",Parent.Default)-1)

 

Update 설정

Update = EmployeeMail.Text & MailDropdown25_1_2.Selected.Name

 

회사

Dropdown 메뉴 설정

Items = Sort(OrgCompany,OrderNo)
Default = LookUp(OrgCompany,ID=EmployeeGallery.Selected.CompanyID,Name)

 

Update 설정

Update = CompanyIDDropdown7_1_2.Selected.Name

 

입사일

날짜 선택 기본 값

DefaultDate = If(newMode,Today(),Parent.Default)

 

Update 설정

Update = DataCardValue27.SelectedDate

 

퇴사일

퇴사일은 체크를 하면 퇴사일을 선택할 수 있게 구성

DisplayMode = If(ResignationToggle1_2.Checked,DisplayMode.Edit,DisplayMode.Disabled)
DefaultDate = If(ResignationToggle1_2.Checked,Parent.Default,"")

InputTextPlaceholder 값은 제거하여 나타나지 않게 한다.

 

Update 설정

Update = DataCardValue28.SelectedDate

 

사원번호

Default 설정

If(
    newMode,
        Text(Today(),"yyyy") &
        If(
            Left( (First(Sort(OrgEmployee,EmpNo,SortOrder.Descending)).EmpNo) + 1, 4) = Text(Today(),"yyyy" ),
            Right( (First(Sort(OrgEmployee,EmpNo,SortOrder.Descending)).EmpNo)+1,4),"0001"
        ),
    Parent .Default
)

 

소속부서

Items

Sort(Filter(ColDepartment,Level>0 And CompanyID=CompanyIDDropdown7_1_2.Selected.ID  ),OrderNo)

 

DefaultSelectedItems 설정

If(ThisItem.CompanyID=CompanyIDDropdown7_1_2.Selected.ID,
    LookUp(
        ColDepartment,
        ID = EmployeeGallery.Selected.DepartmentID And Level > 0
    ),
{})

 

겸직부서1

Items

Sort(Filter(ColDepartment,Level>0 And CompanyID=CompanyIDDropdown7_1_2.Selected.ID  ),OrderNo)

 

DefaultSelectedItems 설정

If(ThisItem.CompanyID=CompanyIDDropdown7_1_2.Selected.ID,
    LookUp(
        ColDepartment,
        ID = EmployeeGallery.Selected.DepartmentID1 And Level > 0
    ),
{})

 

 

겸직부서2

Items

Sort(Filter(ColDepartment,Level>0 And CompanyID=CompanyIDDropdown7_1_2.Selected.ID  ),OrderNo)

 

DefaultSelectedItems 설정

If(ThisItem.CompanyID=CompanyIDDropdown7_1_2.Selected.ID,
    LookUp(
        ColDepartment,
        ID = EmployeeGallery.Selected.DepartmentID2 And Level > 0
    ),
{})

 

OrderNo

Default = Replace(LookUp(ColDepartment,ID=EmployeeIDComboBox.Selected.ID,OrderNo),28,32,DepartmentNo.Text)
Visible =
editMode

 

OrderNo1

Default =  If(IsBlank(EmployeeID1ComboBox.Selected.Name),"",Replace(LookUp(ColDepartment,ID=EmployeeID1ComboBox.Selected.ID,OrderNo),28,32,DepartmentNo1.Text))
Visible = editMode

 

OrderNo2

Default =  If(IsBlank(EmployeeID2ComboBox.Selected.Name),"",Replace(LookUp(ColDepartment,ID=EmployeeID2ComboBox.Selected.ID,OrderNo),28,32,DepartmentNo2.Text))
Visible =
editMode

 

No

Default =  
If(newMode, // 새로 만들기
    // 값이 없으면 초기값으로 90001로 설정, 값이 있으면 최대값 + 1
    If(IsBlank(First(Sort(OrgEmployee,No,SortOrder.Descending)).No),"90001",First(Sort(ColOrgAllList,No,SortOrder.Descending)).No+1),

    // newMode가 아닌 경우 기존 값 가져오기
    Parent.Default
)

Visible = 
false

 

No1

Default =  
If(newMode, // 새로 만들기

    // 겸직 부서1이 선택 되면 최대 값 +2 ( No와 No1이 동시 추가 되었을 경우 동일 값 피하기 위함)
    If(!IsBlank(EmployeeID1ComboBox.Selected.Name),
            First(Sort(ColOrgAllList,No,SortOrder.Descending)).No+2
    ),
   
    // newMode가 아닌 경우 겸직 부서1이 선택 되지 않으면 "", 값이 선택되면 최대 값 +2, 그 외의 경우 Default 값
    If(
        IsBlank(EmployeeID1ComboBox.Selected.Name),"",
            If(IsBlank(LookUp(ColEmployee,ID=CurrentItem.ID,No1)),First(Sort(ColOrgAllList,No,SortOrder.Descending)).No+2,Parent.Default)
    )
   
)

Visible = 
false

 

No2

Default =  
If(newMode, // 새로 만들기

    // 겸직 부서1이 선택 되면 최대 값 +3 ( No, No1, No3 동시 추가 되었을 경우 동일 값 피하기 위함)
    If(!IsBlank(EmployeeID2ComboBox.Selected.Name),
            First(Sort(ColOrgAllList,No,SortOrder.Descending)).No+3
    ),
   
    // newMode가 아닌 경우 겸직 부서1이 선택 되지 않으면 "", 값이 선택되면 최대 값 +3, 그 외의 경우 Default 값
    If(
        IsBlank(EmployeeID2ComboBox.Selected.Name),"",
            If(IsBlank(LookUp(ColEmployee,ID=CurrentItem.ID,No2)),First(Sort(ColOrgAllList,No,SortOrder.Descending)).No+3,Parent.Default)
    )
   
)

Visible = 
false

 

DepartmentID

Default = EmployeeIDComboBox.Selected.ID
Visible = false

 

DepartmentID1

Default =
If(IsBlank(EmployeeID1ComboBox.Selected),"",EmployeeID1ComboBox.Selected.ID)

Visible = false

 

DepartmentID2

Default =
If(IsBlank(EmployeeID2ComboBox.Selected),"",EmployeeID2ComboBox.Selected.ID)

Visible = false

 

Level

Default = If(!IsBlank(EmployeeIDComboBox.Selected),EmployeeIDComboBox.Selected.Level + 1)
Visible = false

 

Level1

Default = If(!IsBlank(EmployeeID1ComboBox.Selected),EmployeeID1ComboBox.Selected.Level + 1)
Visible = false

 

Level2

Default = If(!IsBlank(EmployeeID2ComboBox.Selected),EmployeeID2ComboBox.Selected.Level + 1)
Visible = false

 

CompanyID

Default = CompanyIDDropdown7_1_2.Selected.ID
Visible = false

 

 

댓글