一覧画面に設置した更新ボタンを押したときに、関連レコードの件数を更新したい

お世話になります。

関連レコードの件数の取得の書き方が分からず、教えていただきたいです。

 

レコードの一括更新

こちらの記事を参考に、一覧画面に一括更新ボタンを設置しています。

 

関連レコードは、「別アプリの項目A」と「関連レコード一覧が設置されているアプリの項目B」が一致した場合表示されるようになっています。

上記条件で件数を取得し、一括更新ボタンを押した際に一覧画面で反映されるようにするには、どのような書き方をすれば良いでしょうか。

kintone.events.on('app.record.index.show', function(event){
  if(document.getElementById('updateButton') !== null) return;
    varbutton = document.createElement('button');
    button.innerHTML = '一括更新';
    button.id = 'updateButton';
    kintone.app.getHeaderMenuSpaceElement().appendChild(button);

  button.addEventListener('click', function(){
    Promise.all([
    getRecords(kintone.app.getId()),
    RelatedRecordsFieldManager.prototype.getFieldProperties()
    ]).then(function(responses){
      returnPromise.all(responses[0].map(function(selfRecord){
        return (newRelatedRecordsFieldManager('関連レコードのフィールドコード')).getRecords(selfRecord).then(function(relatedRecords){
      return {
        id:selfRecord.レコード番号.value,
        record: {

**          件数のフィールドコード: {**
**                       〜ここの書き方が不明〜**
**          }**  

        }
      };
    });
  }));

  }).then(function(records){
    putRecords(kintone.app.getId(), records).then(function(){
      alert('更新しました。');
      location.reload();
    });
  });
});

returnevent;
});

よろしくお願いいたします。

sasaさん

お世話になっております。

Array.lengthで取得できる配列の要素数を利用すればよいかと思います。

件数のフィールドコード: {
value: relatedRecords.length
}

江田篤史様

 

お世話になっております。

コメントありがとうございます。

 

上記で試してみたのですが、ReferenceErrorがでてしまいまして

 

この場合は何かが定義されていないということになりますでしょうか?

 

エラー文を検索して、括弧で囲っていない初歩的なミスがないか、idのようにrelatedRecords.lengthの間にアプリの項目名を追加して試したり等したのですが、エラーは変わりませんでした。

 

わからないことだらけで恐縮ですが、どこが間違っているかご指摘・ご教示いただけると幸いです。

よろしくお願い致します。

sasaさん

下記記事を参考にRelatedRecordsFieldManager.jsを作成して、上でご提示いただいたJSファイルより先に読み込まれるように、kintoneに設定してください。

https://developer.cybozu.io/hc/ja/community/posts/360017851006

江田篤史様

 

お世話になっております。

参考記事ありがとうございます。

 

RelatedRecordsFieldManager.jsを先に読み込まれるように設定したのですが、エラーになってしまいました。

ローカルからファイルを持ってきたら読み込まれない不具合があるとの情報を見つけたので、プラグインで直接入力も試してみたのですが変わりませんでした。

 

ブラウザがChromeだと上記のエラーが出る事が多いとの記事を見つけてFirefoxでも試したのですが変わらずエラーになってしまい、以下のような表示でした。

 

一括更新ボタン以外の件数取得の方法を試したとき、detail.showなら取得はでき、index.showだと必ずエラーになっていたので

detailなら取得はできるけれどindexではできない、またはレコード数が多すぎて処理ができないなど

なにか原因があるのでしょうか?

 

質問ばかりで申し訳ないです。

ここ数ヶ月色々試しているのですが、糸口が見つからずお力添えいただきたいです。

 

よろしくお願いいたします。

sasaさん

お世話になっております。

恐らく、表示するレコードの条件のこのアプリのフィールドに指定しているフィールドに、不正な文字(垂直タブ)を含んだレコードが存在することが要因かと思います。

載せて頂いたエラーのクエリ部分をURLデコードすると、下記のようになります。

%E9%A1%A7%E5%AE%A2%E8%A3%BD%E7%95%AA%3D%22547787%0B%22%20order%20by%20%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E7%95%AA%E5%8F%B7%20desc%20limit%20500%20offset%200

↓デコード

顧客製番="547787 " order by レコード番号 desc limit 500 offset 0

顧客製番の値のあとにスペースのようなものが入っているのがわかるかと思います。
(%0Bなので、正確には垂直タブです。http://www.w3bai.com/ja/tags/ref_urlencode.html)

該当するレコードを開いてみて、末尾に余計な文字が入っていないかご確認いただけますか?
関連レコード一覧フィールドを設置しているアプリのレコードに問題があるかと思います。

江田篤史様

 

お世話になっております。

URLデコードというものがあるんですね!

初めて知りました、、、ありがとうございます。

 

該当のレコードは江田様がおっしゃるとおり、末尾に半角スペースが入っていたので編集しましたm(_ _)m

他のエラーもいくつかURLデコードしてみたのですが、他のものは顧客製番部分に余計な文字は入っていませんでした。

その場合他に考えられるエラーはありますでしょうか?

顧客製番は数字の羅列だけでなくアルファベットも含むものが使われており、それがクエリの記法に引っかかってしまっている可能性もあるのでしょうか・・・

 

どうぞよろしくお願いいたします。

sasaさん

ご提示頂いたFirefoxでのエラー3件には、%0Bが入っていますね。
エラーが出ているレコードについては、該当するフィールドの値を一度削除して、再入力してみてもらえますか?

それでもだめな場合は、再びエラーメッセージを見せて頂けますか?

江田篤史様

 

お世話になっております。

 

必死にChromeに出ている方もデコードやってしまっておりました・・・(汗)

Firefoxの方修正しまして、思っていた実装ができました!!

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

 

これからもっと勉強して、自分で色々実装できるよう精進してまいります。

ありがとうございました!!