Log-Feld automatisch bei Speicherung füllen

  • Hallo Leute,


    ich stehe gerad mal ganz derbe auf dem Schlauch und komme nicht dahinter, wie ich meinen Code aufbauen muss.


    Ich habe ein berechnetes Text-Feld "history", in dem Mehrfachwerte zugelassen sind. Als Vorgabewert ist "Erstellt durch..." hinterlegt. Und dazu liegt das Feld noch in einer Teilmaske.


    Jetzt möchte ich, dass bei jeder Speicherung und bei diversen Aktionen ein Eintrag in das Feld eingefügt werden. Bei Speicherung also z.B. "Bearbeitet durch..." und bei diversen Aktionen z.B. "Status auf aktiv gesetzt durch...".


    Bei den Aktionen packe ich das natürlich in die Aktion selbst, bei der Speicherung wollte ich das in das "Querysave" der Teilmaske stecken, wo es meiner Ansicht nach auch hingehört.


    Ich habe diesen Code-Schnipsel vor gefühlten 100 Jahren mal gemacht und immer wieder kopiert, doch jetzt ist er irgendwie weg und ich stehe mangels Übung auf dem Schlauch. Nachdem ich mit der Formel-Sprache nicht weiterkomme, habe ich es auch mit ArrayAppendText probiert, da komme ich auch nicht weiter. Doch eigentlich ist das doch nicht wirklich schwer.


    Wer kann mir helfen? Vielen Dank im voraus!

    • Offizieller Beitrag

    Was hast Du schon an Code?


    Wo bleibst Du hängen?


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hallo Dirk,


    naja, ich habe recht einfach gedacht, und es erstmal so probiert:

    Code
    @If(
    	@IsDocBeingSaved;
    	@SetField("history";history + "Blabla");
    	"");


    Nur führt das ja leider nicht zum Ergebnis, weil das Dokument anschließend nicht mehr gespeichert wird. Ein angefügtes FileSave geht auch nicht, es führt zur Fehlermeldung "Versuch, verschachtelte Maskenereignisse auszuführen". Ist ja auch logisch, eine FileSave im QuerySave kann ja auch nur zu einer Endlosschleife führen.

    • Offizieller Beitrag

    QuerySave ist doch VOR dem Speichern, d.h. Du brauchst nicht per Code das UI-Dokument zu speichern.


    Anders sieht es im PostSave aus, dort wurde das Dokument schon gespeichert und Du musst dafür sorgen, dass es bei Änderungen noch einmal gespeichert wird.


    Der richtige Platz ist schon QuerySave.


    Gruß
    Dirk

  • Ok, danke Euch, das ist wohl wahr, IsDocBeingSaved macht tatsächlich keinen Sinn. Bleibt ein einfach @SetField, was aber nicht wirklich funktioniert.


    Variante 1:
    Das Feld ist Bearbeitbar, was ja überhaupt nicht gewollt ist, weil jeder es ändern könnte. Umgehung würde ich machen, indem ich das Feld verberge und ein berechntes Feld displayhistory mache. Aber: Ich verwende jetzt folgenden Code im QuerySave:

    Code
    @If(
    	@IsNewDoc;
    		@SetField("history";"Erstellt am " + @Text(@Date(Created)) + " um " + @Text(@Time(Created)) + " von " + @Name([CN];CreatedBy));
    		@SetField("history";"Bearbeitet durch: " + @Name([CN];@UserName) + " am " + @Text(@Date(@Now)) + " um " + @Text(@Time(@Now)) + "," + history )
    	);


    Das Ergebnis ist nicht wirklich gut. Der erste Eintrag bei einem neuen Dokument ist in Ordnung, bei der ersten Bearbeitung funktioniert es auch einwandfrei. Doch bei der zweiten Bearbeitung wird der erste Bearbeitungseintrag gedoppelt:

    Zitat


    Bearbeitet durch: Jokeman am 23.02.2009 um 16:21:53
    Bearbeitet durch: Jokeman am 23.02.2009 um 16:21:46
    Bearbeitet durch: Jokeman am 23.02.2009 um 16:21:53
    Erstellt am 23.02.2009 um 16:21:28 von Jokeman


    Kann mir jemand verraten, woran das liegt?


    Variante 2:
    Das Feld ist Berechnet, es werden jedoch keine Einträge hinzugefügt, obwohl ich meiner Meinung nach sehr wohl berechnete Felder per @SetField ändern kann. Irre ich da?


    Variante 3:
    Ich trenne mich von QuerySave und nutze nur ein berechntes Feld und füge o.g. Code als Berechnungsformel ein. Der auftretende Fehler ist identisch mit Variante 1.


    Global:
    Mal unabhängig von der Lösung der o.g. Fehler, bin ich total auf dem Holzweg? Gibt es elegantere Lösungen? Oder ist zumindest mein Ansatz richtig?


    Vielen Dank im voraus!

  • Setze das, was Du hinzufügen willst, komplett in Klammern. Sonst führen die "alleinstehenden" "+"-Zeichen zu genau dem, was Du siehst.


    Verwende die Variante mit dem berechneten Feld - Du baust Dir sonst mir dem Formelkram das Event zu für spätere ernsthafte Verwendung des QuerySave-Events (wozu man normalerweise LotusScript verwendet).
    Events und Formelsprache sind sowieso so ein eigen Ding (und eigentlich gar nicht dafür gedacht).


    HTH,
    Bernhard

  • Bernhard: Ok, ich habe das jetzt als berechnetes Feld gemacht und den Code wie folgt hinterlegt:

    Code
    @If(
    	@IsNewDoc;
    		@SetField("history";"Erstellt am " + @Text(@Date(Created)) + " um " + @Text(@Time(Created)) + " von " + @Name([CN];CreatedBy));
    		@SetField("history";("Bearbeitet durch: " + @Name([CN];@UserName) + " am " + @Text(@Date(@Now)) + " um " + @Text(@Time(@Now)))+ "," + history )
    	)


    Die Folge ist die ständige Doppelung der bisherigen Einträge. Egal, ob ich das Komma, das ich zur Trennung der Mehrfachwerte gedacht habe, mit in die Klammer ziehe oder draußen lasse, es führt immer zur Doppelung der Einträge. Lasse ich das Komma komplett weg, wird der Eintrag nicht als neuer Wert erkannt und die Einträge werden einfach als Fließtext interpretiert.


    taurec: Schau mal genau hin, der erste und der dritte Eintrag sind identisch. Speichere ich nochmal, sieht es so aus:

  • Ja ist mir gerade auch aufgefallen.


    Aber du solltest nochmal koehlerbv's Hinweis durchlesen: Er hat davon geschrieben den ganzen Eintrag in Klammern einzufassen, nicht wie du es machst nur Teile davon.


    Außerdem ist es mehr als unglücklich bei Mehrfachwerten mit Komma als Trennzeichen im berechneten Feld zu arbeiten. Nicht umsonst gibt es dafür den Doppelpunkt ohne Anführungszeichen

  • taurec: Habe ich doch gemacht, koehlerbv hat geschrieben "was Du hinzufügen willst", und das habe ich doch auch gemacht. Aber der entscheidende Hinweis war der Doppelpunkt. Ich muss ehrlich gestehen, das kannte ich noch garnicht. Vielen Dank für den Hinweis, jetzt läuft es einwandfrei.


    Aber bevor ich den thread auf "erledigt" setze, gestattet mir noch eine Frage: Ist die Lösung jetzt ok so oder würdet Ihr es anders lösen? Auch Script ist willkommen, ich erweitere gerne meinen Horizont!

  • Schade, dass niemand geantwortet hat, so unberechtigt war die Frage nach einer Alternative nicht. Denn: So wie das Feld jetzt ausgestattet ist, wir natürlich bei jeder Dokument-Aktualisierung das Feld mit einem neuen Eintrag versehen. Normalerweise natürlich nur dann, wenn das Dokument gespeichert wird, aber ein einfaches F9 reicht für einen neuen Eintrag.


    Wer kann mein Problem lösen oder eine Alternative aufzeigen?


    Vielen Dank im voraus!

    • Offizieller Beitrag

    berechne das Log im QuerySave, dann musst Du Dich nicht um das Event Speichern kümmern. Alles andere sind Handstände.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein