Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: TazDevil20 am 13.08.05 - 17:29:29

Titel: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 13.08.05 - 17:29:29
Hallo,

ich versuche mich gerade mal wieder an einer Datenbank und stehe jetzt an einem für mich nicht überwindbarem Problem.

Ich habe eine Maske in dem Daten eingegeben werden.

In einer zweiten Maske würde ich gerne über eine Dialogliste einen gespeicherten Vorgang auswählen und danach verschiedene Felder automatisch füllen lassen. (z. B. ich suche die Seriennummer und lasse danach die Felder des Herstellers und der Gerätebezeichnung füllen).

Ich habe inzwischen herausbekommen, dass das ganze nur über LS zu realisieren geht. Leider kann ich noch kein LS.

Könnte mir da jemand ein wenig behilflich sein. Bin absolut lernbereit! Also am besten mit ein paar erklärungen, damit ich dann mein nächstes Problemchen selbst lösen kann  ;D
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: koehlerbv am 13.08.05 - 18:27:36
Wieso sollte das nur mit LS gehen ? Wenn Dein Schlüssel eindeutig ist, den Du ja sowieso zunächst auswählen musst, kannst Du - wenn die richtige Ansicht vorhanden ist - mit @dbLookup von dort weitere Werte auslesen und in Dein Zieldokument schreiben.

Du müsstest eventuell detaillierter aufschreiben, wo Dein Problem liegt.

Bernhard
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: eknori am 13.08.05 - 18:39:36
Zitat
wenn die richtige Ansicht vorhanden ist
Da hat Bernhard Recht; und dann solltest du die erste Spalte dieser Ansicht selbstredend sortieren. Die zweite Spalte baust du dann so auf: Feld1+"~"+Feld2+"~"+ ...
Dann brauchst du, nachdem dir der @DBLookUp hoffentlich einen Wert zurückliefert nur noch mit @Word den String wieder aufzudröseln ( Trennzeichen ~ ) und in die Felder schreiben ...
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 13.08.05 - 19:24:43
Bei euch hört sich das sooo einfach an!!!  ;)

Mit @dblookup hab ich noch nichts gemacht.

Ich habe jetzt eine Ansicht, in der alle Felder enthalten sind, welche ich gerne automatisch füllen lassen würde.

Diese Ansicht rufe ich in meiner Make über ein Dialogliste auf.

Die zu füllenden Felder habe ich als Berechnendes Textfeld deklariert.

Sind meine ersten Schritte soweit richtig, oder muss ich die Felder anders deklarieren?
Muss die Formel dann bei der Eingabevalidierung eingetragen werden?

Ich hab mir jetzt folgende Formel gebastet:

_ansicht := abgang;
_Schlüssel := Seriennumemer

@DbLookup(""; "" : "" ; _ansicht ; _Schlüssel ; 2)

Aber leider will er mir die nicht in der Eingabevalidierung annhemen!?
Ansonsten auf dem richtigen Weg  ???
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: eknori am 13.08.05 - 20:02:06
Zitat
Aber leider will er mir die nicht in der Eingabevalidierung annhemen!?

wenn du mehrere Felder auf diese Weise füllen willst, dann nicht ...

Seriennumemer ? Ist das nur ein Tippfehler ?

Und wenn die Werte beim Aufruf des Docs angezeigt werden sollen, gehört die Formel nicht in die Validierung sondern in den Vorgabewert ( das Feld ist dann berechnet zur Anzeige )

Und wenn die mehrere Werte auf diese Art anzeigen möchtest, dann musst du das gaaaanz anders aufbauen.

Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 13.08.05 - 20:27:51
Ja, es war ein Tippfehler.

Und es sind insgesammt 5 Felder die ich füllen möchte. Aber nicht bei dem Aufrufen eines Dokuments, sondern ich erstelle ein neues und möchte nur eine Eingabe machen und dadurch die restlichen 5 Felder füllen lassen (die Daten habe ich in der Datenbank schonmal eingegeben).

