Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Barbara am 06.08.09 - 15:38:26
-
Hallo zusammen,
ich beziehe mich auf folgenden Thread: http://atnotes.de/index.php/topic,33592.0.html
Will Ihn nicht wieder hochholen, da es nun um das weiterführende Problem geht.
Also,
- View, dessen Gestaltung verwendet werden soll, als Objekt holen
- über NotesView.UniversalID und NotesDatabase.GetDocumentByUNID den View als Dokument-Objekt holen
- Dokument mit notesDocument.CopyToDatabase kopieren
- entsprechende Felder in dem Dokument ändern und speichern
funktioniert. Ordner ist da, kann angesprochen und gefüllt werden. Jetzt möchte ich ihn auch im Frontend geöffnet haben, dabei laufe ich an die Wand.
Habe mit uidatabase.close und ws.opendatabase rumprobiert, bekomme immer die Meldung:
Ungültiges oder nicht vorhandenes Dokument - und zwar immer dann, wenn ich den Ordner öffnen will.
Wie schließt und öffnet man eine Datenbank richtig? Oder anders gefragt, wie erkläre ich der Datenbank, dass sie den Ordner sehr wohl besitzt?
Gruß
Barbara
-
Wie versuchst Du denn, den Ordner zu öffnen ?
-
Hallo Ingo,
ich poste mal das ursprüngliche script.
If key<>"" Then
'Ordner leeren , wenn nicht da neu erstellen
viewname="Kalender_" & key
Set view=db.getView(viewname)
If Not view Is Nothing Then
Set vc = view.AllEntries
Call vc.RemoveAllFromFolder(view.Name)
Else
ID=template.UniversalID
Set viewdoc=db.GetDocumentByUNID(ID)
Set newdoc= viewdoc.CopyToDatabase(db)
Call newdoc.ReplaceItemValue("$Name",viewname)
Call newdoc.ReplaceItemValue("$Title",viewname)
Call newdoc.Save(True,True)
Set view=db.getView(viewname)
End If
'Ordner neu befüllen
Suche= { @contains(FirmaStandort;"} & key & {") & Ereignis != "3"}
Set col=db.Search(Suche,Nothing,0)
Call col.PutAllInFolder( view.name)
Call ws.OpenFrameSet("Root")
Call ws.settargetframe("RootMain")
Call dbui.OpenView(viewname)
Call ws.ViewRefresh
End If
später habe ich dann vor und nach dem Rahmen setzten versucht mit dbui.close etc. die Datenbank zu schließen und wieder zu öffnen - da bin ich dann gescheitert. Habe dann irgendwann den Überblick verloren.
Ich hoffe auf den berühmten Schubs von Euch :)
Gruß
Barbara
-
Weil mir das irgendwie bekannt vorkam, habe ich mal in der KB gesucht :
Folders created using back-end LotusScript methods do not appear in database (http://www-01.ibm.com/support/docview.wss?rs=899&context=SSKTWP&dc=DB510&dc=DB520&dc=D800&dc=D900&dc=DA900&dc=DA800&dc=DB530&dc=DA600&dc=D600&dc=D700&dc=DA500&dc=D200&dc=DA410&dc=DA450&dc=DA430&dc=DA440&dc=DB540&dc=DB400&dc=DA420&dc=DA460&dc=DB300&dc=DA470&dc=DA480&dc=DB100&dc=DA4A10&dc=DA4A20&dc=DA700&dc=DA4A30&dc=DB550&dc=D100&q1=folder&uid=swg21102343&loc=en_US&cs=UTF-8&lang=all)
Da scheinst Du mit leben zu müssen. Angeblich soll ein Reopen der Datenbank helfen.
-
genau, soweit war ich auch schon und hier liegt mein Problem:
wie geht das mit dem "Reopen"
hier meine Bemühungen, die in dem Fehler "Ansicht oder Navigator "Name" existiert nicht" enden:
ID=template.UniversalID
Set viewdoc=db.GetDocumentByUNID(ID)
Set newdoc= viewdoc.CopyToDatabase(db)
Call newdoc.ReplaceItemValue("$Name",viewname)
Call newdoc.ReplaceItemValue("$Title",viewname)
Call newdoc.Save(True,True)
Call dbui.Close
Set dbui=Nothing
Set db=Nothing
Set dbui=ws.CurrentDatabase
Set db=dbui.Database
Set view=db.getView(viewname)
Call ws.OpenDatabase(db.Server, db.FilePath)
Call ws.OpenFrameSet("Root")
Call ws.settargetframe("RootMain")
Call dbui.OpenView(viewname)
Im debugger sieht man alle Objekte, scheinbar alles ok.
Barbara
-
Schon mal so probiert :
...
Call dbui.Close
Call ws.OpenDatabase(db.Server, db.FilePath)
...
Die Zeile "Set dbui=ws.CurrentDatabase" dürfte Dir nämlich eigentlich nichts zurückliefern, wenn Du die Datenbank vorher schließst.
-
auf der Suche nach einem würgaround bin ich über database.enablefolder gestoßen. Bringt auch nichts. Mit deiner Anregung kommt bekannte Meldung, dass "Ansicht nicht existiert"
....
Call db.EnableFolder(viewname)
Call dbui.Close
Call ws.OpenDatabase(db.Server, db.FilePath)
End If
'Ordner neu befüllen
Suche= { @contains(FirmaStandort;"} & key & {") & Ereignis != "3"}
Set col=db.Search(Suche,Nothing,0)
Call col.PutAllInFolder( viewname)
Call ws.OpenFrameSet("Root")
Call ws.settargetframe("RootMain")
Call dbui.OpenView(viewname)
Call ws.ViewRefresh
-
Ich würde mal testweise den ganzen Kram mit Frameset und so weglassen. Also in etwa so :
If
...
Call db.EnableFolder(viewname)
End If
Suche= { @contains(FirmaStandort;"} & key & {") & Ereignis != "3"}
Set col=db.Search(Suche,Nothing,0)
Call col.PutAllInFolder( viewname)
Call dbui.Close
Call ws.OpenDatabase(db.Server, db.FilePath)
Set dbui = ws.CurrentDatabase
Call dbui.OpenView(viewname)
-
Hallo Ingo,
auch die spartanische Variante liefert den bekannten Fehler.
Ich gebe es auf und warte auf Notes 7 oder 8.
Ich mache es jetzt so, dass die User eine Klartextmeldung erhalten, wenn kein entsprechender Ordner vorhanden ist. Die müssen sich dann halt beim Admin melden, dass er einen Ordner mit der richtigen Namenskonvention erstellt. Eleganter wäre die Variante gewesen, in der sich die Datenbank eigenständig den verändereten Gegebenheiten angepasst hätte. Naja, so sichern wir unsere Arbeitsplätze ;)
Danke für Deine Mühe
Barbara
-
Das Problem an der Sache ist: Beim Öffnen der DB werden essentielle Bestandteile des Design einer DB in den Speicher geladen - Ordner zählen mit dazu (bei SPOFU-Folders wird allerdings anders vorgegangen). Um auf einen neuen Ordner zuzugreifen, muss daher die Datenbank erneut im Frontend geöffnet werden.
Und nun beisst sich die Katze in den Schwanz: Wenn man das "Re-Open" der DB aus der DB selbst vornehmen will, wird auch der ausführende Code mittendrin beendet.
Da nützt dann auch das Warten auf spätere Versionen nichts.
Bernhard
-
Hallo Bernhard,
da habe ich in meiner Sucherei letzte Woche wohl etwas durcheinandergeschmissen. Irgendwo, finde jetzt leider die Quelle nicht mehr, habe ich gelesen, dass das ein Bug in 6 wäre.
Deine Erklärung ist logisch, die momentane Lösung unbefriedigend. Jetzt läuft es erstmal, ich muss das Konzept als solches nochmal gründlich unter die Lupe nehmen (ohne Fehlermeldung im Kreuz).
Gruß
Barbara