AppsスプレッドシートとApp Engineのデータ交換を完成させる
2013年12月24日(火)
1. 3 App Engineの処理
[1] サーブレットのコード記述
Drive上スプレッドシートのJavaScript で、 リスト1のgetalldata関数から(5)のfecthメソッドが実行されるとリスト2のサーブレットが呼び出されます。
リスト2 サーブレット(SpreadServlet.java)
package com.google.gdata; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.*; import com.google.gdata.util.AuthenticationException; import com.google.gdata.util.ServiceException; import com.google.appengine.api.datastore.EntityNotFoundException; @SuppressWarnings("serial") public class SpreadServlet extends HttpServlet { : public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.setContentType("text/html; charset=utf-8"); PrintWriter out = resp.getWriter(); String mode = req.getParameter("mode"); String sheet = req.getParameter("sheet"); SpreadBean ss = new SpreadBean(); //(1) if (mode.equals("addspreadbyshoptodsym")) { String shop = req.getParameter("shop"); String rv = ss.addSpreadByShopToDsYm(sheet, shop); out.println(rv); : } else if (mode.equals("sfetchall")) { String rv = ss.sfetchall(sheet); //(2) out.println(rv); //(3) } } }
サーブレットの処理はこれまでと同じ処理内容です。リスト1の(1)でビーンズのインスタンスを生成し、modeパラメータの値("sfetchall")から、(2)でSpreadBeanのsfetchallメソッドが呼び出され、(3)でその戻り値(rv)がサーブレットに返されます。次に、ビーンズのコード記述を見ていきます。
[2] ビーンズのコード記述
リスト3 ビーンズ(SpreadBean.java)
package com.google.gdata; package com.google.gdata; import java.io.IOException; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.EntityNotFoundException; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; import com.google.appengine.api.datastore.Query; import com.google.appengine.api.datastore.Query.Filter; import com.google.appengine.api.datastore.Query.FilterOperator; import com.google.appengine.api.datastore.Query.SortDirection; import com.google.gdata.client.spreadsheet.FeedURLFactory; import com.google.gdata.client.spreadsheet.ListQuery; import com.google.gdata.client.spreadsheet.SpreadsheetQuery; import com.google.gdata.client.spreadsheet.SpreadsheetService; import com.google.gdata.data.spreadsheet.CustomElementCollection; import com.google.gdata.data.spreadsheet.ListEntry; import com.google.gdata.data.spreadsheet.ListFeed; import com.google.gdata.data.spreadsheet.SpreadsheetEntry; import com.google.gdata.data.spreadsheet.SpreadsheetFeed; import com.google.gdata.data.spreadsheet.WorksheetEntry; import com.google.gdata.data.spreadsheet.WorksheetFeed; import com.google.gdata.util.AuthenticationException; import com.google.gdata.util.ServiceException; import com.google.appengine.api.datastore.Query.FilterPredicate; import com.google.appengine.api.datastore.PreparedQuery; public class SpreadBean { : public String sfetchall(String yyyymm){ //(1) try { String rv = "{ \"ds\":["; DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Filter ymFilter = new FilterPredicate("yyyymm", FilterOperator.EQUAL, yyyymm); Query q = new Query("salesym").setFilter(ymFilter); PreparedQuery pq = ds.prepare(q); for (Entity res : pq.asIterable()) { String shop = (String) res.getProperty("shop"); String food = (String) res.getProperty("food"); String electric = (String) res.getProperty("electric"); String bedding = (String) res.getProperty("bedding"); String other = (String) res.getProperty("other"); String moddate = (String) res.getProperty("moddate"); rv += "{\"shop\": \"" + shop //(2) + "\", \"food\": \"" + food + "\", \"electric\": \"" + electric + "\", \"bedding\": \"" + bedding + "\", \"other\": \"" + other + "\", \"moddate\": \"" + moddate + "\"},"; } rv = rv.substring(0, rv.length() - 1) + "]}"; return rv; } catch (Exception e) { e.printStackTrace(); return "参照不成功 :" + e; } } }
SpreadBeanには連載で見てきたメソッドがすべて記述されています。URLFetchではリスト2のSpreadServletから(1)のsfetchallメソッドが呼び出され、ここでDatastoreをアクセスして得られたデータがDrive上のスプレッドシートに表示されることになります。
処理内容は第3回、リスト3のgetDsAllShopYmメソッドと殆ど同じですが、Datastoreをアクセスして得られた値をJSONデータとしてフォーマッティングする(2)の部分だけが異なります。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- AppsのスプレッドシートデータをApp Engineから読み取る
- App Engineから読み取ったデータの書き込みと、スプレッドシートのUIで表示する処理
- Google AppとApp Engineの準備・設定を完了する
- JDO APIとLow-Level APIの違いと基本CRUD処理
- クラウドをより身近に!Google Driveを使った業務データ移行入門
- 同一テーブルでプロパティ項目を変更して永続化
- FirebaseプログラムをApp Engineにディプロイする
- エンティティ所有/被所有関係とトランザクション処理
- リスト・プロパティを含むエンティティの永続化
- Google Driveと Cloud DatastoreのデータをBigQueryで使用する