Hallo,
ich habe folgendes Problem (R5/R6) beim Arbeiten mit dem Frontend. Ich setze ein Feld im zum uidoc gehörenden Backend Dokument, speichere das Backenddokument und mache ein uidoc.reload. Bis zu diesem Zeitpunkt sind die am Backend gemachten Änderungen enthalten. Sobald ich ein uidoc.save mache gehen die gesetzten Werte verloren. In der verwendeten Maske des Dokuments habe ich bereits alle Events rausgenommen. Das Feld welches gesetzt wird ist ein berechnetes Feld.
Das Verhalten ist zudem auch nur auf "schnellen" Rechnern zu beobachten (Citrix Umgebung), so jedenfalls die bisherige Beobachtung. Hat jemand eine Idee oder nen Tip was vielleicht falsch ist oder schon mal ähnliches beobachtet Der Code ist ziemlich umfangreich, ich versuche gerade ihn zu vereinfachen um so an die Quelle des Übels heranzukommen...
Dim docOfUiDoc As NotesDocument
Set docOfUiDoc = UiDoc.document
Set UiDoc = ws.EditDocument(True, doc, False)
Forall key In docOfUiDoc.getFirstItem("fld_TestChoice").values
If (TestItem Is Nothing) Then
Set TestItem=docOfUiDoc.ReplaceItemValue("fld_Test", Mid(docOfUiDoc.fld_TestChoice(i), Instr(docOfUiDoc.fld_TestChoice(i),"|")+1))
Set TestItem = docOfUiDoc.getFirstItem("fld_Test")
Messagebox "Debugging: " + TestItem.Values(0)
Else
TestItem.appendToTextList(Mid(docOfUiDoc.fld_TestChoice(i), Instr(docOfUiDoc.fld_TestChoice(i),"|")+1))
End If
i = i + 1
End Forall
docOfUiDoc.fld_Status = STATUS_BEARBEITET
Call docOfUidoc.Save(False,False)
Set TestItem = docOfUiDoc.getFirstItem("fld_Test")
Messagebox "Debugging after backend save: " + TestItem.Values(0)
'TestItem gesetzt
Call uidoc.Reload
Set TestItem = docOfUiDoc.getFirstItem("fld_Test")
Messagebox "Debugging after uidoc reload: " + TestItem.Values(0)
'TestItem gesetzt
Call uidoc.Save
Set TestItem = docOfUiDoc.getFirstItem("fld_Test")
Messagebox "Debugging after uidoc save: " + TestItem.Values(0)
'TestItem verliert Werte
Das Feld fld_Test ist ein bearbeitbares Feld Typ Kontrollkästchen, Formel für Auswahl verwenden und fld_TestChoice (Mehrfachfeld) ist vorgegeben, außerdem Felder bei Schlüsselwortänderung aktualisieren. Aber auch eine Änderung und Vereinfachung an dieser Stelle bringt keine Verbesserung.
Jetzt habe ich noch festgestellt das der Fehler nur auftritt, wenn lediglich der if Zweig
If (TestItem Is Nothing) Then
Set TestItem=docOfUiDoc.ReplaceItemValue("fld_Test", Mid(docOfUiDoc.fld_TestChoice(i), Instr(docOfUiDoc.fld_TestChoice(i),"|")+1))
Set TestItem = docOfUiDoc.getFirstItem("fld_Test")
durchlaufen wird, sind in fld_TestChoice mehrere Werte und wird dadurch auch der Else Zweig durchlaufen funktioniert alles perfekt und alle Werte sind auch nach dem uidoc.save erhalten.
Daraufhin habe ich gedacht das es vielleicht durch das AppendTextList besser wird und habe auch wenn fld_TestChoice nur einen Wert enthält den selben Wert einfach nocheinmal angehangen:
If (TestItem Is Nothing) Then
Set TestItem=docOfUiDoc.ReplaceItemValue("fld_Test", Mid(docOfUiDoc.fld_TestChoice(i), Instr(docOfUiDoc.fld_TestChoice(i),"|")+1))
Set TestItem = docOfUiDoc.getFirstItem("fld_Test")
TestItem.appendToTextList(Mid(docOfUiDoc.fld_TestChoice(i), Instr(docOfUiDoc.fld_TestChoice(i),"|")+1))
Beim Debuggen sieht man nun das das Item zwei Values bekommt (im Backend) sobald man dann ein uidoc.save macht ist nur noch einer der beiden Werte erhalten. Eigentlich ist das ja genau das was ich auch erreichen möchte, nur traue ich mich nicht so recht die Sache so zu programmieren, weil das ja bedeuten würde das ich absichtlich einen Bug hineinprogrammiere, nur um einen anderen (IBM? Bug) zu vermeiden, den ich bis jetzt aber nicht mal richtig verstehe.
Hallo,
also das reine computeWithForm hat mir auch nicht so richtig weitergeholfen. Es liefert einen Fehler, aber ich weiß auch nicht so genau an welcher Stelle genau.
Außerdem komme ich um das FrontEnd irgendwie nicht herum, da da noch andere Sachen mit dranhängen. Ich hab aber festgestellt, das es definitiv daran liegt das das uidoc.reload nicht funktioniert (aber eben nur auf "schnellen" Rechnern). Außerdem tritt der Fehler auch nicht auf, wenn ich item.appendtotextList verwende. Ich werde den Code dann wohl jetzt so lassen wie in meinem 2. Posting beschrieben:
If (TestItem Is Nothing) Then
Set TestItem=docOfUiDoc.ReplaceItemValue("fld_Test", "test1")
TestItem.appendToTextList("test2")
also wenn das Item noch Nothing ist, Item erstellen und danach noch einmal den selben Wert dranhängen, beim Debuggen sehe ich dann das der Wert im Backend doppelt ist (was nicht beabsichtigt und ein Fehler wäre). Mache ich dann ein uidoc.reload bzw. uidoc.save dann ist nur noch ein Wert enthalten (nämlich der 2. "test2" der der mit appendToTextlist angehangen wurde, "test1" ist futsch und das diesmal sogar auf dem langsamen Client System??). So gehts, auch wenn ich es nicht verstehe und mir das ganze sehr spanisch vorkommt...???
Grüße Baumi