Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Nexus am 13.12.04 - 09:24:43

Titel: markiertes Dokument ansprechen
Beitrag von: Nexus am 13.12.04 - 09:24:43
Servus,

habe ich das richtig in der Designer Hilfe verstanden, mit dem "UnprocessedDocuments" Befehl, kann kann ich die markierten Dokumente herausfinden ?

Ich möchte nämlich auf markierte Documente zugreifen, und diese dann in eine andere Datenbank kopieren.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 13.12.04 - 09:36:01
Ich poste euch mal den Code. Da hier irgendwie die Documente nicht gefunden werden in der Datenbank und auch in der anderen. Es werden viele Variablen deklariert, die nicht verwendet werden. Das kommt davon, dass ich auf einen vorher geschriebenen Script von mir aufbaue und am Ende, wenn alles funzt, die Variablen Leichen herausnehmen.

Der Code soll alle markierten Documente herausfinden und ein Document ( markiert ) nach dem anderen abarbeiten. Das markierte Document hat einen Feldnamen "listname" in welchen der Name des Documentes steht ( Gruppenname). Dieses Document existiert in 2 Datenbanken. Aufgabe ist, das Dokument in beide Datenbanken kopieren und das alte vorhanden Dokument in den 2 anderen Datenbanken löschen. Damit nur das aktuelle vorhanden ist. Als es ist ein Verteiler.

Nochmal. Das Dokument in der THIS Datenbank ist ein kopie aus den 2 anderen Datenbanken.Jetzt soll das Dokument in die 2 Datenbanken wieder zurückkopiert werden. In dem Dokument in der THIS Datenbank wurde nur kleine Inhaltsänderungen vorgenommen. Deshalb sollen die alten Dokumente gelöscht werden. So dass alle 2 Datenbanken am Ende immer auf dem aktuellen Stand sind.

Hier der Code. Problem ist, dass es mir so vorkommt, dass dieser Script die markierten Dokumente nicht findet und somit auch die alten Dokumente anhand des Namens nicht in den 2 anderen Datenbanken finden kann.



Sub Initialize
   Dim session As New NotesSession
   Dim db1 As NotesDatabase
   Dim db2  As NotesDatabase
   Dim thisdb As NotesDatabase
   Dim searchview1 As NotesView
   Dim searchview2 As NotesView
   Dim searchview3 As notesview
   Dim vc As NotesViewEntryCollection
   Dim entry As NotesViewEntry
   Dim docDB1 As NotesDocument
   Dim docdb2 As NotesDocument
   Dim docEingabe As NotesDocument
   Dim Copydoc As NotesDocument
   Dim  DB1GroupName As Variant
   Dim db1GroupNameE As String
   Dim FirstDocCheckDB1 As Boolean
   Dim Db1EntryCount As Integer
   Dim DB1EntryCounter As Integer
   Dim db1VS As Variant
   Dim db2vs As Variant
   Dim Nam As NotesName
   Dim StringConv As String
   Dim StringConvE As String
   Dim intStrLaenge As Integer
   Dim intStrLaengeF As Integer
   Dim strSearchMemory As String
   Dim SearchMemoryA As Variant
   Dim Nullstatus As Integer
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim collection As NotesDocumentCollection
   Dim item As NotesItem
   
   Set uidoc = workspace.CurrentDocument
   Set thisdb = session.CurrentDatabase
   Set searchview3=thisdb.GetView("vergleichsAusgabe")
   Set db1 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB1.nsf" )
   Set db2 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB2.nsf" )
   Set searchview1=db1.GetView("Groups")
   Set searchview2 =db2.GetView("Groups")
   
   Set collection = thisdb.UnprocessedDocuments
   Set copydoc = collection.GetFirstDocument()
   
   
   While Not(copydoc Is Nothing)
      db1Groupname = copydoc.GetItemValue("Listname")
      StringConv = db1Groupname(0)
      Set nam = New NotesName( StringConv  )
      
      
      db1GroupNameE = msg & nam.Abbreviated & Chr(13)
      intStrLaenge = Len(db1GroupNameE)
      intStrLaengeF=intStrLaenge - 1
      StringConvE=Left$(db1GroupNameE, intStrLaengeF)
      Set item = copydoc.GetFirstItem( "Listname" )
      Set docdb1= searchview1.GetDocumentByKey(StringConvE)
      Set docdb2= Searchview2.GetDocumentByKey(StringConvE)
      If item.Contains( docdb1.listname ) Then
         Call docdb1.remove(False)
         Call docdb2.Remove(False)
         
         'Call copydoc.Save( False, True )
      End If
      Set copydoc = collection.GetNextDocument(copydoc)
      
   Wend
   
   
End Sub

Titel: Re: markiertes Dokument ansprechen
Beitrag von: animate am 13.12.04 - 09:39:33
Je nachdem, welches Ziel der Agent hat (alle Dokumente, neue Dokumente, etc.) ist das Ergebnis von UnprocessedDocuments verschieden.

Genaueres dazu sagt dir die Bescreibung der Eigenschaft in der Designer Hilfe
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 13.12.04 - 09:53:55
Das blick ich ja leider nicht :(
Titel: Re: markiertes Dokument ansprechen
Beitrag von: animate am 13.12.04 - 10:03:11
ich hab die Hilfe nicht hier.
poste doch mal den Teil, den du nicht verstehst und erkläre, was du nicht verstehst
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 13.12.04 - 10:08:41
Ich blick das nicht, wie das meinem mit dem Auswählen und ansprechen.


Beispiel
Read-only. The documents in a database that the current agent or view action considers to be "unprocessed." The type of agent determines which documents are considered unprocessed.
Hinweis  This property is not implemented in COM.
Defined in
NotesDatabase
Data type
NotesDocumentCollection
Syntax
To get: Set notesDocumentCollection  = notesDatabase.UnprocessedDocuments
Usage
This method is valid only for agent or view action scripts and may be invoked only on NotesDatabase objects obtained from the CurrentDatabase property in NotesSession. In scripts that are not a part of an agent or view action, this method returns a NotesDocumentCollection with zero documents. When invoked on a NotesDatabase object that was not obtained from the CurrentDatabase property, this method raises an error.
The database must be open to use this property.
What documents are returned?
The following table describes the documents that are returned by the UnprocessedDocuments property. Document selection occurs once, before the agent runs.
Agent runs on   UnprocessedDocuments returns documents that meet all of these requirements
All documents in database   Meet the search criteria specified in Agent Properties box
All new & modified documents   Not been processed by this agent with UpdateProcessedDoc
   Created or modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
All unread documents in  view   Are unread and in the view
   Meet the search criteria specified in Agent Properties box
All documents in view   Are in the view
   Meet the search criteria specified in Agent Properties box
All selected documents
or
View action   Are selected in the view
   Meet the search criteria specified in Agent Properties box
None   Is the current document only
Newly received mail documents   Mailed to the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Newly modified documents   Modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
Pasted documents   Pasted into the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Using UpdateProcessedDoc
For agents that run on new and modified documents, newly received mail documents, pasted documents, or newly modified documents, you must use the UpdateProcessedDoc method in NotesSession to mark each document as "processed," which ensures that a document gets processed by the agent only once (unless it's modified, mailed, or pasted again). If you do not call this method for each document, the agent processes the same documents the next time it runs.
UpdateProcessedDoc marks a document as processed only for the particular agent from which it is called. Using UpdateProcessedDoc in one agent has no effect on the documents that another agent processes.
In all other agents and view actions, UpdateProcessedDoc has no effect.
View actions
When used in a view action, UnprocessedDocuments returns the same documents as an agent that runs on selected documents.
Language cross-reference
UnprocessedDocuments property in Java AgentContext class
@All function in formula language
Beispiel
Siehe auch
Collecting all documents and unprocessed documents

Titel: Re: markiertes Dokument ansprechen
Beitrag von: Axel am 13.12.04 - 10:10:44
Hi,

was hast du denn bei "Für welche Dokumente soll er gelten" eingestellt?


Axel

Titel: Re: markiertes Dokument ansprechen
Beitrag von: animate am 13.12.04 - 10:14:43
das hier ist die im Moment entscheidende Stelle für dich:

Agent runs on   UnprocessedDocuments returns documents that meet all of these requirements
All documents in database   Meet the search criteria specified in Agent Properties box
All new & modified documents   Not been processed by this agent with UpdateProcessedDoc
   Created or modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
All unread documents in  view   Are unread and in the view
   Meet the search criteria specified in Agent Properties box
All documents in view   Are in the view
   Meet the search criteria specified in Agent Properties box
All selected documents
or
View action   Are selected in the view
   Meet the search criteria specified in Agent Properties box
None   Is the current document only
Newly received mail documents   Mailed to the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Newly modified documents   Modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
Pasted documents   Pasted into the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 13.12.04 - 10:32:22
ich habe eingestellt, alle marierten Dokumente. Deshalb versteh ich das nicht. er spricht auch ein Dokument an, aber das ist nicht ausgewählt. Das ist ja gerade das schlimme daran.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: umi am 13.12.04 - 11:01:51
Hi Nexus
Du könntest auch das Property Documents der NotesUIView klasse verwenden.

gruss umi
Titel: Re: markiertes Dokument ansprechen
Beitrag von: TMC am 13.12.04 - 20:25:56
Nexus, grenz mal das ganze ein.

Nimm mal einen kurzen Agenten zum testen, ob es da immer noch so ist:

Code
Sub Initialize
	
	Const ITEM_NAME$ = "Listname"
	
	Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim dbThis As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim docLoop As NotesDocument
	Set dbThis = session.CurrentDatabase
	Set collection = dbThis.UnprocessedDocuments
	
	Msgbox collection.Count & " Dokumente ausgewählt"
	
	Set docLoop = collection.GetFirstDocument()
	While Not(docLoop Is Nothing)
		Msgbox "Erster Wert von Feld <" & ITEM_NAME & ">:" & docLoop.GetItemValue(ITEM_NAME)(0)
		Set docLoop = collection.GetNextDocument(docLoop)
	Wend
	
End Sub

Weitere Tipps:
Titel: Re: markiertes Dokument ansprechen
Beitrag von: eknori am 13.12.04 - 20:30:47
Zitat
z.B. ist in Java zwischen hallo und Hallo ein Unterschied !).
wohingegen Visual Basic die Schreibweise automatisch anpasst .. aber das hier nur am Rande...
Titel: Re: markiertes Dokument ansprechen
Beitrag von: TMC am 13.12.04 - 20:40:49
wohingegen Visual Basic die Schreibweise automatisch anpasst .. aber das hier nur am Rande...
Ist mir in VBA noch gar nicht aufgefallen (wohl weil ich nicht so oft in VBA code), wohl aber, dass sich z.B. in VBA ein "Exit Sub" automatisch in "Exit Function" ändert, wenn ich die Routine von Sub auf Function ändere im Kopf.

@Nexus:
Generell zu Agenten kannst Du Dir auch mal das hier ansehen:
AtNotes BP: Agenten in Notes/Domino (http://www.atnotes.de/index.php?topic=16181.0)
Titel: Re: markiertes Dokument ansprechen
Beitrag von: eknori am 13.12.04 - 20:47:41
ich sprach nicht von VBA ( Visual Basic for Application ) sondern von VB n ( Visual Basic ) ! n= {1,6}
Titel: Re: markiertes Dokument ansprechen
Beitrag von: TMC am 13.12.04 - 20:54:58
Ahh, danke für die Klarstellung, hatte ich überlesen. Ist übrigens in VBA (Excel 2003) auch so, hab gerade nachgesehen.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 13.12.04 - 21:34:17
Hat Nexus eigentlich explizit mal gesagt, WO der Code ist? Wir reden zwar alle von Agenten, aber evtl. sind wir auf der falschen Fährte.

Also: Steht der Code so in einem Agenten?
Wie wird der Agent aufgerufen?

Bei dem Code sehe ich nicht, warum das nicht funktionieren sollte.

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 13.12.04 - 22:22:07
@Andreas:
ich habe eingestellt, alle marierten Dokumente.

Ich denke schon, er spricht von einem Agent. Aber auch mir ist völlig unklar, warum das nicht funktionieren sollte. Wobei mich allerdings die Menge an Sinnloscode (in Bezug auf die Fragestellung) abgehalten hat, mich vorher intensiver mit der Sache zu beschäftigen.
Wenn mir sowas passiert: Ich schmeisse erstmal alles 'raus, was "mit der Sache" nix zu tun hat, um Nebenwirkungen ausschliessen zu können (in der Regel landet dann der Code in einem seperatem, temporäten Designelement in einer Kopie der betreffenden DB - da kann ich "spielen" bis zum Abwinken).

Woran merkst Du eigentlich, dass andere als markierte Docs berücksichtigt werden ?
Tip: Geh' den Agent im Debugger durch (das Teil sollte ja auch - oder müsste eigentlich nur (wenn ich mir so die expliziten Zuweisungen de DBs anschaue) - lokal laufen.

Ich nehme an, da läuft irgendwas ganz simples (Agent properties ?) schief.

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 10:40:42
habe den eigentlich Code jetzt eingegrenzt.

Bestehend nur noch aus:

Variablen lass ich jetzt mal weg, da diese alle einwandfrei deklariert sind. Und von denen das Problem nicht ausgeht.



Set uidoc = workspace.CurrentDocument
   Set thisdb = session.CurrentDatabase
   Set searchview3=thisdb.GetView("vergleichsAusgabe")
   Set db1 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB1.nsf" )
   Set db2 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB2.nsf" )
   Set searchview1=db1.GetView("Groups")
   Set searchview2 =db2.GetView("Groups")
   
   Set collection = thisdb.UnprocessedDocuments
   Set copydoc = collection.GetFirstDocument()
   
   
   
   While Not(copydoc Is Nothing)
      
      Call copydoc.RemoveItem(ERRdescription)
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
      
      Call copydoc.CopyToDatabase ( db2 )
   Set copydoc = collection.GetNextDocument(copydoc)
      
   Wend
   Messagebox "Replacement finished"
   
End Sub


Also, er findet Dokumente. Aber nicht die, welche ich ausgewählt habe. Ich setze ja, getfirstdocument. Da sollte er das erste Dokumente anspringen, was ich ausgewählt habe und in der Collection ist. Macht er aber nicht. Er nimmt das Dokument in der Ansicht. 

Ja es ist ein Agent.

Habe auch eingestellt, in den Property, dass er nur die ausgewählten Exemplare durchlaufen soll.  Von daher... ich weiß nicht weiter.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 10:48:43
Was soll denn
  Set uidoc = workspace.CurrentDocument
 ???

Wo wird workspace gesetzt ?
Wo wird session gesetzt  ?

Wird der Agent aus einem Dokument aufgerufen?

Schalte mal den Debugger ein und dann insb. der Wert Count für collection. Was steht da?

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 10:52:03
ich habe 2 Dokumente ausgewählt.

Bei Count steht allerdings nur 1.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Semeaphoros am 14.12.04 - 10:53:19
Und dieses eine ist das, wo der Cursor draufsteht und nicht eines der gewählten?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 10:55:32
jo. So scheint es zu sein. Kennste das Problem ?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Semeaphoros am 14.12.04 - 10:59:40
Mach in der Ansicht eine Aktion und rufe den Agenten über Formelsprache auf
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 11:07:22
Also wenn ich dies mache, in einer Ansicht die Aktion erstellen und diese in der Ansicht ausführe, zeig er mir bei 2 gewählten Dokumente auch COunt=2. Somit geht es. Aber ich habe eine eingebette Ansicht. Und führe die Aktion über die Maske aus. Kann man da was drehen, dass es so auch funktioniert ?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 11:29:38
Du musst die Aktion in der eingebetteten Ansicht einbauen.
In der Maske dann unter den Eigenschaften für die eingebettete Ansicht "Auswahlrand" und "Aktionen" anzeigen aktivieren.

Das mit dem uidoc weglassen. Und workspace, session setzen.

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 12:40:04
so, er läuft durch bis zu der Stelle, dass er das nächste Dokument abarbeiten soll. Ich habe dabei festgestellt, das Copydoc also die Dokumente nicht in das Notesdocument geladen werden. Der Counter zeigt mir aber eine Auswahl an, wenn ich eine Auswahl tätige. 2, wenn ich zwei machen etc.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Semeaphoros am 14.12.04 - 13:22:58
Und was passiert, wenn er das nächste Doc hollen will?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 13:55:28
Dann steigt er aus, weil er meint,"Function requieres a valid ADT Argument.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 13:59:25
Du kannst das mal versuchen.


dim nextdoc as NotesDocument
While Not(copydoc Is Nothing)

Set nextdoc = collection.GetNextDocument(copydoc)
     
      Call copydoc.RemoveItem(ERRdescription)
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
     
      Call copydoc.CopyToDatabase ( db2 )
   Set copydoc = nextdoc

Wend

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 14.12.04 - 14:01:47
Demzufolge wäre die Ansicht nach ERRdescription sortiert ? Sonst würde das ADT-Argument ja nicht verloren gehen.

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 14:06:01
Ich denke, das copydoc ist über den Jordan gegangen...
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 14:08:24
Demzufolge wäre die Ansicht nach ERRdescription sortiert ? Sonst würde das ADT-Argument ja nicht verloren gehen.

Bernhard

nein, es ist leider nicht nach errdescritpion sortiert. Es ist nach Gruppennamen sortiert. ErrDescritpion ist nur ein Feld, indem ein vorheriger Script die Fehlermeldung einträgt, die der User ablesen kann.


ok, hab das von Glombi rein gemacht. Leider löscht er immer noch das erste Dokument in der Ansicht, dafür geht der Rest, er kopiert die 2 ausgewählten Dokumenten. Juhu. Aber warum löscht er das erste Dokument und nich das, welches ausgewählt wurde ?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 14:13:37
Wo ist denn im Code das Löschen programmiert?
Hier kommt ja keiner mehr mit...

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 14:16:44

   While Not(copydoc Is Nothing)
      Set nextdoc = collection.GetNextDocument(copydoc)
      Call copydoc.RemoveItem("ERRdescription")  <--- Feld löschen mit Beschreibung
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
      
      
      Call copydoc.CopyToDatabase ( db2 )
      Call copydoc.Remove(True) <--- Dokument, welches kopiert wurde löschen!
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 14.12.04 - 14:21:09
Dann ist das ADT-Problem ja doch das naheliegendste. Warum schickst Du denn den Code bröckchenweise ? Das mit der embedded view kam ja auch erst nach langer Zeit.
So wird das nix.

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 14:21:12
Dann so


dim deldoc as NotesDocument

While Not(copydoc Is Nothing)
      Set nextdoc = collection.GetNextDocument(copydoc)
set deldoc = copydoc
      Call copydoc.RemoveItem("ERRdescription")  <--- Feld löschen mit Beschreibung
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
      
      
      Call copydoc.CopyToDatabase ( db2 )
      Call deldoc.Remove(True) <--- Dokument, welches kopiert wurde löschen!
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 14.12.04 - 14:30:27
Das nextdoc ist jetzt aber überflüssig, Glombi:
Vor dem Löschen ein
Set deldoc = copydoc
Set copydoc = collection.GetNextDocument
Call deldoc.Remove (True)

Bernhard

PS: Ich habe jetzt auch mal ein paar Zeilen weggelassen  ;D
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 14.12.04 - 14:32:10
Aber es soll doch noch was kopiert werden?!

Egal, ich zieh mir jetzt die Su rein  ;D DRÖHN

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 14.12.04 - 14:34:52
Aber es soll doch noch was kopiert werden?!

Das waren die Zeilen, die ich weggelassen habe  ;D
Die kommen vor Set deldoc =

Egal, ich zieh mir jetzt die Su rein  ;D DRÖHN

Besser ist das  ;D
Aber von den Strizhi hast Du länger was - und die Musik ist besser  ;)

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 14:44:01
Hab Glombi´s Idee ausprobiert. Keine Veränderung. Der löscht immer noch das erste Dokument und den Rest nicht.

Leuts, ich glaube, ich mach das Gesangsbuch zu... ich steig nicht mehr durch und blick auch nicht, warum das nicht gehen soll.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 14.12.04 - 15:23:03
ok, ich mach weiter. Gibt es sonst noch was, was ich ausprobieren könnte ?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 14.12.04 - 16:27:44
Wie wäre es, wenn wir endlich mal den kompletten Code von der Bildung der Collection bis zum abschliessenden Wend bekämen mitsamt einer aktuellen Zustandsbeschreibung (wieviel Dokumente gefunden, welche Dokumente gefunden, genaue Fehlerbeschreibung incl. evtl. Meldung und Zustand lt. Debugger) ?

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: zhermann am 15.12.04 - 08:44:57
Hallo,

wenn ich das richtig verstehe, geht es jetzt nur noch ums löschen der kopierten Dokumente???

Als erstes muß ich dazu sagen, niemals Dokumente löschen, wenn nicht das kopieren der Dokumente abgeschlossen und sichergestellt ist. bin damit schon mal auf die Stürze geschnauzt.

Ich habe das so gelöst:
  .
  .
  .
Dim idString as String
dim idArray As Variant
  .
  .
  .

In dem Teil wo die Dokumente kopiert werden folgenden Eintrag aufnehmen:


  .
  .
  .
If idString = "" then
   idString = copydoc.UniversalId
else
     idString = idString &";"& copydoc.UniversalId
end if
  .
  .
  .

Nachdem alle Dokumente kopiert wurden:

idArray = Split(idString, ";")
Forall x in idarray
     set copydoc = db.GetDocumentByUNID(x)
     call copydoc.Remove(True)
end forall

Zur Erläuterung:

Ich hatte auch das Problem mit dem löschen und habe immer das ADT Argument verloren. Habe es mit vorwärt und rückwärts löschen versucht, immer mit dem selben Fehler.

Jetzt habe ich mir einfach die UnID der Dokumente gemerkt und sie über ihre UNID wieder geholt und gelöscht. Ich denke das ist zwar mit der Kirche ums Dorf gelaufen, aber was anderes fiel mir nicht ein. Was noch zum Problem werden kann, ist wenn mehr Dokumente gelöscht werden sollen als im String/Array gemerkt werden können.


Gruß

Zsolt
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 15.12.04 - 09:51:55
Ein viel einfacheres Verfahren zum Löschen aus einer Collection wurde bereits weiter oben in diesem Thread genannt, Zsolt.

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: zhermann am 15.12.04 - 10:00:38
Hallo Bernhard,

jo, habe ich gelesen und stimme damit voll überein, zumal ich diese Lösung gleich bei mir umgesetzt habe.
Nur wenn ich das richtig verstanden habe kommt immer noch das ADT-Argument hoch, oder???

Auf meine Art schalte ich diese Fehlerquelle erstmal aus. Sollte das dann alles funktionieren, kann man doch dann Schritt für Schritt die bessere Lösung einbauen.

Habe damit schon gute Erfahrungen gemacht. Weil ich damit ziemlich viele Feherquellen ausschalten kann.

Gruß

Zsolt
Titel: Re: markiertes Dokument ansprechen
Beitrag von: koehlerbv am 15.12.04 - 10:03:45
Nein, Zsolt, bei dem oben genannten Verfahren kommt natürlich keine Fehlermeldung mehr, da das ADT-Argument (also der Pointer auf ein gültiges Dokument) erhalten bleibt.

Bernhard
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 15.12.04 - 10:05:40
Und da Nexus nicht wirklich mit den benötigten Infos herüberkommt bzw. uns immer nur kleine Häppchen serviert, wird das hier nichts.

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: zhermann am 15.12.04 - 10:10:30
Na dann verstehe ich nicht mehr was hier noch das Problem ist?

Nexus möchte aus DB-A Dokumente in DB-B und DB-C kopieren. Diese Dokumente danach aus DB-A löschen, richtig?

Wie ich den Thraed richtig verstehe kann er jetzt die Dokumente in die beiden Ziel DB's kopieren, aber nicht die Dokumente aus der Quell-DB löschen.

Habe ich was übersehen/überlesen???

Gruß

Zsolt

Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 15.12.04 - 10:14:45
So sieht es aus. Aber es fehlt wahrscheinlich eine "kleine" Info...
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Semeaphoros am 15.12.04 - 10:40:07
Zsolt, warts doch mal ab, bis Nexus sich wieder meldet und den Vorhang öffnet, das ist jetzt im Moment im Kaffeesatz gestochert ...... :)

PS: Nexus, was da heist "zugebunden", ist wohl durchaus der treffende Name für die Art, wie wir hier die Infos bekommen, perfekte Alias-Wahl .....  ;D
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 16.12.04 - 08:38:27
Also, ich bin davon ausgegangen, ich habe euch alle Info´s gegeben . Hab auch eigentlich den ganzen Code euch gepostet. Habe alle Abänderungen ausprobiert. Aber er löscht mir immer noch das erste Dokument in der Ansicht, aus dem ich durch auswahl der Dokumente meine Collection fülle.

Was braucht ihr also alles. Die Datenbank kann ich euch leider nicht schicken,wegen Betriebsgeheimnissen etc. kennt ja diese Klausel bla bla ...

Der Code steht zu 99% ( Variabel Deklaration lass ich halt weg ) im Forum. Soll ich nochmal den aktuellen Stand des Codes posten ?
Titel: Re: markiertes Dokument ansprechen
Beitrag von: zhermann am 16.12.04 - 08:44:47
Hallo Nexus,

poste bitte den gesamten Code inklusive der Variablen Dekleration.
Manchmal versteckt sich ja auch da ein Fehler, der sich auf den Ablauf des Codes auswirkt.

Gruß

Zsolt
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 16.12.04 - 09:36:08

Sub Initialize
   Dim session As New NotesSession
   Dim db1 As NotesDatabase
   Dim db2  As NotesDatabase
   Dim thisdb As NotesDatabase
   Dim searchview1 As NotesView
   Dim searchview2 As NotesView
   Dim searchview3 As notesview
   Dim vc As NotesViewEntryCollection
   Dim entry As NotesViewEntry
   Dim docDB1 As NotesDocument
   Dim docdb2 As NotesDocument
   Dim docEingabe As NotesDocument
   Dim Copydoc As NotesDocument
   Dim  DB1GroupName As Variant
   Dim db1GroupNameE As String
   Dim FirstDocCheckDB1 As Boolean
   Dim Db1EntryCount As Integer
   Dim DB1EntryCounter As Integer
   Dim db1VS As Variant
   Dim db2vs As Variant
   Dim Nam As NotesName
   Dim StringConv As String
   Dim StringConvE As String
   Dim intStrLaenge As Integer
   Dim intStrLaengeF As Integer
   Dim strSearchMemory As String
   Dim SearchMemoryA As Variant
   Dim Nullstatus As Integer
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim collection As NotesDocumentCollection
   Dim item As NotesItem
   Dim nextdoc As NotesDocument
   Dim deldoc As NotesDocument
   
   
   'Set uidoc = workspace.CurrentDocument
   Set thisdb = session.CurrentDatabase
   Set searchview3=thisdb.GetView("vergleichsAusgabe")
   Set db1 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB1.nsf" )
   Set db2 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB2.nsf" )
   Set searchview1=db1.GetView("Groups")
   Set searchview2 =db2.GetView("Groups")
   
   Set collection = thisdb.UnprocessedDocuments
   Set copydoc = collection.GetFirstDocument()
   
   
   
   While Not(copydoc Is Nothing)
      Set nextdoc = collection.GetNextDocument(copydoc)
      Call copydoc.RemoveItem("ERRdescription")
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
      
      
      Call copydoc.CopyToDatabase ( db2 )
      Set deldoc = copydoc
      Call deldoc.Remove(True)   
      
      Set copydoc = nextdoc
      '
      
   Wend
   Messagebox "Replacement finished"
   
End Sub




Aufgrund der vielen Versuche, hab ich die restlichen Variablen mal drin gelassen. Die stören ja nicht.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 16.12.04 - 09:49:23
Du hast den Code von mir nicht korrekt eingetragen:

Set collection = thisdb.UnprocessedDocuments
   Set copydoc = collection.GetFirstDocument()
  
  
   While Not(copydoc Is Nothing)
      Set deldoc = copydoc
      Set nextdoc = collection.GetNextDocument(copydoc)
      Call copydoc.RemoveItem("ERRdescription")
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
     
     
      Call copydoc.CopyToDatabase ( db2 )
      Call deldoc.Remove(True)   
     
      Set copydoc = nextdoc
      '
     
   Wend
   Messagebox "Replacement finished"
   
End Sub


Probiere es bitte mal damit aus. Das copydoc geht über den Jordan wie gesagt. Daher muss delcodc gesetzt werden, BEVOR Du copydoc.CopyToDatabase aufrufst.

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 16.12.04 - 09:52:37
Geht nicht, die ausgewählten Dokumente werden nicht gelöscht. Aber wieder einmal das erste.

Titel: Re: markiertes Dokument ansprechen
Beitrag von: Glombi am 16.12.04 - 10:01:35
Gut, dann bleibt nichts anderes übrig, als die Dokumente nachher zu löschen. D.h. Du musst die DocIDs sammeln (bspw. in einem Array oder einer Liste) und dann am Ende mit
 set deldoc = db.GetDocumentbyUNID( docid )
 call deldoc.Remove(true)
löschen.

Andreas
Titel: Re: markiertes Dokument ansprechen
Beitrag von: zhermann am 16.12.04 - 10:02:23
Hi,

setze mal copydoc = nextdoc bevor du das Document löschst.

Ansonsten mach es so wie ich bzw. Glombi schreibt.

Gruß

Zsolt
Titel: Re: markiertes Dokument ansprechen
Beitrag von: animate am 16.12.04 - 10:44:38
also ich habe sowas ja auch schon ein oder zwei Mal gemacht.
Die Dokument-Objekte, die in der Collection sind werden gelöscht, wenn du deren remove-Methode aufrufst. Punkt.
(Achtung: Du musst diesen o.g. Trick mit den zwei Objekten machen, damit du nach dem Löschen eines Objekts noch den Zeiger auf das nächste bekommst.)

Also entweder sind die Dokumente, die nicht gelöscht werden, nicht in der Collection, oder(/und) du rufst deren remove-Methode nicht auf.

Der Debugger ist dein Freund.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: Nexus am 20.12.04 - 10:56:44
So.... willkommen im Kabinet der Kuriositäten. Also letztens ging das löschen noch. Jetzt auf einmal löscht er wieder alles nur nicht die ausgewählten Dokumente... ist doch viel zu argh oder ... habe am Code nichts mehr verändert.
Titel: Re: markiertes Dokument ansprechen
Beitrag von: zhermann am 20.12.04 - 11:02:44
Hi Nexus,

erstelle mal eine Kopie von der DB und poste die mal hier rein.

Dann können wir gemeinsam mal nach dem Problem schauen.

Gruß

Zsolt