Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: mh70220 am 24.01.04 - 02:05:03
-
Hallo zusammen,
Ich habe eine Maske, in der ich ein Dialogfeld habe. Dieses habe ich schon so eingestellt, das ich einen Datensatz aus einer Ansicht auswaehlen kann. Bei Auswahl des Datensatzes sollen automatisch 5 weitere Felder mit bestimmten Daten dieses Datensatzes befuellt werden.
Wie kann ich das realisieren?
Danke
Matthias
-
wenn der Wert, den du in das Dialogfeld schreibst das ausgewählte Dokument eindeutig identifizieren kann, dann kannst du die anderen Felder berechnet machen und als Formel jeweils einen entsprechenden @DBLookup.
Was du dazu noch brauchst: du musst in deinem Dialoglist-Feld die Option "Refresh fields on keyword change" aktivieren, dadurch werden alle berechneten Felder neu berechnet, wenn sich der Wert in der Dialogliste ändert.
Und du brauchst vielleicht noch ne neue (versteckte) Ansicht für deine Lookups, die in der ersten Spalte nach dem Feld sortiert, dass du in deine Dialogliste übernimmst.
-
alles sehr wahr.
Aus Performance-Sicht wäre es zudem sinnvoll die @dbLookups von 5 auf 1 zu beschränken.
Dafür sieht die Lookup-Ansicht so aus:
1. Spalte --> der key, den du in der Auswahlbox anwählst.
2. Spalte --> die 5 Werte konketanentiert mit einem Trennzeichen (also einen Character, der bestimmt nicht in den Feldwerten vorkommt. Kandidaten sind "~" oder "#".
In Praxis sieht dann die Spaltenformel so aus
Feld1 + "~" + Feld2 + "~" + ... + "~" + Feld5
Du kannst diese Formel auch in ein Feld der Maske schreiben.
Vergesse dann aber nicht alle bestehenden Dokumente nochmal neu zu berechnen.
Den Wert mit den vielen ~ holst du dir dann über die @dbLookup. Diesen Wert zerschneidest du dann mit @Left und @Right Operationen in den Formeln.
Hoffe es hilft
Axel
-
Ja das ist dann natürlich die deluxe Version.
Sehr schön.
-
Das Zerlegen des zusammengesetzten Wertes geht statt mit @Links oder @Rechts noch eleganter mit @Word ;-)
Bernhard
-
Danke fuer eure schnelle Hilfe. Doch irgendwas passt bei meiner Formel immer noch nicht. Schaut mal bitte ob ihr den fehler findet:
@If(PersBearbeiter="";"";@Word(@DbLookup( "" : "NoCache" ; "" : "" ; "($PersBeHelp)" ; PersBearbeiter ; 2 ); "~"; 2))
Das Feld ist ein Textfeld "berechnet" wo diese Formel drinsteht.
Ich bekomme immer die Fehlermeldung: Eintrag im Index nicht gefunden, oder der Index ist fuer die Ansicht nicht aufgebaut!
-
Hallo mh,
liegt die DB lokal auf deinem Rechner oder auf einem Server?
cococo69
-
Die Angabe der Datenbank (2. Parameter) scheint mir falsch: Du suchtst doch in der gleichen Datenbank, oder?
Also so
@If(PersBearbeiter="";"";@Word(@DbLookup( "" : "NoCache" ; "" ; "($PersBeHelp)" ; PersBearbeiter ; 2 ); "~"; 2))
Ausserdem muss die erste Spalte der View "($PersBeHelp)" sortiert sein - bitte prüfe das mal. Dort muss als Wert der Namen PersBearbeiter stehen.
Andreas
-
He Andreas,
danke fuer die Fehlerbehebung. Nur klappt alles :)
Matthias
-
abgesehen von dem Problem mit der Fehlermeldung hätte ich auch noch mal ne Frage dazu.
ich dachte, das läuft so ab: ich mache einen Lookup, bekomme den zusammengesetzten String zurück und schreibe den in ein verstecktes Feld (anders formuliert, ein verstecktes berechnetes Feld enthält die DBLookup Funktion). Jedes andere berechnete Feld holt sich mit @Word "seinen" Wert aus dem String, der ja jetzt in diesem versteckten Feld steht. Dadurch ist die Anzahl der Lookups = 1.
So wie es aussieht, habe ich da was falsch verstanden, denn mh7411 macht in jedem berechneten Feld einen Lookup und als ich Axels Post nochmal genau gelesen habe, dann steht das auch genau so da drin.
Also habe ich bei dieser Lösung auch 5 Lookups bei 5 berechneten Feldern.
Allerdings, wo ist da jetzt die bessere Performance gegenüber 5 stinknormalen Lookups ohne diesen zusammengesetzten String?
Oder wie groß mag sie sein?
-
@Thomas: Ich glaube Du hast recht.
@Matthias: Am besten (aus Performancesicht) ist es, wenn Du ein berechnetes Feld "Lookup" machst.
Dort als Formel:
@DbLookup( "" : "NoCache" ; "" ; "($PersBeHelp)" ; PersBearbeiter ; XX );
wobei XX die Spaltennummer ist, in der die einzelnen Felder mit "~" konkatteniert sind.
Dann bspw. im Feld "PersBearbeiter" die Formel:
@If(PersBearbeiter="";"";@Word(Lookup; "~"; 2))
Das setzt dann voraus, dass der Bearbeiter an 2. Stelle in dem String steht.
Andreas
-
Hallo alle zusammen,
auch der Vorschlag klappt super.
Vielleicht loennt ihr mir noch bei einem weiteren Problem helfen. Ich habe in meiner Maske ein Feld, wo eine E-Mail Adresse drin steht. Nun moechte ich ueber ein Button ein ein Memo erstellen und die E-Mail Adresse gleich als Empfaenger eintragen. Ich weis schon, das ic h mit dem Befehl "@Command([MailComposeMemo])" das Standart Memo Formular in meiner Maildatenbank oeffnen kann. Nun fehlt mir nur noch der die Moeglichkeit, die E-Mail Adresse zu uebertragen.
Kennt sich jemand damit aus?
-
Probier mal das:
_Empfaenger := DeinFeldName;
@Command([MailComposeMemo]);
@Command([EditGotoField];"EnterSendTo");
@Command( [EditInsertText];_Empfaenger)
Das sollte es tun.
Andreas
-
Danke fuer die schnelle Hilfe. Du best super, Andreas! :)
-
Gern geschehen, Danke für die Blumen ! :D
Andreas
-
Hierzu noch eine Alternative:
- Du markierst das Feld "Mail-Adresse"
- über Erstellen - Hotspot -Verknüpfungshotspot wählst Du den Typ "URL" (berechnet)
- Jetzt wählst Du aus: Formel (das @Symbol neben "Wert")
- hier trägst Du jetzt ein: "mailto:" + <DeinAdressfeldname>
Jetzt brauchst Du nur noch auf das Adressfeld zu klicken, und schon öffnet sich der vom User eingestellte MailClient mit bereits eingetragener Empfängeradresse.
ACHTUNG: Andreas Tip funktioniert immer mit Notes als Mail-Client, bei meinem Tip bist Du davon abhängig, was der User als Mail-Client installiert hat (ggf. also auch gar nix).
Ciao,
Bernhard