Tabellen joinen bzw. auswerten

6. Dezember 2016 15:25

Hallo,

ich bin ein kompletter Neuling im Bereich NAV 2016. Ich kenne andere ERP Systeme darf mich aber jetzt aus beruflichen Gründen mit NAV2016 beschäftigen. Da ich eigentlich aus dem SQL Serverumfeld stamme möchte ich auch gleich mit einem praktischen Hintergrund an die Sache rangehen. Ein Report soll zeigen Welche Links an einen Artikel angehangen worden.
Dazu habe ich mir den Artikel= '0031364' herausgesucht.
Alle Informationen, so sagte man mir, stehen in der Item Tabelle.

Code:
Select * FROM [Navisiontest].[dbo].[TEST$Item] where No_ = '0031364'


So weit so gut. Ebenfalls wurde mir gesagt das ich in der Tabelle 'Record Link' in der Spalte 'URL1' den von mir gesuchten Link wiederfinde.
Nun stellt sich mir nur die Frage wie joine ich beide Tabellen? Mein Verdacht ist die Record ID aber wie setzt sich diese zusammen?
Ziel ist es beide Tabelle mit einander zu verbinden.

Kann mir jemand helfen? Bin für jeden Tipp sehr dankbar.

Re: Tabellen joinen bzw. auswerten

7. Dezember 2016 09:56

Hallo,

schaut bitte nach ob der folgende Link für dich hilfreich ist:

http://forum.mibuso.com/discussion/45879/how-to-show-record-link-data-in-report

Gruß

Michael

Re: Tabellen joinen bzw. auswerten

7. Dezember 2016 10:56

Hallo Michael,

danke für deine Hilfe. Aber ehrlich gesagt fehlt mir hierfür wohl das Wissen um das einzuschätzen.

Kannst du mir die SQL Abfrage etwas erklären oder Infos geben wie ich das weiter erlernen kann?

Re: Tabellen joinen bzw. auswerten

7. Dezember 2016 12:11

Hallo,

die RecordID ist eine spezielle Codierung von NAV. Der obere Link zeigt, wie du über die RecordRef (Das ist eine Referenz auf eine beliebige Tabelle) die Record ID zu einer bestimmten Datensatz in der Tabelle zuordnen kannst. Da die RecordID ein spezielles Konstrukt in NAV ist, ist es nicht sehr einfach über T-SQL da eine Verbindung herzustellen.

Der Aufbau der RecordID wird unter dem folgenden Link erklärt.

https://blogs.msdn.microsoft.com/microsoft_dynamics_nav_sustained_engineering/2009/08/06/how-do-record-links-encode-their-data-in-sql-server/

Code:
RecRef.GETTABLE(Item);

Mit diesem Statment übergibst du die Item Tabelle in den RecordRef. Vorher sollte die Tabelle Item auf einen bestimmten Datensatz zeigen. Dies erreichst du mit den Befehlen GET,FINDSET,FINDFIRST...

Z.B.
Code:
Item.GET('1000');


Mit diesem Statement setzt du einen Filter auf die Tabelle "Record Link" und kannst sie jetzt mit einer Repeat Until Schleife durchlaufen
Code:
"Record Link".SETFILTER("Record ID", FORMAT(RecRef.RECORDID));


Gruß

Michael

Re: Tabellen joinen bzw. auswerten

8. Dezember 2016 16:44

Hallo Michael,

danke für deine Mühen aber irgendwie werde ich nicht so richtig schlau daraus. Verstand habe ich das sich hinter RecordID ein spezieller Aufbau verbirgt. Wie dieser aufgebaut ist kann ich auch noch nachvollziehen.

Aber wie ich mit RecRef klarkommen soll verstehe ich nicht wirklich.

