Autor Thema: "Document is not from this collection"  (Gelesen 2914 mal)

Offline mb

  • Aktives Mitglied
  • ***
  • Beiträge: 196
  • Geschlecht: Männlich
  • Im Rhythmus bleiben!
"Document is not from this collection"
« am: 05.11.03 - 11:05:46 »
Hallo!

Ich hab hier so ein Script, das immer o.g. Fehler bringt. Ich weiß aber nicht warum (bin aber auch nicht sooo fit in LS). Vielleicht siehts ja einer.
Ich habe, die in meinen Augen entscheidenden Zeilen mal hierher kopiert.

Set col = zieldb.search(|Type = "Person"|,dateTime,0)
      
zaehler = (col.count)    
Set zieldoc = col.getfirstdocument
      
For i=1To zaehler       
         
         docvorhanden = "nein"         
         Set names_doc = FindMatchingDocumentInView(zieldoc , names_IDView)
         If docvorhanden = "ja" Then [...]
            End If
         Else
            weg = True
            Set wegdoc = zieldoc
         End If
         If i < zaehler Then
            Set zieldoc = col.getnextdocument(zieldoc)
         Else
            Set zieldoc = col.getlastdocument
         End If
         If (weg = True) Then Call wegdoc.remove(True)
         weg = False
Next

Der Fehler tritt in dieser Zeile auf:    Set zieldoc = col.getnextdocument(zieldoc)

Verdacht: Wenn ich u. bestimmten Umständen ein Doc aus der Collection lösche, erändert sich die Collection dann so, dass ich ein Problem beim Durchlaufen der restlichen Docs bekomme?
Das nächste Doc. wird ja bereits vor dem Löschen geholt.
Aber die Collection jedesmal neu aufzubauen, kann es ja auch nicht sein. Ist es besser erst alle zu löschenden Docs zu sammeln und am Ende zu löschen (wenn ja, wie?)


Marc

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:"Document is not from this collection"
« Antwort #1 am: 05.11.03 - 16:50:47 »
Das übliche Problem, über das wohl jeder newbee mal stolpert ;-)

Deine Vermutung ist vollkommen richtig: Du ziehst der Funktion zum Instantiieren des nächsten Docs den Boden weg. Die entscheidenden Zeilen fehlen zwar in Deinem Code-Auszug, aber sowas wie
Set NotesDocument = NotesDocumentCollection.GetNextDocument (NotesDocument)
scheitert nach NotesDocument.Remove - das Doc, was als Argument verwendet wird, ist ja nicht mehr da.
Du musst also
- das zu löschende Doc einem temporären Doc zuweisen (docTemp oder so)
- dann Doc das nächste Objekt der Collection zuweisen
- und erst dann docTemp "removen".

HTH,
Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:"Document is not from this collection"
« Antwort #2 am: 05.11.03 - 21:37:15 »
Hi,

ich bin hier etwas anderer Meinung als Bernhard. Denn du weißt das zu löschende Dokument einer temp. Variablen zu, holst dann das nächste Dokument und löscht dann erst. Meines Erachtes zieht du hier niemandem den Boden unter den Füßen weg.

Ich glaube eher deine Schleife ist von der Logik her falsch. Du nimmst eine For-Next - Schleife mit der Variable zaehler als Endbedingung und die holst du dir bevor du Dokument aus der Collection löscht. Das heißt, du hattest in deiner Collection 10 Dokumente, also hat zaehler den Wert 10. Nun löscht du innerhalb der Schleife bspw. 3 Dokumente, also sind in der Collection nur noch 7 Dokumente, aber die Schleife läuft bis 10 und versucht so auf nicht mehr vorhandene Dokument zuzugreifen.

Du verwendest besser eine While-Wend - Schleife.

Dein Code könnte so aussehen:

Set col = zieldb.search(|Type = "Person"|,dateTime,0)
     
Set zieldoc = col.getfirstdocument
     
While Not (zieldoc Is Nothing)      
         
         docvorhanden = "nein"        
         Set names_doc = FindMatchingDocumentInView(zieldoc , names_IDView)
         If docvorhanden = "ja" Then [...]
            End If
         Else
            weg = True
            Set wegdoc = zieldoc
         End If
         
         Set zieldoc = col.getnextdocument(zieldoc)

         If (weg = True) Then Call wegdoc.remove(True)

         weg = False
Wend

Ich hab's nicht getestet. Unter Umständen müsste man die Dokument-Zuweisung doch auch noch anpassen, aber probiers erst mal so.


Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:"Document is not from this collection"
« Antwort #3 am: 05.11.03 - 21:59:00 »
Bernhard: Axel hat recht, die Reihenfolge stimmt im Code von Marc. Das wegdoc.remove kommt erst nach der etwas "schwerfälligen" Art, wie er das nächste Dokument holt. Somit ist die Reihenfolge, erst nächstes Doc holen, dann ev. aktuelles Doc löschen korrekt.

Axel: Deine Begründung ist falsch. Wenn er am Anfang 10 Docs in der Collection hat, muss er auch 10 Docs überprüfen, egal wieviele er dabei löschen muss oder nicht. Dennoch, Deine Schleife ist natürlich sehr viel eleganter (und einfacher) als die von Marc, und damit natürlich auch weniger Fehleranfällig, gut möglich, dass Du das Problem beseitigt hast, auch wenn die Begründung nicht stimmen kann.

Marc: Welchen Wert hat den i in dem Moment, wo der Fehler auftritt, und wieviele Dokumente wurden bis dahin gelöscht und wieviele Documente warens denn (sprich, welchen Wert hat Zähler)?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:"Document is not from this collection"
« Antwort #4 am: 06.11.03 - 09:12:50 »
@Semeaphoros

Stimmt, ich war gestern Abend ein bisschen auf der falschen Spur, denn ich hatte gerade etwas ähnlich gemacht, allerdings hab ich die Dokumente aus der Collection gelöscht.

Aber bei der Schleife von Marc besteht die Gefahr, das die Zuweisung GetNextDocument ins Leere läuft.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:"Document is not from this collection"
« Antwort #5 am: 06.11.03 - 09:23:07 »
Die Gefahr hab ich auch vermutet, aber wahrscheinlich tut es nicht. Vermutlich ist der ELSE Zweig eine NOP, indem das letzte Dokument einfach nochmal zugewiesen wird. Ueberflüssig, aber schadet nix --- Irrtum natürlich vorbehalten ...... klar - oder?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz