March 27, 2016

Interview with Yvette Francino

Recently I came across a very talented IT Manager Yvette Francino, unlike any another project manager blogging is one of her passions. She has worked as manager for Siebel Projects and have been working in Agile from a quite a long time, she has spent time in coaching teams for Agile. I took opportunity for asking hers some questions regarding Agile and she kindly shared some very useful resources which can help new team members to get started with Agile.

Here is the interview.

Question : Please shed some light on your experience with Siebel. Were you a Siebel developer?

Yvette: I was a development manager at Sun Microsystems from 1999-2009. For a short time around 2000, I managed a team that was using Siebel. I took the training, but didn't have much more hands-on experience than that.

Question : As almost every Siebel project suffers from scope creeps and effort overruns due to un-planned tech issues. Do you feel Agile is not suited for Siebel Projects?

Yvette: Projects that typically suffer from scope creep are the ones that are best suited for Agile methodologies. The more you don't know up front (which is true of most software projects), the better suited an empirical model, such as Agile, is because it allows you to let your requirements evolve and become refined over time as you learn more.


Question: What are the most important things without which you will never run an Agile project?

Yvette: Agile training for everyone, including management, is important, so that everyone has a common understanding of the processes they are using. Retrospectives, in which the teams regularly assess what worked well, what could be better, and what they want to do differently in the next iteration are also important so the team continually improves.


Question: How to plan for project with relatively un-known area of development? Do you recommend any special technique?

Yvette: Again, the more unknowns there are, the better it is to use an Agile methodology so that learning more is part of the process. There are techniques called "spikes" that allow development teams to do "time-boxed stories" to allow them to learn more about the unknown area.  They could do a small proof of concept or prototype, for example, to discover more and reduce the level of uncertainty.

Question : After so much experience do you feel Agile is actually more expensive than SDLC methodologies?

Yvette:  It depends on a lot of things. It can be expensive to change all your tooling and processes, so if the organization is heavily invested in traditional methodologies, it can be quite expensive to change. On the other hand, studies show that Agile projects are more successful than traditional Waterfall projects, and, obviously, unsuccessful projects are very costly.

Question: Please share a conflicting situation you had on project and how did you gone about resolving it.

Well, in the Agile world, one common conflict might be disagreement about how long it might take to code something (or how many "story points" a user story is). One way to resolve this is to maybe have a "spike" story (as described above), or to make the story smaller so there are less unknowns.  (A "story" is a small unit of working code or what might thought of is a "requirement" that results in working code.)


Do you have any or recommend cheat sheet/mantra for Agile projects for newbies?

Yvette: There are so many Websites and classes available that it's hard to recommend one. Scrum is the most common methodology by far, and the Scrum Guide is available for free. I also think Mike Cohn is a great teacher and there are online courses available from his site, Front Row Agile. You might also check The Agile Alliance for resources. It would be good, though, if teams were learning from the same courses or resources, though, since there can be quite a bit of variation in opinions, terminology, and Agile methodologies.

I would recommend all Agile newbies to download the scrum guide and refer Agile Alliance to get your head around the buzz words of Agile.
Thanks Yvette for your time!!

March 24, 2016

How to shutdown Siebel server in < 5 seconds?

Getting late for lunch date with girlfriend and damn Siebel server won't stop. Ever been in such situation??

Well I have been. This is my actual story, don't worry I am not going tell stories about my partner, it's about our favorite Siebel server which sometimes won't come down for good 10 or more minutes, don't expect anything for starting up.

Before I tell you the trick how I made it to my date on time, let me warn you about the repercussions. It's highly dangerous way of shutting down the siebel server, don't try this in important environments, use it only if you have no regards for your employer. And be aware that this could corrupt your installation or cause data corruption.  But hey! do partners care? if you kept them waiting, you will have to face the music for entire year or more.

For the siebel people in love, this is what you have to do to get to your date on time:
  1. Open command prompt on Siebel server host(I have tried this windows host only).Get the process id (PID) of Siebel server by running this query:

    sc queryex siebelservicename
  2. And then run following queries in exact sequence by replacing PID found in output of above statement :
    taskkill /f /pid 10116
    taskkill /im siebmtshmw.exe /f
    taskkill /im siebmtsh.exe /f
    taskkill /im siebsess.exe /f
    taskkill /im siebprocmw.exe /f
    taskkill /im siebproc.exe /f
Voila ! Siebel server is down . If you are successful you will see memory getting free faster than ever, srf will  be available for update and you can start the Siebel server the way you like.
Siebel Server memory consumption
And will see output like:

Shutdown Siebel server by command line

If you like this post and would like to see more like this, then please plus one this blog.

March 22, 2016

How to use Siebel Product Configurator API in Workflow?

What is Product Configurator API? 
Siebel product configurator API is bunch of Siebel business services and methods which allows to add order item under a root customizable product which complies with rules and validations defined in product model.

It is much more cryptic and complex if one starts with the bookshelf.

