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

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

[【kintone】Googleフォームからレコードを登録する](https://qiita.com/juri_don/items/cfe95dbd884e89838a24)

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

## アプリの設定を変更する
前回のアプリを使います。
### Emailの値の重複を禁止する
updateKeyにしたいので、「値の重複を禁止する」にチェックを入れてください。
※Emailのフィールドの種類はリンクではなくて文字列(1行)フィールドです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/572c2c2e-2ccb-9e87-0f43-8420c812c275.png)

### APIトークン設定変更

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/50949787-0f6f-88d7-4eeb-6f2dcbce34a9.png" width=640>

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

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

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

```js
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;
}
```
## アンケートを送信してみる
こんな感じに新規登録＆更新することができます。
![anketo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/89f8f391-b5a1-e3c7-35d6-706de91d0e34.gif)

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