Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: schneie am 09.12.08 - 08:43:00

Titel: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 08:43:00
Hi,
hab jetzt zwei Tage das Forum bezüglich "computewithform" durchforstet, aber keine Lösung bzw. Hilfe finden können...  :'(

(Notes Server und Client 7.02)

Also ich habe Haupt- und Antwortdokumente. In den Hauptdokumenten gibt es ein berechnetes Feld (Text) 'Status', das sich aus einem Feld (Text) in den jeweiligen Antwortdokumenten berechnen soll.
Dazu werden die Werte der Antwortdokumente bei Änderung in "versteckte" Felder im Hauptdokument übertragen => das funktioniert perfekt.
Mein Problem:

Ich bekomme das berechnete Feld im Hauptdokument nicht aktualisiert. Öffne ich das entsprechende Dokument funktioniert es wie es soll. Ich möchte aber gerne das Dokument bzw. das Feld 'Status' im Backend bei Änderung eines Antwortdokumentes über computewithform automatisch aktualisieren.

Hab dazu ein Script geschrieben, das auch alles wie gewünscht ausführt, bis auf die Neu-Berechnung des berechneten Feldes...

Code
....
Dim docB As NotesDocument
Set docB = db.GetDocumentByUNID(docA.ParentDocumentUNID)
Call docB.ComputeWithForm(True,False)
Call docB.Save(True,True)

Ich Forum liest man immer wieder dass computewithform Fehler verursacht, aber kann man die Funktionsweise auch irgendwie debuggen? Denn was mich etwas iritiert ist, dass wenn ich das Script im Debugger verfolge, ist nichts zu erkennen.

Gibt es mittlerweile vielleicht eine alternative zu computewithform oder @Command([ToolsRefreshSelectedDocs]) bzw. gibts es vielleicht Anhaltspunkte an was computewithform scheitert?

Danke und Gruß
MF
Titel: Re: computewithform - "debuggen"!?
Beitrag von: Driri am 09.12.08 - 08:44:59
Warum berechnest Du das Feld nicht einfach immer neu, wenn ein Wert aus einem Antwortdokument übergeben wird ?
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 08:46:32
berechnet wird halt nur, wenn das Dokument 'refresht' wird. Und das passiert nicht, wenn es im Backend schlummert. Du musst das Feld dann explizit setzen.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 08:48:29
@Dau-in: Ich dachte genau das übernimmt doch computewithform!?

@Driri: Vielleicht seh ich den Wald vor lauter bäumen nicht mehr, aber wie meinst du dass?
Titel: Re: computewithform - "debuggen"!?
Beitrag von: Driri am 09.12.08 - 08:57:58
Ich gehe davon aus, daß das ein "Berechnet zur Anzeige"-Feld ist. Dazu solltest Du dir diesen Artikel mal durchlesen :

http://www.dominopower.com/issues/issue200812/00002287001.html


Du änderst ja das Hauptdokument sowieso, wenn sich in den Antwortdokumenten ein Wert ändert. In dem Zuge könntest Du doch einfach das Feld neu berechnen. Dafür sollte es dann allerdings vom Typ "Berechnet" sein.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 09:00:19
Nein das Feld ist ja bereits vom Typ "Berechnet".
Wie kann ich denn die Neu-Berechnung ohne computewithform im Backend anstoßen?
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 09:01:35
@Dau-in: Ich dachte genau das übernimmt doch computewithform!?


Validates a document by executing the default value, translation, and validation formulas, if any are defined in the document form.

Da machst du wirtklich alles einmal durch, und wenn da auf einen Wert zugegriffen wird, der nur im Frontend vorhanden ist, kanllt es. Wenn es sich nur um ein Feld handelt, würde ich das immer explizit setzen und gut ist.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 09:02:34
Nein das Feld ist ja bereits vom Typ "Berechnet".
Wie kann ich denn die Neu-Berechnung ohne computewithform im Backend anstoßen?

