부서 새로 만들기
1. 입력은 최소로하여 이름과 소속 부서만 넣어 만들 수 있어야 한다.
2. 필수 입력값 외에는 자동으로 설정하게 구성
3. 같은 회사에 동일 이름의 부서가 만들어 지면 안되게 구성되어야 한다.
[구성 전 화면]
새로만들기 - 설정
부서를 새로 만들기 위해서 이름과 소속 부서를 선택하면 선택된 부서를 기준으로 나머지 값을 자동으로 설정
설정 값은 아래와 같이 설정 후 Name 값과 Description 값을 제외한 모든 값은 Visible = false로 설정하여 화면에 나타나지 않게 구성한다.
컬렉션 만들기
화면 선택 Default 설정
화면이 나타나면 아래의 옵션 수행
DepartmentScreen 의 OnVisible 내용 수정
컬렉션이 나오지 않게 false로 설정
Department 값을 새롭게 가져오기
// 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
}
)
);
// ColDepartmentSub 보이지 않게 초기화
UpdateContext({varNewSelect:false,editMode: false, newMode: false,deleteMode:false});
|
visible 값 true 설정
화면에 표시되는 값은 Visible 값이 true 인 값만 나타나게 되어 있다.
Visible 속성이 Default 가 false로 되어 있어 SubmitForm(DepartmentForm) 하게되면 OrgDepartment 값의 visible 값이 false로 들어가게 되어 원하는 표현이 되지 않게 된다.
위의 값의 Default를 true로 변경
Default = true |
갤러리의 값을 컬렉션으로 만들기 - Description 항목에 갤러리를 추가하여 구성
부서 계층 구조로 만든 왼쪽 Department 갤러리를 복사하여 수정하여 만듬
그룹 레벨은 5레벨까지로 상위 부서는 4레벨까지 선택이 가능함으로 갤러리에 표시는 Level 4까지 표현 가능하게 구성
OnSelect 로 선택 후 Disable 하여 화면에 나타나지 않음
Items = Filter(Sort(ColDepartmentSub,OrderNo),Visible=true And Level<5)
OnSelect = UpdateContext({ itemSelectedSub: true, CurrentItemSub: ThisItem });UpdateContext({varNewSelect:false})
Visible = varNewSelect
|
Description 값
선택된 값의 Level=0 이면 부서이름, 그렇지 않으면 선택된 값의 Description 값에 / 부서이름을 넣어 만들기
해당 값은 화면에 나타날 필요가 없음으로 Visible 속성은 false
Default = If(newMode,If(CurrentItemSub.Level > 0,CurrentItemSub.Description & "/" & DepartmentNameCard.Text,DepartmentNameCard.Text ),Parent.Default)
Visible = false |
선택된 상위 부서 이름을 표현
왼쪽 선택된 부서이름을 기본 값으로 하고 소속 부서를 선택하면 선택한 부서가 나타나게 구성
새로 만들기에서 왼쪽 선택 값 확인
// DepartmentForm 초기화
NewForm(DepartmentForm);
// 왼쪽 선택된 아이템을 Default로 설정 및 NewMode 선언
UpdateContext({ CurrentItemSub: CurrentItem, varNewSelect:false, newMode: true });
|
Default = CurrentItemSub.Name
DisplayMode = DisplayMode.View
|
갤러리 선택하면 선택된 갤러리 값으로 변경
OnSelect = UpdateContext({ itemSelected: true, CurrentItem: ThisItem, newMode:false ,editMode: false, deleteMode:false })
|
버튼 선택하면 DepartmentNameGallery 초기화 및 표시
OnSelect = Reset(DepartmentNameGallery);UpdateContext({varNewSelect:!varNewSelect})
|
선택 값 변수 저장
DepartmentNameGallery 의 OnSelect 하면 선택된 값을 변수에 저장하고 Gallery를 Visible 값을 false로 설정
OnSelect = UpdateContext({ itemSelectedSub: true, CurrentItemSub: ThisItem });UpdateContext({varNewSelect:false})
Visible = varNewSelect
|
OrderNo 설정
newMode 일때 선택된 값의 OrderNo를 가져와 자동으로 OrderNo 설정
If(
newMode,
// 현재 선택된 값의 OrderNo 의 Level*5+2 길이 만큼의 값
Left(LookUp(ColDepartmentSub,ID=CurrentItemSub.ID,OrderNo),LookUp(ColDepartmentSub,ID=CurrentItemSub.ID,Level)*5+2)&
// 값이 없으면 10001, 값이 있으면 No의 최대 값에 +1
If(IsBlank(First(OrgDepartment).No),"10001",First(Sort(OrgDepartment,No,SortOrder.Descending)).No+1)&
// 회사코드 2자리 + 부서 코드 5(자릿 수) * 5 (Level)의 자리수를 만들기 위해 나머지 자리에 0으로 채운 값 설정
Left("000000000000000000000000000000",25-LookUp(ColDepartmentSub,ID=CurrentItemSub.ID,Level)*5)
,
Parent.Default
)
|
OrderNo 숨기기
Name 과 Description 값을 제외한 모든 Card는 Visible=false로 화면에 보이지 않게 구성
Visible = false |
No 설정
No의 초기 값은 10001로 이후 만들어지는 값은 최대 값 + 1 으로 자동 설정
Default = If(newMode,If(IsBlank(First(OrgDepartment).No),"10001",First(Sort(OrgDepartment,No,SortOrder.Descending)).No + 1),Parent.Default)
|
ParentNo 설정
갤러리에 선택된 값이 상위 부서로 선택된 값의 No를 ParentNo로 설정
Default = If(newMode,CurrentItemSub.ID,Parent.Default)
|
Level 설정
선택된 레벨 + 1 설정
Default = If(newMode,CurrentItemSub.Level + 1,Parent.Default)
|
CompanyID 설정
선택된 CompanyID로 설정
Default = If(newMode,CurrentItemSub.CompanyID,Parent.Default)
|
Company 설정
선택된 Company로 설정
Default = If(newMode,CurrentItemSub.Company,Parent.Default)
|
저장 버튼 활성화
저장 버튼은 아래 조건을 만족해야 활성화가 된다.
1. 기존에 부서 이름으로 사용하지 않은 경우 (부서 이름 중복 확인)
editMode의 경우 선택된 이름과 같은 경우는 제외
2. Name 값이 비어 있는 경우
If(
newMode,
// 등록된 이름과 이름 값이 비어 있으면 DisplayMode = DisplayMode.Disabled
If(IsBlank(LookUp(Filter(OrgDepartment,CompanyID=CurrentItemSub.CompanyID),Name=DepartmentNameCard.Text)) And !IsBlank(DepartmentNameCard.Text),DisplayMode.Edit,DisplayMode.Disabled),
editMode,
//
If(
// 등록된 이름 중 선택된 이름을 제외한 이름과 같은지 확인
Or(CurrentItem.Name = DepartmentNameCard.Text, IsBlank(LookUp(Filter(OrgDepartment,CompanyID=CurrentItemSub.CompanyID),Name=DepartmentNameCard.Text)))
// 값이 비어 있는지 확
And !IsBlank(DepartmentNameCard.Text),DisplayMode.Edit,DisplayMode.Disabled
)
)
|
저장
값을 저장하고 컬렉션을 업데이트
If(editMode,
// Name 값이 변경되었을 경우 저장
If(DepartmentGallery.Selected.Name <> DepartmentNameCard.Text,Patch(OrgDepartment,First(Filter(OrgDepartment,ID=DepartmentGallery.Selected.ID)),{Name:DepartmentNameCard.Text}));
// 순서 변경은 변경된 값을 확인하여 OrderNo를 변경
If(!IsBlank(LookUp(ColDepartmentEdit,cIsCheck= true )),ForAll(RenameColumns(Filter(ColDepartmentEdit,cIsCheck= true ),ID,NewID),Patch(OrgDepartment,LookUp(OrgDepartment,ID=NewID),{OrderNo:cOrderNo})))
,
// newMode에서 JobtitleForm 저장
SubmitForm(DepartmentForm)
);
// 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
}
)
);
// ColDepartmentSub - 부서 관리를 위해 생성
ClearCollect(ColDepartmentSub,ColDepartment);
// 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
}
)
);
|
댓글