[gelöst] Fehlermeldung erst beim Schließen (Feldsicherheit)

15. März 2017 13:49

Ich habe eine Funktion gebaut, die die Codeunit 1 bei OnAfterOnDatabaseModify überprüft, ob ein Benutzer zum Ändern eines bestimmten Feldes in einer Tabelle berechtigt ist.

Fällt das Ergebnis der Prüfung negativ aus, kommt die Fehlermeldung erst, wenn man die Page schließt oder den Datensatz verlässt.

Hat jemand eine Idee, wie man die Meldung direkt nach der Eingabe erhalten kann?

ich habe einiges mit den Errorfunktionen versucht, aber ohne Erfolg..
Zuletzt geändert von rallnus am 15. März 2017 16:20, insgesamt 2-mal geändert.

Re: Fehlermeldung kommt erst beim Schließen der Page

15. März 2017 14:06

Dein Trigger greift erst beim MODIFY, dieses wiederum wird erst dann ausgelöst, wenn du den Datensatz verlässt, also nach allen Eingaben. Darum kommt die Meldung zu spät.
Soll deine Prüfung also direkt bei Eingabe in ein bestimmtes Feld greifen, musst du das im OnValidate-Trigger des Tabellenfeldes ausprogrammieren. So etwas wie einen "OnGlobalValidate" gibt es nämlich nicht.

Je nach Anforderung könnte es Sinn machen, dass du alternativ nicht erlaubte Felder auf nicht editierbar stellst. Das geht dynamisch.

Re: Fehlermeldung kommt erst beim Schließen der Page

15. März 2017 14:12

Ok, danke. Die Idee war, Änderungen zu verbieten ohne in einzelne Tables oder Pages einzugreifen.

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 14:54

rallnus hat geschrieben:Ok, danke. Die Idee war, Änderungen zu verbieten ohne in einzelne Tables oder Pages einzugreifen.


nimm doch Subscriber für die entspr. Felder - dann greifst du nicht ein.
als EventFunction nimmst du dann OnBeforeValidateEvent

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 15:00

sweikelt hat geschrieben:nimm doch Subscriber für die entspr. Felder

Das würde ich auch empfehlen, hier noch ein Bild dazu wie das aussehen kann, hier für ein Feld "Customer Reference No."
Event1.png

In der Subscriber-Funktion programmiert man dann die Fehlerprüfung.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 15:01

sweikelt hat geschrieben:nimm doch Subscriber für die entspr. Felder - dann greifst du nicht ein.
als EventFunction nimmst du dann OnBeforeValidateEvent

Habe ich vergessen zu erwähnen. Klar kann man auch die Validates mit Events abgreifen. Aber pro Validate ein Event, und ich dachte rallnus wäre ein einer generischen Lösung (mit nur einem Event) interessiert gewesen.

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 15:31

Mein Ansatz war: Codeunit 1, [IntegrationEvent] OnAfterOnDatabaseModify

Dann eine Einrichtungstabelle pflegen.

Zugriffsrecht.PNG


Bei einer Änderung wird die Einrichtung geprüft.

Dann hätte ich keine weiteren Programmierungen in Standard-Objekten und müsste nicht jedes Feld einzeln betrachten.

Nichtsdestotrotz habt ihr mir erst mal sehr geholfen. Ich kombiniere die Einrichtungstabelle mit dem Subscriber. Es ist halt nicht ganz so flexibel.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 16:08

Das was du versuchst ist die sogenannte Feldsicherheit. Bieten einige Branchenlösungen an.
Es gab da allerdings letztens diesen Blogpost, welcher sich mit dem Thema auseinander gesetzt hat. Fand ich interessant.

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 16:19

und nochmal gelöst! :-D :-D :-D :-D

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 17:33

rallnus hat geschrieben:Mein Ansatz war: Codeunit 1, [IntegrationEvent] OnAfterOnDatabaseModify


Interessanter Ansatz,

Ich weiß nicht wie es in NAV 2017 ist, aber in 2013R2 wird dieser Trigger nicht durchlaufen, wenn die Tabelle nicht in der Änderungsprotokolleinrichtung definiert ist.
Naja, nicht ganz richtig. Ein einziges Mal nach dem Login wird der Trigger bei Tabellenänderungen durchlaufen, aber das beißt sich ja trotzdem mit deinem Konzept.

Re: [gelöst] Fehlermeldung kommt erst beim Schließen der Pag

15. März 2017 17:40

vandyke hat geschrieben:aber in 2013R2 wird dieser Trigger nicht durchlaufen, wenn die Tabelle nicht in der Änderungsprotokolleinrichtung definiert ist.

Das ist so nicht ganz richtig, und keine Frage der NAV Version.
Vielmehr musst du dich mittels der Funktion GetDatabaseTableTriggerSetup darum kümmern, DASS OnAfterOnDatabaseModify aktiviert wird, indem nämlich nach GetDatabaseTableTriggerSetup OnDatabaseModify = TRUE zurück geliefert wird.
(Deine Beobachtung rührt also daher, dass das Änderungprotokoll bestimmte Tabellen scharf schaltet. Du kannst aber beliebige Tabellen ergänzen.)

Re: [gelöst] Fehlermeldung erst beim Schließen (Feldsicherhe

16. März 2017 09:16

Ach, noch ein Hinweis.
Der Ansatz von Olof hat das gleiche Problem wie ich in meinem ursprünglichen Ansatz. D.h. die Fehlermeldung kommt erst beim Schließen der Page. Ich fahre in meiner Lösung nun zweigleisig.
Wenn ich die Fehlermeldung direkt erwarte, dann gehe ich über das Event in der Tabelle. Wenn ich nicht extra programmieren möchte, dann greift die Abfrage über den Trigger in der Codeunit 1.

Was meine Lösung dann noch von Olofs unterscheidet ist, dass ich mich nicht auf einen bestimmten user beziehe, sondern auf ein Zugriffsrecht. Das macht die Einrichtung auf Dauer leichter.