いいね!数

0

閲覧数
363

フレームセットに二つの文書が表示されています。

片方の文書に配置されているボタンをクリックすると、もう一方の文書を印刷するようにしたいのですが、NotesUIDocument.Printメソッドを使おうにもフレームに表示されている文書のNotesUIDocumentオブジェクトを取得できず困っています。

どういうやり方があるでしょうか?

サーバー情報:9.0.1 | クライアント情報:Windows9.0.1 | 
カテゴリ:アプリ開発 - Notes アプリ | タグ:
  | 質問日時:2018/11/12 14:35:30

回答・コメント

いいね!数

0

こんにちわ。

ターゲットのフレーム指定してもダメでしょうか?

 

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument

Call workspace.SetTargetFrame("frameA")
Set uidoc = workspace.CurrentDocument
回答日時:2018/11/12 15:18:22

いいね!数

0

ご回答ありがとうございます。

やってみましたが駄目でした。ボタンの配置されている方のNotesUIDocumentが取得されてしまいます。

回答日時:2018/11/12 15:38:53

いいね!数

0

既に開いてある他フレーム文書の NotesUIDocument を取得するのは恐らく無理でないかと。

できるとすれば、そのボタンを開く側のフレームから文書を開くときの戻り値でNotesUIDocumentが取得できるので
( SetTargetFrame() 後の ComposeDocument() or EditDocument() )、
印刷かけるボタンのある文書側から文書を開くような作りになっているなら可能かもしれないですが…


基本的にはNotesアプリでフレーム間のやりとりは出来ないものと考えた方がよい気がします。
(XPagesなどWebでやるなら話は違ってきますが)

回答日時:2018/11/12 18:07:44

いいね!数

0

ご回答ありがとうございます。

>SetTargetFrame() 後の ComposeDocument() or EditDocument()

の戻り値は取得できません。Domino Desigerヘルプにも、フレームでこれらのメソッドを使う場合にはreturnNotesUIDocumentオプションをFalseに設定して値を返さないようにするよう書いてあります。Trueにするとエラーになります。

 

やはり

>Notesアプリでフレーム間のやりとりは出来ない

ということになるのですね。

これはどう考えてもNotesオブジェクトモデルの設計ミスではないのかと思います。UI要素にフレームを追加した際にNotesUIFrameSetみたいなクラスを用意してくれていれば良かったのに。

回答日時:2018/11/13 12:46:58

いいね!数

1

フレーム設計はNotes5の時代からあるので、設計ミスかどうかは分かりませんが、フレーム間の動きは弱いですね。

ちなみに式でやればうまくいきました。

@SetTargetFrame( "FrameB" );
@Command([FilePrint])

 

式で出来たエージェントをスクリプトのagent.runでいけるか試してみましたが、こちらはダメでした。

 

なので、スクリプトだけでするとなると、ykawaさんが仰るように、開きなさないとだめだと思います。

 

下記は、左のフレームにあるビュー上でカーソルある文書を右フレーム(FrameB)に開いて印刷するといったものですが、実現できました。

右で開いているdocが取れる前提です。

 

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set doc = collection.GetFirstDocument()
    
    
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    
    Call workspace.SetTargetFrame("FrameB")
    
    Set uidoc = workspace.EditDocument(False, doc)
    Call uidoc.Print

回答日時:2018/11/13 13:52:16

いいね!数

2

フレームでEditDocumentの戻り値を取得できるのですね!

ヘルプにはエラーになると書いてあるし、ComposeDocumentで過去にやって実際にエラーになったので、EditDocumentもエラーになると思い込んでいました。

実際にやってみると、確かにエラーは出ませんでした。

 

もしかしたら仕様外の動作かもしれず、いつIBMの都合でヘルプに書いてある通りの動作に変更されても不思議ではないのが不安ではありますが、とりあえずこの件は解決といたします。

(本当は直前のRiits西さんのコメントがBest Anserですが、回答ではなくコメントになっているためBest Anserを付けられません)

回答日時:2018/11/14 12:30:13