2022/06/15

NotesForm.GetFieldType が返す数値について

ノーツの文書にあるアイテムの型を調べるときは NotesItem クラスの Type プロパティを参照しますが、文書ではなく設計要素の「フォーム」から直接フィールドの型を調べるときは NotesForm クラスの GetFieldType メソッドが使えます。


標準テンプレート等にあるフォーム上の「Subject」フィールドのタイプは通常「テキスト」です。

テキスト型の場合、次のコードにある form.Getfieldtype("Subject") は 1280 を返します。

Sub Initialize
	Dim ss As New NotesSession
	Dim form As NotesForm
	
	Set form = ss.Currentdatabase.Getform("MainTopic")
	msgbox form.Getfieldtype("Subject")
End Sub

GetFieldType メソッドが返す値について、オンラインヘルプに次のような一文があります。

Integer. The type of the field as specified in Type in NotesItem.

そして文の "Type" のところに設定されていたリンクをクリックしたところ、NotesItem クラスの Type プロパティについて書かれたヘルプ文書が開きました。

開いたヘルプ文書には、テキスト型の値の説明として次のように書かれています。

TEXT (1280) means text or text list.

「text or text list」とあるので複数値を許可したフィールドも 1280 を返すようです。


そこで「複数値も可」にチェックをつけたフィールド「MultiValueSubject」をフォームに追加して、どんな値が返ってくるか確認しました。


コードのフィールド名も変えます。
Sub Initialize
	Dim ss As New NotesSession
	Dim form As NotesForm
	
	Set form = ss.Currentdatabase.Getform("MainTopic")
	msgbox form.Getfieldtype("MultiValueSubject")
End Sub

するとどうでしょう。
1280 ではなく 1 多い 1281 が返りました。
※このコードは 12.0.1 FP1 で実行しています。


ものは試しと、「テキスト」以外にも「数値」と「日付/時刻」のフィールドを2つずつ追加し、一方は「複数値も可」をチェック「無し」、他方を「有り」にしました。

すると、チェック「有り」のフィールドに対する戻り値は、「無し」のフィールドのそれより 1 多い値が返りました。

フィールドタイプ単数値複数値も可
テキスト12801281
数値768769
日付/時刻10241025

他にも、読者、作成者、名前の場合の戻り値は「複数値も可」の設定によらず同じであること、フォームではなく「フォームを使って作成した文書」から notesitem.type プロパティを確認すると、こちらは単数値と複数値で戻り値に差は無いことがわかりました。

本件をメーカーサポートへ問い合わせたところ、既知の不具合 SPR#BHAS62D6CS として報告されているとのこと。対象のバージョンは 9.0.x から 12.0.x までと幅広い。

また、次のリンクで新たに情報を公開したと教えていただきました。


上のリンクにも記載がありますが、「テキスト、数値、日付/時刻」以外では「ダイアログリスト」でも、単数値が 1280 に対して「複数値も可」だと 1281 を返すとのこと。

ちょっと厄介かなと思ったのはフィールドタイプを示す定数です。
例えば、フィールドタイプが「日付/時刻」を示す値 1024 は定数 DATETIMES で表わせますが、「複数値を可」にチェックを付けたフィールドは 1025 を返すため、この定数ではマッチしないのです。

以上、 NotesForm.GetFieldType メソッドを使うときに思い出したい情報でしたので共有させていただきました。

0 件のコメント:

コメントを投稿