Autor Thema: Felder über ein Backend-Script neu berechnen lassen  (Gelesen 3093 mal)

Offline vrhsva

  • Frischling
  • *
  • Beiträge: 25
Hallo

ich habe folgendes Szenario:

in einer Datenbank gibt es eine Reihe von Kinddokumenten, die eine Preiskalkulation enthalten. Da gibt es einige Eingabefelder und einige berechnete Felder. Beispiel für ein berechnetes Feld:
Anzahl * Stunden * Stundensatz
Der Stundensatz wird ebanfalls berechnet und zwar mit der Formel @eval(meinFormelFeld)
In dem meinFormelFeld steht eine Formel, die unter anderem auf ein Profil-Dokument zugreift.
Also praktisch gesehen werden die Stundensätze zentral in einem Profil-Dokument gepflegt und bei Änderung sollen die Preiskalkulationen alle neu berechnet werden.

Das soll über einen Agenten gemacht werden, der alle Preiskalkulations-Dokumente einmal im Backend öffnet, ein ComputeWithForm durchführt und abspeichert.
Leider scheint das ComputeWithForm die Formeln in den Formelfeldern aber nicht auszuführen. Zumindest wurden nach der Ausführung die Stundensätze in den Dokumenten nicht aktualisiert, was ich ja eigentlich damit erreichen wollte.

Gibt es da ne andere Möglichkeit, ohne dass man die Dokumente im UI öffnen und ein RefreshHideFormulas durchführen muss?
« Letzte Änderung: 05.02.20 - 10:12:32 von vrhsva »
DominoServer 9.01 - Linux
NotesClient 8.5.3 - Windows 7

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Felder über ein Backend-Script neu berechnen lassen
« Antwort #1 am: 11.12.19 - 17:21:02 »
Wenn ComputeWithForm nicht funktioniert, wirst Du die Funktionalität wohl im Agenten nachbauen müssen

Offline SD

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Felder über ein Backend-Script neu berechnen lassen
« Antwort #2 am: 11.12.19 - 18:31:29 »
Wenn ich Profildokument höre, muss ich immer an Caching denken.

Theoretisch könnte sein, dass der Agent noch mit dem alten Wert aus dem Profildokument arbeitet, und sich deswegen nichts ändert. Ebenso kann es aber auch sein, dass der Agent die Werte richtig ausrechnet, aber wenn man am Client das Dokument wieder öffnet, um die Werte nachzuschauen, werden die Computed-Felder nochmal am Client neu berechnet und dafür werden dann die alten Werte aus dem Profildokument verwendet.

Ich würde den Agent mal so ergänzen, dass er alle relevanten Feldwerte vor dem ComputeWithForm rausprintet und dann nach dem ComputeWithForm nochmal. Dann weiß man schon mal sicher, was der Agent macht.

Wenn das richtig ist, würde ich im Client ohne das Dokument zu öffnen (auch nicht in einer Vorschau) in den Dokumenteigenschaften nachschauen, was in den Feldern gespeichert ist.

So kann man zumindest schon mal eingrenzen, wo genau der Fehler liegt.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Felder über ein Backend-Script neu berechnen lassen
« Antwort #3 am: 11.12.19 - 19:28:51 »
ComputeWithForm ist ziemlich unzuverlässig: genau wie das frontend arbeitet es die Felder von oben nach unten und links nach rechts ab. Wirft ein Feld einen Fehler (z.B. text erwartet o.ä.) dann wird der Rest der Maske nicht weiter berechnet. Dabei werden ber3chnet zur Anzeige Felder NICHT berechnet, rechnest Du also mit einem Feld, das nur Cfd ist, dann wird die Formel auf einen Fehler laufen. Wenn es wirklich nur eine einfache Muliplikation ist, würde ich den Code in Script nachbauen und das ergebnis per Replaceitemvalue direkt ins Dokument schreiben.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline vrhsva

  • Frischling
  • *
  • Beiträge: 25
Re: Felder über ein Backend-Script neu berechnen lassen
« Antwort #4 am: 13.12.19 - 12:40:20 »
Vielen Dank für die Anregungen.
Bin selbst durch Einblenden der versteckten Formelfelder auf die Lösung gekommen.
Und zwar hatte ich die Felder, die die Formeln für andere berechnete Felder enthalten mit dem Feldtyp "Formula" versehen. Als Einstellung dafür "Literalize Fields". Nun habe ich beim Öffnen des Dokumentes gesehen, das der Inhalt des Formelfeldes alle Variablen, die sich auf Feldnamen beziehen, durch den Wert des Feldes ersetzt hat.
Das ist natürlich doof, wenn die Felder weit dahinterliegen. Eigentlich wollte ich ja, dass die Formeln in den Formelfelder erst ausgeführt werden, wenn sie in einem anderen Feld mit @eval(Formelfeld) aufgerufen werden.
Nun habe ich sämtliche Formelfelder als berechnete Textfelder deklariert und die Berechnungs-Formel selbst in {} geschrieben. Somit werden die Formeln erst ausgeführt, wenn sie dran sind.
Anschließend funktionierte auch computewithform und aus der Ansicht heraus @command([ToolsRefreshSelectedDocs]).

Eine Frage noch: Wo muss ich denn hier klicken, damit dieser Thread in der Übersicht als erledigt (geschlossen) angezeigt wird?
DominoServer 9.01 - Linux
NotesClient 8.5.3 - Windows 7

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Felder über ein Backend-Script neu berechnen lassen
« Antwort #5 am: 13.12.19 - 13:50:25 »
Im ersten Beitrag das Symbol "Daumen hoch" eintragen

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz