[Gelöst] Frage zu View in Navision

27. Oktober 2009 18:24

Hallo,

ich habe noch nicht viel Erfahrung mit Navision. Ich habe mehr eine Verständnisfrage als ein Problem.

Wir haben Navision 4.00 SP3 mit MS SQL 2005 Servern. Es sind zwei MS SQL Server vorhanden, die eine für Daten älter als drei Monate. Die andere hat aktuelle Daten. Beide sind vom Aufbau her identisch. Für eine Verarbeitung benötige ich alle Daten einer Tabelle, also von beide Servern. Ich habe das mit dem View und Linked Object gelöst.

Die View holt aus den beiden Servern Daten, simuliert in Navision als Tabelle. Diese sogenannte Tabelle kann ich ja als Recordvariable benutzen. Meine Frage ist nun, wann werden die Daten generiert? Wird bei jedem Findset, Findfirst, Findlast die View neu generiert? Oder werden die Daten sogar beim Filtersetzen (z.B. SETRANGE) neu erstellt?

Danke
Zuletzt geändert von Michelle am 18. Dezember 2009 12:05, insgesamt 2-mal geändert.

Re: Frage zu View in Navision

15. Dezember 2009 15:02

Hat den keiner Erfahrung mit Views? :-(

Re: Frage zu View in Navision

15. Dezember 2009 20:12

Hallo Michelle,

mit großen Erfahrungen mit Views kann ich zwar nicht dienen, habe nur ein wenig
damit herumexperimentiert. Inreressant ist der Ansatz mit Views schon.

Vor dem Hintergrund, dass ich auch im SQL-Managementstudio die Views "live"
vor mir habe, gehe ich davon aus, dass die Daten in Echtzeit abgefragt und zur Verfügung
gestellt werden.

Was Navision angeht, kommt es wohl hier auch auf die verwendete Version an.
Da weiß sicher Stryk (hier im Forum) näheres. Vielleicht hört er uns gerade ;o)

Möglich, dass dein Nav 4.00sp3, je nach dem, wie du die Recordvariable abfragst,
mit SQL-Cursors arbeitet -- dann hättest du den aktuellen Stand bereits beim ersten FINDSET.
Hier bin ich mir aber nicht sicher -- kann mich auch total irren.

viele Grüße

Torsten

Re: Frage zu View in Navision

15. Dezember 2009 21:22

Torsten67 hat geschrieben: Vielleicht hört er uns gerade ;o)

Yo, tut er :-)

Also bei einem normalen "View" liegen die Daten, so wie sie der "View" anzeigt nicht wirklich vor. Einen "View" kann man soz. als vordefiniertes SELECT Statement betrachten.
Die eigentlichen Daten liegen ja in den Tabellen vor, die dann nur vom View (SELECT) entsprechend gelesen und ggf. aufbereitet werden.

WIrd also ein "View" als "Linked Object" in NAV benutzt, passiert im Prinzip folgendes:

1. Das lesende C/AL Statement (FIND, FINDSET, usw.) löst die Abfrage an den SQL Server aus
2. Dabei wird der C/AL Code (SETRANGE & Co = WHERE Clause; SETCURRENTKEY & Co = ORDER BY, etc.) in ein SELECT Statement transformiert, das die Daten vom "View" abfrägt
3. Der "View" führt indirekt (nur im QEP sichtbar) das zugrunde liegende SELECT & Co. auf die Basis-Tabellen aus

Heisst in der Kurzfassung: die Daten werden nicht erzeugt, sondern aufbereitet.

Aaaaaber: man kann prinzipiell einen "View" auch "materialisieren":
D.h man kann auch für einen "View" einen "Gruppierten Index" (Clustered Index, CI) erzeugen (dafür müssen allerdeings ein paar Voraussetzungen erfüllt sein; siehe SQL Server "Books Online"). Die "Leaf Nodes" eines CI enthalten dann tatsächlich die aufbereiteten Daten, quasi so, wie sie der "View" anzeigt!

Am besten mal die VSIFT Sichten in NAV angucken (inkl. Indexe) - sind ein ganz gutes Beispiel dafür.

Hoffe das hilft Dir weiter.

Schöne Grüße,
Jörg

Re: Frage zu View in Navision

18. Dezember 2009 12:05

Vielen Dank Jörg. Jetzt kann ich mir das besser vorstellen. :-D
Dank auch an Torsten.