投稿

9月, 2016の投稿を表示しています

XPagesでカテゴリフィールドに設定する

イメージ
皆さん、こんにちは。今週で9月も終わりです。9月といえば、一つの区切りという感じがします。
企業の期だったり、テレビでいえば番組改編期だったり。

10月になると何か変わるのかな?って調べてみたら、「厚生年金保険・健康保険の加入対象が広がる」そうです。
私には直接は関係ないのですが、こういうことも知っておかないといけないですね。


閑話休題。


さて、今日もXPagesの話題です。

クラシックアプリでよくやっていた?のが、ダイアログフィールドを作成して、既存のフィールドから選択したり新規に値を設定したりするという、分類わけするためのフィールド設定だと思います。

ちなみにこのフィールドの設定内容は次の通りです。

実際にこのフィールドを使って文書を作ってみました。
そしてカテゴリ別ビューという形で表示したのが下図です。

これをXPagesで実現する方法って・・・書いてなかったんですよね。

ただし、実際には「タグ」を使いましょうということで記事を書いています。
タグクラウドを使ってみよう
Dojo リストテキストボックスを使ってタグっぽく表現してみよう

これはこれで便利なんですけど、すでにどんなタグが作成されているのかを確認するのが難しいんですよね。

なので、クラシックアプリと同じような形で入力できるようにしましょう。

まず、フォームを表示するためのXPageを作成しておきます。

