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

PowerApps으로 만드는 조직도 솔루션 - 05. 자동 번호 및 순서 변경

by 이완주 2024. 9. 20.

 

 

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

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

leemcse.tistory.com

 

조직도의 표현에 있어 입사년도 직위 직책의 순서대로 직원을 표현해야 한다.

 

여기서는 새롭게 등록하면 기존 OrderNo에 +1을 하여 자동으로 번호를 부여하고

부여된 번호를 원하는 순서로 변경하여 화면에 표시되는 값이 원하는 순서로 표시 되게 구성.

 

아래 표현은 부서의 순서, 같은 부서내에 상급자가 위헤 표시, 동일 직급에서는 관리자의 결정에 의해 화면에 표시되는 순서를 변경 할 수 있게 구성 될 수 있어야 한다.

 

번호를 직접 수정하게 되면 

 

아래 방법은 조직도의 대부분 화면에서 동일하게 구성하게 된다.

 

아래 디자인은 실제 사용하는 앱의 예시로 만들어지는 앱은 디자인을 최소화하여 만들어 아래 화면과 다르게 구성 됩니다.

 

지원 정보 수정 - 소속 부서의 순서 변경, 사번 변경

 

직위 순서 변경 - 직위를 원하는 순서로 변경 가능

 

화면 View 설정 - 변수 설정을 하여 화면 표시

OnSelect = UpdateContext({ itemSelected: true, CurrentItem: ThisItem, newMode:false ,editMode: false, deleteMode:false })

 

갤러리를 선택하지 않으면 화면에 표시하지 않음

Visible = !IsBlank(CurrentItem)

 

갤러리 이름 변경 및 Sort 순서 변경

기본 생성된 갤러리의 이름을 변경 DomainGallery 하고 Sort 순서를 OrderNo 순서로 변경

Items = Sort(OrgDomainName,OrderNo)

 

앱의 기본 버튼 및 속성 이해

아래 아이콘을 클릭하면 해당 모드가 True로 설정

 

새로 만들기

OnSelect = NewForm(Form1); UpdateContext({ newMode: true });

 

자동 번호 부여

기존 OrderNo 가 없으면 (최초로 값이 등록 되면) OrderNo에 10, 기존 등록된 값이 있으면 OrderNo 마지막 값 + 1 로 설정

되고 화면에 OrderNo는 표시되지 않아도 된다.

 

기본 값은 아래와 같이 되어 있고 Default 값은 아래와 같이 구성되어 있다.

Default = Parent.Default

 

Form의 카드는 속성을 변경하지 못하게 잠겨있다. 이를 해제해야 값을 수정 할 수 있다.

 

Default = Parent.Default 의 설정 값을 아래로 변경

아래 노랑색으로 칠한 부분은 SharePoint Lists 목록에 따라 변경

If(newMode, // newMode 이면 아래 값을 실행
    If(IsBlank(First(OrgDomainName).OrderNo),
        // OrgDomainName 리스트에 값이 없으면 10
        10,
        // OrgDomainName 리스트에 값이 있으면 해당 값의 OrderNo의 마지막 값에 + 1
        First(Sort(OrgDomainName,OrderNo,SortOrder.Descending)).OrderNo + 1

    ),
    // newMode 가 아니면 Default 값 설정
    Parent.Default
)

 

필수 입력갑 입력시 저장 버튼 활성

필수 값이 입력되지 않으면 저장 되지 않게 구성하려면 아래와 같이 저장버튼에 DisplayMode를 변경하면 된다.

 

//DisplayMode.Edit
If(IsBlank(DomainNameNameCard.Text),DisplayMode.Disabled,DisplayMode.Edit)

 

위의 내용을 좀더 응용해서 @로 시작된 경우만 DisplayMode=Edit 로 설정

다양한 조건을 부여하면 원하는 대로 설정 가능

If(newMode,If(IsBlank(LookUp(OrgDomainName,Name=DomainNameNameCard.Text)) And !IsBlank(DomainNameNameCard.Text) And Left(DomainNameNameCard.Text,1)="@",DisplayMode.Edit,DisplayMode.Disabled),DisplayMode.Edit)

 

OrderNo 변경

OrderNo는 Edit 모드에서만 보이게 구성하고 newMode에서는 보이지 않게 구성

Visible = editMode

 

Edit 버튼 클릭

Edit 버튼을 클릭하면 Collection을 만들기

ColDomainName 을 만들어 순서를 변경할 수 있게 한다.

// edit 클릭하면 editMode=True 현재 선택된 레코드를 selectedRecord 에 저장
UpdateContext({ editMode: true, selectedRecord: DoaminGallery.Selected });

// ColDomainName 컬렉션을 초기화
Clear(ColDomainName);

// OrgDomainName 값으로 컬렉션을 만들기
ForAll(
    Sort(OrgDomainName,OrderNo,SortOrder.Ascending),
    Collect(
        ColDomainName,
        {
            ID: ID,
            cOrderNo: OrderNo,
            cName: Name,
            cID: First(Sort(ColDomainName,cID,SortOrder.Descending)).cID +1,
            cIsCheck: false
        }
    )
);

 

 

겔러리를 만들고 순서를 변경 할 수 있게 구성

 

OrderNo 순서 바꾸는 세부 설정 방법은 아래 동영상 참고

 

 

 

저장 버튼을 눌렀을 때 수정 된 값을 저장하고 editMode = false 로 변경

If(editMode,
    // Name 값이 변경되었을 경우 저장
    If(DoaminGallery.Selected.Name<>DomainNameNameCard.Text,Patch(OrgDomainName,First(Filter(OrgDomainName,ID=DoaminGallery.Selected.ID)),{Name:DomainNameNameCard.Text}););

    // 순서 변경은 변경된 값을 확인하여 OrderNo를 변경
    If(!IsBlank(LookUp(ColDomainName,cIsCheck= true )),ForAll(RenameColumns(Filter(ColDomainName,cIsCheck= true ),ID,NewID),Patch(OrgDomainName,LookUp(OrgDomainName,ID=NewID),{OrderNo:cOrderNo})))
    ,
    // newMode에서 DomainForm을 저장
    SubmitForm(DomainForm)
);
// editMode 및 newMode를 false로 변경
UpdateContext({ editMode: false, newMode: false });

 

모든 페이지에서 자동 번호와 순서 변경 방법은 위의 방법으로 동일하게 구성한다.

 

지위, 직책, 회사, 메일 화면은 위의 방법으로 저장하면 된다.

 

[결과화면] - 새로만들기

Name 값이 비어 있거나 조건이 맞지 않으면 저장 버튼은 비활성화 된다.

OrderNo는 자동으로 부여된다. 값이 없을 경우 10, 값이 있으면 최대값 + 1

 

[결과화면] - 편집

편집 모드는 이름과 OrderNo를 변경 할 수 있다.

 

[결과화면] - 삭제

선택 된 레코드를 삭제 할 수 있다.

 

댓글