Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: iukhdh am 18.07.07 - 09:45:54

Titel: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 09:45:54
Hallo Forum,

ich habe eine Maske mit an die 40 Zahlen-Eingabefelder, die letztlich eine Gesamtbewertung in einem berechneten Feld ergeben.

Ich hätte es gerne, dass die Gesamtbewertung jedesmal sofort aktualisiert wird wenn ein Wert geändert wird. Daher wollte ich in den Eingabefeldern überall mit uidoc.Refresh in OnChange die Maske aktualisieren.

Meine Frage: Muss ich das tatsächlich bei allen 40 Eingabefeldern hinterlegen, oder gibt es eine zentrale Möglichkeit die Maske zu aktualisieren?

Die Einstellung "Felder automatisch aktualisieren" bei den Maskeneigenschaften bringt nicht viel, da immer erst aktualisiert wird, wenn man in die nächste Zeile nach der Gesamtbewertung klickt.

Wie löst ihr sowas?

Gruß
Thomas
Titel: Re: Maske aktualisieren
Beitrag von: Axel am 18.07.07 - 09:48:31
Eine zentrale Möglichkeit ist nur die Maskenoption "Felder automatisch aktualisieren". Wenn das nicht pratikabel ist, bleibt dir nur noch die Anpassung der Events der einzelnen Felder.


Axel
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 10:32:21
Hmm,

ist nicht unbedingt das was ich hören wollte.  ;)

Nun gut, es handelt sich ja nun nur um ein paar Codezeilen, aber mal eine grundsätzliche Frage von einem Script-Rookie:

Muss ich diesen Code wirklich überall reinkopieren, es könnte ja auch weitaus mehr sein. Oder besteht im Script die Möglichkeit irgendwo solche Routinen einmalig zu hinterlegen, und diese dann nur im OnChange-Event aufzurufen?

Thomas
Titel: Re: Maske aktualisieren
Beitrag von: klaussal am 18.07.07 - 10:38:47
Ich hatte schon mal in einer Maske einen Button ("Werte aktualisieren") eingebaut.
Titel: Re: Maske aktualisieren
Beitrag von: botschi am 18.07.07 - 10:57:36
Ist zwar nicht GENAU das was Thomas wollte, aber nicht nur für den Entwickler und die Pflege leichter, sondern auch für den User durchaus zumutbar denke ich.

Matthias
Titel: Re: Maske aktualisieren
Beitrag von: Axel am 18.07.07 - 10:58:46
Hmm,

ist nicht unbedingt das was ich hören wollte.  ;)


Das glaube ich dir.  ;)


Muss ich diesen Code wirklich überall reinkopieren, es könnte ja auch weitaus mehr sein. Oder besteht im Script die Möglichkeit irgendwo solche Routinen einmalig zu hinterlegen, und diese dann nur im OnChange-Event aufzurufen?

Du kannst den Code auch als Routine oder Funktion in eine Scriptbibliothek auslagern, diese dann mit Use "Name der Biblothek" im Options - Abschnitt in den Globals der Maske einbinden. Dann kannst du an allen Ecken der Maske diese Routine/Funktion aufrufen.


Ich hatte schon mal in einer Maske einen Button ("Werte aktualisieren") eingebaut.

Dann muss aber die Aktualisierung manuell passieren. Aber genau das soll ja hier vermieden werden.


Axel
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 11:06:57
@klauss

Aha, anstatt auf F9 drückt man dann auf den Aktualisierungsbutton?    :D

@Axel

Na das muss ich mir mal genauer anschauen. Danke für den Tipp

Thomas
Titel: Re: Maske aktualisieren
Beitrag von: klaussal am 18.07.07 - 11:10:13
Zitat
Aha, anstatt auf F9 drückt man dann auf den Aktualisierungsbutton?

Richtig ! Nicht jeder User kennt F9 (zumindest hier). Und so ein schöner, fetter, roter Button ist nicht zu übersehen...  ;D
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 15:01:54
Also irgendwie will das nicht.

Ich habe Axels Vorschlag wie folgt versucht umzusetzen:

folgende Scriptbibliothek "aktualisieren" angelegt:

Sub Initialize
   Dim nuiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = nuiws.CurrentDocument
   uidoc.Refresh
End Sub


Ins Options der Maske

Use "aktualisieren"

reingeschrieben.

Wenn ich nun die Maske aufrufe, bekomme ich die Fehlermeldung "Dokumentbefehl ist nicht verfügbar". Was bedeutet das?


Und ... wie rufe ich dann diese Bibliothek auf? Auch mit Use "aktualisieren" beim Onchange-event des Feldes?

Immer wenn ich das da reinschreibe, wird der Code nach Options des Felds verschoben. Also irgendwas krieg ich nicht hin.

Thomas  :(

Titel: Re: Maske aktualisieren
Beitrag von: Axel am 18.07.07 - 15:08:41
Ganz so funktioniert das nicht.

Du musst in der Scriptbibliothek eine neue Routine anlegen, z.B DokumentRefresh. Dazu gibst du im Options-Abschnitt einfach Sub DokumentRefresh ein. Es wird dann automatisch zu einer neuen Routine.

Dann kopierst du die Zeilen dort hinein. Das Ganze sieht zum Schluss so aus:

Sub DokumentRefresh
   Dim nuiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = nuiws.CurrentDocument
   uidoc.Refresh
End Sub

Aus Sub Initialize musst du die Zeilen löschen!

Das mit dem Use ist soweit richtig. In die Events der Felder muss dann

Call DokumentRefresh

als Aufruf der Routine rein.


Axel
 
Titel: Re: Maske aktualisieren
Beitrag von: dirk_2909 am 18.07.07 - 15:33:56
Zitat
Wenn ich nun die Maske aufrufe, bekomme ich die Fehlermeldung "Dokumentbefehl ist nicht verfügbar". Was bedeutet das?

Du kannst einen Refresh nur im Bearbeitungsmodus aufrufen.
Also:

...
if uidoc.EditMode Then
    uidoc.Refresh
end if
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 15:58:01
Also irgendwie ist heute nicht mein Tag.

Das mit der Routine in der Scriptbibliothek leuchtet mir ein. Hab ich nun auch so abgeändert und dort die Sub aktualisieren angelegt

Wenn ich nun aber im Onchange-event das call aktualisieren eingebe kommt jedesmal die Meldung Not a sub or funktion name:AKTUALISIEREN.

Bei den Options der Maske Eingabe  (bei Eingabe (Maske) ) steht Use "aktualisieren" drin.

 :-:
Titel: Re: Maske aktualisieren
Beitrag von: Axel am 18.07.07 - 16:10:41
Wahrscheinlich stößt Notes sich an den doppelten Namen.

Benenn' mal die Bibliothek oder die Routine um.


Axel
Titel: Re: Maske aktualisieren
Beitrag von: koehlerbv am 18.07.07 - 16:18:16
Modulname = Name der ScriptLib ist kein Problem.

Wurde die Reihenfolge des Einbinden eingehalten? Sicherheitshalber:
- Lib in Maske einbinden, speichern, Maske schliessen
- Erst jetzt die Sub im Event aufrufen

Bernhard
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 16:34:32
Also ich hab nun mal beide Hinweise versucht.

Die Script-Bibliothek heisst nun "Aktuell", die sub "aktualisieren".
Ich hab erst die ScriptLib Aktuell eingebunden bei 'Options, gespeichert, sogar den Designer geschlossen, dann beim onchange-event call aktualisieren eingegeben, er nimmt es nicht.

Hmm, ich verwende aber schon das richtige Options? Es gibt ja im Objekt Fenster erst mal eine Kategorie mit (Globals)Eingabe, dann eine Kategorie mit Eingabe(Maske). In der zweiten hab ichs eingebunden, bei der ersten klappts eh nicht.

Seltsam, seltsam.
Titel: Re: Maske aktualisieren
Beitrag von: Axel am 18.07.07 - 16:39:02
Du musst das im Options-Abschnitt unter Globals der Maske einbinden. Nur dann gilt es an allen Ecken der Maske.


Axel
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 18.07.07 - 16:56:35
Oh Mann, war das eine Geburt.

Ich habs tatsächlich in den falschen Options eingetragen, es hat aber vorher auch nie funktionert, was ich nun einfach mal auf das von Bernhard skizzierte Problem schiebe. Nachdem ich nun erst den Eintrag im richtigen Options eingetragen habe, dann gespeichert, geschlossen und dann den Rest eingetragen habe hats endlich geklappt.

Uff

Vielen Dank für die Hilfe an diesem heissen Nachmittag

  :knuddel:

Thomas
Titel: Re: Maske aktualisieren
Beitrag von: jBubbleBoy am 19.07.07 - 08:47:17
Hallo,
ich hätte das mit der Timerklasse von Notes gemacht, damit kann man alle 1, 2 oder x Sekunden, halt periodisch, Code ausführen und muss nicht überall ein Refresh einbauen.

--> global
Dim elapsedTimer As NotesTimer

--> postopen
Set elapsedTimer = New NotesTimer(3, "Die Zeit in Sekunden")
On Event Alarm From elapsedTimer Call meineFunktion

dann natürlich noch deine Funktion (global).

der Bubble
Titel: Re: Maske aktualisieren
Beitrag von: iukhdh am 19.07.07 - 11:41:41
Ja, wäre auch eine Lösung gewesen, wobei ich mir da wieder meine User vorstelle, die alle naslang anrufen weil da irgendwas gaaaaanz komisch reagiert

 ;)

Danke trotzdem für den Tipp, das kann ich vielleicht woanders mal brauchen

Thomas