-
Power Apps 코드 구성 요소(PCF) 만들기Power Platform/Power Apps 2022. 3. 19. 12:36728x90
Power Apps 사용자 지정 구성요소 - 1 코드 구성 요소 만들기
PowerApps에서 제공하는 컨트롤만을 가지고는 원하는 모양과 필요한 작업을 하지 못할 경우가 있다. 이것을 해결하기 위해 직접 만드는 걸 사용자 지정 구성요소라고 변역이 되어 있고 여기서는 코드를 통해 만들어 본다. 코드로 만드는 것을 타입스크립트와 node.js 형식으로 제공해준다. 지금부터 코드 구성요소를 만드는 실습을 해보자.
설치에 필요한 사항
- Npm 이나 Node.js 를 최신버전을 받는다.
- 비주얼 스튜디오(2019버전 이상)를 설치한다.
- Power Apps CLI 를 설치한다.
새 코드 구성 요소 프로젝트 만들기
- Power Shell을 열어 아래의 명령어를 입력한다.
pac pcf init --namespace SampleNamespace --name HelloPCF --template field
- 완료가 되면
npm install
명령어를 입력한다. code .
을 입력해 VSCode를 연다.
코드 구성 요소의 매니페스트 업데이트
- ControlManifest.Input.xml 파일에 있는 속성을 변경
- name 쪽의 속성도 바꿔준다.
<property name="Name" display-name-key="Name" description-key="A name" of-type="SingleLine.Text" usage="bound" required="true" />
- resources 안의 css를 추가한다.
<css path="css/hello-pcf.css" order="1" />
css파일 추가
- HelloPCF 폴더 안에 css 폴더를 만들고 hello-pcf.css 파일을 만든다.
- 만든파일에 아래 css를 입력
.SampleNamespace\.HelloPCF { font-size: 1.5em; }
빌드
- 아래의 명령어를 입력해 빌드를 실행한다.
npm run build
- 빌드 아티팩트에는 다음이 포함 bundle.js , ControlManifest.xml
기능 구현
- index.ts 를 연다
- class 안 상단에 다음의 private 변수를 입력한다.빌드 후 실행
// PCF context 오브젝트 private context: ComponentFramework.Context<IInputs>; // div로 감싸는 container 정의 private container: HTMLDivElement; // 속성을 변경할 때마다 호출할 콜백 만들기 private notifyOutputChanged: () => void; // 구성 요소가 편집 모드에 있는지 여부 추적할 플래그 private isEditMode: boolean; // 이벤트 처리기를 추적하여 완료되면 이를 제거할 수 있습니다. private buttonClickHandler: EventListener; // 이름 속성에 대한 추적 변수 private name: string | null;
- init 함수를 다음과 같이 변경
public init( context: ComponentFramework.Context<IInputs>, notifyOutputChanged: () => void, state: ComponentFramework.Dictionary, container: HTMLDivElement ) { // 변화 기록(트래킹) this.context = context; this.notifyOutputChanged = notifyOutputChanged; this.container = container; this.isEditMode = false; this.buttonClickHandler = this.buttonClick.bind(this); // Hello 메시지를 보유할 범위 요소 만들기 const message = document.createElement("span"); message.innerText = `Hello ${this.isEditMode ? "" : context.parameters.Name.raw}`; // 이름을 편집할 텍스트 상자를 만듭니다. const textbox = document.createElement("input"); textbox.type = "text"; textbox.style.display = this.isEditMode ? "block" : "none"; if (context.parameters.Name.raw) { textbox.value = context.parameters.Name.raw; } // 위의 두 요소를 div로 래핑하여 콘텐츠를 상자로 바꿈 const messageContainer = document.createElement("div"); messageContainer.appendChild(message); messageContainer.appendChild(textbox); // 편집 및 읽기 모드 사이를 전환할 버튼 const button = document.createElement("button"); button.textContent = this.isEditMode ? "Save" : "Edit"; button.addEventListener("click", this.buttonClickHandler); // 전체 컨트롤 컨테이너에 메시지 컨테이너 및 버튼 추가 this.container.appendChild(messageContainer); this.container.appendChild(button); }
- buttonClick 함수를 init 함수 다음에 추가
// 버튼 클릭 이벤트에 대한 이벤트 처리기 public buttonClick() { // DOM 쿼리를 통해 컨트롤 받기 const textbox = this.container.querySelector("input")!; const message = this.container.querySelector("span")!; const button = this.container.querySelector("button")!; // 편집 모드가 아닌 경우 현재 이름 값을 텍스트 상자에 복사합니다. if (!this.isEditMode) { textbox.value = this.name ?? ""; } else if (textbox.value != this.name) { // 편집 모드에서 텍스트 상자 값을 복사하여 이름을 지정하고 모티프 콜백을 호출합니다. this.name = textbox.value; this.notifyOutputChanged(); } // 모드 변경 this.isEditMode = !this.isEditMode; // 변경 사항에 따라 새 출력 설정 message.innerText = `Hello ${this.isEditMode ? "" : this.name}`; textbox.style.display = this.isEditMode ? "inline" : "none"; textbox.value = this.name ?? ""; button.textContent = this.isEditMode ? "Save" : "Edit"; }
- Update 함수를 다음과 같이 변경
public updateView(context: ComponentFramework.Context<IInputs>): void { // 외부에서 들어오는 업데이트 확인 this.name = context.parameters.Name.raw; const message = this.container.querySelector("span")!; message.innerText = `Hello ${this.name}`; }
- getOutputs 함수를 다음과 같이 변경
public getOutputs(): IOutputs { return { // 이름 변수가 null인 경우 대신 정의되지 않은 반환 Name: this.name ?? undefined }; }
- destroy 함수를 다음과 같이 변경
public destroy() { // init에서 만든 이벤트 리스너 제거 this.container.querySelector("button")!.removeEventListener("click", this.buttonClickHandler); }
빌드 후 실행
- 아래 명령어를 입력해 빌드한다.
npm run build
- 아래 명령어를 입력해 실행해본다.(실행 중 바뀌는 것을 확인 하고 싶으면 watch를 추가한다)
npm start
- 결과이미지
참고 사이트
https://docs.microsoft.com/ko-kr/learn/modules/build-power-app-component/1-create-code-component
728x90반응형'Power Platform > Power Apps' 카테고리의 다른 글
Power Apps 코드 구성요소(PCF) - React 사용 (0) 2022.03.23 AI Builder - 양식 처리 (0) 2022.03.22 Power Apps 사용자 지정 구성요소 - 2 솔루션 만들어 포함시키기 (0) 2022.03.20 파워앱스 컨트롤 - 텍스트 인식기 (0) 2022.03.17 PowerApps 컨트롤 - 그룹과 컨테이너 (0) 2022.02.26