お世話になっております。
アプリAの一覧画面表示時に、アプリBに登録されている合計金額を取得して書き込みたい(PUTイベント)です。
アプリAとアプリBには物件コードがあり、
物件コードで紐づけてアプリAのフィールド「合計金額」にアプリBの「合計金額」を追加したいです。
詳細画面表示やレコード追加画面表示は基本的にしない想定のため、一覧画面で必ず取得しなければなりません。
また、アプリBにJSやプラグインでの変更はかけないという前提です。
下記コードでAPIを取得しようとしたのですが、上手くいきません。
Failed to load resource: the server responded with a status of 400 (Bad Request)というエラーコードが出ます。
間違っている部分の指摘およびサンプルコードのご教示をぜひいただきたいです。
(() => {
'use strict';
kintone.events.on(['app.record.index.show'], async event => {
const record = event.record;
try {
const params = {
app: 580, // アプリID
query: 'limit 500', // クエリ
fields: ['物件コード', '承認時金額計'] // 取得フィールド
};
const resp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', params);
for (let i = 0; i < resp.records.length; i++) {
if (params != null) {
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', params, function (resp) {
if (window.name !== 'null') {
window.name = 'null';
} else {
window.name = '';
}
return event;
}, function (resp) {
// エラーの場合はメッセージを表示する
let errmsg = 'レコード更新時にエラーが発生しました。';
// レスポンスにエラーメッセージが含まれる場合はメッセージを表示する
if (resp.message !== undefined) {
errmsg += resp.message;
}
alert(errmsg);
})
}
}
} catch (e) {
console.log(e);
}
return event;
});
})()
kintone.api(kintone.api.url('/k/v1/record',true),'PUT', params,function (resp) {
更新しようとしているデータ(params)がデータをGETするときの内容のままだからエラーになっているように思います。
受け取ったデータから更新用のデータを組み立てて、PUTする必要があります。
harada様
ご回答ありがとうございます。受け取ったデータはそのまま渡せないのですね。加工が必要とのことでしょうか?
更新用のデータを組み立てるとのことですが、恐れ入りますがサンプルコードをご教示いただけることは可能でしょうか?
参考URLです
レコードの更新(PUT) – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/201941784-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B4%E6%96%B0-PUT-
このコードはお手本にしたサイトはありますか?
前提条件として、気になる部分があり、その記載をみたいです。
アプリBから最大で500件しかデータをとってこれないようにしているですが、それでよいのでしょうか?
それとも勉強用途で今は関係ないことでしょうか?
hrada様
ご教示ありがとうございます。いただいた記事を読んだのですが、JavaScriptがほとんどわからない状態です。
1件のレコード更新を、forループで回していきたいのですが、
リクエストボディの構造(レコードIDを指定する)
という部分を参考にすればよろしいでしょうか?うまく理解できておらず、申し訳ございません。
また、下記のソースの実行前に↑の処理を実行する認識でよろしいでしょうか?
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', params, function (resp) {
なお、取得したBアプリの物件コードとAアプリの物件コードが一致したらレコードを更新する、というif文は加工する段階で入れることは可能でしょうか?
参考にしたURLは下記となります。
https://yourkinlife.com/kintone-customize-javascript-api-get/
こちらも参考にできるかと思いましたが、ソースが理解できずあまり参考にできておりません。
https://developer.cybozu.io/hc/ja/community/posts/4606786651673
件数には制限がかけられていると思っておりました。Bアプリから全件取ってきたいと考えておりますが、可能なのでしょうか?
現在の理解されていることから一気にゴールにたどり着くのは難しいと思います。
データ取得の部分は、問題ないとしましょう。
いったん、特定のレコードの特定の場所を更新するできることを目指しませんか?
物件コードは重複ないですね?
「ボディ(重複禁止のフィールドコードと値を指定する)」
を参照して、一覧の画面を開いた特定の物件コードをキーに更新したい場所を更新できるようしましょう。
それができたら、アプリBからのデータの中身から物件コードなどをアプリAの物件コードを紐付けて更新する手順にしませんか?
第10回 kintone REST APIを利用したレコード取得 – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/203727120
第11回 kintone REST APIを利用したレコード更新(ルックアップ自動更新) – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/204537310
のあたりを試してみていない場合は、先にされるとよいと思います。
harada様
承知いたしました。順番のご提示ありがとうございます。
物件コードは、Aアプリには複数件(4件)存在しております。
Bアプリには1件のみで、重複禁止です。
harada様
どちらも試しておりませんでしたので、こちらから先に試そうと思います。
一つkintoneの確認なのですが、ルックアップというのは一度レコード編集画面でデータを取得しなければ自動で取得はできないという考え方でよろしいでしょうか?
最初にルックアップで一覧画面を表示した際に、紐づいた物件コードで一括取得するという方法を試したいと思ったのですが、自分で調べた限りだとレコード追加画面、もしくは編集画面でルックアップ先を必ず指定して取得するという方法しかできないという認識です。
Aアプリではレコード追加/編集は不可とし、一覧画面での表示のみ可という制御をかけないといけないため、ルックアップで参照先を指定しなければいけない場合なら使えない…と思いあきらめておりました。
harada 様
遅くなり申し訳ございません。
改めてしっかり記事を読み、試行錯誤を続けました。おかげさまで、すべての制御の実装ができました。
ありがとうございます!また機会がございましたら、ご教示をお願いいたします。
system
(system)
クローズされました:
12
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。