次に、カテゴリフィールドに対応するコントロールを配置します。
カテゴリは複数選択できるようにしたいので、リストボックスコントロールを配置します。
データソースのバインドは当然、カテゴリフィールドです。
そして、「値」の項目には、フィールドの設定内容と同じように、カテゴリを取得するための式を入力します(今回は「byCategory」ビューの1列目から取得するようにします)。
また、複数設定できるようにするため 、その設定も含めます。
コントロールの部分をソース表示すると以下のような形になります。
<![CDATA[#{javascript:@DbColumn( "", "byCategory", 1 )}]]>
これで、既存のカテゴリを選択することができるようになります。
今度は新規でカテゴリを入力させるためのコントロールを配置します。
こち…

XSPUserAgentのテストをしてみた

イメージ
皆さん、XPages開発は順調ですか?

XPages開発をするということは、Notesクライアントで使っていたNotes DBをWeb化するというのが基本路線でしょう(XPinCといったNotesクライアントでXPagesアプリケーションを動作させる方法もありますが。

Web化する場合、使用するブラウザによっては想定していたのと違う動きをすることがあります。
そのような場合、ユーザーエージェントによってHTTPリソースを取得して、その値でブラウザ情報を判断して動きを変えるようにしたりします。

従来のNotes Webアプリでもユーザーエージェントは取得できましたが、XPagesの場合はどうすれば良いのでしょうか?

実は、XPagesでは、そのための関数が一通り用意されています。
JavaScriptのXSPUserAgentクラスを利用します。
取得方法は簡単で、SSJSで以下の記述をするだけです。

var uagt = context.getUserAgent();

これでユーザーエージェントがuagtという変数に格納されました。
後は、このクラスに設定してある関数を実行すれば結果を得ることができます。
ブラウザ名やバージョン等が取得できます。
実際に簡単な画面を作って実行したものが下図になります。


どうでしょう。
そんなに難しくはないですよね。

たとえば、ブラウザ情報を取得したい場合は
context.getUserAgent().getBrowser() と記述します。


ただ、一つ難点があります。
下図を見てください。同じXPagesアプリケーションをIE11で実行したときのものです。

赤枠の部分をみると、
ブラウザ情報が取得できていない。当然ブラウザのバージョン番号も取得できていない。そもそもIEであると判断されていない
ということがわかります。

このままではユーザーエージェントを使ってブラウザ情報を取得できない!ということになってしまいます。
うーん。どうしたものか・・・と悩みつつ、回避策はないものかと調べていたら、
ありましたよ。すでに。まぁ当たり前ですよね。

こちらです。
XSPUserAgent Methods Do Not Detect IE 11


さらに、すでにXSnippetsというサイトにも出ているじゃありませんか。


便利ですね。
何はともあれ…

特定のアイテムだけコピーしてみよう

イメージ
皆さんこんにちは。

三連休ですが、天気が悪いのであまり外出する気分になれません。
仕方がないので?ブログ記事を書くことにしました。

XPages関連に行きたいところですが、諸事情により、今日もLotusScriptのサンプルです。
今日はNotesDocumentクラスのCopyItemについてです。
なんかこんなメソッドのサンプルなんて書いているだろうと思っていたのですが、書いてませんでした(笑)

どうやら、私自身はあまり使ってこなかったようです。
ですが、書いてあった方が色々と役に立つこともあるでしょうから作成しておきましょう。


ちなみに、このサンプルは、自文書内の「Body」というリッチテキストフィールドの内容を新規文書にコピーするというものです。
リッチテキスト内の文字はもちろん、画像や添付ファイルまでコピーしてくれます。
決まったフォーマットのものを文書に格納しておいてそれを別の文書に格納するときなんかに使えるかな(どんなシチュエーションだ・・・)


Sub Click(Source As Button)     On Error Goto ErrProc         Dim uiws    As New NotesUIWorkspace     Dim uidoc   As     NotesUIDocument     Dim udoc    As     NotesDocument     Dim ritem   As     NotesRichTextItem     Dim session As New NotesSession     Dim db      As     NotesDatabase     Dim newdoc  As     NotesDocument         Set uidoc  = uiws.CurrentDocument     Set udoc   = uidoc.Document     Set ritem  = udoc.GetFirstItem( "Body" )         Set db     = session.CurrentDatabase     Set newdoc = db.CreateDocument     Call newdoc.ReplaceItem…

未読文書数を数えてみよう

イメージ
皆さんこんにちは。
世間ではNotes/Domino 9.0.1のサポート期間が2021年9月までだとか8.5.xのサポート期間が2018年9月までだとか言ってますが、気にしません。
※9.0.1は「少なくとも」2021年9月まではサポートするよということでそこで終了とは限らないそうです。 Windows XPだってサポート終了してますが使ってる人いますよね?
IEだってOSによっては11しかサポートしてくれませんが、IE8を使ってる人いますよね?
そんなもんです。
きちんと動作してくれればそれでいいんです。
でも、せめてバージョンはあげてほしかったですね(9.0.2でも、10.0.0でもなんでもいいけど、9.0.1で延長しますというのはちょっと寂しかった)。

詳しいことはネット上にあふれているのでそちらを探して読んでみてください。


こちらのブログは通常運転です。

ということで、今日はヘルプの誤記についてのお話です。

Notes DBの未読/既読ってよくできてますよね。
ワークスペースアイコンにも未読文書数を表示することができます。

メールDBでは、フォルダごとに未読文書数が表示されたりします(ビューでは表示されない)。

さらに、文書が未読なのか既読なのかをプログラムで判断することもできます。
文書の未読既読状態をチェックするを参照。


ここまで来たら、Notes DBの未読文書数もプログラムで数えてみたい!
ということでそんなメソッドがあるのかな?と調べてみました。
まぁ、ありますよね。えぇありましたよ。
NotesDatabaseクラスにGetAllReadDocumentsメソッド、GetAllUnreadDocumentsメソッドなるものがありました。
前者が既読文書数のコレクションで、後者が未読文書数のコレクションです。
デザイナーヘルプによると、構文は次の通り。
Set notesNoteCollection = notesDatabase .GetAllReadDocuments( [username] )

ヘルプはGetAllReadDocuments (NotesDatabase - LotusScript®)を参照

へぇ。コレクションと言ったらNotesDocumentCollectionかな?と思ったら設計の一覧(NotesNoteCollecti…

リッチテキストに文字揃えを設定してから文字列を追加する

イメージ
みなさん、こんにちは。

今日、9月7日はチャルメラが発売された日らしいです。まぁ、私は食べないので関係ないのですが・・・

さて、今日はqA9 for ICS Developersに投稿された質問に対してのサンプルを作成してみます。

お題は、リッチテキストフィールドに文字列を追加する際、右寄せの状態でできるか?
というものです。

答えはXスニペットというサイトに載せてありますので、参照してみてください。

こちら→文字揃えを設定してリッチテキストに文字列を追加するです。



ちなみに、リッチテキストに表を作成するのを含めたサンプルはこちら。
表自体の位置を設定することはできなさそう。

Function funcCreateRichText() As Boolean     funcCreateRichText = False         Dim session   As New NotesSession     Dim db        As     NotesDatabase     Dim doc       As     NotesDocument     Dim ritem     As     NotesRichTextItem     Dim rpara1    As     NotesRichTextParagraphStyle     Dim rpara2(2) As     NotesRichTextParagraphStyle     Dim uiws      As New NotesUIWorkspace         On Error GoTo ErrProc         '新規文書の作成     Set db    = session.CurrentDatabase     Set doc   = db.CreateDocument         '文書情報の生成     Call doc.ReplaceItemValue( "Form", "fmRichText" )     Call doc.ReplaceItemValue( "Subject", "自動作成文書_" & Format( Now, "yyyy…

LS2JでREST APIを実行してみよう

イメージ
皆さん、こんにちは。

9月に入ってしまいました。
だんだんと日が落ちる時刻が早くなってきてますね。18時を過ぎると暗くなってきてます。
こうやって夏は過ぎていき、秋が来るんですね。

さて、今日もREST APIについてのお話です。
ただし、今回はXPagesではなく、Notesクライアントからの実行ができるように進めていきます。

REST APIはHTTP通信を行いますので、Notesクライアントからはそのまま(@関数やLotusScriptを使う)では実行できません。

そこで、Javaプログラムを組んでそれを実行することになります。
NotesクライアントからJavaプログラムを実行するにはいくつかの方法があります。

Webページを表示させて、その中でJavaプログラムを実行するJavaエージェントを作成して、LotusScriptから呼び出すLS2Jを使ってLotusScriptからJavaを実行する

1.はNotesクライアントはWebブラウザも内包されているのを利用しているものです。

2.はソルクシーズの吉田さんもブログ記事にしている(Notes から MQTT を使って Publish する(Quickstart : Watson Internet of Things Platform))ものですね。
もっとも、こちらの記事ではRESTではなく、IoTを使うためのMQTTをJavaエージェントで実行していますが。

3.は古い記事ではありますが、「Notesサポートのつぶやき」というブログのLS2J : LotusScript でJavaのクラスを呼び出してみるにあるLotusScriptを拡張してJavaプログラムを呼び出せるという方法をつかっています。

いずれもJVMを使うことになるので、メモリ使用量に気を付けなければいけませんが、それでもNotesクライアントから実行できるというのはなかなか面白いものだと思います。

今日は、これらのうち、「3.LS2Jを使ってLotusScriptからJavaを実行する」という方法でREST APIを使ったプログラムを実装してみます。



実装するのはお決まりの郵便番号検索です。
郵便番号を入力したら、郵便番号データ格納したNotes DBにREST APIで接続して、該当する住所情報を取得してくるというものにします(XP…