Posted on 08/04/2025 17:10:49
Hi
The changes coming with Devops#23853 will give you search in item numbers (orderlines
The custom way of doing this is using the search filter for orders directly in your template or in custom module:
You can create a search filter for orders like this:
private OrderSearchFilter CreateSearchFilter(CustomerExperienceCenterSettings settings)
{
var filter = new OrderSearchFilter() { DoSearch = true };
var pageview = PageView.Current();
if (pageview is object && pageview.Area is object)
{
filter.SelectedShopId = pageview.Area.EcomShopId;
}
filter.Completed = OrderSearchFilter.CompletedStates.Both;
switch (settings.OrderTypeToShow)
{
case OrderType.Order:
{
filter.Completed = OrderSearchFilter.CompletedStates.Completed;
break;
}
case OrderType.Cart:
{
filter.IsCart = true;
filter.Completed = OrderSearchFilter.CompletedStates.NotCompleted;
break;
}
case OrderType.LedgerEntry:
{
filter.IsLedgerEntries = true;
break;
}
case OrderType.Quote:
{
filter.IsQuotes = true;
filter.Completed = OrderSearchFilter.CompletedStates.NotCompleted;
filter.IsCart = false;
break;
}
case OrderType.Recurringorder:
{
filter.IsRecurringOrder = true;
break;
}
}
filter.OrderStateId = RequestContext("FilterOrderStateId");
filter.FromDate = Converter.ToDateTime(RequestContext("FilterFromDate"), DateTime.MinValue).Date;
filter.ToDate = Converter.ToDateTime(RequestContext("FilterToDate"), DateTime.MaxValue).Date;
filter.SearchOrderId = RequestContext("FilterOrderId");
filter.TextSearch = RequestContext("FilterText");
if (!string.IsNullOrEmpty(filter.TextSearch))
{
filter.DoSearch = true;
filter.DoTextSearchInProducts = true;
filter.SearchInCustomOrderFields = true;
}
string orderBy = string.Empty;
if (!string.IsNullOrEmpty(settings.SortByField))
{
CustomerExperienceCenterSettings.FieldsForSorting.TryGetValue(settings.SortByField, out orderBy);
}
if (string.IsNullOrEmpty(orderBy))
{
orderBy = "OrderDate";
}
filter.OrderBy = $"{orderBy} {settings.SortOrder}";
int pageNumber = Converter.ToInt32(RequestContext("PageNum"));
if (pageNumber <= 0)
{
pageNumber = 1;
}
filter.PageNumber = pageNumber;
filter.PageSize = settings.PageSize;
filter.CustomerId = CustomerId;
if (settings.UseCustomerNumber)
{
filter.CustomerNumber = Services.Orders.GetCustomerNumber(filter.CustomerId);
}
filter.IncludeImpersonation = settings.UseImpersonationIds;
filter.IncludeUserAndSecondaryUserIds = settings.UseUserAndSecondaryUserIds;
return filter;
}
And use the filter as a parameter on the orderservice:
var searchResult = Services.Orders.GetOrdersBySearch(searchFilter);
int totalOrdersCount = searchResult.TotalCount;
int pageCount = 0;
var orderRange = searchResult.GetResultOrders();
And then you have a list of orders you can iterate instead of using the order viewmodels:
foreach(var order in orderRange)
{
var orderId = order.Id;
}