형식화되지 않은 동적 개체 작업

Power Apps에서 작업을 처리할 때 일부 작업에 대해 형식화되지 않은 반환 값 또는 입력 값이 발생할 수 있습니다. 이전에는 Power Apps가 형식화되지 않은 입력 필드나 동적 입력 필드를 무시하고 PowerFX 표현식에 표시되지 않았지만 이제는 이러한 필드로 직접 작업할 수 있습니다. 이전에는 반환 유형이 지정되지 않은 경우 Power Apps가 부울 값을 반환했습니다. 이제는 형식화되지 않은 개체를 대신 반환합니다.

참고

Power Fx 표현식이 이러한 함수의 부울 반환 값에 의존한다고 가정합니다. 이 경우 수식을 다시 작성하고 유형이 지정되지 않은 개체를 부울로 명시적으로 캐스팅해야 합니다. 'IfError'와 같은 특정 함수는 아직 형식화되지 않은 개체를 완전히 지원하지 않습니다. 식에 이러한 함수가 포함된 경우 해결 방법은 이 문서 끝에 있는 참고 사항을 참조하세요.

형식화되지 않은 개체를 매개 변수로 전달

특정 작업에는 형식화되지 않은 개체가 매개 변수 값으로 필요합니다. Power Fx 레코드가 있는 경우 형식화되지 않은 개체로 변환하여 작업에 전달하기에 적합하도록 만들 수 있습니다.

아래 예에서 Dataverse 계정 테이블에서 사용할 수 있는 병합 작업에는 형식화되지 않은 여러 인수가 필요합니다. 준비를 위해 TargetObject, SubordinateObject 및 UpdateContextObject를 보유할 세 가지 변수를 정의합니다. Microsoft.Dynamics.CRM.account 텍스트 문자열을 변수에 할당하는 것으로 시작하여 예제 전체에서 재사용할 것입니다.

Set (OdataType, “Microsoft.Dynamics.CRM.account”);

그런 다음 TargetObject에 name, accountid 및 @odata.type 속성이 있는 Power Fx 레코드가 할당됩니다. 마찬가지로 Subordinate 및 UpdateContext 개체에도 Power Fx 레코드를 할당합니다.

Set (TargetObject, {name: "Test 2", accountid: "145dc2ba-85a2-ed11-aado-0022482d76a5", '@odata.type': OdataType});
Set (SubordinateObject, {name: FirstRecord.’Account name’, accountid: FirstRecord.Account, ‘@odata.type’ : OdataType });
Set (UpdateContextObject, {telephone1: FirstRecord.’Main Phone’, address1_city: FirstRecord.’Address 1 : City’, ‘@odata.type’ : OdataType }); 

다음으로 변환 후 형식화되지 않은 레코드를 저장하기 위해 TargetUntypedObject, SubordinateUntypedObject 및 UpdateContextUntypedObject라는 세 가지 변수를 더 만듭니다. 변환을 수행하기 위해 원래 변수에 ParseJSON(JSON()) 함수를 사용합니다. 이 작업은 Power Fx 레코드를 형식화되지 않은 개체로 변환합니다.

Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));

마지막으로 형식화되지 않은 항목과 형식화된 항목을 모두 포함하여 필요한 매개 변수를 전달하여 병합 작업을 호출합니다.

Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false  });

작업을 통해 반환된 형식화되지 않은 개체 사용

작업 기반 커넥터가 개체를 반환하는 경우 유형 할당 여부에 관계없이 해당 속성에 직접 액세스할 수 있습니다. 그러나 레이블 지정과 같은 Power Apps의 특정 목적을 위해 속성을 사용하려는 경우 먼저 속성을 캐스팅해야 합니다.

다음 예제에서 httpRequest 함수는 이전에 부울로 캐스팅된 형식화되지 않은 개체를 반환합니다.

Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));

응답의 속성 중 하나는 displayName입니다. 다음과 같은 Power Fx 표현식을 사용하여 액세스하고 캐스팅할 수 있습니다.

Text(response.displayName)

Power Apps label 컨트롤에서 사용하기 위해 개체 텍스트로 캐스트합니다.

동적 필드 작업

작업 응답은 이제 동적 출력을 캡처하며 위에서 설명한 방법을 활용하여 이러한 속성에 액세스할 수 있습니다. 또한 동적 입력 필드 작업도 가능합니다.

동적 입력 본문 매개 변수가 있는 Microsoft Teams의 'GetMessageDetails' 조치를 고려하세요. 이전에는 이 매개 변수를 보거나 지정할 수 없었습니다. 최근 업데이트를 통해 적절한 Power Fx 레코드 구조로 'body'라는 변수를 설정할 수 있습니다.

Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));

그런 다음 GetMessageDetails 작업을 호출하고 teamsResponse 변수에 응답을 할당할 수 있습니다.

Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));

이전에 부울을 반환한 형식화되지 않은 개체를 반환하는 수식을 변환합니다.

Power Fx는 제한된 수의 형식화되지 않은 개체를 사용하므로 수식에 명시적 변환이 필요할 수 있습니다. 특히 공식이 부울 응답에 의존하는 경우 변환해야 합니다. 오류가 있는지 간단히 알아야 하는 경우 IsError 함수를 사용할 수 있습니다.

If(
  IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
  Notify("An Outlook appointment could not be found or could not be deleted")
)

IfError를 통해서만 사용할 수 있는 오류 정보에 액세스하려면 부울, 텍스트 또는 값과 같은 변환 함수를 사용하여 형식화되지 않은 개체를 유효한 유형으로 변환해야 합니다. 이러한 함수는 오류가 주어지면 오류를 생성합니다. 다음 예는 이를 보여줍니다.

With({result: Office365Outlook.CalendarDeleteItemV2("Calendar", 1)},
If( IsError(result),
  IfError(
    Boolean(result),  // any conversion function would do, such as Text, Value, …
    Notify("An Outlook appointment could not be found or could not be deleted: " & FirstError.Message)
) ) )