[gelöst] RecordRef filtern auf Wert aus RecordID

24. Februar 2012 14:55

Hallo zusammen,

ich hab da ein kleines Problem mit RecordID, FieldRef und RecordRef. Wir nutzen Navision in der Version 3.60 Codebasis und 5.00 Clientbasis (Build 24652).

Ich möchte generisch Datenexportieren. Dafür gibt es eine Einrichtungstabelle. Dort steht drin, welche Tabelle und welche Felder exportiert werden sollen. Außerdem wird pro Tabelle der letzte exportierte Datensatz als RecordID gespeichert. Jetzt soll es einen Job (Codeunit) geben, die die Tabellen durchgeht und die Werte aus den entsprechenden Feldern in eine Datei exportiert. Wichtig ist dabei natürlich, dass nur Datensätze ab dem letzten Datensatz exportiert werden. Und genau da ist das Problem, ich weiß nicht wie ich das filtern soll.

Bisher hab ich folgendes zum durchlaufen (stark vereinfacht dargestellt):

Code:
RecordRef.OPEN(ExportSetup1."Table No.");

IF RecordRef.FINDSET THEN
  REPEAT

    ExportSetup2.RESET;
    ExportSetup2.SETRANGE("Table No.", ExportSetup1."Table No.");
    if ExportSetup2.FINDSET then
      REPEAT
        FieldRef := RecordRef.FIELD(ExportSetup2."Field No.");
        OutFile.WRITETEXT(FieldRef.VALUE);
      UNTIL ExportSetup2.NEXT = 0;

    ExportSetup1."Last RecordID" := RecordRef.RECORDID;
    ExportSetup1.MODFIY(TRUE);

  UNTIL RecRef.NEXT = 0;


In ExportSetup1 und ExportSetup2 stehen alle Tabellen und Felder die exportiert werden sollen. Pro Tabelle soll es eine Datei geben, deshalb die Schleife um RecordRef

In ExportSetup1."Last RecordID" steht der letzte durchlaufene Eintrag als RecordID drin. Beim nächsten Lauf möchte ich alles was nach diesem kommt exportieren. Das heißt ich müsste zwischen dem OPEN und dem FINDSET einen Filter einbauen. Allerdings hab ich keinen Plan wie.

Kann mir jemand sagen wie?

schon mal vielen DANKE für die Hilfe!

Gruß
sas_fisch
Zuletzt geändert von sas_fisch am 25. Februar 2012 13:08, insgesamt 2-mal geändert.

Re: RecordRef filtern auf Wert aus RecordID

24. Februar 2012 15:11

Ich würde sagen, das hier ist der Befehl den du brauchst:
GET Function (RecordRef)

Und dann natürlich statt
Code:
IF RecRef.FINDSET THEN

einfach folgendes
Code:
IF RecRef.NEXT <> 0 THEN

Re: RecordRef filtern auf Wert aus RecordID

25. Februar 2012 13:08

Das hat geklappt. SUPER! DANKE!

Mit der GET Funktion hatte ich schon ausprobiert, aber das mit dem FINDSET völlig übersehen.

Re: [gelöst] RecordRef filtern auf Wert aus RecordID

16. Juni 2012 15:45

In meiner Entwicklungsumgebung funktionierte im Report die Filtersetzung mit
SETRANGE("Record ID",CleRecRef.RECORDID);

In der gleichen Datenbank über einen Citrix wurden jedoch die unmöglichsten Resultate angezeigt. Hier habe ich nun folgenden Filter gesetzt
SETFILTER("Record ID",FORMAT(CleRecRef.RECORDID));

Ich vermute den Grund in unterschiedlichen Builds zur Version NAV 5.1

In der Kombination der beiden Filtersetzungsarten zeigt nun der Report für alle das, was er sollte ...

Code:
LinkFound := FALSE;
CleRecRef.GETTABLE("Cust. Ledger Entry");
SETCURRENTKEY("Record ID");
SETFILTER("Record ID",FORMAT(CleRecRef.RECORDID));
IF NOT FINDSET() THEN BEGIN
  //CleRecRef.GETTABLE("Cust. Ledger Entry");
  //SETCURRENTKEY("Record ID");
  SETRANGE("Record ID",CleRecRef.RECORDID);
  IF FINDSET() THEN
    LinkFound := TRUE;
END ELSE
  LinkFound := TRUE;