Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Jérôme am 14.08.02 - 15:28:30
-
Hallihallo!
Ich habe folgendes Problem:
Ich brauche einen DB-Auswahldialog, genauso wie wenn ich eine Datenbank mit STRG + O öffnen will, nur dass dann nicht die ausgewählte DB geöffnet, sondern ein DB-Objekt zurückgeliefert wird, aus dem ich dann Replik-ID, Server etc. rausziehen kann.
Ich habe das schon in einer Anwendung gesehen, dass das mit genau diesem Dialog geht, und ich möchte das auch unbedingt mit diesem durchführen.
Zum Befehl @PostedCommand([FileOpenDatabase]) bin ich schon gekommen, der liefert aber nichts zurück, sondern öffnet nur die Datenbank.
ich wäre froh, wenn das jemand wüsste, ich suche da nämlich schon den ganzen Tag danach :)
-
Hi,
versuch's mal damit:
file := @Prompt([LOCALBROWSE]; "Wählen Sie eine zu öffnende Datenbank"; "1");
Ist allerdings wahrscheinlich nicht ganz was du suchst.
Vielleicht hilft es dir ja doch weiter.
Axel
-
Auf diesen Weg bin ich vor ein paar Minuten auch gekommen ;) aber leider kann ich damit nichts anfangen. So komme ich auf Betriebssystemebene an die Datenbank ran, aber nicht unter Notes.
Es könnte ja erstens sein, dass der Benutzer gar keinen Zugriff auf das (Netz-) Laufwerk hat, auf dem die Datenbank liegt...
Aber trotzdem danke für den Vorschlag - vielleicht hat ja noch jemand eine Idee...
-
Nach intensiver Suche in den LDD-Foren bin ich auf folgende undokumentierte (was auch sonst) Lösungen gestoßen (ich kopier's der Einfachheit halber mal nur rein):
In formula language:
@Prompt( [ChooseDatabase];"";"";"";"");
result:
(0) - server name
(1) - file name (path)
(2) - Database title
In LotusScript:
Prompt method
Note This method is new with Release 5.
Defined in
NotesUIWorkspace
Syntax
variant = notesUIWorkspace.Prompt( type%, title$, prompt$ [, default ] [, values ] )
but as type use 13.
Both are not documented so use it with caution...
-
Hi Jerome,
warum baust Du Dir nicht einfach einen Array mit allen Datenbanken (schau mal nach 'dbdirectory' im Script) auf, welchen Du dann Dir anzeigen lässt. Die Auswahl kannst Du Dir dann in einen String übergeben lassen, auf welchen Du dann wiederum einen 'Database.Open' bzw. 'set NotesDatabase = new NotesDatabase('Server', 'dbfilename').
Meff ;)
-
@Jerome:
Wie bekomme ich denn den Wert für die gewählte Datenbanken zurück - in LotusScript.
Der Variant ist bei mir immer leer ???
Gruß
Andreas
-
Hi Andreas,
kannst Du Deinen Script mal hier posten, damit man sehen kann was Du gemacht hast...
Meff ;)
-
(...)warum baust Du Dir nicht einfach einen Array mit allen Datenbanken (...) auf (...)
Hi Meff!
Klar, das wäre auch gegangen, aber über den "Datenbank öffnen"-dialog ist es doch viel komfortabler und es sieht auch besser aus. ;)
@Andreas: Ich hab es auch grad mal mit LotusScript ausprobiert und bekomme auch nur den leeren String - mit Formelsprache geht's aber...
Ich schreibe meinen Code mal hierher:
Dim ws As New NotesUIWorkspace
Dim var As Variant
Dim i As Integer
var = ws.Prompt( 13, "", "", "", "" )
For i = 0 To Ubound(var)
Msgbox var(i)
Next
-
Dim uiWs As New NotesUIWorkspace
Dim frage As Variant, start As Variant
Dim posCounter As Integer, negCounter As Integer, errCounter As Integer, counter As Integer
Dim fragenAuswahl(2) As String, dbListe() as string
start = Messagebox("Diese Aktion kan mehrere Minuten dauern. Während dieser Zeit können Sie nicht Ihren Client nutzen. Möchten Sie wirklich fortfahren ?", 4 + 32, "Hinweis")
If start = 7 Then Exit Sub
'Zuweisung der Variablen
Set session = New NotesSession
Set curDb = session.CurrentDatabase
Set dbDir = New NotesDbDirectory(curDb.Server)
'Jetzt wollen wir doch mal schauen, was wir scannen sollen.
fragenAuswahl(0) = "Datenbanken"
fragenAuswahl(1) = "Templates"
fragenAuswahl(2) = "beides"
frage = uiWs.Prompt(PROMPT_OKCANCELLIST, "Bitte wählen", "Bitte wählen Sie aus der Liste, ob Sie Datenbanken oder Templates durchsuchen möchten.", " ", fragenAuswahl())
If frage = "Datenbanken" Then
Set checkDb = dbDir.GetFirstDatabase(DATABASE)
Elseif frage = "Templates" Then
Set checkDb = dbDir.GetFirstDatabase(TEMPLATE)
Elseif frage = "beides" Then
Set checkDb = dbDir.GetFirstDatabase(TEMPLATE_CANDIDATE)
End If
While Not checkDb Is Nothing
If Not checkDb.IsOpen = True Then
Call checkDb.Open(curDb.Server, checkDb.FilePath)
End If
if counter = 0 then
redim dbListe(counter) as string
dbListe(counter) = checkDb.Titel + "~" + checkDb.Filepath
else
redim preserve dbListe(counter) as string
dbListe(counter) = checkDb.Titel + "~" + checkDb.Filepath
end if
Set checkDb = dbDir.GetNextDatabase 'Nächste Datenbank im Directory
counter = counter + 1
Wend
So kannst Du Dir den Array aufbauen, welche Du später in einer Liste anzeigen lässt um Dir eine davon auszuwählen. Den Wert, welche Du hier zurückbekommst kannst Du dann verwenden um Dir die Datenbank mittels NotesDatabase.Open(Servername$, DB Filepath$) zu holen und alle Properties auszulesen.
Meff ;)
-
@Jerome:
Ich habe noch mal bei LDD nachgesehen: Also die Script Methode liefert nur den Servernamen zurück. Da ich das erstmal mit einer lokalen DB ausprobiert hatte, kam "" zurück.
Mit Deiner Formel bekomme ich "Type mismatch" ???
Wie kann man das mit der @Formelsprache machen ???
Gruß
Andreas
-
Ich hab das in einer Maske eingesetzt. In der Maske ist ein Feld "DatabaseInfo", daneben habe ich einen Button gesetzt, in dessen Click-Ereignis ich folgende Zeile eingetragen habe:
FIELD DatabaseInfo := @Prompt( [ChooseDatabase];"";"";"";""); @All;
Das müsste eigentlich funktionieren (habe das grad aus dem Kopf geschrieben, ohne es zu testen)
-
Alles klar, funktioniert :)
Das kann man immer mal brauchen !
Danke
Andreas
-
wir datten da schon mal was zum thema:
http://www.atnotes.de/cgi-bin/yabb/YaBB.pl?board=002-2;action=display;num=1021981987;start=4
eknori