Power FxYAML 수식 문법
참고
Microsoft Power Fx는 캔버스 앱용 수식 언어의 새 이름입니다. 이러한 문서는 캔버스 앱에서 언어를 추출하고 다른 Microsoft Power Platform 제품과 통합하여 오픈 소스로 제공하는 과정에서 진행중인 작업입니다. 언어에 대한 소개를 위해 Microsoft Power Fx 개요로 시작하십시오.
Microsoft Power Fx에는 Excel을 기반으로 한 식에 대해 잘 정립된 문법이 있습니다. 그러나 UI가 수식에 대한 이름-표현식 바인딩을 제공하는 Power Apps 및 기타 호스트에서 사용되는 경우 수식 바인딩을 텍스트로 편집하는 표준 방법이 없습니다.
이 바인딩의 언어로 업계 표준 YAML을 선택했습니다. YAML 작업을 위한 많은 편집기, 도구 및 라이브러리가 이미 있습니다. 이 문서에서는 YAML에서 공식을 표현하는 방법을 설명합니다.
현재는 제한된 YAML 하위 집합만 지원합니다. 이 문서에서 설명하는 구성만 지원됩니다.
캔버스 앱을 정의하는 모든 것이 여기에 표시되는 것은 아니며 추가 정보는 도구가 생성하고 소비하는 다른 파일을 통해 이동합니다.
선행 등호
우선 모든 식은 선행 등호 =
로 시작해야 합니다.
Visible: =true
X: =34
Text: |
="Hello, " &
"World"
다음과 같은 세 가지 이유로 =
을 이러한 방식으로 사용합니다.
- 선행
=
를 사용하여 식을 셀에 바인딩하는 Excel과 일치합니다. - YAML이 구문 분석을 시도하지 않도록 공식 언어의 구문을 효과적으로 이스케이프합니다. 일반적으로 YAML은
text: 1:00
을 분과 초로 처리하여 숫자로 변환합니다.=
을 삽입하면 YAML은 암시적 입력 규칙을 사용하지 않으며 수식이 손상되지 않습니다.=
사용하여 대부분의 케이스를 처리할 수 있지만 전부는 아니며 이러한 예외는 다음 섹션 한 줄 수식에 설명되어 있습니다. - 앞으로는 Excel과 마찬가지로 동일한 파일에서 수식(
=
로 시작)과 비수식(`=
없음) 모두를 지원할 예정입니다. Microsoft Power Platform 소스 파일에서처럼 YAML 및 비 YAML 파일로 이 작업을 수행할 수 있습니다. 수식이 지원되는 모든 위치에서 선행=
은 Power Apps 수식 식과 정적 스칼라 값을 구분합니다.
한 줄 수식
한 줄 수식은 다음과 같은 형식으로 작성됩니다.
이름:
SPACE
=
표현식
콜론과 등호 사이의 공백은 YAML을 준수해야 합니다. 등호는 식에 대한 YAML의 정상적인 해석을 방해하여 나머지 행이 Power Fx로 해석될 수 있도록 합니다. 예:
Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34
숫자 기호 #
및 콜론 :
은 따옴표로 묶인 문자열이나 식별자 이름에 있더라도 한 줄 수식에서 사용할 수 없습니다. 숫자 기호 또는 콜론을 사용하려면 수식을 여러 줄 수식으로 표현해야 합니다. 숫자 기호는 YAML에서 주석으로 해석되고 콜론은 YAML에서 새 이름 맵으로 해석됩니다. 한 줄 주석에 주석을 추가하려면 //
로 시작하는 Power Fx 줄 주석을 사용하십시오.
작은 따옴표와 C와 같은 백슬래시와 함께 일반 YAML 이스케이프를 사용하는 것은 지원되지 않으며 대신 여러 줄 공식을 사용하십시오. 이는 일관성을 유지하고 Power Apps Studio의 수식 표시 줄과 YAML 소스 파일 간의 잘라내기/붙여넣기를 지원 하기 위한 것입니다.
허용되는 이름 및 표현식 구조에 대한 자세한 내용은 캔버스 앱 연산자 및 식별자 문서를 참조하세요.
여러 줄 수식
수식은 YAML의 블록 스칼라 표시기를 사용하여 여러 줄을 연결할 수 있습니다.
이름:
SPACE
( |
또는 |+
또는 |-
) =
표현식-줄표현식-줄 ...
블록의 일부인 모든 줄은 첫 번째 줄 수준에서 적어도 한 칸 들여 쓰기해야 합니다.
예:
Text1: |
="Hello, World"
Text2: |
="Hello" &
"," &
"World"
예를 들어 >+
를 포함한 모든 형태의 YAML 여러 줄 스칼라 표기법이 가져오기 시 허용됩니다. 그러나 공백이 제대로 유지되도록 하기 위해 |
, |+
또는 |-
만 생성됩니다.
구성 요소 인스턴스
구성 요소는 YAML 개체 표기법을 사용하여 인스턴스화됩니다. 개체의 유형은 왼쪽 YAML 태그의 일부로 As
연산자로 설정됩니다. 컨테이너 컨트롤의 경우 개체를 중첩할 수 있습니다.
이름As
구성 요소 유형 [ .
구성 요소 템플릿 ] :
( 단일 줄 수식 또는 다중 줄 수식 또는 개체 인스턴스 ) ...
블록의 일부인 모든 줄은 첫 번째 줄 수준에서 적어도 한 칸 들여 쓰기해야 합니다.
예:
Gallery1 As Gallery.horizontalGallery:
Fill: = Color.White
Label1 As Label:
Text: ="Hello, World"
X: =20
Y: =40
Fill: |
=If( Lower( Left( Self.Text, 6 ) ) = "error:",
Color.Red,
Color.Black
)
Component-Type 은 모든 캔버스 구성 요소나 컨트롤이 될 수 있습니다. 숫자와 같은 기본 유형은 지원되지 않습니다.
Component-Template 은 갤러리와 같이 서로 다른 템플릿을 갖는 구성 요소를 위한 선택적 지정자입니다. 모든 구성 요소에 템플릿이 있는 것은 아닙니다.
이름에 특수 문자가 포함되어 있고 작은 따옴표로 묶인 경우 콜론 왼쪽에 있는 전체 구를 이스케이프해야 합니다. 다음 방법 중 하나로 수행할 수 있습니다.
- 작은 따옴표를 사용하여 왼쪽 전체를 묶습니다. 이 경우 기존 작은 따옴표를 두 번 사용해야 합니다.
'''A name with a space'' As Gallery':
- 큰 따옴표를 사용하여 전체 왼쪽 전체를 묶지만 이름에 큰 따옴표가 없는지 확인하세요.
"'A name with a space' As Gallery":
구성 요소 정의
마찬가지로 구성 요소는 지원되는 기본 유형 중 하나의 인스턴스를 만들어 정의됩니다. 기본 유형은 직접 인스턴스화할 수 없습니다. 개체 정의 내에서 기본 유형이 제공하는 항목에 속성을 추가할 수 있습니다.
지원되는 기본 유형은 CanvasComponent입니다.
단순 속성 정의
구성 요소는 속성을 사용하여 호스팅되는 앱과 통신합니다.
이름:
( 단일 줄 표현식 또는 다중 줄 표현식 )
수식 유형은 표현식 유형에 의해 암시됩니다.
입력 속성의 경우 식은 구성 요소가 인스턴스화될 때 앱에 삽입되는 기본값을 제공합니다. 제작자는 이 식을 원하는 대로 수정할 수 있지만 유형은 변경할 수 없습니다.
출력 속성의 경우 식은 수행할 계산을 제공합니다. 제작자는 이 식을 수정할 수 없으며 구성 요소에 캡슐화되어 있습니다.
현재 모든 속성은 데이터 흐름 전용이며 부작용을 포함할 수 없습니다.
현재 속성에 대한 추가 메타데이터는 여기에 정의되지 않고 대신 .msapp
파일의 다른 파일(예: 속성 설명)에 정의되어 있습니다.
예:
DateRangePicker As CanvasComponent:
DefaultStart: |-
=// input property, customizable default for the component instance
Now()
DefaultEnd: |-
=// input property, customizable default for the component instance
DateAdd( Now(), 1, Days )
SelectedStart: =DatePicker1.SelectedDate // output property
SelectedEnd: =DatePicker2.SelectedDate // output property
YAML 호환성
YAML 주석
숫자 기호 #
로 구분된 YAML 줄 주석은 소스 형식의 어디에도 보존되지 않습니다. 대신 수식 내에서 줄 주석을 //
문자로 구분하거나 /*
및 */
으로 차단하십시오. 추가 정보: 주석
일반적인 함정에 대한 오류
Power Fx와 YAML 문법이 호환되지 않거나 사용자에게 혼동을 줄 수 있는 곳이 몇 군데 있습니다. 이 경우 오류가 발생합니다.
예를 들면 다음과 같습니다.
Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }
숫자 기호 #
은 Excel에서 텍스트 문자열(큰 따옴표로 묶임)로 간주하는 항목에 포함되어 있어도 YAML에서 주석으로 처리됩니다. 이 경우 혼동을 방지하기 위해 가져오는 동안 오류가 발생합니다. 대신 YAML 여러 줄 형식을 사용할 수 있습니다.
record
값의 경우 YAML은 a:
및 b:
를 다른 이름 맵 바인딩으로 간주합니다. YAML을 사용하면 이전 정의를 자동으로 무시하고 동일한 이름 맵을 재사용할 수 있습니다. 이것은 로우코드 제작자에게는 혼란스러울 수 있고 속성 수식이 손실될 수 있기 때문에 같은 이름이 두 번 발견되면 오류가 발생합니다.