Actuate Programming Journal

Report design from a guy who thinks he knows what he’s doing; you decide . . . .

Describe Your Actuate Experience

with 4 comments

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.

Written by Douglas

20090205 at 09:48 am

Posted in 24896

Tagged with ,

Do Not Do This in Nine

with one comment

debug watch list

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!”

Written by Douglas

20090108 at 09:57 am

Posted in 24896

Tagged with , , ,

Upcoming Actuate and IBM Maximo Webinar

with 2 comments

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.

actuate birt trending graph

Written by Douglas

20081120 at 08:01 am

Posted in Actuate, Off Topic

Tagged with , , ,

Learning Actuate Reporting for Maximo

with 9 comments

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.

Written by Douglas

20080324 at 07:11 am

Posted in Actuate, maximo

Tagged with , , , ,

Learning About eSpreadsheets Finally

with 6 comments

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.

Maybe.

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?

Written by Douglas

20080225 at 10:33 am

The Differences Between Actuate 6, 7, 8, and 9

with 9 comments

Inconsequential.

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.

Written by Douglas

20080220 at 11:57 am

Posted in Actuate, Requests

Tagged with , , ,

Commonly Overridden: ObtainSelectStatement( )

with 8 comments

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.

Local Variables

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

Plain Substitution

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.

Conditional Code

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.

Written by Douglas

20071120 at 18:44 pm

Follow

Get every new post delivered to your Inbox.