【kintone】Googleフォームからレコードを編集(更新)する


先日、Googleフォームからレコードを登録する方法を試しました。

【kintone】Googleフォームからレコードを登録する

今回は前回の続きで「編集(更新)」してみたいと思います。
前回のアプリとGoogleフォームを使います。

アプリの設定を変更する

前回のアプリを使います。

Emailの値の重複を禁止する

updateKeyにしたいので、「値の重複を禁止する」にチェックを入れてください。
※Emailのフィールドの種類はリンクではなくて文字列(1行)フィールドです。

APIトークン設定変更

「レコード編集」にチェックを入れて保存してください。

GASを書き換える

  • 同じメールアドレスだったら、他の情報を上書きする
  • 新しいメールアドレスだったら新規登録

となるようにしたいと思います。

コードはこんな感じ。非同期処理しなくても動いたんですが、いいのかなこれで?
詳しい方いらっしゃったら教えて下さいm(_ _)m

function sendToKintone(e) {
    'use strict';
    const subdomain = "サブドメイン";//.cybozu.comの前のサブドメイン名
    const apps = {
        YOUR_APPLICATION: { appid: アプリID, name: "アプリの名前", token: "APIトークン" }
    };
    const manager = new KintoneManager.KintoneManager(subdomain, apps);// ライブラリの初期化

    //アンケートの回答を取得
    const itemResponses = e.response.getItemResponses();
    const email = e.response.getRespondentEmail();
    let name, attend;

    itemResponses.forEach(item=>{                         
        switch (item.getItem().getTitle()) {
            case "名前":
                name = item.getResponse();
                break;
            case "参加/不参加":
                attend=item.getResponse();
                break;
        }                                           
    });

    //入力したemailアドレスが既にレコードにあるか調べる(件数が戻ってくる)
    const retSearch =  searchRecords(manager,email);

    let code, records;
    if(retSearch == 0){
        console.log("新規");
        records =[{
            "Email":{ "value":email},
            "name":{"value":name},
            "attend":{"value":attend}
        }];
        code=  createRecords(manager,records);
    }else{
        console.log("編集(更新)");
        records =[{
            "updateKey":{"field":"Email", "value":email},
            "record":{
            "name":{"value":name},
            "attend":{"value":attend}        
            }
        }];
        code =  editRecords(manager, records);
    }
    console.log(code);
}

//入力したEmailアドレスがすでにあるかどうか調べている
function searchRecords(manager,email){
  const query = 'Email = "' + email + '"'
  const response = manager.search("YOUR_APPLICATION", query);
  const content = JSON.parse(response.getContentText());
  const records = content.records;
  return records.length;
}

//新規登録
function createRecords(manager,records){
  const response = manager.create("YOUR_APPLICATION", records);//kintone レコードの生成
  const code = response.getResponseCode();
  return code;
}

//編集(更新)
function editRecords(manager,records){
  const response = manager.update("YOUR_APPLICATION", records);//kintone レコードの更新
  const code = response.getResponseCode();
  return code;
}

アンケートを送信してみる

こんな感じに新規登録&更新することができます。

まとめ

新規登録&更新を何も考えずにやってみましたが、これだけだといたずらし放題になってしまうので、色々と工夫が必要かと思います。
というわけで、ちょっとした内輪のアンケートとかに使ってみるといいかもしれないですね^0^
また、フォームを簡単に作れる連携サービスなどもあるので、そちらを使ってみるのもいいかもしれません。