Wednesday, September 11, 2013

Error Opening Dedicated Application in Chrome

Add to the last issue, I was also facing some issues in launching a dedicated client in Google Chrome, as whenever i was opening it i was getting the error as below : 
Oops! Google Chrome could not connect to localhost:8080

With some of the time spent in debugging this issue, i have found that Google itself given the steps to solve this one. Let me explain how.
When you get this error. There is one link which will appear at the bottom of the browser mentioning as : 
Why am I seeing this page ?

Once you clicked this, click on the link : 
Enable or disable suggestions on navigation errors

There will be below instruction which you will get on clicking the above link as : 

Suggestions for navigation errors are enabled by default. Follow the steps below to turn the feature off.

1. Click the Chrome menu Chrome menu on the browser toolbar.
2. Select Settings.
3. Click Show advanced settings and find the "Privacy" section.
4. Deselect the "Use a web service to help resolve navigation errors" checkbox to disable the feature. Select the checkbox to enable it again.

Also, make sure that you run the genb everytime you compile changes on srf before launching the dedicated client. If this is not done, you will end up with blank screen on the launch of dedicated client.

Keep Exploring !!!



Error while validating Product in version 8.1.1.10

Recently i have been working on an OpenUI POC, and while validating a product i was getting the below error : 
[1] Error invoking service 'Cfg Web UI Service Loader', method 'LoadCfgUIservice' at step 'Go to UI'.(SBL-BPR-00162)
[2] 'Price List' is a required field. Please enter a value for the field.(SBL-DAT-00498)

This error was coming when i was logging in the application with my user id. Although it was working fine with another user.

Cause : Price List of the respective product should be associated with the user who is validating it.

Resolution : To resolve this error, please follow the below steps : 
1) Go to user preferences.
2) In view links, go for Price List & Sales Methodology
3) Associate the price list which is there for the product which you    are trying to validate.

And that is it. Try validating the product now and it will get validated successfully. I hope this little piece of information will save significant amount of time. Happy Exploring !!!

Tuesday, August 6, 2013

Error(null) involving method "(null)" for Business Service "(null)"

Recently we have got an issue highlighted from one of our environment, where RCRs were stuck in Queue under Repeating instances and tasks were not getting created. Also the below error were getting logged : 

Error Code : SBL-OMS-00203
Error Message : Error (null) invoking method "(null)" for Business Service "(null)"

This error could for number of reasons. Some of them are mentioned below : 

1) Component on which the request is getting made, is not up and running. So check that the state of the respective component is healthy.

2) Component is not having the custom business service mentioned against its parameter Business Query Access List.

3) Workflow version is not the correct one. For this activate the WF from the Repository Version and reload runtime events if that WF contains runtime events.

4) The issue which arised on our enviroment is because the RCR were very old and they are refering to the non-existent WF and hence they are getting errored out. On increasing the log level, we came to know that below error was very frequent : 

ObjMgrBusServiceLog      Error      1              0              2013-08-06 16:00:12        (pmtsvc.cpp (1784)) SBL-ORD-00160: Object stored at key 'HeaderKey' was not found.
ObjMgrBusServiceLog      Error      1              0              2013-08-06 16:00:12        (pmtsvc.cpp (1784)) SBL-ORD-00160: Object stored at key 'ProductKey' was not found.

Now the reason for this error while searching in support web[ID : 503236.1] is because of Wrong version of workflow.
So as a resolution we have recreated the RCR, and since we have created a new RCR and associated the the workflow. It will then refer the latest WF and hence will not be error.

There could be more reason for this error, keeping in mind, for different scenarios. But in case you encounter this, check for the above pointers. Hope this help, Happy Exploring !!!

Thursday, August 1, 2013

System Variables and their default values for fields

I find the below information pretty useful and hence thought of sharing the same.
Below are some of the system var which you can use to default any field value, later i have also mentioned the values at different Siebel version for the date variables as well.

System: Today
This value returns today's date. This value should be used when the field type is DTYPE_DATE. If the field type is DTYPE_DATETIME or DTYPE_UTCDATETIME, the field will be populated with today's date plus "12:00:00 AM".

