Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Help with Dynamic dates on the Dashboarding using Content Block

Innus Mulani
Tera Contributor

Hi All,

 

I have added a List report on the Dashboard with source as catalog task table. I want to apply the interactive filter to this dashboard using Content Block widget. 

On this widget, I have added 2 date_time fields to pick the date/time with one button to call the below function 

publishFilter().

When i am passing the two static date/time values (between) to the publish filter, dashboard return the result correctly. But i would like to use the date value entered on the form in 2 fields and pass to this function.

I have tried to use below but it is not working and returns no data.

 

filter_message.filter = "opened_atBETWEENjavascript:gs.dateGenerate(starttime)@javascript:gs.dateGenerate(endtime)";
 
See script below:
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<script>
    var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");

function publishFilter () {
    var filter_message = {};
    filter_message.id = "my_unique_id";
    filter_message.table = "sc_task";
    var starttime = document.getElementById('DateTime1').value;
    var endtime = document.getElementById('DateTime2').value;
        
<!--     Add your own filter query logic here -->
    filter_message.filter = "opened_atBETWEENjavascript&colon;gs.dateGenerate('2023-05-01','00:00:00')@javascript&colon;gs.dateGenerate('2023-09-01','23:59:59')";
        SNC.canvas.interactiveFilters.setDefaultValue({
            id: filter_message.id,
            filters: [filter_message]
        }, false);
    my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
}
1 ACCEPTED SOLUTION

Hi,

 

Try this code and confirm if this works fine

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<script>
var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");

function publishFilter () {
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "sc_task";
var startdatetime = document.getElementById('DateTime1').value;
var enddatetime = document.getElementById('DateTime2').value;
var startdate = startdatetime.split(" ")[0];
var startdate_format = startdate.split("-")[2] + "-" + startdate.split("-")[0] + "-" + startdate.split("-")[1]
var starttime = startdatetime.split(" ")[1];
var enddate = enddatetime.split(" ")[0];
var enddate_format = enddate.split("-")[2] + "-" + enddate.split("-")[0] + "-" + enddate.split("-")[1]
var endtime = enddatetime.split(" ")[1];

<!-- Add your own filter query logic here -->
filter_message.filter = "opened_atBETWEENjavascript&colon;gs.dateGenerate('" + startdate_format + "','" + starttime + "')@javascript&colon;gs.dateGenerate('" + enddate_format + "','" + endtime + "')";
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
}

Thank you,
Palani

View solution in original post

6 REPLIES 6

palanikumar
Giga Sage
Giga Sage

Hi,

 

Can you try the below filter:

filter_message.filter = "opened_atBETWEENjavascript&colon;gs.dateGenerate('2023-05-01','00:00:00')@javascript&colon;gs.dateGenerate('2023-09-01','23:59:59')";

Thank you,
Palani

Thanks @palanikumar 

This works perfectly fine if we pass the static date/time values in the filter qualification. But i have two date/time fields on the form as below and it should run dynamically

 

When fields are selected, i hit the search button and it should pass those 2 values in the filter

InnusMulani_0-1694966479250.png

 

Hi,

 

Try this code and confirm if this works fine

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<script>
var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");

function publishFilter () {
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "sc_task";
var startdatetime = document.getElementById('DateTime1').value;
var enddatetime = document.getElementById('DateTime2').value;
var startdate = startdatetime.split(" ")[0];
var startdate_format = startdate.split("-")[2] + "-" + startdate.split("-")[0] + "-" + startdate.split("-")[1]
var starttime = startdatetime.split(" ")[1];
var enddate = enddatetime.split(" ")[0];
var enddate_format = enddate.split("-")[2] + "-" + enddate.split("-")[0] + "-" + enddate.split("-")[1]
var endtime = enddatetime.split(" ")[1];

<!-- Add your own filter query logic here -->
filter_message.filter = "opened_atBETWEENjavascript&colon;gs.dateGenerate('" + startdate_format + "','" + starttime + "')@javascript&colon;gs.dateGenerate('" + enddate_format + "','" + endtime + "')";
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
}

Thank you,
Palani

@palanikumarI am using the same script but its not working for me could you help.

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<script>
var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");

function publishFilter () {
var filter_message = {};
filter_message.id = "my_unique_id";
filter_message.table = "incident";
var startdatetime = document.getElementById('DateTime1').value;
var enddatetime = document.getElementById('DateTime2').value;
var startdate = startdatetime.split(" ")[0];
var startdate_format = startdate.split("-")[2] + "-" + startdate.split("-")[0] + "-" + startdate.split("-")[1]
var starttime = startdatetime.split(" ")[1];
var enddate = enddatetime.split(" ")[0];
var enddate_format = enddate.split("-")[2] + "-" + enddate.split("-")[0] + "-" + enddate.split("-")[1]
var endtime = enddatetime.split(" ")[1];

<!-- Add your own filter query logic here -->
filter_message.filter = "opened_atBETWEENjavascript&colon;gs.dateGenerate('" + startdate_format + "','" + starttime + "')@javascript&colon;gs.dateGenerate('" + enddate_format + "','" + endtime + "')";
SNC.canvas.interactiveFilters.setDefaultValue({
id: filter_message.id,
filters: [filter_message]
}, false);
my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
}
</script>

<style>
    .filter-container {
      margin: 10px;
      display: flex;
      flex-direction: column;
      align-items: start;
    }
    .filter-container label {
      font-weight: bold;
      margin-bottom: 5px;
    }
</style>

<div class="filter-container">
    <label for="start-date">Start Date:</label>
    <input type="date" id="start-date" name="start-date" onchange="publishFilter()" />
   
    <label for="end-date" style="margin-top: 10px;">End Date:</label>
    <input type="date" id="end-date" name="end-date" onchange="publishFilter()" />
    <button onclick="publishFilter()">Apply Filter</button>
</div>

</j:jelly>