2016-04-25 4 views
1

У меня есть две коллекции CodeFluentEntities, которые связаны с типичными отношениями между мастером/деталями: счетами и деталями счета.Сортировка коллекции связанных с CodeFluent

В то время как я могу загрузить коллекцию счетов в порядке, указанном номером счета, я не могу понять, как получить связанный сбор данных счета-фактуры для загрузки в порядке номеров строк счета-фактуры.

Это работает в получении счета-фактуры находится в желаемой последовательности:

Dim _page As New CodeFluent.Runtime.PageOptions("[Invoice].[InvoiceNumber]", System.ComponentModel.ListSortDirection.Ascending) 
Dim _orders as Accounting.AR.OrderCollection.PageLoadAll(0, -1, _page) 
OrderCollectionBindingSource.DataSource = _orders 

InvoiceDetail коллекция загружается в случайном порядке. То, что я хотел бы сделать, это соответствующий сбор отсортированного по [InvoiceDetail].[LineNumber]

ответ

0

CodeFluent Entities предлагает несколько вариантов для обработки коллекций сортировки:

  • Статической сортировку: коллекция сортируется в SQL с использованием методов CFQL. Вы также можете перезаписать метод LoadBy ...(), если вам нужно. Однако, вероятно, лучше создать метод CFQL, называемый LoadBy ... OrderedBySomething().
  • Динамическая сортировка: коллекция сортируется по SQL в зависимости от параметров сортировки.
  • Сортировка на стороне клиента: метод сортировки, который может быть переоценен для ваших нужд.

Все эти варианты описаны здесь: http://www.softfluent.com/documentation/?BOM_SP_Sorting.html

В вашем случае, вы хотите изменить метод, используемый Orders собственности, чтобы загрузить соответствующую коллекцию заказов. Поэтому вам необходимо создать новый метод CFQL (или заменить существующий) статической сортировкой. После этого вы можете установить этот метод как один использовать с помощью атрибута loadMethodName:

<cf:entity name="Customer"> 
    <cf:property name="Id" key="true" /> 
    <cf:property name="FullName" /> 

    <!-- loadMethodName --> 
    <cf:property name="Orders" loadMethodName="LoadByCustomerOrderedByCreationDate" typeName="{0}.OrderCollection" relationPropertyName="Customer" /> 
</cf:entity> 

<cf:entity name="Order"> 
    <cf:property name="Id" key="true" /> 
    <cf:property name="CreationDate" sortable="true" typeName="date" /> 
    <cf:property name="Customer" typeName="{0}.Customer" relationPropertyName="Orders" /> 

    <!-- Static sorting: `ORDER BY ...` --> 
    <cf:method name="LoadByCustomerOrderedByCreationDate" body="LOAD(Customer) WHERE Customer = @Customer ORDER BY CreationDate" /> 
</cf:entity> 

Свойства Orders является:

public OrderCollection Orders 
{ 
    get 
    { 
     if (this._orders == null) 
     { 
      // code omitted for brevity 
      this._orders = OrderCollection.LoadByCustomerOrderedByCreationDate(this); 
     } 
     return this._orders; 
    } 
} 
+0

Спасибо за помощь. –

+0

Пара проблем. Если я использую предложенную модель, связь между Клиентом и Заказом в базе данных будет нарушена. Если я использую CustomerCollection.LoadAll, возвращаются только строки Customer, тогда как перед .LoadAll возвращается иерархическая коллекция, которая включала OrderCollection для каждого Клиента как часть возвращаемого Клиента. –

+0

Я пытаюсь получить иерархическую коллекцию для всех Клиентов и их Заказы, в которых коллекция клиентов сортируется по номеру CustomerNumber, а соответствующие заказы сортируются по порядковому номеру –