Kannst du hierfür ein Beispiel geben?`

Wie spreche ich die RecRef an und was meinst du mit vorher sollte die Tabelle Item auf einen bestimmten Datensatz zeigen?

PS: Das GET und FINDSET usw. habe ich hier wieder gefunden: https://msdn.microsoft.com/en-us/library/dd355095.aspx
geht doch in die richtige Richtung oder?

Re: Tabellen joinen bzw. auswerten

8. Dezember 2016 17:19

https://msdn.microsoft.com/de-de/library/dd355050(v=nav.90).aspx
Beschreibt eigentlich ganz gut was ein RecordRef ist.
Wenn ich das ganze in eigenen Worten beschreiben muesste... wuerde ich es als eine Typenunabhangig Record Variable bezeichnen.


Die Record ID besteht aus der Tabelle und dem Primaerschluessel des Datensatzes
RecRef.png

Wie das ganze allerdings in der Datenbank abgelegt wird kann ich dir nicht sagen.

Du solltest einfach mal ein bisschen mit den Ref Datentypen rumspielen um zu verstehen was sie machen und wie sie funktionieren.

Ted
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Tabellen joinen bzw. auswerten

9. Dezember 2016 09:24

Hallo,

wenn ich das richtig verstanden habe, dann möchte tutter mit einer SQL-Abfrage eine Auflistung mit Artikelnummr und z.B. Artikelbeschreibung sowie allen zum jeweiligen Artikel hinterlegten LINKS.
Meiner Meinung nach ist dies über die SQL-Abfrage nicht möglich, da man das Feld "Record ID" auf SQL-Ebene nicht "auflösen" kann.

Eine mögliche Alternative wäre es in einer eigenen "neuen" Tabelle, diese Links artikelbezogen abzulegen und dann diese Tabelle in der SQL-Abfrage anzusprechen.

Re: Tabellen joinen bzw. auswerten

11. Dezember 2016 21:06

Hallo Herr Metz,

die Welt ist doch sehr klein! Wie mit ihnen schon einmal besprochen muss es im SQL Server eine Logik geben wie der SQL Server zwischen Item Tabelle und Record Link joined. Vielleicht kann hier Michael noch etwas Licht ins dunkel bringen. Ich würde mir wünschen wenn er hier noch etwas SQL Statements posten könnte damit ich das ganze nachvollziehen kann.

Re: Tabellen joinen bzw. auswerten

12. Dezember 2016 10:09

Warum muss es denn SQL sein?
Willst du einen Report außerhalb von NAV erstellen, welcher sich nur die Daten holt? Dann wärst du mit einem OData Webservice schneller. Die RecordID setzt sich allerdings aus dem Primärschlüssel der Tabelle Artikel zusammen. Allerdings ist es in der Datenbank ein bisschen anders gespeichert:

how-to-interpret-recordid-data-type-via-the-sql-statement
how-do-record-links-encode-their-data-in-sql-server


Willst du einen Report in NAV erstellen, dann bringt dich SQL nicht weiter.

Re: Tabellen joinen bzw. auswerten

12. Dezember 2016 11:32

Ok dann stelle ich das an der Stelle noch einmal klar. Ich möchte nicht einen Nav Bericht schreiben, sondern eine SQL Abfrage. Ziel ist es mit SSRS einen Bericht zu erstellen. Das klappt aber nur wenn ich beider Tabellen miteinander joinen kann.
Hierfür gilt mein altes Motto was die Anwendung kann, muss auf Datenbankebene auch der SQL Server können.

Kann hier vielleicht noch jemand helfen?

Re: Tabellen joinen bzw. auswerten

12. Dezember 2016 12:56

tutter hat geschrieben:...Hierfür gilt mein altes Motto was die Anwendung kann, muss auf Datenbankebene auch der SQL Server können.
Kann hier vielleicht noch jemand helfen?


Die Frage ist nur mit welchem Aufwand du das nachbauen musst, was die Anwendung macht. Aber ich denke meine Links sollten dir helfen das Problem zu lösen.