[gelöst] OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 14:04

Hallo zusammen,

ich habe da ein kleines Phänomen, ich denke es auf jeden Fall, da ich es mir bisher noch nicht erklären kann!

Folgendes passiert wenn ich eine Form von mir durch das Transfomationtool schicken. Ich habe die üblichen Sachen durchgeführt und will dann die Page compilieren, funktioniert auch wunderbar. Habe die CodeRules angepasst, da so einige Funktionen wie UPDATEFORECOLOR nicht mehr funktionert unter dem RTC. Die Page lässt sich auch compilieren. Nun will ich die Page öffnen und dann kommt eine lange Fehlermeldung, dass in der Page bereits einen Member namens OnAfterGetRecord vorhanden ist.
Und wenn ich mir dann die Page anschaue, wird der Code aus der Form im OnAfterGetRecord in der Page in eine neue Funktion geschrieben die ebenfalls OnAfterGetRecord heißt.
Leider kann ich es mir nicht erklären, warum es so passiert. Hat jemand eine Idee warum? Oder hat jemand das auch schon gehabt und wenn ja wie wurde es gelöst????

Viele Fragen, aber ich hoffe jemand hat eine Lösung!

Schönen Gruß
Zuletzt geändert von OlliSH am 25. Juni 2010 09:08, insgesamt 1-mal geändert.

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 14:11

Falls du NAV 2009 ohne SP verwendest: Mit welcher Transformationstool-Version arbeitest du? Zwischendurch gab es ein Update (wenn auch für etwas völlig anderes als dein Problem). Richtig wäre 6.0.28609.0

Ansonsten würd ich die CodeRules.txt auf ihren ursprünglichen Zustand setzen; nur um zu gucken, ob das einen Unterschied macht.

OlliSH hat geschrieben:wird der Code aus der Form im OnAfterGetRecord in der Page in eine neue Funktion geschrieben die ebenfalls OnAfterGetRecord heißt

Eigentlich ist dieses Verhalten normal, glaub ich. Ich würde mir eher die Frage stellen, wie das ERSTE OnAfterGetRecord dahin gekommen ist.

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 14:26

Ich habe NAV2009 SP1 hier im Einsatz. Wie und wo kann ich denn erkennen mit welcher Transformationtool- Version ich arbeite?

Hatte auch gedacht, dass es an meine Anpassungen leigt und habe die ursprünglichen CodeRules genommen und da passiert es ebenfalls.

Ich glaub ich habe mich gerade etwas falsch ausgedrückt mit dem OnAfterGetRecord.

