Errors 함수

적용 대상: 캔버스 앱 모델 기반 앱

데이터 원본의 이전 변경에 대한 오류 정보를 제공합니다.

개요

데이터 원본의 레코드가 변경되면 오류가 발생할 수 있습니다. 네트워크 중단, 부적절한 권한 및 편집 충돌을 포함한 여러 가지 원인이 있을 수 있습니다.

Patch, Collect, Remove, RemoveIf, Update, UpdateIf, SubmitForm과 같이 데이터 소스의 데이터를 수정하는 함수는 두 가지 방법으로 오류를 보고합니다.

  • 이러한 각 함수는 작업 결과로 오류 값을 반환합니다. 오류는 IsError로 감지할 수 있으며 평소와 같이 IfErrorApp.OnError로 대체하거나 억제할 수 있습니다. 자세한 내용은 오류 처리를 참조하세요.
  • 작업 후 Errors 함수는 이전 작업에 대한 오류도 반환합니다. 이는 상태 변수에서 오류를 캡처할 필요 없이 양식 화면에 오류 메시지를 표시하는 데 유용할 수 있습니다.

ValidateDataSourceInfo 함수를 사용하여 오류가 발생하기 전에 몇 가지 오류를 방지할 수 있습니다. 오류를 처리하고 방지하는 방법에 대한 더 많은 제안 사항은 데이터 원본 작업을 참조하십시오.

설명

Errors 함수는 다음 이 포함된 오류의 테이블을 반환합니다.

  • 레코드. 오류가 발생한 데이터 원본의 레코드입니다. 레코드를 만드는 동안 오류가 발생하면 이 열은 공백입니다.
  • 세로 막대형. 단일 열에 원인이 있는 오류인 경우 오류가 발생한 열입니다. 그렇지 않으면 공백이 됩니다.
  • 메시지. 오류에 대한 설명입니다. 이 오류 문자열은 최종 사용자에게 표시될 수 있습니다. 이 메시지는 데이터 원본에서 생성될 수 있고, 긴 메시지일 수도 있으며, 사용자에게 아무 의미가 없는 원시 열 이름을 포함할 수 있습니다.
  • 오류. 오류를 해결할 수 있도록 수식에 사용할 수 있는 다음과 같은 오류 코드입니다.
ErrorKind 설명
ErrorKind.Conflict 동일한 레코드에 대한 또 다른 변경으로 인해 변경 충돌이 발생했습니다. Refresh 함수를 사용하여 레코드를 다시 로드한 다음, 다시 변경합니다.
ErrorKind.ConstraintViolation 하나 이상의 제약 조건을 위반했습니다.
ErrorKind.CreatePermission 레코드를 만들려고 했지만 현재 사용자에게 레코드를 만들 수 있는 권한이 없습니다.
ErrorKind.DeletePermission 레코드를 삭제하려고 했지만 현재 사용자에게 레코드를 삭제할 수 있는 권한이 없습니다.
ErrorKind.EditPermission 레코드를 편집하려고 했지만 현재 사용자에게 레코드를 편집할 수 있는 권한이 없습니다.
ErrorKind.GeneratedValue 데이터 원본에서 자동으로 생성하는 열을 변경하려고 했습니다.
ErrorKind.MissingRequired 레코드에서 필수 열에 대한 값이 누락되었습니다.
ErrorKind.None 오류가 없습니다.
ErrorKind.NotFound 레코드를 편집하거나 삭제하려고 했지만 레코드를 찾을 수 없습니다. 다른 사용자가 해당 레코드를 변경했을 수 있습니다.
ErrorKind.ReadOnlyValue 읽기 전용 열을 변경하려고 했습니다.
ErrorKind.Sync 데이터 원본에서 오류가 보고되었습니다. 자세한 내용은 메시지 열을 확인합니다.
ErrorKind.Unknown 오류가 있었지만 알 수 없는 종류입니다.
ErrorKind.Validation 다른 종류 중 하나에 적합하지 않은 일반적인 유효성 검사 문제가 발견되었습니다.

함수에 Record 인수를 제공하여 전체 데이터 원본 또는 선택한 행에 대한 오류를 반환할 수 있습니다.

예를 들어 레코드를 만들 수 없는 경우 Patch 또는 다른 데이터 함수에서 공백 값을 반환할 수 있습니다. 공백Errors에 전달할 수 있으며, 이러한 경우 적절한 오류 정보를 반환합니다. 이후 동일한 데이터 원본에서 데이터 함수를 사용하면 이 오류 정보가 지워집니다.

오류가 없으면 Errors에서 반환하는 테이블은 비어 있으며, IsEmpty 함수에서 테스트할 수 있습니다.

구문

Errors( DataSource [, Record ] )

  • DataSource – 필수 항목입니다. 오류를 반환하려는 데이터 원본입니다.
  • Record – 선택 사항입니다. 오류를 반환하려는 특정 레코드입니다. 이 인수를 지정하지 않으면 함수에서 전체 데이터 원본에 대한 오류를 반환합니다.

예제

단계

이 예제에서는 다음과 같은 IceCream 데이터 원본을 사용합니다.

아이스크림.

사용자가 앱을 통해 초콜릿 레코드를 데이터 입력 양식에 로드한 다음, Quantity 값을 90으로 변경합니다. 사용할 레코드는 다음과 같은 EditRecord컨텍스트 변수에 배치됩니다.

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

데이터 원본에서 이 변경 작업을 수행하려면 Patch 함수를 다음과 같이 사용합니다.

  • Patch( IceCream, EditRecord, Gallery.Updates )

여기서 Gallery.Updates{Quantity} 속성만 수정되었으므로 Quantity: 90 으로 평가됩니다.

아쉽게도 Patch 함수가 호출되기 직전에 다른 사람이 초콜릿에 대한 Quantity를 80으로 수정했습니다. Power Apps는 이를 감지하고 충돌하는 변경이 발생하지 않도록 합니다. 다음 수식을 사용하여 이 상황을 확인할 수 있습니다.

  • IsEmpty( Errors( IceCream, EditRecord ) )

여기서는 Errors 함수에서 다음 테이블을 반환했으므로 false가 반환됩니다.

레코드 세로 막대형 메시지 오류
{ Flavor: "Chocolate", Quantity: 100 } blank "다른 사용자가 수정하려는 레코드를 수정했습니다. 레코드를 다시 로드하여 다시 시도하십시오." ErrorKind.Conflict

양식에 레이블을 배치하여 사용자에게 이 오류를 표시할 수 있습니다.

  • 오류를 표시하려면 레이블의 Text 속성을 다음 수식으로 설정합니다.
    Label.Text = First(Errors( IceCream, EditRecord )).Message

사용자가 충돌을 효율적으로 해결할 수 있도록 양식에 다시 로드 단추를 추가할 수도 있습니다.

  • 충돌이 발생한 경우에만 단추를 표시하려면 단추의 Visible 속성을 다음 수식으로 설정합니다.
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • 사용자가 단추를 선택하는 변경 내용을 되돌리려면 OnSelect 속성을 다음 수식으로 설정합니다.
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )