通信カードリストから「貸出票」ボタン(アクション)をクリックして、貸出票アプリに必要事項を入力⇒保存すると、通信カードリストの元レコードのステータスが「貸出中」になるようにしたいです。
以下のようなjsを貸出票アプリに実装したところ、エラーは表示されないのですが、アクション元レコードのステータスは変わりません。
ブレークポイントを追加して、「検証」画面をいじっていましたところ、添付のようなエラーが出ていました。
対応方法を教えていただけないでしょうか?
すぶの初心者です。よろしくお願いいたします。
(function () {
“use strict”;
//管理簿新規レコード作成「成功」時に実行
kintone.events.on(‘app.record.create.submit.success’,function(event) {
var record = event.record;
//通信カードリスト アプリID
var AppNo = 537;
//通信カードリストレコード番号(アクション実行時コピー)
var RecNo = record.CardRec_No.value;
//貸出/返却 ラジオボタン
var Radio = record.貸出返却.value;
var modbody = {
“app”: AppNo,
“id”: RecNo,
“record”:{
“lent_Status” : {
“value” : Radio
}
}
};
debugger;
//問い合わせ管理簿に更新
kintone.api(kintone.api.url(‘/k/v1/record’, true),‘PUT’, modbody, function(resp) {
// success
console.log(resp);
return event;
},function(error) {
// error
event.error = ‘貸出・返却更新エラー’;
return event;
});
});
})();
ステータスは、レコード更新APIでは変更できません。
レコードのステータスの更新 API を使ってください。
あと、イベント終了時に promise オブジェクト(event)を返すためには、「return kintone.api(~」とします。
rex0220様
早速のご回答ありがとうございます。
申し訳ありません!「ステータスというフィールド名の値を変更したい。」の間違いです。
プロセス管理機能は使っていません。
「アクション元のフィールドの値を変更したい」場合はいかがなりますでしょうか?
度々申し訳ございませんがよろしくお願いいたします。
エラーの内容がわかりませんが、現状では API の完了を待たずに画面遷移します。
API の終了後に画面遷移させるには、「return kintone.api(~」とします。
rex0220様
ありがとうございます。
>イベント終了時に promise オブジェクト(event)を返すためには、「return kintone.api(~」とします。
promiseについて調べたのですがよく理解できず、とりあえず
return kintone.api(kintone.api.url(‘/k/v1/record’, true),‘PUT’, modbody, function(resp) {
とだけ変えて試してみたのですが、結果は同じでした。
変更箇所が違ってますでしょうか?
何度もすみませんがよろしくお願いします。
「return kintone.api(kintone.api.url(‘/k/v1/record’, true),‘PUT’, modbody, function(resp) { 」については、OKです。
promise は、更新時に必要な基本的な仕組みですので、覚えておきましょう。
kintone.Promiseとは
ところで、肝心のエラーまたは動作はどのような現象でしょうか?
rex0220 様
たびたび恐れ入ります。
教えていただいたpromiseの記事、すごくわかりやすいです。ありがとうございます。
現象としては
検証のConsole画面を見ていると一瞬、赤文字で「PUT・・・・・・」と表示されるのですが読み取れません。
ブレークポイント(debugger)をreturn kintone.api(・・の後、(returnの前やfunctionの区切り等)にいれても処理が止まりません。
赤文字(エラー?)のところで止める方法がありますでしょうか?
すみません。よろしくお願いいたします。
現象としては、API の終了をまたずに イベント終了し、画面遷移していると思われます。
Chrome のデバッグツールでステップ実行してみてください。
動かない?そんな時はデバッグをしてみよう!入門編
あと、API のエラーなら下記のような確認もできます。
ブラウザのデベロッパーツールを使って、kintone REST APIのサンプルを簡単に実行してみる!
ステップ実行でもわからない場合は、再度現在のコードを全部載せてみてください。
単純なコードミス等でもなかなか気づかない時があります。
rex0220 様
ご丁寧にありがとうございます。
現在のコードを載せさせていただきます。
と、これを実行した時のステップ実行結果(これでよかったかでしょうか?)を添付いたします。
大変恐縮ですが、よろしくお願いいたします。
(function () {
“use strict”;
//管理簿新規レコード作成「成功」時に実行
kintone.events.on(‘app.record.create.submit.success’,function(event) {
var record = event.record;
//通信カードリスト アプリID
var AppNo = 537;
//通信カードリストレコード番号(アクション実行時コピー)
var RecNo = record.CardRec_No.value;
//貸出/返却 ラジオボタン
var Radio = record.貸出返却.value;
var modbody = {
“app”: AppNo,
“id”: RecNo,
“record”:{
“lent_Status” : {
“value” : Radio
}
}
};
//debugger;
//問い合わせ管理簿に更新
debugger;
return kintone.api(kintone.api.url(‘/k/v1/record’, true),‘PUT’, modbody, function(resp) {
// success
console.log(resp);
// debugger;
return event;
},function(error) {
// error
event.error = ‘貸出・返却更新エラー’;
return event;
});
});
})();
アプリを作って試したところ、問題なくレコード更新はできました。
ただし、API 後のステップ実行は出来ませんね。
エラーが出ているとすると、フィールドコードの間違いなどかもしれません。
いつもは下記のようなコードで書いていますが、こちらはステップ実行もできます。
こちらで試してみてください。
(function () {
"use strict";
//管理簿新規レコード作成「成功」時に実行
kintone.events.on('app.record.create.submit.success', function (event) {
var record = event.record;
//通信カードリスト アプリID
var AppNo = 537;
//通信カードリストレコード番号(アクション実行時コピー)
var RecNo = record.CardRec_No.value;
//貸出/返却 ラジオボタン
var Radio = record.貸出返却.value;
var modbody = {
"app": AppNo,
"id": RecNo,
"record": {
"lent_Status": {
"value": Radio
}
}
};
//debugger;
//問い合わせ管理簿に更新
// debugger;
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', modbody).then(function (resp) {
// success
console.log(resp);
// debugger;
return event;
}).catch(function (error) {
// error
event.error = '貸出・返却更新エラー';
return event;
});
});
})();
rex0220様
ご面倒おかけして大変恐縮です。
コードありがとうございました。
自分のjsを削除しまして
いただきましたコードで動かしましたが結果は変わらずでした。
ステップ実行も前回と同じ動きでした。
ただ、目を凝らして何度も試したのですが、赤文字のエラーらしきものは出て来なくなりました。
フィールドコードを確認しながらもう一度やりたい事を書き出してみました↓
【アプリ名】
①【通信カードリスト】一覧で、空いているカード(返却(貸出可))を選択
②【通信カードリスト】①詳細画面で、アクションボタン「貸出票に記入」をクリック(lent_Status(ラジオボタン)はデフォルト返却(貸出可))
②【貸出票】名前、利用場所、返却予定日を入力、(貸出返却(ラジオボタン)デフォルト:貸出中)⇒レコード保存
③【通信カードリスト】lent_Status(ラジオボタン)⇒貸出中に変わる(自動)
そもそも考え方が違っている・・何て事がありますでしょうか?
ご面倒をおかけしてすみません。
貸出中のチェックを入れないと一度に複数に貸出されるかもしれませんが、
処理的には問題なさそうですね。
ブラウザーは、何を使われていますか?
rex0220様
ご確認、ありがとうございます。
ブラウザは
Google Chrome
バージョン: 78.0.3904.108(Official Build) (64 ビット)
です。
貸出票アプリの詳細画面のデバッグツールでコンソールを開いて、下記をコピペして実行してみてください。
何らかのエラーがあれば、わかると思います。
var record = kintone.app.record.get().record;
var AppNo = 537;
var RecNo = record.CardRec_No.value;
var Radio = record.貸出返却.value;
var modbody = {
"app": AppNo,
"id": RecNo,
"record": {
"lent_Status": {
"value": Radio
}
}
};
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', modbody);
rex0220様
ご教授どおり、詳細画面のデバッグツールのコンソールで、やってみました。
出ました。。
危うく椅子ごとひっくり返りそうになりました。。
管理者のアクセス権を編集可としましたら動きました。赤面の至です。
確認不足で大変申し訳ございませんでした。
しかしながら、今日一日で、デバッグのやり方からプロミスについて、本当に大変勉強になりました。
あと、「とんだところに伏兵が潜んでいる」事も痛感しました。
本当にありがとうございました。
追伸:
この後、返却時の処理を、app.record.edit.submit.successを加えてやってみます!
もしも、失敗して、デバッグしても、どうしても解決できなければまたご相談させていただけますでしょうか?
もうデバッグのやり方もマスターされたようですので、大丈夫でしょう!
rex0220様
ありがとうございます。
今、怖かったのでjsを分けてやってみましたところ、返却時もアクション元を「返却済み」に更新することができました!
1つのjsでまとめてできないか、挑戦してみます。
あと、プロミスのサンプルサイトからダウンロードしたアプリ達ももう少し触ってみます!
絶望の底でカスタマイズを諦めかけていた昨日の今頃の自分に教えてあげたいです。
本当にたくさん教えていただき感謝の言葉が他にみつかりません。
ありがとうございました。
あとエラー処理ですが、submit.success イベントの場合、event.error をセットしても意味がありません。
※レコード更新自体は完了しているため。
エラーをユーザーに表示する場合は、Alert や ダイアログで表示してください。
}).catch(function (error) {
// error
// event.error = '貸出・返却更新エラー';
alert('貸出・返却更新エラー:' + error.message);
return event;
});