Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: iukhdh am 02.11.07 - 09:23:40

Titel: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 09:23:40
Hallo Forum,

ich brauch mal wieder Eure Hilfe.

Ich habe eine DB, in der ich mit Haupt- und Antwortdokumenten arbeite. Die Antwortdokumente übergeben Infos an die Hauptdokumte, was bei meinem Problem sicherlich nicht relevant ist, aber zum Verständnis vom Code unten hilfreich ist. Die Infos müssen nämlich beim Löschen auch wieder entfernt werden.

Nun mein Problem:

Ich habe den angehängten Löschcode in einem Agenten, der über eine Ansichtsaktion aufgerufen wird. Wenn ich nun irgendein Antwortdokument markiere und damit löschen will, geht das beim ersten Versuch nicht. Bei allen folgenden Versuchen klappts dann aber. D.h., auch alle anderen Antwortdokumente kann ich problemlos löschen, nur der erste Versuch zu löschen wird verweigert.

Wenn ichs im Debugger verfolge, dann springt er beim ersten Durchlauf bei der Roten Zeile zum Endif. Aber warum?

Irgendwie steh ich mal wieder aufm Schlauch.

Wäre für einen kleinen Anstoß dankbar.

Thomas



Zitat
Sub Initialize
   Dim session As New NotesSession
   Dim db As Notesdatabase
   Dim collMarked As NotesDocumentCollection
   Dim docToChange As NotesDocument
   Dim docTemp As NotesDocument
   Dim nuiw As New NotesUIWorkspace
   
'Hol die aktuelle Datenbank
   Set db=session.CurrentDatabase
'Hol die markierten Dokumente
   Set collMarked = db.UnprocessedDocuments
'Hol das erste der Markierten Dokumente
   Set docToChange = collMarked.GetFirstDocument
   
'Schleife um die markierten Dokumente der Reihe nach zu löschen   
   While Not (docToChange Is Nothing)
      
      ' Das nächste zu löschende Dokument wird schonmal rausgesucht      
      Set docTemp = collMarked.GetNextDocument (docToChange)
      
      'Löschen nur bei Antwortdokumenten (Mitarbeiter) durchführen
      If doctochange.IsResponse Then
         
'Hier wird das Hauptdokument gesucht und dort die SummederPunkte reduziert und WerteinesPunktes neu gerechnet
         Dim Hauptdok As NotesDocument
         Dim Ref As String
         Ref = docToChange.ParentDocumentUNID
         Set Hauptdok = db.getdocumentbyUNID(Ref)
         Hauptdok.SummederPunkte=Hauptdok.SummederPunkte(0) - docToChange.LOBPunkte(0)
         
         If Hauptdok.SummederPunkte(0)=0 Then
            Hauptdok.WerteinesPunktes=0
         Else
            Hauptdok.WerteinesPunktes=Hauptdok.Verteilsumme(0)/Hauptdok.SummederPunkte(0)
         End If
         
         Call Hauptdok.Save(True,False)
         
'Der geänderte WerteeinesPunktes vom Hauptdokument wird an die Antwortdokumente übergeben
         Dim dc As NotesDocumentCollection
         Set dc = Hauptdok.Responses
         Call dc.StampAll( "WerteinesPunktes" , Hauptdok.WerteinesPunktes(0) )
         
         
'Das aktuell markierte Dokument wird gelöscht      
         Call docToChange.Remove( True)
         
      End If
      
      
'Das schon rausgesuchte,  nächste Dokument wird zum aktuellen Dokument      
      Set docToChange = docTemp
   Wend
   
'Ansicht aktualisieren
   Call nuiw.ViewRebuild
   
End Sub
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: Axel am 02.11.07 - 10:01:40
Auf welches Dokument zeigt denn die Variable doctochange wenn er aussteigt?


Axel
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 11:01:56
Er zeigt auf garkein Dokument, erst beim zweiten Mal zeigt er auf das ausgewählte Dokument.
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 11:50:38
Also jetzt hab ich noch ein paarmal rumprobiert, ich muss meine Aussage von oben etwas verbessern:

Das ganze funktioniert, wenn ich mehrere Antwortdokumente habe. Es klappt nicht, wenn ich nur ein einziges Antwortdokument habe. Da scheint das collmarked schon garnicht gefüllt zu werden.

 ???

Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: koehlerbv am 02.11.07 - 11:59:15
Doch, das ist dann auch gefüllt (.Count = 1). Dein GetNextDocument läuft dann aber ins Leere.

Bernhard
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 12:05:49
Hallo Bernhard,

aber ich fülle das DoctoChange, also letztlich das, welches ich löschen will, doch mit Getfirstdocument. Da müsste er doch das erste, bzw. einzige Dokument bekommen, oder?

Und, warum funktioniert dann das Script, wenn ich zum zweitenmal auf den Button drücke?

 ??? ???
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 12:56:33
Also ich bin wieder ein wenig weiter:

Wenn ich das einzelne Dokument nach dem Anlegen nochmals öffne und speichere, und dann den Löschbutton betätige, dann funktionierts auch. Diese Arbeit übernimmt ab dem zweiten Antwortdokument immer das Hauptdokument, da es dann in alle Antwortdokumente geänderte Daten reinspeichert. Daher scheint es wohl ab dem zweiten Dokument zu funktionieren.

Die Frage stellt sich mir nun, was ändert das zweite Speichern am Dokument?

Jetzt geh ich erst mal heim, ich schau heute mittag nochmals hier rein.

ciao

Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: Axel am 02.11.07 - 14:46:28
Er zeigt auf garkein Dokument, erst beim zweiten Mal zeigt er auf das ausgewählte Dokument.

Das kann eigentlich nicht sein, denn dann müsste hier


...
'Schleife um die markierten Dokumente der Reihe nach zu löschen   
   While Not (docToChange Is Nothing)
...


schon Schluss sein.

Verfolge im Debugger mal wie sich der Inhalt der Variable docToChange ändert.

Nur mal so 'ne Frage ins Blaue: Wie ist denn der Agent eingestellt. Für welche Dokumente soll er denn gelten.

Was passiert denn, wenn du den Code direkt in die Ansichtenaktion einfügst?

Axel
 
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 14:54:44
Hallo Axel,

also der Agent ist eingestellt dass er über alle ausgewählten Dokumente läuft. Da scheint mir nix im argen zu sein.

Die von dir bemängelte Aussage nehm ich zurück  ;) da hast du recht. Ich habe mir mal mit einem Kollegen angeschaut der sich ein bischen besser im Debugger auskennt. Was uns komisch vorkam, was wir aber aus Zeitmangel erst nächsten Montag genauer überprüfen können, ist die Tatsache, dass er trotz nur einem Antwortdokument bei collmarked auch mal 2 anzeigt, und wir vermuten dass da auch das (nicht angemarkte) Hauptdokument mit aufgenommen wird.

Es hat sich gegen Schluß, bevor wir gehen mussten, verdichtet, dass das was mit dem Speichern des Antwortdokumentes zu tun hat. Dokument markieren und löschen geht nicht, Dokument markieren, öffnen, speichern, und dann löschen funktioniert. Aber warum, da hab ich noch keinen Schimmer.

ciao
Thomas
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: Axel am 02.11.07 - 19:04:37
... ist die Tatsache, dass er trotz nur einem Antwortdokument bei collmarked auch mal 2 anzeigt, und wir vermuten dass da auch das (nicht angemarkte) Hauptdokument mit aufgenommen wird.

Kann eigentlich nicht sein. Bei UnprocessedDocuments gibt's nur die markierten Dokumente zurück.