System: Timestamp
This value returns today's date and the current time. This value should be used when the field type is DTYPE_DATETIME or
DTYPE_UTCDATETIME. If the field type is DTYPE_DATE, only the current date will be saved in the field; the time will not be saved.

Expr: 'Today()'
This expression is equivalent to the calculated expression "Today()" and will return the current date. It returns the same value as System: Today. It should be used with fields of type DTYPE_DATE; if used with fields of type DTYPE_DATETIME or DTYPE_UTCDATETIME, "12:00:00 AM" will be appended to the current date.

Expr: 'Today() - 1'
This example demonstrates how you can add or subtract days by adding or subtracting an integer. This example would result in the field being set to yesterday's date. If a floating point number is used in this expression, the fractional part will be ignored.

Expr: 'Timestamp()'
This expression is equivalent to the calculated expression "Timestamp()" and will return the current date and time. It returns the same value as System: Timestamp. This expression should be used for fields of type DTYPE_DATETIME or DTYPE_UTCDATETIME.

Field: 'FieldName'
This function will set the field to the value of another field in the same business component. You would substitute FieldName with the name of an actual date field that is defined in the same business component as the field being defaulted.
To minimize confusion, the field being defaulted and the referenced field should be the same field type. If the defaulted field is type DTYPE_DATE and the referenced field is DTYPE_DATETIME or DTYPE_UTCDATETIME, the time will be omitted from the defaulted field. If the defaulted field is DTYPE_DATETIME or DTYPE_UTCDATETIME and the referenced field is DTYPE_DATE, the string "12:00:00 AM" will be appended to the defaulted field.
If this function is used in the Pre Default Value property, do not reference a join field since the join field will not be populated when the record is first created.
This function is not intended to be used as part of a date calculation.

Parent: 'BusComp.Field', 'BusComp.Field'
This function will default the value based on a field value in a parent business component within the current business object. You can include more than one combination of buscomp and field, to offer several possible default values. The function will evaluate each 'BusComp.Field' construct from left to right until a value is found.
As with the Field: 'DateFieldName' function, it is best for the defaulted field and the referenced fields to be of the same field type. If they differ, the behavior of the field type combinations is the same as for the Field: 'DateFieldName' function.

Below is the Source of Current Date and Time for different Siebel versions :
Siebel Ver. Client Type Source of Current Date and Time
6.x & earlier Dedicated or Mobile User’s machine
6.x & earlier Thin Client or .COM Application Application server
7.0.x Web Client Application server
7.0.x Dedicated or Mobile User’s machine
7.5.x Web Client Application server
7.5.x Dedicated or Mobile Client User’s machine
7.7.x Web Client Application server; converted to
time zone of the current user’s session
7.7.x Dedicated or Mobile Client User’s machine

In case you want a detailed information, check technote 539. Happy Exploring !!!

Wednesday, July 31, 2013

BC User Prop and Attr which can affect Performance

I was going through the web support randomly and got a very useful document.
Now we know how Siebel vanilla features like user properties and BC level properties help in avoiding custom configuration, but sometimes they could act as a double edged sword. Here in this post i will list out short description about some commonly used BS user properties and other attributes which could hamper performance significantly. If you want to go in details, please refer Doc Id[475224.1] in oracle web support.
First lets take Business Component User Properties :

All Mode Sort :
The following values can be set to this business component user property:

Values Description
Normal When setting it to Normal, the business component-defined sort specification is used. This setting also allows the user to run a PDQ (that incorporates a SORT).
TRUE When setting it to TRUE, the business component sort specification is overridden and instead the U1 index is used. If the standard user key is defined on the primary extension table, especially for S_PARTY-based business components, the behavior reverts to Normal.
FALSE If this is set to FALSE, all the sorting is removed.

This user property affects views with visibility other than Personal or Sales Rep visibility, including Manager, All, Organization, Sub-Organization, Group, and Catalog views. If you set up the default sort order so that it sorts on one of these views, be aware that this might expose large quantities of data that in general should be sorted only by user keys.

Deep Copy and Deep Delete :
These features allows multiple levels to be copied/deleted like a cascade copy/delete. Each business component in the Deep Copy/Deep Delete chain takes care of its own children.
If you are facing bad performance behavior when copying/deleting some records, be aware that these user property can be responsible for this behavior.

PreFetch Size and Maximum Cursor Size :
These properties work together to control how many records are requested while the business component is being accessed. These properties if set they will overwrite the value of MaxCursorSize and MaxCursorSize in the configuration file. If the value is set to -1, then records are retrieved until the EOF is reached. Make sure you have you performance testing done in case you changed these values.

Force Active :
This property makes ALL the business component fields to be force activated and due to this all the business component fields are retrieved.
Depending on the number of records being retrieved from the business component, this can lead to severe performance behavior.

And just quickly see what are the properties at field level which affect performance : 

Force Active :
This property makes the field to be force activated and due to this it is retrieved from the table that exposes this field.
Depending on the number of fields in a business component with this property set to True and depending on number of records being retrieved from the business component this can lead to severe performance behavior.

Immediate Post Changes :
This property is used to trigger server-side processing, for example, hierarchical picklists.
When this is set to TRUE, the changes are posted to Server resulting in network round trip.

Depending on how you configure this use, it can lead to bad performance behavior.

I hope this information will be helpful. Keep Exploring !!!

Accessing Hidden Fields in Applet Browser Script

Now we are aware that In version 7.x/8.x[Technote 386], the only fields that are available to browser script are:
· Id
· Fields whose values appear in the UI

But what if you want to access a field which is not exposed in UI ? In Siebel 7 and later, only fields existing on the UI are available to the GetFieldValue and SetFieldValue business component methods in browser script, regardless of the Force Active property value set for those fields.
Moreover, the ActivateField() method is not available for browser script.

Now there are 2 indirect ways through which you can access these non-exposed fields. 1 will only be applicable for form applets and other can be used in both form and list applet :

1) To make a field available through browser script, you can add a hidden control to a form applet.
The control must have the HTML Type property set to Hidden and must point to the desired field using the Field property. Keep a note that this is not applicable for List Applet because when a column is added to the list it is visible to the end user regardless of the HTML Type defined.

2) Create a control mapped to the field and set the HTML Type to Hidden and Add the control to the         button bar of the applet.
This solution can be used in form applets as well as list applets. It has a slight advantage over Option 1 because you will avoid having empty spaces on the applet where the hidden controls are added.

Again, I have found this on Oracle support web and if you want detailed information you can check Doc ID [477229.1]. Hoping this information will increase your insight in power of configurations.
Happy Exploring !!!

Sunday, July 28, 2013

Multiple Hierarchy Datatype WF Process prop Issue

Recently i have been debugging an issue. To sum that issue up in 2 points, it was intermittent and issue was happening when the siebel message is not having specific required values under it.
Now i know among developers, word 'intermittent' does not have friendly relationship. I have gone through the logs and it took a while to find out the RCA for this. Problem and Reason is stated below.
We know that Workflow is capable of sending only 1 Hierarchy as its Output. Now in our implementation, 1 of the parent WF is invoking a sub-process. In this sub-process, there are 2 WF process properties whose Datatype was set as Hierarchy with In/Out. And in the parent process we are taking an output as SiebelMessage. Now because there are 2 hierarchy type process properties in the child WF defined as In/Out. This child workflow is sending one of the hierarchy to the parent WF intermittently.
                Process Property                In/Out                      DataType
                Siebel Message                     In/Out                        Hierarchy
                OrdIt1Message                    In/Out (*In)               Hierarchy

Lesson learnt is that, in case you have multiple process property in a WF having datatype as Hiearchy and this WF is being used as subprocess for some other WFs, make sure to have only 1 process property as In/Out and put others as In. Hope this help, Happy Exploring !!!

Saturday, July 27, 2013

Troubleshooting Runtime Event Driven WFs

Runtime Events are quite useful feature provided in Siebel. You can minimize the level of scripting if you know how to use these runtime events effectively.
For a particular event you can invoke a WF and hence perform a set of operation. Like for eg, if you want to do certain set of operation on change of a field value, you can define a runtime event which can be given in a Start, Wait or User Interact step. These runtime events are created automatically when you activate such WFs.

I will list out some of the common issues which we encounter w.r.t. runtime events :