Es sieht folgendermaßen aus. In der Form gibts ja den Trigger OnAfterGetRecord, der ist auch mit Code versehen. Dann transfomiere ich die Form und das Transformationtool erstellt eine neue Funktion die ebenfalls OnAfterGetRecord heißt mit dem Code. Die Page besitzt ja auch ein Trigger der OnAfterGetRecord heißt. Und in diesem Trigger der Page wird die Funktion aufgerufen und da die beiden gleich heißen, knallt es wohl auch (Verständlicherweise)!
Ich habe mir mal andere Forms angeschaut in dem auch Code im OnAfterGetRecord Trigger vorhanden ist, aber da wird der Code auch im Trigger der Page transfomiert.
So richtig verstehen tue ich es nicht:-(

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 14:42

OlliSH hat geschrieben:Wie und wo kann ich denn erkennen mit welcher Transformationtool- Version ich arbeite?

Im Transformationstool-Ordner liegt eine exe-Datei. In deren Eigenschaften (Registerkarte Version) kannst du die Version ablesen.

In der Form gibts ja den Trigger OnAfterGetRecord, der ist auch mit Code versehen

Zeig ihn mal, vielleicht weist er Besonderheiten auf?

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 14:57

Hab jetzt mal nach der Version geguckt. Meine hat folgende Version 6.0.29626.0

Und hier ist der Code vielleicht siehst du ja etwas was besonderes ist
Code:
DSupVerknKopf.INIT;

IF ("Verknuepfung zu" <> '') AND (Verknuepfungsart <> Verknuepfungsart::Info) THEN BEGIN
  IF Verknuepfungszeilenfilter = '' THEN BEGIN
    IF DSupVerknKopf.GET("Verknuepfung zu") THEN BEGIN
      //Erledigt := DSupVerknKopf.Erledigt;
      IF GETFILTER(Erledigt) <> '' THEN
        COPYFILTER(Erledigt,DSupVerknKopf."Erledigt-Filter")
      ELSE
        DSupVerknKopf.SETRANGE("Erledigt-Filter",FALSE);
      DSupVerknKopf.CALCFIELDS("Stunden benoetigt","Stunden geschaetzt","Stunden Ueberschuß");
      "Stunden benoetigt" := DSupVerknKopf."Stunden benoetigt";
      "Stunden geschaetzt" := DSupVerknKopf."Stunden geschaetzt";
      "Stunden Ueberschuß" := DSupVerknKopf."Stunden Ueberschuß";
      "Termin Kunde" := DSupVerknKopf."Termin Kunde";
      WeitergeleitetAn := DSupVerknKopf.WeitergeleitetAn;
      Position := DSupVerknKopf."Arbeitspaket Position";
    END;
  END ELSE BEGIN
    DSupVerknZeile.SETRANGE("Supportnr.","Verknuepfung zu");
    IF STRPOS(Verknuepfungszeilenfilter,',') = 0 THEN BEGIN  // Verknüpfung Zeilenbereich
      DSupVerknZeile.SETCURRENTKEY("Supportnr.","Zeilennr.");
      DSupVerknZeile.SETFILTER("Zeilennr.",Verknuepfungszeilenfilter);
    END ELSE BEGIN
      DSupVerknZeile.SETCURRENTKEY(Kategorie1);
      DSupVerknZeile.SETFILTER(Kategorie1,SELECTSTR(1,Verknuepfungszeilenfilter));
      DSupVerknZeile.SETFILTER(Kategorie2,SELECTSTR(2,Verknuepfungszeilenfilter));
    END;
    DSupVerknZeile.SETRANGE(Erledigt,FALSE);
    IF NOT DSupVerknZeile.FIND('-') THEN
      Erledigt := TRUE;
    DSupVerknZeile2.COPY(DSupVerknZeile);
    DSupVerknZeile2.SETRANGE(Erledigt);
    DSupVerknZeile2.SETFILTER("Termin Kunde",'<>%1',0D);
    DSupVerknZeile2.SETCURRENTKEY("Supportnr.","Termin Kunde");
    IF DSupVerknZeile2.FIND('-') THEN
      "Termin Kunde" := DSupVerknZeile2."Termin Kunde";
    DSupVerknZeile.SETCURRENTKEY(Verknuepfungsart,"Verknuepfung zu",Erledigt);
    DSupVerknZeile.SETRANGE(Verknuepfungsart,DSupVerknZeile.Verknuepfungsart::Info,DSupVerknZeile.Verknuepfungsart::Erledigung);
    DSupVerknZeile.SETRANGE("Verknuepfung zu",'');
    IF GETFILTER(Erledigt) <> '' THEN
      COPYFILTER(Erledigt,DSupVerknZeile.Erledigt)
    ELSE
      DSupVerknZeile.SETRANGE(Erledigt,FALSE);
    DSupVerknZeile.CALCSUMS("Stunden benoetigt","Stunden geschaetzt","Stunden Ueberschuß");
    "Stunden benoetigt" := DSupVerknZeile."Stunden benoetigt";
   "Stunden geschaetzt" := DSupVerknZeile."Stunden geschaetzt";
    "Stunden Ueberschuß" := DSupVerknZeile."Stunden Ueberschuß";
  END;
END ELSE
  IF Verknuepfungszeilenfilter <> '' THEN BEGIN
    IF STRPOS(Verknuepfungszeilenfilter,',') <> 0 THEN BEGIN  //Verknüpfungsfilter mit Kategorien
      DSupVerknZeilen.SETCURRENTKEY(Kategorie1);
      DSupVerknZeilen.SETFILTER(Kategorie1,SELECTSTR(1,Verknuepfungszeilenfilter));
      DSupVerknZeilen.SETFILTER(Kategorie2,SELECTSTR(2,Verknuepfungszeilenfilter));
      IF DSupVerknZeilen.FIND('-') THEN;
      END;
  END;

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 15:21

OlliSH hat geschrieben:Hab jetzt mal nach der Version geguckt. Meine hat folgende Version 6.0.29626.0

Die normale SP1-Version, also alles in Ordnung.

Und hier ist der Code vielleicht siehst du ja etwas was besonderes ist

Nö, er ist für den OnAfterGetRecord-Trigger höchstend ungewöhnlich lang. Kannst ja mal zum Test alles bis aus die erste Zeile rausnehmen und noch einmal transformieren. Sollte vom Endergebnis her theoretisch keinen Unterschied machen .....

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 15:38

Habe jetzt mal den Code raus genommen, aber es bleibt dabei. Er macht immer noch eine neue Funktion in der Page! Ich habe auch nochmal bei msdn geguckt und dort sollte alles was im Trigger von der Form auch im Trigger des Page landen. Das ist doch nun wirklich reichlich merkwürdig das Ganze! Ich kann es mir einfach nicht erklären. Insbeondere im Trigger der Page auch anderer Code steht, der eigentlich nicht im Trigger der Form steht.
Ich weiß, dass einiges verschoben wird, aber warum dennn gerade diese beiden Zeilen?
Code:
"DSupVerknKopf.StatusHideValue" := FALSE;
BeschreibungIndent := 0;


Und so sieht der Trigger in der Page aus:
Code:
"DSupVerknKopf.StatusHideValue" := FALSE;
BeschreibungIndent := 0;
OnAfterGetRecord;
DSupVerknKopfStatusOnFormat;
TerminKundeOnFormat;
StundengeschaetztOnFormat;
StundenbenoetigtOnFormat;
StundenUeberschussOnFormat;


Die ganzen mit OnFormat ist klar, das ist so laut Rules aber die ersten beiden Zeilen sind merkwürdig. Ich muss mal gucken, wo die in der Form stehen, vielleicht ist da ja etwas nicht ganz in Ordnung!

Bin aber für jeden Hinweis weiterhin dankbar:-)

