Autor Thema: Backend/Frontend Problem  (Gelesen 1894 mal)

Offline baumi78

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Ich liebe dieses Forum!
Backend/Frontend Problem
« am: 20.07.05 - 09:36:12 »
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

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Backend/Frontend Problem
« Antwort #1 am: 20.07.05 - 10:53:42 »
Das kann sehr verwirrend sein.
Ist u.U. in fld_test eine Formel?
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline baumi78

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Ich liebe dieses Forum!
Re: Backend/Frontend Problem
« Antwort #2 am: 20.07.05 - 11:32:44 »
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")

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))


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.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Backend/Frontend Problem
« Antwort #3 am: 20.07.05 - 12:28:09 »
Das Feld fld_Test ist ein bearbeitbares Feld Typ Kontrollkästchen, Formel für Auswahl verwenden
Vielleicht ist das der Punkt. Hat sich die Auswahl vielleicht auch geändert?

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.
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
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline baumi78

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Ich liebe dieses Forum!
Re: Backend/Frontend Problem
« Antwort #4 am: 20.07.05 - 12:39:23 »
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...

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Backend/Frontend Problem
« Antwort #5 am: 21.07.05 - 00:04:08 »
Was ich jetzt oben beim überfliegen gesehen habe, instantiierst Du das Backend-Doc über NotesUIDocument, wendest dann aber nur Backend-Methoden an.
Warum denn dann nicht gleich auch via Backend saven und zum Schluß dann vielleicht noch reloaden.
Den Zwischenschritt, ein Frontend-Doc zu speichern, obwohl Du im Backend Änderungen machst, verstehe ich nicht ganz.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline baumi78

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Ich liebe dieses Forum!
Re: Backend/Frontend Problem
« Antwort #6 am: 21.07.05 - 13:39:46 »
@tmc

Ja das war ja auch so die idee. Ich habe halt in der Maske verschiedene berechnete Felder. Nun setzte ich im Backend ein Feld, wollte ein reload/refresh und uidoc.save machen und die berechneten Felder dann in Abhängigkeit der gemachten Änderungen speichern.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Backend/Frontend Problem
« Antwort #7 am: 21.07.05 - 14:11:17 »
vielleicht hilft notesDocument.computeWithForm

Ich empfehle diese Version:

Dim flag as Integer

flag = doc.computeWithForm(false, false)  ' kein true !
if (flag) then
' some action to inform that computeWithFormOperation has failed.
end if
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline baumi78

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Ich liebe dieses Forum!
Re: Backend/Frontend Problem
« Antwort #8 am: 22.07.05 - 13:40:16 »
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:

Code
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz