Domino 9 und frühere Versionen > Entwicklung
Backend/Frontend Problem
baumi78:
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...
--- Code: ---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
--- Ende Code ---
flaite:
Das kann sehr verwirrend sein.
Ist u.U. in fld_test eine Formel?
baumi78:
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
--- Code: ---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")
--- Ende Code ---
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:
--- Code: ---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))
--- Ende Code ---
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.
flaite:
--- Zitat von: baumi78 am 20.07.05 - 11:32:44 ---Das Feld fld_Test ist ein bearbeitbares Feld Typ Kontrollkästchen, Formel für Auswahl verwenden
--- Ende Zitat ---
Vielleicht ist das der Punkt. Hat sich die Auswahl vielleicht auch geändert?
--- Zitat von: baumi78 am 20.07.05 - 11:32:44 --- 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.
--- Ende Zitat ---
Ich glaube nicht an einen bug. Ich hatte das auch schon, dass das berechnen der Felder mit Auswahl berechnen und so ein Zeug wirklich komplex werden kann.
Am besten du gehst die Logik Schritt für Schritt durch. Es gibt immer einen Weg zu verstehen was passiert. Das würde ich dann gut dokumentieren. Wegen mir kannst du auch eine *deutlich abgespeckte Version* des Problems als .nsf hier anhängen. Ich schau mir das mal an.
Axel
baumi78:
Hm,
mal sehen, das mit der abgespeckten Version ist so ne Sache, ich weiß das das zur Problemanalyse sehr hilfreiche wäre, es ist halt aber auch ein immenser Arbeitsaufwand.
Die Frage ob es ein Notes Bug ist oder nicht ist mir eigentlich auch egal, es muss halt nur irgendwie funktionieren ;-)
Nochmal auf 99% der Rechner läuft der Code ohne Probleme, nur bei scheinbar schnelleren Maschinen ist das Problem überhaupt nachstellbar...
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln