以前、参加したイベントでNode-RED
からKintoneアプリ
のデータを操作するというノードを見つけたので、その使い方のメモをしておきます。
拡張ノードnode-red-contrib-kintone
今回、Node-RED
からKintoneアプリ
を操作する拡張ノードはnode-red-contrib-kintone
となります。このノードの使用方法に関しては作者の方の情報が参考になります。
この拡張ノードはKintone
のREST API
のうち以下のものをサポートしています。
今回はこの内のread
、create
、update
を試します。
オペレーション | 操作 | URL |
---|---|---|
read | 複数のレコードを取得する(GET) | /k/v1/records.json |
create | 複数のレコードを登録する(POST) | /k/v1/records.json |
update | 複数のレコードを更新する(PUT) | /k/v1/records.json |
同じURLのアクセスですがHTTPのメソッドが異なるものになります。
REST APIの詳細に関しては以下を参照してください。
テスト用のKintone
アプリを準備する。
まずはNode-RED
のテストというプリを作成して機能を試してみます。以下のようなアプリを追加します。
フォームには以下のデータを準備します。
- レコード番号(自動入力) ➡ フィールドコード:
レコード番号
- 更新日時(自動入力) ➡ フィールドコード:
更新日時
- 文字列(1行) ➡ フィールドコード:
文字列__1行_
データとして1件以下のように入力を行っておきます。
これでテストの準備は完了です。
拡張ノードのインストール
続いては拡張ノードのインストールを行います。
フローエディタの右上の【三(ハンバーガーボタン)】をクリックしプルダウンメニューを開きます。メニューから【パレットの管理】をクリックします。
【ユーザー設定】の【パレット】が表示されるので、【ノード追加】タブをクリックします。
検索ボックスにkintone
と入力すると、追加候補にnode-red-contrib-kintone
が表示されるので、【ノードを追加】ボタンをクリックします。
インストール確認のダイアログが表示されるので、【追加】ボタンをクリックします。
以下のような表示が行われれば拡張ノードのインストールは完了です。
フローエディタのパレットの機能カテゴリにkinetone
というノードが追加されています。
kintoneノードの設定
まず、テスト用のフローを作成します。以下のノードを配置し接続します。
injectノード
kintoneノード
debugノード
※kintoneノード
はフローエディタ上に配置するとGET
という名称に変わります。
Kintoneノード
をダブルクリックして、プロパティ画面を開きます。プロパティの【設定】の【🖋️(kintone-config設定)】のボタンをクリックします。
設定が必須なのは以下の3つです。
- ドメイン
- ログイン名
- パスワード
これらの情報はログイン時の画面に表示される情報となります。
入力が終わったら【更新】ボタンをクリックします。
プロパティ画面に戻ってくるので、残る設定である【アプリID】と【クエリ】を設定します。 設定時に使用しているURLにも記載はありますが、確実なのはkintone設定時の画面上部にある【⚙】をクリックし
【アプリ管理】を選択します。ここでアプリ一覧がリストで表示されるのでその中から接続するアプリのID部分を確認します。
Node-REDに戻りプロパティ画面の【アプリID】に入力します。あとはクエリになりますが、レコード番号が1
のデータのみが格納されているのでクエリには以下の様に記述します。
レコード番号 = 1
あとは、フローをデプロイして実行すると、デバックエリアに取得されたオブジェクトが表示されます。接続は成功し、データも取得できています。ちなみにクエリに何も書いていなかった場合にはmsg.payloadの値をクエリとしてしようする動作のようです。
続いて、データを2件に増やしてテストを行っていきます。
今度は最新の1件を取得するようにしてみます。クエリに以下のように入力を行います。このクエリの意味はorder by 更新日時 desc
で更新日時
フィールドを降順に並べ替えして、最新のレコードが最初に来るようにし、さらにlimit 1
を指定することで最初の1件に制限して返しています。
order by 更新日時 desc limit 1
実行すると最新の1件を取得しています。
もちろん、クエリにlimit 1
を指定しなければ、格納されているデータがすべて配列の形で取得できます。
データの追加
データの追加は以下のようにフローを作成します。kintoneノード
のクエリは空白にすると接続された前段のノードの出力であるmsg.payload
の値をクエリとしてしようするので、このようにfunctionノード
を使用しています。下記のようにフローを作成し
functionノード
のコード部に以下のように記述をします。
// 新しいレコードのデータを作成 var newRecord = [ { "文字列__1行_" : { "value" : "Node-REDからの書込"}, } ]; // Kintoneノードにデータを送信 msg.payload = newRecord; return msg;
kintoneノードのクエリは空にしておきます。
フローのデプロイ、実行を行うと追加したIDが表示されます。
kintone
のレコードも正常にデータが追記されています。追記されたときのレコード番号は新規の発番がされています。
複数のデータの追加
先ほどは単一データの追加でしたが、これを拡張して複数のデータを追加するにはコードを以下のようにします。格納データが配列形式になってるので、要素を増やすだけで複数データを追加できます。
// 新しいレコードのデータを作成 var newRecord = [ { "文字列__1行_" : { "value" : "Node-REDからの書込1"}, }, { "文字列__1行_" : { "value" : "Node-REDからの書込2"}, } ]; // Kintoneノードにデータを送信 msg.payload = newRecord; return msg;
フローを実行するとデータの追加は2件分行われています。
デバックにも追加されたデータのIDが新規発番されていることがわかります。
データ更新
データの更新もほぼ同様です。違いは更新データに変更するデータのID
を含めている点とkintoneノード
のメソッドをPUT
に変更している点です。
// 新しいレコードのデータを作成 var updateRecord = [ { "id": 3, "record": { "文字列__1行_": { "value": "Node-REDからの更新1" } } }, ] // Kintoneノードにデータを送信 msg.payload = updateRecord; return msg;
kintoneノードのメソッドをPUTにしています。
該当のデータが変更されています。変更されるとデータのrevisionの値がインクリメントされます。
複数のデータの更新
複数データの更新も問題なく行えます。ただ、記載が結構たいへんなので、小分けにして処理を行ったりサブフローなどを使用すると可読性はよくなる気がします。
// 新しいレコードのデータを作成 var updateRecord = [ { "id": 4, "record": { "文字列__1行_": { "value": "Node-REDからの更新1" } } }, { "id": 5, "record": { "文字列__1行_": { "value": "Node-REDからの更新2" } } }, ] // Kintoneノードにデータを送信 msg.payload = updateRecord; return msg;
kintoneノード
のメソッドはPUT
ににしておきます。
複数の変更があっても、データ毎にrevision
があり、変更されていきます。
おわりに
今回は拡張ノードnode-red-contrib-kintone
を使用してNode-RED
からKintoneアプリ
へデータの操作(取得
、追記
、変更
)を行ってみました。最初は少しとっつきにくいという操作方法でしたが、慣れていくると簡単にデータの変更を行える状態になってきますね。
だた、あくまでもKintone
のREST API
の一部のみが操作できる形なので、それ以外の操作が必要になったときにはhttp requestノード
を使用してAPIを直接操作する必要があります。