Здесь нужно упомянуть две вещи:
Первая проблема, с которой вы столкнетесь, заключается в том, что селектор упорядочивается только по значению ключа, что делает вашу конечную цель недостижимой:
Изменить селектор по умолчанию для сортировки
Вторым является сообщение об ошибке. Проблема, по-видимому, связана с ошибкой Acumatica в CustomerAttribute
при построении BqlCommand
во время выполнения заказа клиента. В конструкторе CustomerAttribute(Type search, params Type[] fields)
есть оператор, который проверяет searchType == typeof(Search<,,>)
, а затем пытается построить запрос, используя Search2<Field, Join, Where>
, когда он должен использовать Search2<Field, Join, Where, OrderBy>
, включая OrderBy. Я подтвердил, что ошибка исчезла с моей собственной пользовательской версией этого класса, использованной вместо оригинала, но порядок на вашем селекторе не изменится. В результате исправление не поможет вашей конечной цели.
// ...
else if (searchType == typeof(Search<,,>)) //when Search<Field, Where, OrderBy>
{
cmd = BqlCommand.Compose(
typeof(Search2<,,>), //need Search2<Field, Join, Where, OrderBy>
// however using Search2<Field, Join, Where> and results in an error
typeof(BAccountR.bAccountID),
typeof(LeftJoin<,,>),
typeof(Customer),
typeof(On<Customer.bAccountID, Equal<BAccountR.bAccountID>, And<Match<Customer, Current<AccessInfo.userName>>>>),
typeof(LeftJoin<,,>),
typeof(Contact),
typeof(On<Contact.bAccountID, Equal<BAccountR.bAccountID>, And<Contact.contactID, Equal<BAccountR.defContactID>>>),
typeof(LeftJoin<,,>),
typeof(Address),
typeof(On<Address.bAccountID, Equal<BAccountR.bAccountID>, And<Address.addressID, Equal<BAccountR.defAddressID>>>),
typeof(LeftJoin<,>),
typeof(Location),
typeof(On<Location.bAccountID, Equal<BAccountR.bAccountID>, And<Location.locationID, Equal<BAccountR.defLocationID>>>),
searchArgs[1],
searchArgs[2]);
}
// ...