loglevelsmall

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.

debugginconsole

– Jeroen

sblextsupp

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

it_photo_88588

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

qs

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") {
SiebelJS.Namespace("SiebelAppFacade.QuickSortPR");

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)
sort.click();
else
$("li[data-caption='Lock']").click();

dblclick = false;
}, 200);
});

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

return QuickSortPR;
}());
return "SiebelAppFacade.QuickSortPR";
})
}

Can grab the code from here also.

– Jeroen

 

DISA

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

sortit

OpenUI – Single Click Sort

Got triggered by an internal discussion with some colleagues, to re-enable a single-click-sort solution. Came up with the below solution, which does work beautifully.

But with to major drawbacks:

  1. It disallows the column ‘lock’ / ‘unlock’ feature.
  2. It still sorts default in Ascending mode, where I’d like to have the option to specificy ‘Descending’ under certain circumstances.

Well – thought, just post the work-in-progress and elicit some feedback from the field (yes, you!). Posted the same sample code also on the OracleSiebel Git repository.

My first focus is on a proper solution that will somehow enable lock/unlock along side the single-click-sort. The path using a dblclick event handler led nowhere, because having two mouse events on the same element is simply no good. I had a quick look at overriding the context menu (right mouse) and instead displaying again the standard sort / lock popup.

Any takers :-)?

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

SiebelJS.Namespace("SiebelAppFacade.QuickSortPR");
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);

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 () {
sort.click();
}, 0);
});
}

return QuickSortPR;
}());
return "SiebelAppFacade.QuickSortPR";
})
}

– Jeroen

browserwars

Siebel IP16 – Browser Battle Benchmark

So – how does rendering performance has evolved with Innovation Pack 2016? I have been asked that question a number of times in the recent past. So, I put Innovation Pack 2016 on the rack, measuring Open UI’s response time per usual benchmark approach.

Again, four views with increasing complexity are used. Where really, the complexity of View 4 is ludicrous and primarily meant for stress-testing. In the past IE11 showed a non-linear pattern, that is why I included that impossible complex view.

Those ‘non-linear days’ are over due to largely IE11 specific framework enhancements included in IP15.3/14.9 back in September 2015. Based on my measurements we could say, that Innovation Pack 2016 does a slightly better job compared to IP15.3/14.9. Nothing spectacular. Call it stable.

meta-chart– Jeroen