[Gelöst] [CC] Änderungsprotokoll via NAS löschen

8. Juni 2015 12:17

Hi,

ich möchte Änderungsprotokollposten automatisiert über die Projektwarteschlange löschen.
Der Report 510 hat allerdings CONFIRM Anweisungen im OnPreDataItem und OnePreReport...

Hier würde ich ein paar IF GUIALLOWED vorsetzen wollen ...
Kann den Report 510 aber nicht bearbeiten weil Permissions des Reports stehen auf: TableData "Change Log Entry"=rid

Ich kann die Permissions zwar rauslöschen und den Report speichern, kann diesen dann aber nicht mehr ausführen .
Mit Permissions kann ich keine Änderung speichern.

Gibt es eine NAS Version für den Report 510? Oder reicht es wenn ich den NAS Partner darum bitte ein paar GUIALLOWED einzusetzen?

Danke
Zuletzt geändert von elTorito am 25. März 2019 12:12, insgesamt 1-mal geändert.

Re: [CC] Änderungsprotokoll via NAS löschen

8. Juni 2015 12:30

elTorito hat geschrieben:Oder reicht es wenn ich den NAS Partner darum bitte ein paar GUIALLOWED einzusetzen?

Ja, genau das solltest du tun.

Re: [CC] Änderungsprotokoll via NAS löschen

8. Juni 2015 12:39

Hallo Peter,

grundsätzlich würde es sicherlich ausreichen, wenn dein NAV-Partner in diesem Report vor allen CONFIRMs und vor MESSAGEs ein IF GUIALLOWED ... einbaut.
Allerdings frage ich mich, wie du bei der Ausführung über den NAS dann einen Filter (z.B. auf "Datum und Uhrzeit" oder "Tabellennr.") setzen willst.
Oder willst du alle Änderungsprotokollposten löschen?

Falls die Datenbank auf einem SQL-Server läuft, ginge das Löschen der Änderungsprotokollposten über ein SQL-Skript deutlich schneller als über NAV.
Dort müsstest du dann eben manuell das Skript anpassen (z.B. damit ein Filter auf Datum und Uhrzeit gesetzt wird) und dann manuell ausführen.
Falls Bedarf besteht, könnte ich ein solches Skript auch zur Verfügung stellen.

Re: [CC] Änderungsprotokoll via NAS löschen

8. Juni 2015 12:50

JRenz hat geschrieben:Allerdings frage ich mich, wie du bei der Ausführung über den NAS dann einen Filter (z.B. auf "Datum und Uhrzeit" oder "Tabellennr.") setzen willst.

Habe ich mich auch zu allererst gefragt. Dann aber gesehen, dass im OnPreReport-Trigger bei Fehlen von Datumsfiltern (nach CONFIRM) alle Posten älter als ein Jahr gelöscht werden. Ich denke, genau das ist gewünscht.

Re: [CC] Änderungsprotokoll via NAS löschen

8. Juni 2015 13:53

Hallo Jrenz,

ich hatte da gedacht an :

Code:
recChangeLogEntries.SETCURRENTKEY("Table No.","Date and Time");
// 7257600000 ms = 84 Days
recChangeLogEntries.SETFILTER("Date and Time", '%1..%2', 0DT, CURRENTDATETIME-7257600000);
r510.SETTABLEVIEW(recChangeLogEntries);
r510.USEREQUESTFORM(FALSE);
r510.RUN();


So die letzten 2 oder 3 Monate möchte ich nur noch behalten, alles ältere kann man auch in Datensicherung nachgucken,
evtl. sogar nur 1 Monat und dafür dann mehr Daten Protokollieren, es fehlt sowieso immer im Protokoll ausgerechnet die Änderungen die man kontrollieren muss ;)

SQL wäre auch ne Option, scheint ja nicht so als würde der Report 510 noch irgendwelche Trigger anstoßen.

ich hab nochmal bisschen gegoogelt und bin auf das hier gestoßen, könnte es sein dass hier eine SQL Storage Procedure ausgeführt wird, und über den WebService dann ein Eintrag in die JobQueue Entry erfolgt. Krieg die Visual Studio Datei leider nicht migriert um es mal auszuprobieren.

Hmm. Okay habs ans laufen bekommen, scheint so als würde der NAS bei dem Beispiel umgangen :shock: :?:

Re: [CC] Änderungsprotokoll via NAS löschen

11. Juni 2015 14:55

Okay. Hab's nu so gemacht:

SQL Job erstellt.
Schritt 1: Ausführen der SP DeleteOldChangeLogs
Code:
   DELETE FROM dbo.[**** GmbH TESTVERSION 12_05$Change Log Entry]
   WHERE "Date and Time" < GETDATE()-30 // Alles älter als 30 Tage löschen


Schritt 2: Ausführen der SP CallWebService welche mit der DLL zur Verfügung gestellt wird.

Die SP/DLL ruft den Webservice auf, und es wird die Codeunit 50013 ausgeführt,
die CU50013 speichert dann ein Log in der Protokolwarteschlangeposten.

Bisschen umständlich, aber wieder was dazu gelernt :)


Update 25.03.2018:
Nach dem Update auf NAV2018 stand ich wieder vor dem Problem wie ich regelmäßig die Änderungsprotokollposten lösche.

Da wir unser NAV nun in der Cloud hosten, habe ich nicht mehr so viele SQL Freiheiten, kein Zugriff auf den den SQL Agent und auch das Importieren einer Storage Procedure als DLL um einen WebService aufrufen funktioniert nicht mehr.

Diesmal habe ich mir den DataType DotNet zunütze gemacht (System.Data.SqlClient.....) und mir eine SQL Zugriffs Codeunit "gebastelt".
Auf dem SQL eine SP erstellt welche ein Zeitintervall empfängt um die Daten zu löschen, und einen String zurückgibt
In einer Codeunit, welche ich der Aufgabenwarteschlange hinzugefügt habe rufe ich dann die SQL Prozedur auf :-)