/// <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()); }