FlowField auf Änderungsprotokollposten

4. Mai 2017 15:26

Hallo zusammen,

ich möchte in einer Tabelle XXX ein FlowField auf den Benutzer des letzten Eintrages im Änderungsprotokollposten einbauen (Zuletzt geändert von).

Dazu muss ich mindestens folgendes in der CalcFormula einbauen:
Lookup("Change Log Entry"."User ID" WHERE (Table No.=CONST(XXX),Primary Key Field 1 Value=FIELD(No.))).

Damit habe ich aber noch nicht den letzten Eintrag. Die Methoden Min und Max machen ja hier keinen Sinn, weil ich ja als Feld die User ID habe, oder?

Besteht überhaupt eine Chance, das mit einem FlowField in der Tabelle XXX zu lösen? Wenn ja, wie? Ich möchte ungern auf der entsprechenden Page das Feld programmieren, denn dann wäre es ja nicht mehr über die Funktion nach Excel exportierbar. Und fest anlegen in der Tabelle XXX möchte ich es schon gar nicht. :wink:

Hat vielleicht jemand von euch noch eine Idee?

Re: FlowField auf Änderungsprotokollposten

4. Mai 2017 15:29

Hallo,

ein Flowfield auf den Änderungsprtokollposten ist eher eine suboptimale Idee. Da diese Tabelle in der Regel ein paar mehr Posten enthält würde ein Flowfield das System lahm legen.

Gruß Fiddi

Re: FlowField auf Änderungsprotokollposten

5. Mai 2017 08:27

Darüber hinaus müsstest du alle Felder der Tabelle in die Protokollierung aufnehmen, da ansonsten unter Umständen gar kein Protokolleintrag generiert wird.

Fehlt z. B. das Feld "Beschreibung 2" in der Protokollierung, und der Anwender XYZ ändert nur dieses eine Feld, wird kein Eintrag gemacht.
Somit kann dein FlowField nicht anzeigen, dass der Benutzer XYZ den Datensatz zuletzt geändert hat.

Wir wollen bei uns auch bei den meisten Datensätzen sehen, wer wann den Datensatz angelegt bzw. geändert hat, und kamen auch auf die Idee mit den FlowFields auf die Änderungsprotokollposten.
Doch die Datensammelwut des Änderungsprotokolls hätte uns sehr schnell an die Grenzen des Systems und der Performance gebracht.
Stattdessen haben wir einfach eine eigene Tabelle gemacht, in der jeder Datensatz aus jeder Tabelle (Stichwort RecordID) genau einen einzigen Eintrag bekommt.
In diesem Datensatz speichern wir dann einfach die Benutzer ID und den Zeitstempel der Datensatzanlage bzw. der letzten Änderung.
Integriert ist die Funktionalität in den Funktionen OnDatabaseInsert, ... der Codeunit 1 (als Event Subscriber).
Protokolliert wird aber nur dann, wenn in der dazugehörigen Tabelle auch die dazugehörigen FlowFields (Angelegt von, ...) enthalten sind.
Wollen wir also unsere "Protokollierung Light" in eine andere Tabelle implementieren, so brauchen wir nur die FlowFields dort hineinkopieren, den Rest übernimmt die zentrale Funktion.

Okay, damit die FlowFields auch "ihren" Datensatz in der Protokolltabelle finden können, benötigen wir auch ein physikalisches Feld mit der eigenen Record ID.
Dieses wird ebenfalls über einen Event Subscriber auf die Funktionen OnDatabaseInsert und OnDatabaseRename automatisch gefüllt (sofern es in der Tabelle vorhanden ist).