inobe
(inobe)
1
kintone初心者です。
下記、実現する方法がありましたらご教授いただければ幸いです。
クエリの書き方をdeveloperで調べながら書きましたが
理解できていないので、どこが間違っているかの判断ができません。
実現したい事
同じ管理番号のレコードを比較して、詳細画面で開いているレコードよりも
新しい(レコード番号が大きい)レコードがある場合。
”このレコードは最新ではありません”
のメッセージをレコード詳細画面の上部に表示させたい。
発生した問題やエラーメッセージを具体的に書きましょう
console.logでbody設定まではコンソールに表示されますが
それ以降のconsole.logが表示されないので
const resp = kintone.api(kintone.api.url(‘/k/v1/records.json’,true),‘GET’,body);
がうまく動いていない気がします。
bodyのqueryの条件の書き方も、合っていないかもしれませんが
正解がわかりません。
実行したコードをコピー&ペーストしましょう
(() => {
‘use strict’;
kintone.events.on(‘app.record.detail.show’, (event) => {
const record = event.record;
const mymanageNo = record[‘管理番号’].value;
const myRecordId = kintone.app.record.getId();
let oldflg = 0;
console.log(record);
console.log(‘mymanageNo’+mymanageNo);
console.log(‘myRecordId’+myRecordId);
//管理番号が同じレコードの中でレコード番号が1番大きいデータを取得
const body = {
app:event.appId,
fields:['管理番号','$id'],
query:'管理番号=mymanageNo order by $id desc limit 1'
};
console.log('body設定');
//詳細画面のレコードよりレコード番号が大きいデータがあるか無いか判断
try{
const resp = kintone.api(kintone.api.url('/k/v1/records.json',true),'GET',body);
debugger;
const respId = resp.records[0].$id.value;
console.log('respId'+respId);
debugger;
console.log('myRecordId'+myRecordId);
if(respId > myRecordId){ //大きいレコード番号がある場合は1
oldflg = 1;
}
if(respId <= myRecordId){
oldflg = 0; //大きいレコードが無い場合は0
}
}catch(e){
console.log(e.message);
}
//大きいレコードがある場合はエラーメッセージをだす。
switch(oldflg){
case 1:
const divElement = document.createElement('div');
divElement.textContent = 'このレコードは最新ではありません。同じ製造Noのデータがないかを確認してください。';
divElement.style.color = '#f6f6f6';
divElement.style.backgroundColor = '#e74c3c';
divElement.style.fontSize = '20px';
divElement.style.fontWeight = 'bold';
const element = kintone.app.record.getHeaderMenuSpaceElement(); //上部側要素を取得
element.appendChild(divElement); //作成した要素を取得した要素に追加
break;
default:
break;
}
return event;
});
})();
mura
2
2点気づきました
-
クエリの書き方
query:'管理番号=mymanageNo order by $id desc limit 1'
これですが、文字列としてクエリを書いてしまっていて、mymanageNoを変数として利用できていません。
このように書く必要があります。
query:'管理番号=' + mymanageNo + 'order by $id desc limit 1'
他の行にありますが、console.log(‘mymanageNo’+mymanageNo);
みたいなイメージですね。
-
API呼び出し部分
const resp = kintone.api(kintone.api.url('/k/v1/records.json',true),'GET',body);
この書き方ですとapiからの応答を待つ前に先に処理がいってしまいます。
ここでは理屈とかは省きますが、async/awaitをつけると想定通り動くようになるかとおもいますのでためしてみてください。
/ja/kintone/tips/development/customize/development-know-how/javascript-customize-middle-async-await/
具体例のasync/awaitを使った書き方をみてみてください。
他にも問題があるかもしれませんが、上記は修正する必要がありそうです!
「いいね!」 1
inobe
(inobe)
3
mura様
アドバイスありがとうございます。
教えていただいた通りクエリの表記と
async/awaitを追加すると
思い通りの動きになりました。
async/awaitに関しては
わかりやすいリンクを貼ってい頂いたので
それを見ながら同じような位置に追加しただけで、
理屈はまだよくわかっていないので
async/awaitについて、調べて勉強しようと思います。
ありがとうございました。
以下変更した内容です。
(() => {
‘use strict’;
kintone.events.on(‘app.record.detail.show’, async(event) => {
const record = event.record;
const mymanageNo = record[‘管理番号’].value;
const myRecordId = kintone.app.record.getId();
let oldflg = 0;
console.log(record);
console.log(‘mymanageNo’+mymanageNo);
console.log(‘myRecordId’+myRecordId);
//管理番号が同じレコードの中でレコード番号が1番大きいデータを取得
const body = {
app:event.appId,
fields:['管理番号','$id'],
query:'管理番号='+mymanageNo+' order by $id desc limit 1'
};
console.log('body設定');
//詳細画面のレコードよりレコード番号が大きいデータがあるか無いか判断
try{
const resp = await kintone.api(kintone.api.url('/k/v1/records.json',true),'GET',body);
const respId = resp.records[0].$id.value;
console.log('respId'+respId);
console.log('myRecordId'+myRecordId);
if(respId > myRecordId){ //大きいレコード番号がある場合は1
oldflg = 1;
}
if(respId <= myRecordId){
oldflg = 0; //大きいレコードが無い場合は0
}
}catch(e){
console.log(e.message);
}
//大きいレコードがある場合はエラーメッセージをだす。
switch(oldflg){
case 1:
const divElement = document.createElement('div');
divElement.textContent = 'このレコードは最新ではありません。同じ製造Noのデータがないかを確認してください。';
divElement.style.color = '#f6f6f6';
divElement.style.backgroundColor = '#e74c3c';
divElement.style.fontSize = '20px';
divElement.style.fontWeight = 'bold';
const element = kintone.app.record.getHeaderMenuSpaceElement(); //上部側要素を取得
element.appendChild(divElement); //作成した要素を取得した要素に追加
break;
default:
break;
}
return event;
});
})();
「いいね!」 2
system
(system)
クローズされました:
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。