投稿

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

IBM Champion for ICS 2017に認定されました!!

イメージ
皆さん、おはようございます。
今日はなんと2016年12月15日。あと2週間ちょっとで2016年が終わってしまいます。

年を取ったせいか、だんだん1年が過ぎるのが早く感じます。
すぐにおじいちゃんになっちゃいそう(汗)。


さて、すでにみなさんご存知かと思いますが、私もシェアします。

Introducing the 2017 IBM Champions for ICS!

にある通り、2017年度のIBM Champions for ICSの発表がありました。
今年は123名(1-2-3にちなんだの?)と、過去最大のメンバーがIBM Champions for ICSに認定されました。 日本からは、 チームスタジオジャパン 加藤満さま ケートリック 田付和慶さま ソルクシーズ 吉田武司さま
キーウェアサービス 河上剛さま
エームサービス 小野誠さま の5名に
私こと、
エフ 御代政彦

を加えた6名が選ばれました(昨年は4名とちょっと寂しかったので嬉しいです♪) 新任のChampionは44名と若干少なめ(35.7%)なのが気になるところではあります
※1年任期の制度なので、もっと入れ替わってもいいと思います。



何はともあれ、
2017年もIBM Championとしての自覚をもってコミュニティ活動に勤しんでまいりますので、皆様もご協力のほどよろしくお願いします。



では、今日はこの辺で・・・







Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→

XPagesDayのセッション資料を公開しました

イメージ
皆さんおはようございます。

本日(2016年11月24日)は、東京はなんと54年ぶりに11月中に雪が降ったとのことです。
各種交通機関にも乱れが発生したようですね。

さて、今週の月火に行われたXPagesDay 2016はいかがでしたか?
今年は、初めて講師をやるという方が4名もいらっしゃって、ちょっと変わったかな?という印象がありました。

私も僭越ながら講師をさせていただきました。
ここ数年、REST APIについての話をしてきましたが、他の方のセッションでも話がちらほら出てくるなど、そろそろREST APIも一般的になってきただろうということで、やめて別の話にしてみました。


今回は、「XPagesで検索をしてみよう」と題して、XPagesアプリで全文検索をするにはどのように設定すればいいのかについて解説してみました。

ノーツクライアントで全文検索を行う場合は、 ノーツクライアントにあらかじめ全文検索を便利に行うための機能([表示]-[検索バー])が備わっていますが、XPagesアプリは基本的にWebブラウザで動作するものなので、そういった便利機能は標準装備されていません。
そのあたりを便利に組み込む方法について解説したつもりですが、少しでもご理解いただけたなら幸いです。

セッション資料はSlideShareに共有させていただきました。
子のブログ記事内に埋め込んでおきますので、聴いていないという方や聴いたけど再確認したいという方は見てみてください。



XPagesで検索してみよう from Masahiko Miyo

ちなみに、今回のセッションを行うに当たって、ノーツコンソーシアムの「ザ・ノーツ研究会」の皆様のお知恵を拝借させていただきました。
この場を借りて、厚く御礼申し上げます。本当にありがとうございました。



それでは今日はこの辺で・・・







Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→

日付/時刻の変換を行う(UTC形式編)

イメージ
皆さん、日曜日にこんにちは。
明日の2016年11月21日と11月22日はXPagesDayです。
仕事もしつつ、自席でWebセミナーを満喫してくださいね。
サイトはこちら。XPagesDay


さて、そんな日曜ですが、今日はそれとは関係ない単なるXPagesの話題です。
しかも、またまた日付/時刻についてです。

XPagesで日付を扱う場合、色々な形式があります。
NotesDateTimeオブジェクト、java.util.Dateオブジェクト等々・・・
また、日付/時刻を表す文字列というのもその一つでしょう。

Notesクライアントでも、「@Text(@Now)」のように、日時をテキスト化することもありますね。
当然、XPagesでもそういったことは可能です。

Notesクライアントで利用していたような日付/時刻の表し方であれば、当ブログでもさんざん書いてきましたので、さほど難しくはないと思います。
しかし、REST APIを使ってデータのやり取りをする場合、ちょっと変わった形式でのやり取りとなります。

下の画像を見てください。
私がサンプルで作成したXPagesアプリケーションで、文書のデータをJSON形式で表示するようにしたものです。

赤枠の個所を見ると、日付/時刻と思われますが、何やら見慣れない形式になっています。
これは、ISO8601形式というUTCの時刻を表現するものです。

REST APIを使って日時データをやり取りする場合は、通常このデータ形式を使うことになっています。
Notesの文書の日時をWebサービスとして提供する場合や、外部のWebサービスの日時データを取得する場合などがそうですね。

