Skip to Content

I had a requirement to produce a report that showed dates and times of certain events in a table. The main problme I had is that the timestamps were stored on teh server as UTC timestamps, which means when I displayed the timestamps the time was not displayed in the timezone the logged in user was in. In order to convert the timestamps to the timezone that the user was, I had to somehow get the timezone from the user’s computer or webbrowser (since all time related dimensions were specific to the timezone of the WEBI server).

I was able to get the timezone from the browser using Javascript, but this was in HTML, which does not print.

It occurred to me that since we can run javascript in a WEBI report, that we could use an http redirect to launch a report and pass in any data accessible through javascript along with that redirect to a target report.

So I created a proof of concept!

Step 1: Create an empty report with no universe

Step 2: Create an empty cell in which all the Javascript will reside

Step 3: Set the cell to read as HTML

Step 4: Within the cell, add javascript to get the Timezone of the host browser

I created a variable that just gets the Current date, it is formated in the way that the Date() javascript function needs:

Date = FormatDate(CurrentDate();”Mmmm d, yyyy HH:mm:ss”)

Step 5: Once we have the timesone offset, add an html redirect to launch a new report and pass the offset as a parameter to an invisible prompt

var offset = newDate.getTimezoneOffset()/60; //gets the offset in hours

window.parent.location.href = ‘/BOE/OpenDocument/opendoc/openDocument.jsp?sIDType=CUID&iDocID=”+[DocID]+”&sType=wid&sRefresh=Y&sWindow=New&lsSOFFSET=’+offset;

Full Javascript:

=”<script type=\”text/javascript\”>

    function convertUTCDateToLocal(date) {

        if(date != null && date != \”\”) {

            var newDate = new Date(date);

            newDate.setUTCHours(newDate.getHours());

            var offset = newDate.getTimezoneOffset()/60;

          //launch the target report passing in the offset as a prompt parameter

            window.parent.location.href = ‘/BOE/OpenDocument/opendoc/openDocument.jsp?sIDType=CUID&iDocID=”+[DocID]+”&sType=wid&sRefresh=Y&sWindow=New&lsSOFFSET=’+offset;

        }  

    }

//get the date/timestamp       

var date = ‘”+[Date]+”‘;

convertUTCDateToLocal(date);

</script>”

</script>”

 

We use window.parent.location.href so that the current report is replaced by the launched report, and so that we don’t load the bobj environment inside the existing bobj environment (can produce an infinite loop)

The resulting experience is as follows:

User launches a report

User sees a blank page inside the bobj window for ~1 second

The bobj window then instantly refreshes and the target report is displayed, with the timezone offset passed as a parameter, and fully usable to for variable usage and none of the html non-printable issues we see when showing web content in a report.

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply