実現したいこと・エラー内容
kintoneRESTAPIClientのupsertRecordメソッドを利用して
テーブル内に配置した「数値フィールド」を更新する際の挙動で
更新用のレコードオブジェクトで、テーブル内の数値フィールドに該当する箇所に
「文字列」ではなく「数値」を設定するとAPIがエラー(不正なJSON文字列)となります。
この現象が発生するのは該当のアプリのみで、別アプリで簡易的にテーブル内に数値フィールドを作成して、同様のテストを実施した場合には「文字列」「数値」のどちらを設定してもAPIは正常に動作してレコードを更新できます。
自身の理解が乏しいのかもしれませんが
cybozuDeveloperNetworkを拝見するかぎり
そもそも「数値フィールドには文字列を設定する」のが正しいとの記載が見つけられず質問させていただきました。
数値でも動作する、もしくは動作してしまうだけであって、動作保証の範囲外?なのでしょうか?
もちろん文字列に変換してからレコード更新用オブジェクトを作成してAPI実行すれば所望の動作はするので、アプリの作成に関しては問題ないのですが
なぜこのような動作になるのかという疑問を今後のために解決しておきたく考えております。
kintone,javascriptは共に初学者ですので
諸先輩方のアドバイスをいただけると幸いです。
エラー情報 (開発者ツールのコンソール)
>> Uncaught Error KintoneRestAPIError: [400] [CB_IJ01] 不正なJSON文字列です。
利用したソースコード
const APIClient = new KintoneRestAPIClient();
for (const _ of summaryOfResults) {
const recordsForBillingManagement = {
'本部コード': {value: _.client.code},
'本部名': {value: _.client.name},
'請求方法': {value: _.method},
'締日': {value: _.date.closing},
'請求対象年月': {value: _.billingPeriod},
'請求対象期間開始': {value: _.date.start},
'請求対象期間終了': {value: _.date.end},
'支払期限': {value: _.date.paymentDeadline},
'請求金額合計': {value: _.totalAmount.sum},
'売上8': {value: _.totalAmount.taxRate8.sales},
'消費税8': {value: _.totalAmount.taxRate8.tax},
'売上10': {value: _.totalAmount.taxRate10.sales},
'消費税10': {value: _.totalAmount.taxRate10.tax},
'売上非課税': {value: _.totalAmount.taxRate0.sales},
'請求金額_tb1': {value: [
{
value: {
'店舗コード_tb1': String(statement.storeCode),
'店舗名_tb1': String(statement.storeName),
'売上8_tb1': String(statement.sales8),
'売上10_tb1': String(statement.sales10),
'売上0_tb1': String(statement.sales0),
// '小計_tb1': String(statement.subtotal), // 文字列ならAPIが正常に動作
'小計_tb1': 100, // 数値を設定時はアプリによりOKの場合とNGの場合がある
}
};
}
]}
};
const resp = await APIClient.record.upsertRecord({
app: prime.app.billing_management.id,
updateKey: {
field: '請求書番号',
value: _.billingNumber
},
record: recordsForBillingManagement
});
console.log('resp', resp);
}