Domino 9 und frühere Versionen > ND8: Entwicklung
Refresh über Nacht
Hendrik T.:
Hallo Freunde,
ich bin jetzt schon seit Stunden am rumprobieren und Zweifeln. Bin ich gerade so doof oder ist es nicht so trivial, wie ich eigentlich denke?
Es geht um den Refresh von Dokumenten.
Ich habe in einer Maske ein Feld, was über Nacht mit einer Latte von Daten gefüttert wird. Zwischen den einzelnen Daten fügt der Agent immer ein ";" ein, das Zielfeld hat die Einstellung, Werte bei ";" trennen und mit neuer Zeile anzeigen.
Als Ergebnis erwartet ich Morgens also immer sowas:
String;String;String...
Wenn ich per Doppelklick in den Bearbeitungsmodus gehe und dann sofort wieder speicher, versteht die Maske endlich, dass es sich um verschiedene Werte handelt und zeigt das so an:
String
String
String
Über einen Refresh Agenten, der mit einem Workspace und UI dokumenten arbeitet, kriege ich auch alle auf Mal refresht und optisch so, wie ich das will. Aber dafür muss halt der Client offen sein.
Ich möchte aber, dass dieser Refresh Nachts nach allen anderen Agenten abläuft und mich Morgens die Datenbank so erwartet, wie ich mir das vorstelle. Versteht ihr mein Problem bzw. ist es überhaupt eins? Kennt ihr eine Lösung?
Vielen Dank schonmal!
ghostmw:
Wie schreibst du die Daten mittels Agenten ?
so
document.ReplaceItemValue ( "feld" , vorhandenerWert + ";" + neuerWert )
?
Dann liegt dort der Fehler begraben!
Sieh mal in der Hilfe bei Arrays nach und wie man diese erweitert bzw. wegschreibt (ArrayAppend, Split ... etc. sind passende LotusScriptbefehle, die dir helfen könnten).
Poste vielleicht auch nochmal kurz die entsprechende Codestellen, die die Werte in die Dokumente wegschreiben.
Hendrik T.:
Im Endeffekt läuft es darauf hinaus:
...
doc.ACL = doc.ACL(0)+";"+gesamtacl
Call doc.save(True,True,True)
Set doc = coll.getNextDocument(doc)
Loop
...
Peter Klett:
Ein Feld (genauer ein Item) weiß nichts darüber, welches Zeichen als Trennzeichen für Mehrfachwerte definiert ist. Diese Definition erfolgt in einem Feld in einer (Teil-)Maske und hat solange nichts mit dem Dokument zu tun, bis das Dokument mit dieser Maske bearbeitet wird. Das ist wichtig für das Verständnis, wie und warum Dinge in Notes funktionieren oder eben nicht.
Du schreibst z.B, dass Du mit einem Agenten Felder in einer Maske füllst. Das kann man so sagen, ist aber genau genommen falsch. Du füllst mit dem Agenten Items in Dokumenten. Die Maske spielt dabei überhaupt keine Rolle.
Items mit Mehrfachwerten, die über einen Backendagenten gefüllt werden, müssen daher korrekt gefüllt werden, also mit einem Array, und nicht mit einem String mit Trennzeichen (das hat ghostmw auch schon geschrieben).
Eine Möglichkeit für Deinen Code wäre (gibt sicherlich auch noch eleganter Varianten) unter der Annahme, dass gesamtacl nur einen einzigen Eintrag darstellt und nicht leer ist:
Dim acl As Variant
If doc.ACL (0) = "" Then
doc.ACL = gesamtacl
Else
acl = doc.ACL
Redim Preserve acl (Ubound (acl) + 1)
acl (Ubound (acl)) = gesamtacl
doc.ACL = acl
End If
Call doc.Save (True, True)
...
Keine Gewähr für Tipp- oder Syntaxfehler
Fineas:
In solchen Fällen immer wieder schön und einfach: erst einen String mit Trennzeichen zusammenbauen, dann diesen in einen Variant splitten mit selbigen das Feld betanken. Einfach und effektiv ohne lästiges Array-Handling.
strACL = doc.ACL(0) +";"+ strACL
...
varACL = split( strACL, ";")
call doc.replaceitemvalue( "ACL", varACL )
Gruß, Heiko
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln