AI OnAI Off
Ok, this is in fact possible by overriding the Order number ( http://world.episerver.com/Documentation/Items/Developers-Guide/EPiServer-Commerce/75/Orders/Changing-order-number-sequence/ ), and then searching like so:
public PurchaseOrder GetActivePurchaseOrderByCartId(int cartOrderGroupId)
{
var parameters = new OrderSearchParameters
{
SqlMetaWhereClause = string.Format("TrackingNumber = '{0}'", CreateOrderNumber(cartOrderGroupId))
};
var options = new OrderSearchOptions
{
Classes = new StringCollection { "PurchaseOrder" },
RecordsToRetrieve = 1
};
var findPurchaseOrders = OrderContext.Current.FindPurchaseOrders(parameters, options);
return findPurchaseOrders.FirstOrDefault();
}
Still a horrendous API to work with, so I'm hoping this gets fixed ( http://world.episerver.com/Forum/Developer-forum/Feature-requests/Thread-Container/2014/8/Simplify-APIs-to-handle-carts-OrderGroups-OrderForms-etc/ ).
When a user comes back from the payment provider (external), all I have is an order ID. I can decide what this order ID is. Before the user returns, however, there's a server-to-server-call done from the payment service which runs the entire CreatePurchaseOrder-workflow (which deletes your cart and converts it into a PO).
So there I sit, with some sort of ID to an item that no longer exists. And I can't seem to find any relations between the old cart and the new PurchaseOrder. The user is anonymous, so I can't find that user's stuff either.
I tried adding a "CartReference" meta field to the PurchaseOrder, which worked fine - but the OrderContext.Current.FindPurchaseOrders(parameters, options) would not let me search in that new column ("Invalid column").
I guess I can say OrderContext.Current.FindActiveOrders() and just search from code, but that seems like a super clumsy step if there are a lot of orders.
This has to be a common problem - and if there's no easy way of finding this relation, that's a serious flaw in the API the way I see it.