投稿

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

$Createdにまつわる挙動が変わってた

イメージ
皆さん、こんにちは。
ついに12月です。今年ももう残すところ、20日とちょっとです。
本来なら、一年を振り返りましょうね。とかいうところですが、恐ろしいので、振り返るのは止めておきます。

さて、今日も日付の話です。
地球が丸いのがいけないのか、日付の取り扱いはとても難しいですね。



$Createdという予約フィールドがあります。
こちらは、ご想像の通り、文書の作成日を格納しておくのに使えるフィールドです。

通常の文書には存在していませんが、任意で作成できるようです。
また、Notes/Dominoが自動で付与することもあるようです。

そんな$Createdですが、@関数とLotus Scriptで挙動が違うのはご存知でしょうか?
こちらのブログ
[Notes/Domino] $Created と @Created
によると、

文書に$Createdがあると、@Created関数はそのフィールドに格納されている値を返すとのこと。
悪く言えば、文書の作成日を偽ることができるというものです。
しかし、Lotus ScriptのNotesDocument.Createdプロパティは$Createdを無視して、本来の?文書の作成日を返すというものです。



ところが・・・ところがですよ!

Notes/Domino 9.0.1 *1 では、文書に$Createdがあると、Lotus ScriptのNotesDocument.Createdプロパティもそのフィールドに格納されている値を返すではありませんか!?
*1 私が確認したのが9.0.1なので、おそらく9.0.0から変わったものと思われます

なお、Notes/Domino 8.5.3では、以前のようにLotus ScriptのNotesDocument.Createdプロパティは$Createdを無視していました。


これにより、@関数とLotus Scriptで挙動が等しくなったので、これが正しい。良かった!といえなくもないのですが、これといったドキュメントも見つからなかったので(当然、ヘルプにも出てないです。というかヘルプでは$Createdフィールドについて触れてすらいないという・・・)、発覚?に時間がかかりました。



些細なことではありますが、$Createdや文書の作成日を利用したNotes DBがある場合、9.0.x以降に…

2016年度のIBM Champions for Social Businessに選出されました

皆さん、こんにちは。気が付けば11月もあと一週間です。
先週のNotes/Domino Weekの影響で仕事が進まず、焦り気味です。

今週は頑張らないとなぁ・・・と何気にスマホで会社のメールを受信していたら、「Your IBM Champion 2016 Status」というタイトルのメールがあるではないですか。

Ha!?????となって、メールの本文を読むと、「おめでとう!2016年度のIBM Championになったよ」ということがつらつらと・・・
いやいや、例年なら12月の頭でしょ。そういえば、今年は11月末に発表するとかしないと言ってたかなぁとかとかとか思ったのですが、詐欺メール(誰が喜ぶのかわからないけど)と思い、TwitterやFacebook等のSNSをフルチェックしました。

すると、
Announcing the IBM Champion Class of 2016 for IBM Social Business! (IBM Champion Program News and Views)
という記事が拡散されているのを発見しました。
どうやら、本当の事のようです。


今年は、ブログの記事数も少なく、またオープンソースやコミュニティ等への貢献もあまりできていなかったので、ダメかなぁと思っていましたので、本当に嬉しい限りです。

なお、今年は全世界で103名が任命されました。昨年が96名ですから、7.0%の増ですね。
日本人は、私を含め、
チームスタジオジャパン 加藤満さま
リコーITソリューションズ 海老原賢次さま
ケートリック 田付和慶さま
が任命されました。
皆様、本当におめでとうございます。

ただ、日本人は昨年までの6名から4名と2名減なってしまったのは残念です。


ノーツコンソーシアムも大々的にセミナーを開催したり、XPagesDayも4年連続で開催されたりと、日本でのコミュニティ活動も活発になってきていただけに悔やまれますね。



来年は、また日本人のIBM Championが増えるように、みなさんでコミュニティの活性化を行いましょう!

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

RESTは覚えてもらえましたか?

イメージ
みなさん、こんばんは。
本日(2015年11月17日)に行われたXPagesDay 2015の初日はいかがでしたか?

これからXPagesを始めよう!という人向けのセッションに始まり、今まで誰もが避けていたXPagesアプリケーションのデバッグ方法についてのセッションもありと、中々濃い密度の内容があったと思います。

私はまたまたREST/JSON についてのお話をさせていただきました。
またかよぉ~。という声も聞こえてきそうですが、それだけXPagesアプリケーションとの相性がよく、覚えておいて損はないどころか、得しかないという技術ですので、あえて話したという次第です。

今回は、DominoでのRESTは、Domino アクセスサービスの設定方法と実行結果に絞った形にしておいて、外部サービスとの連携について重点を置きました。

どんなデータが生成されているのかや、どのようにコードを書けば良いのかを説明したので、なんとなくでも分かってもらえればと思いおます。

ということで、本日の資料をSlideShareに公開したので、ご覧ください。
デモで利用したアプリケーション(蔵書検索/路線検索)はBluemix上にありますので、動作確認をしていただくことが可能です。
※URLは資料中に書いてありますので、資料を見てください。


XPagesDay 2015 RESTの総復習 from Masahiko Miyo

なお、明日(2015年11月18日)もXPagesDay 2015はありますので、参加してくださいね!
15:00からは、ノーツパートナーソリューションセミナー&ノーツコンソーシアム20周年記念オープンセミナーのセッションをお借りして、オフ会と称して行われます。

今日のセッションを超える衝撃があなたを襲います!
絶対に見に行こう!


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









【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!

繰り返しコントロールのページ制御をやってみよう。

イメージ
こんにちは。最近、やる気が感じられないと言われてますが、みなさんはどうでしょうか? 私の場合、今年は夏休みを取っていないので、やる気の持続力が低下しているのでしょう。


私にやる気を出させたいなら、はっきりとした餌をぶら下げる必要があります。
ということで、このボタンをクリックしましょう。これが餌です。



餌をくれた人はこの先を読んでいいです(笑)。


さて、今日もXPagesネタです。

先日、qa for ICS(Lotus) Developersというサイトに質問を投稿しました。
こちらですね。
繰り返しコントロール内でどれが選択されたのかを取得したい
データソースとして、ビューではなく、文書内の複数値アイテムを設定したので、ビューコントロールではなく、繰り返しコントロールを使って表現することにしたのですが、繰り返しコントロール内の値を全選択/全選択解除ができない!
どうすれば???
という質問でした。

この問題そのものは、おかげさまでなんとか解決できたのですが、新たな問題が発生しました。
今日はその問題の内容と解決策(回避策?)を記事にします。


問題はページ切り替えにあった 繰り返しコントロール内の値を選択できるようにしたのは良いのですが、この繰り返しコントロールのデータソースである複数値。
数が多いと、1ページに収まらないことがあります(デフォルトで1ページ30ですが、画面の都合上、15にしてあります)。
そのため、ページ遷移が必要になりました。
そこで、繰り返しコントロールをページ遷移できるように「ページャ」コントロールを配置しました。
添付先(プロパティでいうと、「for」)は繰り返しコントロールのIDを設定しました。
これで、ページ遷移ができるようになりました。

しかし!チェックボックスにチェックしたまま、ページを切り替えてもチェックが外れてくれません!

ビューコントロール内に含まれるページャは、ページが切り替わったらチェックを外してくれるのに!
なんでだよー。


まぁ、繰り返しコントロール内にチェックボックスを配置した時点で(しかも、sessionScope変数とか使ってるし)、ページ遷移に対応してなくても当たり前かな。
とは思っていたので、
「イベント時のコードを書けば軽く解決だよ」なんて考えてました。
それが後に 悲劇を引き起こすとも知らずに・・・


XPagesで日付の複数値を取り扱う場合は要注意

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


今日は2015年8月13日です。夏休み中という方も多いかと思いますが、私は仕事してます。

可哀そうに・・・と思ったら、上のボタンを押してください。



さて、今日もXPagesの話です。
そして、私の嫌いな?日付データの取り扱いについてです。


ノーツには「日付/時刻」型というフィールドタイプがあります。
このフィールドは「日付のみ」とか「時刻のみ」という形でデータを保存できます。
しかし、XPagesでは、そういった形式での保存が難しいです(できないわけではない)。

格納方法については、IBM ChampionのKazunori Tatsukiさんのブログに
XPagesでフィールドに”年月日のみ”、”時刻のみ”の値を設定する方法という形で掲載されています。


さて、これで一安心だ!と喜んでいたのですが、思わぬところで躓いてしまいました。

日付を格納しているフィールドを"複数値可"にしていたのです。
上記のブログにある日付フィールドの取得方法はNotesXSPDocumentのgetItemValueDateTimeという命令です。
これは、複数値の形式に対応していません。

困りましたね。
そこで、NotesXSPDocumentではなく、バックエンドクラスのNotesDocumentクラスの命令を使ってみることにしましょう。
NotesDocumentクラスには日付フィールドの値を取得するためのgetItemValueDateTimeArrayという命令があります。
こちらは、文書内の日付フィールド(アイテム)をjava.util.Vectorという配列のオブジェクトで返してくれます。
配列の一つ一つの要素はNotesDateTime型もしくはNotesDataRange型になります。
今回は、日付の範囲ではなく、単なる複数値なので、NotesDateTime型の配列になります。
取得できたら、iterator命令とwhile命令で配列の分繰り返し処理を行います(LotusScriptでいうところのForall関数と考えてください)。

フォームに「Hiduke1」という複数値を許可した日付/時刻フィールドがある場合の保存時の処理を書いてみました。
try {     var notesDoc:NotesDocument = doc…

Windows 10でNotes/Dominoはどうなった?

イメージ
こんにちは、今日は7月30日・・・あれ?もう、7月終わりじゃないですか!?
7月の終わりと言えば・・・そうですね。
Windows 10がリリースされましたね。

今回は、リリース後1年間に限り、無償でバージョンアップができるということで、ちゃっちゃとアップデートしている方が大勢いらっしゃるようです。
そこで、私もその波に乗るべく、大事な大事なSurface Pro 2をWindows 8.1からWindows 10へとバージョンアップさせてみました。

ただ、それだけでは面白くもなんともないので、Notes/Dominoが果たして正常に動作するのかの検証も併せて行ってみました。

ちなみに、Windows 8がリリースされたのが2012年10月26日ですから、約3年ぶりのメジャーバージョンアップとなります。
その時の記事は、Windows 8 にLotus Notes 8.5.3 をインストールしてみたですので、参考として一緒に読んでもらえれば幸いです。

では、スタート!
なお、アップデート手段はマシンによって若干の差があると思いますので、そこはご了承ください。

まずは、タスクバーに表示されている「Windows 10を入手する」のアイコンをクリックして確認します。

通常であれば、自動で通知が来るそうですが、来なかったので色々と確認してみたところ、
Windows Updateを実行したら、「Windows 10にアップデート」という表示が出ているではないですか!

早速、[はじめに]をクリックしましょう。
すると、Windows 10のモジュールのダウンロードが始まりました。
2713.2MBもあるの!?でかすぎでしょ。まぁ、今どきは光回線が普通なのでしょう。
私のSurface Pro 2君はWi-fi接続しているのですが、先日無線ルータを新調したのでそこそこ速くなってます。良かった良かった♪

そうこうしているうちにダウンロードが終わったようで、インストールの準備に入ったようです。
ここまでは、3分少々で進んだので、めちゃくちゃ早かったです。
実は事前にダウンロードしてあったのか?というくらいです(でも、そういったものは見つけられませんでした)。

ですが、案の定、ここからが長かった。なかなか、先の画面に進んでくれません。
25分くらいしたところで、ようやく「それで…

月刊Notes/DominoWebセミナー6月号の資料をアップしました

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

昨日(2015/06/23)は、月刊Notes/DominoWebセミナー6月号という事で、Webセミナーで話をさせていただきました。
題材は、もう何度も話してきたRESTサービスについてでした。

Notes/Dominoは古いとか独自性があるとか言われていますが、RESTのような標準サービスとの連携もできるんですよ!
ということが伝わっていれば嬉しいです。

また、デモでお見せしたようにOnTime のようなNotes/Dominoのアドオンアプリケーションとの連携もできます。
こういう連携ができるだけでも楽しいですし、工夫次第では業務が効率化できるようになります。

ぜひ、RESTを覚えて活かしてみてください。


なお、チームスタジオ様からも資料を参照できるようになるかと思いますが、私もセッション資料をslideshareに公開しましたので、参照していただければ幸いです。



XPagesでRESTを使ってみよう from Masahiko Miyo




もっと詳しい話を聞かせろ!とか、OnTime OpenAPIのデモをビデオじゃなくて直接見たい!という方は、ご連絡いただければ対応させていただきます。






【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!

「OnTime OpenAPI 活用ワークショップ」に参加してきました!

皆さん、こんばんは。こんな時間ですが、こんな時間だからこそ、ブログの更新です(笑)。

5/19~5/20にかけて行われたIBM XCITE SXPRING 2015はいかがでしたでしょうか?
私の会社は残念ながら出展できるようなものがありませんでしたので(私自身を売ってますので(笑)…お仕事の依頼、お待ちしてま~す)、IBM Verseの詳細調査と、Notes/Dominoの関連製品の調査という形で参加してきました。
私は、その中でもNotesのスケジュール/カレンダーを強化してくれるというOnTimeが好きなのです(もちろん、他の製品も好きですよ)が、そのOnTimeを「さらに」便利に使えるようにできるというワークショップが開催される!ということで、参加してきました。


主催はアクセル様で、場所は東京は新宿駅付近の東京オフィスでした。
今日は、その内容について簡単にご紹介を・・・と思ったのですが、そもそも、Notes/Dominoユーザの皆さんは、OnTimeはご存知ですよね??

ご存じないという方のために、製品説明を・・・と思ったのですが、
すでに他の方がブログでたくさん紹介してくださっていますので、そちらの方をご覧ください。

OnTime Group Calendarを試してみよう!
全部で37もの記事になっていますが、その分、製品説明がしっかり出来ています。


そんなOnTimeですが、なんとまぁ外部から操作するためのAPI群が用意されているというじゃないですか。
今回は、そのAPIの基礎から使い方について、開発元のIntraVisionから講師が来てくださいました。
講師はなんとIBM ChampionMikkel Flindt Heisterberg氏です。


OnTime のAPIはデモサイトがあり、そこからAPIの動きをトレースすることができるんですね。
このAPIはJSON形式のデータでやり取りをしています。
・・・つまり、REST APIを使っているのですね。
ブラウザから動作確認ができるというのもその証拠の一つでしょう(デモサイトのページを見ると、リクエスト用のURLが出ていますし、レスポンスはHTTP Statusを使っています)。


面白いという便利なのが、OnTimeはユーザの識別をするのにTokenを用いています。そのため、Dominoのセッ…

よく使うコントロールのセットを作成する

イメージ
皆さん、こんにちは。新緑の季節です。

この週末、私は「自腹」で購入した「Teamstudio Bootcamp for XPages」をやっています。
ハンズオン中心ですが、各コントロールの詳しい紹介や、なぜXPagesが良いのか?などと言った解説も書いてあり、なんとなく開発していた(ヲイ!)私にもよくわかるようになっています。

基本的には集合教育とのことですが、受講者が一人しかいない。という場合にはテキストのみの販売も行っているそうです(私はこれを利用しました)。
詳細は、XPages 開発の集合教育をご覧ください。

・・・PRしたから、少し安くしてくんないかな(笑)


閑話休題。

本日の話題に入りましょう。

今日もXPagesの話と行きたいところですが・・・Domino Designerの便利な使い方についてです。


XPagesの開発をする場合、必ずと言っていいほど、「コントロール」ビューからコントロールをドラッグしますね。

この時、こんな風に思ったことはありませんか?
「"出力スクリプト"はよく使うのに一覧に表示されてないんだよな。」「こんなに表示されても探すのが面倒なんだよな。」

前者の場合、「その他」をドラッグして、「コントロールの作成」ダイアログを表示して、そこから検索及び選択して貼り付けることができます。

後者の場合、もう諦めるしかない・・・


となりそうですが。

いえいえ、そんな煩わしいことを考える必要はないのです。
どちらも一発で解決する方法があるんです。


「コントロール」ビューにマウスカーソルを移動して、そこですかさず右クリック!
コンテキストメニューが表示されるので、「パレットのカスタマイズ...」をクリックしましょう。

すると、パレットの設定ダイアログが表示されます。
表示したいコントロールにチェックをつけて[OK]をクリックすると、あ~ら不思議。
「コントロール」ビューにそのコントロールが表示されるようになるではありませんか。

※ここでは「出力スクリプト」にチェックをつけて[OK]をクリックします。

表示させることができるということは、当然、表示させないようにすることもできます。
あまり使うことのない、コントロールはここでチェックを外しておけばよいのです。

また、プロファイルを作成して、表示させるコントロールを切り替えること…

XPagesで名前ピッカーを使う場合

イメージ
こんにちは。
4月に入りました。すなわち、2015年も四分の一が過ぎたという事を意味します。
(毎年、この時期におんなじこと言ってるなぁ というのは気のせいではありません・・・)

さて、今日は見切り発車的な情報です。
この記事を読んだどなたかが補足してくれるのを待つという試みです(笑)


XPagesのアプリケーションでユーザーを選択する場合、
Extension Library(9.0からは標準)の「Name Picker」(9.0では「名前ピッカー」)を使うかと思います。
(癖があって、日本のユーザには使いにくいというのはさておいて・・・)

この「名前ピッカー」の設定方法は次の通りですね。



「user1」という編集ボックスを作成して、複数値を許可しています。
「名前ピッカー」はその「user1」に割り当てるようにしています。
ユーザの選択肢はドミノディレクトリにしていて、ユーザーとグループの両方が表示されるようにしました。

実行結果は下図のような形になります。

ドミノディレクトリに登録されているユーザー名とグループ(ほとんどグループなのは、諸事情によるものです(笑))が表示されています。
ここで左側のリストからユーザー/グループを選択して[追加]ボタンをクリックすると、右側のリストに移ります。
選択したら、[OK]をクリックすれば、「user1」の編集ボックスに代入されます。
簡単ですね。


ところで・・・
私のNotes/Domino環境ですが、
サーバーのnotes.iniには
NAMES=names.nsf,VistaNames.nsf
という行があります。
そうです。二次アドレス帳が設定されています。

ところが、上の画面にはその二次アドレス帳は表示されていません。
これは困りますね。
そんな時は「名前ピッカー」の設定を少し変えます。

こんな感じです。


「dataProvider」という項目を「dominoNABNamePicker」から「namePickerAggregator」に変更します。
そして、それの子供という形で配下に「dominoNABNamePicker」を作ります。

この実行結果は下図のとおりです。


見事にアドレス帳が選択できるようになりました。
選択肢にはnotes.iniの「names=」の行のものが表示されています。

これで先ほどより…

XPagesで文書内の添付ファイル名を取得しよう!

イメージ
皆さん、こんにちは。
当ブログも今日(2015年3月24日)で丸7年となりました。明日からは8年目に突入です。
「Notes/Dominoに関する事をテキトーに書いていきます。まぁ、いつまで持つかお楽しみということで。」という副題で始めましたので、ここまで続くのは驚異的でしょう(自分で言うな?)。

ということで、お祝いとしてこのボタンをクリックしましょう。

お祝いなんかしてやるもんか!という方は、このままお帰りください(笑)。


さてさて、では7年目最後の記事に移りましょう。

今日は前回の記事(XPagesのファイルアップロードでファイルの種類を限定する )に関連したものです。
前回は、画像ファイルをアップロードするという話でしたが、
画像の添付ファイルが複数アップロードされている場合、それらのファイル名をどのように取得すれば良いのか、また画面にどうやって表示すれば良いのか?を検証してみます。


なお、添付ファイルを複数アップロードする方法についてはXPagesで文書保存時に添付ファイルの数を限定させるには
また、添付ファイルイメージを画面に表示させる方法についてはXPagesで添付したイメージを画面に表示させるを見てください。


まず、添付ファイルがいくつ存在するのかを確認する必要があります。
これは、NotesRichtextItemクラスのgetEmbeddedObjects()を使います。
(文書全体の場合は、NotesDocumentクラスのgetEmbeddedObjects()を使います)。
これは、java.util.Vectorで返ってきます。
ですので、size()メソッドを使って、添付ファイルの数が取得できます。
ソースコードとして書くとこんな感じでしょうか。
var curdoc = document1.getDocument( true ); var ritem  = curdoc.getFirstItem( "AttachedFile" ); if ( ritem != null ) {     if ( ritem.getType() == 1 ) {         if ( curdoc.hasEmbedded() ) {             var att:java.util.Vector = ritem.g…

XPagesのファイルアップロードでファイルの種類を限定する

イメージ
皆さん、こんにちは。
先日、誕生日を迎えて、四捨五入すると50歳という、もう「アラフィフ」と言っても良くなってしまいました。
全然めでたくありません!

めでたくないので、このボタンをクリックしてください。



今日は久しぶりにXPagesの話題です。
たまには書かないと、「こいつ、ホントにXPagesできるのか?」と疑われてしまいそうなので(笑)


XPagesでは、ファイルを添付するのに便利な「ファイルアップロード」コントロールがあります。
こちらの説明については、以前にも書いていますので、
XPagesで添付ファイルの処理をする(アップロード)
XPagesで文書保存時に添付ファイルの数を限定させるには
そちらを参照願います。

さて、今日はそんなファイルアップロードコントロールのちょっとした応用についてです。
ファイルを添付する際、ファイルの種類を限定したい場合があります。
私にはそんな理由がありました。

それを実現する方法について説明します。

通常のHTMLでは、

と記述することで、アップロードするファイルの種類を限定させることができます。


では、XPagesのファイルアップロードコントロールではどのように実装すれば良いのでしょうか?
「ファイルアップロードコントロール」のすべてのプロパティを見ると、「accept」という項目があります。
ここに記述してみました。

ところが・・・
動いてくれません。動くのですが、ファイルの種類が限定されません。

今度は、「ファイルアップロードコントロール」のオプションにある「MIMEタイプ」の値を変更してみました。
ところが・・・
やはり動いてくれません。

何でしょう???
IEでもfirefoxでもchormeでも同様の結果です。


私ができたやり方は
すべてのプロパティにある「attrs」で[+]をクリックして、「attr[0]」にacceptを設定したのでした。

ちなみに、複数のファイルの種類を設定したい場合は、
valueに「@List( "image/gif", "image/jpeg", "image/png" )」と配列になるように書いたら動きました。
この時、ちゃんと「◆値の計算」をクリックして、JavaScript式として書くのを忘れないようにしましょう!

ループ処理の計測

イメージ
こんにちは。

まぁ、とりあえずはボタンを押してってよ、話はそれからだ。

新しい記事じゃなくても、ページを開いたら押してってください。じゃないと、テンション下がるわ~。


さて・・・気を取り直して。
今日はちょっとした実験です。


LotusScriptでのループ処理ですが、すでに当ブログでも紹介しているように色々な記述方法があります。
多すぎるがゆえに、「どれを使えばいいんだ?」ということになりがちです。

ここは、実行速度を計って、どれが良いのかを見てみましょう。
計測するのはFor文、Do文、While文の3つ(他にもありますが、それは貴方が自分で計測して!)です。
ループ回数ですが、10回や100回くらいでは違いを見るのは難しそうと判断して、思い切って10,000,000回(1千万回!)にしてみました(笑)。

さらにループするだけだと、あっという間に終わるかもしれないので、ループ処理1回ごとに乱数を発生させるようにしました。

ソースはこちらです。   
Sub Click(Source As Button) Const LOOPCNT = 10000000 Dim startDT1 As String Dim endDT1 As String Dim startDT2 As String Dim endDT2 As String Dim startDT3 As String Dim endDT3 As String Dim i As Long Dim j As Single startDT1 = Format( Now, "h:nn:ss" ) For i = 1 To LOOPCNT j = Rnd Next endDT1 = Format( Now, "h:nn:ss" ) i = 0 startDT2 = Format( Now, "h:nn:ss" ) Do While i <= LOOPCNT i = i + 1 j = Rnd …