방법: 데이터 유효성 검사
엔터티 또는 테이블에 유효성 검사 규칙을 적용하여 서식이 지정된 데이터가 데이터 원본에 제대로 기록되었는지 확인할 수 있습니다.유효성 검사 규칙은 응용 프로그램에서 데이터가 준수해야 할 조건 또는 제약 조건입니다.LightSwitch의 엔터티 또는 테이블에 유효성 검사 규칙 한 개 이상 추가할 수 있습니다.사용자가 데이터를 수정하거나 변경하고 해당 데이터가 유효성 검사 규칙을 따르지 않은 경우 LightSwitch에서 오류를 표시합니다.사용자가 데이터를 커밋하기 전에 유효성 검사 오류를 수정해야 합니다.
다음 그림은 유효성 검사 오류 메시지를 보여 줍니다.
LightSwitch에는 여러 기본 제공 유효성 검사 규칙이 포함됩니다.이러한 규칙을 구성하면 코드를 작성하지 않고도 엔터티 또는 테이블에 적용할 수 있습니다.또한 코드를 사용하여 사용자 지정 유효성 검사 규칙을 정의할 수 있습니다.
이 항목에는 다음과 같은 단원이 포함되어 있습니다.
필드에 미리 정의된 사용자 지정 유효성 검사 규칙을 적용
필드에 사용자 지정 유효성 검사 규칙을 적용
화면에 있는 데이터에 사용자 지정 유효성 검사 규칙을 적용
데이터를 저장할 때 실행되는 유효성 검사 규칙을 적용
관련 비디오 데모를 보려면 How Do I: Write business rules for validation and calculated fields in a LightSwitch Application?을 참조하십시오.
필드에 미리 정의된 사용자 지정 유효성 검사 규칙을 적용
LightSwitch에는 사용자 지정 코드를 작성하지 않고도 사용할 수 있는 여러 기본 제공 유효성 검사 규칙이 포함됩니다.이러한 규칙은 데이터의 개별 필드 또는 사용자가 화면에서 데이터에 대해 실행한 모든 종류의 업데이트에 적용할 수 있습니다.
필드에 미리 정의된 사용자 지정 유효성 검사 규칙을 적용하려면
솔루션 탐색기에서 유효성 검사 규칙을 지정할 엔터티 또는 테이블을 두 번 클릭합니다.
엔터티 또는 테이블은 데이터 디자이너에서 열립니다.
데이터 디자이너에서 유효성 검사를 할 필드를 클릭합니다.
속성 창의 유효성 검사 섹션에서 아무 속성의 값을 설정합니다.
유효성 검사 속성에 대한 내용은 참조: 데이터 디자이너 속성를 참조하십시오.
필드에 사용자 지정 유효성 검사 규칙을 적용
코드를 작성하여 사용자 지정 유효성 검사 규칙을 정의할 수 있습니다.유효성 검사 규칙이 LightSwitch에 의해 적용될 때 지정할 수 있습니다.예를 들어, 사용자가 값을 입력한 직후에 필드에서 유효성 검사 규칙이 적용되도록 지정할 수 있습니다.또는 엔터티나 테이블의 모든 필드가 값을 포함한 이후에만 엔터티 또는 테이블을 평가하도록 지정할 수 있습니다.이 모델은 한 필드의 값의 유효성이 같은 엔터티 또는 테이블의 다른 필드의 유효한 값에 의존할 경우 의미가 있습니다.
필드에 사용자 지정 유효성 검사 규칙 적용
솔루션 탐색기에서 유효성 검사 규칙을 지정할 엔터티 또는 테이블을 두 번 클릭합니다.
엔터티 또는 테이블은 데이터 디자이너에서 열립니다.
데이터 디자이너에서 유효성 검사를 할 필드를 클릭합니다.
속성 창에서 사용자 지정 유효성 검사를 클릭합니다.
코드 편집기가 열리고 이름이 FieldName[_Validate]인 메서드가 생성됩니다.
FieldName[_Validate] 메서드에 유효성 검사 코드를 추가합니다.
사용자가 필드 값을 제공한 즉시 유효성 검사 규칙을 실행하려면 results 매개 변수의 AddPropertyError 메서드를 호출합니다.
다음 예제는 사용자가 Order 엔터티의 ShippedDate 필드를 오늘 이후의 날짜로 설정한 후 유효성 검사 메시지를 표시합니다.
Private Sub ShippedDate_Validate(results As EntityValidationResultsBuilder) If Me.ShippedDate > DateTime.Today Then results.AddPropertyError _ ("Shipped date cannot be later than today") End If End Sub
partial void ShippedDate_Validate(EntityValidationResultsBuilder results) { if (this.ShippedDate > DateTime.Today) { results.AddPropertyError("Shipped date cannot be later than today"); } }
유효성 검사에 대한 다른 속성을 강조할 수 있습니다.예를 들어, 사용자가 고객의 우편번호를 변경할 경우 실행되는 유효성 검사 코드를 작성할 수 있습니다.City 속성을 AddPropertyError 메서드에 매개 변수로 전달하면 LightSwitch가 City 필드를 강조 표시합니다.유효성 검사 오류 메시지 텍스트는 사용자에게 새 우편번호와 일치하는 도시 이름을 입력할 것을 요구할 수 있습니다.
[!참고]
기본적으로 유효성 검사 규칙을 따르지 않는 한 업데이트를 데이터 소스에 커밋할 수 없습니다.사용자가 평가되지 않은 업데이트를 커밋할 수 있도록 하려면 AddPropertyError 메서드를 사용하는 대신 AddPropertyResult 메서드를 사용하십시오.AddPropertyResult 메서드의 두 번째 매개 변수에 대해 ValidationSeverity.Informational 또는 ValidationSeverity.Warning을(를) 전달합니다.
엔터티 또는 테이블에 유효성 검사 규칙을 실행하려는 경우, 예를 들어 사용자가 다른 필드의 유효 값에 의존하는 어떤 필드의 값을 수정하면 results 매개 변수의 AddEntityError 메서드를 호출합니다.다음 예제에서는 RequiredDate와 OrderDate의 필드 값을 비교합니다.주문 날짜가 원하는 날짜보다 이후면 이 코드는 유효성 검사 오류 메시지를 표시 합니다.
Private Sub RequiredDate_Validate(results As EntityValidationResultsBuilder) If Me.RequiredDate < Me.OrderDate Then results.AddEntityError _ ("Required data cannot be earlier than the order date") End If End Sub
partial void RequiredDate_Validate(EntityValidationResultsBuilder results) { if (this.RequiredDate < this.OrderDate) { results.AddEntityError ("Required data cannot be earlier than the order date"); } }
화면에 있는 데이터에 사용자 지정 유효성 검사 규칙을 적용
화면 코드 파일의 <엔터티 또는 테이블 이름>[_Validate] 메서드에 사용자 지정 코드를 추가하여 전체 화면에 적용되는 사용자 지정 유효성 검사 규칙을 지정할 수 있습니다.사용자 지정 코드는 사용자가 화면에서 임의의 데이터를 수정하는 경우(예: 데이터 추가 또는 삭제) 실행됩니다.이러한 규칙은 데이터를 저장하기 전에 실행됩니다.
화면의 데이터에 사용자 지정 유효성 검사 규칙을 적용하려면
솔루션 탐색기에서 유효성 검사 규칙을 지정할 화면을 두 번 클릭합니다.
화면 디자이너 맨 위에 있는 코드 작성을 클릭합니다.
코드 편집기를 엽니다
선언 메뉴에서 <entity or table name>[_Validate]을(를) 선택합니다.
<entity or table name>[_Validate](이)라는 이름의 코드 블록이 코드 파일에 나타납니다.
<entity or table name>[_Validate] 메서드에 사용자 지정 유효성 검사 코드를 추가합니다.
사용자가 데이터 행을 추가, 삭제 또는 업데이트한 후 유효성 검사 규칙을 실행하려면 results 매개 변수의 AddScreenError 메서드를 호출합니다.
다음 예제와 같이 하면 미국에 있는 고객이 삭제되지 않습니다.
Private Sub Customers_Validate _ (results As Microsoft.LightSwitch.Framework.Client.ScreenValidationResultsBuilder) If Me.DataWorkspace.NorthwindData.Details.HasChanges Then Dim changeSet As EntityChangeSet = _ Me.DataWorkspace.NorthwindData.Details.GetChanges() Dim entity As IEntityObject For Each entity In changeSet.DeletedEntities.OfType(Of Customer)() Dim cust As Customer = CType(entity, Customer) If cust.Country = "USA" Then entity.Details.DiscardChanges() results.AddScreenResult("Unable to remove this customer." & _ "Cannot delete customers that are located in the USA.", _ ValidationSeverity.Informational) End If Next End If End Sub
partial void Customers_Validate(ScreenValidationResultsBuilder results) { if (this.DataWorkspace.NorthwindData.Details.HasChanges) { EntityChangeSet changeSet = this.DataWorkspace.NorthwindData.Details.GetChanges(); foreach (IEntityObject entity in changeSet.DeletedEntities.OfType<Customer>()) { Customer cust = (Customer)entity; if (cust.Country == "USA") { entity.Details.DiscardChanges(); results.AddScreenResult("Unable to remove this customer. " + "Cannot delete customers that are located in the USA.", ValidationSeverity.Informational); } } } }
[!참고]
기본적으로 유효성 검사 규칙을 따르지 않는 한 업데이트를 데이터 소스에 커밋할 수 없습니다.사용자가 평가되지 않은 업데이트를 커밋할 수 있도록 하려면 AddScreenError 메서드를 사용하는 대신 AddScreenResult 메서드를 사용하십시오.AddScreenResult 메서드의 두 번째 매개 변수에 대해 ValidationSeverity.Informational 또는 ValidationSeverity.Warning을(를) 전달합니다.
데이터를 저장할 때 실행되는 유효성 검사 규칙을 적용
사용자가 데이터를 저장하거나 코드가 데이터 원본의 SaveChanges 메서드를 호출하는 경우 사용자 지정 유효성 검사 규칙을 적용할 수 있습니다.이런 종류의 유효성 검사는 서버 계층에서 독점적으로 실행됩니다.
데이터를 저장할 때 실행되는 유효성 검사 규칙을 적용하려면
솔루션 탐색기에서 유효성 검사 규칙을 지정할 엔터티 또는 테이블을 두 번 클릭합니다.
데이터 디자이너 명령 모음에서 코드 작성 단추 옆의 화살표를 클릭한 다음 엔터티 또는 테이블 이름[_Validate]을 클릭합니다.
코드 편집기가 열리고 이름이 엔터티 또는 테이블 이름[_Validate]인 메서드가 생성됩니다.
엔터티 또는 테이블 이름[_Validate] 메서드에 사용자 지정 유효성 검사 코드를 추가합니다.
results 매개 변수의 AddEntityError 메서드를 호출합니다.
다음 예제는 사용자가 판매 주문을 저장하면 고객의 신용 상태를 확인합니다.고객의 신용 카드가 재무 부서로부터 아직 승인되지 않았다면 ValidationException은(는) throw됩니다.
Private Sub Orders_Validate _ (entity As Order, results As _ Microsoft.LightSwitch.EntitySetValidationResultsBuilder) If Not CustomerCreditApproval(entity.Customer) Then results.AddEntityError("Customer Credit has not yet been approved") End If End Sub Private Function CustomerCreditApproval(ByVal entity As Customer) As Boolean 'Some custom code to check the customer’s credit status. Return True End Function
partial void Orders_Validate (Order entity, EntitySetValidationResultsBuilder results) { if (!CustomerCreditApproval(entity.Customer)) { results.AddEntityError ("Customer Credit has not yet been approved"); } } private bool CustomerCreditApproval(Customer entity) { //Some custom code to check the customer's credit status. return true; }
[!참고]
기본적으로 예외가 throw될 때 오류 메시지가 표시되고 데이터는 현재 변경 집합에 유지됩니다.이 동작을 바꾸고 싶은 경우 코드에서 ValidationException을(를) 처리할 수 있습니다.