Autor Thema: Cursor soll zum Body per "Call uidocMail.GotoField("Body")" hüpfen  (Gelesen 7858 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Hi,

mit einem Script erstelle ich aus einer DB ein neues Mail
(Code in etwa: http://www.atnotes.de/index.php?board=7;action=display;threadid=11558)

Nun soll zum Schluß mit
Call uidocMail.GotoField("Body")  
der Cursor zum Bodyfeld hüpfen, aber klappt leider nicht.

Ins Subject-Feld mit
Call uidocMail.GotoField("Subject")  
klappt aber.

Wie kann ich denn in das RTFeld 'Body' den Cursor setzen?

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
... Richtextfelder sind erst vorhanden, wenn das Doc zum ersten Mal gespeichert wurde - würde ich mal raten...

ata
Grüßle Toni :)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
si senor, das ist die Lösung.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Das dürfte das alte leidige Problem sein: Im Frontend hast Du ein RTF erst unter Kontrolle, wenn das Dokument im backend gespeichert und im Frontend erneut geöffnet wurde ...

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Hi Ata,

sorry, hätte doch den ganzen Code posten sollen, hier ist er:

Code
Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument   
   Dim dbMail As NotesDatabase
   Dim docMail As NotesDocument
   Dim uidocMail As NotesUIDocument
   Dim profil As NotesDocument
   Dim docThis As NotesDocument
   Dim rti As NotesRichTextItem
   
   Set uidoc = ws.CurrentDocument 'ui
   Set docThis = uidoc.Document 'ui
   
'Prüfen ob Mail-DB vorhanden
   Set dbMail = New NotesDatabase("","")
   Call dbMail.OpenMail
   If Not dbMail.IsOpen Then
      Messagebox "Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es wird kein Mail erstellt.", 16, "Fehler"
      Exit Sub
   End If  'If Not dbMail.IsOpen Then
   
'Mail erstellen   
   CreateMailMemo = 0
   Set profil = dbMail.GetProfileDocument("CalendarProfile")
   Set docMail = New NotesDocument(dbMail) 'neues Mail
   docMail.Form = "Memo" 'nimm Memo
   docMail.Logo = profil.DefaultLogo(0) 'Dient dazu, das Mail-Logo zu übernehmen
   docMail.Principal = profil.Owner(0) 'Dient dazu, das Mail-Logo zu übernehmen
   
'Mail-Felder füllen
   docMail.SendTo = docThis.a_test2 'Mailempfänger
   docMail.Subject = "Link: #" + docThis.a_ID(0) + " ( " + docThis.a_Area(0) + ")" 'Subject
   
'Anlegen und füllen des Richtextfeldes
   Set rti = docMail.CreateRichTextItem("Body" )
   Call rti.AddNewLine(3)
   Call rti.AppendText("Doc-Link >")
   Call rti.AppendDocLink(docThis, "") 'Doklink einfügen
   Call rti.AppendText("<")
   Call rti.AddNewLine(1)
   
'Temp-Speichern Backend-Doc, Öffnen Frontend-Doc, zum Schluß Löschen Backend-Doc (damit RTF-Feld angezeigt wird)
   Call docMail.Save(True,False)
   Set uidocMail = ws.EditDocument(True, docMail)
   Call docMail.Remove(True)
   
'Gehe zum Feld Body   
   Call uidocMail.GotoField("Body")   
End Sub

Body ist also eigentlich doch dann vorhanden....

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
@Bernhard, Ulrich: war zu langsam mit dem Posten...

sollte das hier nicht reichen?

Zitat
'Temp-Speichern Backend-Doc, Öffnen Frontend-Doc, zum Schluß Löschen Backend-Doc (damit RTF-Feld angezeigt wird)
   Call docMail.Save(True,False)
   Set uidocMail = ws.EditDocument(True, docMail)
   Call docMail.Remove(True)

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
du musst das uidoc schließen, neu instanzieren dann wieder öffnen. erst jetzt kannst du das Feld ansteuern...

ata
Grüßle Toni :)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
OK, habe mal die letzten Zeilen wie folgt angepasst:
Code
'Temp-Speichern Backend-Doc, Öffnen Frontend-Doc, zum Schluß Löschen Backend-Doc (damit RTF-Feld angezeigt wird)
   Call docMail.Save(True,False) 'Backend speichern
   Set uidocMail = ws.EditDocument(True, docMail) 'uidocMail öffnen
   Call uidocMail.Close 'uidocMail schließen
   Set uidocMail = ws.EditDocument(True, docMail) 'uidocMail öffnen
   Call docMail.Remove(True) 'Backend löschen
   
'Gehe zum Feld Body   
   Call uidocMail.GotoField("Body")   
End Sub

