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

アプリ1:商品マスタ
アプリ2:受注管理アプリ(アプリID:18)

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

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

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

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

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

 

(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’]);
}
);
})});

たいやき様

お世話になっております。
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;
});
})();

江田様

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

 

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

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

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

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

 

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

江田様

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

 

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

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

また、サンプルコードの"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;
});
})();

 

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

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

getElementByIdはJavaScriptに実装されているメソッドで、idを指定して要素を取得します。
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
kintone.api()でのパスの指定方法はこちらの記事が参考になるかと思います。
https://developer.cybozu.io/hc/ja/articles/202166310

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

江田様

 

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

 

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

大変勉強になりました。

 

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

code:"CB_VA01"

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

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

 

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

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

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

 

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

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

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)