kintone利用中の者です。
クエリのミスと実行タイミングを絞りたいのですが方法が解りません。
どなたかアドバイスお願い致します。
弊社では一人一人にアカウントを振り分けることをせず、部ごとにアカウントを分けています。
そこで日報アプリにて自分の日報のレコードを最初から自分のレコードを表示させるように半自動で画面遷移のスクリプトを作ってみたのですが、まずレコードが表示されません。
その次に一度だけ社員番号を入力してもらうようにしたく、
一覧の一番上にあるものをあまり使わないものにしてそこから画面遷移をして、スクリプトの実行タイミングを一度だけにしようと試みましたがそちらもURLのqueryが変わるだけなのでうまくいきませんでした。
じぶんページなどのサービスの存在は既知ですが、日報だけ使う人とその他アプリも担当して使う人が混在するので利用サービスをkintoneのみに絞っています。
(function() {
"use strict";
kintone.events.on("app.record.index.show", function(event) {
var vID = **** ; //一覧で一番上のID
var records = event.records;
if(event.viewId == vID){
var number = prompt("社員番号を入力");
if(number){
var showRecord_qry = "?query" + "date = THIS_MONTH() and 社員番号 = " + number + " order by date desc limit 100 offset 0";
document.location = location.origin + location.pathname + encodeURI(showRecord_qry);
}
}
});
})();
K-OKZ さん
こんにちは。ひよこです。
showRecord_qry に入っているクエリが不完全で、queryの後には = が必要です。
var showRecord_qry = "?query **=**" + "date = THIS_MONTH() and 社員番号 = " + number + " order by date desc limit 100 offset 0";
あと、このままだと再表示したときのビューは prompt が表示されるビューのままです。
prompt が表示されないビューに遷移するよう ?view=XX で指定しないといけないです。
なのでこんな感じになると思います(変数名等変えています。すみません。)
(function() {
"use strict";
kintone.events.on("app.record.index.show", function(event) {
var promptViewId = XX; // prompt を表示させるビュー = vID
var listViewId = XXX; // 社員番号を入力した後に表示したいビュー
if (event.viewId !== promptViewId) {
return;
}
var number = window.prompt("社員番号を入力");
if (number) {
var showRecord_qry = "?view="+ listViewId + "&query=" + "date = THIS_MONTH() and 社員番号 = " + number + " order by date desc limit 100 offset 0";
document.location = location.origin + location.pathname + encodeURI(showRecord_qry);
}
});
})();
ひよこさん
ご教授ありがとうございました!
クエリが苦手なので一つ成長できました。
大変助かりました!!
できればモバイル用にも実装したいですが、うまくいきませんでした。
何か対策は有りますでしょうか?
K-OKZ さん
動作を確認してみましたが、モバイル版は query = xxx という指定ができないみたいですね…(ソート条件も?)
公式じゃないので 動かなくなる可能性があること注意が必要ですが、 q というクエリパラメータとフィールドの内部IDを使うとできそうでした。
内部IDの取得方法:https://qiita.com/the_red/items/702d8f3672f277c5eac7
この数字の頭に f をつけた値をq パラメータに指定すればできました。
ソート条件もこんなふうに指定するみたいです。
例えば、社員番号の内部フィールドIDが 11111、日付フィールドの内部ID が 22222 の場合です。
var employeeFieldId = 'f11111';
var dateFieldId = 'f22222';
var mobileQuery = "?view="+ listViewId + "&q=" + dateFieldId +"= THIS_MONTH() and "+ employeeFieldId + "=" + number + "#sort_0="+ dateFieldId + "&order_0=desc&size=100";
ひよこさん
ご丁寧な解説と情報ありがとうございます!
こちらもよく読みながら実装していきたいと思います。
この場合のソートの情報はどちらからでしょうか?
ページは切り替わるのですがレコードが表示されていません。
K-OKZ さん
ソートの情報は、PC版から「絞り込み」(フィルターマーク)を使ってソートを指定し、「適用する」を押した後に発行されたURLを参考にしました。
これも公式で提供された方法じゃないのでグレーなんですが…。
ひよこさん
わかりました!
今回の丁寧かつ迅速なご対応ありがとうございました。
また機会があればコメント頂けると幸いです。
大変助かりました。また宜しくお願い致します。