Wann werden globale Variablen initialisiert?

23. Juni 2009 12:35

Wir befinden uns in einem Report der einen anderen Report (99001046) aufrufen soll. Report 2 berechnet den Kalender für eine Arbeitsplatzgruppe. Der Code im R1 sieht wie folgt aus:
Code:
LrecWorkCenter.SETRANGE("No.", "No.");
IF LrecWorkCenter.FIND('-') THEN BEGIN
  LrepCalcCalendar.SETTABLEVIEW(LrecWorkCenter);
  LrepCalcCalendar.InitializeRequest(DMY2DATE(1,1,2009), DMY2DATE(31,12,2012));
  LrepCalcCalendar.RUN();
  COMMIT;
END;

Hier noch der InitializeRequest:
Code:
InitializeRequest(NewStartingDate : Date;NewEndingDate : Date)
StartingDate := NewStartingDate;
EndingDate := NewEndingDate;


Im Debug geht er zuerst dahinein:
Code:
Form - OnInit()
IF StartingDate = 0D THEN
  StartingDate := DMY2DATE(1,1,DATE2DMY(WORKDATE,3));
IF EndingDate = 0D THEN
  EndingDate := DMY2DATE(31,12,DATE2DMY(WORKDATE,3));

und initialisiert die Variablen. Leider ist es mir noch nicht gelungen diesen Code im Editor zu sehen. Anschliessend kann man nun schön sehen das InitializeRequest seine Arbeit tut und die globalen Variablen des LrepCalcCalendar setzt. Wenn der LrepCalcCalendar nun gestartet wird dann läuft er wieder in den Form - OnInit() rein. Nun habe ich erwartet das die StartingDate und EndingDate durch die InitializeRequest gesetzt wurden, aber an dieser Stelle sind sie wieder auf 0D - d.h. der RUN muss die globalen Variablen noch einmal initalisieren. Wobei das im Wiederspruch zur Dokumentation steht, weil da das Ausführen einer Funktion vorher explizit aufgeführt wird und was für einen Sinn macht das wenn die Globalen Variablen nicht erhalten bleiben? Interessanter Weise ist das nur beim .RUN so, nimmt man .RUNMODAL geht er nicht noch einmal in die Form - OnInit() rein sondern zeigt das Request-Form an (mit den richtigen Werten!) und arbeitet hinterher auch korrekt.

Komischerweise ist das Form - OnInit() identisch mit dem OnInit des einzigen DataItems. Mal davon abgesehen das ich den Code nicht in den OnInit des DataItems sondern in den OnInitReport gepackt hätte:
- Kennt jemand dieses Problem?
- gibt es andere Möglichkeiten den Report zu starten und die InitializeRequest vorher aufzurufen? Dies geht leider nicht bei REPORT.RUNMODAL(...) weil man ja hier keinen Report vorher definieren kann sondern nur die Nummer angibt (und damit der Report neu initialisiert wird).

Danke für eure Hilfe

WoF

Re: Wann werden globale Variablen initialisiert?

23. Juni 2009 13:55

Schau mal in die C/Side-Hilfe. Dein LrepCalcCalendar.RUN ruft den Report mit geclearten Varaiblen auf. Im Gegensatz dazu tut LrepCalcCalendar.RUNMODAL das nicht.

Re: Wann werden globale Variablen initialisiert?

23. Juni 2009 14:09

Kannst du da bitte ein bischen genauer werden? Ich bin nicht besonders gut in englisch und ich kann nix in der Hilfe finden.
Code:
RUN (Report)
Use this function to load and execute the report you specify. Use this function or the r.RUNMODAL function if you know at design time the exact report you want to run. Otherwise, use the Report.RUNMODAL or Report.RUN function.

Report.RUN
Report

Data type: report

Once you define this variable, you can run this function or the Report.RUNMODAL function on the variable. The system automatically clears the variable after it executes this function.

Comments
If the report you specify does not exist, a compile error occurs.

Example
This example shows how to use this function. Assume that the variable r has been defined as Report 4711.

Record.SETCURRENTKEY(Key-field1, ...);
Record.SETFILTER(Field, Filter);
Report.XXX; // any user-defined function
Report.SETTABLEVIEW(Rec)
Report.RUN()


The system automatically clears the variable after it executes this function.
beziehe ich auf die Variable Report die nach dem Aufruf von System gecleart wird. Zudem die Zeile Report.XXX mich darauf hin weist das ich hier Daten an den Report übergeben (oder Parameter einstellen) kann. Und wenn die anschließend wieder weg wären dann halte ich das Konstrukt für nicht besonders sinnvoll.

Ich meine auch irgendwo anders mal solche Aufrufe gesehen zu haben - und da scheint es ja zu funktionieren. Deshalb glaube ich, dass es eine besondere Konstellation dieser beiden Reports ist - oder der 99001046 hat einen Parameter gesetzt der das Clearen der Variablen bewirkt. Parameter kann ich dem RUN nicht mitgeben, das hab ich schon versucht.

Ich hab vergessen zu erwähnen: Nav 4.0 SP3.

Re: Wann werden globale Variablen initialisiert?

23. Juni 2009 14:15

Ich habe zwar kein Nav4, aber mit runmodal übernimmt er testweise die Datumsangaben.

Und die Zeile "Report.XXX" weist auf eine eigene Funktion hin, stimmt; aber nicht explizit auf Übergabeparameter.
edit: ist aber in der Hilfe zum Runmodal auch nicht viel deutlicher :-?
Nochmal edit: Bei mir klappt´s auch mit Report.run. hab ich eben gar nicht drauf geachtet :-)

Re: Wann werden globale Variablen initialisiert?

23. Juni 2009 16:08

Zum Glück ist es ein Einmal-Report - ich hab mich jetzt durchgeklickt. Waren nur etwa 50 Klicks verteilt über 30min. Trotzdem würde mich interessieren woran das lag und ob man das irgendwie steuern kann (geheimes Feature?) Mal sehen ob noch mehr Leute ne Idee haben was da los ist.

Ich danke dir auf jeden Fall mal für deine Mühe.

Re: Wann werden globale Variablen initialisiert?

23. Juni 2009 16:33

Ich arbeite zwar mit Nav5, aber der Report ist noch Stand 14.00. Ich habe ihn auch mal mit deinem Code einen Packen Kalender vollschreiben lassen - alles bestens :-?