Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Maverick am 24.02.05 - 08:18:52
-
Hallo zusammen,
ich würde mal gerne Eure Meinung hören, wie ich in folgender Sache weiterkommen könnte.
Es geht darum, dass ich in aus einer Maske heraus per Schaltfläche eine weitere Maske mittels @Dialogbox öffne. In dieser wird ein dynamisches Feld als Optionsschaltfläche berechnet, der Anwender wählt einen Eintrag aus und startet mittels Schaltfläche ein Script, welches daraufhin eine Suche veranstaltet.
Am Ende der Suche werden die Ergebnisse in einen Ordner gepackt. Um diesen sofort anzeigen zu lassen, bediene ich mich UIws.OpenDatabase, was auch den gewünschten Erfolg bringt.
Was nicht klappt ist, dass ich mit uidoc.Close die Dialogbox schliessen kann. Im Hintergrund poppt der Ordner auf, die Box bleibt im Vordergrund.
Hmmmm?
Dank Euch
Paul
-
Hi,
das sollte eigentlich funktionieren.
Kannst du mal das entsprechende Stück Code posten?
Axel
-
Code wäre sicherlich nicht schlecht. Meine Befürchtung: Der Focus (des aktiven Fensters) steht zur Ausführung des entsprechenden Codes an einer ganz dummen Stelle. Genau da dürfte das Problem liegen: Welche Instanz will welches Fenster schliessen ? Ggf. könnten LS und die Notes-Klassen da sogar an ihre Grenzen stossen.
Bernhard
-
Moin,
das Stück Code sieht im Grund genommen so aus. Ich habe mal alles dringelassen.
Geschlossen wird das uidoc. Wenn ich am Anfang des Codes, ein Feld daraus lesen kann, bleibt IMHO innerhalb des Scripts das uidoc doch das uidoc.
Was haltet ihr von @Command([FileClosewindow])?
Nicht, dass ich zu faul bin es selbst zu probieren, komme halt vor dem Wochenende nicht dazu.
Habt Dank :-)
Paul
Sub Click(Source As Button)
On Error Goto ErrorHandler
Dim session As New NotesSession
Dim db As NotesDatabase
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim ProduktColl As NotesDocumentCollection
Dim TempColl As NotesDocumentCollection
Dim KundenColl As NotesDocumentCollection
Dim DokumentenDoc As NotesDocument
Dim ProduktDoc As NotesDocument
Dim SearchDoc As NotesDocument
Set session = New NotesSession
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
'Deklariere und hole Daten aus Such-Dokument
Set searchdoc = uidoc.Document
Set SearchDoks = searchdoc.GetFirstItem( "DokSearch" )
If (searchdoc.DokSearch(0) = "") Then
Failure=Messagebox("Daten sind nicht vollständig !" &Chr(10) ,0+32,"Hinweis")
Exit Sub
End If
success=Messagebox("Die Suche kann mehrere Minuten dauern !" &Chr(10)& "Sind Sie sicher ?",4+32,"Hinweis")
If success =6 Then
'lösche ein altes Suchergebniss
Print "altes Suchergebniss wird gelöscht ..."
Set TempColl = db.Search("Form=""Kunde""",Nothing,0)
If TempColl.Count <> 0 Then Call TempColl.RemoveAllFromFolder( "Export" )
'SuchParameter als Text
SearchDoktemp$=SearchDoks.Text
'Print "Suche Dokumente"
searchFormula$ = "Form=""Produkt"" & @IsMember(@explode(""" & SearchDoktemp$ & """ ; "";"");Produkt)"
Set ProduktColl = db.Search(searchFormula$, Nothing, 0 )
If ProduktColl.count = 0 Then
Success= Messagebox ("Es wurden keine Dokumente gefunden",0+16,"Hinweis")
Exit Sub
Else
Success= Messagebox("Es wurden " & ProduktColl.Count & " Produkte gefunden" &Chr(10)& "",0+64,"Hinweis")
End If
'Vorbereiten der ErgebnisCollection damit sie vor dem Hinzufügen des ersten Kunden instanziert ist.
searchFormula$ = "Form=""dummy"""
Set KundenColl = db.Search(searchFormula$, Nothing, 0 )
'Renne durch alle Produktdokumente
Set ProduktDoc = ProduktColl.GetFirstDocument
'Solange es welche gibt
While Not (ProduktDoc Is Nothing)
'Und da eine HKT drin ist
If ProduktDoc.HKT(0)<>"" Then
'Hol mal die Kundennummer
Set HKT = ProduktDoc.GetFirstItem( "HKT" )
'und mach daraus nen string
hktTemp$ = HKT.Text
'baue einen Suchstring aus Kunde und HKT
searchFormula$ = "Form=""Kunde"" & HKT = """ & hktTemp$ & """"
'Suche alle Kunden mit dieser HKT. Es sollte nur einer sein.
Set TempColl = db.Search(searchFormula$, Nothing, 0 )
'Hole das erste Kundendokument. Falls es zwei sind, wird der kunde trotzdem nur einmal gelistet
Print "Hole Kundendokument dazu."
Set KundenDoc = TempColl.GetFirstDocument
'Stecke den Kunde in die KundenColl
Call KundenColl.AddDocument(KundenDoc)
Print "Kunde in Ergebniscollection"
End If
Print "Hole das nächste Produktdokument."
Set ProduktDoc = ProduktColl.GetNextDocument(ProduktDoc)
Wend
'Stecke die Kunden in den Ordner
Print "Stecke die Kunden in den Ordner."
Call KundenColl.PutAllInFolder("Export")
End If
'Schliesse das uidoc
Call uidoc.Close
'Öffne den Ordner Export
server$=db.Server
pfad$=db.FilePath
Call workspace.OpenDatabase(server$, pfad$, "Export", "", False, False)
Success = Messagebox("Sie sehen alle Kunden zum Softwareprodukt: " & SearchDoktemp$,0+16,"Ablaufmeldung")
ExitScript:
Exit Sub
ErrorHandler:
Msgbox "Error: " & Err & " - " & Error$ & Chr(10) & Chr(10)_
& "Line: " & Erl & Chr(10)_
,48,"An error occured"
Resume ExitScript
End Sub
-
Hi,
auf den ersten Blick sehe ich nicht auffälliges.
Wo willst du denn @Command([FileClosewindow]) einsetzen?. In Script (über Evaluate) geht das nicht.
Axel
-
Siehste,
so gehts mir auch. Ich probier jetzt die Sache mal ganz klein in ner neuen DB.
Hab gestern mit Daniel Nashed gesprochen, der mich auf die Sache mit dem @Command gebracht hat. Seine andere Lösung ist, das Fenster mittels Windowsmitteln (handle auf das window ermitteln, um dem dann die Füsse wegzuziehen) Mal sehen.
Ich melde mich, sobald ich näheres weiss.
Paul
-
Ich brauch euch nicht zu erzählen, dass dieser code funzt.
Raaaahh
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set session = New NotesSession
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Call uidoc.Close
End Sub
-
Hi,
hatte ich auch nicht anders erwartet. Es steht ja auch kein Code zwischendrin, der unter Umständen den Fokus verschieben könnte.
Bernhard hat ja sowas schon angedeutet.
Ich würde jetzt häppchenweise dein Code einfügen und immer wieder testen.
Axel