Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Tode am 22.03.16 - 20:28:28

Titel: @Picklist - Verständnisproblem
Beitrag von: Tode am 22.03.16 - 20:28:28
Ich programmiere ja noch nicht lange Notes- Datenbanken (maximal 20 Jahre oder so), aber manchmal verzweifle ich an mir selbst (oder es liegt einfach daran, dass ich alt werde).

Gegeben sei:

Eine Ansicht mit 2 Spalten.
Die erste Spalte ist versteckt, nicht sortiert, und zeigt ein MultiValue- Feld an. Die Spalte steht auf "Trennz. bei Mehrfachwerte" = Neue Zeile, mehrfachwerte getrennt anzeigen ist nicht aktiviert.
Die zweite Spalte ist die, die der User sieht. Sie ist sortiert, hat keine Mehrfachwerte, sehr simpel.

In einer Aktionsschaltfläche steckt folgender hochkomplizierter Code:

Code
_title := "Title";
_msg := "Message";

_srv := @Subset( @DbName ; 1 );
_db := TrailerDBName;

_viw := "ViwPicklistCompany";
_col := 1;

_pickList := @PickList( [Custom] : [Single] ; _srv : _db ; _viw ; _title ; _msg ; _col );

Laut Designer Hilfe (http://www.ibm.com/support/knowledgecenter/SSVRGU_9.0.0/com.ibm.designer.domino.main.doc/H_PICKLIST.html?lang=de) liefert Picklist Mehrfachwerte:
Zitat
Return value
columnValue

Text list. The value(s) in the specified column for the document(s) that the user selected.

Mache ich jetzt ein @Prompt( [OK] ; "TEST"; _pickList ), dann bekomme ich alle Werte, die auch in der Spalte stehen (Moment: Müsste der Code nicht auf die Nase fallen, wenn _picklist wirklich Multivalue wäre!?).
Jetzt kommt das große ABER: Mache ich ein @Prompt( [OK] ; "ELEMENTS"; @text( @Elements( _picklist ) ) ), dann bekomme ich -und ich kann mich auf den Kopf stellen- IMMER 1.

Und das geht mir einfach nicht in den Kopf...
Ich habe das in einer leeren Datenbank nachgestellt, und es ist auch dort definitiv so...

Natürlich ist der Code nicht neu, sondern schon eine Weile im Einsatz.
Und ich könnte wetten, dass ich das so schon zig mal verwendet habe...

Das Ergebnis von Picklist wird in ein Feld geschrieben. Und wie ich jetzt herausgefunden habe, hat dann das Feld anhand seiner Multi- Value- Trenner aus diesem String wieder einen Multivalue gemacht.

Das Ganze funktioniert aber sporadisch nicht (dann wird der Text nicht in Einzelwerte geteilt, sondern bleibt ein langer String), und darüber bin ich auf dieses unglaubliche Problem gestossen.

Client ist 9.0.1FP4, andere habe ich noch nicht ausprobiert.

Jetzt sagt mir: Werde ich so langsam bescheuert, oder ist es die Formelsprache?

Titel: Re: @Picklist - Verständnisproblem
Beitrag von: jBubbleBoy am 22.03.16 - 21:49:21
Mehrfachwerte trennen durch neue Zeile = ein Wert mit mehreren Zeilen
In der Theorie stimmt die Beschreibung und ein @Elements( .. liefert eine 1 zurück.

Das beste wäre ein @implode(feldName;"<Trenner>") und dann wieder umkehren ;)
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: Andrew Harder am 22.03.16 - 21:57:23
Sicher, das da ein
Code
@Explode(_pickList; @Newline)
nicht reichen würde?
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: jBubbleBoy am 22.03.16 - 22:01:54
Naja irgendwo gibt es noch einen Haken, denn das hätte der Trenner im Feld schon machen müssen, macht er aber nicht immer.
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: Tode am 23.03.16 - 08:11:10
Ich muss lernen, mich verständlich auszudrücken:

Das Ganze war als Beispiel zu sehen. Wenn ich in der Ansicht das Semikolon als Trenner eingebe, dann muss meine Formel im Feld @Explode( _picklist ; ";" ) lauten, und bei Leerzeichen @Explode( _picklist ; " " ).

Einen Workaround zu schaffen ist also mehr als Trivial.

Das schafft aber eine Abhängikeit zwischen Ansichts- Design und Code an einer anderen Stelle, den ich gerne vermieden hätte. Stellt jemand (versehentlich oder wegen Lesbarkeit oder weil die Dreisam grade so viel Wasser hat) die Spalteneigenschaft um, dann geht der Code in allen Picklists, die sich auf diese Ansicht beziehen plötzlich auf die Bretter.

Laut Hilfe dürfte es diese Abhängigkeit aber nicht geben... und DAS ist mein Problem... Ich kann ja in den Feldeigenschaften auch einstellen, dass ich Mehrfachwerte mit Neuer Zeile getrennt anzeigen will, aber wenn ich Programmatisch auf das Feld zugreife bekomme ich trotzdem einen Mehrfachwert, und keinen mit @NewLine implodeten Wert...
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: jBubbleBoy am 23.03.16 - 08:52:17
Theorie und Praxis, es bleibt das Problem das @Newline nicht immer zieht. Vielleicht gibt es den Aufruf noch wo anders, z.B. aus einer Ansicht heraus ohne das die Feldtrenner-Definition greift?

Das du keine Änderung an der Ansicht machen möchtest, mit dem Hinweis jemand könnte die Spalten-Eigenschaft später anpassen, kann ich nicht nachvollziehen. Mach eine versteckte Ansicht, oder schreibe einen Kommentar in die Spaltenformel oder wie muss ich mir bei euch Anpassungen an Datenbank vorstellen? Aber wie auch immer, das ist ein anderer Prozess.
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: Tode am 23.03.16 - 12:51:17
Nochmal: Es geht mir nicht um die Lösung des Problems (ich habe das Ganze inzwischen in Script umgesetzt, ist sowieso in der gegebenen Datenbank sauberer so, weil ich den Code noch an anderer Stelle brauche).

Es ging mir darum, ob meine Wahrnehmung des Befehls @Picklist wirklich seit Jahren so falsch ist, oder ob es irgendeine Ursache gibt, warum Picklist was anderes zurückliefert als die Dokumentation sagt...

Es geht mir also explizit NICHT darum, wie ich das umgehen kann, sondern darum, WARUM Picklist einen Single Value und nicht einen Multi Value zurückliefert (unabhängig von der Ansichts- Definition)
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: jBubbleBoy am 23.03.16 - 13:17:22
Weil:
Zitat
Mehrfachwerte trennen durch neue Zeile = ein Wert mit mehreren Zeilen
Siehe Spalteneigenschaften oder was ist daran falsch?

Die Beschreibung:
Zitat
Return value
columnValue

Text list. The value(s) in the specified column for the document(s) that the user selected.
Bezieht sich auf den Parameter [SINGLE], welchen man dann nicht benutzen darf.

Sorry, aber in diesem Fall stimmt die Beschreibung mit der Praxis überein.
Titel: Re: @Picklist - Verständnisproblem
Beitrag von: Andrew Harder am 23.03.16 - 15:52:31
Stell Dir vor, es käme wirklich eine Liste zurück.
Und jetzt nimmst Du ein Picklist und wählst mehrere Dokumente aus.
Zitat
columnValue
Text list. The value(s) in the specified column for the document(s) that the user selected.
Das könnte dann eher zu ungewünschten Effekten führen.

Gut, tut es so auch ;)