1) Ideally when you activate a runtime driven WF, related runtime events get created/updated(in case its already present) under Administration – Runtime Events screen > Events view with the corresponding Action Set. This being done, make sure that you manually do Reload Runtime Events from the menu 2-3 times to refresh the event cache.

2) Make sure the BO of the Workflow and BC for the Field on which you want to create a Runtime Event are same.

3) Make sure the mode of the Runtime Driven WF is Interactive Flow.

4) There could be a possibility that for a particular runtime event, there are multiple action sets. So in case there is a multiple action sets, they will get executed in order of increasing sequence and if the sequence is not defined, the action set which is created first will execute first.

5) In case you want to access these Runtime driven Workflow in a mobile client, make sure that the property value Replication is set as All under activated WF list.

6) Make sure that you have given correct values for 'Event Object Type' and 'Event Object' when you are defining a runtime event in a workflow.

7) Make sure the Workflow Process Manager component is up and running.

In case you want more details about debugging Runtime Event driven Workflows, there is a very elaborate and useful document on Oracle Support web with [id] = 473851.1

Hope the above information will save your debugging hours, Happy Exploring !!!

Thursday, July 18, 2013

NULL check in Search Expression

The ocean is made up of tiny drops of water. With the same analogy, if you have debugged many siebel issues, you must understand the importance of elementary things which are primarily the reason why code does not work.
Here i will mention one of those elementary things which need to be taken care of, and is very important.

Often we use the Search Specification. Here, take for example, using search expression in IC Map Search Specification of a Datamap, we only want field to be mapped if the value of [Attr] in hierarchy is not equal to say Value1 or Value2, so we will the write the expression like :
[Attr] <> "Value1" AND [Attr] <> "Value2"

So far so good, but what will happen in case value of [Attr] in siebelmessage which we are passing to this datamap is not present or not having the value ? Will this expression hold true even in that case ?
Answer is this expression will not be true even though Blank/NULL value is neither Value1 nor Value2.
So in case if you want to have the IF mapping for blank or null values, explicitly define a check for null values :
([Attr] IS NULL OR [Attr] ="") AND [Attr] <> "Value1" AND [Attr] <> "Value2"

So please make sure to handle NULL/blank check in search specification explicitly.

I hope this small piece of information will help you handle more probable scenarios in your project. Happy Exploring !!!

Tuesday, March 19, 2013

Siebel Bookshelfs 7.0.x to 8.1

I have created some customized google search link which specifically searches a topic in a bookshelf for a specific Siebel version. I find this very handy as it gives search result only to the specific version of Siebel and this helps me to get relevant data from the bookshelf.

So I have thought of sharing the same here as it will be quite helpful in searching Siebel bookshelf and hence provides an alternative to have bookshelf on your hard drive.

Below are the list of custom Google search links specific to Siebel Bookshelf with corresponding versions :


You are required to log in to your google account, put your search text under the Siebel bookshelf heading and click on search as shown below :



You can bookmark these links and hence save some disk space and offer yourself a service of better and specific search results. Hope this help !!!

Tuesday, March 12, 2013

CancelOperation/ContinueOperation in Browser and Server Script


With all the obviousness, while you are writing a custom method on browser or server script, you have cautiously taken care of all the subtleties like :

1) Used theApplication() in Browser script and TheApplication() in Server script.

2) Used return(CancelOperation) at the end of a custom method definition.

3) Set explicitly CanInvoke ="TRUE" in WebApplet_PreCanInvokeMethod for custom method.

But still you end up in the below error in case your code also constitute browser script :

SBL-DAT-00322: The specialized method %1 is not supported on Business Component %2 used by Business Object %3.

Reason : There is a delicate syntactic difference between CancelOperation/ContinueOperation for Browser script and Server script and that difference is :

For Server Script, we write it like
return (ContinueOperation); / return(CancelOperation);

For Browser Script, we enclose it in double quotes like
return ("ContinueOperation"); / return("CancelOperation");

Again this is a simple bit of information that many might have known already, but i found this worthwhile to share. Hope this help !!!

Friday, March 8, 2013

Calling BC Methods from Workflow

