Autor Thema: Refresh über Nacht  (Gelesen 2465 mal)

Offline Hendrik T.

  • Frischling
  • *
  • Beiträge: 33
Refresh über Nacht
« am: 19.06.12 - 14:55:29 »
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!
Nur ein Praktikant, der sich mit diversen Notes (8.5) Applikationen rumärgern darf ... ;)

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Refresh über Nacht
« Antwort #1 am: 19.06.12 - 15:00:00 »
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.
« Letzte Änderung: 19.06.12 - 15:01:45 von ghostmw »
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Hendrik T.

  • Frischling
  • *
  • Beiträge: 33
Re: Refresh über Nacht
« Antwort #2 am: 19.06.12 - 15:28:38 »
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
...
Nur ein Praktikant, der sich mit diversen Notes (8.5) Applikationen rumärgern darf ... ;)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Refresh über Nacht
« Antwort #3 am: 19.06.12 - 15:58:48 »
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

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: Refresh über Nacht
« Antwort #4 am: 19.06.12 - 16:02:01 »
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
« Letzte Änderung: 19.06.12 - 16:07:15 von Fineas »

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Refresh über Nacht
« Antwort #5 am: 19.06.12 - 16:09:23 »
... stimmt, dann aber konsequenterweise so ...

if Join ( doc.ACL , "" ) = "" then
     doc.ACL = NEUERWERT
else
    doc.ACL = Split ( Join ( doc.ACL, ";" ) + ";" + NEUERWERT , ";" )
end if
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Hendrik T.

  • Frischling
  • *
  • Beiträge: 33
Re: Refresh über Nacht
« Antwort #6 am: 19.06.12 - 16:23:46 »
Das mit dem Array hatte ich befürchtet, wollte irgendwie drumrum kommen ;)

Aber mit dieser Split Funktion sieht das ja echt elegant aus. Danke! Werde ich gleich Morgen in Ruhe ausprobieren. Jetzt mache ich erstmal Feierabend :P
Nur ein Praktikant, der sich mit diversen Notes (8.5) Applikationen rumärgern darf ... ;)

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: Refresh über Nacht
« Antwort #7 am: 20.06.12 - 08:39:16 »
@ghostmw:

Ohne zusätzliche Infos kann ich keine Konsequenz erkennen. Geht es darum leeren Einträge zu filtern? Geht es darum, die Werte bei jedem Lauf zu ersetzen oder sollen sie ergänzt werden? Beim Einsatz vom Split läßt sich die if-Abfrage auch elegant vermeiden, indem man den Delimiter als Variable erst nach dem ersten Durchlauf setzt. Nachvollziehbar einfacher Code, der der Aufgabenstellung gerecht wird: das ist konsequent.

Gruß, Heiko

Offline Hendrik T.

  • Frischling
  • *
  • Beiträge: 33
Re: Refresh über Nacht
« Antwort #8 am: 20.06.12 - 09:09:07 »
Die IF Abfrage habe ich weggelassen, die ist nicht nötig. Liegt daran, dass das Feld nicht leer sein kann, da die ACLs von den Datenbanken abgefragt werden. Und da ist ja zumindest die Gruppe "$Administratoren" u.ä. gepflegt, daher kommt immer was in das Feld.

Habe es getestet, funktioniert wunderbar. Ich danke euch! :)
Nur ein Praktikant, der sich mit diversen Notes (8.5) Applikationen rumärgern darf ... ;)

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Refresh über Nacht
« Antwort #9 am: 20.06.12 - 09:11:42 »
@Fineas: ... solange das richtige rauskommt, ist der Weg doch zweitrangig oder ?
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: Refresh über Nacht
« Antwort #10 am: 20.06.12 - 15:28:46 »
@ghostmw:

Grundsätzlich ja und grundsätzlich nein. Aber das ist ein Thema für sich. Deshalb nur kurz:

Ich sitze jeden Tag vor irgendwelchem Code und ärgere mich entweder über mich selbst oder über andere, weil der Weg, wenn man ihn ein zweites mal begehen will oder muss, extrem beschwerlich sein kann. Quick & Dirty ist keine Philosophie oder Strategie, sondern viel zu oft eine unpassende aber akzeptierte Entschuldigung.

Gruß, Heiko

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Refresh über Nacht
« Antwort #11 am: 20.06.12 - 16:53:35 »
@Fineas: ja ... geb ich dir Recht.

Ich versuche nur fast immer alle möglichen (und manchmal auch unmögliche) Sachen abzufangen, dazu gehört auch das Abfangen mit dem leeren Inhalt beim ersten Befüllen eines möglichweise bereits vorgefüllten Feldes.

Deswegen der etwas umfangreichere Code ... spricht doch nichts dagegen oder ?
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz