[Notes/Domino] フォームでアンカーリンクを実現する方法
ノーツクライアントでパススルーHTMLを使ってみようシリーズ第3弾です。これでひとまず最後にします(^^;
フォームが縦に長くなりすぎた場合(かつセクションとかが使えない場合)に、特定箇所にジャンプさせたいことが稀にあります。Webではアンカーリンクにしておけば簡単ですが、ノーツクライアントではこれに相当する機能がありません。(もちろん、リッチテキストに埋め込むタイプのアンカーリンクはありますが、フォームの設計に埋め込むことができません……。)
編集モードでは、適当なフィールド(もしくはダミーフィールド)に GotoField すれば逃げられます。しかし、読込モードでは GotoField も効かないので、どうしたらよいものか、と悩んでしまいます。
こんなとき、パススルーHTMLを使うと、アンカーリンクを実現することができます。(読込モード限定ですが。)
手順
1. フォーム設計のジャンプさせたい箇所に、以下のタグを入力し、パススルーHTMLにします。(以下は、フォントサイズ1ptの白い文字を無理矢理追加する方法ですが、リンク先にできる文言がある場合は、その文言を a タグで囲んでください。)
<span style="font-size:1pt; color:white;"><a name="(アンカー名)">.</a></span>
2. ボタンなどを追加し、以下のスクリプトを記述します。
Dim ws As New NotesUIWorkspace Dim doc As NotesDocument Set doc = ws.CurrentDocument.Document Call ws.EditDocument(False, doc, False, "(アンカー名)", False, False)
以上で、ボタンを押すと 1 のタグを埋め込んだ場所にジャンプするかと思います。使い道はあまり無いかもしれませんが、覚えておくとどこかで役に立つかもしれません。
コメント
フォーム内のアンカーリンクの作り方を利用させてもらいました。
Give&Takeということで勝手に報告します。
一寸変則環境でうまく動作せず、それを解消できたという報告です。
6.5環境で、ここで紹介されている方法でOKでした。
ただ8.5クライアントが共存しており、8.5クライアントから利用する場合に不具合に遭遇しました。
それは読込モードなら問題ありませんが、編集モードで問題が発生しました。
その編集モードの時の現象は、一瞬アンカーへ飛ぶ(画面がチラとアンカー先へ移動)のですが、トップへ戻ってしまうという現象です。
色々と試しましたら以下の方法でこの現象が回避できました。
アンカーを、パススルーhtmlではなくて、適当な文書のリッチテキスト上にアンカーリンクを、利用したいアンカー名でで作成する。
そして、そのアンカーの部分をコピー&ペーストでフォーム設計を開いている画面にペーストする。
これで問題が解消しました。
文書からコピー&ペーストでアンカーリンクがフォーム上に作れるのなら、デザイナーで最初からアンカーリンクを作る手段をなぜIBMは提供しないと、思った出来事でした。
Posted at 2012/03/21 1:08 AM by なっから
先程書き込んだいことは根本的に間違いでしたので、無視してください。
まだ解決方法を探っている最中です。
Posted at 2012/03/21 2:26 AM by なっから
なっからさん、コメントありがとうございます! 😀
いやもう、コメントしていただけるだけでうれしいです!
編集モードでアンカーが動かないとのことですが、わたし的には
まぁそういうもんかな(ノーツだし)、とあきらめておりました。
昔作ったDBでは、どこか適当なフィールドに GotoField することで
逃げたと思います。
適当なフィールドが無い場合は、ダミーフィールドを作って、以下のように
すればいいのかなと思います。
1. ダミーフィールドに非表示式を書いておきます。(例: !(Flg = “1”) )
2. ダミーフィールドを表示します。(例: Flg に”1″をセットし、NotesUIDocument.RefreshHideFormulasを実行)
3. ダミーフィールドに GotoField します。
4. ダミーフィールドを非表示にします。(例: Flg をクリアし、NotesUIDocument.RefreshHideFormulasを実行)
ただ、これだとアンカーみたいに綺麗に飛ばないのが難点です……。
なんでこう、痒いところに手が届かないんでしょうねぇ(´~`)
Posted at 2012/03/21 10:57 PM by takenoff
takenoffさん、有難うございます。
あの後、takenoffさんとほぼ同じ方法で急場しのぎをしています。
コードは下記のとおりです。
If notesUIDocument.EditMode = True Then
Call notesUIDocument.GotoField(“アンカーに隣接すフィールド名”)
Else
Call NotesUIWorkspace.EditDocument(False, NotesDocument, False, “アンカー名”,False,False)
End If
ただ8.5クライアンの編集モードでも一瞬はアンカー先に飛んでいますので、引き続き調べています。
なにか進展がありましたら、またコメントさせて頂きます。
Posted at 2012/03/22 11:24 PM by なっから
コメントありがとうございます 😀
なんかこう、できそうでできないと殺意が湧いてきますよね(^^;
XPages とかも結構ですけど、もうちょっとレガシーなフォームも進化させてほしいところです。
こちらも何かよいアイデアが思いついたらアップデートしますです。
Posted at 2012/03/22 11:49 PM by takenoff
takenoffさん、8.5クライアントの編集モードでも動作させることが出来ました。
発想は、一旦はジャンプしているの様に見えましたので、2回ジャンプさせたらもしやと思い試したら思ったとおりの動作になりました。
8.5の不具合であることは間違いなさそうですが、回避できたので、これで善しとしました。
コード例は下記のように2回ジャンプさせるという強引なものです。
Call NotesUIWorkspace.EditDocument(False, NotesDocument, False, “アンカー名”,False,False)
Call NotesUIWorkspace.EditDocument(False, NotesDocument, False, “アンカー名”,False,False)
Posted at 2012/04/03 6:59 PM by なっから
をををッ!
こんな難問を解決なさるとは、さすがなっからさん! 😯
私も R8.5.2 でご指摘の方法を試したところ、確かにうまくいくことを確認いたしました。
仮にこのバグが直ったとしても、この方法なら将来的にも問題なさそうですね。
私の書いた記事の至らないところを解決していただきまして、まことにありがとうございます!(_ _)
Posted at 2012/04/03 7:57 PM by takenoff
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。