Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Hurby am 22.11.07 - 13:02:41

Titel: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 13:02:41
Hallo,

ich habe einen Rahmen in dem eine Maske angezeigt wird (kein Dokument nur die reine Maske). Hierzu wollte ich fragen, wie ich es bewirke dass mein berechneter Text neu kalkuliert wird. Da ich kein Dokument habe fällt "uidocument.refresh" leider flach.

Weiss evtl. Jemand wie man dies bewerkstelligen kann?

MfG Hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Axel am 22.11.07 - 13:17:05
Was du im Rahmen anzeigst ist ein Dokument und da sollte immer der aktuelle Text angezeigt werden. Eine Maske kannst du nur im Designer anzeigen.


Axel
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 14:09:49
Hallo,

sorry steck da noch nicht so tief drinne...
Wenn das stimmt was Du sagt (ich wage es nicht zu bezweifeln) warum bewirkt "uidocument.refresh" dann keine neu kalkulation meiner berechneten texte?

MfG Hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 22.11.07 - 14:12:59
wenn sich das Dokument/Maske in einem Rahmenkonstrukt befindet, wie und wo rufts Du das UIdoc.Refresh denn auf?

Habe gerade mal getestet; ein uidoc.refresh bzw. @Command( [ViewRefreshFields] ) aktualisiert den berechneten Text
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 14:35:40
In der Maske befindet sich ein Hotspot mit Lotus-Script. Wird der Hotspot geklickt werden ein paar Befehle ausgeführt und anschliessend möchte ich dass der berechnete Text neu berechnet wird.

MfG hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 22.11.07 - 14:42:05
hallo

Habe gerade mal getestet.
Folgendes Script Funktioniert ohne Probleme:
Code
Sub Click(Source As Button)
	Dim ws As New NotesUIWorkspace
	Call ws.CurrentDocument.Document.ReplaceItemValue( "test" , "Hallo Welt" )
	Call ws.CurrentDocument.Refresh
End Sub

Der berechnete text mit der Formel 
Code
test
zeigt "Hallo Welt" nach dem Refresh.
Einzige Problem: Wenn eine Eingabevalidierung zuschlägt (@Failure), dann wird der Text nicht angezeigt.
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 14:59:10
Hallo,

funktioniert bei mir trotzdem nicht. Es klingt zwar unlogisch, aber an dem berechneten Text kann es nicht liegen oder?

Mein Hotspot berechnet einen Wert und schreibt diesen in eine andere Datenbank in ein Dokument.

Mein berechneter Text hat folgende Formel:

@If((@DbLookup("";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl") != "") & (@DbLookup("";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl") != "0") ;@DbLookup("";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl"); 0)

Also beim öffnen der Maske/Dokument wird korrekt berechnet...

MfG Hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 22.11.07 - 15:01:03
versuch mal ein "NoCache" in de LookUps ;-)
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 15:11:29
laut der Beschreibung von DbLookUp macht es sinn, ja. Aber in der Realität sieht mein Ergebniss schon nach dem öffnen (also ohne refresh) aus wie im Bild. Dabei stehen die Klammern direkt vor und hinter dem berechneten Text. Laut Formel sollte doch ein Leerzeichen nicht Möglich sein (Das Feld in dem Zieldokument enthält eine Zahl...).

MfG Hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 15:15:07
ich habs, vor "NoCache" in DbLookUp musste noch ein ["Notes":] um den Typ der Datenbank anzugeben...

MfG hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Axel am 22.11.07 - 15:24:02
ich habs, vor "NoCache" in DbLookUp musste noch ein ["Notes":] um den Typ der Datenbank anzugeben...

MfG hurby

@DbLookup("":"NoCache";"":"WBKHelp.nsf";.....

So wäre es auch gegangen.


Axel
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 22.11.07 - 15:27:05
Stimmt, aber übersichtlicher ist es schon.
Deshalb werde ich auch mein nächstes Problem (was hieraus resultiert) in ein neues Thema schreiben...

Nochmals danke an alle...

MfG hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 22.11.07 - 16:44:01
Warum verwendest Du denn so eine "große" Formel.
Wie ich das sehe, möchtest Du die Anzahl der Einträge je "Kategorie" anzeigen.
Dann genügt das:

Code
_wert := @DbLookup("":"NocCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl");
@if( @IsError( _wert ) ; "0" ; @Text( @Elements( _wert ) ) )
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 23.11.07 - 12:47:10
Das mit der If-Klausel ist mir so gar nicht in den Sinn gekommen, hab in der Referenz einfach ein bisschen gestöbert und DbLookUp gefunden und Parametrisiert...

MfG Hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Driri am 23.11.07 - 13:18:39
Ich würde auf jeden Falll die Formel so umstellen, wie Dirk das beschrieben hat. Das bringt nämlich Performancevorteile, weil der Lookup nur einmal ausgeführt wird. So wie Du die Formel da stehen hast, würde er dreimal den gleichen Wert auslesen.
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 23.11.07 - 14:00:25

_wert := @DbLookup("":"NocCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl");
@if( @IsError( _wert ) ; "0" ; @Text( @Elements( _wert ) ) )


Komisch, ich bekomme immer "0" zurück obwohl im Zielfeld zB "3" steht

Das "NocCache" habe ich schon zu "NoCache" gemacht, dies ist es also nicht.
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 23.11.07 - 14:02:57
Zitat
Das "NocCache" habe ich schon zu "NoCache" gemacht, dies ist es also nicht.

Sorry wegen dem Fehler  :-[

Den rest der Formel musst Du natürlich auch entsprechend Deinen Bedürfnissen anpassen!!

Was willst Du damit genau erreichen?? ... den Wert eines feldes in einem Dok auslesen? oder die Anzahl der Dokumente zu einer Kategorie?...
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 23.11.07 - 14:04:30
Wenn Du mit meiner (angepassten) Formel immer "0" bejommst, dann läuft er auf einen Fehler.
Lass mal die Fehlerbehandlung weg. Was kommt dann für eine meldung?
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 23.11.07 - 14:42:29
Zitat
Was willst Du damit genau erreichen?? ... den Wert eines feldes in einem Dok auslesen? oder die Anzahl der Dokumente zu einer Kategorie?...

den Wert eines feldes in einem Dok

Zitat
Lass mal die Fehlerbehandlung weg. Was kommt dann für eine meldung?

welche Fehlerbehandlung?
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: dirk_2909 am 23.11.07 - 15:07:19
Wie welche Fehlerbehandlung ?!!

.. @IsError ( ... ) .... !!!  :-:

 :-X :-X
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Hurby am 23.11.07 - 15:30:43
wenn ich schreibe

_wert := @DbLookup("Notes":"NoCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl");
@If(  _wert = "" ; "0" ; @Text( @Elements( _wert ) ) )


bekomme ich statt "3" aus dem Zielfeld "1". Ist das manchmal der wert aus der ersten sortierten Spalte? Die heißt nämlich auch Anzahl...

aber laut Hilfe müsste

_wert := @DbLookup("Notes":"NoCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";Anzahl);
@If(  _wert = "" ; "0" ; @Text( @Elements( _wert ) ) )


das Feld wiedergeben

MfG hurby
Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: Axel am 23.11.07 - 19:09:28
wenn ich schreibe

_wert := @DbLookup("Notes":"NoCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl");
@If(  _wert = "" ; "0" ; @Text( @Elements( _wert ) ) )


bekomme ich statt "3" aus dem Zielfeld "1". Ist das manchmal der wert aus der ersten sortierten Spalte? Die heißt nämlich auch Anzahl...

Jain. Erstmal ein Spalte hat keinen Namen, ergo kann sie auch nicht "Anzahl" heißen. Sie kann höchstens auf ein Feld mit Namen "Anzahl" zugreifen. In diesem Fall bekommst du natürlich scheinbar auch den Wert aus der ersten Spalte zurück, da du das Feld ausliest welches auch in der Spalte angezeigt wird. Und wenn da eine 1 angezeigt wird und die Spalte basiert auf dem Feld "Anzahl", dann liefert dir @Dblookup auch eine 1 zurück wenn du auf das FEld "Anzahl" zugreifst. Ich vermute mal, dass du irgendwo einen Denkfehler machst.

...
aber laut Hilfe müsste

_wert := @DbLookup("Notes":"NoCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";Anzahl);
@If(  _wert = "" ; "0" ; @Text( @Elements( _wert ) ) )


das Feld wiedergeben

Das tut es auch. Du musst natürlich den Feldnamen Anzahl noch in Anführungszeichen setzen.

Wenn das bei dir nicht funktioniert, dann muss wie oben bereits gesagt, der WauWau wo anders begraben sein.

Axel

Titel: Re: Berechneten Text in Maske neu kalkulieren
Beitrag von: pete_bla am 23.11.07 - 19:55:17
Hi,

...
aber laut Hilfe müsste

_wert := @DbLookup("Notes":"NoCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";Anzahl);
@If(  _wert = "" ; "0" ; @Text( @Elements( _wert ) ) )


das Feld wiedergeben

nein es gibt die Anzahl der gefundenen Elemente für "1" zurück, nicht den Inhalt des Feldes "Anzahl".
Du müsstest 3 Einträge (@Elements->Elemente einer Liste!) für den Lookup zurückerhalten,
damit @Elements(_wert) = 3 ist ....
Hast Du nur einen Eintrag (egal ob in "Anzahl" 5 oder 10 oder 10000 oder "schlagmichtot" steht)
erhälst du auch @Elements(_wert)  = 1.

wie wäre es mit
Code
@If(  _wert = "" ; "0" ; @Text(_wert ) )
statt
Code
@If(  _wert = "" ; "0" ; @Text( @Elements( _wert ) ) )
?
und mit Fehlerbehandlung (die würde ich wieder aufnehmen! - sonst gibts irgendwann probleme!)
Code
@If(@IsError(_wert); "FEHLER";
	_wert = "" ; "0" ;
	@Text(_wert ) 
)

und eventuell noch schauen ob du wirklich eine Zahl oder einen String hast (sonst gibt bei @Text(_wert) auch wieder einen fehler).
Code
@If(@IsError(_wert); "FEHLER";
	@IsNumber( _wert) ; @Text(_wert ) ;
	_wert ="";"0";
        _wert
)

Ausserdem musst Du, wenn Anzahl das Feld ist dieses in "" schreiben, wie Axel schon sagt:
Du musst natürlich den Feldnamen Anzahl noch in Anführungszeichen setzen.
also so:
Code
@DbLookup("Notes":"NoCache";"":"WBKHelp.nsf";"Anzahl_HCL";"1";"Anzahl");

Gruss, Pete(r)