22-36
(ワタナベ)
1
何を実現したいのかを書きましょう
「レコード一覧」一覧の絞り込み機能の条件(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;
});
});
})();
akika
(qiuxiang)
2
認識ずれたら申し訳ありません。
一覧の設定を変更する API はドキュメントの記載通り、実行権限が アプリ管理者もしくは kintone システム管理権限です。
ユーザー毎に一覧を変えるのではなければ、そのAPIを使うメリットがない気がします。
また、一覧を開くたびに、APIを叩くので、システムに余計な負荷をかかってしまうデメリットもあります。
貼っていただいたコードからすると、ようは一年の4月を超えているかどうか判断したいと思われますので、次のやり方はいかがでしょうか?
- フォームに日付フィールドA、Bの2つを追加
- JSで日付フィールドAに`fiscalYear+ '-04-01" を設定
- JSで日付フィールドBに
(fiscalYear+1)+'-03-31
を設定
- 一覧の設定で
申請日 >= 日付フィールドA and 申請日 <= 日付フィールドB
を指定する。
22-36
(ワタナベ)
3
ご指摘ありがとうございます。
クエリを利用するとユーザーに絞り込みが行われていることがわかりにくいので、
一覧の設定を利用して一年の四月から3月までを表示していることを示したいと考えていました。
教えていただいたやり方ですと、
一覧を表示したときAPIを叩いて日付フィールドAと日付フィールドBを一括で更新し、
計算フィールドで(申請日-日付フィールドA)と(申請日-日付フィールドB)を計算させ、
一覧の設定で指定する、ということになるのでしょうか。
提示したコードをもとに一覧の設定を権限のないユーザーが変更するというのは難しそうですね。
教えていただいた方針をもとに設定を検討しなおしてみます。
akika
(qiuxiang)
4
おっしゃる通り、日付フィールドAと日付フィールドBのデータを常に最新にする仕組みを作らないといけないです
自分が考えたのは(試していない):
- 計算フィールドを使わず、一覧画面を表示したときに、レコード更新APIを使って、日付フィールドAと日付フィールドBに対してfiscalYear+ ‘-04-01’/'-03-31’をセットする(JSを使う)
- kintone の一覧設定画面で条件を
申請日 >= 日付フィールドA and 申請日 <= 日付フィールドB
を指定する(JSは使わない)
という仕組みです。
このやり方だと、レコード更新APIだけ使うので、編集権限を持っているユーザーであれば誰も実行できます。
ただ、一覧を表示するたびにAPIが実行されてしまうことを避けられません。
レコード数が多い場合は、システムにかなり負荷をかかってしまいます。
また、実際試してみていないですが、上記より次の方法が良さそうに思いました。
① カスタマイズビューを使います。
JSでカスタマイズビューに表示するレコードを絞り込みます。
カスタマイズについて、次の記事は参考になるかと思います。
カスタマイズビューを利用してみよう
② 一覧画面に「更新ボタン」を置いて、ボタンをクリックしたら、一覧のクエリを変えます。
詳細は、 URL 内のクエリで、表示するレコードの条件を指定するご参考ください。
22-36
(ワタナベ)
5
丁寧に教えてくださってありがとうございます。
URLを使用した絞り込みが理想と一番近いのかと思われます。
参考にして修正させていただきます。
system
(system)
クローズされました:
6
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。