Re: OnAfterGetRecord Trigger beim Transformationtool

24. Juni 2010 16:54

OlliSH hat geschrieben:Die ganzen mit OnFormat ist klar, das ist so laut Rules aber die ersten beiden Zeilen sind merkwürdig. )

Liegts vielleicht an den Format-Funktionen? Vielleicht die mal testweise raus?

Re: OnAfterGetRecord Trigger beim Transformationtool

25. Juni 2010 07:32

Guten Morgen:-) ,

ich glaub nicht das es an den OnFormat Funktionen liegt, wenn ich es richtig gelesen habe, werden diese Funktionen durch das Transfomationtool dort "abgelegt"! Die Meldung die ich bekomme war auf die OnAfterGetRecord Funktion, die das Transformationtool erstellt hat, aber ich weiß leider nicht warum???!!! Konnte bisher in den CodeRules auch nichts finden, was da drauf hin deutet, oder gibts noch eine andere Stelle in der ich rein schauen kann?
Ich habe jetzt noch herausgefunden das die beiden Zeilen
Code:
"DSupVerknKopf.StatusHideValue" := FALSE;
BeschreibungIndent := 0;


Proberties (HideValue,Indent) für die Felder "Status" und "Beschreibung" sind, die nur in Pages verwendet werden!

Mal sehen, ob ich in den Felder etwas finde! Vielleicht liegt es da dran

Re: OnAfterGetRecord Trigger beim Transformationtool

25. Juni 2010 08:31

Hast du dir die Log-Datei im Transformationstoolordner angesehen, letzter Eintrag? Steht da vielleicht eine Meldung drin?
Man kann übrigens durch das Bearbeiten einer anderen Datei einstellen, was alles geloggt wird; leider weiß ich nicht mehr wo und wie genau.

Re: OnAfterGetRecord Trigger beim Transformationtool

25. Juni 2010 08:40

So jetzt habe ich den Fehler gefunden. Es liegt da dran, dass Feldernamen mit Umlauten vorhanden waren und diese im Trigger der Textbox angesprochen wurden. Diese habe ich umbenannt und schwupps ging es ohne Problem. Jetzt kann ich erstmal die ganzen Tabellen durch gehen und gucken ob noch mehr davon vorhanden sind.

Auf jeden Fall vielen Dank für die Unterstützung :-D

Noch eine kleine Frage wie kann ich den Beitrag auf GELÖST setzen?

Re: OnAfterGetRecord Trigger beim Transformationtool

25. Juni 2010 08:45

OlliSH hat geschrieben:Noch eine kleine Frage wie kann ich den Beitrag auf GELÖST setzen?

Was genau verstehst du an meiner Signatur nicht? ;-)

Re: [gelöst] OnAfterGetRecord Trigger beim Transformationtoo

25. Juni 2010 09:09

Hab es jetzt verstanden und umgesetzt :-) ! War wohl noch ein wenig früh :-D

Re: OnAfterGetRecord Trigger beim Transformationtool

25. Juni 2010 13:09

Natalie hat geschrieben:Man kann übrigens durch das Bearbeiten einer anderen Datei einstellen, was alles geloggt wird; leider weiß ich nicht mehr wo und wie genau.

Hier der Vollständigkeit halber:
http://msdn.microsoft.com/en-us/library/dd355072.aspx