Domino 9 und frühere Versionen > ND6: Entwicklung

wie Backend Dokument aktualisieren???

<< < (2/4) > >>

klaussp:
OK - hier der Plan:

Meine Datenbank hat einen Ticker, der auf einer Maske aufbaut, den Tickertext aus einem Feld liest und per Javascript in einem anderen Feld laufen lässt (hier aus'm Forum). Hier http://atnotes.de/index.php?topic=13467.0 wird das Dokument immer neu geladen, ich möchte dies aber nur tun wenn sich der Tickertext wirklich ändert, da ein Reload u. Umständen den Focus im System auf Notes setzt, so daß Notes in den Aktiven Modus wechselt, obwohl man vielleicht gerade in einem anderen Programm am arbeiten ist..

Das Feld Tickertext wird beim öffnen über Postopen aus einem Dokument ausgelesen, und zwar indem in einer Ansicht das erste Dok gesucht wird und dort der Wert eines Feldes ausliest...
Ausserdem startet das Postopen dieser Maske einen NotesTimer, der eine IF-Abfrage enthält, die prüft, ob eine vorgegebene Zeit (bsp: 60 min) abgelaufen ist, und falls ja, dann wird der o. g. Mechanismus wiederholt.

Leider tritt das Problem auf, dass der Text sich für das Script nicht ändert, das Feld im Dokument hat sich aber sehr wohl geändert...

@koehlerbv:
Für Vorschläge wie ich das besser aufbauen könnte wäre ich natürlich sehr dankbar

koehlerbv:
Wir kommen der Sache näher  :)

Wo wird der Timer gestartet? Sicher im Client und nur, solange die DB geöffnet ist.
In der Ansicht gibt es demzufolge immer nur ein Dokument?
Übernimmt die JS-Routine überhaupt die Erkenntnisse des LS-Timers? Wurde das in "LS pure" überprüft?

Bernhard

klaussp:
Lassen wir die JS - Routine mal aussen vor, die funktioniert ja.

Ich fülle also mit meinem Event des Notestimers ein anderes Feld im UIdoc, falls sich in dem Konfigurationsdok was geändert hat. Und nur dann mache ich ein Reload der Maske, was zur Folge hat das sich mein JavaScript wieder den neuen Wert holt und der Ticker aktuell ist!

Ja, es gibt immer nur 1 Dok in der (Konfigurations)Ansicht!!!

Problem ist leider immer noch, dass das Dok bzw das Feld, welches aus dem Backend Dok über die Ansicht gelesen wird, sich nicht ändert, obwohl sich das Backend Dokument geändert hat (wie beschrieben, vor dem Lesen bereits view.refresh..)

koehlerbv:
Das ist wie Popel aus der Nase ziehen: Und wie wird das NotesUIDocument aktualisiert? Code!

klaussp:
da muss ich Dir jetzt recht geben, sorry!

Aber vielleicht wirds jetzt endlich klarer; vorweg noch eines:
das uidoc wird garnicht mehr abgefragt, sondern ich speichere einmalig im postopen den ersten wert in der Variable 'tickertext', und sollte sich dieser dann im Verlaufe des Timers von der Variable 'tickert' (der Wert aus dem Backend - Dok) unterscheiden, dann muss aktualisiert werden.


--- Code: ---Sub NTimerHandler(Source As NotesTimer)
On Error Goto errorhandler
nTime = nTime + 1

If nTime>=ticktime Then 'ticktime ist global und wird einmalig im postopen gesetzt!

Dim uiws As New NotesUIWorkspace

        Set tickerview = db.GetView("(Ticker)")
Call tickerview.Refresh
Set tdoc = TickerView.GetFirstDocument

If Not tdoc Is Nothing Then
tickert = tdoc.cTickertext(0)
End If
' Print tickert + "   -> " + tickertext 'Vgl ob Backend <> Frontend

'Prüfen ob sich der Tickertext geändert hat, falls ja wird der Frame neu geladen!!!

If tickert <> tickertext Then
Print "Der Newsticker hat sich geändert und wird neu geladen."
Call uiws.reloadWindow() 'Neu laden!
tickertext = tickert 'Vergleichsvariable auf neuen Wert setzen
End If
nTime=0    'Tickertime zurücksetzen!
End If
--- Ende Code ---

So, ändert aber nix an der Tatsache, dass der Wert den ich aus dem Backend Dokument bekomme nicht der Aktuelle ist.

Hoffentlich wirds jetzt klarer.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln