ACAccess<T>
Mit der Instanziierung einer ACQueryDefinition ist zwar nun die Beschreibung der Datenbankabfrage ermöglicht worden jedoch müssen die Daten noch auf der Datenbank abgefragt werden. Für das Ausführen der speicherbaren Abfrage ist die Klasse "gip.core.datamodel.ACAccess<T>" zuständig.
Eine ACAccess-Instanz erhalten sie durch Aufruf der Methode "ACQueryDefinition.NewAccess()":
ACAccess<Material> acAccess = acQueryDef.NewAccess<Material>(Material.ClassName, this);
Danach rufen Sie eine der überladenen Methoden "NavSearch(...)" auf und übergeben einen Datenbankkontext, auf dem die Abfrage ausgeführt werden soll:
bool succ = acAccess.NavSearch(dbContext);
bool succ = acAccess.NavSearch(dbContext, MergeOption.OverwriteChanges);
Das Abfrageresultat wird in die Eigenschaft public IList<T> NavList geschrieben:
foreach (Material mat in AccessPrimary.NavList)
{
// do something
}
ACAccessNav<T>
Die abgeleitete Klasse ACAccessNav<T> erweitert die ACAccess<T> um Navigationsmethoden:
public void NavigateFirst();
public void NavigateLast();
public void NavigateNext();
public void NavigatePrev();
T Current { get; }
ACAccessNav<T> wird für navigierbare Geschäftsobjekte, die von der Basisklasse ACBSONav abgeleitet sind. Sie erhalten eine Instanz durch Aufruf der Methode NewAccessNav:
ACAccessNav<Material> _AccessPrimary = acQueryDef.NewAccessNav<Material>(Material.ClassName, this);
Überschreiben Sie in Ihrer Ableitung die Eigenschaft AccessNav, um Ihre Instanz von ACAccessNav<T> zurückzugeben:
public override IAccessNav AccessNav { get { return AccessPrimary; } }
Wird Ihr Geschäftsobjekt geöffnet und an der Oberfläche angezeigt, wird in der VBRibbonBar der Abschnitt zur Navigation mit den Navigationstasten sichtbar, da die überschriebene Eigenschaft AccessNav nun eine Instanz vom Interface IAccessNav zurückgibt, das ACAccessNav<T> implementiert. Die Navigationstasten werden automatisch per CommandBinding an die vier Navigationsmethoden gebunden.
Globales Suchwort
Wird die Enter-Taste in der Search-Textbox in der Ribbon-Bar gedrückt, wird ein weiteres CommandBinding ausgeführt, das an die Methode "Search()" des Geschäftsobjektes gebunden ist. Diese Methode müssen Sie explizit deklarieren und entsprechend folgendem Beispiel implementieren:
[ACMethodCommand(Material.ClassName, "en{'Search'}de{'Suchen'}", (short)MISort.Search)]
public void Search()
{
AccessPrimary.NavSearch(DatabaseApp, DatabaseApp.RecommendedMergeOption);
OnPropertyChanged("MaterialList");
}
[ACPropertyList(9999, Material.ClassName)]
public IList<Material> MaterialList
{
get
{
return AccessPrimary.NavList;
}
}
Die MaterialList enthält das Abfrageresultat und wird in der Regel an ein VBDataGrid im Explorer-Fenster gebunden. Damit das VBDataGrid das Abfrageresultat anzeigt lösen Sie das PropertyChanged-Event aus per Aufruf der Methode OnPropertyChanged(...)..