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.
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
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. –
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/ –