I’ve just noticed that WordPress has implemented Polldaddy polls in posts. I’ll try to restrain myself, but I’m generally interested in the readers that end up here at the Actuate Journal. Please share:
Polldaddy polls don’t look so great with long answers. I have truncated the options in the poll to make it readable. Below are the more descriptive versions:
- Specifically trained in and working primarily as an Actuate Developer
- Using OEM version of Actuate; primarily I develop in the tool Actuate is embedded in
- Incidentally using or associated with Actuate; I’m primarily a java|.NET|C++ developer
- I’m a recruiter that found your articles on Interviewer|Interviewee Questions
- Not an Actuate developer
Feel free to expand on your answer in the comments.
For whatever reason I’ve just spent the last 2 hours trying to type the name of my variable into the Value box noted above. Doing so crashes the crap out of Actuate.
Also, it makes you want to beat your head on your desk for the crash and for the part where you can’t figure out why you’re not using the Name box.
As my Mom might say, “Fiddlesticks!”
A reader reminded me of an upcoming Actuate and Maximo Webinar that I thought I would elevate from the comments to a full on post. A full disclosure-esque reminder, I use Actuate and am employed by IBM.
When: Monday, November 24th, 11:00 EST
Free Registration: http://snipurl.com/actuatemaximowebinar
Blurb I ganked from the registration site:
This webcast will provide attendees with valuable insights into their future reporting options with Maximo, including:
- How to continue leveraging existing investments in Actuate Reports
- How to integrate new BIRT Reports with existing Actuate reporting infrastructure
- How to extend the value of Actuate and BIRT to other applications beyond Maximo
Lately I’ve been amused by Google Trends–graphs showing the trending of popular searches. I think maybe this one goes a long way to making an argument for getting in touch with your inner BIRT.
Continuing from my recent announcement that I was coming up to speed on eSpreadsheets, I’ve also been poking around free BIRT and now, today, I am headed out to LA to get some formal training on how to write Actuate reports for Maximo.
I really really really hope that the focus is on Maximo and not Actuate. I’ve heard that most folks that know Maximo don’t really know Actuate. I guess that generally the OTB reports get tweaked but not significantly modified. Maybe very few new reports get created. For all I know this is because no new ones are needed. I look forward to ending the guesswork this week.
Just thought I would toss this title out there as a buoy for anyone hoping I’d write about something other than the core Actuate IDE: eRDPro.
I’ve not had cause (or time) to come up to speed with the eSpreadsheet tool despite having been mildly aware of it’s existence all the way back to when it was Formula One’s.
From what I can tell this is fine since version 9 takes a firm grip of the design metaphor and steers it in a solidly ‘drag and drop you moron’ sort of way from what I can tell. I am definitely a moron regarding these things and look forward to delving into the ports that challenge my moronityness.
Anything you’d like to know?
Hopefully from that one word you can tell I am more likely to focus on opinions than facts.
In general the changes that Actuate makes to its reporting suite have influenced the server application more than the development IDE. This shouldn’t come as a surprise because there really isn’t all that much new under the sun regarding how to build reports. The server bells and whistles are what sell the product to the folks that pay for Actuate–that’s not normally a crowd full of developers looking for slicker programming environments. I’ve been far enough removed from the server side of things in these past years that I will only say that somewhere in there they added support for clustering (probably from 6 to 7).
The IDE on the other hand has had a few noteworthy, but barely braggable updates.
6 became the benchmark in my mind for IDE stability. Before that eRDPro was prone to hiccups that trashed ROD files and required restarting the app and sometime rebooting your computer. I think this is when we got the Dynamic Text Controls. Grouping and Sorting got a fancy new widget in this version or 7. I don’t use or recommend it’s use so I don’t recall.
7 added that crosstab widget that I avoid but I hear others like well enough. I think they deprecated AcGraph in favor of AcChart and the new–thank God–graph/chart widget.
8 was the biggest leap since I’ve been around. eRDPro went from in-house interface to Eclipse based. Though I wouldn’t call it a full on embrace of Eclipse since there is still some functionality I would have expected to see but don’t: code highlighting and completion being the most obvious.
9 is an extension of 8 but with the funky little do-dad for doing conditional formatting. It’s handy, but not as robust as I would have liked for my coding.
Things I’d like to see:
- code highlighting
- code completion
- file manager interface
- better server access (more clarity)
- ability to open more than two instances of eRDPro
I am sure there are other IDE standards that I am not thinking of at the moment. I suspect I am too ingrained in the product as is to think to far outside the current feature set.
As for the question that spawned this post, there are really no difference in the ROD file types except that you can’t run newer versions in the older IDE/Server. Backward compatible, yes; forward, no. I have no evidence, experience, training, or interest in finding out why that is, but I suspect it’s nothing more complex than “file version <= IDE version?”.
A remainder not to quote me on any of the above ‘facts’. This is totally out of my brain. If you require a technical comparison of the feature sets between versions, please check Actuate’s documentation regard such.
It is entirely possible to have a significant installation of Actuate that never needs to override the ObtainSelectStatement( ) (OSS). I haven’t seen one and I doubt it happens much. Understanding how to override this method is a core skill for a good Actuate developer.
Overriding the DataStream object’s OSS allows you to programmatically design your SQL query based on any sort of external information: user input, configuration files, or even live data. Users running reports directly or by proxy through schedules could feed your query simple information about the date range desired or the shipping destination of an order. An external flat file might direct the report to use a development database instead of a production database or maybe one schema instead of another. A report can even be designed such that one part of the report queries the database first and returns information transmitted in a second query that then populates your report. There are lots of reasons to modify a SQL statement at run time.
Of course you may just want to preserve the whitespace and layout of your SQL as you go from one tool to build the code to Actuate to run it.
Disable the Superclass
Function ObtainSelectStatement( ) As String ''' ObtainSelectStatement = Super::ObtainSelectStatement( ) ' Insert your code here End Function
In nearly every case you are going to comment out or remove the call to the superclass. Your code will be doing all the work.
Function ObtainSelectStatement( ) As String ''' CREATE LOCAL VARIABLES dim sqlstmt as String dim NL as String dim sqlSchema as String dim beginDate as String dim endDate as String dim category as String ''' ASSIGN LOCAL VARIABLES sqlstmt = "" 'used throughout to contain the growing SQL statement NL = Chr$(13) & Chr$(10) 'easier to read output sqlSchema = cfgSchema 'aids scaling from one schema to another beginDate = reqBeginDate 'allows for user or schedule input at run time endDate = reqEndDate 'same category = reqCategory 'user input [snip - sql statement] ObtainSelectStatement = sqlstmt End Function
Function ObtainSelectStatement( ) As String [snip - variable declarations] ''' SELECT '''''''''' sqlstmt = sqlstmt & "SELECT c.customer_name as NAME " & NL sqlstmt = sqlstmt & ", c.customer_id as CUSTID" & NL sqlstmt = sqlstmt & ", c.address as ADDRESS " & NL sqlstmt = sqlstmt & ", c.city as CITY " & NL sqlstmt = sqlstmt & ", c.state as STATE " & NL sqlstmt = sqlstmt & ", c.postal_code as ZIP " & NL ''' FROM '''''''''' sqlstmt = sqlstmt & NL & "FROM " & sqlSchema & ".customer c " & NL ''' WHERE '''''''''' sqlstmt = sqlstmt & NL & "WHERE c.active_dttm BETWEEN timestamp('" & beginDate & "') " & NL sqlstmt = sqlstmt & " AND timestamp('" & endDate & "') " & NL ''' ORDER BY '''''''''' sqlstmt = sqlstmt & NL & "ORDER BY NAME " & NL sqlstmt = sqlstmt & ", CUSTID " & NL ObtainSelectStatement = sqlstmt End Function
Above you should locate five of the local variables used in the construction of the SQL statement. ‘sqlstmt’ and ‘NL’ are employed in constructing the statement itself. ‘sqlSchema’, ‘beginDate’, and ‘endDate’ are used for replacement of strings based on implied user input for the date range and configuration information for the schema.
Yes, I am a little nuts when it comes to whitespace and readability.
Function ObtainSelectStatement( ) As String [snip] ''' WHERE '''''''''' If myCategory = "Active" Then sqlstmt = sqlstmt & NL & "WHERE c.active_dttm BETWEEN timestamp('" & beginDate & "') " & NL sqlstmt = sqlstmt & " AND timestamp('" & endDate & "') " & NL ElseIf myCategory = "Closed" Then sqlstmt = sqlstmt & NL & "WHERE c.closed_dttm BETWEEN timestamp('" & beginDate & "') " & NL sqlstmt = sqlstmt & " AND timestamp('" & endDate & "') " & NL Else 'No Where Clause End If [snip] ObtainSelectStatement = sqlstmt End Function
Based on the value a user (or a pre-made schedule) submits for the “Category” parameter a different date field can be used to filter the data. ACTIVE_DTTM when “Active” or CLOSED_DTTM when “Closed”.
I’ve seen the OSS overridden to swap out values for every aspect of the SQL statement; swap out values in the select, choose different tables–even add additional tables, drastically remodel the filtering of the where, or resort the ordering. Most typically I see it used to customize the where clause.