Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: ZaLudtske am 20.06.06 - 14:18:20
-
Hallo,
ich erstelle über einen Agenten ein Dokument in dem ich Metadaten und Daten vom Großrechner in das Dokument übertrage. Danach aktualisiere ich das NotesUIDocument und möchte mit GotoField in ein Feld springen, das erst nach dem Aktualisieren sichtbar wird. (siehe Code-Schnipsel). Leider erhalte ich immer nur die Fehlermeldung 'Feld nicht gefunden'. Ein 'Doevents' vor dem GotoField hat auch nicht geholfen.
Hat jemand eine Idee wie der Code aussehen muß, dass das Feld angesprungen wird?
Rainer
ndoDest.computewithform True, False
nduNew.refresh True
nduNew.refreshhideformulas
vntValue = ndoDest.getitemvalue("t_StartFeld")
If vntValue(0) <> "" Then
nduNew.gotofield(vntValue(0))
End If
-
Gibt's das Feld, zu dem du springen willst auch wirklich in der Maske?
Axel
-
Abgesehen davon: Warum passiert solch ein Stunt überhaupt im FrontEnd? DIE Begründung würde mich jetzt mal interessieren ;)
Und wenn die Begründung passt, dann der wirkliche Code ...
Bernhard
-
@Axel: Das feld ist wirklich in der Maske, aber beim Öffnen noch ausgeblendet
@Bernhard: Hier die Begründung: Eine Anforderung unserer Fachabteilung ist, dass Sie für bestimmte Prozesse die passenden Formbriefe versenden muß. Damit Sie sich nicht die Daten einzeln aus der 3270-Emulation heraussuchen und -kopieren müssen lese ich Sie per LSX aus und übertrage später alles nach Word zum Drucken.
Die Fachabteilung möchte außerdem die Möglichkeit besitzen diese Werte noch zu bearbeiten. Da ich immer unterschiedliche Felder für die einzelne Brief benötige habe ich alle Konfigurationsdaten in Metadaten-Dokumenten gespeichert damit ich sie nach Bedarf füllen und anzeigen kann und benötige somit nur eine Basismaske.
Da der Benutzer auch mal den falschen Brief auswählen kann und das Dokument danach einfach wegwerfen soll. Es können nämlich nur ganz bestimmte Benutzer Dokumente löschen (Anforderung der Revision). Das ist der Grund wieso ich das ganze im Frontend und nicht im Backend betreibe.
PS: Das ganze funktioniert super wenn man keine verstecken Felder hat, denn ich habe auf die gleiche Art schon 15 weitere Geschäftsprozesse abgebildet.
Ich hoffe das reicht als Begründung. ;)
Rainer
-
Beim Setzen des Fokus in ein Feld muss diese sichtbar und bearbeitbar sein.
Axel
-
Ergänzend zu Axel ....
was dazu führt das ein GotoField mit TabbedTables und berechneten Tabellen nicht richtig funktioniert.
-
Ich dachte, dass nach dem .refresh und .refreshhodeformulas das Feld sichtbar ist.
Wird auf die beiden Refreshs der Bildschirm nicht direkt aktualisiert? ???
Rainer
-
Ist das Feld denn im LS-Debugger sichtbar?
MfG
Marco
-
Wird auf die beiden Refreshs der Bildschirm nicht direkt aktualisiert? ???
Nein wird es nicht, speziell dann nicht wenn das in einer Tabelle irgendwo zu finden ist.
-
@Marco: Das Feld ist im Debugger sichtbar. Aber nicht am Bildschirm.
@Thomas: Das Feld liegt leider in einer Tabelle, anscheined hab ich wohl den Kanpf verloren und muß mir ein Workaround überlegen. ???
-
@Thomas: Das Feld liegt leider in einer Tabelle, anscheined hab ich wohl den Kanpf verloren und muß mir ein Workaround überlegen. ???
Wenn du da ein Workaround findest könntest du uns das bitte mitteilen. Das bräuchten wir nämlich auch dringend.
-
Hallo,
ich mir ein Workaround gebastelt, das nur auf diese Maske passt. Ich zeige eines meiner Systemfelder (Datum des Briefes) jetzt an und mache es gleichzeitig auch editierbar. Das macht im großen und ganzen auch Sinn.
Bevor ich mich zu diesem Schritt entschlossen habe hab ich etwas mit der API gespielt. Doch weder Postmessage zum Senden eines Klick-Events noch das setzen des Fokus per API in das Fenster zusetzen hat geholfen.
Vielleicht hat ja einer unsere Notes-Götter noch eine Idee was man machen könnte.
Rainer
-
Hi,
mal ein anderer Vorschlag, der insbesondere auch mit dem Laden von berechneten Teilmasken zum erfolg führt...
WIe wäre es das UIDoc zu schliessen, und neu zu laden ?
(über die DocumentUniqueID)
-
Dann muß ich aber das Dokument zuerst speichern und das will ich vermeiden.
-
Hi, nochmals.
Ich hab mir jetzt mal die Grundlagen deines Scritps zusammengebaut, und leider den Fehler nicht navollziehen können.... (ausser das feld war wirklich nicht da) :-\
Darum folgende Fragen:
- Wie steuerst Du das Anzeigen des Feldes, in das du willst (über Hide, wenn ein anderes Feld != wert?) und ist womöglich dieses steuer-feld in der Maske erst nach dem Feld in das du springen willst?
- Was für ein Typ ist dein Feld in das du willst (Text?)
- Hängt es womöglich in einer berechneten Teilmaske, einem Layout oder einem Abschnitt (ev. sogar mit "nicht"-bearbeitungsrecht oder zugeklappt)
ect.
(PS: habs mit R 5.0.11 & R 6.53 versucht)
-
Hallo,
das Steuerfeld befindet sich am Anfang der Maske in einen Bereich mit beschränkten Zugriff. Das Feld enthält die Feldnamen der die angezeigt werden sollen.
Die Feder um die geht, haben eine Hide-When-Formel von de Typ '@isnotmember("Feldname"; t_SichtbareFelder)'. Leider befinden sich die Felder in einer Tabelle, die ich innerhalb einer Tabelle befindet und dieser Umstand scheint die Probleme zu bereiten.
Rainer
-
So jetzt doch nochmal ne wilde Frage:
Ist womöglich das Steuer-Feld vom Typ "Berechnet zur Anzeige"?
oder berechnet sich da was aus anderen Feldern oder dblookups drin?
Ein refresh schmeisst ja bekanntlich gerne mal "berechnet zur anzeige" aus dem UIdoc.Document raus....
(in Deinem Fall: UIDoc erzeugen ohne speichern, UIdoc refresh und danach zugriff auf das backend-Doc um den wert zu holen)
Und DBLookups und berechnete aus anderen Feldern kommen auch nicht immer so ganz linerar rüber wie man es will.
-> Auf was ich raus will ist ob wirklich der richtige Feldname in vntValue(0) ankommt, auf welches du springen möchtest.
oder was ja auch gerne passiert: das vntValue(0) hat ein lehrzeichen, sonderzeichen, umbruch, "merhfachwert" als ein String, ect.
Ich weiss, dass das jetzt etwas Frischlingmässig klingt, aber machmal sind die grössten Probleme doch nur kleine "Leichtsinnsfehler" ect.
-
Hallo,
nein, das Feld ist kein Feld, das zur Anzeige oder beim Anlegen berechnet wird, sondern ein ganz normales Feld das über die Metadaten beim anlegen gepflegt wird.
Beim Auslesen des Feldes erhalte ich den korrekten Wert. (vntValue(0)) enthält den richtigen Namen.
Das Problem ist, dass das Feld zum Zeitpunkt des Befehl .GotoField nicht sichtbar ist.
Rainer
-
hast Du mal versucht ein neues Dokument im Backend zu erzeugen (nicht speichern) und dann dieses im Frontend zu öffnen?, ist dann das Feld, welches Du anspringen willst sichtbar?
Falls ja sollte das ansprinmgen auch funktionieren. Alternativ könntest Du noch versuchen einen uidoc.Refresh (F9) auszuführen, dann müssten die HW-Formeln neu berechnet werden.
-
Hallo,
es funktioniert jetzt. Viel Dank. :D
Ich hätte nicht gedacht, dass es klappt über NotesDatabase.CreateDocument ein Dokument im Backend zu erstellen und dies dann mit NotesUIWorkspace.EditDocument im Frontend zu öffnen, ohne es vorher zu speichern.
Nochmals vielen Dank an alle die geholfen haben.
-
dies funktioniert erst ab 5.x so und mit RT-Feldern gibt es auch unterschiedliche Effekte je nach Notes-Version.