PowerApps에서 버튼을 select로 호출하고 함수처럼 사용하려고하면 아픈 눈에 있었다.

4673 단어 PowerApps

소개



PowerApps에서는 직접 만든 함수를 사용할 수 없습니다. (스스로 정의한 함수, 라고 하는 편이 좋은 것인가...)
그래서 버튼에 처리를 넣어 다른 컨트롤에서 select로 호출하려고하면 상정과 다른 동작을했다.
그래서 매우 간단한 처리로 재현해 보니 역시 할 수 없었습니다.
라는 메모입니다.

업데이트 (2020/5/28)



이런 일이었습니다.

Select는 후속 처리를 위해 대상 OnSelect를 대기열에 넣습니다. 이 동작은 현재 수식 평가가 완료된 후에 수행될 수 있습니다. Select는 OnSelect를 즉시 평가하거나 Select가 OnSelect 평가가 완료 될 때까지 기다리지 않습니다.

Power Apps의 Select 함수

원래



Select로 버튼 동작을 호출하려고 해도, 다른 화면의 컨트롤의 OnSelect는 호출할 수 없다.
그래서 인수 대신에 글로벌 변수에 Set하고 나서, 다른 화면에 visible=false 로 한 버튼을 Select로 호출하는 것 같은 것은, 원래 할 수 없습니다.
이마이치는 사용하기 어렵습니다.

화면을 가로질러 Select를 사용할 수 없습니다.

출처: Select 함수 (MS 수식 참조에서)

검증



이런 화면을 준비
의사 OnVisible 버튼 여기는, 본래, 화면 표시에 초기화하는 상정의 처리를 넣고 있습니다. (strCheck이라는 문자열을 초기화하고 있습니다.) 의사 OnVisible.Onselect UpdateContext({strCheck:""}) 함수 처리 버튼 이 화면에서 여러 번 호출되는 것과 같은 공통 처리를 함수적으로 사용하려고 하는 처리의 내용입니다. (알기 쉽도록 단순히 문자열에 대입하고 있습니다) 함수 처리. OnSelect UpdateContext({strCheck:"Function"}) 함수 호출 버튼 위의 함수를 호출 한 후 다른 처리를 시도합니다. 예상되는 동작은 Select에서 함수 처리를 호출 한 후에 다른 처리를 수행합니다. 라는 것입니다. (알기 쉽도록 함수 처리 후 같은 변수에 다른 값을 대입하고 있습니다. 덮어 쓰기되는 것을 상정하고 있습니다.) 함수 호출. OnSelect Select(함수 처리) ;UpdateContext({strCheck:"NextProcedure"}) 처리를 베타 쓰기 버튼 비교를 위해, 함수 처리에서 행해지는 처리를, Select에 의한 호출이 아니고, 직접 기입하고 있습니다. (후투의 사고방식이라면, 이러지 않기 때문에 「공통적인 처리를 함수화해 호출한다」군요) 처리를 작성합니다. OnSelect UpdateContext({strCheck:"Function"}) ;UpdateContext({strCheck:"NextProcedure"}) 확인용의 라벨에는, 각 버튼으로 대입되었을 것이다 캐릭터 라인의 문맥 변수 strCheck 를 표시시키고 있습니다. 라벨.Text strCheck 예상되는 동작 "함수 호출"버튼을 누르거나 "처리를 베타 쓰기"버튼을 누르더라도 같은 처리가됩니다. 라고 생각하지 않습니까? 기능 처리 버튼을 누르면

음, 당연하네요.
그 버튼의 OnSelect 에 strCheck의 대입이 있기 때문에.

처리를 베타 쓰기 버튼 누르면





이것은 또한 예상되는 동작과 같습니다.
첫 번째 UpdateContext에서 strCheck에 "Function"이라는 문자열이 할당됩니다.
그 후, UpdateContext 그리고 strCheck에 "NextProcedure"라는 문자열이 대입되므로,
레이블에는 "NextProcedure"가 표시되어야 합니다. 실제로 그렇습니다.

함수 호출 버튼을 누르면





그래?
한 순간, 라벨에 "NextProcedure"가 표시된 것처럼 보이지만, 그 후, "Function"라고 하는 표시가 되어 버립니다.
즉, Select(함수 처리) 처리 후에 UpdateContext({strCheck:"NextProcedure"})가 처리되는 것은 아닙니다.

그 때문에, 당초의 논란이었던, 「특정의 처리를 버튼에 넣어 Select로 호출해 함수적으로 이용한다」를 할 수 없었습니다.

하고 싶었던 것은 특정 버튼에
  • Select에서 함수적으로 호출 된 버튼으로 컬렉션을 생성 한 다음
  • 후속의 처리로, 그 컬렉션에 대해, 다른 처리를 시킨다

  • 라고 하는 것을 하고 싶었습니다만, 선행하는 처리가 완료되지 않은 채, 후속의 처리가 행해져 버려, 「그런 컬렉션 응」이라고 화내 버렸습니다.

    사이고에게



    어, 왜? ? ?
    「수식에 출현하는 순서로 실행된다」는 아닌 것 같습니다.
    Select가 완료되고 나서, 다음의 함수를 개시해 주었으면 하는데.

    덧붙여서, 레퍼런스에서는, 이하와 같은 설명이었습니다.

    여러 액션
    수행할 작업 목록을 만들려면 세미콜론을 사용합니다. 예를 들어 컨텍스트 변수를 업데이트하고 이전 화면으로 돌아가려면 다음을 지정합니다.UpdateContext( { x: 1 } ); Back()액션은 수식에 나타나는 순서대로 실행됩니다. 현재 함수가 완료되지 않으면 다음 함수가 시작되지 않습니다. 오류가 발생하면 후속 함수가 시작되지 않을 수 있습니다.

    출처: 동작 수식 > 여러 동작 (MS 수식 참조에서)

    출처



    항상 신세를지고 있습니다.
    htps : // / cs. 미 c 로소 ft. 코 m / 쟈 jp / 포 랏 ps / 마케 r / 칸 ゔ ぁ s ps / 흠 r ぁ

    좋은 웹페이지 즐겨찾기