新規投稿
フォローする

PUTの更新 Promise

現在Promiseを利用し、アプリ内更新したいと考えています。レコード保存時にアプリ内の

「合計台数」、「事業所」を取得しアプリ内にあり別レコードの、「事業所」が同じかつドロップダウンが「機器更新手数料」、表示されている「台数」に取得した「合計台数」をセットしたいと考えています。

いくつか記事を参考にしたのですがPromiseを利用する場合get()が利用できないため、どのように値の取得をすればいいでしょうか?

参考1 参考2 参考3

(function() {
  'use strict';
  kintone.events.on('app.record.edit.submit', function(event) {
    var record = event.record;
    var appId = 151;

    new kintone.Promise(function(resolve, reject) {
      kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
        app: appId, fields: ['合計台数', '事業所']}).then(function() {
        var record = kintone.app.record.get();
        var total = record.record['合計台数'].value;
        var office = record.record['事業所'].value;

        var param = {
          app: appId,
          records: ['台数']
        };
        var query = 'プラン in ("機器更新手数料") ';
        query += 'and 事業所 = "' + office + '"';

        new kintone.Promise(function(resolve, reject) {
          kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
            app: appId, query: query}).then(function(resp) {
            for (var i = 0; i < resp.records.length; i++) {
              alert(total);
              param.records[i] = {
                'id': resp.records[i]['レコード番号'].value,
                '台数': {
                  'value': total
                },
              };
            }
          });
        });

        kintone.Promise.all(kintone.api.url('/k/v1/records', true), 'PUT', param).then(function(resp) {
          return event;
        }, function(error) {
          console.log(param);
          return event;
        });
      });
    });
  });
})();
0

3件のコメント

Avatar
koichi

梢さん

こんにちは。

 

全体の流れは以下で合っていますか?

①自レコードの「合計台数」「事業所」を取得

②「事業所」が同じかつプランが「機器更新手数料」の別レコードを取得

③上記別レコード全てに対して「合計」を更新

 

「app.record.edit.submit」イベント内における値の取得・更新について

 

①自レコードの値を取得する場合は「record.フィールド名.value」で取得します。これはPromise内でも可です。

「合計台数」「事業所」が自レコードの値であれば、最初のGET処理は不要と思います。

 

②「事業所」が同じかつプランが「機器更新手数料」の別レコードを取得は

記載のGET API処理で問題ないと思います。

 

③PUT API処理ですが、kintone.Promise.allは削除して

kintone.api.url('/k/v1/records', true), 'PUT', param).then(function(resp) { で良いと思います。

但し、paramにアプリIDが含まれていないため、これを含めた形で定義してみてください。

以下「JavaScriptサンプル」の項をご参照ください。

レコードの一括更新

 

また、GET後にPUTという流れになりますが、上記コードではGETとPUTが並列になっているため

for (var i = 0; i < resp.records.length; i++) { } の後に

kintone.api.url('/k/v1/records', true), 'PUT', param)を入れると良いと思います。

 

そもそもの前提の流れが誤っていたらご指摘ください。

koichiにより編集されました
0
Avatar

koichi様

ご返信ありがとうございます

有益な情報で本当に助かります。おかげでrecord.フィールド名.valueで取得無事できました。

 

説明不足で申し訳ございません。①と②まではおっしゃる通りです。

③は②の取得したレコードの「合計」に①の「合計台数」をセット更新をしたいと考えています

①自レコードの「合計台数」「事業所」を取得

②「事業所」が同じかつプランが「機器更新手数料」の別レコードを取得

③②の取得したレコードの「合計」に①の「合計台数」をセット更新

 

指摘したいただいた点を踏まえ組み直したんですがPUTで更新ができないです。

恐らくPUTが並列の状態のままだと考えています。何が原因かわかりますでしょうか?

ご教授して頂ければ幸いでございます。


(function() {
'use strict';
kintone.events.on('app.record.edit.submit', function(event) {
var record = event.record;
var appId = 151;
var total = record.合計台数.value;
var office = record.事業所.value;
var query = 'プラン in ("機器更新手数料") ';
query += 'and 事業所 = "' + office + '"';

new kintone.Promise(function(resolve, reject) {
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appId,query: query}).then(function(resp) {
for (var i = 0; i < resp.records.length; i++) {
var param = {
"app": kintone.app.getId(),
"records": ['台数']
};
param['records'][i] = {
'id': resp.records[i]['レコード番号'].value,
'record':{
'台数': {
'value':'total'
}
}
};
}

kintone.api(kintone.api.url('/k/v1/records', true),'PUT',param).then(function(resp) {
return event;
}, function(error) {
console.log(param);
return event;
});
});
});
});
})();

 

梢により編集されました
0
Avatar
koichi

梢さん

 

大枠の処理は問題ないと思います。

少しPUTのparamの定義を変えてみてください。

先に更新したいレコード情報を配列(ここではrecordArray)に格納していき、その後にparamを定義すると分かりやすいです。

new kintone.Promise(function(resolve, reject) {

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appId, query: query
}).then(function(resp) {

var recordArray = [];

for (var i = 0; i < resp.records.length; i++) {
recordArray.push({
'id': resp.records[i]['レコード番号'].value,
'record': {
'台数': {
'value': total
}
}
});
}

var param = {
"app": kintone.app.getId(),
"records": recordArray
};

kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', param).then(function(resp) {
return event;
}, function(error) {
console.log(param);
return event;
});

});

});
koichiにより編集されました
0
サインインしてコメントを残してください。