Google App Maker スプレッドシートをDBにする　～その参 追加～

まずはじめに
----
その壱、その弐を見ている前提です。
[Google App Maker スプレッドシートをDBにする　～その壱 表示～](https://qiita.com/Ringo_o/items/a36cf9c35a8dca97805e)
[Google App Maker スプレッドシートをDBにする　～その弐 更新～](https://qiita.com/Ringo_o/items/40f1f12ab19607485803)

それでは最後にデータを追加していきましょう。

追加ボタンとフォームの作成
----
list画面に追加するボタンを配置します。（これはGoogleが用意しているテンプレートから拝借してきましたが、なんでもいいです。）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/7dadf834-fcfb-bf1b-1987-58fa2050e4b8.png)

PAGE[+] -> Page 適当に名前をつけます。
Page Datasourceはその壱で作ったtestDBを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/f13d8100-4d57-fb79-3a66-20f49554100c.png)

左メニューのウィジェットからFormをドラック＆ドロップして配置します。
Choose Datasourcr -> testDB -> NEXT
Edit -> NEXT
Noは自動生成するのでチェックを外し、FINISH
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/0281bf0a-62ba-6280-e28e-4f69391986b1.png)

このままだと入力ができない＆初期値が入ってしまうので@Company,@Structure,@Nameを削除します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/c60c8562-a581-1d2f-0cab-8c0975d3859b.png)

textboxを配置します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/462e8a37-7a3f-2452-b480-d4b7b20af21f.png)

概ね追加画面は完了ですが、最初に配置したlistの「＋」から遷移するように、
Property Editor -> Button -> onClickを選択し、Navigate to Page... -> newを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/720597b0-16b6-5b17-f218-526abced14c0.png)

あとはnewで不要なページ遷移ボタンを削除し、BACKボタン、ADDボタンを追加しましょう。
BACKボタンはlistに遷移するようにonClickイベントを設定して下さい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/3a80e4a0-3775-1e45-d2fb-207f29b2a908.png)

一通り画面の作成は終わったので、正常に画面遷移できるか確認してください。

追加処理
----
ここからはADDボタンをクリックしたときの追加処理を書いていきます。
既にClient ScriptとServer Scriptは作成済みなので書き足していきます。

Client Script

```javascript
/*
 *追加
 */
function addCell(){
  var addRow = 0;
  var company = app.pages.new.descendants.TextBox1.value;
  var structure = app.pages.new.descendants.TextBox2.value;
  var name = app.pages.new.descendants.TextBox3.value;
  
  var array = [addRow,company, structure, name];
  
  google.script.run.setValue(SPREADSHEET_ID,SHEET_NAME,array);
}
```
Server Script
前回作成したScriptに//追加の部分を足しました。

```javascript
/*
 *処理
 */
function setValue(spreadsheetId, sheetName, array){
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);
  var updateRow = Number(array[0]) + 1;
  
  //追加
  if(array[0] === 0){
    var addNo = sheet.getLastRow();
    array[0] = addNo; 
    updateRow = addNo + 1;
  }
  
  for (var i = 0; i < array.length; i++){
    var column = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var range = column.substr(i, 1) + updateRow;
    var cellRange = sheet.getRange(range);
    
    cellRange.setValue(array[i]);
  }
}
```
ADDボタンのonClickイベントを設定します。

```javascript
addCell();
app.showPage(app.pages.list);
widget.datasource.load();
```

動作確認してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/2718aacc-abb3-568c-3176-333e66eafa74.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/312018/824cc2f7-dce0-48a9-1aa8-de9a72753df3.png)

うん、大丈夫！

・・・と思いきや何度か追加しているとlistに戻っても追加分が反映されない現象になってしまいました。
スプレッドシートでは正常に追加されているのですが・・・

ADDのonClickイベントを少し改良したら改善しました。

```javascript
createRow();
setTimeout(function(){
  app.showPage(app.pages.list);
  widget.datasource.load();
},1000);
```
違和感ない程度だしいいかな

まとめ
----
そんな感じで全3回予定で書いてきたのですが削除も欲しい気がしました。
ここまでやればもうできると思いますが完結させたいという意味で削除も書こうかな・・・