Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: aba am 10.01.03 - 14:46:22
-
Ich möchte beim verlassen eines Feldes einen Datensatz aus einer anderen Datenbank lesen.
Jetzt weiß ich leider nicht mit welchem Event das funktioniert!!
Kann mir da jemand helfen???
-
Der Event heist "Exiting".
Meff ;)
-
Ok danke! Das hab ich gefunden.
Ich hatte vorher einen Button mit folgendem Befehl.
@SetField( "name"; @DbLookup("" : "NoCache" ; "" : "INOMETA-01!!SIM2 crm 2.0 Adressen.nsf" ; "(kuerzel)" ; kürzel ; 2 ));
@SetField( "unit"; @DbLookup("" : "NoCache" ; "" : "INOMETA-01!!SIM2 crm 2.0 Adressen.nsf" ; "(kuerzel)" ; kürzel ; 3 ))
wie baue ich das in diesen Event ein????
-
Hi aba,
leider kannst Du in diesem Event nur mit Script arbeiten.
Meff ;)
-
Ja das denke ich mir aber da kann mir nicht zufäälig Meff oder jemand helfen. Da ich mit Script leider noch nicht bewandert bin!!
-
Fangen wir doch einmal von hinten an. Was willst Du eigentlich machen ? Wenn ich die Formel richtig interpretiere, dann schreibst Du in zwei Felder (name und unit) zwei Werte aus einem View. Kann man das nicht schon früher machen ?
Meff ;)
-
Also ich habe einen Urlaubsantrag. Die User tragen in diesem Feld ein Kürzel ein. Dieses Kürzel ist in einer Datenbank"SIM2 crm 2.0 Adressen.nsf" hinterlegt sowie auch die beiden Aussagen Unit + Name, die dann ausgelesen werden sollen. Augenblicklich funktioniert das onclick auf einem Button. Aber die User wollen nicht immer auf diesen Button klicken!! Deshalb wenn man diese Feld verlässt sollen diese Daten gelesen werden!!!
-
Das Problem mit dem Event "Exiting" ist meiner Meinung nach, dass der Anwender halt wirklich das Feld verlassen muss, d.h. der Focus muss verlagert werden. Oft gibt ein Anwender was in ein Feld ein und wartet dann, dass irgendetwas passiert und hier liegt dann der Hase begraben.
Meff
-
Das stimmt allerdings muß er das Feld verlassen, da er noch Daten wie z.B. von wann bis wann er Urlaub beantragen möchte, eintragen muß. Die User bekommen allerdings auch eine Arbeitsanweisung dazu und wer lesen kann ist klar im Vorteil(sagt mien Chef immer)
-
Hi aba,
hier ein Beispiel für den Event :
Dim session As New NotesSession
Dim uiWs As New NotesUIWorkspace
Dim uiDoc As NotesUIDocument
Dim curDb As NotesDatabase, searchDb As NotesDatabase
Dim searchView As NotesView
Dim searchDoc As NotesDocument
Dim i As Integer
Dim inText As String
Set curDb = session.CurrentDatabase
Set searchDb = New NotesDatabase(curDb.Server, "names.nsf") <-- Hier einfach den DB Namen einsetzten
Set searchView = searchDb.GetView("$VIMPeople") <-- Hier kommt der Name des Views rein
Set uiDoc = uiWs.CurrentDocument
inText = uiDoc.FieldGetText("Test") <-- Name des Feldes mit dem Suchwert
Set searchDoc = searchView.GetDocumentByKey(inText)
Call uiDoc.FieldSetText("Test1", searchDoc.MailFile(0)) <-- Erster Wert ist das Feld, in welches geschrieben werden soll, zweiter Wert ist der zu schreibene Wert. Das musst Du einfach zweimal machen
Meff ;)
-
Hallo Meff,
vorab schon mal vielen Dank für die Mühe!
Aber leider habe ich noch zwei Fragen.
1.Welches ist die View ( bezogen auf die Formel die ich oben aufgeführt habe?
2.Set searchDoc = searchView.GetDocumentByKey(inText)
Muß in Klammern "inText" durch etwas ersetzt werden??
3.Call uiDoc.FieldSetText( "name", searchDoc.MailFile("" : "NoCache" ; "" : "INOMETA-01!!SIM2 crm 2.0 Adressen.nsf" ; "(kuerzel)" ; kürzel ; 2 ))
so??
-
Nö, nö,
1. Der Viewname ist (wenn ich Deine Formel richtig verstanden habe) "(kuerzel)".
2. "inText" ist nichts anderes als das Keyword, welches aus dem Feld gelesen wird, in welches der Anwender sein Namenskürzel eingibt.
3. Call uiDoc.FieldSetText("name", searchDoc.das Feld, welches in der 2. Spalte der Ansicht (kuerzel) steht. Die (0) wird benötigt, damit der erste Wert des Feldes genommen wird.
Meff ;)
-
Super die Formel sieht schon mal gut aus ( ohne Fehler )
Allerdings wenn ich jetzt teste und aus dem rausgehen, kommt folgende Fehlermeldung "Object variable not set"
Watn dat?????
-
Hallo Meff,
ich glaub ich hab noch etwas wichtiges verschwiegen.
Die Feldnamen(2. Spalte der Ansicht (kuerzel) befindet sich wiedrum in einer dritten Datenbank. Die muß ich dann doch bestimmt auch noch bekannt geben, oder???
-
Wann kommt die Fehlermeldung ?
Mache doch mal folgendes : Über File - Tools kannst Du den Script Debuger einschalten. Dann gehst Du in das Feld, trägst einen Wert ein und verlässt das Feld. Sobald Du das Feld verlässt, springt der Debuger an. Schleife dann einfach durch die einzelnen Befehle und schaue, wo der Fehler generiert wird.
Meff
-
@Meff
Das ist die Zeile die angemeckert wird.
Set searchDoc = searchView.GetDocumentByKey(inText)
-
Du machst doch in Deiner Formel einen @Dblookup auf den View, d.h. in der ersten indizierten Spalte steht der Suchwert, ergo kann hier nicht der Fehler liegen.
Suchst Du auch in der richtigen Datenbank ? Die Variable "SearchDb" steht für die Datenbank "Adressen.nsf". Ansonsten findet der Lookup einfach das Zieldokument nicht. Du solltest eh ne Fehlerroutine einbauen, falls der Anwender was falsches eingeben hat.
Das ganze sieht dann so aus :
On Error Goto ScriptError
Dim session As New NotesSession
Dim uiWs As New NotesUIWorkspace
Dim uiDoc As NotesUIDocument
Dim curDb As NotesDatabase, searchDb As NotesDatabase
Dim searchView As NotesView
Dim searchDoc As NotesDocument
Dim i As Integer
Dim inText As String
Set curDb = session.CurrentDatabase
Set searchDb = New NotesDatabase(curDb.Server, "names.nsf") <-- Hier einfach den DB Namen einsetzten
Set searchView = searchDb.GetView("$VIMPeople") <-- Hier kommt der Name des Views rein
Set uiDoc = uiWs.CurrentDocument
inText = uiDoc.FieldGetText("Test") <-- Name des Feldes mit dem Suchwert
Set searchDoc = searchView.GetDocumentByKey(inText)
Call uiDoc.FieldSetText("Test1", searchDoc.MailFile(0)) <-- Erster Wert ist das Feld, in welches geschrieben werden soll, zweiter Wert ist der zu schreibene Wert. Das musst Du einfach zweimal machen
Exit Sub
ScriptError:
Messagebox"Bitte wiederholen Sie Ihre Eingabe. Bei der Verarbeitung ist ein Fehler aufgetreten.", 0+64, "Fehler"
call uiDoc.GotoField("Feldname")
Meff ;)
-
Die SearchDB heißt bei mir nicht "Adressen.nsf" wie kann ich das änder??
Einfach antsatt SearchDB etwas schreiben oder dahinter den richtigen Namen der Datenbank??
-
Meine Formel sieht jetzt so aus!!
Sub Exiting(Source As Field)
On Error Goto ScriptError
Dim session As New NotesSession
Dim uiWs As New NotesUIWorkspace
Dim uiDoc As NotesUIDocument
Dim curDb As NotesDatabase, searchDb As NotesDatabase
Dim searchView As NotesView
Dim searchDoc As NotesDocument
Dim i As Integer
Dim inText As String
Set curDb = session.CurrentDatabase
Set searchDb = New NotesDatabase(curDb.Server, "inometav.nsf")
Set searchDb = New NotesDatabase(curDb.Server, "SIM2 crm 2.0 Adressen.nsf")
Set searchView = searchDb.GetView("kuerzel")
Set uiDoc = uiWs.CurrentDocument
inText = uiDoc.FieldGetText("kürzel")
Set searchDoc = searchView.GetDocumentByKey(inText)
Call uiDoc.FieldSetText("name", searchDoc.Kürzel(0))
Call uiDoc.FieldSetText("unit", searchDoc.Kürzel(0))
End Sub
-
Set searchDb = New NotesDatabase(curDb.Server, "inometav.nsf")
Set searchDb = New NotesDatabase(curDb.Server, "SIM2 crm 2.0 Adressen.nsf")
Wie heist den die Datenbank jetzt ? Zuerst belegst Du die Variable "searchDb" mit der Datenbank "inometav.nsf" und anschliessend mit der "SIM2 crm 2.0 Adressen.nsf". Der Syntax ist ganz einfach "Set 'VariablenName' (=in unserem Fall searchDb) = New NotesDatabase('Datenbankserver', 'Datenbankfilename'). SearchDb ist die Datenbank, in welcher Du Suchen willst, also nicht die aktuelle Datenbank in welcher Du arbeitest !!
Call uiDoc.FieldSetText("name", searchDoc.Kürzel(0))
Call uiDoc.FieldSetText("unit", searchDoc.Kürzel(0))
Du setzt also sowohl in das Feld 'name' als auch in 'unit' des geöffeten Dokumentes den Wert im Feld 'Kürzel' des Dokumentes aus der Suchdatenbank. Wenn ich mir Deine Formel anschaue, dann verwendest Du aber zwei unterschiedliche Spaltenwerte und in denen dürfte ja eigentlich auch nichts anderes stehen, als zwei verschiedene Feldwerte.
Meff ;)
P.S.: Vielleicht schickst Du mir einfach mal eine Kopie der beiden Datenbanken, ich schaue mir das mal an und baue Dir den Script ein.
-
Alles klar Mail schon unterwegs.
Ich poste nachträglich selbstverständlich hier die Lösung!!!
Schönes Wochenende
-
War doch ziemlich langwierig, aber zwischenzeitlich wurde das Problem gelöst, daher der Daumen hoch.