Autor Thema: wie Backend Dokument aktualisieren???  (Gelesen 3653 mal)

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
wie Backend Dokument aktualisieren???
« am: 18.12.06 - 22:55:19 »
Hallo!

mein Problem ist, dass ich über ein Notes - Timer Event im Backend regelmäßig das gleiche Dokument auf Änderungen abfragen möchte. Leider liefert mir die Funktion immer wieder den alten Wert zurück, obwohl das Dokument längst geändert wurde. (Dokument wird nur als NotesDocument geöffnet, nicht als UI!)

Kann man das Backend Doc irgendwie entladen, neu laden, ...
Jetzt fehlt mir ein Ansatz und gefunden hab ich im Forum leider auch nix brauchbares, bin wohl einfach zu d...

Grüsse, Klaus
« Letzte Änderung: 18.12.06 - 23:04:40 von klaussp »
Klaus

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #1 am: 18.12.06 - 23:06:27 »
Ohne nähere Erläuterungen, insbesondere
- Zweck der Aktion (angestrebte Ziele)
- bisheriger Code
geht da gar nichts - unsere Kristallkugeln hängen nämlich schon am Weihnachtsbaum.

Beflügeln würde auch, wenn noch offene Postings eine Replik erfahren wie Doc im Backend suchen und zum Bearbeiten suchen.

Bernhard

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: wie Backend Dokument aktualisieren???
« Antwort #2 am: 18.12.06 - 23:06:58 »
Nicht so viele Details!  ;)

Wo/wie bekommst Du Dein Backend-Dokument her?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #3 am: 18.12.06 - 23:13:05 »
OK, sorry, dachte es gäbe eventuell was einfaches.

Ich hole mein Dokument aus einer Ansicht, dort immer das erste. Die Ansicht aktualisiere ich in jedem Durchlauf zuvor:

Zitat

Dim Tickerview As NotesView
Set tickerview = db.GetView("(Ticker)")

Call tickerview.Refresh
Set tdoc = TickerView.GetFirstDocument
   
If Not tdoc Is Nothing Then
tickert = tdoc.cTickertext(0)
...
hier erfolgt dann ein Vergleich ob das Feld im geöffneten uidoc sich von dem im tdoc unterscheidet... und dann halt reload wenn nötig...
End If

Sorry, das letzte Posting habe ich jetzt nochmals dokumentiert.

Klaus

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #4 am: 18.12.06 - 23:30:35 »
Der Informationsgehalt Deines letzen Postings überschreitet das der Ausgangsfrage de facto nicht. Sorry, dazu kann ich nicht mehr sagen.
Das wichtigste wäre: Was ist das ZIEL?

Abgesehen davon: Das NotesUIWorkspace.CurrentDocument mit dem jeweils ersten Dokument einer Ansicht zu vergleichen - und das noch in Verbindung mit einem NotesTimer-Event - halte ich für katastrophal (u.a. - der Timer läuft immer weiter ...).

Also: Ohne Deinen Plan zu kennen, halte ich mich hier heraus.

Bernhard

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #5 am: 18.12.06 - 23:38:16 »
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
« Letzte Änderung: 18.12.06 - 23:49:57 von klaussp »
Klaus

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #6 am: 18.12.06 - 23:48:46 »
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

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #7 am: 18.12.06 - 23:54:00 »
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..)
Klaus

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #8 am: 19.12.06 - 00:08:29 »
Das ist wie Popel aus der Nase ziehen: Und wie wird das NotesUIDocument aktualisiert? Code!

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #9 am: 19.12.06 - 00:15:38 »
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

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.
« Letzte Änderung: 19.12.06 - 00:18:57 von klaussp »
Klaus

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #10 am: 19.12.06 - 00:24:49 »
Hoffentlich wirds jetzt klarer.

Ich gebe jetzt endgültig auf! Wieder Fragmente, obwohl es ja schon hilfreich gewesen wäre zu wissen, welche Teile dieser Routine denn nun noch nachweislich ausgeführt werden. He, wir machen das hier "nebenbei", und dabei können wir eben nicht noch ständig nebenbei die Kristallkugel reiben.

Bernhard

