07 Feb 2025
12:50 PM
- last edited on
17 Mar 2025
10:04 AM
by
MaciejNeumann
Is there a way to invoke an intent from a dashboard so that my app receives the relative timeframe as... a relative timeframe?
In more detail...
I have an app that receives a timeframe via an intent. There is one required key field, with dt.timeframe being in the intent but non-required.
The intent can be triggered using 'open with' from a dashboard DQL table containing a column matching the name of the key field.
All of that works...
What is not so good is that if the dashboard has a Timeframe of, say, 'now-30d', when the intent is triggered it always seems to convert the begin and end values to absolute time values. The URL invoked contains the absolute times encoded as HTTP query parameters... I think this conversion happens before my app is involved in the process.
Is there a way to invoke an intent from a dashboard so that my app receives the relative timeframe as... a relative timeframe?
It seems to be possible for built-in DT things to do this when invoking each other.
Cheers.
12 Mar 2025 10:08 AM
Hi Andy,
can you please share your lastIntent from top context in custom app, following an example here: https://developer.dynatrace.com/develop/intents/debug-intents/. Here we will be able to see the timeframe passed.
13 Mar 2025 04:11 PM
This was passed when using 'Open Field With' from the legend of a bar chart on a dashboard. The timeframe on the dash was 'last 10 minutes'... apart from not being passed as a relative value, it kinda looks like 11 minutes to me.
17 Mar 2025 10:26 AM
Are you sure the time selector was set up as the last 10 minutes? Since the only way to get that kind of timeframe for me is to manually select that timeframe, otherwise object looks like this:
21 Mar 2025 11:13 AM
Thanks for your reply. Yes I am sure
Dashboard screen grab...
lastIntent seen by the app...
21 Mar 2025 11:20 AM
Also the relevant part of the config showing the schema for the timeframe parameters (the app also allows timestamp... but that is not being used when drilling from a dashboard graph series)
08 Apr 2025 01:50 PM
Thanks for the details Andy, we're checking this internally and as soon as I have info, I'll share it with you.
18 Jul 2025 01:54 PM
Hi Andy! Apologies for the late reply,
I've been taking a look at your situation and as you said, whenever you open an intent from a chart legend, the intent contains the timestamp instead of the relative time.
For example:
"timeframe": {
"start": "2025-07-18T08:57:00.000000000+02:00",
"end": "2025-07-18T09:28:00.000000000+02:00"
}
I've forwarded this concern internally and it's expected behavior since we assume that you want to do a snapshot of the data whenever you do that.
If you want to get the relative timeframe you can open an intent of the whole chart
Then, you will get the following timeframe
"dt.timeframe": {
"from": "now()-30m",
"to": "now()"
},
Finally, you will have to filter yourself on your custom app the part of the chart that you need.
You are not the first user requesting this feature so if there is any update regarding this topic I'll let you know
04 Aug 2025 11:49 PM - edited 05 Aug 2025 12:02 AM
Hi Andy,
kindly check the below example mentioned in the docs to receive intent, i think it's useful to know what is the available payload properties and i think you can convert it to relative time programmatically within your intent receiver function
import React, { useEffect, useState } from 'react';
import { Code, Paragraph } from '@dynatrace/strato-components/typography';
import { getIntent, IntentPayload } from '@dynatrace-sdk/navigation';
export const YourComponent = () => {
const [intentPayload, setIntentPayload] = useState<IntentPayload>();
useEffect(() => {
const intent = getIntent();
if (intent) {
setIntentPayload(intent.getPayload());
}
}, []);
return (
<>
{intentPayload && (
<Paragraph>
Received Intent Payload <Code>{JSON.stringify(intentPayload)}</Code>.
</Paragraph>
)}
</>
);
};
if payload doesn't include any indicator to relative timeframe you can suggest it as a product idea.
and kindly check this code block to convert it to relative timeframe
const dateString = '2025-03-13T15:45:00.000Z';
const targetDate = new Date(dateString);
const now = new Date();
const diffMs = now - targetDate; // Difference in milliseconds
// Convert to days, hours, minutes, seconds
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
const diffHours = Math.floor((diffMs / (1000 * 60 * 60)) % 24);
const diffMinutes = Math.floor((diffMs / (1000 * 60)) % 60);
const diffSeconds = Math.floor((diffMs / 1000) % 60);
let timeIdentifier = diffDays > 0 ? 'd' : (diffHours > 0 ? 'h' : 'm');
let timeValue = timeIdentifier == 'd' ? diffDays : (timeIdentifier == 'h' ? diffHours : diffMinutes)
console.log(`-${timeValue}${timeIdentifier}`);
hope this useful for you.