@renjith shared this beautiful document on slack community.This example explains how we can invoke Siebel Configurator API in correct sequence to add line items in an order.
Product Configurator API in Workflow
In this example, workflow first creates new order and a order line item for root customizable product using Siebel Operation Step. And then it invokes Remote Complex Object Instance service(API) methods to add line item under the root customisable product.

Product Model used for demo :
Siebel Product Model
 Business Service executed in sequence are:

  1. ISS Copy Service :: Load EAI
  2. Remote Complex Object Instance :: LoadInstance
  3. Remote Complex Object Instance :: CreateSession
  4. Remote Complex Object Instance :: SyncInstance
  5. Remote Complex Object Instance :: UnloadInstance

Level of simplicity and details shown in the document is just awesome. Hats off to @renjith!!

Download the document from here. If document has been helpful, then please plus one this post to let @renjith know.

If you have similar articles and would like to share with all viewers then please let me now in comments below. I will be more than happy to share.

March 14, 2016

Scenario based Interview Questions - Part 2

This is the second post in series of Scenario based Interview Questions . I recommend you to read first post of this series where we discussed Siebel Configuration Interview Questions before going through this post.

If you like the questions and would like to see more like this, then please +1 this post on google.

March 10, 2016

Scenario based Interview Questions - Part 1

Long ago an avid reader of the blog requested me to post some scenario based interview questions, and sent some good samples as well. I asked the same on siebel-developers slack community and got some really good answers. This is a three post series so stay tuned for next two posts.


If you like the questions and would like to see more like this, then please +1 this post on google, and don't forget to share your answer in comments below.

March 06, 2016

Is siebelhub.com down?

Is siebelhub.com down ? Probably not. I am sure team is working hard to keep it up , by the time you will read it, site will be back up.

