53
kintone.Promise をををを REST API をををを kintone Cafė 福福 vol.6 福福福福福 福福福福福 福福福福 kintone Cafė Fukuoka vol.6

kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

Embed Size (px)

Citation preview

Page 1: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone.Promise を使ったREST API 更新処理

kintone Cafė 福岡  vol.6ハンズオンファシリス 長嶺雅透

kintone Cafė Fukuoka vol.6

Page 2: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

長嶺 雅透  ながみね ますみ 個人事業主 10年目 完全独立系

◦ 営業・開発・運用サポート 全部1人で バスケ、ゴールキーパー

◦ YouTube 「ゴレイロ ダイジェスト」で検索

kintone Cafė Fukuoka vol.6

自己紹介

ファシリス

Page 3: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

前ふり テンプレートからアプリの作成 データの流し込み kintone.Promise を使ったカスタマイズ JavaScript ファイルのアップロード 動作確認 まとめ

kintone Cafė Fukuoka vol.6

アジェンダ

Page 4: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

前ふり ( ちょっと長いかも... )

Page 5: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

ソニックガーデンの 倉貫さんがくる勉強会があるらしい!行かねば!!

kintone Cafė Fukuoka vol.6

kintone Café 福岡  vol.5

Page 6: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

Page 7: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

倉貫さん やっぱ すげ~!! ところで、 kintone って なんですか?

kintone Cafė Fukuoka vol.6

Page 8: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

Kintone って、簡単で便利そうだね PHP で挫折した俺にとって簡単に WEB アプリが作れるのは、最高だな!

kintone Cafė Fukuoka vol.6

よくよく見てみると

Page 9: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

1アプリ 1テーブルのイメージなんだ ん? でも できないことも多いな

◦ ルックアップって、参照じゃなく、コピーなんですか!それじゃ、マスタ参照なんてできないじゃん!◦ えっ、他のテーブルに書き込みできないの?

kintone Cafė Fukuoka vol.6

Page 10: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

RDB とは違うのだよ   RDB とは!

kintone Cafė Fukuoka vol.6

Page 11: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

使いものにならん・・・

kintone Cafė Fukuoka vol.6

Page 12: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

JavaScript を使ったカスタマイズで対応できるらしい

けど、 JavaScript なんて使ったことないし。。。

kintone Cafė Fukuoka vol.6

カスタマイズで対応できる

Page 13: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

Java S cript API ってなんやねん REST API ってなんやねん ってか、AIPと打ち間違うし。。。

kintone Cafė Fukuoka vol.6

その時点の私

Page 14: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

っで、どうすればいいの? cybozu.com developer network

◦ 「はじめよう kintone JavaScript API 」を写経 えっ! アップデートで仕様が新しくなるの?

Promise って何よ? まだ、 Promise のサンプルが少ない。。。。

kintone Cafė Fukuoka vol.6

Page 15: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

でも、これって 自分にとって 本当に必要不可欠な機能だよな 他の人も サンプルがあれば嬉しいはず

kintone Cafė Fukuoka vol.6

Page 16: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

そんな訳で kintone を知って2か月、 JavaScript を使って2か月の初心者が 勇気をもって登壇していますどうか 温かい目で見守ってください

kintone Cafė Fukuoka vol.6

Page 17: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

kintone での同期リクエスト

Page 18: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

その 1:同期リクエストを標準 API で送信できない  これまで他アプリのデータを取得したあとに何か処理をするといった場合などに、 XMLHttpRequest を使った同期リクエストを泣く泣く利用するシーンが出てきていたかと思います。なぜならば、 kintone のリクエスト系の標準 API は全て非同期のリクエストとなっているからです。

kintone Cafė Fukuoka vol.6

いままでの問題点

cybozu.com developer network  より

Page 19: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

この同期リクエスト、下記のようなデメリットがあります。 JavaScript で同期リクエストを実行すると、実行中に画面がかたまり、他の操作ができなくなる。 ブラウザで、非推奨の主旨の警告がでる。

(FireFox では、将来的に廃止予定。 )

kintone Cafė Fukuoka vol.6cybozu.com developer network  より

Page 20: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

その 2:submit 等のイベントハンドラでリクエスト系 kintone API が使えない問題

リクエスト系の kintone API 例えば、 kintone.api や kintone.proxy は基本的に非同期リクエストです。つまり、レコード登録ボタンを押したときに kintone.api やkintone.proxy の実行結果を待たずに保存が実行されていました。

kintone Cafė Fukuoka vol.6

いままでの問題点

cybozu.com developer network  より

Page 21: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

そこで、 2015 年 7 月のアップデートで上記の問題を解決する術として、kintone API の Promise のサポートが実装されました。

kintone Cafė Fukuoka vol.6cybozu.com developer network  より

Page 22: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

Promise サポートされたイベントの返り値でPromise オブジェクトを return できる

リクエスト系 API で callback を省略するとPromise オブジェクトが返される

といった挙動になります。

kintone Cafė Fukuoka vol.6

これから

cybozu.com developer network  より

Page 23: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

うーん…なんだか良く分らない!という人は、これを使えば下記のメリットがあるということを覚えておいてください。 XMLHttpRequest の同期リクエストを使わずに同様の処理を記述できる イベントハンドラに Promise を使った任意の非同期処理を記述できる

kintone Cafė Fukuoka vol.6cybozu.com developer network  より

Page 24: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

つまり、冒頭で挙げた同期リクエストにおけるデメリットを回避した記述ができるようになったのです。また、イベントハンドラに任意の非同期処理を挟めることで、レコード登録時に他のアプリの欲しい情報を一緒に登録したりといったことが可能になります。

kintone Cafė Fukuoka vol.6cybozu.com developer network  より

Page 25: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

レコード登録時に、他のアプリとのデータのやり取りを行うための、新しい仕組みを作りましたよ これぞ、求めていたもの

kintone Cafė Fukuoka vol.6

要するに

Page 26: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

ハンズオン

Page 27: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

構成の概要

Page 28: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

商品情報(コード、名称、単価など) と 在庫量を 保持している

出荷情報を入力

ルックアップで商品情報を取得 REST API で在庫量を取得出荷可能か判定

REST API で出荷後の在庫量を書き込む保存時標準機能 カスタマイズ

Page 29: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

GitHub

https://github.com/masu77/kcfvol06

kintone Cafė Fukuoka vol.6

ファイルのダウンロード

kintone Café Fukuoka vol06 の略です

Page 30: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

Page 31: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

解凍すると、20数個の ZIP ファイルができます これらの ZIP ファイルは解凍しないでください

番号の割り振りをします

kintone Cafė Fukuoka vol.6

ファイルを解凍

Page 32: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

URLhttps://kcfvol06.cybozu.com/

ID kcfvol06

password fukuoka06

kintone Cafė Fukuoka vol.6

kintone にログイン

kintone Café Fukuoka vol06 の略ですこのアドレスは  9/23 まで有効

Page 33: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

テンプレートの展開

Page 34: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

と、アプリ画面の確認 と、アプリ ID の確認、メモ

kintone Cafė Fukuoka vol.6

サンプルデータの読み込み

Page 35: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

サンプルの 穴埋めをしていきましょう

kintone Cafė Fukuoka vol.6

JS の中身の解説

Page 36: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

イベントハンドラーの登録

kintone Cafė Fukuoka vol.6

ブランク1

Page 37: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

レコード追加画面の保存実行前イベント app.record.create.submit

レコード編集画面の保存実行前イベント app.record.edit.submit レコード詳細画面の削除前イベント

app.record.detail.delete.submit プロセス管理のアクション実行イベント

app.record.detail.process.proceed レコード一覧画面の「保存ボタン」クリック時イベント

app.record.index.edit.submit レコード一覧画面のレコード削除前イベント

app.record.index.delete.submit

kintone Cafė Fukuoka vol.6

レコード一覧イベント

Page 38: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone.events.on([‘app.record.create.submit’], function(event) {

}

kintone Cafė Fukuoka vol.6

ブランク1

Page 39: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

ブランク2は 飛ばして

kintone Cafė Fukuoka vol.6

ブランク3

Page 40: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

REST API リクエストを送信する

Page 41: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone.api( REST API の URL,GET や PUT ・ POST ・ DELETE, パラメーター (検索条件)

).then(成功時の処理

).catch(エラー時の処理

);

kintone Cafė Fukuoka vol.6

Promise を使った時の文法

Page 42: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

var appId = 78; // 商品マスタのアプリ ID の設定var params = { app: appId, query: '商品コード = "' + record.商品コード .value

+ '"' };

kintone Cafė Fukuoka vol.6

ブランク2

D S S D S

Page 43: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone.api( kintone.api.url('/k/v1/records', true),

'GET', params ).then(function(resp) {

kintone Cafė Fukuoka vol.6

ブランク3

Page 44: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

// 在庫数がマイナスになる場合はエラーにして中断record[' 出庫量 ']['error'] = "在庫が足りません。 ";event['error'] = "在庫が足りません。 ";

kintone Cafė Fukuoka vol.6

ブランク4

Page 45: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone Cafė Fukuoka vol.6

event['error']

record[' 出庫量 ']['error']

Page 46: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

var params = {app: appId,id: resp.records[0]['$id']['value'],revision: resp.records[0]['$revision']

['value'],record: {"在庫量 ": {"value":

updateQuantity}} };

kintone Cafė Fukuoka vol.6

ブランク5

Page 47: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

kintone.api( kintone.api.url('/k/v1/record', true), 'PUT', params ).then(

).catch( )

kintone Cafė Fukuoka vol.6

ブランク6

Page 48: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

開発時は、 Dropbox を使った方法も便利ですググってください

kintone Cafė Fukuoka vol.6

JS のアップロード

Page 49: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

まずは、商品マスタの在庫数を確認しましょう次に、出庫入力で データを登録します そして、商品マスタで在庫数を確認しましょう在庫が足りないパターンの確認もしましょう

kintone Cafė Fukuoka vol.6

動作確認

Page 50: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

REST API を使えば、他アプリ(テーブル)との連携もできるので、ずいぶん 使いどころが広がる だた、集計して持ってくる( GROUP BY して、 SUM で持ってくる)とかは、苦手かな?

kintone Cafė Fukuoka vol.6

まとめ

Page 51: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

エバンジェリストでもない kintone の実績があるわけでもない JS を触ったこともなかった みなさんも どんどん コミュニティに参加しましょう!

kintone Cafė Fukuoka vol.6

最後に

Page 52: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

ご清聴 ありがとうございました

kintone Cafė Fukuoka vol.6

Page 53: kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理

GitHub

https://github.com/masu77/kcfvol06

https://github.com/masu77/kcfvol06-2完成版、 変更・削除対応版

kintone Cafė Fukuoka vol.6

ファイルのダウンロード

kintone Café Fukuoka vol06 の略です