# アプリIDからアプリ名を取得して文字フィールドへ入力する（サブテーブル）

**URL:** https://community.cybozu.dev/t/topic/1093
**Category:** kintone 開発相談
**Created:** [2022 年 10 月 28 日午前 10:48 UTC](https://community.cybozu.dev/t/topic/1093 "2022-10-28T10:48:28Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Legacy\_Account297](https://avatars.discourse-cdn.com/v4/letter/l/47e85d/32.png) [@Legacy\_Account297](https://community.cybozu.dev/u/Legacy_Account297)
#### Post date: [2022 年 10 月 28 日午前 10:48 UTC](https://community.cybozu.dev/t/topic/1093/1 "2022-10-28T10:48:28Z")

</div>

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

サブテーブルに下記のようなフィールドを作っています。

「アプリID」へ任意のアプリIDを入力し、隣の「アプリ名」へアプリ名を入れています。

現状テーブルを追加しアプリIDを入れますと1行目で取得したアプリ名を上書きしてしまいます。

アプリID：112 顧客情報、 アプリID：24 問い合わせ管理

コードは下記のとおりですが、修正すべきところがわかりません。

ご教授いただけますと幸いです。

よろしくおねがいします

```
function(event){
                            
                            var record = event.record;
                            var subTotals = {};
                            
                            
                                for (var i = 0; i < record.テーブル.value.length; i++) {
                                var AppID = record.テーブル.value[i].value['アプリID'].value;

                                subTotals += ","+AppID
                                
                                
                                }
                                
                                record.APP連結キー.value=subTotals
                         
                                
                                if(!AppID){}else{
                                
                                const body = {
                                    'id': AppID

                                };
                                
                                
                                
                                
                              return kintone.api(kintone.api.url('/k/v1/app.json', true), 'GET', body, (resp) => {
                          // return kintone.api(kintone.api.url('/k/v1/app.json', true), 'GET', body).then(function(resp) => {
                                    // success
                                    console.log(respAPPname)
                                    var respAPPname = resp.name
                                    var respRecord = kintone.app.record.get();
                                     
                                     for (var i = 0; i < respRecord.record.テーブル.value.length; i++) {
                                         
                                         respRecord.record.テーブル.value[i].value.アプリ名.value=respAPPname
                                         
                                     }
                                     
                                      kintone.app.record.set( respRecord );
                                  
                              
                                    
                                }, (error) => {
                                    // error
                                    console.log(error);
                                    
                                    var respRecord = kintone.app.record.get();
                                    
                                    for (var i = 0; i < respRecord.record.テーブル.value.length; i++) {
                                        
                                        respRecord.record.テーブル.value[i].value.アプリ名.value="不正なリクエスト"
                                        
                                    }
                                    
                                     kintone.app.record.set( respRecord );

                                });
                                
                               // console.log(respAPPname);
                                
                                
                                
                                
                                }
                                
                                
                            
                            
                            return event;

                        });

```

---

<div class="post-metadata">

### Author: ![Legacy\_Account2534](https://avatars.discourse-cdn.com/v4/letter/l/e9a140/32.png) [@Legacy\_Account2534](https://community.cybozu.dev/u/Legacy_Account2534)
#### Post date: [2022 年 10 月 29 日午前 12:16 UTC](https://community.cybozu.dev/t/topic/1093/2 "2022-10-29T00:16:07Z")

</div>

青山昌司 さん

下記の点を修正すれば動作すると思います。

```
returnkintone.api(kintone.api.url('/k/v1/app.json',true),'GET', body, (resp) => {

```

アプリ情報の取得処理で使用しているAPIは1件しか取得できないため、[アプリ情報の一括取得](https://community.cybozu.dev/hc/ja/articles/202931674-%E3%82%A2%E3%83%97%E3%83%AA%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%96%E5%BE%97#step2)のAPIを使用します。

```
 respRecord.record.テーブル.value[i].value.アプリ名.value=respAPPname

```

アプリ情報取得後、サブテーブル各行のアプリIDと取得したアプリ情報を付け合わせて名前を設定します。

&nbsp;

以上になります。実装してみて何か不明な点がありましたら、気兼ねなくご質問ください。

---

<div class="post-metadata">

### Author: ![Legacy\_Account297](https://avatars.discourse-cdn.com/v4/letter/l/47e85d/32.png) [@Legacy\_Account297](https://community.cybozu.dev/u/Legacy_Account297)
#### Post date: [2022 年 10 月 29 日午前 2:34 UTC](https://community.cybozu.dev/t/topic/1093/3 "2022-10-29T02:34:34Z")

</div>

川村さま

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

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

下記の変更で動くようにはなったんですが、理解はあっておりますでしょうか？

どうぞよろしくお願いいたします

```
return kintone.api(kintone.api.url('/k/v1/apps.json', true), 'GET', body, (resp) => {
                                  
                          
                                    // success
                                    console.log(respAPPname)
                                    console.log(resp)
                                    console.log(resp.apps)
                                    var respAPPname = resp.name
                                    var respRecord = kintone.app.record.get();
                                    
                                   
                                     
                                     for (var i = 0; i < respRecord.record.テーブル.value.length; i++) {
                                         
                                         for (var r = 0; r < resp.apps.length; r++) {
                                             
                                             if(resp.apps[r].appId===respRecord.record.テーブル.value[i].value.アプリID.value){
                                             
                                             
                                             respRecord.record.テーブル.value[i].value.アプリ名.value = resp.apps[r].name
                                             
                                         }
                                             
                                         }
                                         
                                         
                                        
                                         
                                     }
                                     
                                      kintone.app.record.set( respRecord );

```

&nbsp;

&nbsp;

---

<div class="post-metadata">

### Author: ![Legacy\_Account2534](https://avatars.discourse-cdn.com/v4/letter/l/e9a140/32.png) [@Legacy\_Account2534](https://community.cybozu.dev/u/Legacy_Account2534)
#### Post date: [2022 年 10 月 29 日午後 1:31 UTC](https://community.cybozu.dev/t/topic/1093/4 "2022-10-29T13:31:28Z")

</div>

青山昌司 さん

はい、その理解で問題ありません。

下記は不要になるかと思います。

```
varrespAPPname = resp.name

```

以上になります。参考になれば幸いです。

---

<div class="post-metadata">

### Author: ![Legacy\_Account297](https://avatars.discourse-cdn.com/v4/letter/l/47e85d/32.png) [@Legacy\_Account297](https://community.cybozu.dev/u/Legacy_Account297)
#### Post date: [2022 年 10 月 31 日午前 2:30 UTC](https://community.cybozu.dev/t/topic/1093/5 "2022-10-31T02:30:55Z")

</div>

川村さま

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

添削ありがとうございました。

因みにアプリが100個を超える場合は超えたアプリ名を取得できません。

回避する方法はありますでしょうか？

---

<div class="post-metadata">

### Author: ![Legacy\_Account2534](https://avatars.discourse-cdn.com/v4/letter/l/e9a140/32.png) [@Legacy\_Account2534](https://community.cybozu.dev/u/Legacy_Account2534)
#### Post date: [2022 年 11 月 5 日午前 12:25 UTC](https://community.cybozu.dev/t/topic/1093/6 "2022-11-05T00:25:56Z")

</div>

青山昌司 さん

[アプリ情報の一括取得API](https://community.cybozu.dev/hc/ja/articles/202931674-%E3%82%A2%E3%83%97%E3%83%AA%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%96%E5%BE%97#step2:~:text=%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F-,%E3%82%A2%E3%83%97%E3%83%AA%E6%83%85%E5%A0%B1%E3%81%AE%E4%B8%80%E6%8B%AC%E5%8F%96%E5%BE%97,-%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E6%9D%A1%E4%BB%B6)のパラメータに limit と offset があるのでそちらを使用すると全件取得できます。

全件取得する場合は Promise でループする必要があるので少し処理が複雑になります。参考としてコードも載せておきます。

**再帰処理を使った実装**

```
function getApps(offset = 0, limit = 100, apps = []) {
  return kintone.api('/k/v1/apps', 'GET', { offset, limit }).then((res) => {
    apps.push(...res.apps);

    if (res.apps.length === limit) {
    return getApps(offset + limit, limit, apps);
    }

    return apps;
  });
}

getApps().then(console.log);

```

**上記を async await を使って書き直した実装**

```
async function getApps(offset = 0, limit = 100, apps = []) {
  for (
    let params = { offset, limit }, res;
    res === undefined || res.apps.length === limit;
    params.offset += limit
  ) {
    res = await kintone.api('/k/v1/apps', 'GET', params);
    apps.push(...res.apps);
  }

  return apps;
}

getApps().then(console.log);

```

※ 動作環境までは考慮していません。最新のブラウザだと問題ありませんが、環境によっては動作しない書き方が含まれる可能性があります。

&nbsp;

以上になります。書き方等何が不明な点がありましたら、気兼ねなくご質問ください。

&nbsp;

---

<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: [2024 年 6 月 3 日午前 4:40 UTC](https://community.cybozu.dev/t/topic/1093/7 "2024-06-03T04:40:02Z")

</div>

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