2016-04-25 9 views
1

Ich habe zwei CodeFluentEntities Sammlungen, die in einer typischen Master/Detail-Beziehung verwandt sind: Rechnungen und Rechnungsdetails.CodeFluent verwandte Sammlung Sortierung

Während ich die Rechnungserfassung in der Reihenfolge der Rechnungsnummer laden kann, kann ich nicht genau herausfinden, wie die entsprechende Sammlung von Rechnungsdetails geladen werden kann, geordnet nach den Zeilennummern der Rechnung.

Dies funktioniert die Rechnung des in der gewünschten Reihenfolge in dem Abrufen:

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 Die Sammlung wird in einer zufälligen Reihenfolge geladen. Was ich möchte, ist die damit verbundene Sammlung von [InvoiceDetail].[LineNumber]

Antwort

0

CodeFluent Entitäten geordnet zu tun haben, bietet mehrere Optionen Sammlungen zu handhaben Sortierung:

  • Statische Sortierung: Die Sammlung in SQL sortiert CFQL Methoden. Sie können die LoadBy ...() -Methode bei Bedarf auch überschreiben. Es ist jedoch wahrscheinlich besser, eine CFQL-Methode namens LoadBy ... OrderedBySomething() zu erstellen.
  • Dynamische Sortierung: Die Sammlung wird abhängig von Sortierparametern in SQL sortiert.
  • Clientseitige Sortierung: Mit der Sort-Methode, die für Ihre Anforderungen überschrieben werden kann.

All diese Optionen sind hier dokumentiert: http://www.softfluent.com/documentation/?BOM_SP_Sorting.html

In Ihrem Fall, Sie wollen die Methode, mit der Orders Eigenschaft verwendet ändern, um die damit verbundene Sammlung von Aufträgen zu laden. Sie müssen also eine neue CFQL-Methode erstellen (oder die vorhandene ersetzen) durch statische Sortierung. Dann können Sie diese Methode als ein Set mit dem loadMethodName Attribute zu verwenden:

<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> 

Die Orders Eigenschaft ist:

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

Vielen Dank für Hilfe. –

+0

Ein paar Probleme. Wenn ich das von Ihnen vorgeschlagene Modell verwende, ist die Verbindung zwischen dem Kunden und den Bestellungen in der Datenbank unterbrochen. Wenn ich CustomerCollection.LoadAll verwende, werden nur die Kundenzeilen zurückgegeben, während die .LoadAll eine hierarchische Sammlung zurückgegeben hat, die die OrderCollection für jeden Kunden als Teil des zurückgegebenen Kunden enthielt. –

+0

Was ich versuche, ist eine hierarchische Sammlung für alle Kunden und ihre Bestellungen zu erhalten, wo die Kundensammlung nach der CustomerNumber sortiert ist und die zugehörigen Bestellungen nach OrderNumber sortiert sind. –