private ValidateAddressDataResponse ValidateAddress(ValidateAddressDataRequest request) { ThrowIf.Null(request.Address, "address"); if (string.IsNullOrWhiteSpace(request.Address.ThreeLetterISORegionName)) { return(CreateFailedValidateAddressDataResponse(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidCountryRegion, AddressServiceConstants.ThreeLetterISORegionName)); } Address address = request.Address; ParameterSet parameters = new ParameterSet(); parameters[AddressServiceConstants.CountryRegionId] = address.ThreeLetterISORegionName; if (!string.IsNullOrWhiteSpace(address.State)) { parameters[AddressServiceConstants.StateProvinceId] = address.State; } if (!string.IsNullOrWhiteSpace(address.County)) { parameters[AddressServiceConstants.CountyId] = address.County; } if (!string.IsNullOrWhiteSpace(address.City)) { parameters[AddressServiceConstants.CityComponentName] = address.City; } if (!string.IsNullOrWhiteSpace(address.DistrictName)) { parameters[AddressServiceConstants.DistrictId] = address.DistrictName; } if (!string.IsNullOrWhiteSpace(address.ZipCode)) { parameters[AddressServiceConstants.ZipPostalCodeComponentName] = address.ZipCode; } int result; using (SqlServerDatabaseContext sqlServerDatabaseContext = new SqlServerDatabaseContext(request)) { result = sqlServerDatabaseContext.ExecuteStoredProcedureNonQuery(ValidateAddressSprocName, parameters); } if (result == 0) { return(new ValidateAddressDataResponse(true)); } Tuple <DataValidationErrors, string> faultAddressComponent = HandleNonZeroResult(result); return(CreateFailedValidateAddressDataResponse(faultAddressComponent.Item1, faultAddressComponent.Item2)); }
/// <summary> /// Validates the address as well as resolves the state from zip code, if needed. /// </summary> /// <param name="context">Instance of <see cref="RequestContext"/>.</param> /// <param name="addressToValidate">Address to be validated and resolved.</param> /// <param name="validationFailures">The list to hold all exceptions.</param> private static void ValidateAndResolveAddress(RequestContext context, Address addressToValidate, List <DataValidationFailure> validationFailures) { if (addressToValidate != null) { // Validates the address ValidateAddressDataRequest validateAddressRequest = new ValidateAddressDataRequest(addressToValidate); ValidateAddressDataResponse response = context.Runtime.Execute <ValidateAddressDataResponse>(validateAddressRequest, context); if (!response.IsAddressValid) { validationFailures.Add(new DataValidationFailure(response.ErrorCode, new Collection <string> { response.InvalidAddressComponentName }, response.ErrorMessage)); return; } // If zip code is provided but not the state, resolve the state from zipcode. if (string.IsNullOrWhiteSpace(addressToValidate.State) && !string.IsNullOrWhiteSpace(addressToValidate.ZipCode)) { GetFromZipPostalCodeServiceRequest zipPostalCodeRequest = new GetFromZipPostalCodeServiceRequest(addressToValidate.ThreeLetterISORegionName, addressToValidate.ZipCode) { QueryResultSettings = QueryResultSettings.AllRecords }; GetFromZipPostalCodeServiceResponse zipPostalCodeResponse = context.Runtime.Execute <GetFromZipPostalCodeServiceResponse>(zipPostalCodeRequest, context); if (zipPostalCodeResponse.Results != null) { ZipCodeInfo zipCodeResult = zipPostalCodeResponse.Results.Results.GetEnumerator().Current; if (zipCodeResult != null) { addressToValidate.State = zipCodeResult.StateId; } } } } }
/// <summary> /// Validate customer addresses. /// </summary> /// <param name="context">The request context.</param> /// <param name="customerAddresses">The customer addresses.</param> internal static void ValidateAddresses(RequestContext context, IEnumerable <Address> customerAddresses) { ThrowIf.Null(context, "context"); ThrowIf.Null(customerAddresses, "customerAddresses"); Collection <DataValidationFailure> validationFailures = new Collection <DataValidationFailure>(); foreach (Address customerAddress in customerAddresses) { // don't validate those addresses that are selected for deactivation/delete if (customerAddress.Deactivate) { continue; } // don't validate if this address is empty and the recid=0 if (customerAddress.IsEmpty() && customerAddress.RecordId == 0) { continue; } // Validates the address ValidateAddressDataRequest validateAddressRequest = new ValidateAddressDataRequest(customerAddress); ValidateAddressDataResponse response = context.Execute <ValidateAddressDataResponse>(validateAddressRequest); if (!response.IsAddressValid) { validationFailures.Add(new DataValidationFailure(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidAddress, response.InvalidAddressComponentName)); } } if (validationFailures.Any()) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_AggregateValidationError, validationFailures, "Customer address validation failures."); } }