August 27, 2015

HTML Attributes doesnt work in Siebel Open UI

HTML Attribute Property of applet controls is a standard interactivity application's property which allows to set HTML attributes so that javascript can directly refer that element using document.GetElementById() or GetElementByName()

From Tools help:
"
HTML Attributes (O) -  Specifies to add HTML tag attributes to the HTML tags that the Standard Interactivity client creates when it displays the control. For example, If you set the HTML Attributes property to size=30 for a text box, then the client creates the following tag: <input type = text size=30 . . .>
"

However this trick is not available in Open UI as Open UI is considered to be HI application. Enhancement request has been created by oracle to consider this in future releases.


Solution:

In absense of this attribute property, developers have to scan through the elements using syntax like :

To access control of applet use following in PR layer:

this.GetPM().GetControl ("First Name");

or following to access the applet's wrapper.

var appplet_wrapper = "#s_" + tihs.GetPM().Get("GetFullId") + "_div";

 After getting access to the applet wrapper one can use jquery find method to extract controls of the applet.

 Hope it helps.

August 26, 2015

Migrating Open UI Manifest data between environments

Siebel Open UI manifest records created in Administration - Application> Manifest Administration, and as per IP 2015 there is no way provided by siebel to migrate the data created to higher environments.  Manifest BusComp are not available in ADM export out of the box.

This limits the siebel automated deployments and introduces manual intervention step.

Searching on support web reveals that Oracle has accepted the system limitaion and created a BUG for it in 2014 however no update has been provided till yet.


From Oracle

"
The manifest is now stored in Repository tables and therefore would be migrated with the rest of the Repository.
With the way Open UI Manifest migration is implemented, there does not appear to be a SIF export; yet, it migrated with the Siebel repository. Thus, it seems there is no way to generate a SIF for the manifest data.  Siebel Tools Object Explorer Screen shot that lists the S_UI_* tables and shows project name: "Repository Table" that proves dev2prod will migrate these.

Customer requested an enhancement on being able to incrementally migrate Manifest information without doing a full repository migration, such as using a .SIF file.
"

Bug created :  BUG 19469254 - OPEN UI MANIFEST MIGRATION BETWEEN ENVIRONMENTS IN .SIF FILES




Solution : 

The only way available now is to manually keep track of the manifest changes and import them through UI with every release.

To make it a bit easier to identify the custom records one search with : [Record Source] = 'Customer'

This will return only the custom created manifest records.

#AnotherBug

August 25, 2015

Open UI just doesn't work!

I recently met a group of people who basically vented out their first reactions on Siebel Open UI. Group consisted of both technical staff and non technical end users, thus I was able to validate and confirm issues.

At the end of discussion I was left with long list of things that doesn't work in Open UI. On researching support web, picture became more appalling.

Following is the list of very basic things that just don't work in Open UI, and sad part is that Oracle is not acting on them at all.

Please share your views in the comments below.

  1. Scrolling through list applet does not work with keyboard shortcut.

    When you get a list applet displayed in Open UI and before you click on any data row you navigate with the keys <CTRL>+<ARROW-DOWN> the focus will jump to the next record.But the previous record is still highlighted.
    Oracle raised couple of bugs for it, but didn't provided any fix for IP2013

  2. Drag and Drop of attachment does not work in IE9 and IE11 in IP2013 however it works in other browsers.


    Open UI Product Management recommends :
    ..."Drag and drop will not work in any IE version in Siebel 8.1.1.10 release and below. The biggest issue here is that IE8 and IE9 simply don’t support standards based drag and drop in HTML5. For IE10 there is a defect in a third party being used to provide this functionality. The third party has resolved the issue and it will be included in a future Siebel release. We would not encourage customers to upgrade the third party themselves, but rather they should wait for the next Siebel release when a fix will be made available"....
    In one of the SR oracle has gone one step further and recommended to change the browser.

  3. Open UI doesn't show hour glass while running query.

    This has been reported to oracle by many customers and since earliest open UI release, still oracle hasn't provided any fix yet.
    Steps to replicate:
    1) Log Into Open UI enabled siebel application
    2) Navigate to Accounts > All Accounts View
    3) Select the field to be searched using In Line Search(dropdown on top of list applet)
    4) Query for a field which can take some time to return records
    5) hourglass not shown and user doesn't know whether the system is querying or not!

  4. Vertical scroll is not present in open ui list applets.


    Siebel HI List Applet
    This one is the annoying thing of open UI. I don't understand why oracle has gone ahead picked up jqgrid for designing list applets. Grid is not capable enough to handle the large amount of data thus vertical scrolling is difficult to implement. This is also the reason of bad performance of Open UI client.

  5. Text area fields in open UI does not pops up.

    This is the second most annoying thing for an experienced HI user. Suddenly after upgrade Siebel losses it's popout text areas and no solution was provided till date. I have seen long time wasted to resolve this thing by many developers.
We all know list of issues with Open UI doesn't end here. I will create another list of Top 10 annoying things of Open UI to share it with you.

Till the time if you any problem that was just rejected by oracle to fix and think that should get slot in top 10 the please share it in comments below.

#ShameOnOracle

July 18, 2015

How to pass arguments by reference in Siebel?

Yes! it is possible to pass arguments by reference to Siebel functions. This technique is not documented in bookshelf and most of developer use this unknowingly while passing true or false to CanInvoke property in WebApplet_PreCanInvokeMethod Event of applets to make controls active or inactive.

Lets see how it works.

Nothing special needs to be done by calling function, only change made is in callee function in declaration of arguments by prefixing & ampersand just like &CanInvoke in PreCanInvokeMethod.


 Lets see an example :

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
if(MethodName == "PassByReferenceTest")
{
var privatePS = TheApplication().NewPropertySet();
privatePS.SetProperty("test","something");
subFunction(privatePS);
TheApplication().RaiseErrorText(privatePS.GetProperty("test"));
return(CancelOperation);
}
return (ContinueOperation);
}

function subFunction (&parameter)
{
parameter.SetProperty("test","TestSuccesful");
}


Above script declares a new property set and sets value of a process property to a string("something"), which is over written("TestSucccesful") by subFunction by directly accessing it through the memory pointer.  When business service is executed RaiseErrorText whill print "TestSuccesful" instead of "something".

 
This trick will potentially save you memory allocation and speed up you code a bit. Please be mindful that this code is just an experiment and should not be used in production environment without proper testing.


Happy coding :)

July 02, 2015

Not all control paths lead to a return statement. (SBL-SCR-00128)

Not all control paths lead to a return statement. (SBL-SCR-00128)

  This issue was fixed in version 8.1.1.7, but has been reported re-occurring in IP2014 patchset 3, it is caused due to product defect. This can cause interruptions in full compile of srf.

While compiling srf, if any script which has try catch block which has return statement in try block and does not have return statement outside catch, then this error will interrupt the srf compilation. 


To resolve this disable the "Deduce Types" scripting option in Siebel Tools as shown below.

June 30, 2015

How to change color of screen tab in Open UI?

I think this configuration should available out of the box in Siebel. Never the less I am happy that it is possible to customize the View PR layer in Open UI to change the colors of view bar of specific views.

In this example we will see how can we change the view bar background conditionally using Open UI View level PR customization.

This is how grey tab theme looks out of the box for Manifest File view :
 
Open UI Manifest File View

And this is how Manifest Administration view looks with Open UI PR Customization:

Open UI Manifest Administration View

May be savvy developers would like to have pale yellow for read only views or red for administration screens???


Part 1 : Create CSS class
This customization requires extending the theme in theme.js and creating new class to add different color. New Class should look something like :
custom-theme.css
When this class is associated with any control, it will change the background of the element to transparent and change the background color to blue.

Part 2: Create View PR Customization 
Now the task left is to find the view bar element in the DOM and assigning the class, this can be done with these two commands:

            $("#s_sctrl_tabView").addClass("custom_viewbar");
            $("#s_sctrl_tabScreen").find("li.ui-tabs-active[role='tab']").find("a").addClass("custom_viewbar");

Additionally we need to handle the browser resize event and reassign the class on change of size of browser. Sadly resize event is not passed on the View level PR as described in bookshelf and it has to be done with help of jQuery bind function. Code handling resize event looks like :

        $(window).bind("resize", OnPRResize);