Gar nicht.
Deshalb ja explizit setzen.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 09:40:30
Sorry aber das Hilft mir nicht wirklich weiter bzw. ist das keine Lösung des Problems.
Die entsprechenden Felder haben auch nicht mit 'Berechnet zur Anzeige' zu tun.
Ich hätte gerne eine Möglichkeit, z.B. aus dem Queryclose des Antwortdokumentes automatisch ein 'Refresh' des Hauptdokumentes durchzuführen, oder zumindest das Feld Status neu berechnen zu lassen und dann speichern. Ich war der Meinung, dass dies über computewithform angestoßen würde!?
Wenn ich das Feld über die Hilfe von Herrn 'Manuell' setzen würde, wäre das ganze nicht sauber und sehr umständlich (=> hängt noch ein bisschen was hintendran...).
Ein [ToolsRefreshAllDocs] funktioniert ja auch.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 09:50:21
Wenn ich das Feld über die Hilfe von Herrn 'Manuell' setzen würde, wäre das ganze nicht sauber und sehr umständlich (=> hängt noch ein bisschen was hintendran...).


Was hängt da noch dran?
deine Aufgabenstellung:
In den Hauptdokumenten gibt es ein berechnetes Feld (Text) 'Status', das sich aus einem Feld (Text) in den jeweiligen Antwortdokumenten berechnen soll.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: koehlerbv am 09.12.08 - 09:54:32
Es gibt einige Funktionen, die von ComputeWithForm nicht ausgeführt werden (@dbxxxxxx zum Beispiel).

Berechne das Feld explizit und vergiss in diesem Zusammenhang ComputeWithForm.

Bernhard
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 09:56:00
(Theoretisch) => 50 Antwort-Dokumente => 50 verschiedene (einzelene) Felder die zur berechung beitragen.
Die liegen aber ja KORREKT im Hauptdokument und das Feld Status bräuchte "nur" seine Wert zu aktualisieren...

So einfach und doch so schwer  ;)
:-:
 
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 09:57:38
das steht in dem berechneten feld:

Code
@Unique(@Trim(ChargebackStatus:ControllingStatus:DatenserviceStatus:HausmeistereiStatus:InformatikStatus:InstitusserviceStatus:....))
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 10:08:20
dann schmeiss alles aus der Maske, was im Backend nicht geht.
Oder leg dir eine 2. Maske an, die du zum Berechnen hernimmst und in die du dann aber alles reinpackst, was berechnet werden muss.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: Hardcore-Hoschie am 09.12.08 - 12:27:20
Hi,

versuch mal das betroffene Feld vor dem ComputeWithForm aus dem zu berechnenden Dokument rauszuschmeißen (z.B. mittels RemoveItem)...
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 12:51:33
Ich versteh nicht ganz was diese Aktion bewirken soll: Wenn ich das entsprechende Feld lösche, dann ist es nach dem Speichern auch nicht mehr vorhanden...???
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 12:56:33
Ich versteh nicht ganz was diese Aktion bewirken soll: Wenn ich das entsprechende Feld lösche, dann ist es nach dem Speichern auch nicht mehr vorhanden...???

Validates a document by executing the default value, translation, and validation formulas, if any are defined in the document form.

When you create a new document, however, no form item exists in the back-end. To avoid having ComputeWithForm fall back to the default form, put a Form field on your form when you create it. That way, you start with something in the back-end, and you get the expected results from your new document. Otherwise, you can get results from fields that exist only in the default form, but not the document you create.
Hast du es ausprobiert?
Mit einer Maske, die keinen Fehler wirft?
Titel: Re: computewithform - "debuggen"!?
Beitrag von: Hardcore-Hoschie am 09.12.08 - 13:00:34
Ich versteh nicht ganz was diese Aktion bewirken soll: Wenn ich das entsprechende Feld lösche, dann ist es nach dem Speichern auch nicht mehr vorhanden...???

Ich habe die Erfahrung gemacht, dass ComputeWithForm Felder (häufig) nur dann berechnet, wenn die (noch) nicht vorhanden sind.
Wenn Du das Feld aus dem Dokument rausschmeißt und anschließend ein ComputeWithForm 'drüber jagst, dann wird das Feld dabei neu berechnet (ist ja in der entsprechenden Maske definiert) und ist somit wieder im Dokument vorhanden - zumindest, wenn das ComputeWithForm sauber gelaufen ist...
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 13:06:21
He das mit dem Feld löschen vor dem computewithform, ruft einen sehr interessanten Effekt hervor: In einer Ansicht ist die entsprechende zeile (in der das Feld Status angezeigt werden soll) leer und wenn ich mir die Eigenschaften des Dokumentes ansehe gibt es auch kein Feld Status.
Öffne ich aber das Dokument ist das Feld Status vorhanden und korrekt berechnet!?
Speichere ich nun das Dokuemnt wieder passt es!