Mal nur so'n Schuß ins Blaue: ändere Mal im Agent das Ziel von "Alle ausgewählten..." auf "Keines". Ich hab' da so einen leisen Verdacht.

Es hat sich gegen Schluß, bevor wir gehen mussten, verdichtet, dass das was mit dem Speichern des Antwortdokumentes zu tun hat. Dokument markieren und löschen geht nicht, Dokument markieren, öffnen, speichern, und dann löschen funktioniert. Aber warum, da hab ich noch keinen Schimmer.

Was das Speichern damit zu tun haben soll erschließt sich mir noch nicht so ganz. Könnte aber vielleicht auch mit dem leisen Verdacht (siehe oben) zu tun haben.

Versuch' auch mal den Code testhalber direkt in die Ansichtenaktion einzufügen. Mal sehen was dann passiert.

Axel
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 02.11.07 - 20:13:15
Werd ich am Montag gleich ausprobieren, ich halte dich/euch auf dem Laufenden.

schönes Wochenende
Thomas
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 09:20:53
Schjönen Wochenanfang zusammen.

Also, das mit dem Agenten auf "keines" setzen hat nix gebracht. Wobei mich natürlich schon interessieren würde, was dein Verdacht war.

Agent in der Ansichtsaktion hat auch nix gebracht. Gleiches Problem.

Es ist einfach so, dass beim ersten Durchlauf des Agenten, bei nur einem Antwortdokument, doctochange bei

Zitat
'Hol die markierten Dokumente
   Set collMarked = db.UnprocessedDocuments
'Hol das erste der Markierten Dokumente
   Set docToChange = collMarked.GetFirstDocument


nicht gefüllt wird.
Gleich danach nochmals ausgeführt klappts.

Ihr seht mich ratlos.  :-:

Und dass am  Montagmorgen, wie wird da nur die Woche ...?  ;)
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: botschi am 05.11.07 - 09:28:02
Nicht den Agenten in eine Ansichtsaktion tun, sondern den Code in eine Ansichtsaktion.

Matthias
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 09:54:03
Sorry, war falsch geschrieben von mir. Natürlich hab ich den Code AUS dem Agenten eingefügt.
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: gossifu am 05.11.07 - 10:52:52
Hallo,

prüf doch einfach nach, ob in der Collection ein Dokument enthalten ist (Count).
Scheint ja nicht der Fall zu sein. Wenn der Count also 0 ist, dann:

Code
If collMarked.Count = 0 Then
    doctochange = session.getDocumentContext
Else
    doctochange = collMarked.GetFirstDocument
End If

und dann

Code
If doctochange Is Nothing then
    Exit Sub
End If
Probiers mal aus.

mfg

Kjeld
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 12:03:12
Sorry, war grad weg, daher erst jetzt meine Rückantwort:

Collection Count ist nie 0, sondern entweder 1 oder 2.

1, wenn ich das Dokument nur anklicke, aber vorne kein Häkchen dran ist
2, wenn ich das Dokument mit Häkchen anklicke.

Mit Häkchen scheints zu funktionieren, ohne Häkchen nicht, bzw dann erst beim zweiten Versuch.

Aber ist das anwählen bei einem einzelnen Dokument ohne Häkchen nicht das gleich wie mit? Ist da wohl der Hund begraben?
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: gossifu am 05.11.07 - 13:22:20
Hast Du trotzdem mal mit DocumentContext geprüft?
Ich hab auch schon, wie von Axel oben von beschrieben erlebt, dass Du nicht angehakte Dokumente nicht in UnprocessedDocuments hast, sondern nur über DocumentContext bekommst.
Wenn die Collection aber ein Dokument enthält, sollte auch eins ausgelesen werden können.

Probier doch mal, wenn die Collection nichts hergibt, dann auf DocumentContext zu gehen:

Code
Set doctochange = collMarked.GetFirstDocument
If doctochange is Nothing Then
    Set doctochange = session.getDocumentContext
End If

If doctochange Is Nothing then
    Exit Sub
End If

mfg

Kjeld
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 14:59:50
Sorry,
ich hab mich weiter oben glaub ich wieder falsch ausgedrückt, bin wohl noch nicht so ganz der Debugger-Held.

doctochange ist nicht nothing, das ist mir erst jetzt bewusst geworden, als ich den Ablauf mit deinem Code im Debugger verfolgt habe.

Nothing ist doctochange wohl nur, wenn wirklich nix drinsteht. Bei mir steht aber False und lauter Nullen drin. Beim zweiten Durchlauf steht das gewünschte Dokument drin.

Ich hab daher mal deinen Code wie folgt geändert

Zitat
If Isnull(doctoChange) = False Then
      Set docToChange = session.DocumentContext
   End If
   
   If doctochange Is Nothing Then
      Exit Sub
   End If

womit ich nun tatsächlich das entsprechende Dokument bekomme.

Ich bekomme dann aber im folgenden bei

Zitat
Das nächste zu löschende Dokument wird schonmal rausgesucht      
Set docTemp = collMarked.GetNextDocument (docToChange)
      
eine Fehlermeldung, weil das Dokument docToChange nicht in der collMarked drin ist.

Ich denk mal, dass bekomme ich hin, weil das Problem ja sowieso nur dann auftritt wenn nur ein Dokument in der Collection ist.

Aber was mich mehr bedrückt ist die Fehlermeldung

Cannot remove Notes Document when it ist the Document Context

bei

Zitat
Das aktuell markierte Dokument wird gelöscht      
         Call docToChange.Remove( True)


Da wäre ich für eine Idee dankbar.

Thomas
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: Axel am 05.11.07 - 16:15:15
Ich komme erst jetzt dazu hier wieder mitzulesen. Nach dem meine Vorschläge mit von Erfolg gekrönt waren, bin ich mit meinem Latein nun auch am Ende. Ich habe im Moment leider keine Idee mehr, wo hier der Hase im Pfeffer liegt.

Kannst du mal die DB mit ein paar Testdokumenten reinstellen. Vielleicht findet man ja dann was, wenn man selbst mit dem Teil probiert.

Axel
 
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 16:45:09
Hallo Axel,

normalerweise hät ich kein Problem damit eine DB hier reinzustellen, aber in dem Fall lieber nicht. Es geht um Mitarbeiterbewertungen und Leistungsorientierte Bezahlung, ein Thema das hier grad seeeehr mit der heissen Nadel gestrickt wird. Daher ist das ein brisantes Thema und ich möchte lieber nicht dass die DB solange sie nicht 100 fertig ist meinen Raum hier verlässt. Bitte um Verständnis.

Aber ich überlege mir grad einen anderen Ansatz. Letztlich muss ich hier langsam zum Ende kommen, weil sooo schlimm ist die Sache auch nicht, da der Fehler ja nur bei dem Fall mit einem einzigen Antwortdokument auftritt, wenn dieses nicht angehakt ist. (Es gibt noch genug andere Probleme die wichtiger sind)

Daher meine Frage:
Kann man irgendwie abfragen, ob denn in einer Ansicht überhaupt ein Dokument angehakt ist?

Wenn nein, kann ich ja eine Meldung bringen "Bitte mindestens ein Dokument anhaken" und dann abbrechen.

Ein anderer Ansatz ist noch die Sache mit dem zweifachen Speichern, vielleicht muss ich da nochmal nachforschen woran das liegt, dass es beim zweiten speichern klappt
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: koehlerbv am 05.11.07 - 16:50:55
Meine Erfahrung besagt, dass nicht unbedingt ein Dokument angehakt sein muss - es reicht, den Cursor darauf zu stellen. Kjelds Beobachtung kann ich daher nicht nachvollziehen (mich hätten sonst garantiert irgendwann schon Kunden auf das Phänomen hingewiesen).
Dein NotesDocument.Count liefert ja auch immer brav 1 zurück ...

