0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kintone のレコードを kintone.proxyでAWS LambdaへPOSTリクエストしてログに吐き出してみるテスト

Last updated at Posted at 2019-01-11

前回はkintoneからAWS Lambdaを実行してみました。
今回は、kintoneのレコードをLambdaに渡し、それをログに出力してみます。

流れ

  1. kintone.proxyを利用して、レコード詳細画面からkintoneレコードをLambdaにPOSTするコードを作成
  2. LambdaにてkintoneからPOSTしたデータを取得してログに表示する

kintone.poxyを利用したkintoneレコードのPOST

(function() {
    "use strict";

    const url = 'APIエンドポイントURL';
    const method = 'POST';
    const headers = {'Content-Type' : 'application/json'};

    kintone.events.on("app.record.detail.show", function(event) {
        let myButton = document.createElement('button');
        myButton.id = 'myButton';
        myButton.innerHTML = 'Hello Ruby!!';
        myButton.onclick = function() {
            console.log(event);
            let data = event;
            kintone.proxy(url, method, headers, data, function(body, status, headers) {
                console.log(status, body);            
                if(status >= 200 && status < 300) {
                    console.log("Success");
                }else{
                    console.log("Error");
                }
            });
            return event;
        };
        kintone.app.record.getHeaderMenuSpaceElement().appendChild(myButton);
    });
})();

上記の場合、kintoneのレコードは eventコールバック変数にJSON形式でセットされていますので、kintone.proxyを使ってPOSTする際に、'application/json' を指定します。
kintoneレコードはkintone.proxyのdata変数にそのままセットします。

Lambda for Ruby2.5

LambdaファンクションをRubyで書きます。

require 'json'

def lambda_handler(event:, context:)
    # TODO implement
    print 'event["body"] =>'
    pp event["body"]
    print 'event =>'
    pp event
    print 'JSON.parse => '
    pp JSON.parse(event["body"])
    print 'context:'
    pp context 
    { statusCode: 200, body: JSON.generate('Hello from Lambda! powerd by Ruby2.5') }
end

LambdaにPOSTされたデータは プロキシ統合のための Lambda 関数の出力形式 の形式で渡されます。
kintoneからPOSTされたデータの中のkintoneレコードは JSONの"body" にセットされているので、JSON.parseして取り出します。

実行結果の確認

実行結果が CloudWatch Logs に出力されるので、確認します。

"body"=>
"{\"type\":\"app.record.detail.show\",\"appId\":219,\"recordId\":1,\"record\":{\"レコード番号\":{\"type\":\"RECORD_NUMBER\",\"value\":\"1\"},\"更新者\":{\"type\":\"MODIFIER\",\"value\":{\"code\":\"20170701\",\"name\":\"アプリ管理者\"}},\"作成者\":{\"type\":\"CREATOR\",\"value\":{\"code\":\"20170701\",\"name\":\"アプリ管理者\"}},\"更新日時\":{\"type\":\"UPDATED_TIME\",\"value\":\"2019-01-12T01:04:00Z\"},\"作成日時\":{\"type\":\"CREATED_TIME\",\"value\":\"2019-01-09T13:57:00Z\"},\"text\":{\"type\":\"SINGLE_LINE_TEXT\",\"value\":\"Hello Lambda for Ruby!!\"},\"$revision\":{\"type\":\"__REVISION__\",\"value\":\"2\"},\"$id\":{\"type\":\"__ID__\",\"value\":\"1\"}}}",

JSON.parse => {"type"=>"app.record.detail.show",
"appId"=>219,
"recordId"=>1,
"record"=>
{"レコード番号"=>{"type"=>"RECORD_NUMBER", "value"=>"1"},
"更新者"=>
{"type"=>"MODIFIER", "value"=>{"code"=>"20170701", "name"=>"アプリ管理者"}},
"作成者"=>{"type"=>"CREATOR", "value"=>{"code"=>"20170701", "name"=>"アプリ管理者"}},
"更新日時"=>{"type"=>"UPDATED_TIME", "value"=>"2019-01-12T01:04:00Z"},
"作成日時"=>{"type"=>"CREATED_TIME", "value"=>"2019-01-09T13:57:00Z"},
"text"=>{"type"=>"SINGLE_LINE_TEXT", "value"=>"Hello Lambda for Ruby!!"},
"$revision"=>{"type"=>"__REVISION__", "value"=>"2"},
"$id"=>{"type"=>"__ID__", "value"=>"1"}}

綺麗にパースされてRubyで扱うことの出来るオブジェクトに変換されました。

次はkintoneからPOSTされたレコードの内容を使って、ThinreportsでPDF出力してみます。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?