I am back with what I promised.
A case study how we used signals to improve the perfomance by 83%. I will try to tell you facts that I found while working on them and not available in bookshelf and supportweb. If you want to know about singals please read my post Siebel CRM 7.8 - Signals Demysitified
We are working on Siebel 7.8.2.3. It is a Call Center module but major and complex functionality is weaved around Quote Module which includes customizable products. Now these coustmizable products can have upto 10 products and 300 attributes in one Quote Item record. In addition to Quote and Quote Item various custom entities are also copied as Quote Item Child. So, In total there are 11 entites are copied over when you 'Copy' or 'Revise' Quote.
Now it is not possible to copy all these through configuration as by configuration only 'Root Quote Item' or just the First record of Quote Item is copied over, not all the records that are created as a result of customization of product. So, The intial solution was to copy or revise quote through scripting copying the Quote Item and all of its child. But the result was that it took upto 3 minutes to copy or revise the quote which was unacceptable and due to accessive scripting the process was not stable and often broke giving one or the other scripting error.
So, we started exploring the Solution through vaniall singals i.e 'CopyQuote' to copy quote and 'ReviseCopyQuote' to revise quote. When these signals were enabled they resulted in copy and revision of just 'Quote' and 'Quote Item'. After further exploring we found that these signal use a 'Data Map' which can be modified through Application
Data Maps are available
Adminstration ==> Application ==> Data Map Administration.
This view is not available by default especially if you have upgraded your application to Siebel 7.8. You might have to enter a different license key for this view. Data Maps are nothing but declarative mapping of BO, BC and Fields. You specify the Source BC, Fields and Destination BC, Fields. Just creating the mapping is not enough you have to have supporting configuration of the BC's to make it work.
Every BC that you enter should be added to the BO. It should have a Link to it's parent (if any) and that links should be added in the Business Component Section of BO.
Add the custom fields to the datamap.
Now comes the tricky part. Even if you do all this you will not see any improvement in performance and you might face some errors. This is what you have to do in addition to what you have already done.
1. Create 'MapId' Advanced Property for Child Business Component Fields.
2. Create Light version of Child Business Components.
Now, I will explain all the three steps in detail.
MapId : Data Maps support an advanced property called 'MapId' which is really important if you want this to work. 'MapId' is not properly defined in Bookshelf. I will try to explain this property with help of an example.
We assume that Quote Item has a child called Delivery Schedule and we want it to be copied over when we copy quote. A field called 'Quote Item Id' is present in delivery schedule which stores the row id of Quote Item and is used by Link hence establishing the Parent-Child relationship.
When we specify a source field in data map the value of that field is copied to the field specified in the destination field section. Which means when we specify 'Quote Item Id' Field value from source 'Quote Item Id' is copied to the destination field. To simply this further suppose the source 'Quote Item Id' had a value '1-6666' which means destination 'Quote Item Id' would have value '1-6666'. But this is wrong. This behaviour would mean that new delivery schedule record is now child of old 'Quote Item' not new.
Here is where 'MapId' property comes into picture. You have to specify 'MapId' property for all the fields which are suppose to store the row id of parent business component. You have to enter the following information in the MVG that opens when you click on Advanced property field
Property Name :MapId (remember it is case sensitive)
Property Value : Name of parent business component
According to above example the Advanced property would be something like this
Property Name : MapId
Property Value : Quote Item
This should solve one of your problems.
Light Version BC: When we are copying we don't need the validations or stuff like precision or Currency code property.
Making the BC Light mean that create a copy of the original BC and perform the following steps
1. Change the Class of the Bus Comp CSSBCBase.
2. Disable all the user properties of the buscomp.
3. Remove all the Post Defaults and Pre Defaults (Until and unless really required)
4. Remove all the picklists
5. All the values from the validations
6. All the values from the precision fields
I think you Get the idea now So, remove all that you think can be unnecessary. But there are something that are required so you have to use a little common sense before removing all these things.
And you are done!!!!!!!
Using these signals we were able to reduce the copy/revise time to under 10 seconds when it had records in all the 11 custom entities.
Monday, May 19, 2008
Siebel 7.8 Signals - A Case Study!
Siebel CRM 7.8 - Signals Demystified.
Anybody who has worked on Siebel 7.8 must have come accross the term 'Signal'. I came across this term just a few months ago. When were wroking for some Performance issues in our Project. It is one of the most useful thing that I have come across in Siebel in past 2 years of experience. It has the ability to change the way we do lot of things.
What I found out during my Reaserch to find out more on singals is the fact that it is absolutely not a new thing in siebel. It has been part of siebel from very start which is way back in Siebel 6. I know you might be confused a little bit. Let me explain.
we all know that siebel is a Event Driven language. We can choose to handle those events or let siebel handle those events.In events we do some coding for the custom methods that we have defined. And we all know that in the end we have to write a statement 'return(CancleOperation)'. Of Late what I knew was that we just have to write this statement otherwise we get and error message 'MethodName is not Supported'.
The reason for this kind of behaviour is 'Signals' that's right!!! Signals are responsible for it. Now I will explain how.
Everything Method Invoked in Siebel is a 'Signal' which is passed on to the C++ code that makes the core siebel. When a vanilla method is invoked such as 'SetFieldValue' , 'GetFieldValue', 'InvokeMethod' Siebel has the code in it is C++ Classes to handle it. But when we invoke the custom method Siebel has absolutely no idea how to handle that code. So, we write the statement 'return(CancleOperation)' so that the custom method never reaches Siebel C++ code.
Now the question is what has changed in Signals in version 7.8? Well, the answer is Prior this version of siebel we coudn't create custom signals and we couldn't modify the existing signals. But now in Siebel 7.8 we can change vanilla singals and also create new signals.
The view that let's us do that is Adminstration ==> Order Management ==> Signals.
You can see in this view a lot of signals related to pricing as they are used extensively for Pricing in siebel. But you can also see signals like 'SetFieldvalue'.
In my next post I will be explaining in detail how we used Copy and Revise Vanilla Signals to rectify the performance issues related to Copy and Revision of Quote.
If this post has been helpful. Please post your comments and visit again for more.