新規投稿
フォローする

テーブル時のデータ更新

詳細画面を開いているときにボタンを画面上部に設置し、
そのボタンを押した後、画面内のテーブルの値を計算して他のテーブルに入力という
操作をやろうと思っております。

(簡略化すると以下のテーブルの
id1と2のmoneyを足して3のmoneyに、id4~6
のmoneyを足して7に入れたいと思っております。)

No money type
0 100

1 200

2

3 300
4 400
5 500
6

集計の計算をしたのち、以下のURLをもとに
https://cybozudev.zendesk.com/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-

https://cybozudev.zendesk.com/hc/ja/articles/200752984-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%93%8D%E4%BD%9C%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF

以下のようなプログラムを用いて計算をしようと思っているのですが、
400エラー(不正なJSON文字列です。)というエラーがでてしまいます。

//更新オブジェクト
var putObj= {
"app": kintone.app.getId(),
"id": kintone.app.record.getId(),
"record": {
"Tableのフィールドコード": {
"value": [2:{"value":{"フィールドコード":{"value":値}}},
6:{"value":{"フィールドコード":{"value":値}}}
]
}
}
};

var authInfo =btoa( ユーザー名 +':'+ パスワード );

var locParam = kintone.api.url("/k/v1/records");

//リクエスト送信
var xhr = new XMLHttpRequest();
xhr.open("PUT", locParam, false);
xhr.setRequestHeader("X-Cybozu-Authorization" , authInfo);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(putObj);

どなたか解決策がわかるかたいらっしゃいませんでしょうか。
ご教授いただければ幸いです。

0

7件のコメント

Avatar
落合 雄一

松本賀生様
cstapの落合です。

JavaScriptからREST APiを利用する場合は、XMLHttpRequestではなくkintone.apiを利用してください。
https://cybozudev.zendesk.com/hc/ja/articles/202166310#step1

kintone.apiでやってみて、まだうまくいかない場合はまたご質問ください!

0
Avatar
松本賀生

cstap
落合さま

大変迅速なご回答ありがとうございます。
こちらで早速再度試してみます!

0
Avatar
Ryu Yamashita

エラーメッセージに関連するところで、2つ気になる点があります。

・JSONがレコード更新(1件)形式っぽいですが、リクエストURIはレコード一括更新(複数)と不整合になっているようです。
・テーブルのJSON記載方法で2や6というものが登場していますが、このような記載方法はなかったかと思います(JSONの文法としても、2や6をキーとして扱うには「2:{}」を更にブレイスで括る必要があるかと考えられます。恐らくJSONパーサにかけるとエラーになるのではないかと思います)。行IDを意図されたものであれば、記載方法を参考にされているリンクで再度確認頂くのが良いと思います。

また、落合さんからのご指摘にありますように、kintone.api()は公式に準備されている関数ですので、極力これを利用頂くのが良いと思います。色々と面倒も減ります。

https://cybozudev.zendesk.com/hc/ja/articles/201850320

XMLHttpRequest(同期リクエスト等)の利用がマストであれば、やむなしですが、まずCSRFトークンの追記が必要という点にも注意が必要になってきます。

https://cybozudev.zendesk.com/hc/ja/articles/201732180

更に、XMLHttpRequestでのJSONによるPOSTはオブジェクトではなく、文字列だったかと思います(kintone.api()はオブジェクトです)。

最後に、動作そのものの話ではありませんが、X-Cybozu-Authorizationによる認証はJSへの書き込みにより露わになりますので、お勧め出来ません(kintone.api()であればこれも気にしなくて済みます)。

0
Avatar
松本賀生

Ryu Yamashitaさま

ユーザー権限のときに引き続き
詳しいアドバイスありがとうございます!

・JSONがレコード更新(1件)形式っぽいですが、リクエストURIは
レコード一括更新(複数)と不整合になっているようです。

その部分をチェックしておりませんでした・・・・(汗)
アドバイスありがとうございます。

・テーブルのJSON記載方法で2や6というものが登場していますが、このような>記載方法はなかったかと思います(JSONの文法としても、2や6をキーとして
扱うには「2:{}」を更にブレイスで括る必要があるかと考えられます。恐らく>JSONパーサにかけるとエラーになるのではないかと思います)。行IDを意図
されたものであれば、記載方法を参考にされているリンクで再度確認頂くの
が良いと思います。

すいません。こちら書き方が不完全でした・・・
もう一度しっかりチェックし修正しておきます。

また、落合さんからのご指摘にありますように、kintone.api()は公式に準備
されている関数ですので、極力これを利用頂くのが良いと思います。色々と面
倒も減ります。

こちらリスクをしらず
XMLHttpRequestをガリガリつかって書いておりました。

リンクの情報も大変参考になります。
本当にいろいろありがとうございます。

他に相談できる方がいないので助かります!

こちら修正しまして無事稼働しましたらご連絡させていただきます。

0
Avatar
松本賀生

落合さま
Ryu Yamashitaさま

お世話になります。
先日質問させていただいた松本です。

おふたりがおっしゃる通り、kintone.apiにて
リファレンス通りにテーブルレコードを挿入したら
無事レコードが入りました。

暗闇の中を模索しているような感じでしたので
大変助かりました。

本当にありがとうございます。

0
Avatar
落合 雄一

松本賀生様
解決されたようで良かったです!
また、なにかありましたらご質問ください!

0
Avatar
Ryu Yamashita

松本さん、解決されたようで何よりです(^^)

0
サインインしてコメントを残してください。