seltsames Verhalten in CU 423
Verfasst: 14. Dezember 2005 16:06
Beim einfügen eines Änderungsprotokollposten (Tabelle 405) wird in der CU
423 Change Log Mng. im Trigger InsertLogEntry eine Funktion ausgeführt,
die den Wert des Feldes "NewValue" prüft.
Diese Prüfung soll bei jedem Insert ausgeführt werden - dies erfolgt aber
leider immer versetzt. D.h. nach Neustart von Navision und dem Durchlauf der Prüfungsroutine geschieht zunächst nichts, aber beim zweiten Druchlauf wird auf den vorherigen Wert geprüft.
In in diesem InsertLogEntry Trigger werden vorher Filter auf TabelNo und TableName gesetzt.
Kann sich jemand dieses Verhalten erklären?
Hier der Code:
Danke schonmal.
redStripe.
423 Change Log Mng. im Trigger InsertLogEntry eine Funktion ausgeführt,
die den Wert des Feldes "NewValue" prüft.
Diese Prüfung soll bei jedem Insert ausgeführt werden - dies erfolgt aber
leider immer versetzt. D.h. nach Neustart von Navision und dem Durchlauf der Prüfungsroutine geschieht zunächst nichts, aber beim zweiten Druchlauf wird auf den vorherigen Wert geprüft.
In in diesem InsertLogEntry Trigger werden vorher Filter auf TabelNo und TableName gesetzt.
Kann sich jemand dieses Verhalten erklären?
Hier der Code:
- Code:
InsertLogEntry(VAR FldRef : FieldRef;VAR xFldRef : FieldRef;VAR RecRef : RecordRef;TypeOfChange : 'Insertion,Modification,Deletion')
ChangeLogEntry.INIT;
ChangeLogEntry."Date and Time" := ROUNDDATETIME(CURRENTDATETIME,1000);
ChangeLogEntry.Time := DT2TIME(ChangeLogEntry."Date and Time");
ChangeLogEntry."User ID" := USERID;
ChangeLogEntry."Table No." := RecRef.NUMBER;
ChangeLogEntry."Field No." := FldRef.NUMBER;
ChangeLogEntry."Type of Change" := TypeOfChange;
IF (RecRef.NUMBER = DATABASE::User) AND (FldRef.NUMBER = 2) THEN BEGIN // Password
ChangeLogEntry."Old Value" := '*';
ChangeLogEntry."New Value" := '*';
END ELSE BEGIN
IF TypeOfChange <> TypeOfChange::Insertion THEN
ChangeLogEntry."Old Value" := FormatValue(xFldRef,RecRef.NUMBER);
IF TypeOfChange <> TypeOfChange::Deletion THEN
ChangeLogEntry."New Value" := FormatValue(FldRef,RecRef.NUMBER);
END;
//bsw1000+
CLEAR(Check_value_rec);
Check_value_rec.SETRANGE(Check_value_rec."Table No.",ChangeLogEntry."Table No.");
Check_value_rec.SETRANGE(Check_value_rec."Field No.",ChangeLogEntry."Field No.");
IF Check_value_rec.FIND('-') THEN BEGIN
ChangeLogEntry.Prüfwert := Check_value_rec.ValidString;
MESSAGE('Prüfwert %1',ChangeLogEntry.Prüfwert);
IF ChangeLogEntry.Prüfwert <> ChangeLogEntry."New Value" THEN
ERROR(Text000,Check_value_rec.ValidString);
END;
//bsw1000-
Danke schonmal.
redStripe.