/// <summary>
            /// Executes the workflow to fetch the sales orders.
            /// </summary>
            /// <param name="request">Instance of <see cref="GetOrdersRequest"/>.</param>
            /// <returns>Instance of <see cref="GetOrdersResponse"/>.</returns>
            protected override GetOrdersResponse Process(GetOrdersRequest request)
            {
                ThrowIf.Null(request, "request");

                if (request.Criteria == null || request.Criteria.IsEmpty())
                {
                    throw new ArgumentException("Must pass at least one search criteria");
                }

                var validateCustomerAccountRequest  = new GetValidatedCustomerAccountNumberServiceRequest(request.Criteria.CustomerAccountNumber, throwOnValidationFailure: false);
                var validateCustomerAccountResponse = this.Context.Execute <GetValidatedCustomerAccountNumberServiceResponse>(validateCustomerAccountRequest);

                if (validateCustomerAccountResponse.IsCustomerAccountNumberInContextDifferent)
                {
                    request.Criteria.CustomerAccountNumber = validateCustomerAccountResponse.ValidatedAccountNumber;
                }

                this.ValidateSearchCriteria(request.Criteria, request.RequestContext.GetPrincipal());

                if (request.Criteria.SearchLocationType == SearchLocation.None)
                {
                    request.Criteria.SearchLocationType = SearchLocation.All;
                }

                // Get the orders
                var serviceRequest = new GetOrdersServiceRequest(
                    request.Criteria,
                    request.QueryResultSettings);

                var serviceResponse = this.Context.Execute <GetOrdersServiceResponse>(serviceRequest);

                return(new GetOrdersResponse(serviceResponse.Orders));
            }
            /// <summary>
            /// Returns Sales Order by transaction id and terminal id. Used to get local orders.
            /// </summary>
            /// <param name="transactionId">The transaction id parameter.</param>
            /// <param name="isRemoteTransaction">Client sends if this is local or remote transaction.</param>
            /// <returns>The SalesOrder.</returns>
            private SalesOrder GetTransactionByTransactionId(string transactionId, bool isRemoteTransaction)
            {
                // Based on order type we decide the Search location to be efficient
                Microsoft.Dynamics.Commerce.Runtime.DataModel.SearchLocation searchLocationType = isRemoteTransaction ? SearchLocation.All : SearchLocation.Local;
                var criteria = new SalesOrderSearchCriteria
                {
                    TransactionIds     = new[] { transactionId },
                    SearchLocationType = searchLocationType,
                    IncludeDetails     = true,
                    SearchType         = OrderSearchType.SalesTransaction
                };

                // Get the order. If order sales id is provided then it should be remote search mode.
                var getOrdersServiceRequest  = new GetOrdersServiceRequest(criteria, QueryResultSettings.SingleRecord);
                var getOrdersServiceResponse = this.Context.Execute <GetOrdersServiceResponse>(getOrdersServiceRequest);

                return(getOrdersServiceResponse.Orders.Results.SingleOrDefault());
            }