uayor

Siebel IP16 – Global Override Support (UAYOR)

globaloverrideshr2

You want to make enhancements to Siebel with a global reach? Depending on the type of implementation with Open UI you have several options:

1) You could use opt for a control plug-in wrapper, if the customization should affect functionality of controls. Examples could be enhancing the out-of-the-box functionality of check-boxes, text-area controls, turn a picklist control into a slider or adding placeholder text to the ‘search’ fields. The plug-in wrapper framework introduced in IP14 truly is an amazing gift as part of the Open UI extensibility portfolio.

2) Although with care and consideration, a postload solution could be appropriate. Postload as it implies is a piece of code which the OpenUI framework executes ‘post’ loading a view. Since Siebel is not a single-page application, postload executes on every view navigation (= HTTP Post). I used it to ‘fix’ a bug, create the pinnable views solution or to add a logout button.

3) Sure, you could opt to add your custom Presentation Model or Physical Renderer to all of your applets through standard Manifest Administration functionality. But well, that honestly is not what I mean by ‘global’.

4) The use of the SiebelHub’s Siebelhub.js ‘Overdrive‘ method. The Siebelhub.js arrived a few months ago on Github. Want to propose your enhancements, just make a first commit! Together it can be made even greater.

5) And well, option 5. That is the Manifest override of the ‘DEFAULT LIST APPLET’, ‘DEFAULT FORM APPLET’, ‘DEFAULT CHART APPLET’, ‘DEFAULT TREE APPLET’, ‘DEFAULT VIEW’ or ‘DEFAULT WEB PAGE’. And although I was happy to learn about this feature introduced a long with IP14, it has bitten me a couple of times. This option is not for the faint of heart. One tiny typo, and you might not even be able to login anymore. But that can be overcome, by ensuring an easy exit. Just employ an expression for the associated custom file, which disables the custom override for a particular user. Or just replace the defective file with an empty skeleton.

But most importantly, the Manifest override has a nasty side-effect. It overrides all (yes, all) seeded applet specific presentation models or physical renderers. If you like it or not. So in case a particular applet has a ‘seeded’ presentation model or physical renderer, your custom override will override that one to. Well – that is the status-quo for IP14/15.

For IP16 development choose to change the ‘evaluation’ order of global overrides. Such that it will not break the ‘seeded’ renderers. The image explains how it will work going forward. In effect a custom override will not override, once a specific seeded presentation model or physical renderer exists. So what global overrides would fit this model? Think of adding double-click behavior or adding the glyphified navigation buttons.

All said, development did earmark this option with the UAYOR label:-)

– Jeroen

notifications-feature

Siebel IP15.10/14.16 Has Arrived

Scheduled per usual end-of-the-month, IP15.10/14.16 has arrived!

PS1510

Most remarkable, the CTI “Web Notifications” feature, originally expected for IP16 has been introduced as part of this patch set.

Bug 22636162 “CTI – ADD A WEB NOTIFICATION WHEN SIEBEL NEED AGENT’S ATTENTION”

In those far away (?) high-interactivity days, on an incoming call – the Siebel window would be brought to the front. With OpenUI that feature ceased to exist, because simply impossible. But as also Neel mentioned in his post, Web Notifications can be considered the modern like-for-like feature.

Chrome and Firefox natively support Web Notifications. For Internet Explorer, you need to install a plug-in. Clicking on the Web Notification will in Firefox and Chrome direct you to the the right browser’s tab. For IE, it depends. Signs are such that if you have multiple IE tabs open, it will not be able to focus the Siebel tab.

– Jeroen

siebelpins

Siebel Pinnable Views Means Productivity

About two weeks back I posted an article on LinkedIn under the same title. It generated a bit off buzz based on feedback I received. The use-cases one could imagine having this feature are endless, if you ask me. If you haven’t seen it yet, check the Youtube footage.

The original idea was drafted by Warren Mull, and I took the raw demo solution to the next step. Why? Because as said, there are endless use-cases and a feature alike has been requested for as long as I have been working with Siebel.

Traditional solution would be to allow multiple Siebel sessions to be opened by end-users, which really, is one of the worst approaches possible for many reasons. The beauty of the Pinnable Views is the fact, that there is no Siebel session tied to it. It acts as a ‘static’ copy or clone if you wish of the original Siebel view. That does mean, the Pinnable View does not allow any further user-interaction (no drill-downs, no navigation, no scrolling). But for the majority of the use-cases, that is no limitation if at all.

So, this post is all about the implementation. Which really, is quite straight-forward. Conceptually it consists of just a few steps:

  1. A postloader injects the necessary code to display the ‘pin’ and ‘unpin’ buttons;
  2. When the ‘pin’ button is clicked, it will traverse the DOM’s <head> to identify all the embedded CSS stylesheets. That would allow, to reference these same stylesheets in the ‘cloned’ page;headcss
  3. Retrieving the view’s current title (from the <head> section);
  4. Create a boiler plate HTML document, referencing the previously collected style sheets and page title;
  5. Generate a new window, which would display as a tab in the browser;
  6. Cloning the existing view’s ‘_swecontent’ into the new window’s document;
  7. Push the new windows handle to an array, within the scope of the Siebel application.

No more, no less.

And sure, a bit of additional styling is requires to visualize the ‘siebel-pin’ and ‘siebel-unpin’ glyphs nicely. And about these glyphs: I desired to have a decent ‘unpin’ glyph. But that is non-existent in the fonts delivered with the application. So I choose to create a separate ‘siebelpins’ font-family for that purpose. In a previous article I explained how to go about, creating a new font-family using icomoon.

But this time, I just wanted to create a custom glyph. Not from scratch, but based on the existing ‘pin’ available in the ‘oracle’ font-family, delivered with the Siebel application. So how to go about?

First, you need to get a decent ‘path’ or ‘polygon’ svg. That is easily done with the Icomoon app. Simply import the ‘oracle.svg’ into Icomoon, select the ‘pin’ glyph and have Icomoon generate your font.

icomoonpin

It will something be alike shown below. But do not worry, you don’t need to understand what SVG is all aboutūüėČ

pinsvgpath

Next I turned to Glyphrstudio, which is a really neat tool to create either from scratch or modify any existing font. As long as you have a path or polygon SVG string available, you’re fine. Simply copy/paste your SVG string and voil√° – there you go.

glyphrstudio

Glyphrstudio provides a neat editor, so just drawing a diagonal line through the ‘pin’ glyph takes little time.

glyphrstudiomodify

The next step would be exporting your new SVG font. Because we would like to have .svg, .woff, .ttf and .eot representations of the the new font, it’s back to Icomoon again. Import the SVG generated by Glyphrstudio, and save it again. Icomoon will generate a .zip archive with all the goodies inside.

icomoonexport

The resulting files .svg, .ttf, .woff and .eot files you can copy to your Siebel’s /public/<lang>/fonts/custom folder.

icomoonsavedfonts

Alright, so what would need to do code-wise? Let’s walk you through.

It generates a ‘windowsPopups’ array, which will hold any handle to Pinnable Views windows. Why? Well, because otherwise we cannot close them.

Next the buttons get appended to the application menu (if you happen to use the Synergy theme, sure you need to visualize the application menu, or append the buttons to another element).

Forcing to re-paint is required, otherwise the buttons will on initial display be ‘wrapped’ and not shown as a single block.

pinnviewpl1

Next, we define the ‘onclick’ event. The first reference we add is the ‘faviconpin.ico’ which I created. Next it traverses the style sheets, and appends these. Finally the <heads>¬† title is retrieved. The boiler plate HTML is created, the new window is generated and the boiler plate gets written to it. The ‘_swecontent’ portion of the view is cloned, and finally we push the handle to the earlier mentioned array.

pinnviewpl2

To make things a bit more appealing, adding hover functionality. Implementing the ‘unpin’ is as simple as closing all of the windows while looping through the array.

pinnviewpl3
To suppress any non-sense elements on the pinned view, I added a bit of styling to the pinnable view. Remember, that in the first stage I embedded a popup.css?

pinviewcss

And this is the tiny bit of content.

pinnableviewscss

Lastly, the needed additions to your theme override. First define the new font-famile ‘siebelpins’ (usually on top of your CSS). Beware that the paths are considered relative from where the override CSS is located. That should be in /files/custom – but if you decided otherwise beware of that.

pinviewbuttoncss

That it. And of course, you can grab it all here:

Enjoy!

– Jeroen

 

DISA

Siebel IP15.9/14.15 Has Arrived

On the leap day of February, IP15.9/14.15 has been released. Set aside a number of fixes, the long-awaited DISA (Desktop Integration Siebel Agent) framework has been released! And Outlook Drag-n-drop becomes reality, again.

IP159

Desktop Integration Siebel Agent

DISA has been previously discussed by Alex and myself in the recent past. The DISA framework will support with IP15.9/14.15 the below two features:

  1. Inline file attachment editing
  2. CTI Hoteling

But essentially, DISA will be a framework to support further future features, as well as allow custom-built desktop integrations. At some point.When at some point will be, is unknown at the time of writing.

Note: in the past it was communicated that the Siebel Outlook Drag-n-Drop feature (SODD) would also leverage the DISA framework. But after many considerations, the SODD feature (also part of IP15.9/14.15) will use a separate Outlook Add-in.

Reading the DISA release notes seem to imply that Incremental Repository Merge is required to take benefit of DISA. That is factually false.

IP149DISARN

Detailed instruction can be found is this fresh-from-the-press MOS Document:Oracle Support Document 2107511.1 (Install and Deploy Desktop Integration Siebel Agent (DISA)). There are just a few manual configuration steps required as the DocId mentions. More importantly, DISA does require a local client-side installation. Can be ran and provisioned as silent installer. Something to take note of, it can be obvious hurdle. There is a current limitation that the DISA installer is only available in English, but that does not affect the functionality in a multi-lingual implementation however.

DISA_Complete

Special set-up activities are required for both Firefox and Edge. The installer supports silent installation, using a response file. And DISA supports the needed security features, such as server/port white-listing and security certificates to allow secure communications.

Microsoft Outlook to Siebel Drag-and-Drop (SODD)

The SODD feature will rely on a specific Outlook add-in. Now I hear you think, that will be a challenge to get across within IT. Anyways, if SODD is a looked-for feature, options are limited especially due to the NPAPI deprecation. Still on IE11? In that case you could craft your own Java-applet based solution (it has been done before).

Well, what are the the use cases supported for SODD?

  • Drag one email from Outlook and drop it on Siebel, the attachment will be saved accordingly, context sensitive.
  • Drag multiple emails at one time from Outlook and drop them to Siebel. The emails will be saved as multiple attachments, context sensitive.
  • Drag email attachment(s) from Outlook and drop them to Siebel. The email attachments will be saved as (multiple) attachment(s), context sensitive.

All together IP15.9/14.15 is not just a patch set:-)

– Jeroen

 

 

 

Siebel IP15.8/14.14 Has Arrived

IP158

Siebel IP15.8/14.14 arrived, per scheduled date. The traditional document to keep a close eye on “Oracle Support Document 1614310.1 (Siebel Patchset Installation Guides for Siebel Innovation Packs)” has been updated as well. Unfortunately, the awaited “Desktop Integration Siebel Agent (DISA)” framework solution has been pushed into the February patchset IP15.9/14.15.

There are a couple of bugs to mention here:

  • Bug 2132644 – IN THE ANDROID TABLET BROWSER, THE KEYBOARD POPS UP WHEN YOU CLICK ON THE NEXT RECORD BUTTON IN THE FORM.
  • Bug 22327858 – UNABLE TO UPDATE THE VALUE OF THE CHECK BOX IN THE ANDROID TABLET BROWSER.
  • Bug 22158305 – WHEN YOU ENTER THE DATE USING THE KEYBOARD THERE IS DATA LOSS IN THE OPEN USER INTERFACE.
  • Bug 22447460 – THE BC USER PROPERTY “FIELD READ ONLY FIELD” IS NOT WORKING CORRECTLY.
  • Bug 22447602 – TOGGLE APPLETS ARE NOT SWITCHED WHEN A PDQ IS EXECUTED.

– Jeroen

 

savebuttonappmenu

Simplifying Simple Siebel Things: Logout

Not gracefully logging out of Siebel is one of those user habits which is hard to kill. Especially because in the high-interactivity days, closing the browser would gracefully end the Siebel session on the server. Well… that changed with the OpenUI client because there is no way in which the browser ‘X’ button to either close a tab or the browser all together can be intercepted (similarly for the back button).

End result: having potentially many orphan sessions, waiting until the session times-out. Well, that can be considered still a positive scenario: the session will time-out. But might you have message broadcasting enabled, it won’t. Unless, again, you take preventive measures explained in this post about white-listing certain events.

But another, yet worse scenario to happen is that an user has uncommitted data, pending to be committed. What will happen using the ‘X’ approach? You can guess what, you will loose whatever is pending. Likely that it happens? Sure! And this will hurt your user adoption and creates frustration among the user base, guaranteed. The same obviously goes for that so-often used back button, that set aside.

In a previous post I discussed one possible approach, indicating users they have unsaved data. I’m about to write a post, with an alternative solution for the same issue. Keep a close eye on the blog:-)

But back to logout. I firmly believe the standard’s theme ‘logout option’ hidden behind the ‘user’ button, is, well, too much hidden. The same goes for the logout option in the application menu. So I decided (and others will have done similar, for sure) to add the logout button where everybody would expect such a button: top-right corner or the browser’s window.

Added a tiny bit of additional functionality:

a) Greying-out the background
b) Enabling the spinning Siebel wheel ‘busy’ cursor

I decided to keep it purely an image (or better: glyph), to prevent any localization. If I’d have opted for a ‘logout’ text (either with our without the glyph), I would rather have created the logout button through Siebel Tools, leveraging translation through a symbolic string. Changing the behavior (e.g. moving it to the far-right and adding the logout code, would then still be done client-side by javascript plus CSS).

Here I decided to generate the button during postload, with some basic CSS. You can simply add this code to your existing postload. Otherwise, you need to create one.

logoutbutton

logoutbuttoncss

I created the CSS for Aurora. Technically it does work for the Synergy theme. You just need to tweak the CSS a bit more.

Enjoy!

– Jeroen