# 別アプリのサブテーブル内の情報を表示

**URL:** <https://community.cybozu.dev/t/topic/551>\
**Category:** kintone 開発相談\
**Created:** [2017 年 9 月 21 日午前 1:30 UTC](https://community.cybozu.dev/t/topic/551 "2017-09-21T01:30:36Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1813](https://avatars.discourse-cdn.com/v4/letter/l/e495f1/32.png) [@Legacy\_Account1813](https://community.cybozu.dev/u/Legacy_Account1813)\
**Post date:** [2017 年 9 月 21 日午前 1:30 UTC](https://community.cybozu.dev/t/topic/551/1 "2017-09-21T01:30:36Z")

</div>

アプリ１：商品マスタ  
アプリ２：受注管理アプリ（アプリID：18)

両アプリの商品番号の値が一致するときに、  
商品マスタのレコード詳細画面で、受注履歴(レコードIDや受注日など)を一覧化したいです。  
イメージとしては関連レコード一覧です。  
ただし、受注管理アプリ内で商品番号がサブテーブルに保存されるため、関連レコード一覧では実現できません。  
カスタマイズで実現可能でしょうか？  
初心者ながら過去の投稿を参考に記述してみたのですが、うまくいきません。

質問①実現方法はありますか？  
質問②取得した受注履歴を表形式で表示する方法を教えて下さい。  
(下の記述では暫定的に商品番号のアラートがでるように設定したつもりですが、アラートも出ません。）

サンプルプログラム等があればご教授いただければと思います。

よろしくお願い申し上げます。

補足：  
商品マスタの商品番号のフィールドコード＝ID  
受注管理アプリの商品番号のフィールドコード＝ID

&nbsp;

(function() {  
‘use strict’;

kintone.events.on(‘app.record.detail.show’, function(event) {

var id = event.record[“ID”].value;

if(!DocId){  
return}

var params = {  
app : 18,  
fields : “ID”,  
query : “ID” in id,  
};

kintone.api.url(“/k/v18/record”,‘GET’,params,function(resp){  
alert(resp[‘ID’]);  
}  
);  
})});

---

<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:** [2017 年 9 月 21 日午後 12:51 UTC](https://community.cybozu.dev/t/topic/551/2 "2017-09-21T12:51:39Z")

</div>

たいやき様

お世話になっております。  
cstapの江田と申します。

queryのinの後のidは括弧で囲う必要があるようです。

サンプルコードを書いてみました。  
ご参考になればと思います。  
\*サンプルは「受注日」がサブテーブル外のフィールド、「個数」がサブテーブル内のフィールドと想定して作りました。

```
(function() {
"use strict";
kintone.events.on('app.record.detail.show', function(event) {
var params = {
app: 18,
query: "ID in (" + event.record.ID.value + ")",
};
kintone.api('/k/v1/records', 'GET', params, function(resp) {
var table = document.createElement("table");
var tr1 = table.insertRow();
var td1_1 = tr1.insertCell();
td1_1.innerText = '受注日';
var td1_2 = tr1.insertCell();
td1_2.innerText = '個数';
resp.records.forEach(function(record){
record.Table.value.forEach(function(row){
if(row.value.ID.value == event.record.ID.value){
var tr2 = table.insertRow();
var td2_1 = tr2.insertCell();
td2_1.innerText = record.受注日.value;
var td2_2 = tr2.insertCell();
td2_2.innerText = row.value.個数.value;
}
});
});
document.getElementById("record-gaia").appendChild(table);
});
return event;
});
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1813](https://avatars.discourse-cdn.com/v4/letter/l/e495f1/32.png) [@Legacy\_Account1813](https://community.cybozu.dev/u/Legacy_Account1813)\
**Post date:** [2017 年 9 月 22 日午前 8:04 UTC](https://community.cybozu.dev/t/topic/551/3 "2017-09-22T08:04:27Z")

</div>

江田様

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

&nbsp;

すばやいご回答で大変助かりました。

サンプルの通り、「受注日」がサブテーブル外のフィールド、「個数」がサブテーブル内のフィールドで作成しています。

実際にサンプルコードを適用させたのですが、うまく動きませんでした。

必ず実現させたい要件のため、調査を継続したいと思います。

&nbsp;

今後ともよろしくお願い申し上げます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1813](https://avatars.discourse-cdn.com/v4/letter/l/e495f1/32.png) [@Legacy\_Account1813](https://community.cybozu.dev/u/Legacy_Account1813)\
**Post date:** [2017 年 10 月 2 日午前 7:10 UTC](https://community.cybozu.dev/t/topic/551/4 "2017-10-02T07:10:43Z")

</div>

江田様

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

&nbsp;

江田様にいただいたサンプルコードを見直し、修正してみたのですが、やはりレコード詳細画面にて受注日と個数は表示されませんでした。

もう既にお手上げ状態なのですが、解決方法は分かりますでしょうか？

また、サンプルコードの"record-gaia"は何を指しているのでしょうか？

稚拙な質問で申し訳ございませんが、ご教示いただけますと幸いです。

よろしくお願い申し上げます。

```
(function() {
"use strict";
kintone.events.on('app.record.detail.show', function(event) {
var params = {
app: 18,
query: "ID in (" + event.record.ID.value + ")"
};
kintone.api('/k/v18/records', 'GET', params, function(resp) {
var table = document.createElement("table");
var tr1 = table.insertRow();
var td1_1 = tr1.insertCell();
td1_1.innerText = '受注日';
var td1_2 = tr1.insertCell();
td1_2.innerText = '個数';
resp.records.forEach(function(record) {
record.Table.value.forEach(function(row) {
if (row.value.ID.value === event.record.ID.value) {
var tr2 = table.insertRow();
var td2_1 = tr2.insertCell();
td2_1.innerText = record.受注日.value;
var td2_2 = tr2.insertCell();
td2_2.innerText = row.value.個数.value;
}
});
});
document.getElementById("record-gaia").appendChild(table);
});
return event;
});
})();

```

&nbsp;

---

<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:** [2017 年 10 月 3 日午前 1:21 UTC](https://community.cybozu.dev/t/topic/551/5 "2017-10-03T01:21:46Z")

</div>

たいやき様  
お世話になっております。

"record-gaia"はレコードが表示されているブロック(div)のidになります。

getElementByIdはJavaScriptに実装されているメソッドで、idを指定して要素を取得します。  
[https://developer.mozilla.org/ja/docs/Web/API/Document/getElementById](https://developer.mozilla.org/ja/docs/Web/API/Document/getElementById)  
今回はこの"record-gaia"の子要素としてテーブルを追加しようと思ったので、getElementByIdにて取得しています。

ご提示いただいたコードについてですが、kintone REST APIのrecordsのパスは「v18」ではなく「v1」になります。  
[https://developer.cybozu.io/hc/ja/articles/202331474#step2](https://developer.cybozu.io/hc/ja/articles/202331474#step2)  
kintone.api()でのパスの指定方法はこちらの記事が参考になるかと思います。  
[https://developer.cybozu.io/hc/ja/articles/202166310](https://developer.cybozu.io/hc/ja/articles/202166310)

recordsのパスを修正してもうまくいかない場合は、フィールドコードを見直してみてください。  
商品マスタの商品番号のフィールドコード＝ID  
受注管理アプリの商品番号のフィールドコード＝ID  
受注管理アプリの受注日のフィールドコード＝受注日  
受注管理アプリの個数のフィールドコード＝個数  
受注管理アプリの個数を含むテーブルのフィールドコード＝Table

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1813](https://avatars.discourse-cdn.com/v4/letter/l/e495f1/32.png) [@Legacy\_Account1813](https://community.cybozu.dev/u/Legacy_Account1813)\
**Post date:** [2017 年 10 月 4 日午前 12:19 UTC](https://community.cybozu.dev/t/topic/551/6 "2017-10-04T00:19:43Z")

</div>

江田様

&nbsp;

いつもお世話になっております。

&nbsp;

"record-gaia"についてご教示いただきありがとうございます。

大変勉強になりました。

&nbsp;

recordsのパスを修正し、デバックしたところ以下のエラーメッセージが表示されます。

```
code:"CB_VA01"

errors:{query: {messages: ["クエリ記法が間違っています。"]}}

message:"入力内容が正しくありません。"

```

&nbsp;

クエリの指定はご教示いただいたとおり記入しております。

なお、フィールドコードが正しいことは確認済みです。

```
query: "ID in (" + event.record.ID.value + ")"

```

&nbsp;

よろしくお願い申し上げます。

---

<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:** [2017 年 10 月 5 日午前 7:46 UTC](https://community.cybozu.dev/t/topic/551/7 "2017-10-05T07:46:02Z")

</div>

たいやき様  
お世話になっております。

IDフィールドは、両アプリとも数値型となっていますでしょうか?  
もし、文字列型であれば  
query: ‘ID in ("’ + event.record.ID.value + ‘")’,  
とする必要があります。

もしそれも違うようでしたら、一度records.jsonに送っているリクエストを確認して頂いてもよろしいでしょうか。  
IEやchrome等のブラウザの開発者ツールのネットワークタブから確認できます。  
確認出来たらそのURLを拝見させてください。  
期待している通りに送れていれば、このような形になっていると思います。  
https://\*\*\*\*\*.cybozu.com/k/v1/records.json?app=18&query=ID%20in%20(1)
