AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
20.09.20 - 09:05:35
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 9
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  Felder über ein Backend-Script neu berechnen lassen
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Felder über ein Backend-Script neu berechnen lassen  (Gelesen 960 mal)
vrhsva
Frischling
*
Offline Offline

Beiträge: 25


« am: 11.12.19 - 14:50:49 »

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 » Gespeichert

DominoServer 9.01 - Linux
NotesClient 8.5.3 - Windows 7
Peter Klett
Gold Platin u.s.w. member:)
*****
Online Online

Geschlecht: Männlich
Beiträge: 2690



« Antworten #1 am: 11.12.19 - 17:21:02 »

Wenn ComputeWithForm nicht funktioniert, wirst Du die Funktionalität wohl im Agenten nachbauen müssen
Gespeichert
SD
Aktives Mitglied
***
Offline Offline

Beiträge: 149


« Antworten #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.
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6479


Geht nicht, gibt's (fast) nicht... *g*


WWW
« Antworten #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.
Gespeichert

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...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
vrhsva
Frischling
*
Offline Offline

Beiträge: 25


« Antworten #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?
Gespeichert

DominoServer 9.01 - Linux
NotesClient 8.5.3 - Windows 7
Peter Klett
Gold Platin u.s.w. member:)
*****
Online Online

Geschlecht: Männlich
Beiträge: 2690



« Antworten #5 am: 13.12.19 - 13:50:25 »

Im ersten Beitrag das Symbol "Daumen hoch" eintragen
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: