-Notes/Dominoに関すること-Notes/Dominoに関する事をテキトーに書いていきます。いつまで持つかお楽しみということで。当ブログに掲載しているサンプルは、すべて利用者の自己責任とします。明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。してもと言う場合は、筆者にあらかじめご連絡ください。記事そのもののリンクについてはご自由に行っていただいてよいです。xxのようなサンプルを作って欲しいとかxxxの作り方を教えて欲しいというお問い合わせには応じていません。このようなお問い合わせは、株式会社エフまでご一報ください。APIを実行してみよう皆さん、こんにちは。9月に入ってしまいました。日が落ちる時刻が早くなってきてますね。18時を過ぎると暗くなってきてます。やって夏は過ぎていき、秋が来るんですね。APIについてのお話です。今回はXPagesではなく、Notesクライアントからの実行ができるように進めていきます。APIはHTTP通信を行いますので、Notesクライアントからはそのまま(@関数やLotusScriptを使う)では実行できません。そこで、Javaプログラムを組んでそれを実行することになります。NotesクライアントからJavaプログラムを実行するにはいくつかの方法があります。Webページを表示させて、その中でJavaプログラムを実行するJavaエージェントを作成して、LotusScriptから呼び出すLS2Jを使ってLotusScriptからJavaを実行する1.はNotesクライアントはWebブラウザも内包されているのを利用しているものです。Platform))ものですね。こちらの記事ではRESTではなく、IoTを使うためのMQTTをJavaエージェントで実行していますが。Javaのクラスを呼び出してみるにあるLotusScriptを拡張してJavaプログラムを呼び出せるという方法をつかっています。いずれもJVMを使うことになるので、メモリ使用量に気を付けなければいけませんが、それでもNotesクライアントから実行できるというのはなかなか面白いものだと思います。APIを使ったプログラムを実装してみます。実装するのはお決まりの郵便番号検索です。APIを使ってみよう-後半-を参照)。今回のサンプル画面はこんな感じです。入ってくるという形です。プログラムの中身を見ていきましょう。※実装順序は無視しています。"住所の検索に失敗しました。Subフォーム上に細々とプログラムを書くのが好きではないので、最小限の形にしています。NotesUIDocumentクラスのメソッドを使用して、入力した郵便番号を取得して、それを引数にしてSearchAddress()という関数を呼び出しています。この関数の戻り値が成否と住所情報で、成功していたら住所情報を画面上の文書にセットしています(計算結果フィールドにしているので、NotesDocumentクラスのメソッドを使ってセットしています)。ここは、よくある?LotusScriptのプログラムだと思いますので、そんなに難しくはないと思います。FunctionこちらがLS2Jのプログラムです。"*javacon"という記述が必要なこと。これはLotusScriptからJavaの関数を実行できるようにするためのものです。次に、下記変数の定義。JavaClass変数名は任意ですが、型は決まり事ですので、このまま覚えても差し支えないでしょう。JavaSessionはJVMにアクセスするためのクラスです。NotesSessionと同等のものと考えてよいかと思います。JavaClassはその名の通り、Javaのクラスです。既存のJavaのメソッドを実行することもできますし、自分でJavaクラスを作成して(後述)、そのメソッドを実行することもできます。java.lang.*やjava.util.*クラスの関数であれば、そのままLotusScriptに記述して使えそうです。(どこまでが標準のままで使えるかについてはわかってません。それがこの文になります。APIで郵便番号を検索しているのが、下記のメソッドです。endpointには、郵便番号を取得するためのURLが格納されています。)3.自作したJavaクラススクリプトライブラリは、LotusScript以外にもJavaやJavaScriptも作成することができます。LS2Jなので、Javaのスクリプトライブラリを作成します。名前を入力して、タイプを「Java」にして、[OK]をクリックすると、Javaライブラリコンテンツの画面になるので、Untitle.javaをダブルクリックして、ソースのエディタ画面を開きます。}だけが表示されたさびしい画面になるので、適宜変更します。今回のソースは以下のような形にしてみました。endpointに指定したURLに対して、「GET」でhttp通信をしているくらいです。その後、返ってきた結果を行単位で読み込んで、resultという文字列変数に格納しています。この格納された文字列はJSON形式のデータです。APIで取得したJSONデータをJavaで解析をしています。ここで、一つ問題になるのが、JavaでJSONを扱うには、そのままではできないということです(Java8で実装予定らしいけど、どうなったんだろ?)。そこで、JacksonというJavaのライブラリを利用することにします。今回はJacksonのうち、coreである「jackson-core-2.3.5.jar」をダウンロードして使用しています。※Jasksonライブラリの使い方についてはGoogleで検索してみてください。JSONデータをJavaで解析していき、必要な情報(Prefectures、Cities、Address)を配列に格納して、返しています。このようにLS2Jを使えば、NotesクライアントからもJavaプログラムを実行することができます。APIを実行することがわかっていただけたかと思います。Designerのヘルプに詳しい解説が出ていますので、熟読することをお勧めします。概要それでは今日はこの辺で・・・Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。