2016-06-24 4 views
2

Wir verwenden AX 2012 R3.AOT-Abfrage kann auf eine TempDB-Tabelle als Datenquelle verweisen

Temporary TempDB Tables [AX 2012] besagt, dass Eine Abfrage unter AOT>Abfragen eine TempDB Tabelle als Datenquelle verweisen können. Meine Frage: Wie liest eine AOT-Abfrage die in eine Datenquelle geschriebenen Datensätze, die eine TempDB-Tabelle ist?

Das Problem, das ich habe, ist, dass die AOT Abfrage jeden Datensatz aus der Liste meiner TempDB Tabellendatenquelle nicht zu lesen scheint:

ich unter AOT eine TempDB Tabelle definiert, und ich erstellt auch eine Abfrage AOT, die diese TempDB verweist Tabelle als Datenquelle.
Ich schreibe eine Methode, um die TempDB-Tabelle auszufüllen, und dann schreibe ich eine while queryRun Schleife, die mit dem oben genannten AOT-Abfrageobjekt übergeben wird. Der Schleifenkörper wurde jedoch nie ausgeführt.
Ich habe sichergestellt, dass der Code korrekt geschrieben ist: Wenn ich die TempDB-Tabelle in eine Regular-Tabelle geändert hat, wird der Schleifenkörper eingegeben und die Ergebnisse korrekt generiert.

(Alternativ habe ich eine while select anstelle des queryRun der AOT-Abfrage geschrieben. Die while select Schleife korrekte Ergebnisse erzeugt, und zwar unabhängig davon, ob die Join-Tabelle ist TempDB oder Regular. jedoch, ich will andere Bereiche ermöglichen das Hinzufügen . eine while select Schleife scheint dies nicht in der Lage zu tun. Also, verwende ich eine while queryRun einige SysQuery::findOrCreateRange folgende Schleife.)

der Link oben auch besagt, dass eine TempDB Tabelle nur im Rahmen eines Verfahrens besteht, dass es instanziiert. Das Ausfüllen der TempDB-Tabelle und der Schleife, die ich geschrieben habe, werden auf die gleiche Weise ausgeführt. Aber, wie ich nie eine Tabelle instanziiere, was ist mit gemeint, um es zu instanziieren (eine TempDB-Tabelle)?

EDIT s: 1) Ich habe auch versucht, einen Code zu schreiben, im Anschluss an die while queryRun Schleife zu sehen, ob es Datensätze in der Tabelle TempDB, festgestellt, dass die Datensätze in der Tabelle TempDB noch vorhanden sind. 2) Um zu klären, ein while queryRun Schleifenmittel folgenden

QueryRun queryRun = new QueryRun(query); 
while(queryRun.next()){...} 

Die query in der Instanziierung queryRun oberhalb ein AOT Abfrageobjekt ist.

Antwort

4

Nachdem Sie die TempDb Tabelle Sie es über queryRun.setRecord([TempDb Table])

Dann machen Sie Ihre while(queryRun.next()){...}

+0

Dank der Abfrage übergeben müssen füllen! Es löst mein Problem! Es wäre schöner, wenn Sie einige Erklärungen oder Referenzen zur Verfügung stellen könnten. – HYC

+1

Ich bin froh, dass ich helfen konnte. Es ist ziemlich geradlinig, nachdem Sie die Stücke herausgefunden haben. TempDb ist eine temporäre Tabelle, die in dem Bereich existiert, in dem sie instanziiert wurde. Das Query-Objekt im AOT ist eine Art abstrakter Struktur, die Schemaobjekte verbindet und im AX-Query-Framework interpretiert werden kann. Wenn Sie also versuchen, die Abfrage zu verwenden, müssen Sie die Instanz der temporären Tabelle wie eine Variable übergeben. –

+0

Ich habe AX nicht vor mir, also gehe ich aus dem Speicher, aber eine Sache zu beachten, 'TempDb' Tabellen beim Übergeben von Daten oder Festlegen von Formularen sollten' linkPhysicalTableInstance (...) 'verwenden, während' In "Memory" -Tabellen sollten 'setTmpData (...)' verwenden. Siehe https://blogs.msdn.microsoft.com/axsupport/2012/08/09/temporary-tables-ax-2012/ –

Verwandte Themen