Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[Notes/Domino] SetTargetFrame を使って文書をフレームに表示する場合の問題点

NotesUIWorkspace.SetTargetFrame を使って、文書を特定フレームに表示したいケースは多々あると思います。が、普通にコードを書いていても、よく解らないエラーに遭遇してしまうことがあります。

今回は、わたしが把握している SetTargetFrame を使用した場合の問題点と、解決法を紹介いたします。

同一フレーム内に文書を表示する場合

スクリプトを実行しているフレームに文書を表示しようとする場合、ComposeDocument の場合でも、EditDocument の場合でも、以下のエラーメッセージが表示されることがあります。

Target frame is ancestor of script object

この場合は、以下のように引数を追加するとうまくいくようです。

Call ws.ComposeDocument(db.Server, db.FilePath, "フォーム名", , , False)
Call ws.EditDocument(True, doc, False, "", False)

(ちなみに、この件は一応デザイナーヘルプにも書いてありますが、記述が解りづらいかもしれないので、あえて取り上げてみました。)

新規文書を EditDocument する場合

新規文書を EditDocument で表示しようとすると、エラーになる場合があります。

たとえば、以下のようなコードで新規文書を表示しようとする場合、

Dim ws  As New NotesUIWorkspace
Dim ss  As New NotesSession
Dim db  As NotesDatabase
Dim doc As NotesDocument

Set db  = ss.CurrentDatabase
Set doc = db.CreateDocument

doc.Form = "フォーム名"

Call ws.SetTargetFrame("フレーム名")
Call ws.EditDocument(True, doc)

以下のエラーが表示されてしまいます。

Unable to find Document Window

この場合は、以下のように文書を保存するとエラーが出なくなります。

Dim ws  As New NotesUIWorkspace
Dim ss  As New NotesSession
Dim db  As NotesDatabase
Dim doc As NotesDocument

Set db  = ss.CurrentDatabase
Set doc = db.CreateDocument

doc.Form = "フォーム名"
Call doc.Save(True, True)

Call ws.SetTargetFrame("フレーム名")
Call ws.EditDocument(True, doc)

……が、文書を保存したくないケースがほとんどだとは思いますので、以下のように ComposeDocument にしたほうがいいかもしれません。文書に値をセットしたい場合は、ComposeDocument の戻り値の NotesUIDocument 経由でセットするとよいでしょう。

Dim ws As New NotesUIWorkspace
Dim ss As New NotesSession
Dim db As NotesDatabase

Set db = ss.CurrentDatabase

Call ws.SetTargetFrame("フレーム名")
Call ws.ComposeDocument(db.Server, db.FilePath, "フォーム名")

ただし、同一フレームに表示する場合は、最初に紹介したテクニックを使用すると、NotesUIDocument の戻り値が返ってこなくなります。どうしても同一フレームに表示したい場合は、環境変数で値を渡すしかないかな……? 他によいアイデアがあったら教えてください(> <)

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
読み込み中...

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 2378 to the field below:

^
×