一覧の絞り込み機能の条件

何を実現したいのかを書きましょう

「レコード一覧」一覧の絞り込み機能の条件(filterCond)を設定するために、一覧の設定を変更する - cybozu developer network
を参考にコードを書きました。

発生した問題やエラーメッセージを具体的に書きましょう

カスタマイズビューの「一覧1」についてはほとんどのユーザーにカスタマイズの権限がないため、エラーとして"CB_NO02""権限がありません。"が表示されています。権限のあるユーザーではこのエラーは表示されません。
変更したいのは「レコード一覧」のみなので、「レコード一覧」のみの一覧の設定変更を行いたいです。
どの部分を直せばいいかご教授お願い致します。

実行したコードをコピー&ペーストしましょう

(function() {
  'use strict';
  kintone.events.on('app.record.index.show', function(event) {
      // 現在の日付を取得
      const today = new Date();
      // 年を取得
      const year = today.getFullYear();
      // 月を取得
      const month = today.getMonth() + 1;
      // 年度を取得
      const fiscalYear = month >= 4 ? year : year - 1;
      
      const body = {
        	app: kintone.app.getId(),
        	lang: 'ja',
      	  views:{ 
      		レコード一覧:{ 
      			index:"0",
      			filterCond:'申請日 >= "' +fiscalYear+ '-04-01" and 申請日 <= "'+ (fiscalYear+1)+'-03-31"',
      			name:"レコード一覧",
      			type:"LIST"
      		},
        		一覧1:{ 
      			index:"1",
      			type:"CUSTOM"
      		},
      		'(作業者が自分)':{
      			index:"2",
      			type: "LIST"
      		}
      	}
      };
      
		return kintone.api(kintone.api.url('/k/v1/preview/app/views.json', true), 'PUT', body).then((resp) => {
			// PUT成功
			return event;
		}).catch((error) => {
			// PUTエラー
			console.log(error);
			event.error = 'エラーが発生しました。';
			return event;
		});
	});
})();

認識ずれたら申し訳ありません。

一覧の設定を変更する API はドキュメントの記載通り、実行権限が アプリ管理者もしくは kintone システム管理権限です。

ユーザー毎に一覧を変えるのではなければ、そのAPIを使うメリットがない気がします。
また、一覧を開くたびに、APIを叩くので、システムに余計な負荷をかかってしまうデメリットもあります。

貼っていただいたコードからすると、ようは一年の4月を超えているかどうか判断したいと思われますので、次のやり方はいかがでしょうか?

  1. フォームに日付フィールドA、Bの2つを追加
  2. JSで日付フィールドAに`fiscalYear+ '-04-01" を設定
  3. JSで日付フィールドBに(fiscalYear+1)+'-03-31を設定
  4. 一覧の設定で 申請日 >= 日付フィールドA and 申請日 <= 日付フィールドBを指定する。

ご指摘ありがとうございます。

クエリを利用するとユーザーに絞り込みが行われていることがわかりにくいので、
一覧の設定を利用して一年の四月から3月までを表示していることを示したいと考えていました。

教えていただいたやり方ですと、
一覧を表示したときAPIを叩いて日付フィールドAと日付フィールドBを一括で更新し、
計算フィールドで(申請日-日付フィールドA)と(申請日-日付フィールドB)を計算させ、
一覧の設定で指定する、ということになるのでしょうか。

提示したコードをもとに一覧の設定を権限のないユーザーが変更するというのは難しそうですね。
教えていただいた方針をもとに設定を検討しなおしてみます。

おっしゃる通り、日付フィールドAと日付フィールドBのデータを常に最新にする仕組みを作らないといけないです:sweat_drops:
自分が考えたのは(試していない):

  • 計算フィールドを使わず、一覧画面を表示したときに、レコード更新APIを使って、日付フィールドAと日付フィールドBに対してfiscalYear+ ‘-04-01’/'-03-31’をセットする(JSを使う)
  • kintone の一覧設定画面で条件を 申請日 >= 日付フィールドA and 申請日 <= 日付フィールドB を指定する(JSは使わない)
    という仕組みです。

このやり方だと、レコード更新APIだけ使うので、編集権限を持っているユーザーであれば誰も実行できます。
ただ、一覧を表示するたびにAPIが実行されてしまうことを避けられません。
レコード数が多い場合は、システムにかなり負荷をかかってしまいます。

また、実際試してみていないですが、上記より次の方法が良さそうに思いました。

① カスタマイズビューを使います。
JSでカスタマイズビューに表示するレコードを絞り込みます。
カスタマイズについて、次の記事は参考になるかと思います。
カスタマイズビューを利用してみよう

② 一覧画面に「更新ボタン」を置いて、ボタンをクリックしたら、一覧のクエリを変えます。
詳細は、 URL 内のクエリで、表示するレコードの条件を指定するご参考ください。

丁寧に教えてくださってありがとうございます。

URLを使用した絞り込みが理想と一番近いのかと思われます。
参考にして修正させていただきます。