PS: Um nur eine Sache zu nennen - wenn "nTime" (tolle Variablenbezeichnung!) integer ist und Du 60 Minuten erreichen willst, dann wäre das schon eine der zahlreichen Möglichkeiten.
Ich bin jetzt hier aber wirklich 'raus aus der Sache.

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #11 am: 19.12.06 - 00:31:12 »
Der Code wird definitiv ausgeführt, auch zur richtigen Zeit. Das ist alles nicht mein Problem. Mein Problem ist definitiv nur, dass 'tdoc' hier in meinem geposteten Code keine aktuellen Werte des Backend-Dokumentes 'tdoc' zurückliefert. Dazu habe ich das mitlerweile auskommentierte
Code
Print tickert + "   -> " + tickertext  'Vgl ob Backend <> Frontend
benutzt.

Zitat
Um nur eine Sache zu nennen - wenn "nTime" (tolle Variablenbezeichnung!) integer ist und Du 60 Minuten erreichen willst, dann wäre das schon eine der zahlreichen Möglichkeiten.

nTime ist Integer
60 minuten = 3600 sekunden - Integer kann meines Wissens bis +32.768 ganzzahlig, wo ist das Problem?
...und zum testen nehme ich natürlich auch erstmal kürzere Werte, sonst müsste ich ja immer ewig warten...
« Letzte Änderung: 19.12.06 - 00:33:00 von klaussp »
Klaus

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: wie Backend Dokument aktualisieren???
« Antwort #12 am: 19.12.06 - 02:20:31 »
Ich verstehe zwar aus den obigen Angaben leider - genauso wie Bernhard - nur Bahnhof,
aber:

Beim NotesTimer gibt's ne böse Falle  - vielleicht bist Du da reingetappt...
Ich vermute dies mal aufgrund Deiner "60 minuten = 3600 sekunden" Angabe in #11.
Angenommen Du hast Deinen NotesTimer auf ein Intervall von 1 ( = 1 Sekunde) deklariert.

Aus der Designerhilfe zum NotesTimer:

After setting the NotesTimer object, use the On Event statement to establish an event handler for the Alarm event. Then write the event handler as user code. Design the user code such that it completes in a time period less than the NotesTimer object's interval trigger. Unexpected results occur if the user code takes longer to complete than the specified interval.
Dein Usercode ( NTimerHandler) läuft noch, wenn der nächste Alarm Event schon wieder feuert.

"Unexpected results occur" heißt dann im "Lotus-Deutsch" nix anderes, als dass Dein Programm nicht ordentlich ausgeführt wird.

Setze testhalber mal Dein TimerIntervall auf 10 Sekunden und folgedessen die Berechnung auf "nTime = nTime + 10"
Ein Versuch ist's wert.

Auf die ticktime und nTime Geschichte kannst Du nebenbei bemerkt vollständig verzichten, wenn Dein Timer z.B. gleich im 60 Sekunden-Intervall den Alarm Event auslöst, es sei denn, auch das soll der User noch selbst eingeben können.

Nebenbei bemerkt, finde ich es äußerst amüsant, dass Lotus empfiehlt, den Programmcode (!) so zu entwickeln, dass dieser innerhalb des TimerIntervalls ablaufen kann. Das wird 'ne langwierige Optimierung werden, wenn 90% der Coder den Beispielcode aus der Hilfe übernehmen, in dem 1 Sekunde als Vorgabe steht. Den TimerIntervall so zu erhöhen, dass dieser dem Programmcode entspricht, scheint wohl zu einfach? Lustig.

Gruß,
Uwe
« Letzte Änderung: 19.12.06 - 03:08:58 von datenbanken24 »

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #13 am: 19.12.06 - 08:48:03 »
Hallo Uwe,

das mit dem TimerEvent war mir eine große Hilfe. Die Beispiele sind natürlich wirklich albern! Die Stelle hatte ich natürlich garnicht betrachtet, da ich bisher immer Dinge ausgeführt habe die wohl sehr schnell durch waren... Habe das Intervall jetzt auf 10 Sekunden gesetzt.
Es sieht nun allerdings so aus, dass das Dokument im Backend trotzdem ständig im Zugriff ist, und nicht geschrieben werden kann, es kommen fehlermeldungen like

"Eine weitere Kopie des Dokumentes wurde gespeichert, während Sie das Dokument bearbeiten. Sollen Ihre Änderungen auch als Konfliktdokument gespeichert werden?"

"Notes Fehler - Ein anderer Benutzer hat dieses Dokument zur gleichen Zeit geändert"

Jetzt frage ich mich, warum das Dokument das nur im Backend geöffnet ist, nicht neu gespeichert werden kann?!

Grüsse,
Klaus
Klaus

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: wie Backend Dokument aktualisieren???
« Antwort #14 am: 19.12.06 - 08:49:38 »
Weil mehrere Personen/Clients gleichzeitig drauf zugreifen?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #15 am: 19.12.06 - 08:57:49 »
naja, bisher greife ich eigentlich nur selber darauf zu! Geplant ist aber das Teil ca. 1000 Usern zur Verfügung zu stellen...

also zum einen läuft meine Maske mit dem Ticker, die zum test jetzt alle 60 Sekunden nachschauen soll, ob sich das Konfigurationsdok im Backend geändert hat, und ich hole zwischendurch das Konfigurationsdok aus dem Backend ins Frontend zum ändern und will es neu speichern.
Klaus

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: wie Backend Dokument aktualisieren???
« Antwort #16 am: 19.12.06 - 11:40:26 »
Klaus,

Du machst noch irgendwas, was Du uns hier "nicht verraten willst".

Dein Code in #9 KANN NIEMALS mit Deiner Fehlermeldung in #13 zusammen passen.

Diese Fehlermeldung kommt beim Speichern oder Modifizieren eines Doks - niemals beim einfachen Auslesen von Werten, so wie es in Deinem geposteten Code steht. Dein Timercode kann im Backend-Doc Werte auslesen bis zum jüngsten Gericht - solange er NUR LIEST, kann er nicht für diese Fehlermeldung verantwortlich sein.

Das ganze ist ein Puzzle/Rätsel, wo zu viele Teile fehlen.
Da geht es mir genau so wie Bernhard. Keine Chance zum Helfen...
Leg die Datenbank hier rein und ein paar Sätze, welcher Code in welchem Event was machen soll und die Sache wäre in einer Stunde erledigt.

Gruß,
Uwe

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #17 am: 19.12.06 - 11:45:26 »
Da haste Recht, die Fehlermeldung kommt von folgendem Code. (Hier wird das Backend Dokument vom Admin zum Bearbeiten geöffnet um den Tickertext zu ändern!)

Code
Sub Click(Source As Button)
	On Error Goto errhandler	
	Dim s As New NotesSession	
	Dim ws As New NotesUIWorkspace
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim uidoc As NotesUIDocument
	Dim AIdoc As NotesDocument
	Dim unid As String
	
	Set db = s.currentdatabase
	Set view = db.GetView("(Ticker)")
	Set Tickerdoc = view.GetFirstDocument
	
	If Tickerdoc Is Nothing Then
		Print "Fehler - kein Ticker-Konfigurations-Dokument vorhanden!"
		'Anlegen eines Ticker-Konfigurations-Dokumentes
		Dim doc As notesdocument
		Set doc = db.CreateDocument
		doc.form = "(TickerKonfiguration)"
		Call doc.Save(True,False,False)		
		Set uidoc = ws.EditDocument(True,doc)
	Else
		Set uidoc = ws.EditDocument(True,Tickerdoc)
	End If
	Exit Sub
errhandler:
	Msgbox " "  + Error$ + " !!   Zeile: " + Str(Erl)
End Sub
« Letzte Änderung: 19.12.06 - 17:34:26 von klaussp »
Klaus

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: wie Backend Dokument aktualisieren???
« Antwort #18 am: 19.12.06 - 11:57:33 »
Das glaub ich nicht, Tim/Klauss.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: wie Backend Dokument aktualisieren???
« Antwort #19 am: 19.12.06 - 20:56:15 »
Zitat
Das glaub ich nicht, Tim/Klauss.
versteh ich nicht?! ich klaussp, nicht klauss...

Aber OK, habe jetzt endgültig verstanden das Ihr das Beispiel braucht, also hab ich das nötigste mal in ne Test - DB gepackt...

Beim ersten Anpassen des Tickertextes kommt keine Fehlermeldung, der Ticker ändert sich aber auch nicht. Falls man dann nochmal die Tickerkonfig öffnet, dann sieht man den ganz alten Tickertext, und wenn man den ändert, dann kommen nochmal die oben geposteten Speicher-Fehlermeldungen...

_
Alternativ dazu habe ich mitlerweile einen Versuch gestartet das ganze mit Profildokumenten abzufackeln, aber die werden ja erst recht gecached...
Klaus

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz