NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
82 stars 18 forks source link

GoogleAppsScriptを用いたスクリプトの実行について #1170

Open Cafelatte8610 opened 4 years ago

Cafelatte8610 commented 4 years ago

スクリプトにて(UpdateSoaring.js)

var ncmb = new NCMB(apikey, clientkey);
var MusicData = ncmb.DataStore("MusicData");
var Data = new MusicData();
Data.set("SoaringCount", 0).save()
    .then(function (Data) {
        Data.set("SoaringCount", 0);
        return Data.update();
    })

GoogleAppsScriptにて

 var ncmb = new NCMB(application_key, client_key);
  ncmb.Script.exec("PUT", "UpdateSoaring.js").then(function(res){
        // 実行後処理
  })
  .catch(function(err){
        // エラー処理
  });

を実行したところエラーが出てしまいます。 MusicDataというクラス内のすべてのレコードのSoraeingCountというフィールドの値を0にしたいのですが、どう書けばよいでしょうか?

goofmint commented 4 years ago

フィードバックありがとうございます。問題はスクリプトのPUTに対応していないことです…。ちょっと見てみます。すぐ対応できそうであれば、実装します。

違いますね。 UpdateSoaring.js 側の問題そうです。

goofmint commented 4 years ago

全レコードの更新メソッドはないので、次のようになります。適当なコードなので、エラーが出たら適宜修正してください。

var ncmb = new NCMB(apikey, clientkey);
var MusicData = ncmb.DataStore("MusicData");

(async () => {
  await updateAll(MusicData);
})();

async function updateAll(obj) {
  const ary = await obj
    .notEqualTo('SoaringCount', 0) // 0じゃないもの
    .limit(1000).fetchAll(); // 最大の1000件を取得
  // 結果がなければ終了
  if (ary.length === 0) {
    return true;
  }
  const promises = [];
  for (let obj of ary) {
    promises.push(obj.set("SoaringCount", 0).update());
  }
  await Promise.all(promises);
  // さらにデータがあるかも知れないので実行
  await updateAll();
}
Cafelatte8610 commented 4 years ago

ありがとうございます。 先ほどのコードを実行したところ { "Status": "ERROR", "RequestHeaders": "{\"host\":\"script-console.mbaas.api.nifcloud.com\",\"connection\":\"close\",\"content-length\":\"139\",\"accept\":\"application/json, text/plain, */*\",\"user-agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.98 Safari/537.36\",\"content-type\":\"multipart/form-data; boundary=----WebKitFormBoundaryLMLzC9vj6cLDgPcD\",\"origin\":\"https://console.mbaas.nifcloud.com\",\"sec-fetch-site\":\"same-site\",\"sec-fetch-mode\":\"cors\",\"sec-fetch-dest\":\"empty\",\"referer\":\"https://console.mbaas.nifcloud.com/\",\"accept-encoding\":\"gzip, deflate, br\",\"accept-language\":\"ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7\"}", "RequestQuery": "{}", "ResponseHeaders": "{}", "Error": "ScriptError: ReferenceError: NCMB is not defined\n at Object.<anonymous> (/tmp/UpdateSoaring.js:1:12)\n at Module._compile (internal/modules/cjs/loader.js:1158:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)\n at Module.load (internal/modules/cjs/loader.js:1002:32)\n at Function.Module._load (internal/modules/cjs/loader.js:901:14)\n at Module.require (internal/modules/cjs/loader.js:1044:19)\n at require (internal/modules/cjs/helpers.js:77:18)\n at Module._compile (internal/modules/cjs/loader.js:1158:30)", "Duration": 365, "created_at": "2020-08-19T16:00:54.000Z", "updated_at": "2020-08-19T16:00:55.000Z", "ResponseStatus": 500, "ScriptIdentifier": "UpdateSoaring.js" } このようなエラーが発生したのですが何が原因なのでしょうか?

goofmint commented 4 years ago

スクリプトのサンプルコードはこちらにあるので参照してください。

https://mbaas.nifcloud.com/doc/current/script/reference_nodejs.html#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89

ローカルでテストする方法も書いてありますので、そちらが参考になるかと思います。

※ ちなみにエラーメッセージは Error のところに書いてありますが、NCMBがないというエラー(requireしていない)というものになります。

Cafelatte8610 commented 4 years ago

ありがとうございます! GoogleAppsからエラーの報告は出るものの値は0に更新できています。

Cafelatte8610 commented 4 years ago

やっぱりできていませんでした。NCMBのダッシュボードのスクリプトから実行すると値が0に更新されているのでおそらくGoogleAppScript側のコードに問題があると思うのですが、下記のコードを実行しているのですが、どこが問題でしょうか? function DataSet(){ var application_key = "ea25a419458420ee0d676cf8a65f2bc887283023a901271b0e02742736d5fb55"; var client_key = "3a9acdb12b32dc76cc120c2cc0eb001e18130a6296c9775d80c23f4317bccf50"; var ncmb = new NCMB(application_key, client_key); ncmb.Script.exec("PUT", "UpdateSoaring.js").then(function(res){ // 実行後処理 }) .catch(function(err){ // エラー処理 }); }

↓エラー 2020-08-31 00 37 48 script google com e15d7612f265