Today for siebelhub.com CDN and host keep erroring out every now and then :( You might see following error if that happens.

Server Error:
Siebel-Hub is down?
or Cloud flare :


I know the feeling, when you are in middle of doing something and best siebel resource "Siebelhub" goes down, bummer!

Today I am going to share tricks that I use to view offline sites. It's not specific to siebelhub.com and can be very useful.

Solution 1: Use wayback machine. 
This will be simplest  and the best solution to view any website in past point in time. Way Back Machine has cached copies of nearly all websites in world and copies are available to search quite easily. I found a good cached copy of siebelhub.com on : http://web.archive.org/web/20150130060038/http://www.siebelhub.com/main/blog

Solution 2 : Use chrome's offline mode
Use this solution if you are offline. Like other browsers offline feature is also available from chrome, however it is hidden in chrome://flags . Good part of this is that you can view cached websites from your mobile device as well.


Step 1
Step 2
Step 3
To enable cache views open chrome://flags on any device and enable show saved copy button. After this whenever you are offline you will be presented with an option to view the cached copy from your device. However it is not guaranteed that all the webpages you opened will be available in device cache.

BTW, Do you know chrome has on offline game and it starts when you click on the dinosaur?

Solution 3: Use https://www.httrack.com - Desperate Measure
Don't try this at home. This is an open source tool which copies the whole website to your local pc. and the data is cached on your device for as long as you want.

Hope it helps.

PS: Posted just for the love of information present on siebelhub.com. hats off to guys who built it.

February 28, 2016

SBL-DAT-00501 : Invalid search specification ' < ? > '.


We detected an Error which may have occurred for one or more of the following reasons:
Invalid search specification '<?>'. Please continue or ask your systems administrator to check your application configuration if the problem persists.(SBL-DAT-00501)



invalid search specification <?>
SBL-DAT-00501
This error can come out of the blue moon and can cause some serious time waste and frustration. I learned to resolve it the hard way. In my case it was only occurring in the dedicated client and same srf was working on server perfectly fine.

This is error doesn't mean there is problem in search spec in eScript or MVLs or BCs. It usually occurs when calculated fields is having issues.

Possible reasons for this error:

  1. Any type of syntactical mistake in calculated fields
  2. Presence of carriage return in any calculated fields
  3. Calculated fields declared as DTYPE_TEXT however they are compared in another calculated field as integer.

How to resolve it?

  1. Turn on the siebel logs to level 4 and try the scenario again. And search for the error code in log file. 
  2. Just above the error code you should see the calculated expression which is causing issue. 
  3. Now go to flat tab and search with this calculation to find calculated field. Once culprit is found, BC recompile after change does the job.

Hope it helps.

Dynamically change start-up view for group of users

Requirement: To have a different start-up view for certain group of users in application.

Siebel sets start-up view of all the users using Application property which is a static view and the only way default view can be changed is by end user by updating user preferences. 

Solution: To make the view dynamic and override the user preferences following script can be added to Application_Start event of Application to redirect all the users to a specific view based on their responsibility.  These views can be used to show statuary information or terms and conditions.

Script queries Employee BC for logged in user and search for specific responsibility and executes a go to view if specific responsibility is found. Similar script can be used to change other part of the application. Feel free to share in comments below if you have come across similar behavior in your implementation.

var EmployeeBO = TheApplication().GetBusObject("Employee");
var EmployeeBC = EmployeeBO.GetBusComp("Employee");
var userResp;
with (EmployeeBC)
{
ActivateField("Login Name");
ActivateField("Responsibility");
var UserName = TheApplication().LoginName();
SetSearchSpec("Login Name", TheApplication().LoginName());
ExecuteQuery(ForwardOnly);
if(FirstRecord()){
userResp = GetFieldValue("Responsibility");
}
return (CancelOperation);
}
if( userResp == ""){
{
TheApplication().GotoView("");
}else{
return (ContinueOperation);
}


Hope it helps

February 18, 2016

Siebel Open UI Interview Questions plus bonus jQuery tips

Question 1 : What are different layers of JavaScript classes in Open UI ?

Answer: Siebel Open UI framework provider 4 different type of js files , proxy, presentation model(PM), physical renderer(PM), and plugin wrapper(PW). Out of these only PM, PR and PW are recommended to modify and extend. Proxy is an interface between Siebel server and browser, thus should never be changed.

Siebel Open UI Architecture

Read more

February 06, 2016

JavaScript Execution Sequence of Siebel Open UI


Hope everyone remembers Siebel event model explained by +Alexander Hansal 
No doubt that is one the best post in Siebel blogosphere till date, in case you haven't read it, I would recommend you to go through it here. This model still holds true and has helped many businesses to model processes. However with introduction of Siebel Open UI there are few more events available for customization on browser side. 


In this post I will show you how Open UI invoke different events and methods on custom PM and PR JavaScript files.

For this proof of concept I have created and associated PM PR files with some logging for all the applets and views. I have also wrote some browser script in applet load event in tools. Following summarizes what I found.

Sequence of JavaScript Execution in Open UI

What I found out that view PM layer is the first in sequence of execution, it is executed even before preload event. Thus all the data is available in preload to build the UI. Preload.js is not the event if someone is looking to execute at very start of view building.

Sequence of execution breakdown
Breakdown of events shows that List applet are executed first by Siebel Open UI (even if they are child objects). I suspect it is done to improve performance.

Additionally Applet load event are executed at last. Thus technically it is possible to override events available in "pre" Open UI era browser scripts in Open UI.

Points to be noted here that:

  1. Prelaod.js is not the first thing which gets executed during a view load.
  2. Open UI executed PM layer for view first and then applets, however for PR layer, applets were loaded first then view.
  3. Open UI also seems to execute list applet code first than form applet irrespective of hierarchy in tools!!
  4. After all the processing of PM PR layers(including view), Siebel at last executes applet load event of tools browser script.
Console Outputs:






Hope this will help developers to know the correct event they need to code and execution sequence in which Siebel will execute the code.


For this experiment I have created following PM / PR files .
  • OpportunityFormAppletPM
  • OpportunityFormAppletPR
  • OpporunityContactListAppletPM
  • OpportunityContactListAppletPR
  • OpportunityDetailContactViewPM
  • OpporuntiyDetailContactViewPR
  • OpportunityListViewPM
  • OpportunityListViewPR
  • OpportunityListAppletPM
  • OpportunityListAppletPR

All files I have used is available will be available for download soon.

Thanks to Duncan Ford for helping us in getting us code ready by creating the beautiful template generator.

Happy to discuss in detail on slack community or in comments below.

February 04, 2016

Chrome's hidden menu for Open UI

If you are working on css or js changes for Siebel Open UI, you would be struggling with browser caching. I have noticed some cache even when I am using incognito mode of chrome.

Out of frustration one might end up installing chrome app/plugin to forcefully clear cache. One of them is "Clear Cache" 

Interestingly chrome has now created a very discreet "Empty Cache and Hard Reload" option for developers. To see this option open developer tools by pressing F12 and then press and hold reload button. I have been using this option from past one week and it worked every time as expected.

Chrome Hard Reload for Open UI


Please be mindful that this is an hidden menu and only shows up when chrome's developer tools are open.


Happy coding :)

January 23, 2016

My top 5 Siebel Mistakes in 2015

I received a very candid email from a reader, asking me what mistakes I make in Siebel development and how do I overcome those?

Surprisingly I had a long list of mistakes, and I wasn't doing anything about it. So I decided to write this post to attempt on reducing these mistakes.




I believe in learning from mistakes, thus I challenge all my readers to list down their mistakes and leave them in comments below. Remember no one is perfect, so don't be shy and leave comment.

1. Using InvokeServiceMethod in calculated fields.


This is biggest performance degrader.I regret this one the most, I used this trick to calculate an status of opportunity and it turned out to be biggest technical debt of all time. No one want to fix it now and it is stuck there churning away time, memory and CPU every time it is referred.

2. Not checking CountRecords() Or FirstRecord() before get field value.

This is one of my most frequent mistake in Siebel. It goes unnoticed because the logic works for mostly all scenarios but one, what if there are no records retrieved from query? Siebel is going to throw it back to you, logic won't proceed and service will halt making you accountable.

So please don't be a Jim and always check for record count or First Record before proceeding.


3. No comments

Leaving no comments on blog post is ok, but leaving no comments in script is a big no no. Have your ever noticed how much easy it becomes if there is one of two line of comments in script? just one or two line makes it so convenient for developer to understand the code without going into details.

My self plead guilty of committing this some time.

If I have to create a standard I will try to use following template for comments:

/*
[jim] [25 Dec 2015] [ added code for xxxxx reason, code is invoked from xxxxx places]
*/

simple isn't it? Please share in comments below what type of comments you use.

3. Not nullifying objects after use.

Developers believe that ST script engine will clear up memory for them. But no memory leaks are real still in Siebel 8. So please Jim don't make that mistake again.

4. Try catch finally block
This is the only way for keeping some dignity, and we still avoid it to save time.  Do you also make that mistake?

5.  Using profile attributes.


They work like magic in some scenarios, but it is so difficult to trace them back, and using it in Open UI is like calling Mayhem. Please share your thoughts on this. How do you trace back the creation of profile attributes?

Please don't forget to leave your list of mistakes in comment below.

January 16, 2016

How to get name of siebel server in eScript?

I found this script recently on support web which allows us to get value of Siebel server name, log directory of the current session. I quickly extended script to get value of siebel task id and process id to help me in my debugging.

These values can be very useful if you are working on multi server issue. With the help of task Id I was able to find the log of current session without opening each log file. Please share in comments below on how you choose to use this script.

var serverSession_BO = TheApplication().GetBusObject("Server Admin - Sessions");
var serverSession_BC = serverSession_BO.GetBusComp("SA-VBC Session");
var taskParam_BC = serverSession_BO.GetBusComp("Server Task Parameter");

serverSession_BC.ClearToQuery();
serverSession_BC.SetSearchSpec("OM_LOGIN", logInName);
serverSession_BC.ExecuteQuery(1);
serverSession_BC.FirstRecord();

taskParam_BC.ClearToQuery();
taskParam_BC.SetSearchSpec("Parameter", "Log directory");
taskParam_BC.ExecuteQuery(1);
taskParam_BC.FirstRecord();


var compName = serverSession_BC.GetFieldValue("CC_ALIAS");
var siebsrvrName = serverSession_BC.GetFieldValue("SV_NAME");
var task_id = serverSession_BC.GetFieldValue("TK_TASKID");
var p_id = serverSession_BC.GetFieldValue("TK_PID");
var logDir = taskParam_BC.GetFieldValue("Current Value");


Additionally one can also find the windows process id and thread id by using following script.

var processId, taskId;
processId = taskId = ""; // initialize to satisfy eScript parser

//evaluate to suppress STDCALL not being recognized with eScript parser
eval('processId = SElib.dynamicLink("kernel32.dll","GetCurrentProcessId", STDCALL)');
eval('taskId = SElib.dynamicLink("kernel32.dll","GetCurrentThreadId", STDCALL)');

processId = processId.toString();
taskId = taskId.toString();

I bet you wont be able to do this in any cloud application. :)

