private Customer GetCustomerById(string customerId)
            {
                var getCustomerRequest  = new GetCustomersServiceRequest(QueryResultSettings.SingleRecord, customerId, SearchLocation.Local);
                var getCustomerResponse = this.Context.Execute <GetCustomersServiceResponse>(getCustomerRequest);

                return(getCustomerResponse.Customers.SingleOrDefault());
            }
예제 #2
0
            private Customer GetCustomer(string customerAccountNumber)
            {
                // No need to worry about the QueryResultSettings since we expect at most a single result.
                var serviceRequest  = new GetCustomersServiceRequest(QueryResultSettings.SingleRecord, customerAccountNumber);
                var serviceResponse = this.Context.Execute <GetCustomersServiceResponse>(serviceRequest);

                return(serviceResponse.Customers.SingleOrDefault());
            }
            /// <summary>
            /// Check if an account number maps to an async customer.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="customerAccountNumber">The customer account number.</param>
            /// <returns>A boolean indicating whether or not the customer is an async customer.</returns>
            private bool IsAsyncCustomer(RequestContext context, string customerAccountNumber)
            {
                if (!string.IsNullOrWhiteSpace(customerAccountNumber))
                {
                    var getCustomersServiceRequest  = new GetCustomersServiceRequest(QueryResultSettings.SingleRecord, customerAccountNumber);
                    var getCustomersServiceResponse = context.Execute <GetCustomersServiceResponse>(getCustomersServiceRequest);

                    if (getCustomersServiceResponse.Customers.FirstOrDefault().IsAsyncCustomer)
                    {
                        return(true);
                    }
                }

                return(false);
            }
예제 #4
0
            /// <summary>
            /// Executes the workflow to issue a loyalty card.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override IssueLoyaltyCardResponse Process(IssueLoyaltyCardRequest request)
            {
                ThrowIf.Null(request, "request");

                var validateCustomerAccountRequest = new GetValidatedCustomerAccountNumberServiceRequest(request.CustomerAccountNumber, throwOnValidationFailure: true);

                request.RequestContext.Execute <GetValidatedCustomerAccountNumberServiceResponse>(validateCustomerAccountRequest);

                // If the request contains a customer account number, find the party recid of the customer.
                long partyRecordId = 0;

                if (!string.IsNullOrWhiteSpace(request.CustomerAccountNumber))
                {
                    var getCustomerServiceRequest  = new GetCustomersServiceRequest(QueryResultSettings.SingleRecord, request.CustomerAccountNumber);
                    var getCustomerServiceResponse = this.Context.Execute <GetCustomersServiceResponse>(getCustomerServiceRequest);
                    var customer = getCustomerServiceResponse.Customers.SingleOrDefault();

                    if (customer == null || customer.DirectoryPartyRecordId == 0)
                    {
                        throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerOrDirectoryPartyNotFound);
                    }

                    partyRecordId = customer.DirectoryPartyRecordId;
                }

                var issueLoyaltyCardRequest = new IssueLoyaltyCardServiceRequest(
                    request.LoyaltyCardNumber,
                    request.CardTenderType,
                    request.CustomerAccountNumber,
                    partyRecordId,
                    this.Context.GetPrincipal().ChannelId);

                // Issue the loyalty card in HQ
                var serviceResponse = this.Context.Execute <IssueLoyaltyCardServiceResponse>(issueLoyaltyCardRequest);

                return(new IssueLoyaltyCardResponse(serviceResponse.LoyaltyCard));
            }