Relationsprüfung in Nav 2013 R2

18. September 2014 11:33

Hallo zusammen,

ich bin gerade dabei ein "Processing only" Report zu schreiben, der alle Relationen von verschiedenen Tabellen prüfen soll.
Grund dafür ist, dass es in Nav 2013 R2 ja keine Prüffunktion mehr gibt wie damals unter "Datei -> Datenbank -> Prüfen..". (Wenn doch, dann lasst es mich bitte wissen mit kurzer erklärung "WO?").

Also nun zu mein Problem:

In meinem Report verwende ich Variablen vom Typ:
Name|DataType|Subtype|Length
Field|Record|Field
RecRef|RecordRef
FldRef|FieldRef
RecRefTest|RecordRef

Mein bisheriger Code:

Code:
Field.SETRANGE(TableNo,27);
IF Field.FINDSET THEN BEGIN
  RecRef.OPEN(Field.TableNo);
  IF RecRef.FINDSET THEN BEGIN
    REPEAT
      FldRef := RecRef.FIELD(Field."No.");
      REPEAT
        IF FldRef.RELATION <> 0 THEN BEGIN
         
          RecRefTest.OPEN(FldRef.RELATION);
          // Hier müsste RecRefTest mit Field.VALUE überprüft werden.
          RecRefTest.CLOSE;

        END;
      UNTIL RecRef.NEXT = 0;
      RecRef.FINDFIRST;
    UNTIL Field.NEXT = 0;
  END;
END;
RecRef.CLOSE;


Also kurz zur erklärung:
Mein Ziel ist es, dass ich nach der überprüfung der "RELATION <> 0" herausfinden möchte ob der Wert der aktuell im FldRef.VALUE drinn ist auch in der "RecRefTest" Tabelle vorhanden ist.
Mit normalen Records könnte man ja ganz normal mit Record.GET(VALUE) arbeiten, allerdings ist dies so nicht möglich mit RecordRef.

Ich hoffe das ich es verständlich erklärt habe und wäre für hilfreiche Antworten sehr dankbar!

MfG, Masaky.

Re: Relationsprüfung in Nav 2013 R2

18. September 2014 11:50

Bist du Partner?
Microsoft hat das Tool nämlich nachgereicht; du findest es in der Knowlege Base: Database check tool for Microsoft Dynamics NAV 2013 R2

Re: Relationsprüfung in Nav 2013 R2

18. September 2014 12:03

This hotfix includes the Microsoft Dynamics NAV 2013 R2 Database Check Tool which is a new command prompt utility (NavCheckDatabase.exe) which will check the consistency of the NAV object metadata compared to SQL Server table definitions and report any problems.
Ich denke, die ehemalige Konsistenzprüfung hat tatsächlich die Relationen geprüft, diese hier prüft "nur" auf Unterschiede zwischen in Object Metadata gespeicherten Schemainformationen und den tatsächlichen SQL Server Schemata.

Zum Problem: GET wird nicht überall funktionieren (zusammengesetzter Schlüssel). Du müsstest eine neue FieldRef nutzen und dann auf das dortige Feld mit dem Wert filtern. Aber auf welches? Die Tabellenrelation hilft dir da nicht weiter. Das funktioniert z.B. auch nicht für Felder mit mehreren Relationen (Sales Line "No." z.B.). Ich denke das Unterfangen wird komplexer als gedacht...

Mein aufwendiger Ansatz wäre: Parsen eines Textexports, ermitteln der Relationen (Tabelle/Feld), dann testen. Vielleicht hilft dir C/Breeze dabei: http://www.mibuso.com/dlinfo.asp?FileID=1597.