Bin am Ende - refresh von computed fields

  • Hi,


    ich weiss nicht weiter.


    Habe ein Formular. Dieses Formualr wird per script erstellt und bekommt dabei ein Datum.
    Jetzt habe ich einige computed fields mit DB lookup in diesem Formular, die sich aufs Datum beziehen.
    Oeffne ich das Formular, dann passiert nichts mit dem DBlookup die Felder sind leer. Wenn ich dann in Edit mode gehe und F9 druecke, dann ist alle ok und die DBlookups funktionieren.


    Wie kann ich das nur mit eine Formal oder mit script loesen, dass ich das Dokument oeffne und die computed Fields werden kurz aktualisiert.
    Ich habe schon einiges versucht, doch nichts geht.


    Hilfe!!!!
    Danke
    Seba

    • Offizieller Beitrag

    hast Du in dem Script, welches die Dokumente erstellt ein NotesDocument.ComputeWithForm verwendet?


    Ansonsten, falls Du dies nicht willst, kannst Du die berechneten Felder auch im Script füllen.


    Die Reihgenfolge der Felder stimmt auch? Die berechneten Felder kommen nach den Feldern, auf die sie sich beziehen.


    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 und Danke,
    im Script habe ich eine:
    Call doc.ComputeWithForm(false,false)
    Doch die Werte werden trozdem nicht angezeigt.


    Die Reihenfolge habe ich nicht ganz verstanden. Die berechneten Felder, habe ich spaeter erstellt, als das "Datumsfeld" - ist das so ok?


    Auf den berechneten Feldern liegt jetzt eine Formel und es geht nicht. Wenn ich dort ein Script hinterlege, wird das ja auch erst angesprochen, wenn man im Edit mode ist und F9 drueckt.


    Danke
    Seba

    • Offizieller Beitrag

    Die Felder in der Maske werden immer von rechts nach links und von oben nach unten abgearbeitet.


    Berechnete Felder werden nur dann berechnet, wenn
    - das Dokument erstellt wird,
    - das Dokument gespeichert wird oder
    - das Dokument neu berechnet wird (Refresh).


    Gruß
    Dirk

  • Hi,
    ich habe ein Berechnetes Feld = Datum. Da wird beim erstellen das Jahr reingeschrieben.


    Die Berechneten Felder mit dem DBLookup liegen dadrunter.


    Eigentlich muesste es doch klappen, denn bevor das das Dokument gespeichert wird: Call doc.Save( True, True )
    Ist das Datum eingetragen. ???


    Es geht ja auch nach einem Refresh aber genau da hoert es dann wieder auf. Habe es mit Postopen und uidoc refresh versucht, aber auch das geht nicht.


    noch ein Tipp???
    Danke Danke
    Seba

    • Offizieller Beitrag

    doc.Save ist Backend, da wird die Maske nicht herangezogen. Die Feldberechnungen werden nur mit der Maske durchgeführt.


    Steht im Datumsfeld, wenn es per Script gefüllt wird eventuell noch die Zeitkomponente drin und Dein DBLookup findet deshalb nichts?


    Gruß
    Dirk

  • Hi,
    Nur das Jahr steht drin "2007"


    Es funktioniert ja auch alles, nur eben nicht beim Oeffen. Erst Edit mode und dann Aktualisieren.
    Ich haette jetzt gedacht, ich kann eine formel schrieben, die das Doc im Edit mode oeffnet und dann einfach aktualisiert. Aber das schein t nicht zu klappen. Weiss nicht weiter...


    Gruss
    Seba

    • Offizieller Beitrag

    hast Du es mit @Command( [ToolsRefreshAllDocs] ) oder @Command([ToolsRefreshSelectedDocs]) schon versucht?


    Wo steht die Formel (@DBLookup) in dem berechneten Feld?


    Gruß
    Dirk

  • Mit
    @Command( [ToolsRefreshAllDocs] )
    erscheint ein Balken, der alles aktualisiert aber der berechneten Felder werden eben nicht aktualisiert.


    Ja, die Formel steht im berechneten Feld


    Gruss
    Seba

    • Offizieller Beitrag

    Feld Form habe ich vorausgesetzt. Wie öffnest Du die Dokumente mitd der Vorgabemaske oder hast Du eine Maskenformel?


    Gruß
    Dirk

  • Ich habe diesen Teil im Script, der das Dokument erstellt und befuellt:

    Code
    Set db = session.CurrentDatabase
    	Set doc = db.CreateDocument
    	doc.Form =  "iBSC input form"	' Giving form layout
    	doc.Subject = "iBSC input form" ' I don't know what this does
    	doc.InputYear=Cint(Yearinput)
    	doc.Location=location
    
    	Call doc.ComputeWithForm(False,False)
    	Call doc.Save( True, True )


    doc.form = xxx, ersetzt wohl das Feld. Es klappt ja auch.
    Der Refresh des Forms klappt halt nur nicht so wie ich das will.


    Gruss
    Seba

    • Offizieller Beitrag

    ist dies "iBSC input form" der Name der Form? Hat die Form eventuell Aliase?


    Gruß
    Dirk

  • Ne Ne, ganz normal berechnet.
    Formal sieht so aus


    Code
    zahl := @TextToNumber(Inputyear) - 2005;
    @If(@GetField("InputYear")!="";@IfError(@DbLookup("":"NoCache";"";"GoalSetting";"1";zahl);"CheckCustomizing");"n.a.")



    Eigentlich geht die Formel ja auch.


    Gruss
    Seba

    • Offizieller Beitrag

    GetField wird das Problem sein.

    Code
    zahl := @If( @Text(Inputyear) = "" ; -1; Inputyear - 2005);
    @If(zahl != -1; @IfError(@DbLookup("":"NoCache";"";"GoalSetting";"1";zahl);"CheckCustomizing");"n.a.")


    Gruß
    Dirk


    %edit
    vorausgesetzt Inputyear ist nicht 2004. Ansonsten kannst Du auch eine andere Zahl zurückgeben (z.B. -9999)

    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