# for分の記述について

**URL:** <https://community.cybozu.dev/t/topic/7217>\
**Category:** kintone 開発相談\
**Created:** [2020 年 11 月 4 日午前 7:21 UTC](https://community.cybozu.dev/t/topic/7217 "2020-11-04T07:21:46Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1458](https://avatars.discourse-cdn.com/v4/letter/l/85f322/32.png) [@Legacy\_Account1458](https://community.cybozu.dev/u/Legacy_Account1458)\
**Post date:** [2020 年 11 月 4 日午前 7:21 UTC](https://community.cybozu.dev/t/topic/7217/1 "2020-11-04T07:21:46Z")

</div>

(function() {

“use strict”;

// 在庫アプリ操作  
var syohinDao = {};  
syohinDao.APP\_ID = 373;

// 新規レコードの保存イベント  
kintone.events.on(‘app.record.create.submit’, function(event) {

var tabRec = event.record.入出庫.value;  
for (var i = 0; i \< tabRec.length; i++) {

console.log(tabRec.length);

var record = event.record;  
var params = {  
“app”: syohinDao.APP\_ID,  
“query”: ‘部品コード ="’ + tabRec[i].value[‘部品コード’][‘value’] + ‘"’,  
“fields”: [‘$id’, ‘$revision’, ‘在庫数’]  
};

console.log(params);

return kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {  
var syohinRecord = resp[‘records’][0];

if (syohinRecord.length !== 0) {  
var updQuantity = 0;  
// 入庫、等の場合  
if (tabRec[i].value[‘入庫数’][‘value’]) {  
updQuantity = Number(syohinRecord[‘在庫数’][‘value’]) + Number(tabRec[i].value[‘入庫数’][‘value’]);  
}  
// 出庫、等の場合  
if (tabRec[i].value[‘出庫数’][‘value’]) {  
updQuantity = Number(syohinRecord[‘在庫数’][‘value’]) - Number(tabRec[i].value[‘出庫数’][‘value’]);  
}  
if (updQuantity \< 0) {  
// 更新後の在庫数がマイナスになる場合はエラーにして中断  
alert(“在庫が足りません。”);  
tabRec[i].value[‘出庫数’][‘error’] = “在庫が足りません。”;  
event[‘error’] = “在庫が足りません。”;  
return event;  
}

// 更新パラメータ  
var params2 = {  
// 商品アプリ番号  
“app”: syohinDao.APP\_ID,  
// レコード番号  
“id”: syohinRecord[‘$id’][‘value’],  
// レビジョン  
“revision”: syohinRecord[‘$revision’][‘value’],  
// 登録データ  
“record”: {  
“在庫数”: {  
“value”: updQuantity  
}  
}  
};  
/\*  
// 商品レコードを更新  
return kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, params2).then(function(resp2) {  
alert(“商品レコードを更新しました。”);  
}, function(resp2) {  
alert(“商品レコードを取得できません。”);  
});  
\*/  
}  
},function(resp) {  
alert(“商品レコードを取得できません。”);  
event[‘error’] = “商品レコードを取得できません。”;  
return event;  
});  
}  
});  
});

↑上記のコードで、for文を使用しているのですが、データが複数あっても、一度しかfor文が動作しません。  
正しい記述方法をご教示願います

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2020 年 11 月 5 日午前 1:37 UTC](https://community.cybozu.dev/t/topic/7217/2 "2020-11-05T01:37:24Z")

</div>

kintone\_TS44様

お世話になっております．

for文内でreturnが処理されるとそれ以降のループは処理されません．  
全ての処理を終えた後でreturnするような記述が良いかと思います．  
非同期処理が絡んでいるので，[Promise.all()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)で全てのPromiseが解決するのを待つと良いと思います．

```
(function () {

  "use strict";

  // 在庫アプリ操作
  var syohinDao = {};
  syohinDao.APP_ID = 373;

  // 新規レコードの保存イベント
  kintone.events.on('app.record.create.submit', function (event) {

    var tabRec = event.record.入出庫.value;
    return kintone.Promise.all(tabRec.map(function(row){
      console.log(tabRec.length);

      var record = event.record;
      var params = {
        "app": syohinDao.APP_ID,
        "query": '部品コード ="' + row.value['部品コード']['value'] + '"',
        "fields": ['$id', '$revision', '在庫数']
      };

      console.log(params);

      return kintone.api('/k/v1/records', 'GET', params).then(function (resp) {
        var syohinRecord = resp['records'][0];

        if (syohinRecord.length !== 0) {
          var updQuantity = 0;
          // 入庫、等の場合
          if (row.value['入庫数']['value']) {
            updQuantity = Number(syohinRecord['在庫数']['value']) + Number(row.value['入庫数']['value']);
          }
          // 出庫、等の場合
          if (row.value['出庫数']['value']) {
            updQuantity = Number(syohinRecord['在庫数']['value']) - Number(row.value['出庫数']['value']);
          }
          if (updQuantity < 0) {
            // 更新後の在庫数がマイナスになる場合はエラーにして中断
            alert("在庫が足りません。");
            row.value['出庫数']['error'] = "在庫が足りません。";
            event['error'] = "在庫が足りません。";
            return event;
          }

          // 更新パラメータ
          var params2 = {
            // 商品アプリ番号
            "app": syohinDao.APP_ID,
            // レコード番号
            "id": syohinRecord['$id']['value'],
            // レビジョン
            "revision": syohinRecord['$revision']['value'],
            // 登録データ
            "record": {
              "在庫数": {
                "value": updQuantity
              }
            }
          };
          /*
          // 商品レコードを更新
          return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', params2).then(function(resp2) {
          alert("商品レコードを更新しました。");
          }, function(resp2) {
          alert("商品レコードを取得できません。");
          });
          */
        }
      }).catch(function (resp) {
        alert("商品レコードを取得できません。");
        event['error'] = "商品レコードを取得できません。";
        return event;
      });
    }));
  });
});

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1458](https://avatars.discourse-cdn.com/v4/letter/l/85f322/32.png) [@Legacy\_Account1458](https://community.cybozu.dev/u/Legacy_Account1458)\
**Post date:** [2020 年 11 月 5 日午前 4:54 UTC](https://community.cybozu.dev/t/topic/7217/3 "2020-11-05T04:54:40Z")

</div>

江田篤史様  
お世話になっております。

ご回答頂いた、コードでアプリを実行したのですが、  
思った通りに動作しませんでした。

コードのどこの箇所を気をつければよいか、ご教示願います。  
`※``console.log(tabRec.length);でテーブルの数が取得できませんでした。`

` `

```javascript

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2020 年 11 月 5 日午前 5:01 UTC](https://community.cybozu.dev/t/topic/7217/4 "2020-11-05T05:01:19Z")

</div>

kintone\_TS44様

お世話になっております．

現状でコンソール画面には何が表示されていますか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1458](https://avatars.discourse-cdn.com/v4/letter/l/85f322/32.png) [@Legacy\_Account1458](https://community.cybozu.dev/u/Legacy_Account1458)\
**Post date:** [2020 年 11 月 5 日午前 5:16 UTC](https://community.cybozu.dev/t/topic/7217/5 "2020-11-05T05:16:54Z")

</div>

江田篤史様  
お世話になっております。

何も表示されず保存されてしまいます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2020 年 11 月 5 日午前 5:42 UTC](https://community.cybozu.dev/t/topic/7217/6 "2020-11-05T05:42:28Z")

</div>

kintone\_TS44様

お世話になっております．  
ご確認ありがとうございます．

即時関数の括弧が不足していました．  
最終行を修正してお試しいただけますでしょうか．

```
});

```

↓

```
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1458](https://avatars.discourse-cdn.com/v4/letter/l/85f322/32.png) [@Legacy\_Account1458](https://community.cybozu.dev/u/Legacy_Account1458)\
**Post date:** [2020 年 11 月 5 日午前 5:55 UTC](https://community.cybozu.dev/t/topic/7217/7 "2020-11-05T05:55:20Z")

</div>

江田篤史様  
お世話になっております。

コンソールは表示されるようになりました。  
誠に、ありがとうございます。

ですが、保存をすると  
カスタマイズ用のJavaScriptの実行時にエラーが発生しました。アプリの管理者にお問い合わせください。

- event.record が不正です。  
とメッセージが表示されます。

何度も申し訳ございませんが、ご教示願います。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1740](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1740](https://community.cybozu.dev/u/Legacy_Account1740)\
**Post date:** [2020 年 11 月 5 日午前 6:10 UTC](https://community.cybozu.dev/t/topic/7217/8 "2020-11-05T06:10:14Z")

</div>

kintone\_TS44様

お世話になっております．  
こちらこそ確認不足で申し訳ございません．

eventオブジェクトをreturnしないといけませんね．  
kintone.Promise.all()にメソッドチェーンして，eventオブジェクトをreturnしてください．

```
...
    return kintone.Promise.all(tabRec.map(function(row){
      ...
    })); //75行目
  });
})();

```

↓

```
...
    return kintone.Promise.all(tabRec.map(function(row){
      ...
    })).then(function(){ //75行目
      return event;
    });
  });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1458](https://avatars.discourse-cdn.com/v4/letter/l/85f322/32.png) [@Legacy\_Account1458](https://community.cybozu.dev/u/Legacy_Account1458)\
**Post date:** [2020 年 11 月 5 日午前 6:22 UTC](https://community.cybozu.dev/t/topic/7217/9 "2020-11-05T06:22:12Z")

</div>

江田篤史様  
お世話になっております。

無事、動作いたしました。  
ご教示頂き、ありがとうございました。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1458](https://avatars.discourse-cdn.com/v4/letter/l/85f322/32.png) [@Legacy\_Account1458](https://community.cybozu.dev/u/Legacy_Account1458)\
**Post date:** [2020 年 11 月 5 日午前 7:09 UTC](https://community.cybozu.dev/t/topic/7217/10 "2020-11-05T07:09:35Z")

</div>

江田篤史様  
お世話になっております。

先ほどご教示頂いたコードに、詳細情報を追加したいと考えたおりますが、  
下記の方法ですと、テーブルが上書きされてしまいます。

// 登録データ  
“record”: {  
“在庫数”: {  
“value”: updQuantity  
},  
//テーブルデータの追加  
“詳細情報”: {  
“value”: [{  
“value”: {  
“日付”: {“value”: row.value[‘入出庫日’][‘value’]},  
“入庫”: {“value”: Number(row.value[‘入庫数’][‘value’])},  
“出庫”: {“value”: Number(row.value[‘出庫数’][‘value’])},  
“会社名”: {“value”: record[‘会社名’][‘value’]}  
}  
}]  
}  
}

度々、申し訳ございませんがご教示願います。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2025 年 6 月 3 日午前 7:31 UTC](https://community.cybozu.dev/t/topic/7217/11 "2025-06-03T07:31:43Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