となってくると、この文字列をXPagesアプリケーションで理解できるようにする必要があります。
つまり、java.util.DateやNotesDateTime形式への変換ができるようにするということです。


ここで、
Javaの世界には「SimpleDateFormat」というクラスがあります。
それを使えば、自由に表示形式を定義できるのでいいのですが、折角ならXPagesに備わっている関数を使ってできればそれに越したことはないでしょう。



ということで、探してみました。
あるものですね。
I18nクラスにparseDateXMIやtoStringXMIと…

フォームというアイテム名について

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

Notes/Domino、使ってますか?
11月はNotes/Dominoに関するイベントが多数開催されます。
ちょっと整理してみてみましょう。

11月9日(水) ノーツコンソーシアム オープンセミナー2016 ノーツでワークスタイル変革を!
11月10日(木) IBM Connect Japan 2016 福岡
11月18日(金) ノーツ・しこく・フェスタ 2016 AI×IoT×クラウドの衝撃!
11月21(月)~22日(火) XPagesDay 2016
11月22日(火) テクてく Lotus 技術者夜会

私が把握しているだけでこれですので、各企業様の個別開催等を考えるとものすごい数ですね!!
是非、都合をつけて参加するようにしましょうね。


さて、今日の話題に進みましょう。
qa9 for ICS Developer
でちょっと気になる質問を見つけたので、調べてみたところ、あまりにも奥が深かったので、ブログの記事にしてみます。

質問はこちらです。
ノーツDBのフォーム名に関しての質問

Notes DBで文書を作成すると、どのフォームで開くのかを決めるためのフォームフィールド(アイテム)が自動で作成されます。
それが"Form"になったり、"form"になったりと固定でないのがなぜなのか?ということですね。
Notesクライアントの中だけの話と考えると、ほぼ影響はないのですが、外部連携やJava、JavaScript等を利用する場合には大文字、小文字の判定が行われてしまい、思った通りの結果が得られないことがあります。
ですので、"Form"だったり"form"だったりと不定では困るということです。


では見ていきましょう。

まず、既存のNotes DBをいくつか確認してみました。
すると、確かに"Form"になっているものと"form"なっているものがあるのを発見しました。


ということで、質問者が言っていることは確かに起こりうるというのがわかりました。
このNotes DBの文書を確認してわかったことがあります。
フォームは複数ある。全文書のフォームフィールド名は"form"になっている。フォームの設計要素…

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…

XPages研究会のハンズオンをまとめましたよ(2)

イメージ
はい、こんにちは。

前回(XPages研究会のハンズオンをまとめましたよ(1))の続きです。

前回は、Node-REDアプリ経由でTwitterのつぶやきデータをIBM Bluemix上のXPages NoSQL Databaseに格納するところまで実装しました。


次は、XPages NoSQL Databaseの内容をXPagesアプリで表示してみましょう。ということでXPagesアプリを作成します。

5.xspアプリを作成するBluemixのダッシュボードに戻り、「Cloud Foundryアプリ」にある[アプリの作成]をクリックする 「どのような種類のアプリを作成しますか?」を聞かれるので、[Web]をクリックする 「どのように開始しますか?」を聞かれるので、[XPages]をクリックする 画面下にXPagesの説明が表示されるので読んだら、[続行]をクリックする 「新規アプリはどのような名前にしますか?」と聞かれるので、[アプリ名]にアプリケーションの名前を入力する(*1)[完了]をクリックする アプリケーションのステージングが完了するのを待つ「アプリは実行中です。http://~」の表示になったら、ダッシュボードに戻る実行中になっているxspアプリをクリックする アプリケーションの画面になるので、[サービスまたはAPIのバインド]をクリックする 「アプリケーションへのサービスの追加」画面が表示されるので、作成したXPages NoSQL Databaseを選択して[追加]をクリックする 再ステージが必要という画面が表示されるので[再ステージ]をクリックする 再ステージが完了すると、アプリケーションの画面にXPages NoSQL Databaseが追加されているのが確認できる
*1 任意で良いが、Bluemix全体でユニークである必要があるので、自分のものと分かり易いような名前をつけること


これでXPages on Bluemixとしての準備はできましたが、まだXPagesアプリをきちんと作成していません。
ここでようやくIBM Domino Designerを使ってXPagesアプリを作成します。

6.XPagesアプリを作成する前回の記事の「2.XPages NoSQL Databaseサービスを作成」でダウンロードしたBluemix用のNotes User IDを使っ…