Klappt allerdings noch immer nicht.....

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
geht das nicht auch über die Maskeneigenschaften ? Da gibt es doch so was wie "Beim Öffnen in ..." dies oder das Feld springen
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
@Ulrich:
Eigentlich schon, aber ist halt das Mailfile......

Wenn es nicht geht dann lass ich es, ist eh nur ein nice to have - Feature.

Wundert mich aber, irgendwo muss ich noch ne Kleinigkeit übersehen haben.

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
*Nachtrag*
Was passiert überhaupt:
Script wird wie erwartet fehlerfrei ausgeführt, nur der Cursor bleibt im SendTo stehen.

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Hi,

ich hab mal ein bisschen rumgespielt und das Ganze mit dem Debugger laufen lassen und siehe da, wenn man das Script im Einzelschrittmodus laufen lässt, funktionierts. Der Cursor sitzt im Body-Feld.

Wenn man aber im Debugger auf "Fortfahren" klickt, funktioniert es auch nicht.

Ich habe noch einiges programmiertechnisch probiert, aber alles ohne Erfolg. Ich kann dir leider auch keine Lösung anbieten. RTF-Felder sind in Notes programmiertechnisch nun mal es was unkomfortabel zu handeln.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Glombi

  • Gast
... Richtextfelder sind erst vorhanden, wenn das Doc zum ersten Mal gespeichert wurde - würde ich mal raten...

ata
Diese Aussage trifft nur auf das Backend zu. Man kann erst dann auf ein RTItem im Backend zugreifen, wenn das Dokument gespeichert wurde.

Das gilt aber nicht für das Frontend. Und
call uidoc.GotoField("Body")
ist eine Frontendmethode.

Daran kann es also nicht liegen.

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Danke für die Infos und das Testen!

Zitat
Ich habe noch einiges programmiertechnisch probiert, aber alles ohne Erfolg.
Ich konnte es nicht lassen und hab auch nochmal einiges programmtechnisch getestet (öffnen, schließen, refresh u.v.m.).
Das www hab ich auch schon abgegrast, ohne Treffer (nur mit Fragen ohne Antwort, z.B. hier: http://groups.google.de/groups?q=Call+GotoField(%22Body%22)&hl=de&lr=&ie=UTF-8&oe=UTF-8&selm=tnkN7.1%24I05.655%40newsfeed.slurp.net&rnum=1

Na ja, da kann man wohl nix machen...

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Schon probiert, mit GotoNextField hinzukommen? Sorry, wenn das schon jemand gesagt haben sollte ....
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
hmm, geht leider auch nicht (bleibt im Subject-Feld wenn ich zuvor zum Subject springe).

Ich muss schon sagen, der Client ist echt frech:
Selbst bei einem GotoBottom bleibt er im Subject Feld und geht nur ganz nach rechts. :o

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Versuche mal, einen Agenten zu starten, der die entsprechenden @Commands ausführt ..... oder vielleicht kannst Du ja sowieso das ganze mit Formelsprache erledigen, dort scheint es mir, dass ich keine Probleme habe, das zu tun.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
1) Agent
Das wäre noch eine Lösung, mal sehen (widerstrebt mir irgendwie, wegen einem gotofield gleich einen Agent aber wenns nicht anders geht)

2) Formel
hatte ich vorher, war mir aber zu unflexibel (Felder übernehmen aus bestehendem Doc etc. Da fand ich Script eleganter)

Hab jetzt auch mal ein sleep(1) getestet, weil ja - wie auch Axel schreibt - beim Step by Step Durchlauf mit Debugger ins Body gesprungen wird. Auch ohne Erfolg....

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Lieber seit kurzem 5sterniger TMC  ;D

Mit einem Sleep zu probieren, wenns mit Tracing geht, ist eine gute Idee, nur meistens hat es andere Gründe als das Zeitverhalten, wenn der Debugger sogenannte Seiteneffekte erziehlt: Datenbanken, die vom Debugger offen gehalten werden aber ohne Debugger schliessen und dann einen Object Not Set oder sowas provozieren, oder in diesem Falle könnte ich mir vorstellen, dass das Aktivieren der interaktiven Oberfläche dazu führt, dass das Feld erkannt wird...... das bringt mich auf eine weitere Idee: möglicherweise gelingt es, wenn man einen Refresh macht und danach oder davor einfach einen Script-Agenten aufruft. Mag sein, dass dadurch die Oberfläche auch wirklich nachgeführt wird.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Wir haben es hier offensichtlich mit einem Bug in Notes zu tun - die Layout-Region kann offensichtlich nicht mit LS-Statements verlassen werden. Ich habe da jetzt an Hand TMC's Code auch einiges probiert ...
Wenn jemand jetzt mal mit einem Formel-Agent (der aus TMC's Code heraus aufgerufen wird) experimentiert, dann wird es wohl interessant ;-)

Sorry, dass ich nicht mehr herausgefunden habe,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz