Option mit nicht angezeigbaren/auswählbaren Option [GELÖST]

11. März 2020 10:26

Hallo zusammen!

Ich habe eine Frage zu einem Option Feld.

Ich fülle ein Feld (Typ: Option) einer Tabelle jeweils

- aus dem System heraus (also automatisch über eine Codeunit),
- mit eigenen Angaben.

Wenn ich das Feld aus System heraus befülle dann gebe ich die Option mit.

Wenn der User eigene Angaben macht, dann hat der ja eine Auswahl in dem Option Feld. Allerdings soll er bestimmte Optionen nicht zur Auswahl bekommen, da die ja nur genutzt werden sollen wenn diese Automatisch befüllt werden.

Hat ihr dazu eine Idee?

Vielen Dank und viele Grüsse
DAL
Zuletzt geändert von DAL am 11. März 2020 13:26, insgesamt 1-mal geändert.

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 11:43

Du prüfst im OnValidate Trigger des Feldes auf diese Optionen und wirfst ggf. einen Fehler. Aus dem Code heraus, ignorierst du diesen Trigger einfach.

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 11:52

Aber dann ist diese Option immer noch für den User auswählbar, oder verstehe ich das falsch?

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 11:53

Oder du entfernst die Option aus der OptionCaption des Controls. (Option1,Option2,Option3 wird zu Option1,,Option3)

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 11:57

Wenn der Anwender eine Eingabe in dem Feld tätigt, dann zeigt dir der Befehl CURRFIELDNO die Feldnr. deines Optionsfeldes an.
Wenn du per Codeunit das Feld füllst, dann ist CURRFIELDNO auf 0.
Damit kannst du im OnValidate-Trigger deines Optionsfeldes prüfen, ob das System oder ein Anwender das Feld befüllt hat.
Diese Prüfung solltest du auf jeden Fall in den Trigger einbauen.

Um den Anwendern etwas mehr Komfort anzubieten, könntest du in den Pages, in denen das Optionsfeld angezeigt wird, die nicht erlaubten Optionswerte durch einen leeren String ersetzen.
Beispiel:
Table: OptionString='Option1,Option2,Option3,Option4,Option5'
Page: OptionCaption='Option1,,Option3,,Option5'
Man beachte die doppelten Kommata, damit die weiteren Optionswerte weiterhin die richtige Position repräsentieren.
Und man beachte auch, dass zwischen den doppelten Kommata kein Leerzeichen steht.
Ohne Leerzeichen wird der Optionswert ausgeblendet, mit Leerzeichen wird dem Anwender ein leerer Optionswert an der Position angezeigt.

Beispiele für die Leerzeichen:
Feld "Type" der Tabelle "Purchase Line"
Der erste Optionswert ist ein Leerzeichen und wird dem Anwender in der Auswahl auch angeboten.
Der vierte Optionswert ist ein leerer String und wird dem Anwender gar nicht erst angeboten. (In der Tabelle "Sales Line" steht an der Stelle "Ressource")

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 12:03

So hatte ich mir das auch schon gedacht. Allerdings sieht man dann in der Page das irgendwann eine automatische Eintragung stattgefunden hat, aber ohne Übersetzung (OptionCaption).

Die Options sind "Team,Customer,Sales Office".
OptionCaption in diesem Fall "Team,Sales Office".

Eintragungen für Customer werden nur automatisch erzeugt. Wenn ich nun die OptionCaption dafür entferne und so ein automatischer Eintrag stattfindet, dann steht auf der Page z.B. einfach eine 1. Das sieht auch unschön aus.

Gibt es noch eine andere Möglichkeit?

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 12:10

Timo Lässer hat geschrieben:Wenn der Anwender eine Eingabe in dem Feld tätigt, dann zeigt dir der Befehl CURRFIELDNO die Feldnr. deines Optionsfeldes an.
Wenn du per Codeunit das Feld füllst, dann ist CURRFIELDNO auf 0.
Damit kannst du im OnValidate-Trigger deines Optionsfeldes prüfen, ob das System oder ein Anwender das Feld befüllt hat.
Diese Prüfung solltest du auf jeden Fall in den Trigger einbauen.

Um den Anwendern etwas mehr Komfort anzubieten, könntest du in den Pages, in denen das Optionsfeld angezeigt wird, die nicht erlaubten Optionswerte durch einen leeren String ersetzen.
Beispiel:
Table: OptionString='Option1,Option2,Option3,Option4,Option5'
Page: OptionCaption='Option1,,Option3,,Option5'
Man beachte die doppelten Kommata, damit die weiteren Optionswerte weiterhin die richtige Position repräsentieren.
Und man beachte auch, dass zwischen den doppelten Kommata kein Leerzeichen steht.
Ohne Leerzeichen wird der Optionswert ausgeblendet, mit Leerzeichen wird dem Anwender ein leerer Optionswert an der Position angezeigt.

Beispiele für die Leerzeichen:
Feld "Type" der Tabelle "Purchase Line"
Der erste Optionswert ist ein Leerzeichen und wird dem Anwender in der Auswahl auch angeboten.
Der vierte Optionswert ist ein leerer String und wird dem Anwender gar nicht erst angeboten. (In der Tabelle "Sales Line" steht an der Stelle "Ressource")



Sehr guter Ansatz, nur das ich im Ergebnis nachher die Optionsnummer angezeigt bekomme.
Wie mache ich das verständlicher. Also das Ergebnis sieht später so aus:

ID Zuweisung (Option Feld) Datum
1 Team 10.03.2020
2 Team 10.03.2020
3 2 11.03.2020
4 Sales Office 11.03.2020

Das ist dann auch für den Anwender sichtbar. Sehr unschön.

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 13:13

Wenn der Anwender die Option "Customer" auch sehen soll, dann kannst du den Optionswert natürlich nicht ausblenden.
Dann bleibt dir nur die Prüfung im OnValidate deines Optionsfeldes.

Code:
IF CURRFIELDNO <> 0 THEN // Eingabe durch Anwender in irgendeinem Feld
  IF OptionFeld = OptionFeld::Customer THEN
    FIELDERROR
(OptionFeld); 

oder
Code:
IF CURRFIELDNO = FIELDNO(OptionFeld) THEN // Eingabe durch Anwender direkt in dem Options-Feld
  IF OptionFeld = OptionFeld::Customer THEN
    FIELDERROR
(OptionFeld);

Re: Option mit nicht angezeigbaren/auswählbaren Optionen (RT

11. März 2020 13:25

Okay ich werde es irgendwie so machen. Vielen Dank schon einmal!