- ブラウザから見たときのテキストフィールドの表示サイズを指定するには?
フィールドのHTML Attributesというところで指定するようです。書式はこんな感じで大丈夫でした。
例)"SIZE=\"25\" Type=\"password\""
- 文書を保存した後に表示される画面を変更するには?
普通に@command(FileSave)とかで保存すると「フォームの処理は終了しました」とかいうだけの画面に飛ばされてしまってどうしようって感じでしたが、$$Returnってフィールド(非表示でOK)を元のフォームの中に作成しておいて、その中に画面に表示させたい内容をhtmlで書いておくと、Webからの保存後はその画面が読まれるようです。
ただブラウザの「戻る」で戻る動作をしたいだけのようなときはこの$$Returnフィールドの値を
@If(@IsNewDoc;@Return(
"<SCRIPT Language=\"JavaScript\">location.href = location.href;</SCRIPT>");
"<SCRIPT Language=\"JavaScript\">history.go(-1);</SCRIPT>")
でもいけました。
この式、何をやりたかったのか忘れていますが。(webだと@IsNewDocとかは意味がないとか後で読んだような気も・・)
- 文字にリンクを張るには?
普通に<a href="">〜</a>ってタグで囲って書いて、それを選択してメニューバーの[文字]−[パススルーHTML]を選択する方法が一つ。
あと、普通に書いた文字(とかイメージ)を選択して[作成]−[ホットスポット]−[リンクのホットスポット]で表示されるプロパティボックスでURLを指定してもリンクになります。同じDB内の他の設計要素にリンクするときはこっちが便利。
編集するときもその辺の文字を選択して右クリックで「ホットスポットのプロパティ」で編集できます。
でもブラウザで見ると、このホットスポットで作ったリンクって、勝手に<font size=2>が指定されてて小さくなってるような?とりあえずパススルーの方にも<font size=2>を入れて見栄えを合わせて逃げたのですが、実際どうするのがいいのかな〜。
- デフォルトの検索画面を呼び出すリンクを作るのは?
こういうような検索画面はDominoサーバで用意しているみたいで、「http://サーバ名/db名.nsf/検索対象にしたいビュー名/$searchForm?SearchView」でリンクを張ると呼び出せました。
ちなみにこの画面のフォントが全部<font face="Sans-Serif">で指定されているせいで、環境によっては文字がみんな□□って表示されます(うちも)。これはIEの方の問題みたい。
http://www.microsoft.com/japan/support/kb/articles/J058/3/67.asp
検索の動作にはとりあえず問題ないです。結果の一覧は普通に見れるし。
- 今開いている文書ではない文書を親文書として、返答文書を作成するには?
たとえばFormAで文書を開き、その中のリンクからFormBに飛んで、FormB画面からFormAで開いてたさっきの文書への返答文書をFormCで作成するような場合・・って書くと複雑で、そんなことやるのか?って思ってしまいますが、実際、やれって言われるのですよね〜・・・。
返答文書を開く時に「ParentUNID=親文書のUNID」を引数にするとOKでした。この場合FormCが返答文書フォームとすると、リンクに
"FormC?OpenForm&ParentUNID=親文書にしたい文書のUnique ID"で。
作り方としては、まずFormAに自分のUNIDを保存するフィールドを作ります。たとえば名前を「MainUNID」、valueを「@Text(@DocumentUniqueID)」で。
で次に、FormBを「式で選択文書の値を引き継ぐ」で設計します。
で、引き継ぎ用のフィールドを作っておいて、そのフィールドのvalueに「MainUNID」って入れておきます。この辺はNotesでも同じですが。
で、FormBからFormCを開くときに「"FormC?OpenForm&ParentUNID="+フィールド名」みたいに書いて、なんとか。
でもこれだと他に独自の引数を渡したいときにうまくいかないような気がしました。
「"FormC?OpenForm&TestType=1&ParentUNID="+フィールド名」みたいにやってみたら、フィールド名の値が空になってしまいましたです。
※(追記)間違い。これでもいけるかもしれません。いけないかも。私が失敗したのはもっと面倒なことやろうとしたときでした。
あと、こういう風にgetメソッドを使ったときに値が引き渡されているかどうかは、表示先のフォームに「Query_String」って名前のテキストフィールドを作って表示すれば、見ることができます。
というか引き渡した値を自分で引き取って処理したいときは、このフィールドを作っておかないと取れないです。
- 入力された値を元に他のビューを検索して、その値を引き継いで新しくフォームを開くには?
FormAに入力画面を作って、そこで入力された値に一致するデータを拾って、FormBのフィールドにその拾った値を既定値としてセットした状態でFormBを開きたいとき。
プロフィール文書というのを経由させて、なんとか。
プロフィール文書の概要についてはノーツ陳列館というサイトの「プロフィール文書を活用するために...」の内容がわかりやすかったです♪
今回やろうとしている使い方とは違うけど。
やり方としては、まずFormAに入力された内容で他のビューを検索してプロフィール文書に書き出すまでのエージェント1を作成。
つぎにプロフィール文書から値を拾ってFormBのフィールドに書き込むためのエージェント2を作成。
これで、
FormAのWebQuerySaveに「@Command([ToolsRunMacro]; "エージェント1")」、
FormBのWebQueryOpenに「@Command([ToolsRunMacro]; "エージェント2")」で、検索結果の値がセットされてFormBが開きます。というかFormBが開くときに検索結果の値がセットされます。
エージェント1、2のサンプルはこんな感じ。(そのまま・・・)
この場合、プロフィール文書のフォーム名は"ProfileDoc"です。
プロフィール文書の中は"Namae"ってフィールド1個です(引継用)。
FormBで値をセットしたいフィールド名は"Namae"とします。
---
エージェント1
---
Sub Initialize
'フォームに入力されたユーザIDをtestuser.nsfの内容と照合します
Dim session As New NotesSession
Dim db As NotesDatabase
Dim db2 As NotesDatabase
Dim view2 As NotesView
Dim doc As NotesDocument
Dim doc2 As NotesDocument
Dim docprof As NotesDocument
Dim work_s1 As String
Dim servername As String
Dim FormName,MyForm As String
Set db = session.CurrentDatabase
servername = db.Server
Set doc = session.DocumentContext
'UserIDフィールドに入力された値を、同じディレクトリ内にあるtestuser.nsf内の(userid)ビューを
'利用して利用者ID一覧と照合し、一致した人のNamaeフィールドの値をプロフィール文書のNamae
'フィールドに書き出し。
work_s1 = doc.UserID(0)
fpath = db.FilePath
fpath = Left(fpath, Len(fpath) - Len(db.FileName))
fpath = fpath + "testuser.nsf"
Set db2 = session.GetDatabase( servername,fpath)
Set view2 = db2.GetView("(userid)")
Set doc2 = view2.GetDocumentByKey(work_s1 , True)
If doc2 Is Nothing Then
Print "一致するものがないです。"
continue = False
Exit Sub
Else
'プロフィール文書に名前セット
Set docprof = db.GetProfileDocument("ProfileDoc")
Set item = docprof.ReplaceItemValue( "Namae", doc2.Namae(0) )
Call docprof.save(True,True)
'フォーム名設定
'ここのところが、上で書いた、別の文書を親文書として返答文書を作るところサンプル。
FormName="FormB?Openform&ParentUNID="+doc.MainUNID(0)
'目的のフォームを開く。
'JavaScriptがOffのクライアントだと、ここで止まるかも(^^;
Print "<SCRIPT LANGUAGE='JavaScript'>location.href='" + FormName + "';</SCRIPT>"
continue = False
Exit Sub
End If
End sub
---
エージェント2
---
FIELD Namae := @If(Namae="";@GetProfileField("ProfileDoc"; "Namae");Namae);
@SetProfileField("ProfileDoc"; "Namae"; "");
""
余談ですが、FormAはワーク画面だから保存はしなくていいのになーというときは、FormAにSaveOptionsって名前のフィールドを作って、値に"0"をセットしておくと保存されないです。
- Webから文書を作ったら「計算結果」フィールドとか「作成時の計算結果」フィールドの値が保存されてない!
フォームのプロバティから「デフォルト」のタブ(帽子みたいな絵)を選んで「すべてのフィールドにHTMLを生成する」をチェックするとOKに。
- ナビゲータをWebクライアントから開くと「Error 500 HTTP Web Server: 例外 - 背景の図形が見つかりません。」
Webからアクセスする場合にはナビゲータの背景は1枚のBMPでないといけなくて、そうでないとこのエラーメッセージが発生するみたい・・・という記述をR5.netの懇談室で見たのですが、とりあえずうちの環境でこれが発生したときは、ナビゲータの情報プロパティで「Webブラウザ互換」にチェックを付けたら、正常に表示されるようになりました。(付いてなかった(^^; )
- フォームを開いたときにボタンが1つしか表示されない。
フォーム内にいくつかホットスポットボタンを配置していてもWebから開いたら最初の一つしか表示されなくて、しかもクリックしたら意図したとおりの動きではなくsubmitボタンのように動いてしまう。
→データベースのプロパティの「基本」タブから「Webアクセス:ページ生成時にJavaScriptを使用」をチェックするとOKに。
- DB名、パスが不定の時に自分自身にリンクを張るには?
自分自身のDBにリンクしたいときは、「<a href="/ディレクトリ名/DB名.nsf">○○</a>」でいけるようです。
?OpenFormとかのURLコマンドをくっつけたいときも、↑この形でディレクトリ名から指定した上でつけるのがいいみたい。普通のhtmlなら既にファイルが開いているときはディレクトリ名の指定はいらなそうな気もするのですが、nsfでは常にトップからのリンクが必要?なのかな?
↓以下は「/ディレクトリ名/DB名.nsf」をいつでも取れるようにするためのメモ。
■@コマンドでやりたいとき。
"/"+@ReplaceSubstring(@Subset(@DbName; -1); "\\"; "/")
■LotusScriptでやりたいとき。
'いちおう宣言も
Dim Session As New NotesSession
Dim DB As NotesDatabase
Set DB = session.CurrentDatabase
'ここから。fPath4に目的の形で入ります。
fpath4 = DB.FilePath
position = Instr(1,fPath4,"\")
Do While Position >0
Mid(fPath4, position, 1)="/"
position = Instr(position,fPath4,"\")
Loop
fPath4="/"+fPath4
どっちも、たとえばtest\work.nsfというDB名の場合には「/test/work.nsf」という値になります。
「\」を 「/」に変換してるけど、しなくても良きに計らってくれるのかな?
ファイル名、ファイルパス取得メモについては別途こっちにも書いてみました。
- 普通のhtmlはどこに置けばいいの?
.nsfではなくて.htmlをそのまま使いたいときは、サーバー文書の[インターネット]−[HTTP]タブの中の[マッピング]セクションに書いてある「HTMLディレクトリ」の中(既定ではDominoプログラムフォルダの中のdomino\htmlフォルダ)に置くようです。
クライアントからファイル名が省略された要求が来たときに何ていうhtmlファイルを表示するかは、[基本情報]セクションの「デフォルトホームページ」で指定。
普通index.htmlとかindex.htmだけど、なぜかDominoサーバでの既定値はdefault.htmになってます。
たとえばDominoサーバのホスト名serverの中にあるtest\work.nsfというDBをWebで公開していたとすると、
「http://server/test/work.nsf」
というURLになりますが、ここで
「http://server/test/」
というURLをクライアントから指定されたとき、予め用意しているhtmlファイルを表示しようと思うと、「HTMLディレクトリ」で指定されてるhtml置き場ディレクトリの方にtest/ってフォルダを作っておいて、そっちにdefault.htmを置く必要があるようです。面倒。