Wie muss ich das dann aufbauen??

Manchmal könnt ich anfangen Notes zu hassen!!!  >:D
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 13.08.05 - 22:01:06
Durch ein wenig probieren, habe ich jetzt eine Möglichkeit gefunden:

_view := "auswahlabgang";
_field := Seriennummer;

@SetField("Modell";@DbLookup("": "";"":""; _view; _field ; 2));
@SetField("MA";@DbLookup("": "";"":""; _view; _field ; 3));
@SetField("BS";@DbLookup("": "";"":""; _view; _field ; 4));
@SetField("Inventarnummer";@DbLookup("": "";"":""; _view; _field ; 5));

@Command([FileSave]);
@Command([CloseWindow])

Das wird erst beim Speichern der Maske ausgeführt. Es wär schön, wenn das direkt nach dem auswählen der Seriennummer passieren würde. Außerdem wird mir hinter jedem Feld jetzt ein "," angezeigt. Aber auch nur, wenn ich das ganze nicht speichere. Sobald ich speicher, verschwinden alle automatischen eingaben.  >:(
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: Axel am 14.08.05 - 11:24:46
Hi,

wie wählst du denn die Seriennummer aus? Wo hast du denn den Formelcode eingegeben und wie sehen denn die WErteformeln der Textfelder aus, die du über die Formel füllst?


Axel
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 14.08.05 - 12:08:01
Hallo,

Die Seriennummer wähl ich durch eine Dialogliste aus, welche auf eine Ansicht mit allen erforderlichen Feldern verweist (Seriennummer,Modell, MA, BS, Inventar). Wobei nur die Seriennummer sichtbar ist.

Den Code den ich gepostet habe, habe ich in den Senden-Button eingetragen.

Die Werte der Textfelder ist einfach nur "".

Das mit dem verschwinden habe ich hinbekommen. Hatte Berechnete Textfelder gehabt.

Das mit den Kommas hinter den automatisch gefüllten Feldern tritt heute seltsamer weise nichtmehr auf. Notes hatte gestern scheinbar keine Lust mehr  ;)

Jetzt wär nurnoch der Wunsch, dass die Felder sich füllen sobald die Auswahl getroffen wurde.
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: Axel am 15.08.05 - 08:14:04
Hi,

zum automatischen Füllen der Felder würde ich folgenden Weg vorschlagen:

1. Setze die @DbLookups in die Werteformel der entsprechenden berechneten Felder.
2. Beim Dialogfeld mit der Auswahl der Seriennummer musst du die Option "Felder bei Schlüsselwortänderung aktualisieren" setzen.

Damit sollte es eigentlich funktionieren.


Axel

 
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 16.08.05 - 20:06:09
Hallo Axel,

wenn die die @DbLookups in die Werteformel eines Berechneten Feldes setze und die Schlüsselwortänderung aktiviere erhalte ich beim öffnen der Maske immer die Fehlermeldung, dass der Index nicht vorhanden ist oder nicht aufgebaut wurde.

Wenn ich es so lasse, dass erst nach klicken des Buttons und anschließenden Speicher und Schließen der Maske, dann werden mit den gleichen Formeln alle Felder entsprechend gefüllt und ich bekomme niergends eine Fehlermeldung.
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: eknori am 16.08.05 - 20:12:36
Zitat
wenn die die @DbLookups in die Werteformel eines Berechneten Feldes setze und die Schlüsselwortänderung aktiviere erhalte ich beim öffnen der Maske immer die Fehlermeldung, dass der Index nicht vorhanden ist oder nicht aufgebaut wurde.


kann es sein, daß die erste Spalte in der Ansicht nicht sortiert ist, auf die dein @DBLookup zugreift ?
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 16.08.05 - 20:18:04
Die ist auf jeden Fall sortiert. Schon tausend mal geprüft. Das seltsame ist ja, dass es mit dem Button einwandfrei funktioniert, aber nicht mit Berechneten Feldern.  ???
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: koehlerbv am 16.08.05 - 20:53:01
An Notes liegt das 100pro nicht - das ist eindeutig Dein Fehler.

Wenn Du berechnete Felder verwendest (was ja üblich ist): Wie stellst Du derzeit sicher, dass die Berechnung nur ausgeführt wird, wenn auch ein Schlüssel für dbLookup zur Verfügung steht ?

Welche Literatur hast Du ?
Welche Kurse hast Du besucht / wirst Du demnächst besuchen ?

Bernhard
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 16.08.05 - 21:17:27
Ich hab auch bei weitem nicht gelaubt, dass das ein Notesfehler ist.

Ich habe (momentan leider auf der Arbeit) für Entwicklung und Administraton jeweils das Buch von Addison-Wesley.

Kurse habe ich leider noch keine Besucht. (sind alle Ausgefallen) Werde aber (wenn er nicht schon wieder ausfällt) im September auf den ersten von drei Adminkursen gehen (Sparkassenakademie). Die nächsten beiden sind im Dez + Jan. Denke dass ich auch dort ohne Probleme hingehen kann.

Ab März fangen dann die Entwicklerkurse an. Werde mich dann aber erst nächstes Jahr bei meinem Chef erkundigen, dass ich auch dort auf die 3 Kurse kann.

Ich arbeite mit Notes jetzt fast 1 Jahr und habe mit der Programmierung (mit ein paar Pausen) erst anfang des Jahres angefangen.

Wie stell ich sicher, dass es einen Schlüssel für dbLookup gibt? Seite vom Addison-Wesley-Buch reicht, dann mach ich mich selber schlau  ;)

Will ja auch was lernen!
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 16.08.05 - 21:21:16
Wenn wir schon dabei sind herauszufinden, dass ich dringend einen Kurs brauch:  :P

Warum stürtz mir Notes immer mit diesem blöden roten Fenster bei folgender Formel ab?

Zitat
@If(Monitor != "";
      @If(@DbLookup("": "";"":""; "Help/Bildschirm";Monitor ; 3) != 1;
            @Do(@SetField("link_monitor";@DbLookup("": "";"":""; "Help/Bildschirm";Monitor ; 2));
                  @SetDocField(link_monitor; "zugeordnet"; 1);
                  @SetDocField(link_monitor; "Computer"; Seriennummer));
            @Do(@Prompt([Ok];"Fehler";"Dieser Monitor wurde bereits einem anderen PC zugewiesen.");
                  @SetField("Monitor"; ""))
      );
@Success);

@If(Drucker != "";
      @If(@DbLookup("": "";"":""; "Help/Drucker";Drucker ; 3) != 1;
            @Do(@SetField("link_drucker";@DbLookup("": "";"":""; "Help/Drucker";Drucker ; 2));
                  @SetDocField(link_drucker; "zugeordnet"; 1);
                  @SetDocField(link_drucker; "Computer"; Seriennummer));
            @Do(@Prompt([Ok];"Fehler";"Dieser Drucker wurde bereits einem anderen PC zugewiesen.");
                  @SetField("Monitor"; ""))
      );
@Success);

@Command([FileSave]);
@Command([CloseWindow])

Wenn ich das CloseWindow weglasse, dann stürzt Notes nicht ab. Auch wenn ich hinterher das Fenster per Hand schließe stürzt Notes nicht ab. Aber sobald ich das ganze "automatisieren" will, ist es aus.
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TMC am 16.08.05 - 21:35:14
Warum stürtz mir Notes immer mit diesem blöden roten Fenster bei folgender Formel ab?

Welche Notes-Version verwendest Du?
Ansonsten: je mehr Details, desto besser (wo steht die Formel, von wo aus wird aufgerufen, etc.).

Dieses "Fenster" heißt übrigens RBOD (red box of death), und trifft einen meist sehr unerwartet.
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 16.08.05 - 21:58:37
Ich verwende 6.5.2 (geht nicht höher, da auf der Arbeit auch so)

Die Formel steht hinter einer Aktion in der Aktionsleiste (natürlich als Click-Event).

Das Dokument ist bereits vorhanden und ich füge eine Information hinzu (welcher Bildschirm und Drucker zu dem PC gehört). Danach drück ich einfach auf die Aktion und es passiert das bereits beschriebene. Entweder mit CloseWindow = RBOD; ohne CloseWindow = keine RBOD, muss aber manuell schließen und nochmals bestätigen zum speichern.

Die Felder die ich fülle sind Dialoglisten, welche man durch eine View mit Leben füllen kann.

Sonst noch was? Glaube das war alles was es zu dieser Maske zu sagen gibt.
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: koehlerbv am 16.08.05 - 22:17:01
Dass Du 6.5.2 auch für die Entwicklung einsetzt, wenn das Eure Produktivumgebung ist: Sehr gut. Anders geht es dann eben wirklich nicht.
Die RBOD ist niemals Dein Fehler (solange Du keine API-Routinen (falsch) verwendest  ;D)
Hast Du statt @Command schon @PostedCommand (für FileClose Window) probiert ? Könnte bei älteren Versionen helfen.

Wie herausbekommen, ob der Schlüssel überhaupt vorhanden bzw. dann gültig ist:
- Vorhanden: If <KEY> = ""; <mache nichts>; <mache weiter>
- Gültig: If @IsError (@dbLookup (...); <mache nichts>; <endgültiges dbLookup>
Das Ergebnis von dbLookup kann man natürlich auch anders (Überprüfung des Ergebnisses in einer temp. Variablen) prüfen.

Bernhard
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 17.08.05 - 18:32:07
Jetzt habe ich das mit dem @PostedCommand eingetragen. Immerhin kommt jetzt kein RBOD mehr, aber ich bekomme die Meldung, ob ich speichern möchte.

Aber eine Zeile oben drüber habe ich doch gespeichert! Ich verstehe es nicht.

OK, habe jetzt den Part mit FileSave auch noch als PostedCommand gemacht und jetzt klappts wie erwartet.  ;D

Das mit dem Schlüssel hab ich noch nicht getestet.
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: Ayhan am 17.08.05 - 19:10:51
Hallo TazDevil,

ich habe ergänzend zu Eknoris Vorschlag

Die zweite Spalte baust du dann so auf: Feld1+"~"+Feld2+"~"+ ...
Dann brauchst du, nachdem dir der @DBLookUp hoffentlich einen Wert zurückliefert nur noch mit @Word den String wieder aufzudröseln ( Trennzeichen ~ ) und in die Felder schreiben ...

folgende Idee, jedoch ohne @DBLookup.

1. Erstelle in deiner Ansicht eine versteckte (am besten letzte) Spalte; Die Formel für diese Spalte sollte so aussehen: feld1+"~~"+feld2+"~~"+feld3+"~~"+feld4+"~~"+feld5;
2. Merke dir die Spaltennummer.
3. Erstelle eine Aktion/Schaltfläche in deiner Maske (von wo aus du eben einen Eintrag auswählen möchtest) und paste folgenden Formel-Code in die Aktion/Schaltfläche ein:

REM {Deklaration der Felder};
_felder:= "feld1":"feld2":"feld3":"feld4":"feld5";

REM {Sonstige Deklarationen; Die 6 ist die Spaltennummer, in der deine zusammengesetzte Formel steht};
_view:= "Ansichtsname";
_rueckgabe:=@PickList([Custom] : [Single] ; "" : "" ; _view ; "Fenstertitel" ; "Bitte einen Wert auswählen:";6);


REM {Parsen des Rückgabewertes};
_werte:= @Explode(_rueckgabe;"~~");

REM {Setzen der Felder};
@For(i:=1;i <= @Elements(_felder);i:= i + 1;
@SetField(_felder;_werte)
);


Dabei werden gleich beim Auswählen eines Dokuments die Felder gesetzt. Ohne Lookups.

Nachteil: Es kann vorkommen, dass du veraltete Daten in den Feldern stehen hast (wenn z. B. sich ein Sourcedokument mal ändern sollte).

Um sicher zu gehen, dass du ohne Schlüssel einen Lookup machst,
@If(Schluesselfeld="";"";@DBLookup(...)) usw... Sehe dir dazu am besten die Domino-Designer-Hilfe an.

Ansonsten könnte ich dir bei deiner bisherigen Lösung empfehlen, nach dem Setzen der Felder den Befehl @Command( [RefreshWindow] ) auszuführen.

Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 21.08.05 - 19:53:55
Habe das mit dem Ausfüllen der restlichen Felder mit einem Button gemacht. Wenn ich mal mehr Erfahrung habe, werd ich das noch ändern.

Stehe jetzt aber schon wieder vor einem Problem!!  :P

Zitat
@If(Monitor != "";
      @If(@DbLookup("": "";"":""; "Help/Bildschirm";Monitor ; 4) = "";
            @Do(@SetField("link_monitor";@DbLookup("": "";"":""; "Help/Bildschirm";Monitor ; 2));
                  @SetDocField(link_monitor; "zugeordnet"; 1);
                  @SetDocField(link_monitor; "Computer"; Seriennummer);
                  @SetDocField(link_monitor; "link_pc"; @Text(@DocumentUniqueID))
            );
            @Do(@Prompt([Ok]; "Fehler"; "Dieser Monitor wurde bereits einem anderen PC zugeordnet!");
                  @Return("")
            )
      );
      ""
);

@SetField("Zu_Created_by"; @Name([CN]; @UserName));
@SetField("Zu_created"; @Now);
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow])

