[beantwortet] Tabelle gesperrt während Report ausführung

21. April 2008 16:47

Hallo.

Beschreibung:
Ich möchte Zeiten von Reports stoppen und Loggen.

System:
Navision 3.70
Native C/SIDE Datenbank


Ich habe eine Tabelle
Report Logging:
User | Report | Von | Bis | Anzahl gesetzter Filter | Gesetzte Filter

Trigger der Tabelle:

OnInsert()
User := USERID;
Von := CURRENTDATETIME;

OnModify()
Bis := CURRENTDATETIME;


Ich führe einen Report aus:

Er hat eine Globale Variable:
Logging | Record | Report Logging


In den OnPreReport() - Trigger 'relativ' am Anfang:

Logging.INIT;
Logging.Report := CurrReport.OBJECTID(FALSE);
Logging.INSERT(TRUE);


In den OnPostReport() - Trigger 'relativ' am Ende:

Logging.MODIFY(TRUE);


In ALLE OnPreDataItem() - Trigger des Reports direkt am Anfang:

IF GETFILTERS <> '' THEN
BEGIN
Logging."Anzahl gesetzter Filter" += 1;
END;

-----------

Der Code ist in mehreren Reports.
Wenn jetzt die Reports von mehreren Personen ausgeführt werden, wird die Tabellen "Report Logging" gesperrt. Das gibt ein Fehler.

- Kann mir da jemand helfen?

- Gibt es vielleicht ein Stück Code, dass ich einbauen kann, damit nicht mehr nur eine Person schreiben kann?

- Gibt es Probleme mit dem Zeitpunkt des schreibens? Sind da die Report Trigger nicht für ausgelegt?


Schon mal Danke.
Ciao
Zuletzt geändert von mhent am 22. April 2008 11:47, insgesamt 1-mal geändert.

21. April 2008 17:06

Wenn nach dem INSERT ein COMMIT steht, ist die Logtabelle erst mal wieder frei ( bis zum MODIFY). Alle sonstigen Datenbankänderungen werden dann natürlich auch weggeschrieben, bei Reports die entweder komplett oder gar nicht durchlaufen sollen, darf kein zwischenzeitliches COMMIT erfolgen.

21. April 2008 17:18

Oh. Das ist ein guter Ansatz.
Was ist wenn ich die Code Zeilen, die die Tabelle "Report Logging" befüllen in eine Codeunit packe?
Kann ich in der Codeunit das Commit benutzen ohne, dass es den Report beeinflusst?
Ciao

21. April 2008 18:12

mhent hat geschrieben:Kann ich in der Codeunit das Commit benutzen ohne, dass es den Report beeinflusst?

Das geht nicht. Ein COMMIT im Code schreibt alle Änderungen weg ( bzw. in den Commit Cache, wenn dieser verwendet wird), egal wo es steht.