IP16 – Introducing… LogLevel = debug

loglevelsmallDuncan Ford pointed us to this tiny little enhancement. Alright, nothing very fancy. On the other hand, something essential you’d expect from your OpenUI development toolkit. IP16 introduces a client-side LogLevel. It has two states: “info” and “debug”. And well, Null defaults to “info”.

In conjunction, the SiebelJS pseudo-class now carries besides Log() and Trace() also a third method Debug(). If you want to instrument your code, but don’t want it to flood the console – go for Debug(). Only when SiebelJS.LogLevel = “debug” it will output to the console.


– Jeroen

Siebel Premier Support +1 Year

Along with the recent release of Innovation Pack 2016, Oracle extended Premier and Extended support by one year. Refer to the Oracle Lifetime Support Policy for Applications. It further underlines Oracle’s commitment to Siebel customers – where other forces might try to diminish Siebel (…).

sblpremsup– Jeroen

Siebel IP14.18/15.12 Patchset Available!

Oracle has released Siebel IP14.18/15.12 overnight. This means the final patchset for Innovation Pack 2014. After 18 months and the same number of monthly patchsets, following Oracle’s Siebel Error Correction Policy. Innovation Pack 2015 still has half a year of error correction support remaining.

  • IP14.18  (Patch Number: 23345222)
  • IP15.12 (Patch Number: 23475225 )

Quite a number of fixes:

  • A number of fixes related with out-of-the-box DISA-based attachment functionality such as previewing images;
  • An important (performance) fix for the Calendar Gantt Chart, where it generates unnecessary and potentially many queries. Can quickly turn out to be major availability issue.
  • Issue with daylight saving time (DST) calculations in eScript
  • Number of OpenUI related defects
  • Implicit Save AND Explicit Save is not working since applying 14.16 AND 15.10 (Doc ID 2133587.1) got resolved. 

At the same time, new versions of DISA and the SODD have been published. For the latter, the release notes are yet not available.

– Jeroen

OpenUI – Single Click Sort (The Sequel)

qsRead my post, from two days back? I left the Single Click Sort solution at a point where it was functional, but at the same time introduced a significant limitation. Limitation such, that the Column Lock/Unlock feature would be put at stake.

In the mean time, collaborating with my colleague Pedro Melo we tweaked the initial solution a bit. The setTimeout() function existing in the initial solution, had a wait of zero (0) milliseconds. That basically means, the call to the function() will be postponed until the browser is done, essentially to the point that there are no further function calls stacked in the browser’s message loop. An interesting Stackoverflow thread on this topic can be found here.  I typically set the timeout to zero, to force execution to wait until the browser is done. Often solves hard-to-tackle issues related with event bubbling. Like to learn more? Check this.

Well, we changed the setTimeout() to wait for 200 milliseconds. Why 200 milliseconds, you might ask? That will be the maximum time-span in which we will capture a ‘double click’ event. More that 200 milliseconds, and we will treat those mouse clicks as two individual clicks.

Added a dblclick event handler, and the sole thing it’s bound to do, is set a local ‘dblclick’ variable to true. After the 200 milliseconds have passed, the ‘stacked’ function will execute. Why? Because the browser also captured the click event. A true/native double-click will trigger both ‘click’ and ‘dblclick’ events. First the ‘click’ event will fire, second the ‘dblclick’. It’s kind of a hack, but it’s functional.

On touch devices, default functionality should prevail – the condition IsTouch() got added to by-pass the custom code conditionally. Alternatively, the same could have been done using a Manifest Administration expression – preventing the QuickSortPR.js to download at all.

What does the complete solution look like?

if (typeof(SiebelAppFacade.QuickSortPR) === "undefined") {

define("siebel/custom/QuickSortPR", ["siebel/jqgridrenderer"],
function () {
SiebelAppFacade.QuickSortPR = (function () {

function QuickSortPR(pm) {
SiebelAppFacade.QuickSortPR.superclass.constructor.apply(this, arguments);

SiebelJS.Extend(QuickSortPR, SiebelAppFacade.JQGridRenderer);

QuickSortPR.prototype.ShowUI = function () {
SiebelAppFacade.QuickSortPR.superclass.ShowUI.apply(this, arguments);

if (!SiebelAppFacade.DecisionManager.IsTouch()) {
var dblclick = false;
var placeHolder = "s_" + this.GetPM().Get("GetFullId") + "_div";
var elSortable = $("#" + placeHolder).find(".ui-jqgrid-sortable");
var sort = $("li[data-caption='Sort']");

elSortable.on("click", function () {
sort.parent().css("visibility", "hidden");

setTimeout(function () {

if (!dblclick)

dblclick = false;
}, 200);

elSortable.on("dblclick", function () {
dblclick = true;

return QuickSortPR;
return "SiebelAppFacade.QuickSortPR";

Can grab the code from here also.

– Jeroen


Birth Of The DISA Code Template Generator

Oracle’s Duncan Ford did it again! Driving force behind the PM, PR and PW boiler-plate code generators as well (not to forget the OracleSiebel Git) – he crafted a refreshing life-hacking solution for Siebel developers. For DISA extensibility this time. Given the extensibility options DISA provides, having a tool which makes life easier will be well-received by many. Preventing the nitty-gritty work, but instead have an accelerated start for your DISA-based endeavors…!

Duncan proudly presents…

The DISA Code Template Generator

Not only does it generate boiler-plate for the relevant physical renderer and presentation model, it also generates boiler-plate Java code along. Not to forget a build script, and relevant Java manifest. Check it out!

This slideshow requires JavaScript.

– Jeroen