Exemplo n.º 1
0
            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));
            }
Exemplo n.º 2
0
            /// <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;
                            }
                        }
                    }
                }
            }
Exemplo n.º 3
0
            /// <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.");
                }
            }