Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: michael-r am 14.01.21 - 16:23:11

Titel: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: michael-r am 14.01.21 - 16:23:11
Hallo zusammen,

ich würde gern aus einer Maske per Button, mehrere Felder per Dialog aus einer Ansicht abfragen, in dem ich die Daten im Dialog markiere.
Ähnlich wie bei einer Picklist, die kann aber nur einen Wert von einem Feld übergeben. Ich brauche aber alle Werte aller Felder und muss die an unterschiedliche Felder übergeben, also ich selektiere Hans (Feld Vorname), Mustermann (Feld Nachnahme) und in der Maske soll dann die Felder Vorname und Nachname ensprechend gefüllt werden.

Ich habe schon gesucht, aber leider war das passende nicht dabei ;).

Hat jemand da ein Beispiel oder Schlagwort?

MFG Michael
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: it898ur am 15.01.21 - 10:34:59
Hallo Michael,

im Normalfall holt man sich bei diesen Anforderungen per @Picklist einen eindeutigen Schlüssel und sucht mit diesem Schlüssel dann die anderen Werte per @DbLookup aus entsprechenden Hintergrundansicht heraus.
Sofern die Daten in der gleichen Datenbank liegen, kann man sich als eindeutigen Schlüssel auch die UNID holen und über @GetDocField die fehlenden Daten suchen.

Viele Grüße

André
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: michael-r am 15.01.21 - 11:30:21
Hallo Andre,

Danke, ich werde mal ein bißchen basteln.

MFG Michael
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: CarstenH am 15.01.21 - 12:35:04
Hallo Michael,

der Vorschlag von André ist vielleicht naheliegend, weil simpel umzusetzen, aber nur dann empfehlenswert wenn es sich um eher wenige und sich selten ändernde Daten handelt die nachzuladen sind und die Datenbanken (und Server auf denen sie liegen) sich eher langweilen.

Der Grund ist schnell erklärt: Ressourcen sind endlich, jedes erneute @DbLookup oder @GetDocField verursacht Last auf dem Server. Aus Erfahrung neigen Programmierer noch dazu gern mal ein [NoCache] als Parameter einzubauen weil es ja irgendwann (insbesondere beim Testen mit immer wieder gleichen Testdaten) den Fall gab dass das Lookup einen (alten) Wert aus dem Cache geholt hat.
Im Ergebnis funktioniert die Anwendung zwar wie sie soll aber die Bedienung und die Reaktion der Anwendungen und Masken sind zäh, bei jedem Feldwechsel kommt die Sanduhr weil auch noch in den HideWhen-Formeln weitere @DbLookup's stecken. Letztendlich leidet die Akzeptanz darunter erheblich.

Um zum Ursprung zurück zu kommen: Deine Frage war schon ganz richtig formuliert, wenn man schon mehrere Werte auf einen Schlag holen und verteilen kann ist das immer der (ressourcentechnisch) bessere Weg.

Sehr viel musst du dafür gar nicht ändern, du fragst ja schon per Dialog eine Ansicht ab. In diese Ansicht baust du dir eine zusätzliche Spalte ein, nennen wir sie mal  "Returnvalues". Die Spalte macht man später unsichtbar, Nutzer sehen nach wie vor eine normale Auswahl.

Die zusätzliche Spalte bekommt als Wert die Values aller zurückzugebenden Felder als eine Zeichenkette mit einem erfundenen Trennzeichen, das in den Feldwerten selbst nicht auftauchen darf. Ich habe als Beispiel-Trennzeichen hier mal "@;" benutzt. Die Formel sieht dann in etwa so aus:
Code
@Text(nr) + "@;" + Sortname + "@;" + @Trim( Name_1 + " " + Name_2 ) + "@;" + PLZ + "@;" + Ort + "@;" + ............

In der Maske gibst du diese Spalte als zurückzugebenden Wert an und in der Eingabeumsetzung des Feldes zerlegst du die Zeichenkette wieder, z.B. mit
Code
retvalue := @Explode( string ; "@;") 
Die Feldwerte stehen dann als Liste (Array) mit retvalue[n] zur Verfügung und können leicht in einem Rutsch auf die Felder in der Maske verteilt werden. @Command([RefreshHideFormulas]) anschließend nicht vergessen.

Ich bin mir sicher hier im Forum schlummern etliche Beispiele und Tipps die das vielleicht sogar besser erklären.

HTH
Carsten

[Edit] Einen Thread zu genau dieser Problematik (Performanceprobleme durch zu viele @Lookups) und gleicher Lösung habe ich auf die Schnelle noch gefunden: https://atnotes.de/index.php/topic,60615.0.html
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: michael-r am 18.01.21 - 11:28:35
Hallo Carsten,

danke schön. Der Vorschlag gefällt mir noch besser und funktioniert sehr gut.
Bis auf dass man die Spalte nicht unsichtbar machen kann, denn sonst werden keine Werte übergeben, aber ich habe die nach hinten geschoben und mit breite von 1, fällt das nicht auf.

Ich habe noch Sachen gesucht wie Domino Designer werte aus einer Ansicht übernehmen etc, mit Picklist hatte ich auch einige Sachen gefunden, aber das hatte alles nicht so weiter geholfen.

MFG Michael
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: CarstenH am 18.01.21 - 11:45:24
Unsichtbare Spalte sollte eigentlich gehen, das habe ich definitiv an mehreren Stellen benutzt und das wird auch in dem anderen von mir verlinkten Thread so von Torsten (Tode) erklärt.
Aber egal - dein Workaround mit Größe 1 ist ja auch ok.

Carsten
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: michael-r am 18.01.21 - 14:46:17
Also ich hatte es über die "Hide Column" in den Eigenschaften der Spalte gemacht.
Nicht über eine Formel.

MFG Michael
Titel: Re: Werte per Dialog aus einer Ansicht abfragen
Beitrag von: ronka am 19.01.21 - 19:41:37
Sonnst den Schrift farbe an den Hintergrund anpassen.. weissen schrift auf weise hintergrund ist auch unsichtbar.