- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
12-28-2022 11:48 PM - 編集済み 12-28-2022 11:50 PM
お世話になっております。
インシデントに「Tag」という名前でタグ付けしたのをInteractive Filterで抽出したいと思っておりますが、
想定通りに抽出がうまくできず投稿致しました。
Interactive Filterの設定は以下になります。
▼Interactive Filter
▼Cascading Filter
▼Target Tables
▼Tag
▼抽出結果※実質は1件のみ。
下図のように「Tag」でタグ付けした以外のチケットまで抽出されている。
インタラクティブ フィルターを使ってタグを抽出するのは標準機能ではできないのでしょうか。
もしくはカスタムフィルターなどで抽出する方法など分かる方いらっしゃいましたらご教授ください。
よろしくお願い致します。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
12-29-2022 07:42 PM
その質問の画像にある「Cascading filters」は、公式の説明によると「カスケード・フィルタでは、地域、国、都市などの階層にある複数の値に基づいてフィルタリングを行うことができます。下位階層の選択肢は、上位階層で選択された値によってフィルタリングされます。」Create a cascading filter (servicenow.com)
今回の要件のタグでフィルターする事に使う機能ではなさそうです。
その他のフィルタータイプでもタグを扱えそうなものは無いです。タグは特別な検索方法が必要です。
そこで、WidgetのDynamic Contentを使ってInteractive Filterを作成してみました。
gr.addQuery('name', 'STARTSWITH', 'myTag'); の部分を検索したいTagの条件に変更してください。
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<g:evaluate var="jvar_querylist" object="true">
var queryList = [{label:'none'}];
// Tag Table
var gr = new GlideRecord('label');
gr.addQuery('name', 'STARTSWITH', 'myTag');
gr.query();
while (gr.next()) {
queryList.push({
query: 'sys_tags.' + gr.getValue('sys_id') + '=' + gr.getValue('sys_id'),
label: gr.getValue('name')
});
}
queryList;
</g:evaluate>
<script>
var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");
function clearFilter() {
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "incident";
filter_message.filter = "";
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.removeFilter();
}
function publishFilter (query) {
if(query == 'none'){
clearFilter();
return;
}
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "incident";
filter_message.filter = query;
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
}
</script>
<select id="myselect">
<j:forEach var="jvar_option" items="${jvar_querylist}">
<option value="${jvar_option.query}">${jvar_option.label}</option>
</j:forEach>
</select>
<script>
var $selectBox = $j("#myselect");
$selectBox.select2({width:'90%'});
$selectBox.change(function(event){
publishFilter(event.val);
});
</script>
</j:jelly>
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
12-29-2022 07:42 PM
その質問の画像にある「Cascading filters」は、公式の説明によると「カスケード・フィルタでは、地域、国、都市などの階層にある複数の値に基づいてフィルタリングを行うことができます。下位階層の選択肢は、上位階層で選択された値によってフィルタリングされます。」Create a cascading filter (servicenow.com)
今回の要件のタグでフィルターする事に使う機能ではなさそうです。
その他のフィルタータイプでもタグを扱えそうなものは無いです。タグは特別な検索方法が必要です。
そこで、WidgetのDynamic Contentを使ってInteractive Filterを作成してみました。
gr.addQuery('name', 'STARTSWITH', 'myTag'); の部分を検索したいTagの条件に変更してください。
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<g:evaluate var="jvar_querylist" object="true">
var queryList = [{label:'none'}];
// Tag Table
var gr = new GlideRecord('label');
gr.addQuery('name', 'STARTSWITH', 'myTag');
gr.query();
while (gr.next()) {
queryList.push({
query: 'sys_tags.' + gr.getValue('sys_id') + '=' + gr.getValue('sys_id'),
label: gr.getValue('name')
});
}
queryList;
</g:evaluate>
<script>
var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");
function clearFilter() {
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "incident";
filter_message.filter = "";
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.removeFilter();
}
function publishFilter (query) {
if(query == 'none'){
clearFilter();
return;
}
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "incident";
filter_message.filter = query;
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
}
</script>
<select id="myselect">
<j:forEach var="jvar_option" items="${jvar_querylist}">
<option value="${jvar_option.query}">${jvar_option.label}</option>
</j:forEach>
</select>
<script>
var $selectBox = $j("#myselect");
$selectBox.select2({width:'90%'});
$selectBox.change(function(event){
publishFilter(event.val);
});
</script>
</j:jelly>
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-03-2023 06:50 PM
Iwai様
ご確認いただきありがとうございます。
ご教示頂きましたDynamic Contentを使って抽出できました。大変勉強になりました。
改めてありがとうございました。