クエリで抽出したレコードの一括追加時のエラーについて

背景・実現したいこと

クエリで抽出したレコードの情報を、同じアプリにPOSTしたい。

アプリで請求書の管理を行っています。

 顧客によっては、毎月同じ内容の請求書を発行するので、

まとめてコピー(クエリで抽出してPOST)を行いたいと考えています。

以下の内容を参考に作成しました。

https://developer.cybozu.io/hc/ja/articles/360029152012

https://developer.cybozu.io/hc/ja/articles/204537310

エラー情報 (開発者ツールのコンソール)

 https://f4b6xw08xzs1.cybozu.com/k/v1/records.json 400 (Bad Request)

 {code: ‘CB_VA01’, id: ‘38MiimTA2tqpSN8CmxTE’, message: ‘入力内容が正しくありません。’, errors: {…}}

と表示されます。

利用したソースコード

(() => {
    'use strict';
    kintone.events.on('app.record.index.show', (event) => {
      if (document.getElementById('my_index_button') !== null) {
        return;
      }
      
      const myIndexButton = document.createElement('button');
      myIndexButton.id = 'my_index_button';
      myIndexButton.innerText = 'ポストのテスト';
  
      // ボタンクリック時の処理
      myIndexButton.onclick = () => {
        
            if (event.viewName !== '一覧テスト') {
                return;
            }

            const body = {
            'app': kintone.app.getId(),
            'fields': ['閲覧者', '閲覧日時', '主担当者','クライアント'],
            'query': 'コピーテスト in ("コピーテスト")',
            'size': 500
            };
            
            kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body).then((resp) => {
                // success
                return kintone.api(kintone.api.url('/k/v1/records.json', true), 'POST', resp.records);
            }).then((resp2) => {
                console.log(resp2.records);
                window.alert("登録が完了しました。");
                return event;
            }).catch((error) =>{
                console.log(error);
                return event;
            });
      };
      kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
    });
  })();

 

 

自分なりに調べてみましたが、解決方法がわからず、どなたかご教示いただけますと幸いです。

{code: 'CB_VA01', id: '38MiimTA2tqpSN8CmxTE', message: '入力内容が正しくありません。', errors: {…}}

このerrorsの中に詳細がくわしくのっているはずなので、載せていただけると回答つきやすいかもです。

(おそらくですが、取得したものをそのまま追加しようとするとレコード番号などもいれてしまうことになり、そのあたりではじかれてるかもしれません)

ご確認ありがとうございます。

詳細としては以下でございます。


  1. code: “CB_VA01”

  2. errors:

  3. app:

1. messages: Array(1)

  1. 0: "必須です。"
  2. length: 1
  3. [[Prototype]]: Array(0)
2. [[Prototype]]: Object
  1. records:
1. messages: Array(1)

  1. 0: "必須です。"
  2. length: 1
  3. [[Prototype]]: Array(0)
2. [[Prototype]]: Object
  1. [[Prototype]]: Object
  2. id: “38MiimTA2tqpSN8CmxTE”
  3. message: “入力内容が正しくありません。”

(おそらくですが、取得したものをそのまま追加しようとするとレコード番号などもいれてしまうことになり、そのあたりではじかれてるかもしれません)

仮説をいただきまして感謝です。

補足ですが、POSTしようとしている内容は、

以下のとおり指定した内容をGETして、

取得した値をPOSTするよう試みています。

const body = {  
            'app': kintone.app.getId(),  
            'fields': ['閲覧者', '閲覧日時', '主担当者','クライアント'],  
            'query': 'コピーテスト in ("コピーテスト")',  
            'size': 500  
            };

 

上記で参考になりますでしょうか・・・。

あーわかりました、エラー詳細ありがとうございます

よくよくみると、resp.recordsをそのままつっこんでますね
それでは必要なものがたりてなくて…

               returnkintone.api(kintone.api.url('/k/v1/records.json',true),'POST', resp.records);

リファレンスの通り、下記のようなパラメータを渡して上げる必要があります。

const postParams = {
app: アプリのID,
records: resp.records,
}

村濱一樹 さま

ご確認が遅れて大変申し訳ありません。

ご指摘を参考にコードを修正したところ、

難なくPOSTすることができました汗

const body = {
           'app': kintone.app.getId(),
           'fields': ['閲覧者','閲覧日時','主担当者','クライアント'],
           'query':'コピーテスト in ("コピーテスト")',
           'size':500
            };

てっきり上記の内容を取得することで、アプリIDもあわせてPOSTできると思っていました。

大変助かりました!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。