Hope it helps. 

November 13, 2015

Let's Slack

Have you noticed declining activity on siebel community on IT Toolbox? There is hardly any other community where you can get your answers quickly.

And as a wise man has said All work and no play makes Jack a dull boy, I am starting a new Siebel-Developers community on slack. http://siebel-developers.slack.com
Slack is fastest growing community platform, there is no bullshit for email or waiting for approval. Simply talk to fellow team-mates straight away. Share ideas, make new connections and have fun with fellow siebelites.



Share files and get help in real time.

you can access community from mobile or desktop.




Only drawback of the platform is that invite has to go on email address, so please register to this blog to get invite. I have sent invite to all registered readers till date, hope to see you all there.

Let's Slack Siebel :)

November 10, 2015

What are the limitations of Siebel Workflows?

This question was asked by one of readers of this blog, and it quickly got me intrigued to research for answer. While doing research I compared the capabilities of Siebel workflow vs Siebel scripting, and got amazed with results.




I started of by listing things which I thought wont be possible in workflows however I got surprised with its capabilities as I dig deeper. I am classifying results as Myths, Facts and Limitations.

Myths

Myth 1: Run time events doesn't work from workflows.

Absolutely wrong, runtime events are tagged to bus comps and work the same in workflow as they work on UI.

Myth 2: Can't update read-only fields in workflows.

One might think that as it is not possible to set admin mode to true in workflow thus it wont be possible to update read only fields. But that is simply a myth.The fact is that there is no need to set admin mode to true in workflows, read only user properties are inactivated for workflows all the time!

Myth 3: There is no way to associate and disassociate records of MVG BusComp in workflows.

If Siebel operation is used on detail bus comp, delete operation acts like dis-associate and insert like an associate.

Myth 4: Workflow can not query based on calculated fields.

Not True. Siebel Operation search spec can be created using Calculated fields, however be cautious of performance impact in case you plan to use calculated fields in search spec.

Facts


Fact 1: Cannot query on child BC directly in Siebel workflows. Workflow always queries Primary bus comp first.

True, however I don't consider it as limitation as one can create workflow based on a different BO which has child bus comp as primary buscomp, and there are many business services available which can query data from another BO without creating another sub process.

Fact 2: There is no way to change primary record in MVG in workflows.

This one I am not too sure about, would like to know from the experts, how they have overcome this problem.

Limitations


Limitation 1: It is not possible to change view mode in Workflows?
Siebel Operation step always queries database with "All View" view mode there is no way to change this pragmatically.


Limitation 2: It is not possible to pass variable by reference in to a workflow.
This seems to be the minor limitation of the workflow, however it does not limit the capability or usage in anyway.


Limitation 3: There is no native way of executing Clib functions in workflows.
There are lot of functions available for execution in workflows however Clib is not one of them. Thus if there is a need to call Clib function through workflow you will have to call a custom business service.


Limitation 4: There no native way to execute methods on application or BC level.
Agreed as limitation unless someone suggests any way out. Some BusComps exposes some methods that can be executed only with scripting. For Example: 1. RepriceAll Method on Quote Item and Order Items. 2. GetFile Methods on Attachment Buscomp etc..

 

Limitation 5: It is not possible to set sort spec on Siebel operation?
This seems to be the only glaring Limitation of workflow/Siebel Operation that Siebel operation does not contain any way to query based in a sort spec. Arguably one can say sort spec can be specified on bus comp, however it wont be wise to clone buscomp just to change the sort order. Would like to know what readers think?



I don't believe that this list is complete in anyway, hoping to get some answers from community. Please feel free to contribute your thoughts on this topic, would be more than happy to be proved incorrect on the points above.

October 25, 2015

Download Siebel Interview Questions - PDF

I have published all the Siebel Interview Questions in a easy to read PDF e-book  format, it will be available for download freely.

To get the download link, register your email and leave a comment below.
Siebel Interview Question eBook


Siebel Interview Question 2015 PDF  Contains interview questions on :

Siebel Workflow
Siebel EAI
Siebel Configuration
Siebel Scripting
Siebel Open UI

Updates to PDF will only be sent to registered readers. After registering with email do not forget to leave comment below and plus one on google to receive the link.

Get Download link:



October 24, 2015

Links Demystified

I feel no shame in admitting that it took me years to fully understand the extensibility of Siebel links. I hope after reading this post you will start appreciating the Siebel even more as I did.

Let's look at the simpler links first.

1:M links
These links creates simple parent child relationship. One parent can have many children. And children records have parent id (foreign key field).


Order Entry - Orders : Order Entry - Line Items link

Order Entry - Orders and Order Entry - Line Items is perfect example. Source Field is "Id" of "Order Entry - Orders" BC and destination field is "Order Id"  of Order Entry - Line Items. Whenever system creates a line item under an order record, Siebel populates order id on order item record with ROW_ID of Order to create relationship.



M:M links
These are also comparatively simple links. Two entities (table) are related to each other using an intersection table. Intersection table helps to associate one child to other parents as well.

Account Contact link using S_PARTY_PER


For example Account and Contact link. This link allows to associate one contact to multiple accounts. In addition to the inter table Siebel stores id of primary record ( primary id field) to improve performance.

Now let's look at the interesting bits.

M:M links with source id field specified.

In standard M:M links these fields are blank and inter table stores the ID of both parent and child records. When parent id field is also specified with inter table Siebel uses field value instead of ROW_ID of parent to create intersection record.These types of links are not very common but are possible.

For Example:
M:M link with Source Field specified





Lets consider Action/FINCORP Account link, this link has Source Field specified as Primary Contact Id which means when child records are created using this link Siebel will populate Contact Id into Inter Parent Column instead of Action Id.

M:M link with both inter table and source and destination field specified.
Things now gets more interesting when both source and destination fields are specified and inter table is also specified.This way Siebel uses fields specified on the links instead of Id to create association.

Link with both Source Field and Destination Field along with inter table.
The link shown above specifies Campain Id and Destiation Field as Contact Id, thus while creating record in inter table Siebel will use Campaign Id fields instead of Id and Same applies for destination field. Interesting isn’t it???



Finally links which are overridden by MVL's
If you are following it correctly then you might think all these complicated links should be able to satisfy all possible scenarios. Just then Siebel steps up the game with multi value links. On these MVL's definition Siebel allows to override the parent id being used on the link.

So with help of primary id field override, potentially in action to contact mvl instead listing all the contacts of selected activity, Siebel can show all the contacts of parent account selected on activity. :) This over riding is allowed both on 1:M link and M:M link.


Cheat sheet for your desk:





If you have understood all of the above then I would recommend you to explore how links are used for access control and visibility of detail bus comps.

Hope it helps.

October 09, 2015

Using MVG aggregate functions

Originally posted on blog.notesonsiebel.com on April 5th, 2007 by stuandgravy

Karan asked a question the other day: how to prevent the Status of a Service Request changing until all child Activities have been completed? This type of business rule is exactly what State Models are designed for: set up a model on Service Request Status and restrict transitions to the target status unless a condition has been satisfied. The difficulty in this example is how to write a rule based on child records?

State Model Rule Expressions use the same format as calculated field values, so the same MVG aggregate functions are available. The functions Count, Sum and EXISTS all derive a single value from a Multi Value Group and are an underused way to reduce scripting.

In the example given, Service Request has an MVG Action linked to the child Activities, so we can add a Multi Value Field to point to Action.Status.

A rule expression Not EXISTS([Action Status]<>'Done') in the State Model transition gives the desired restriction.

There’s a good example of the EXISTS function in use in the vanilla Siebel 7 repository: see BC Contact field Exists New OutBound Email Activities.


Searching Calculated Fields and performance



 Originally posted on blog.notesonsiebel.com on April 3rd, 2007

The other day I was asked whether it’s possible to search calculated fields. The simple answer is yes – as can easily be tested. The complete answer’s a little more complex: query the wrong calculated field and the application will hang, CPU resources off the scale. So how can you predict what calculations are going to cause you problems?

When you execute any query, Siebel converts the user’s logical instructions to SQL. It doesn’t always do an optimal job, but you can usually be sure that most of the effort will be pushed to the database server. The problem with calculated fields is that certain functions don’t have standard cross-platform SQL equivalents.

The IIf function, for example, will never be translated to native SQL. When your field calculation contains an IIf statement, Siebel will write SQL to return a superset of data. The Siebel object manager is then left with the job of paging through the results, evaluating the calculation for each row. Needless to say, if the incomplete SQL returns a large dataset, this ain’t going to be fast.

In any particular example it’s worth eyeballing the SQL to confirm where the calculation is happening, but you can definitely expect problems with the following functions:

IIf
IfNull
ToChar
Right

Unfortunately, there’s no configuration way to prevent searching on an unpleasant field. If you’re running into problems then you’ll have to hit the PreQuery event with some scripting…

Changing the Local Database Password



 Orignally posteed on blog.notesonsiebel.com on March 29th, 2007 by stuandgravy

Users forget their passwords – that’s just the way it is. Without picking on anybody, certain users (cough sales guys cough) are particularly prone to this. And more often than not, they’re remote users who’ve not synchronised their local database for a week and desperately need their updates.
As with the server database, there’s no way to retrieve the current local database password. Password hashing algorithms are repeatable, but not reversible – sensibly enough. It is possible to change the password to something new though.

Connect to the local database, then run these SQL commands:

grant connect to USERNAME identified by PASSWORD
grant connect to SIEBEL identified by PASSWORD

Where USERNAME is the login for this database and PASSWORD is the new password (both in upper case). If for some reason you don’t know who the local database belongs to, the login can be retrieved with this command:

select name from SYSUSERAUTH
where name not in ('SYS','DBA','PUBLIC','SIEBEL','DBO','dbo','SSE_ROLE')

More often than not, you’ll also want to reset the server database password to match, so that you can sync up those outstanding changes. On Oracle, this is your usual:

alter user USERNAME identified by PASSWORD

There’s more info in SupportWeb TechNote 25, including scripts for different versions of SQL Anywhere to automate the process.

How to interview a Siebel Resource?


Originally posted on blog.notesonsiebel.com on March 26th, 2007 by stuandgravy
I’ve interviewed a bunch of Siebel techies and have evolved a few favourite questions, all based around the same theme: attempting to uncover technical breadth while avoiding obscure ‘gotcha’ questions. Things like this:

Q: How would you update a second field every time a first field is changed?

This is a great question: simple enough that a junior dev straight out of a tools course should come up with a few options and have some idea how they weigh up, but broad enough that a senior techie can lead you into detailed discussions about performance vs maintainability, good practices, upgrade issues, etc etc.
If the candidate’s running out of steam, leading questions can coax them toward more inventive answers.

For instance:
  • What if the second field is in a different business component?
  • What if there are multiple fields to be updated?
  • What if the second update needs confirmation?
  • What if the update still has to happen for batch (EAI/EIM) updates?

To the answer: I reckon the following is not a bad list to cover-off, but there’s still a few missing…
User Properties
+ minimal config
+ real time
+ robust (mostly!)
- limited
- require srf update

Runtime Events to Workflow Process
+ most things possible with native, compiled Siebel Operations
+ declarative, flexible, upgradable without srf update
+ long-running workflows for multiple consecutive events
+ real-time, optional asynchronous
- no loops (almost) without custom business services
- overhead of instantiating the workflow first time (then cached), which can have a big impact on mobile users

Server scripts
+ simple to write
+ low overhead
- not declarative, requires srf release
- higher level than vanilla C++ services (so slower, in theory)
- limited possibility to interact with the user