Stutzig macht mich das erforderliche zweite Abspeichern, was dann doch zum Erfolg führt. Hier liegt bestimmt der casus cnactus, hier solltest Du weiter forschen. Irgendwas läuft da ziemlich schief in Deiner DB, was sich sicherlich herausfinden und logisch erklären lassen wird.

Bernhard
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 16:52:50
Es ist ja nicht nur das zweifache Speichern. Wenn der Haken gesetzt ist, dann klappts ja auch. Ohne Haken nicht.

Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: Axel am 05.11.07 - 16:54:35
normalerweise hät ich kein Problem damit eine DB hier reinzustellen, aber in dem Fall lieber nicht. Es geht um Mitarbeiterbewertungen und Leistungsorientierte Bezahlung, ein Thema das hier grad seeeehr mit der heissen Nadel gestrickt wird. Daher ist das ein brisantes Thema und ich möchte lieber nicht dass die DB solange sie nicht 100 fertig ist meinen Raum hier verlässt. Bitte um Verständnis.

Ist ok.

Axel
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 17:02:17
Was mir grade noch noch Bernhards Antwort durch den Kopf ging:

Ich hab nochmal ein neues Hauptdokument mit einem Antwortdokument erstellt, dieses dann geöffnet und dann nochmal gespeichert. Dann habe ich erst ein anderes Dokument angeklickt, und dann wieder das zu löschende. Ohne Haken. Auch da hats wieder nicht geklappt.

Irgendwie scheint mir einfach der Fokus (oder wie könnte man dazu sagen) nicht auf diesem Dokument liegt, wenn es nicht angehakt ist Erst wenn ich in dem Dokument was mache (speichern) ist der drauf. Dadurch dass woanders hingeklickt habe und wieder dorthin, klappts wieder nicht.

Wenn ich die DB schliesse und wieder starte klappt auch alles.

Vielleicht nochmal meine Alternativlösung:

Gibt es eine Abfrage wo ich abfangen kann, ob überhaupt ein Dokument angehakt ist? Dann könnte ich eine Meldung bringen dass man es anhaken soll.
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 17:22:43
Oh Mann, ich hoffe ich nerve nicht zu sehr.

Wenn ich die Datenbank schliesse und wieder öffne, funktioniert alles. Könnte da irgendwie der Fehler liegen, dass die Daten nicht endgültig gespeichert werden? Also irgendwo eine Einstellung bei der Datenbank an sich? Gibts da was?

Vielen Dank für Eure Hilfe bisher
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: koehlerbv am 05.11.07 - 17:26:58
Kann da ein Ansichtsindex 'nen Knall haben? Oder falsch eingestellt sein? Ich hatte die ganze Zeit schon so einen Verdacht ...

Bernhard
Titel: Re: Seltsames Verhalten beim Löschen von Antwortdokumenten
Beitrag von: iukhdh am 05.11.07 - 17:41:21
Oh meine Güte ... ich bin am Ende und fix und fertig.

Wisst ihr was ich geändert habe damits nun funktioniert?

In den Einstellungen der Ansicht (danke Bernhard für das Stichwort) hab ich bei Aktualisieren "Automatisch" eingetragen. Voreingestellt war "automatisch nach 1. Verwendung".

Und ... Tatammmm ... Tusch ....

JETZT KLAPPTS !!!   ;D ;D ;D

Oh Mann, da muss man auch erst mal draufkommen. Und ich such mir einen ab im Code, bin dem Weinkrampf nahe, und dann sowas.  >:(


Jedenfalls möchte ich  nicht versäumen Euch allen nochmals für Euren Beistand in diesen schweren Stunden zu danken. Geht an Euren Kühlschrank, holt Euch ein Bier und trinkt es auf Euer Wohl

Ich  :knuddel: Euch alle !