At last we need to handle the cleaanup in the EndLife event of jQuery bind and the class allocation.

$(".custom_viewbar").removeClass("custom_viewbar");
$(window).unbind("resize", OnPRResize);

The final code of PR looks like:


if (typeof(SiebelAppFacade.testPR) === "undefined") {
    SiebelJS.Namespace("SiebelAppFacade.testPR");
    define("siebel/custom/testPR", ["siebel/viewpr"],function () {
    SiebelAppFacade.testPR = (function () {

    function testPR(pm) {
                SiebelAppFacade.testPR.superclass.constructor.apply(this, arguments);
    }
    SiebelJS.Extend(testPR, SiebelAppFacade.ViewPR);

    testPR.prototype.Init = function () {
        $(window).bind("resize", OnPRResize);
        SiebelAppFacade.testPR.superclass.Init.apply(this, arguments);
    }

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

    testPR.prototype.BindData = function (bRefresh) {
            SiebelAppFacade.testPR.superclass.BindData.apply(this, arguments);
    }
    var OnPRResize = function OnResize(){
            $("#s_sctrl_tabView").addClass("custom_viewbar");
            $("#s_sctrl_tabScreen").find("li.ui-tabs-active[role='tab']").find("a").addClass("custom_viewbar");
    };
    testPR.prototype.BindEvents = function () {
            SiebelAppFacade.testPR.superclass.BindEvents.apply(this, arguments);
    }
    testPR.prototype.EndLife = function () {
        $(".custom_viewbar").removeClass("custom_viewbar");
        $(window).unbind("resize", OnPRResize);
        SiebelAppFacade.testPR.superclass.EndLife.apply(this, arguments);
    }

    testPR.prototype.Setup = function () {};

    testPR.prototype.SetRenderer = function () {
                $("#s_sctrl_tabView").addClass("custom_viewbar");
                $("#s_sctrl_tabScreen").find("li.ui-tabs-active[role='tab']").find("a").addClass("custom_viewbar");
    };

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

Part3: Configure Manifest
Now when this PR script is associated to any view in Open UI Manifest, view bar color and screen tab color of that view will change to blue.


Hope it helps, if you like this article and would like to see more articles like this please leave a comment or +1

June 28, 2015

How to make Open UI textarea fields flexible in IE?

As you would know that IE doesn't have flexible textarea even in version 11. When rest of all modern browser allow to open drag one corner of the text area to change its size, IE doesn't let user to change size of elements because of Trident layout engine???


Fixed size multiline fields in IE
Because of this limitation Siebel Open UI users suffer big time. All the multiline textarea fields in open UI are fixed size and there is no way to pop them up as in HI or expand them. read more. 

Flexible multiline fields in chrome
There are many jquery based plugins available for this problem however all of them needs to maintained and lacks in one thing or the other, probably you will end up using one of those plugins at the end. However If someone looking for simple straightforward stop gap solution, then you can use jQueryUI Resizable function to make the textareas flexible just like chrome or firefox.

To implement in simply add following one line in postload.js file on the web server.

 $("textarea").resizable(); 

This will make all the textarea controls which are used for multiline field flexible and show tiny blue cue to expand or decrease the size of element and mimic chrome or firefox textarea elements.


Hope it helps.


June 27, 2015

How to build Siebel Workflow Expression?

I remember my days when i started with Siebel, I just couldn't get the syntax of workflow expression correct. I still see newbies of siebel struggling to get it right the first time. In this post I would try to make the basic rules of workflow expressions as simple as possible.

Basic Rules of Siebel Workflow Expression are :

  1. Siebel Workflow takes String as input.
  2. + (plus) is the concatenation operator.
  3.  Process properties can be referred using & operator like this > [&Object Id] 
  4.  Don't worry about spaces in process property names, they are allowed.

Let's take an simple example where we want to build the expression to search for records with Contact Id specified in Object Id the search spec would be:



if Object id contains : 1-12345 then expression will be evaluated as :


Did I say its a H.U.G ?

See what is the difference between Expression Business Component and Filter Business Component


Hope it helps. If you know similar topic and want to share with Siebel community, please post it in comments below. I will post it as blog post.

June 15, 2015

How to Invoke Siebel Business Service using URL?

SWEAPI is no doubt is one of the most neglected yet powerful feature of Siebel. It allows applications to integrate with Siebel as RESTful HTTP requests. SWEAPI is well documented and is powerful enough perform most of business operations similar to navigating around views and invoke methods of business services.

URL can be invoked from any HTTP client (likes of cURL) and is independent of User Agents. Output of business service can be transformed using XSLT style-sheets.

Following URL is an example for invoking business service through single URL. It is capable of logging into application and execute a business service(did I say workflows as well?).

http://host_name/fins_enu/start.swe?SWEDataOnly=1&SWESetMarkup=XML&SWECmd=ExecuteLogin&SWEUserName=SADMIN&SWEPassword=Password&SWEAC=SWECmd=InvokeMethod&SWEMethod=RunProcess&SWEService=Workflow%20Process%20Manager
This URL can give following output:


SWEDataOnly : Removes unnecessary navigational information from output
SWESetMarkup : Forces the output format to XML
SWEUserName : Application login user name
SWEPassword : Application password
SWEAC : Secondary command that is executed after login
SWEMethod : Method of business service to invoke
SWEService : Business service name

June 14, 2015

Siebel Open UI Interview Questions

Read Latest Open UI Interview Questions here.

What is Siebel Open UI?

Answer: Siebel Open UI is HTML 5 based Siebel High interactive client which is released by Oracle to replace older Active X based HI client. It is available in Siebel CRM from version 8.1.1.9 onwards. The name derived from Open source JavaScript libraries which it is based on.
Siebel Open UI Logo
Siebel Open UI

It is fully HTML 5 compliant user interface, which is based on jQuery and jQueryUI frameworks. It does not uses any active x component thus it can be accessed using any HTML 5 compliant browser like chrome, safari and Firefox along with latest Internet explorer.


Question : How to enable Open UI in Siebel?

Answer : To enable Open UI create new application object manager and set following parameters

Enable Open UI = true
HighInteractivity =true

Siebel Open UI exists parallel to existing Siebel clients. It references same srf and database and shares the same object definition with High Interactive application. 

 

Question: What are major customizable components of Siebel Open UI ?

Answer: Open UI can be customized extensively with help of jquery classes(known as presentation mode and physical renderer), which can override the default behviour of controls and can mash up with other HTML widgets.


 

 Question: What is the difference between presentation model and physical renderer?

Answer : Physical renderer is JavaScript layer in Open UI stack that is responsible for building the UI and showing the data. It communicates with presentation model to fetch data.

Presentation model is second layer which maintains the data state in Client. All the events and methods(such as delete record, write record or update record) are managed by PM layer. It communicates with proxy layer to get and set data on server.

 

Question: What is the difference between the PM of List applet and Form Applet?

Answer: Class of PM Layer is of list applet is different from Form applets and is extended as : 
SiebelJS.Extend(CustomClassName, SiebelAppFacade.PresentationModel); for form applet
and List applet uses SiebelJS.Extend(CustomClassName, SiebelAppFacade.ListPresentationModel)

Recommended way to customize PM and PR layer is use code creators
Duncan ford template generator 


 

Question : How to access Applet's Client User properties in Presentation Model?

Answer: Client user properties specified in siebel tools can be retrieved in Siebel Presentation Model JS by accessing the constants in the Setup method. Example:


CustomPM.prototype.Setup = function (propSet){
var consts = SiebelJS.Dependency("SiebelApp.Constants");
var apm = propSet.GetChildByType(consts.get("SWE_APPLET_PM_PS"));
var value = apm.GetProperty("User Property1");



Question: Does open UI support browser script events defined in tools?

Answer: Yes open UI supports browser scripts specified in tools. All the browser script events are supported. In addition to those events Open UI supports presentation model and physical renderer js class files to leverage HTML 5 capabilities.


Recommended Reading from Bookshelf:
Deploying Open UI
Configuring Open UI





Read for More Open UI Interview Questions - New