Browser scripts
+ opportunity for full manipulation of DOM, real-time interactivity
- maintenance headache (generating script, keeping versions current)
- interpreted at run-time (so slower, in theory)
- limited speed, memory space etc

Workflow Policy to Workflow Process
+ fully robust database-level trigger
+ fully asynchronous
- not real time, interactive
- not declarative, requires DBA maintenance

Locally unlocking a locked Project


Originally posted blog.notesonsiebel.com on March 22nd, 2007 by stuandgravy

With multiple developers building one application it’s inevitable that multiple developers will need to change the same project at the same time. There’s pros and cons and object-locking and change-control and build-control etc etc, but sometimes deadlines are too tight and you just have to fork.

In Siebel Tools, once one developer’s got a project locked the UI won’t let a second developer anywhere near it. To get around this you need to get into SQL Anywhere. Login to the second developer’s local database, then the following script will unlock the project locally:

UPDATE s_project
SET locked_flg = ‘N’
WHERE name = <Project Name>

The second developer can now log into Siebel Tools, manually lock the project as normal and do what she has to do. Of course, once build is done the two developers will need to go through a merge exercise to get their changes into the one repository, but that effort can be preferable to losing days of development time.

September 19, 2015

Siebel PropertySet Demistyfied [Infogrpahic]

This is my first post in response to analysis of Google Analytics search reports. In this series I will look at search terms searched by Siebel developers on Google and try to answer them with infographics.

Recently someone landed on How to Siebel? by searching keywords on Google: "Difference between GetValue() and GetProperty()"

There is ample information available on property set methods in bookshelf. Here is my answer using infograph.
Siebel Property Set Methods


GetValue() method returns the value of the property set, in example above  output will be : "My Value"

GetProperty() method returns the value of the specific property, in above example GetProperty("Weight") will return "1500"

If you looking for advanced property set concepts and traversing methods, then I will recommend going through How to traverse property set @ SiebelUnleashed

To receive more articles like this please subscribe via email by submitting form below.

September 18, 2015

Remove tiny X icon from MVG and Picklist fields in Internet Explorer


MVG and Picklist fields of Siebel IP2013 shows a tiny X icon on right end, on clicking this icon data in the field is cleared. Due to awkward positioning user end up clicking it unintentionally. This behaviour is only available for IE browser.
X in Account Field
X in Currency Field


This was added by oracle in hope to improve usability, but it has received lot angst from end users. Instead of improving user experience it risks of losing data in case of miss click.

Luckily there is simple css solution to remove this icon. Following line in your custom css can remove this unnecessary usability trick from entire application.

input:focus[type="text"]::-ms-clear{display:none;}

Input text fields with this css looks amazing just as in chrome and firefox.

CSS fix for Pick list fields

Currency Field in Siebel Open UI

Hope it helps.

September 15, 2015

Interview with Neel @ siebelunleashed.com

Last month Neel author of siebelunleashed.com announced the biggest change of his blog and change in his career.

For many it was predictable but for someone like me it was kind of a shock. It raised several questions regarding Siebel future. What is causing experts like him to leave Siebel? Is Siebel really dead? What is the future of Siebel?

I decided to understand the situation more in detail and managed to interview Neel on his decision, and was amazed with his answers.

Neel answers gave a really good insight of the Siebel market as whole and given signs of Siebel future I would like share the analysis in my next post along with more facts.

Have you been in similar situation as Neel? Then please share your thoughts with us in comments below.




Here is the interview :


Jim : Why did you choose to move away from technical role when you are distinguished Siebel developer in community? With growth of Open UI  you could have had ample playground to play on.
Neel : Jim I did not choose to move away from the technical role, I choose to move away from hands-on technical role and believe me that was not an easy decision. This role allowed me to be in touch with technology but now I was just not restricted to Siebel whole CRM and more became my playground.

After the challenge of initial learning and implementing Open UI life started getting comfortable and I couldn't see myself writing PM/PR's for next few years. I knew this role will take me away from my comfort zone and thus helping me grow by increasing my comfort zone. Now, creating a Solution roadmap for million dollar CRM Proposal is no big deal

Jim : What were the top three reasons that made you switch? Is you current employer pushing you is one of them? or this decision is voluntary as  Siebel future is uncertain?
Neel : When I switched this role I had no doubt about Siebel's future. I believed that with Open UI it is just a matter of time people are going to lineup to upgrade and implement Siebel. So, Siebel's uncertainty didn't have anything to do with my switch. Yes, my organization or specifically my manager was one of the reasons for me to switch as he wanted to me get out of day to day churn and act as CRM Subject Matter Expert (SME). It seemed a logical next step to move towards proper architect or solution role and that's why I changed.

Jim : How are you finding the new technologies as compared to Siebel? Would you say Salesforce and MS Dynamics are technologically advanced than Siebel?
Neel : Salesforce and MS Dynamics are interesting and they are evolving. There is far less functionality available in both as compared to Siebel and they are far more restricted in terms of customization. So, technically they are inferior to Siebel and when I first started working on them I thought no way an enterprise application can be hosted on them.

