Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Klafu am 27.01.12 - 11:49:42

Titel: Felder in Teilmaske vergleichen
Beitrag von: Klafu am 27.01.12 - 11:49:42
Hallo,

ich würde gerne beim Schließen einer Teilmaske den Inhalt zweier Felder vergleichen.
Ich dachte eine Simple abfrage würde da gehn und habs so probiert:
@If(@GetField("NameAmAnfang")!=@GetField("NameAmEnde");@Prompt([Ok];"test";"Name ist geändert");@Return(""))

Irgendwas mach ich falsch. Ist der Code falsch? Die Meldung kommt nämlich nie. In welchem Event wäre denn eine solche Abfrage richtig angesiedelt?

Chris
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 27.01.12 - 12:08:04
Die Felder befinden sich in der Maske, die die Teilmaske enthält, oder direkt in der Teilmaske? Dann verzichte auf das @GetField

@If(NameAmAnfang != NameAmEnde;@Prompt([Ok];"test";"Name ist geändert");@Return(""))

Auf das @Return kannst Du verzichten, falls danach nichts mehr passiert

@If(NameAmAnfang != NameAmEnde;@Prompt([Ok];"test";"Name ist geändert");"")
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 27.01.12 - 12:24:44
Irgendwie sagt mir meine in die Jahre gekommene Glaskugel gerade, dass Du eine Dialogbox meinst, ich erinnere mich schwach, dass wir schon mal über den Unterschied von Teilmaske und Dialogbox diskutiert hatten.

Bei einer Dialogbox würde ich das alles in Script machen.

Temporäres Dokument erstellen
Relevante Felder kopieren
Dialogbox basierend auf temporärem Dokument öffnen
Nach Beenden der Dialogbox Inhalte der Felder überprüfen und davon abhängige Handlungen starten, aufrufendes Dokument aktualisieren
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Klafu am 27.01.12 - 13:00:19
Hallo Peter,

danke für deine Hilfe. Ja. Du hast recht. Ich hab eine Dialogbox, die mir eine Teilmaske anzeigt, die Werte aus einem Dokument lädt und auch wieder welche in das Dokument schreibt.
Dein Code klappt super. Macht genau was es soll. Dafür schonmal Danke!! :)

Ja, wir haben schonmal drüber gesprochen. Ich hab den Thread auch nochmal durchgelesen.
http://atnotes.de/index.php/topic,51153.0.html (http://atnotes.de/index.php/topic,51153.0.html)

Über
Code
changecheck = ws.DialogBox ("Teilmaske", True , True, False, True, False, False, "Dialog Box",,True)
Ruf ich eine Teilmaske auf, ich kann was ändern, prüfe kurz die Felder und alles passt.

Was spricht denn gegen meine Vorangehensweise? Bringt die Nachteile mit sich?
Oder war das auf die Prüfung der Felder in @Formula bezogen?

Chris
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 27.01.12 - 15:03:25
Ich bin mir nicht wirklich sicher, was Du konkret meinst. Was ist denn Deine Vorgehensweise, die evtl. Nachteile mit sich bringen kann, vorallem, gegenüber welcher anderen?
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Klafu am 27.01.12 - 15:49:15
Ich hab mich auf deine Empfehlung zum Script bezogen.
 
Bei einer Dialogbox würde ich das alles in Script machen.

Temporäres Dokument erstellen
Relevante Felder kopieren
Dialogbox basierend auf temporärem Dokument öffnen
Nach Beenden der Dialogbox Inhalte der Felder überprüfen und davon abhängige Handlungen starten, aufrufendes Dokument aktualisieren

Meine grobe Vorangehensweise:
Ich öffne aus einem Dokument heraus eine Dialogbox(Script), die mir eine Teilmaske zeigt, die ausgewählte Felder des Dokuments enthält.
Da kann man nun Änderungen machen die ich dann in das Ursprüngliche dokument schreib.
Und wenn sich nun der Name ändern sollte, möchte ich ein spezielles Feld des Dokuments ändern. Und deshalb hab ich zu einer kurzen @Formel gegriffen, anstatt mich mit einem längeren script zu befassen.

Ich bin ja mit Teilmasken und Dialogboxen (immer)noch ein Anfänger und bin froh, das es jetzt läuft so wie es soll. Aber mich würde es schon interessieren, warum du den oben Zitierten Weg gehen würdest  :)

Chris
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 27.01.12 - 17:06:54
Wenn es funktioniert, was Du machst, ist es grundsätzlich in Ordnung.

Ich arbeite generell mit temporären Dokumenten in der Dialogbox, da ich nicht will, dass mir eine Dialogbox irgendwelche Steuerfelder, die ich nur in der Box brauche, zurück in das Dokument schreibt. Mit einem temporären Dokument habe ich alles selbst in der Hand und entscheide, welche Information ich ins aufrufende Dokument schreibe und welche nicht. Auch eine notwendige Validierung, die ich vielleicht nicht in der Box durchführen kann, weil die möglicherweise allgemeingültig ist, kann ich dann bequem nach der Box im Script erledigen und ggf. die Box erneut mit den eingetragenen, oder auch korrigierten Werten anzeigen, ohne dass mir zwischenzeitlich die nicht gewollten Werte ins Ursprungsdokument geschrieben werden.

Das ganze ist etwas aufwendiger, mir persönlich aber wesentlich sympathischer, weil es eine saubere Trennung von Dialogbox und aufrufendem Dokument gibt. Das entspricht meinen Vorstellungen von modularer Bauweise.
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: koehlerbv am 27.01.12 - 18:04:04
Hallo Chris,

hier sind meine 2 cents:
Peter hat hier wirklich best practices beschrieben. Diese Methode gibt Dir die volle Kontrolle über alles!

Weiters (nur, um das klarzustellen):
Es ist vollkommen wurscht, ob Du für die Dialogbox (LotusScript oder Formel) eine Maske oder eine Teilmaske verwendest.
Ich persönlich (!!) neige dazu, Teilmasken wirklich absolut nur dann einzusetzen, wo sich dies gar nicht anders vermeiden lässt - so vermeidet man das sprichwörtliche "Flöhehüten" und vieles andere auch (beispielsweise, dass eine Teilmaske nicht in allen Fällen "on the fly" neu durchrechnen lässt).

Good luck,
Bernhard
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 27.01.12 - 19:30:21
Da muss ich doch mal eine Lanze für Teilmasken brechen. Ich verwende (zumindest in zusammenhöngenden Systemen) immer Teilmasken. Jede Maske enthält wenigstens eine Kopf- und eine Fußteilmaske, die in allen Masken identisch sind (gemeinsame Schablone, Elemente verteilt mittels Designtask). Zusätzlich kann es weitere Teilmasken geben, die jeweils ein spezielles Thema abdecken. Nur so ist eine saubere Modulbauweise möglich. Z.B. Schaltflächen wie Schließen, Speichern, Bearbeiten, Hilfe usw. baue ich nur ein einziges Mal, nämlich in der Kopfteilmaske (bzw. die Hilfe in der Fußteilmaske, damit die immer die letzte ist). Neudeutsch nennt man sowas wohl Framework.

Kleiner Nachteil: Eigene Schaltflächen der Maske müssen in einer separaten Teilmaske realisiert werden, da die sonst vor denen der Kopfteilmaske erscheinen.

Noch nie habe ich einen einzigen Floh gesehen, der dabei gehütet werden wollte ...
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: koehlerbv am 28.01.12 - 00:36:03
Ich spreche nicht den Subforms ihr Existenzrecht ab. Wirklich nicht! Ich setze diese auch ein, aber jeweils aus wirklich wohlüberlegtem Grund.
Und die Probleme / "Flöhe", die auftauchen können, sind schon spezifisch und würden in einen eigenen Thread gehören.

Bernhard
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Klafu am 31.01.12 - 14:08:53
Okay. Das heißt also, dass Teilmasken jedesmal komplett alle Felder (soweit möglich) nochmal neu in das Dokument schreiben und eine Prüfung der Eingaben - wie es in Dokumenten möglich ist - da nicht gegeben ist.
Gut zu wissen!

Danke euch beiden für eure Hilfe! :)

Chris
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 31.01.12 - 18:31:44
Nein, das sind immer noch keine Teilmasken. Und Dialogboxen schreiben die Felder nicht "nochmal neu" ins Dokument, sondern aktualisieren alle Felder des dahinterliegenden Dokuments, sofern das nicht über einen Parameter ausgeschaltet ist.

Eine Teilmaske ist ein Element, um Masken mit wiederverwendbaren Modulen erweitern zu können. Eine Dialogbox ist eine Funktion, mit der Daten im Dialog eingegeben werden können. Das Aussehen einer Dialogbox wird durch die verwendete (Teil-)Maske definiert.

Früher hätte man das 50 mal abschreiben und von den Eltern abzeichnen lassen müssen. Vielleicht hilfts ... ;)
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: smokyly am 31.01.12 - 21:33:40
Darf ich mal ne Zwischenfrage stelle, ohne gleich einen neuen Fred auf zu machen?
Ich habe Dialogboxen aufgrund von Teilmasken erstellt. Diese Dialogboxen verwende ich in zig Hauptmasken - oder will es zumindest. Was wäre daran denn ein Fehler? Es werden doch nur zusätzlich die Felder weg geschrieben, die in dieser Teilmaske definiert sind. Diese Felder sind aber definitiv nicht in der eigentlichen Maske vorhanden.

Vielen Dank, wenn ich klarer sehen darf.
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: koehlerbv am 31.01.12 - 22:08:26
Es gilt das, was Peter schon geschrieben hat, Geri: Teilmasken sind TEIL einer anderen Masken und können ausser in Dialogboxen nicht stand alone betrieben werden.
Doppelte Feldnamen (in der Summe von Maske und Teilmasken) sind ebenfalls nicht zulässig (probiert es halt mal aus  ;)).

Für ein Dokument (also Backend!) spielen Masken / Teilmasken keinerlei Rolle.
Im Frontend: Felder verhalten sich auch so, als wenn sie in der (Ober-)Maske vorhanden wären.

Bernhard
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Peter Klett am 31.01.12 - 22:10:58
In Deiner Teilmaske sind Felder, die nicht in der Maske sind? Und Du bearbeitest das Dokument mit einer Dialogbox, die auf der Teilmaske basieren? Dann kann es sein (je nach Aufruf der Dialogbox), dass durch die Felder, die sich in der Teilmaske befinden, gleichnamige Items im Dokument angelegt werden.

Das ist grundsätzlich kein Fehler, die Frage ist aber, brauchst Du die Felder im Dokument? Mal ein extremes Beispiel:

In der Dialogbox willst Du einen Wert aus einer Liste auswählen lassen. Aus irgendeinem Grund berechnest Du die Liste nicht in dem Auswahlfeld, sondern in einem separaten Feld in der Teilmaske und greifst mit dem Auswahlfeld darauf zu (dagegen ist absolut nichts einzuwenden). Der Inhalt dieses Feldes kann nun recht groß sein, und wenn Du die Dialogbox so aufrufst, dass neue Felder im aufrufenden Dokument gespeichert werden, hast Du diese Liste nach der Box in Deinem Dokument. Dort brauchst Du es aber nie, riskierst aber die vielgeliebte 32k-Fehlermeldung.

Natürlich kann man die Dialogboxen so aufrufen, dass keine neuen Felder übernommen werden. Und alle Felder, die man aus der Dialogbox braucht, übernimmt man in die Maske, die anderen lässt man weg. Aber spätestens, wenn man allgemeingültige Dialogboxen baut, kommt man ins straucheln. Wenn Du zum Beispiel eine Dialogbox hast, die ein Feld "Wert" enthält, in dem der aus der Liste ausgewählte Wert eingetragen wird, und Du diese Dialogbox innerhalb desselben Dokuments (Maske) an verschiedenen Stellen aufrufst, um in jeweils separate Felder den ermittelten "Wert" übernehmen zu können, ist es nur sinnvoll, das über ein temporäres Dokument zu tun und dann den Inhalt von Wert in das gewünschte Feld zu schreiben, ohne Rücksicht auf irgendwelche anderen Felder nehmen zu müssen.

Ohne temporäres Dokument müsstest Du entweder nach der Dialogbox den über die Dialogbox im Dokument gespeicherten Wert verschieben (schlecht), oder Du baust für jedes Feld eine eigene (Teil-)Maske, über die Du mit der Dialogbox das jeweilige Feld füllst, obwohl die Dialogbox logisch immer gleich ist (noch viel schlechter).

Deshalb nehme ich IMMER ein temporäres Dokument als Grundlage für eine Dialogbox, und mir fallen bestimmt noch mehr Gründe dafür ein, wenn ich länger darüber nachdenke.
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: smokyly am 01.02.12 - 11:03:10
Vielen Dank für die Erläuterungen!

Beste Grüsse
Titel: Re: Felder in Teilmaske vergleichen
Beitrag von: Klafu am 03.02.12 - 09:17:23
Nein, das sind immer noch keine Teilmasken. Und Dialogboxen schreiben die Felder nicht "nochmal neu" ins Dokument, sondern aktualisieren alle Felder des dahinterliegenden Dokuments, sofern das nicht über einen Parameter ausgeschaltet ist.

Eine Teilmaske ist ein Element, um Masken mit wiederverwendbaren Modulen erweitern zu können. Eine Dialogbox ist eine Funktion, mit der Daten im Dialog eingegeben werden können. Das Aussehen einer Dialogbox wird durch die verwendete (Teil-)Maske definiert.

Früher hätte man das 50 mal abschreiben und von den Eltern abzeichnen lassen müssen. Vielleicht hilfts ... ;)

In den heutigen Zeiten - vorallem in der IT - schreibt doch keiner mehr was ab. Wozu gibts denn auch sonst Copy & Paste ? ;)

Ich werd mir den Thread aufjedenfall als Nachschlagewerk dokumentieren.
Danke nochmal!  :)

Chris