Okay, many of us might be knowing this. But I was unaware of the way to use a BC method without invoking a script for it.
As part of a requirement, i was required to invoke a vanilla method 'ReleaseActive' of BC 'Complex Product Locking BusComp'
Many would have guessed, this is a vanilla method which is used for releasing a new version of a locked Product under Product Administration.

The issue which i was having is to invoke this method from a workflow, and as i don't want to write a script for this. With some R&D on internet, i have found that you can invoke a BC Method using a vanilla BS method. Below are the details of that Siebel Business Service and its method.

BS : SIS OM PMT Service
Method : Invoke BC Method

Input argument of this method includes BC Name and Method Name


This is a simple bit of information but i guess it will really be helpful for script-less solutions. Hope this help !!!

Thursday, February 28, 2013

FDR to CSV in 5 simple steps

Well, I have dealing alot with SIG crashes recently. And as we all know as part of investigating these, you need FDR(Flight Data Recorder) file as well. This file gets generated in the bin directory of siebel server for every hard crash.
Problem with FDR is that it is not in readable format and you need to convert it in csv first.

You can find a way to do that on many sites as below :

sarmanalyzer -o <output.csv> -x -f <fdr file>

But, with my own experience, most of you will end up with the below error :

sarmanalyzer: not found

So I am putting down all the steps which are required to perform sequentially to convert a fdr to csv : 
1) Go to bin directory of siebel server
2) cd ..
3) . ./siebenv.sh
4) cd bin
5) sarmanalyzer -o <output.csv> -x -f <fdr file>

Also make sure that the user with which you have logged in unix box have the credentials to create a file in bin directory. If the permission is not there, then give an absolute path for csv file where the user have the permission to create the file.

For detailed information, you can go through Oracle Metalink Id : 473939.1

Hope these steps will save your time and end up debugging the issue for SIG crashes successfully. Happy Exploring !!!



Thursday, February 14, 2013

Invalid operation when not executed

Okay, this title may seem odd. But in case you are in Siebel related project fortunately/unfortunately you might have encountered this error.
One of the cases, when i have encountered this error is when I have called a subprocess from a workflow which is having a Begin Transaction step before this sub-process and its corresponding End Transaction is in that subprocess.
I got this error when i have increased the monitoring level of these workflows and due to some exception the subprocess errored out. Sounds interesting, dosn't it.
Reason you can think from this example is since the Begin and End Transaction are complementary process they need to be performed collectively, and hence the error :

Invalid operation when not executed.(SBL-DAT-00471)

Which now might seem pretty much logical.

Recently, We have came across another issue through which we have observed this error : 
In a BS script, for defensive coding we wanted to get the field value of a current record only in case the present context was having a record.
So for this we initially put the GetFieldValue in a if block having condition as :

if(this.CountRecords()!=0)
{
}

With this, we were getting the mentioned error in the back end i.e.

Invalid operation when not executed.(SBL-DAT-00471)

So after some time of investigation on this issue. We came to know that CountRecords return an integer indicating the number of records returned by the last ExecuteQuery() call.
So in case there is no ExecuteQuery() performed in the context, you will get this error.

Workaround we put is to use FirstRecord(), and it worked like a charm. :)

Hope this post will be helpful. Keep exploring !!!

Sunday, February 3, 2013

Use EnableConfigCxProd only till Siebel 7.7

Issue : While migrating to Siebel 8.1, we were having issues whenever the process involved Order Creation. The processing of Orders were stuck and they are not getting completed successfully.
This behavior was only in case on components where UI context is not supported. For example Workflow Process Manager(WfProcMgr) and Workflow Process Batch Manager(WfProcBatchMgr)
Pre Siebel 7.8, the recommended way of doing to create line item is to use vanilla method 'EnableConfigCxProd' mentioned in Siebel Technote 433
Also as mentioned in one of the siebel forums here :

Reason : On going through oracle web support, we have found that the method "EnableConfigCxProd" relies on some UI functionality, which does not exist in the background process. This is the reason why it crashes in this context.

Workaround : The ideal way is to use LoadInstance, CreateSession, SyncInstance & UnloadInstance. This is the right and supported approach for Siebel version greater than Siebel 7.7

Please drop a comment in case of any further clarification is required. Will happy to help :) Happy exploring !!!