But people are making beeline for them. The cost difference is so big that they are ready adapt their business processes according to the available functionality and features. Salesforce is circumventing its limitation through their App Store know as AppExchange and MS dynamics is following suite.


Jim : What are the most annoying things in Siebel that you hate? like new siebel support agreement or boundaries of Siebel configuration?
Neel : When I look at Siebel now then I realize how vast and complex it is as compared to other products out there. The architecture that they created more than 10 years ago is still valid.  So, I don't hate anything about Siebel now but there are couple of things that they can add to make it awesome such as new IDE Siebel Tools, support of REST services.


Jim : If you were given opportunity to change the direction of Siebel as product what will you change?
Neel : I wouldn't want to change the direction of Siebel but I would like to make it faster. If OpenUI would have been delivered alongside salesforce then things might have been different. They are moving towards merging On Premise and their Cloud offerings. Eventually it will be something like MS Dynamics offering where you will get choice of deploying same product either OnPremise or Cloud. One thing I would make sure to include quickly is support for REST based services as they are important for Web Base development and integration.


Jim: What are the best features of Siebel that you like?
Neel : OpenUI has to the best feature by far that I like in Siebel with only regret that it was at least 3-5 years late in arriving.


Jim : What will you suggest to a Siebel developer at this market state? If experience level of consultant is 5 , 8 or 10 years, would you suggest them to switch or stay put?
Neel : I believe the days where you could learn one skill and then use it for next 10 years are over. It doesn't matter at what experience level you are (5, 8, 10) you have make an habit of learning new skills.  Siebel jobs are going to be there for a long time but unfortunately I don't see many new implementation of Siebel. So, I assume that most of the jobs in future are going to be for maintenance projects something similar to Mainframe jobs. So, switching is person choice based on person's interest.

But if I have to recommend something apart of Siebel then I would recommend BigData instead of Salesforce as many might be expecting. BigData is an area that is evolving, exciting and challenging, it has great scope for at least next 5-10 years.


Jim: Have you closed all doors for Siebel? Or can there be a comeback in future?
Neel: I am trying to move towards an true architect role where you look at different technologies from 10000 feet and then try to put different pieces together to complete a jigsaw puzzle. So, Siebel as a technology is not out of picture but my hands-on days on Siebel are over for sure.


Jim :Finally, what do you think is the future of Siebel? I know you avoided this topic on your blog, would like to comment on it now? or share some of your thoughts or share any trend you have experienced on your blog?
Neel : Oracle's focus is more on  its Cloud Offerings. Oracle Sales people have been directed to sell On Premise solution only in certain cases such as where deal is of large size or a new customer account is being cracked otherwise they have been instructed to sell On Cloud CRM products. I came to know about this while dealing with Oracle Sales person for a Siebel Proposal (thanks to my new role). That makes me believe that they are trying to merge their Cloud & On Premise offerings. All the development in Siebel (Tools on web, New theme making the UI similar to Oracle Sales Cloud) seems to be also pointing to same.

If you look at market statistics customer are adopting cloud technology in masses. People are sticking to Siebel either because they are heavily invested or they believe other products don't offer what they need. Salesforce recently announced launch of their vertical clouds focused at industries such as Pharma, Media, Finance similar to Siebel Verticals. If they are successful in launching a quality product, that means customers concerns around functionality will be addressed and given the price difference it will be only matter of time before they move on.  Siebel was market leader because it came in ahead of its time but Oracle's cloud services are still playing catch-up. So, until and unless Oracle can expedite it's rollouts it will always be playing catch-up.

So, to conclude I believe Siebel as product might not exist in not so far future and Oracle will offer one CRM product with choice of On Premise and Cloud Deployment.
 


Please share your thoughts in comments below. And register your email to receive email updates.


- Jim

August 29, 2015

Top 10 most annoying features of Open UI!

I am back with another installment of #ShameOnOracle series. I have been doing talking with lot of Siebel users recently, Strange enough I got almost the same reactions when I asked user what they don't like about Open UI.


From the reactions I have created this list of Top 10 most annoying features of Siebel Open UI:

  1. No vertical scroll in list applets.
  2. No hour glass for system processing.
  3. No popup multi-line text areas.
  4. MVG lost shuttle applet.
  5. Attachment drag and drop doesn't work.
  6. On the fly attachment update is not supported.
  7. Product configurator is slower than HI product configurator
  8. Screen real estate is not utilized properly in 8.1.1.9 to 8.1.1.14, lot of blank spaces left on UI.
  9. Keyboard shortcuts doesn't work properly.
  10. Document title is not static.

Please be mindful that these list of issues faced by end user at my current customer only and does not represent all users of Siebel Open UI. Issues presented here might not look like an issue to you personally or your customer.

Did you receive same reactions anywhere? Please feel free to share your feedback or solutions in comments below.

#ShameOnOracle

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