Verrückt, oder?
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 13:13:04
Öffne ich aber das Dokument ist das Feld Status vorhanden und korrekt berechnet!?
Speichere ich nun das Dokuemnt wieder passt es!


sorry, aber das tut doch genau das, was es soll:
In der Maske ist ein berechnetes Feld enthalten, das beim Öffnen des Dokumentes berechnet wird. Wenn es noch kein Item mit diesem Namen gibt, wird beim Speichern des Frontenddokumentes ein entsprechendes Item im Backend erzeugt.

Was ist daran verrückt?
Oder verstehe ich deine Ausssage verkehrt?
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 13:18:06
ich glaub ich hab einen Denkfehler: ich lösche ja nicht das feld aus der gestaltungsmaske, sondern "nur" aus dem einen Dokument - von daher, ja macht was es soll.
Titel: Re: computewithform - "debuggen"!?
Beitrag von: Hardcore-Hoschie am 09.12.08 - 13:44:20
He das mit dem Feld löschen vor dem computewithform, ruft einen sehr interessanten Effekt hervor: In einer Ansicht ist die entsprechende zeile (in der das Feld Status angezeigt werden soll) leer und wenn ich mir die Eigenschaften des Dokumentes ansehe gibt es auch kein Feld Status.
Öffne ich aber das Dokument ist das Feld Status vorhanden und korrekt berechnet!?
Speichere ich nun das Dokuemnt wieder passt es!

Verrückt, oder?

Hast Du das Dokument auch nach dem ComputeWithForm gespeichert ? Wenn ja und das Feld ist trotzdem nicht am Dokument vorhanden, dann gibt's beim ComputeWithForm irgendein Problem...
Die Sache mit dem Anzeigen des Feldes beim Öffnen hat DAU-in ja schon erklärt...
Titel: Re: computewithform - "debuggen"!?
Beitrag von: DAU-in am 09.12.08 - 14:17:44
also,

ich hab das jetzt ausprobiert:
Maske mit berechnetem Feld, Eingabefeld und Feld, das den Maskennamen enthält
Ansicht mit Aktion mit folgendem Code:

               
Code
    
Dim session As New NotesSession
Dim doc As notesdocument	
Set doc = session.DocumentContext
Call doc.RemoveItem( "berechnet" )
Call doc.Save(False,False)
Call doc.ComputeWithForm(True,False)
Call doc.Save(False,False)	


Im Debugger kann ich verfolgen, dass das Item entfernt und wieder eingebaut wird.
Läuft also genauso, wie in der Hilfe beschrieben.

Grüsse

Dau-in
Titel: Re: computewithform - "debuggen"!?
Beitrag von: schneie am 09.12.08 - 14:52:49
Also, hab den "Fehler" bzw. die Inkompatibilität gefunden.
Hab einfach mal nach und nach alle Felder in der Maske entfernt bis ich den entsprechenden Bösewicht gefunden hatte. Wieso sich computewithform gerade bei diesem Feld aufhängt versteh ich zwar nciht, aber ohne dieses Feld funktioniert das aktualisieren wie gewünscht.
Die Formel in dem ebenfalls berechneten Feld funktioniert eigentlich auch bestens:

@TextToTime(@Subset(@Sort(@Unique(@Trim(ChargebackTermin:ControllingTermin:DatenserviceTermin:HausmeistereiTermin:InformatikTermin:InstitutsserviceTermin:OrganisationTermin:PKATermin:ProduktManagementTermin:SchemelTermin:SekretariatTermin:VertriebTermin));[Descending]);1))

Lange rede kurzer Sinn: computewithform kann ganz schön Kopfschmerzen verursachen. Ich kann nur empfehlen bei Problemen die Maske neu und sauber aufzubauen!

Danke euch allen für die Hilfe!