Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: bob am 16.03.03 - 21:19:35
-
Hi,
hab schon hier und im Internet gesucht, wie man Profildokumente löschen kann.
Eine Lösung war, dies mit NotesPeek zu machen. Aber damit kann ich nur lesend zugreifen.
Also wie kann man Profildoks löschen? Am liebsten wäre mir eine Lösung ohne Tools.
cya,
Bob
-
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Dim NDC As notesDocumentCollection
Set NDC = db.GetProfileDocCollection( "NAMEDERPROFILMASKE" )
Set doc = NDC.getfirstdocument
While Not (doc Is Nothing)
If doc.isprofile Then
call doc.remove(true)
End If
set doc=ndc.getnextdocument(doc)
Wend
-
@Rob,
... ich glaube, daß das so nicht funktionieren wird, da du auf ein gelöschtes Dokument als Referenz bei GetNextDocument(doc) zugreifst...
... anstelle dessen nimmst du ...
Set doc = dc.getFirstDocument
... also wieder das erste in der Collection
... oder bin ich auf dem falschen Dampfer?
ata
-
ach ja...klatsch..klar ;D
Hatte es doch selbst vor einiger Zeit...
der TRick war
set doc = DC.getfirstdocument
While Not (doc is nothing)
...
set docKopie = doc
...
if ... then
remove docKopie(true)
end if
...
set doc = DC.getnextdocument(doc)
wend
danke, ata ;)
-
... oder eben so...
ata ;)
-
Danke Euch beiden, jetzt gehts.
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Dim NDC As notesDocumentCollection
Set NDC = db.GetProfileDocCollection( "Profile_Formulare" )
Set doc = NDC.getfirstdocument
While Not (doc Is Nothing)
If doc.isprofile Then
Call doc.remove(True)
End If
Set doc = ndc.getFirstDocument
Wend
Allerdings bleibt da die Sanduhr stehen, aber wenn ich mit Strg+Untbr nach ein paar Sekunden abbreche, sind die Profiledoks gelöscht.
Kann es sein, dass da ne Endlosschleife eingebaut ist?
Bob
-
Jo, ist eine solche....
While Not (doc Is Nothing)
If doc.isprofile Then
Call doc.remove(True)
End If
Set doc = ndc.getFirstDocument
Wend
muss sein:
While Not (doc Is Nothing)
If doc.isprofile Then
Call doc.remove(True)
End If
Set doc = ndc.getNextDocument
Wend
-
óla, wir drehen uns im Kreis...man kann ein Doc aus einer Collection nicht löschen (und in dem Falle auch aus der DB) und erwarten, daß die collection das getnextdocument beherrscht...worauf auch getnextdocument..auf das gelöschte und vorher referenzierte Objekt doc? Na...entweder getfirst nehmen wieder oder eine Methode (s.o.) beschrieben, indem man mit einer Kopie des aktuellen Collection Objektes arbeitet.
-
Also wenn ich die Notes Designer Hilfe riichtig gelesen habe, lie´fert die methode GetNotesProfileDocuments doch eine NotesDocumentCollection zurück.
Und diese Notes DocumentCollection hat die methode RemoveAll(True) um Alle Docs dieser Collection auf einen Schlag zu löschen.
Also
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Dim NDC As notesDocumentCollection
Set NDC = db.GetProfileDocCollection( "Profile_Formulare" )
Call NDC.RemoveAll (true)
Das sollte es doch auch tun, gell ?? ;D
-
... ja warum eigentlich nicht ... :P
ata
-
Hi,
evtl. auch so????
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Dim NDC As notesDocumentCollection
Set NDC = db.GetProfileDocCollection( "Profile_Formulare" )
for i=1 to ndc.count
Set doc = NDC.getnthdocument(i)
if Not (doc Is Nothing) then
If doc.isprofile Then
Call doc.remove(True)
End If
end if
next
müsste auch tun.
-
Klar, viele Wege führen bekanntlich nach Rom. Aber wenn eine Klasse schon mal eine Methode zum Entfernen ALLER Dokumente des Objektes bietet, sollte man diese auch nutzen.
Da haben sich die Programmierer schon solche Mühe gegeben.... ;D
-
Hi,
vollkommen richtig!!
-
Laß uns doch mal eine Lösung für Notes 4.x finden.
da gab es nämlich die GetProfileDocCollection Methode noch nicht...
-
Hi,
mit 4.x kenne ich mich nicht so aus!!!
Aber mit Deiner Hilfe können wir das bestimmt bewältigen.
:D
-
da muss ich dann am WE mal nen 4er Client + Designer installieren ;D
upps, dummerchen In 4.x war der Designer doch schon drin !!
-
Danke Euch allen !
Hab jetzt allerdings die Lösung von Eknori genommen....
cu,
Bob
-
könnte so gehen..in r4
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.AllDocuments
For i = 1 To collection.Count
Set doc = collection.GetNthDocument( i )
If doc.IsProfile Then
msgbox "Möp, ich bin ein Profil, mähhhh"
End If
Next
End Sub
-
Das wird dann ab 100.000 docs und > richtig spaßig ;D
-
zum Einschlafen wärs aber guut :P