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

**URL:** <https://community.cybozu.dev/t/topic/8804>\
**Category:** kintone 開発相談\
**Created:** [2024 年 3 月 12 日午前 4:14 UTC](https://community.cybozu.dev/t/topic/8804 "2024-03-12T04:14:06Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![22-36](https://avatars.discourse-cdn.com/v4/letter/2/a5b964/32.png) [@22-36](https://community.cybozu.dev/u/22-36)\
**Post date:** [2024 年 3 月 12 日午前 4:14 UTC](https://community.cybozu.dev/t/topic/8804/1 "2024-03-12T04:14:06Z")

</div>

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

「レコード一覧」一覧の絞り込み機能の条件（filterCond）を設定するために、[一覧の設定を変更する - cybozu developer network](https://cybozu.dev/ja/kintone/docs/rest-api/apps/view/update-views/)  
を参考にコードを書きました。

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

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

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

```javascript
(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;
		});
	});
})();

```

---

<div class="post-metadata">

**Author:** ![akika](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@akika](https://community.cybozu.dev/u/akika)\
**Post date:** [2024 年 3 月 13 日午前 7:45 UTC](https://community.cybozu.dev/t/topic/8804/2 "2024-03-13T07:45:00Z")

</div>

> [@22-36](#):
>
> 一覧の設定を変更する - cybozu developer network

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

[一覧の設定を変更する](https://cybozu.dev/ja/kintone/docs/rest-api/apps/view/update-views/?_gl=1*6q2igu*_ga*MTQ5ODk2OTIwMi4xNjY1NjQyMzY2*_ga_Z03HX98WC8*MTcxMDMxMjA0OC42MjkuMS4xNzEwMzE0MTgwLjUwLjAuMA..) 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`を指定する。

---

<div class="post-metadata">

**Author:** ![22-36](https://avatars.discourse-cdn.com/v4/letter/2/a5b964/32.png) [@22-36](https://community.cybozu.dev/u/22-36)\
**Post date:** [2024 年 3 月 13 日午前 8:27 UTC](https://community.cybozu.dev/t/topic/8804/3 "2024-03-13T08:27:52Z")

</div>

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

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

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

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

---

<div class="post-metadata">

**Author:** ![akika](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@akika](https://community.cybozu.dev/u/akika)\
**Post date:** [2024 年 3 月 14 日午前 3:00 UTC](https://community.cybozu.dev/t/topic/8804/4 "2024-03-14T03:00:52Z")

</div>

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

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

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

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

① カスタマイズビューを使います。  
JSでカスタマイズビューに表示するレコードを絞り込みます。  
カスタマイズについて、次の記事は参考になるかと思います。  
[カスタマイズビューを利用してみよう](https://cybozu.dev/ja/kintone/miscellaneous/hello-kinapi/customized-view/)

② 一覧画面に「更新ボタン」を置いて、ボタンをクリックしたら、一覧のクエリを変えます。  
詳細は、 [URL 内のクエリで、表示するレコードの条件を指定する](https://cybozu.dev/ja/kintone/docs/js-api/app/specify-record-list-via-query-string/)ご参考ください。

---

<div class="post-metadata">

**Author:** ![22-36](https://avatars.discourse-cdn.com/v4/letter/2/a5b964/32.png) [@22-36](https://community.cybozu.dev/u/22-36)\
**Post date:** [2024 年 3 月 14 日午前 4:15 UTC](https://community.cybozu.dev/t/topic/8804/5 "2024-03-14T04:15:30Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 5 月 31 日午前 5:23 UTC](https://community.cybozu.dev/t/topic/8804/6 "2024-05-31T05:23:45Z")

</div>

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