Ich überprüfe, ob der Monitor bereits einem PC zugeordnet wurde. Dabei ist es egal ob ich es so wie hier über das Feld "Seriennummer" oder über das Feld "zugeordnet" versuche, ich kann den Monitor immer an mehr als einen PC vergeben. Ich versuche es immer direkt hintereinander. Kann es sein, dass die View nicht schnell genug aktualisiert wird? Habe mir den Wert mal ausgeben lassen, und habe dabei festgestellt, dass wirklich nicht der aktuelle Wert zurückgegeben wird.

Was mache ich falsch?? Hoffentlich bekomme ich irgendwann mal noch alle meine Probleme in den Griff  :D
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: ascom40 am 21.08.05 - 20:59:10
Hallo TazDevil20  ???

Zitat
Wenn ich mal mehr Erfahrung habe, werd ich das noch ändern.
spätestens dann hast du keine Zeit mehr dafür  ;)

Zu deinem Problem: @DBLookup ohne die [NoCache]-Option liest immer die Werte aus der DB, die beim Öffnen der DB gültig waren. Spätere Änderungen "in der Ansicht" kannst du so nicht greifen. Füge den Parameter [NoCache] ein, dann wird der jeweils aktuelle, von dir evtl. vorher geänderte Wert aus der Ansicht geholt.

Jo <- das ist übrigens MEIN Name  ;D
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 21.08.05 - 21:22:20
Vielen Dank! Jetzt habe ich das Prob endlich gelöst

Michael <-- Das ist MEIN Name O0
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: Axel am 22.08.05 - 08:42:36
Vielen Dank! Jetzt habe ich das Prob endlich gelöst


Lässt du uns an deiner Lösung teilhaben?


Axel
Titel: Re: Durch Dialogliste andere Felder füllen
Beitrag von: TazDevil20 am 22.08.05 - 09:53:20
Na klar lass ich euch die Lösung wissen. In diesem speziellen Fall habe ich einfach nur das NoCache in jede @dblookup-Formel eingebaut.

Wenn ich meine Datenbank fertig habe, kann ich die gerne hier mal einstellen. Das ganze dauert aber noch ein wenig, da ich noch ein paar sachen auf meiner ToDo stehen hab.  ;D

Soll ja schließlich auch annähernd perfekt sein.  ;D