Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Barbara am 06.08.09 - 15:38:26

Titel: Aus Vorlage erstellten Ordner öffnen
Beitrag 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
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Driri am 07.08.09 - 08:08:50
Wie versuchst Du denn, den Ordner zu öffnen ?
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Barbara am 07.08.09 - 08:56:01
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
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Driri am 07.08.09 - 09:40:38
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.

Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Barbara am 07.08.09 - 09:45:23
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
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Driri am 07.08.09 - 10:02:24
Schon mal so probiert :

Zitat
...
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.
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Barbara am 07.08.09 - 10:12:56
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"

Zitat
....
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
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Driri am 07.08.09 - 13:53:55
Ich würde mal testweise den ganzen Kram mit Frameset und so weglassen. Also in etwa so :

Zitat
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)
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Barbara am 10.08.09 - 16:04:32
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
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: koehlerbv am 10.08.09 - 16:11:12
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
Titel: Re: Aus Vorlage erstellten Ordner öffnen
Beitrag von: Barbara am 11.08.09 - 10:27:29
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