Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function syncData() {
- var userProperties = PropertiesService.getScriptProperties();
- var application_key = userProperties.getProperty("APPLICATION_KEY");
- var client_key = userProperties.getProperty("CLIENT_KEY");
- var ncmb = NCMB.init(application_key, client_key);
- var userName = userProperties.getProperty("USER_NAME");
- var password = userProperties.getProperty("PASSWORD");
- ncmb.User.login(userName, password);
- var objSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
- for (var i = 0; i < objSheets.length; i += 1) {
- syncClass(ncmb, objSheets[i]);
- }
- }
- function syncClass(ncmb, sheet) {
- // クラス名の取得と、データストアの準備
- var className = sheet.getName();
- var Item = ncmb.DataStore(className);
- // 必要な変数の初期化
- var fields = [];
- var coulmn = 1;
- var objectIds = [];
- // 一行目を使ってカラム名を取得
- while (true) {
- var field = sheet.getRange(1, coulmn).getValue();
- if (field == '') break;
- coulmn += 1;
- fields.push(field);
- }
- // データの登録および更新処理
- var rowIndex = 2;
- while (true) {
- // クラスのインスタンスを容易
- var item = new Item;
- // すべての行が空であれば、処理終了とします
- var range = sheet.getRange(rowIndex, 1, 1, fields.length);
- if (range.isBlank()) break;
- // 各行を処理します
- for (var i = 0; i < fields.length; i += 1) {
- // 表示されている値と、そこで使われている計算式を取ります
- var value = sheet.getRange(rowIndex, i + 1).getValue();
- var formula = sheet.getRange(rowIndex, i + 1).getFormula();
- // 値がない場合には処理対象外です
- if (value != '') {
- // 計算式がある場合
- if (formula != '') {
- // A列(objectId)が処理対象か否か
- var pClassName = formula.replace(/=(.*?)!A[0-9]+.*$/, "$1");
- // objectIdが計算式にある場合はポインターとします
- if (pClassName) {
- value = {
- "__type":"Pointer",
- "className": pClassName,
- "objectId": value
- };
- }
- }
- // 値をセットします
- item.set(fields[i], value);
- }
- }
- // ACLは決め打ちです。ワークフローに合わせて変更してください
- item.set('acl', {
- "*": {
- "read": true, // 全員に読み込み権限
- },
- "role:Admin":{ // Adminというロールに書き込み権限
- "read": true, "write": true
- }
- });
- // オブジェクトIDの有無によって登録/更新を変えています
- var error = item.get('objectId') ? item.update() : item.save();
- // エラー判定
- if (!error) {
- // エラーがなければ行のA列の値をobjectIdにします
- sheet.getRange(rowIndex, 1).setValue(item.get('objectId'));
- // ここで処理されたobjectIdは削除対象外のデータとします
- objectIds.push(item.get('objectId'));
- }
- rowIndex += 1;
- }
- // 現在クラスにある全データ(最大1000件)を取得します
- var items = Item.limit(1000).fetchAll();
- for (var i = 0; i < items.length; i += 1) {
- // 処理対象だったかどうかチェックします
- if (objectIds.indexOf(items[i].get('objectId')) > -1 ) {
- } else {
- // 処理対象でなかったのでデータを消します
- items[i].destroy();
- }
- }
- }
Add Comment
Please, Sign In to add comment