Google
 
We have moved to a http://siebelunleased.com Please visit there for updated posts

Thursday, October 25, 2007

Address Changed

We have moved to a new domain.

http://siebelunleashed.com


from now on I will be posting my new entries at the above address. Please visit and post your comments to make that site better.

Your suggestions has helped us to reach where we are today and looking forward for same kind of response.

I have changed the feed address so all that have subscribed to the blog will get all the updates.

I am in process of selecting the right theme so you might see some changes happening in next few days.

Thanks
Neel Read more!

Sunday, October 21, 2007

Siebel eScript – An Overview

Scripting is one of the most important areas in Siebel Development but irony is that it is never recommended to write script in Siebel. Siebel scripting is done in a language known as eScript. eScript shares it’s syntax with JavaScript. If you have worked in JavaScript then you would find it pretty easy to adapt to eScript.

eScript can be broadly classified into two categories

  • Server Scripts
  • Browser Scripts
Server Scripts: as its name suggests is executed on server side. Which means that the user request is sent to server where the scripts is then executed

Browser Script: is actually converted into JavaScript and is executed on client side.

Usually scripting is written on objects in Siebel such as Applets, Business Components etc. But the main use of eScript is done to write Business Services. There are lots of things that you achieve through a business service. Detail discussion on business service is subject to different post but it is similar to somewhat workflows implementing complete business processes with the help of script.

Scripting should be used as a last resort. Everything can be done through script of course but it makes the manageability and up gradation of Application difficult.

But as I said in my earlier post to be a successful Siebel developer Scripting and Configuration should be your strong points. Scripting can be fun but should be avoided as long as possible Read more!

Siebel Database User not abel to Login

Problem:

You have created a database user e.g. SIE_USR that is going to be used for anonymous login to perform various tasks. All the proper roles and privileges have been assigned to it but still it is not working.

Solution:

Whenever you create a database user you have to create corresponding user profile to it. Every user that has to login through Object Manager needs to have its user profile created in Siebel. If user profile for that database user doesn’t exist that user will not be able to login to Siebel through object manager.

You can create user profile by going to

Administration User ==> Employees View

In next post I will present a case study where we had to create database user and faced the problem mentioned above after forgetting the user profile creation of that user.
Read more!

Thursday, October 18, 2007

Siebel eScript – How to track performance with Timing Scripts

Timing scripts can come in handy to know exactly how much our code is taking to execute. There can be several reasons for doing this.

  • We are calling several business services in code and we need to know performance of each one.
  • We need to know time our script on business component, Applet is taking
  • We have several approaches to solve the problem and need to know the exact time taken by each.
The code to achieve that is:

var fileVar = Clib.fopen("c:\\Timing.txt", "at");
var timeVar = Clib.ctime(Clib.time());
Clib.fputs(timeVar + ": Starting trace in of code", fileVar);

//code which you want to track time
…………………………………….
…………………………………….

timeVar = Clib.ctime(Clib.time());
Clib.fputs("Ending trace of code: " + timeVar, fileVar);
Clib.fclose(fileVar);

    PS: This code will work only if you are trying to run it in dedicated client or your Siebel server is windows server. This code will fail if you are trying to run it from thin client and your Siebel Server is a unix server as it will not able to find the path. You will have to change the path to unix path e.g. /apps/srvr/bin if your server is unix.

    Hope this helps!!!!

    Read more!

    Siebel Data Sources – An Overview

    Database is an indispensable part of any software including Siebel. Then also rarely do we know or try to know that how our software is interacting or connecting with database.
    In this series of articles I will try to divulge the details of what happens in the background and how this information can be helpful in troubleshooting database connectivity problems.

    Siebel like many other software uses Open Database Connectivity (ODBC) to connect to the database. ODBC is a industry standard that was developed in 1992. It gives you the interface to connect to database and hides all the details and coding required for connecting and interacting with database.

    In Windows 9x you can go to control panel and click on the ODBC Data Source icon to see the details of data sources that exists on your system.

    In Windows XP and Windows 2000 you can use a enter odbcad32 in run box
    or you can go Control Panel ==> Administrative tools ==> ODBC Data Sources

    There are two types of data sources (DSN) available

    User DSN: Available to only particular user account under which they are created
    System DSN: They are pretty much same as User DSN except the following differences


    • ONLY the System Administrator can; Add, Remove and Configure System DSN's.
    • System DSN's will be used only if the DSN does not exist as a User DSN.In other words; your User DSN has precedence over the System DSN.
    • Everyone shares the same list of System DSN's.
    These DSN use different drivers to connect to different databases. Drivers contain the special code required to talk to the specific type of database you will work with. The Drivers often come from the vendor of the database. Your System Administrator is the only user who can install and register a Driver. You will select a Driver to use when adding a new DSN.

    Siebel comes with a driver named Siebel Database. If you are to create a data source to connect to local database you will be using Siebel Database Driver.

    In next few posts we will discuss, How to create and configure Siebel Data sources and How to change cfg file to use our new data sources etc. Read more!

    Wednesday, October 17, 2007

    Siebel Configuration - An Overview

    If Siebel could be visualized as human body then configuration has to be the heart of that body. Without configuration Siebel cannot work and configuration is what comprises of 70% of Siebel Development.

    Siebel configuration is done using an IDE provided by Siebel i.e. Siebel Tools. If you want to be a successful Siebel professional then you need have strong configuration skills. Configuration is mostly based on concepts and facts. Once you have understanding of the concepts and facts properly then you wouldn’t face any problems. I would like to like to give example of computer networking here to explain the above statement.

    In networking a RJ-45 jack is required for UTP cable to connect to system. Once we have this knowledge it doesn’t change it doesn’t matter how many times you perform that task it is always going to remain same. Similar case is with Siebel configuration once you know how to create an Applet you are done. It doesn’t matter how many times you create and Applet the procedure will remain the same. Though there are several ways but they all work in predefined way and once you know them they will always be same.

    Siebel Configuration is a little different from Siebel scripting. Unlike scripting, in which everybody has his own unique ways to approach things Siebel configuration works on predefined set of rules that have been decided by Siebel. So you can be successful at Siebel configuration even if don’t have strong programming skills but as a downside Configuration and Scripting goes hand in hand. So, the chances that you will be working on configuration alone are pretty slim.

    Siebel Configuration is one area which comprises of 50% of interview questions. So, when you want to appear for interview make sure you are up to date with your configuration concepts and fundamentals. Main responsibility of a Siebel configurator is to work on business layer of Siebel and implement business logic and business rules.

    Hope this helps you to point into right direction.
    Read more!

    Tuesday, October 16, 2007

    Drill Downs - Common mistakes made.

    Problem statement:



    • We configure a drill down and we test it. It works fine and it takes us to the destination view that we have provided. Another user logs in for him the drill down disappear. It is just plain text field.


    • When we click on the drill down it gives us an error

      “You do not have permission to view this record or this record has been deleted”


    • Drill down is working for some users and some users are facing error while using that drill down.

    Reason:

    The reason behind the problems mentioned above is Responsibilities. Yes, It is as simple as that.


    We are going from one view to another view and if we don’t have that view in our responsibility we migh face one of the above mentioned errors. Some time more than one destination is provided, as is the case of the dynamic drill down and they are executed in the sequence that we provide. If views that have been mentioned in the sequence are not assigned to our responsibility then we can again face the above mentioned error.


    Will try to add specific case studies explaining the above mentioned scenarios.
    Read more!

    Siebel CRM How To - Automate login into Siebel Dedicated Client

    The trick I am going to tell you in this article might seem to you very simple and basic if you have been working on siebel for a long time but for a newbie it can be small time saving trick during his early days of dabbling with Siebel Development. I have come to know in last few days while talking to a friend, assuming that a simple thing is known to everybody is a mistake and there is nothing such as useless simple thing.

    My experience has taught me that it is pretty common to ignore simple things but they usually are the one's that can save you a lot of hassel if used in a proper way. During our intital time of Siebel development there is atleast 50 time we open Siebel Dedicated Client and Siebel tools while we are trying to explore Siebel to the best of our ablity. This simple trick can automate your login to the client and tools and save some time of entering username or password.


    • Right Click the shortcut through which you acess the Siebel Client or Siebel Tools and choose Properties from the context menu.
    • Scroll right to the end of Target Text Field Value enter the following text in the end.

    /u sadmin /p sadmin /d sample

    These text will automate your login to sample database. If you want to automate your login to Local Database enter the following code.

    /u username /p pwd /d Local

    replace username with your local username and pwd with your local database password

    You can create copies of the shortcut that you use and can configure different shortcuts to login to different databases. Detail about switches being used in the above article and other switches that can be used is a subject of another post.

    Hope this post helps you. If yes, Then please post your comments or suggestion to improve this blog.

    Read more!

    Monday, October 15, 2007

    Siebel CRM How To – Restrict a Field to only Accept Certain Characters?

    Requirement:

    • We have a multilingual application and we have Unicode enabled database but still we would like to restrict user from entering certain characters.

    • We want to prevent user from entering numbers in alpha-numeric fields.
    Solution:

    Use charCodeAt function given by Siebel but not documented properly by Siebel. Here I am giving a Pseudo code to explain how it can be used.

    if (FieldName == "First Name") {
    for (var i=0;i less than field length ;i++) {
    var ASCII_code = fieldvalue.charCodeAt(i)
    if(ASCII_code is not valid code)
    Error("Not Valid Code");
    }}


    charCodeAt() returns the ASCII code of the character that is supplied to it. ASCII code comparison is way faster than the number function that are used to compare strings so we can also use this function where we want to compare two strings by just modifying the above given Pseudo code.

    Hope this helps! If yes, Please put your comments below.
    Read more!

    Siebel Enterprise Integration Manager (EIM) - An Overview.

    This article has been provided by Shalini Chauhan having Siebel experince of over 1.5 years and Leading an EIM team.

    Not everybody today uses Siebel but when they decide to use Siebel they just cannot leave data in their legacy system as such. They would like to retain that in their new improved Siebel CRM system. But how do you import that terabytes of data probably existing in CSV or a DAT file. This is where EIM comes into picture.

    EIM stands for Enterprise Integration Manager. It is a SIEBEL Component which is used for Data Migration from legacy as well as other Siebel systems.

    When I heard about EIM, it appeared to be a very dull, complicated and difficult subject. But when I really started working, I found it as much fascinating and challenging as I wished to work upon.

    Why EIM:
    Siebel has very unique and complicated Database structure which already has relationship defined between n number of tables hence it is not recommended to insert, delete or update data stored in what is known as Base Tables in Siebel. During migration lot of things can happen which can lead to data integrity issues. To answer all those concerns Siebel has provided EIM.

    For most of base tables in Siebel an EIM table is also in existence which allows you to play with data and perform thing that you normally wouldn’t want to perform on base tables. So, you can import-export data to and from EIM tables and we can perform following operations on the data that resides in EIM tables

    a) Insert
    b) Update
    c) Merge
    d) Delete

    Once the data is manipulation and scrubbing is complete we can import that data in base tables and Siebel EIM component takes care of things like Foreign Key, Composite Keys, User Keys and also issues related with data integrity.

    The source of data can be dat files, CSV files or any other kind of legacy database. So as the process, we need to push data to these interface tables using third party tool like SQL Loader, DTS etc and then migrate data to Siebel base tables using EIM component.

    Main Responsibilities of person responsible for EIM are

    • Identifying and creating mapping between EIM and Base Tables.
    • Cleansing of data to be imported.
    • Loading of data in EIM tables.
    • Running EIM batch job.
    To be successful in EIM, one must be aware of basic understanding of RDBMS, SQL, cursors, etc and should have interest in database and also should have an adaptive learning approach. It is really a challenging job but only when you are ready to exhibit your dedication and hard work. Read more!

    Siebel Search Specification (Search Spec) – What about it?

    This article has been submitted by Nidhi Puri having Siebel experience of 2+ years and right now working as Project Lead.

    A Search Spec is nothing but a filter on the returned set of records and if we we look atc it from database point it acts as where clause in the SQL that is formed which restricts the number of records that will be retruned from database.

    In Siebel we can apply search spec to

    • Applet
    • Business Component
    • Link
    • Picklist

    1. For an Applet, a search spec filters the records that are displayed on UI. The underlying BC brings back a set of records and before they can be displayed, the applet search spec applies the filter on them and displays only a subset of records.

    2. For a Business Component, a search spec filters all records that would be returned from the underlying base table. This would also result in the filtering of records on the applet tied to this BC. However, the search spec in 1 above works only for that particular applet while on a BC, the search spec is inherently applied to all applets that are based on this BC.

    3. A search spec on a Link will filter all child records from the destination BC.

    For Example
    Account/Address link. Search spec looks something like this: [City] = ‘London’, this will bring back all address records for the account where the City = London.

    4. A search spec on a Picklist will filter the data that the picklist points to. For static picklist, the data exists on the List of values, so the search spec for a static picklist would look something like this:

    [Value] <> 'Corporate'. This would show all values other than "Corporate" when you click on the dropdown. For dynamic picklists, the search spec would something look like this: [Active Flag] = ‘Y’, this would bring back all records from the destination BC (on which the picklist is based on) where the Active Flag = Y Read more!

    Thursday, October 11, 2007

    NextRecord DeleteRecord - Use with caution!!

    Number of times we have written code in which we have to traverse number of records in a loop and n number of times we have missed one important statement that results in our code to stuck in infinite loop. Yes, I am talking about the statement Object.NextRecord()

    This statment is generally used at the end of the loop so that after all the processing is complete we move on to the next record in the record set and perform processing on the next record. I am giving a Psuedo code to explain that.

    while(not end of recordset)

    {

    perform operation

    recordset.NextRecord()

    }


    But here I am going to to tell you about a situation where doing a NextRecord(). will result in problems. Yes, I we are deleting the records in the loop then we don't need to use the NextRecord() function.


    Reason for that is using DeleteRecord() results in pointer to moved to next record automatically and if we use NextRecord then it will result in skipping of the last record we are trying to delete. Pseudo to explain this

    while(not end of RecordSet)

    {

    do processing

    recordset.DeleteRecord();

    // recordset.NextRecord(); // no need to use next record as delete will automatically move the pointer to next line

    }

    Hope this tip is helpful. Happy Scripting :)
    Read more!

    Navigating Siebel - Via Keyboard!

    We generally navigate siebel with the help of mouse. Suppose, one fine day your mouse stops working would that mean that you are stuck and will not be able to work on siebel? I don't think so, to overcome that situation Siebel has provided keyboard shortcuts or acclerators to navigate and perform important functions in siebel so that you are dependent on Mouse to do all your work in siebel.

    And I have always been a fan of keyboard as it saves you lot of time while working on system. So, here I am presenting list of keyboard shortcuts provided by siebel to perform various functions.


    Record Management

    New Record : CTRL + N
    Copy Record : CTRL + B
    Delete Record : CTRL + D
    Save Record : CTRL + S
    Undo Record : CTRL + U OR ESC
    Select All Records in List : CTRL + A

    Record Navigation

    Next Record : CTRL + Down Arrow Key
    Next Page of Records : CTRL + ALT + . (In List Applets)
    Last Page of Records : CTRL + ALT + L (In List Applets)
    Previous Record : CTRL + Up Arrow Key
    Previous Page of Records : CTRL + ALT + , (In List Applets)
    First Page of Records : CTRL + ALT + F (In List Applets)


    Query Management

    New Query : CTRL + Q
    Execute Query : ENTER in a Field OR CTRL + ENTER in a Text Area
    Refine Query : CTRL +R

    General Navigation

    Go to Site Map : CTRL + SHIFT + A
    Open Search Center : CTRL + F OR CTRL + SHIFT + F
    Run Report : CTRL + SHIFT + R

    Layout Management

    Define Columns Displayed : CTRL + SHIFT + K
    Define Sort Order : CTRL + SHIFT + O

    Online Help Shortcut


    Open Online Help : CTRL + ALT + H
    Help with Record : CTRL + ALT + K
    Technical Support : CTRL + ALT + J

    Application Management Shortcut

    Connect as New User : CTRL + SHIFT + W (Works in Dedicated Client)
    Log Out : CTRL + SHIFT + X (Works in Dedicated Client)


    Field Navigation

    Next Field : Tab
    Previous Field : SHIFT + TAB

    If you think I have missed something or you know something that others don't feel free to share it here. I will be more than happy to include it with your reference.
    Read more!

    Wednesday, October 10, 2007

    Siebel List of Values - A Strategic Move - Continued.

    Last time I said that I will be presenting a Solution to make Required Fields dynamic and SRF independent. So I am back with What I promised.

    Requirement:

    Siebel Service Request module was to be implemented because of a new implementation the business requirements were being changed all the time. One Strange requirement was to make the Required Fields of a business component dynamic. So that they can be changed without a release. Now, we all know one way to make a field required is to set the Required Property of the field to true. But that would mean that if I were to change that a new SRF deployment will be required.


    Solution:
    LOV's again were the life saver for us. We created an LOV called SRV_REQ_FIELD and in the Display value we provided the names of the fields that we wanted as Required Fields. In the Business Component PreWrite Record we queried for that particular LOV and traversed through the records that were active. If the Field provided in the LOV did not contained a value then an error was raise stating that the value for that particular required field was not supplied. I am giving the Pseudo Code below to what that script might look like


    BOLOV = TheApplication().GetBusObject("List Of Values");
    BCLOV = BOLOV.GetBusComp("List Of Values");
    with (BCLOV)
    {
    Query for LOV Type as 'SR_REQ_FIELD' and Active Flag = 'Y'
    }

    IsRecord = BCLOV.FirstRecord();
    while( Last record is not reached)
    {
    this.ActivateField(BCLOV.GetFieldValue("Name"));
    if ( this.GetFieldValue(BCLOV.GetFieldValue("Name")) == "" )
    Raise Errro Text ("Value not given")
    BCLOV.NextRecord();
    }


    This solution is not recommended if the number of fields that are required is fairly large. But still can be really handy in many situations.

    Hope you liked this post! If yes, Do post your comments.
    Read more!

    Tuesday, October 9, 2007

    Siebel Administrator - An Overview!

    Siebel Adminstrator is different domain all together. Again a pretty intresting area to work in siebel (I have been saying this for everything I have mentioned so far, haven't I :) )

    But this is one area where I wish to work some day. Haven't had chance to do that because as far as other areas are concerned they are inter linked and sooner or later you will be working on them but this one area is pretty seperate from others. Siebel EAI, Scripting, Workflows can be considered as a part of Siebel Development but Siebel Admin is a different ball game altogether.

    Main Responsibilties of a Siebel Admin are

    • Install Siebel Servers and its components
    • Manage Siebel Servers and Components
    • Manage Web Servers such as iPlanet and IIS
    • Troubleshoot Seibel Server Related issues
    • Deploying of SRF and Repositories from one environment to others.
    • Co-ordinating with various teams such Web Server, Database and Integration teams

    Knowledge of Unix, Linux and shell scripting can be an added advantage as most of Siebel Server installation are on Unix Servers. If you have interest in OS, troubleshooting and you love to work from command line then this is the area for you. Generally, all the siebel implementation have more than one servers that a person has to manage. You, will need to be pretty thorough with your siebel architechture basic if you want to succeed in this area.

    Usually the work of a siebel admin is managing as there are fresh implementations are pretty rare. Also, you will need to have strong database skills if you want to really make your mark as siebel admin.

    Pro's of Siebel Administrator

    • Good chance of going abroad :)
    • Intresting and challenging Assignments
    • You can get pretty good experience on Unix which can help you to go towards System Admin in case you want to switch.
    • Pretty good demand in Indrustry

    Con's of Siebel Administrator

    • Most of the implementations are abroad so you might have to work late in night (may be shifts)
    • Most of the times work involved is only of maintaince and troubleshooting.

    But still, If you love linux or Unix and your area interest in database this is the area for you.

    All the best for future!!

    Read more!

    Siebel Business Analyst - An Overview!

    Siebel Business Analyst (BA) is quite an interesting and lucrative job . Lucrative because most of the opportunities for a Siebel BA are Abroad.
    Yes, the ones who's dream is to go abroad this is the choice for you. But beware not everybody can be a BA. One of the most important pre-requisite to be a BA is to have good communication skills. You, are at the client end representing your company so you have to good in communication skills.

    Business Analyst job can be broadly divided into two streams.

    • Technical Business Analyst.
    • Functional Business Analyst.
    Technical Business Analyst : They are also known as Technical Solution Architects [Sound's impressive isn't it. Well I have worked as one :) ]. Their main responsibility is to talk to client, understand the requirement and then design it. The most interesting and challenging part of Technical BA is to design the requirement.
    How many times while working as developer we have scolded the person who had created the design. Well, the only way to change it is to be the one to design :). You, need to have strong technical skills if you want to be a Technical BA.

    Functional Business Analyst : Their main Responsibility is to understand the requirement functionally. The line between the Technical and Functional BA is really thin and most of the time both duties are performed by one person. Functional BA's can afford to be technically weak :).

    Siebel BA role can be summarized as below
    • Talk to client, gather requirements and design it.
    • Should have functional and Technical knowledge of product.
    • It is Step Forward towards Management Role

    Pro's of BA Role

    • You earn in a foreign currency :)
    • Challenging and Interesting Job.
    • You get to travel to various places.
    • Tremendous contribution towards your Personality growth.

    Con's of BA

    • Being on client side you are constantly under lot of pressure.
    • You have to be away from you family and country most of the times.
    • You have to perpare Technical and Functional Documents [I hate that :) ]
    My Advice : If you don't mind being away from family and you don't want to be a techie then this is job you want, provided you have good communication skills. But, If you like India and family like me then may be you might like to stay away from it. But still a good domain option in Siebel and contributes a lot in your personal development and your experience.

    PS : The views expressed in above post are my personal. If you think differently feel free to post comments or write to me. I will be more than happy to include them in this post.
    Read more!

    Siebel List of Values - A Strategic Move!

    List of Values (LOV) is assumed to pretty simple entity in siebel and having very limited use, of showing values in dropdown picklist. But lately I found they can be used in more than one ways. They can be a real life saver. One use I have found of them is to avoid hard coding. Yes, you can avoid hard coding of values and use LOV instead which you can then change without SRF Release.

    I will list below some real scenarios which I have come across and used List of Values to accomplish task which otherwise would have a real pain while moving stuff different environments.

    Workflows - Requirement :
    We were creating workflows that were going to integrate Siebel with some other application with the help of MQ Series. Now, to accomplish that we had to enter two paramerters related to MQ Series in the first step of workflows, Queue Manager and Physical Queue Name.

    If, we were to hardcode then it would be difficult to move workflow between different envoirnments such as QA and production because they had different Physical Queue Name . There LOV's came to our Rescue. We created two LOV's with the values of the Queue Manager and Queue Name and used LookupValue() method in workflows to acomplish that.

    LookupValue method accepts two arguments 'LOV Type' and Language Independent Code ('LIC') and returns the display value of that LOV Type. The syntax is as following



    LookupValue("LOV Type","LIC")

    Example :
    • Create an new LOV Type (in this case we are created MQ_PHY_QUEUE_NAME. It should be same in all the environments where you want to deploy the workflow)
    • Enter the Display Value (actual value that you want to speficy like in this case we specify ESBLDAS for dev env and ESBLQAS for QA Env)
    • Enter the LIC (can be anything descriptive like in this case we had given 'Physical Queue Name')
    • In the Input Arguments of workflow choose input argument type as Expression and specify the value as LookupValue("MQ_PHY_QUEUE_NAME","Physical Queue Name")

    Now, it is going to pick the value as 'Display Value' of the LOV that you have specified.

    In next post I will describe how can we use LOV to dynamically specify Required Fields for a Business Component.

    For other posts Related to LOV please go through the category of List of Values
    Read more!

    Monday, October 8, 2007

    Siebel EAI - An Overview.

    'Man is a social animal' they say and we have to depend on others to thrive and grow. It is pretty much true when it comes to software. A software in itself is rarely complete it generally dependent on other software for things like information, processing the information, storing the information etc. So, there has to be mechanism to join or integrate various softwares so that they can work together seemlessly appearing as one system capable of doing everything. Siebel EAI is the domain that deals with integrating siebel to other hetrogenous and homogenous systems or Applications such as Java, .Net and siebel itself.

    EAI stands for Enterprise Application Integration. It is according to me is one of the most intresting and challenging jobs in siebel. If you love web and web related things then you are going to love it too. But beware you might end up spending sleepless nights (just kidding, but still you need to put a lot of hard work). The most common implementation of EAI today is Web Services. To get more information on Web Services you can go through articles on Web Services and Web Service PPT that I created during my intial days of working on EAI.

    Siebel EAI can be summarised by following points


    • Integration with other Applications such as .Net, Java and Siebel Itself.
    • Integrating with the help of 3rd Party Middlewares such as TIBCO, MQ Series, BizTalk, Oracle Apps etc.
    • Integrating directly using Web Services.
    • Understanding of XML, XSD, HTTP is desirable.

    Pros of Siebel EAI

    • Dearth of Siebel EAI experts can raise the market value of your skills.
    • Intresting and Challenging Assignments.

    Cons of Siebel EAI

    • Might result in long hours in office.
    • Integration projects are small in number.

    My Advice : Jump on it if you get a chance, you won't regret it. But if you don't like XML,Web, HTML and woudn't want to spend long hours in office then stay away from it.

    Read Below if you want to know what others have to say :

    Vipul Saxena : It is break away job from routine configuration and scripting jobs. Challenging Assignments and great statisfaction when you are able to do it successfully. A rare skill, must have if you have intrest in scripting and web.

    Ankit Walia : Don't loose it if you get the chance.

    Gaurav Gupta : Analytics and Siebel EAI are at par. Hottest thing happening in siebel. Best thing that you can get when entering into siebel. Nothing is better than this.

    Anupam Rastogi : Not a cup of tea for everybody only a person with intrest can excel and succeed in it. If you understand EAI properly can also be used on unorthodox places.

    Siebel EAI Rocks !!!!!!
    Read more!

    Siebel CRM - I wish I knew !

    A lot of time when we look at the things that we have done in past we get a feeling that If I would have known a few things earlier I could have done a lot of things in a different and better way.

    This is specially true in case of Siebel, being a specialized technology there aren't many people who can guide us in right direction. When I started in Siebel everything was a blur for me. I had absolutely no idea, what siebel is all about? what choices do I have?
    I had to learn things gradually from my experience through my mistakes and I of course my luck. I was lucky enough to be put in Siebel EAI and had intresting assignments and most important of all I wanted to do it, but there were others not so lucky on whom the choices were thrust upon because they had absolutely no information to base their choices upon.

    Through this article I would like to spread the awareness of the choice that we have when we enter the world of siebel, different aveneus that we can explore .So, that we can take our own decision based on our interest and taste rather than sitting back and let somebody else make the choice for us.
    According to my knowledge following are the major functional areas in siebel from which you can choose to specialze.

    Each area has its own Pros and Cons. I will enabling links once the detail information is put on that particular area and also I will aslo be putting in comments from my friends and colleges working on siebel in these particular domains. From the areas metioned above Siebel Configuration and Siebel Scripting are the areas that you need to have basic knowledge. They can be considered as a kind of must to progress in any area of siebel development.
    Read more!

    Sunday, October 7, 2007

    Siebel Profile Attributes - an Overview.

    Profile Attributes I stumbled upon them in siebel when I was working on my first assignment involving Siebel EAI. Till that time I had only used and heard of Global Variables which you could use throught out your script.

    But as the requirement said only if user clicked a button in View A and then performed some particular action in View B trigger a workflow.

    As views involved had different BC's it was not possible to have done through global variables. Then my senior colluege introduced me to a new entity in siebel called 'Profile Attributes'. They are important because they have a unique property. They are available throughout the application. The best term that comes to my mind to describe them is 'Session Variables'. Those who have worked a little bit on development of Web Application will understand exactly what I am saying and for those who hasn't worked on them I will explain.

    As you know from siebel 7 onwards it has Web Architecture. So, as soon as you login into siebel through your browser a session is started which last till time you log out or you close your browser window or according to the length set through session parameter at server level.

    Now discussing in details that how server maintains this session and what goes on behind the scene is out of scope of this article
    but what you need to know is that Siebel server recognises every unique user through session id that is given to you when you login to siebel and it remains valid until you session closes due to above mentioned reasons. So, Profile Attributes are variables that can hold any value during the session of the user. There are two methods available to in siebel escript that help you to work with Profile Attributes.

    • GetProfileAttr
    • SetProfileAttr

    GetProfileAttr method is used to retrieve the value of a particular profile attribute. The syntax is

    TheApplication().GetProfileAttr("ProfileAttrName")

    SetProfileAttr method is used to set the value of Profile Attribute. If the Profile Attribute that you mention is not already existing it creates a new Profile Attribute. The syntax is

    TheApplication().SetProfileAttr("ProfileAttrName",Value)

    So, to accomplish the our requirement we Set a profile attribute when clicked the button on view A and then when he went to View B and did the particular action we wanted we retrieved the value of the profile attribute and if all the conditions were met we executed the workflow and everybody developed happily ever after :)

    But, there is a twist in the story and it was not a happy ending after all which highlights the fragile nature of Profile Attributes. Now, in a particular situation this solution won't work. If user clicked button on View A and then logged off which meant profile attribute is destroyed hence the functionality failed. So, as you all must have guessed this solution was scrapped :(

    So, the moral of the story is use Profile Attributes with caution and only if you are sure that if the session is destroyed you functionality wouldn't fail.

    Read more!

    Siebel How To - enable or disable a button conditionally?

    I was working on my desk one day and newbie to siebel approached me to ask a question(also a avid reader on asked me the same question on mail). He asked me about a simple requirement or rather I should say the requirement that appeared simple to me.

    The requirement was :

    A button on an Applet should be enabled if a particular user logs into the application otherwise it should remain disabled.The Solution is a simple script that we can write on Applet_PreCanInvoke event to enable or disable a button conditionally.

    I am providing the pseudo code for that script below

    function WebApplet_PreCanInvokeMethod (MethodName, &CanInvoke)
    {
    if (MethodName == "UrButtonMethod")
    {
    if(UserLogin == "AuthorisedUser")
    {
    CanInvoke="TRUE";
    return (CancelOperation);
    }
    else
    {
    CanInvoke="FALSE";
    return (CancelOperation);
    }
    }
    }

    There is just one catch in the above mentioned code. How will you find that user is the authorised user or not. There are several ways of doing it some are easy and some are difficult.

    I will tell you the easiest way to do that. You just need to write one line of code to accomplish that which is as following.

    if(TheApplication().GetProfileAttr("Me.Login") == "AuthorisedUserLogin")

    There is a whole bunch of such kind of profile attributes that are available to us all the time in the whole application, we can use them anywhere we want. But discussion on Profile Attributes is subject of another post. So, come back for more.

    If this post was helpful to you, Please post your comments or suggestions to make this site better.
    Read more!

    Siebel How To - Create Inbound and Outbound Webservice?

    I was fortunate enough early in my carrer to get a chance to work on Siebel EAI. It was the first implementation of Web Services in our project. So, had to struggle a lot to understand basics of web service. But I always from my school time had intrest in XML and Web so understanding that part was not that difficult but I really had to work hard to understand web services from Siebel Prespective. I am thankful to God now that there was nobody to guide me at that time which resulted in terrific learning and understanding of a fact

    'Siebel is Huge' like a sea and what I have explored till now is not even 10% of whole Siebel.

    During my days working on Siebel Web Services I created a Powerpoint Presentation (PPT) which had minimum steps that you need to perform to create Inbound and Outbound Service with Screen Shots. Which I would like to share with you all. It can act as a your guide to check If you are missing any steps in creating Web Service. It is not a comprehensive guide but just a tutorial to give you insight and to point you to the right direction if you are involved in EAI.

    Click on the Link Below to download the PPT.

    Download Now!!!!

    Hope this post helps you. Please post your comments and suggestions.
    Read more!

    Saturday, October 6, 2007

    Siebel Tools How To - Have Mutiple Local database Instances?

    This article is a step by step guide to have mutiple local database instances on the same system.
    Below mentioned points might be the reason why you would want to do that

    • You are working on mutilple projects and they all have repository named 'Siebel Repository'. You want to work on both repositories simultaneously.
    • You share your system and you want the changes made by other developer to be on a different instance rather than yours.
    • You have a server that can be accessed by mutiple people who work on it simultaneously

    So, How do you do that? Here is the answer

    • Make a copy of your siebel local database (that is file named sse_data.dbf) rename it to be anything such as sse_data_copy.dbf
    • Make a copy your tools.cfg file (which should be residing in siebel install dir\tools\bin\enu\) and rename it to such as tool_copy.cfg
    • Open the tools_copy.cfg file scroll down to section [Local]
    • Find parameter named Connect String and change the value to reflect the name and path of you newly created copy of your dbf file.

    for example

    Previous Value : C:\PROGRA~1\Siebel\7.8\Tools\local\sse_data.dbf -q -m -x NONE -gp 4096 -c256m -ch256m -ch256m

    New Value : C:\PROGRA~1\Siebel\7.8\Tools\local\sse_data_copy.dbf -q -m -x NONE -gp 4096 -c256m -ch256m -ch256m

    you can change the other parameters also. To learn more about other parameters please read my post Siebel CRM - Configuration File (cfg) Disected and Explained.

    • Change the parameter named DockRepositoryName to different name if you don't want to have repository of your newly created instance to be Siebel Repository.
    • Create a copy of your shortcut which you use to access your siebel tools instance.
    • Right Click on the newly created instance and choose properties from the context menu
    • In the Target field of the newly opened window scroll to the point where it mentions the name of the cfg file which should be tools.cfg
    • Rename just the name of the file to tools_copy.cfg (the name of the copy of the cfg file you made)

    for example

    Orignal Value : "C:\Program Files\Siebel\7.8\Tools\BIN\siebdev.exe" /c "C:\PROGRA~1\Siebel\7.8\Tools\bin\enu\tools.cfg"

    New Value : "C:\Program Files\Siebel\7.8\Tools\BIN\siebdev.exe" /c "C:\PROGRA~1\Siebel\7.8\Tools\bin\enu\tools_copy.cfg"

    And you are done. Now you have two Siebel tools instances on the same system.

    This solution will not work if :

    1. If you mutiple users work on the system at same time. (For example a terminal server where multiple users can login and work simultenously)
    2. If you want to Check in your changes to a different server

    In next article we will discuss about additional changes that can be done to overcome this problem.

    I Hope this post was helpful to you. If yes, Please post your comments or suggestion to make this site better.


    Read more!

    Siebel CRM - Back to Basics (Siebel Architechture).

    In a perfect world this would have been my first article. But this world is not perfect and as the saying goes 'Better late than never' here it is.


    I will approach Siebel Architecture in a different way. Then I will take each technical term used in this article that is important and requires further exploration and explain it further in next articles of Back to Basics series.

    Ever wondered what happens once you have put the URL of your siebel Application in the browser and hit enter?

    This is different approach to Siebel Architecture. The answer to this question will be an explaination of Siebel Architechture. So, Let's start.

    ==> You have opened your browser window and have enterned the URL and Clicked Go button of your browser window
    http://yourseiebelapp/apptype_lang/start.swe
    Before going into background I would like to explain or dissect the above given URL.

    http : Is the protocol that is being used to transfer the data over web from one computer to another.
    yoursiebelapp : is the host name of the Web Server on which your Siebel Component resides. We will go into details of these components later
    apptype_lang can be divided into two parts
    apptype : Represents the module you are using can be sales, callcenter, mkt etc.
    lang : Represents the language of your implementation can be enu, fin etc.
    start.swe : It might be used or might not be used but represents a command recoganized by siebel component called 'SWSE' which stands for Siebel WebServer Extensions.

    Now we know the meaning of the URL we have just entered we will move behind the scenes.

    ==> The Request goes to the Webserver (Discussing Webserver is out of scope for this post) where an important component resides called Siebel Webserver Extensions (SWSE).
    SWSE :
    The responsibility of this component is to identify if the request that has arrived on webserver is a Siebel request or not and also it helps to format the html pages that are server to the Web Clients of siebel. It also supports Load balancing if you have more than one siebel server which generally is the case.
    ==> If the request received is a siebel request then SWSE contacts Siebel Gateway Name Server to obtain information about Siebel Servers and Siebel Enterprise Server.
    Siebel Gateway Name Server (SGNS):
    SGNS can be considered as Sieber Server contact information storehouse for all the siebel servers. It serves as the dynamic address registry for Siebel Servers and components. At start up, a Siebel Server within the Siebel Enterprise Server stores its network address in the Gateway Name Servers nonpersistent address registry.
    It also has a important file called siebns.dat containg information of Siebel Servers such as
    1. Operational parameters
    2. Connectivity information
    3. Definitions and assignments of component groups and components

    Siebel Enterprise Server (SES) :
    SES is not a physical server it is just a logical entity in simple terms SES is a logical grouping on serveral siebel servers such as Siebel Server shaing one database can part of SES.

    The Siebel Servers in a Siebel Enterprise Server are configured, managed, and monitored as a single logical group which helps the Siebel Administrator to start, stop, monitor, or set server parameters for all Siebel Servers within the Siebel Enterprise Server.

    ==> Once the SWSE gets information about Siebel Server it forwards the request to the Siebel Server on Round Robin basis due its load balancing feature.

    Siebel Server (SS) :
    Siebel Server is the system on which Siebel Server Components are installed and it functions as Application server. Each server component performs a defined function.Server components or groups of components determine what applications and services a Siebel Server supports. The Siebel Server runs as a system service under Windows and a process under UNIX. This system service or process monitors and controls the state of all server components on that Siebel Server. Each Siebel Server is one instantiation of the Siebel Server system service or process within the current Siebel Enterprise Server.

    ==> Once the request is received by siebel server it is passed to a component called Application Object Manager (AOM)

    Application Object Manager (AOM) :
    One of the most important types of server components is the Application Object Manager (AOM).They process user requests and are application or service-specific. For example A Sales Application will have Sales AOM and Call center application will have a Call Center AOM.This Application Object Manager provides the session environment in which this application runs. When an AOM receives a user request to start an application, it does the following:

    ==> The business object layer starts an application user session, processes any required business logic, and sends a data request to the data manager.

    Data Manager (DM) :
    Data Manager is that another component that is a part of AOM. Its primary function is to receive user request create corresponding SQL and Forward it to database Server. It also receives results from Database server and forwards it to Siebel Business Object Layer for additional processing.

    ==> Siebel Business Object Layer forwards the results to Siebel Web Engine (SWE) another component residing in AOM.

    ==> SWE helps create UI for the data and forwards the web pages to the SWSE Component which resides on Web Server.

    ==> Webserver then sends back the results to the users who had intially requested it.


    Read more!

    Siebel CRM How To - Invoke Wrokflow through BC User Property

    Till siebel 7.5 the only method know to invoke workflows were

    • Runtime Events in start step of workflow
    • Business Service
    • Business Component Script
    • Workflow Policies
    But from Siebel 7.7 ownwards there is one more method by which we can invoke a workflow. That way is Siebel business Component user property. You can 'Named Methodn' user property in a BC which can invoke a workflow where n is increment to the last named method user property defined on that BC.

    Name: Named Method

    Value:[Event Name] , "INVOKESVC", , "Workflow Process Manager", "RunProcess", 'ProcessName',[Name of the Workflows] , 'RowId', [Row Id Value]

    Example

    The below mentioned will invoke a workflow named 'Example Workflow' when a new record is created in Example BC.

    Name: Named Method 1

    Value: "New Record", "INVOKESVC", "Example", "Workflow Process Manager", "RunProcess", "'ProcessName'", "Example Wrokflow", "'RowId'", "[Id]"

    Hope this post helps you. If yes, Please post your comments.

    Read more!

    Friday, October 5, 2007

    Siebel Tools - Check In - Check Out an Introduction.

    Check In - Check Out are the very common terms that Siebel Developers hear. A rather simple but a very important feature for development. Without this feature their would be an absolute chaos during development. I will try to explain Check In - Check Out (CICO) with the help of simple Analaogy:

    Imagine a room full of documents. You are allowed to make a copy of document take it home and work on it. What If everybody was allowed to go in at any time into the room and modify any document they want? The answer is again Absolute Chaos. Imagine working really hard on the document and to see next day that what you have taken home is invalid because somebody took a copy and made some changes to and you have to do the rework.

    Based on above analogy we can map 'Room' as 'Siebel Server Repository', Documents as 'Siebel Objects', Home as 'Local Environment'

    So, the only way to control this is to have a some sort of mechanism to prevent you from taking that document while somebody else is working on it. Siebel Check In - Check Out process is precisely that chaos saving mechanism.

    We all know that siebel is based on Client - Server Architecture and the same architechture is followed in case of siebel tools. You have siebel server repository and you siebel client dbf or local database where you perform you development.

    Check In - Check Out in siebel refers to the process of getting a copy of siebel objects in the your local environment, work on it and then update it back to the server after you are done.

    There are various terms in siebel that you need to understand the check in - check out process

    Check Out : Process of getting a copy from Server Repository to your local database and also locking he object on server so that nobody else can modify it.
    Check In : Process of putting the object from local environment back to server and also release the lock so that others can work on it
    Get : Process of getting copy from Server Repository to your local database without locking the object.
    Full Get : Process to update you local tools repository will the latest objects from Siebel Server Repository. Unlike Get you don't select a particular object to update but all the projects

    You can check out a single object or a whole project. If you check out a whole project then all the objects that are part of that project will be locked with your Id and nobody else will be able to work on them. So, It is not a good idea. General practice is just to check out a single object.

    Now, I will explain the steps to perform each operation mentioned above

    Check - Out :

    1. Query for the object that you want to check out.
    2. Right Click and Choose Check Out. (You can also press F10 or choose Tools Menu ==> Check Out)
    Tip:The option of check out single object will only be available if your tools.cfg as parameter EnableObjectCOCI set to true.
    3. Again Click on Check Out in the new window that appears.

    Check In :

    1. Click Tools (Menu) ==> Check In (You can also press CTRL + F10)
    A new window will appear. It will show the objects that have check out by your id
    2. Select the Object that you want to check in and click Check In

    Get :

    1. Query for the object that you want to Get.
    2. Right Click and Choose Check Out. (You can also press F10 or choose Tools Menu ==> Check Out)
    Tip:The option of check out single object will only be available if your tools.cfg as parameter EnableObjectCOCI set to true.
    3. Again Click on Get in the new window that appears.

    Full Get :

    1. Click Tools (Menu) ==> Check Out
    2. Select 'All Projects' Radio button in the new window that appears
    3. Click Get.


    Hope this post was helpful. If Yes, Please post your comments.
    Read more!

    Siebel CRM How To - Create a new LOV?

    Whatever I have posted in this blog assumes that you have fair bit of idea working on Siebel CRM. I noticed there is hardly anything in this blog that can help a newbie. So thought of starting a new Category that is 'Siebel CRM How To'. This Category will include step by step How To's to various things in Siebel CRM. Starting this series is a simple 'How To' of creating a new List of Value and adding to the existing List of Value (LOV).

    Information about LOV and explaination about the various terms is subject of another post. In this post I am just going to have step by step tutorial of creating a new LOV and adding new values to existing LOV's

    Creating a new LOV

    You can create an LOV from two places both have a different way of creating LOV in Siebel CRM.

    Administration ==> Data ==> List of Values
    Administration ==> Data ==> LOV Explorer


    Through List of Values to add a new LOV following steps have to be followed. As an Example we will add a new LOV for Martial Status of a person.


    1. Click New and Choose LOV_TYPE in Type Field
    2. Enter MARITAL_LOV in 'Display Value'.
    3. Enter 'Marital Status' in Language-Independent Code Field
    4. Enter 'English-American' if you implementation language is English otherwise it will be according to the language of your implementation. Save the record
    5. Click New again and choose 'MARITAL_LOV' in Type Field
    6. Enter 'Married' in Display Value and Language-Independent Code Field
    7. Enter 'English-American' if you implementation language is English otherwise it will be according to the language of your implementation. Save the record.
    8. Follow steps 5 -7 for all values that you want to associate with this LOV

    For example we will follow steps 5 - 7 and just change the value Married to Single so that It can have two values 'Married' and 'Single'

    Through LOV Explorer you have to perform the following steps.

    1. Click New and enter 'MARITAL_LOV' in the Type field
    2. Click on the + sign in the left hand side of the LOV Explorer window for the type that you created
    3. Click on the Values folder.
    4. In the Right hand side Applet click on New
    5. Enter 'Married' in the 'Code' and 'Display Value' Field
    6. Enter 'English-American' if you implementation language is English otherwise it will be according to the language of your implementation. Save the record.
    7. Repeat steps 4-6 for the all the values that you want to enter.


    That's it. You are done with creating the New LOV with new Values

    To enter New Values in the existing Siebel LOV just perform the following steps.

    1. Query for the LOV Type that you want to add New Values.
    2. Copy the record Enter the Display Value and Language Independent Code Field
    3. Change the value in the Order Field to be the unique number and save the record.
    Related Posts that you might like to Read:

    Siebel CRM - List of Values a Strategic Move!
    Siebel CRM - List of Values a Strategic Move- Continued!
    Read more!

    Thursday, October 4, 2007

    Siebel Dedicated Client - Executing Workflows!

    Problem Statement :
    Whenever we try execute a functionality in siebel dedicated client involving workflows we get an error message!


    Problem Description:
    Ever tried executing functionality that involved workflows from dedicated client. If you have then you must be familiar from this problem. Whenever you try to execute functionality in siebel which involves execution of workflows with the default CFG file you will get an error message. (Will update the post with exact error message)


    Solution/Answer:
    If you go through the CFG file you will see a section [InfraObjMgr] which contains a parameter:


    RequestServerName = CHANGE_ME

    Just update the value CHANGE_ME to the name of your workflow server, save your CFG and your problem is solved. Example given

    RequestServerName = server2 (server2 will be the server where workflow manager resides)

    Hope this post Helps you.If yes, Do post your comments!!!!
    Read more!

    Monday, October 1, 2007

    Got A Problem?

    If you are facing problem in siebel and have not been able to find an answer.

    Or If you have something that you would like to share with the rest of the world about siebel.

    Or there is something that you want me to include in this blog.

    Drop a mail at neelmani.gautam@gmail.com.

    Will post you suggestions, ideas with your credentials.


    Don't wait, write now. Read more!

    Siebel CRM - Configuration File (cfg) Disected and Explained.

    Today we are going to discuss about one of the most important files for Siebel CRM. Yes, those who have worked on Siebel will know what I am talking about.
    Yes, we are going to discuss ".cfg" file which stands for configuration file which largley controls siebel bhavieor. There are basically 3 important cfg files.

    1. eapps.cfg
    2. tools.cfg
    3. cfg file for Siebel Client(Name can depend on the kind of siebel application you are using)
    so for this article we will assume uagent.cfg which is used if you are using call center.

    To discuss eapps.cfg is out of scope for this article so in this article we will be discussing tools.cfg and uagent.cfg file.

    Tools.cfg is used for Siebel Tools and uagent exsits for Siebel Client both dedicated and thin. First of all the location of the file.

    Tools.cfg exsits in :siebel installation directory\tools\bin\enu
    Here enu means the language that you have choosen. It can be different if you have installed siebel tools in langauage other than english.

    uagent.cfg exsits in : siebel installation directory\web client\bin\enu.
    For thin client the cfg file exsits on server and the path is
    /siebel install dir/siebsrvr/bin/enu if the server is Unix
    siebel install dir\siebsrvr/bin/enu if the server is Windows
    Now I will describe various sections of CFG file.

    In CFG file anything that starts from [] is a section that contains certain Parameters to control siebel. I will list important sections that are important and we need modify them often

    1. [Siebel]
    2. [DataSources]
    3. [Local]
    4. [Sample] Only used if you have installed sample database
    5. [ServerDataSrc] Very important and modified often.
    6. [SWE]

    Tip: If you want to comment anything in cfg file use ; a semicolon in front of any line would mean that siebel is going to ignore that line treating it as comment.
    I am goint to list only the important parameters in the sections.

    1. [Siebel] : This section contains important parameters related to siebel. Which are as following

    RepositoryFile :Name of the SRF file to be used
    ApplicationName :Name of the Application to be used
    ApplicationTitle :Name that is going to appear in Title of your browser window and can be anything
    ApplicationSplashText :Name that is going to appear when you start you dedicated client and can be anything
    EnableScripting :Often used for debugging purposes. If set to false no script is going to execute when you start you client
    LocalDbODBCDataSource :Name of the ODBC data source that is going to be used when you start dedicated client with local database (SSD Local Db default instance by default)
    ServerDbODBCDataSource :Name of the ODBC data source that is going to be used when you start dedicated client with server database (SSD default instance by default)
    DockRepositoryName
    :Name of the repository that is going to be used.
    WebClientSiteDir : Path to the directory from where the browser scripts and images are going to be picked up
    EnablePersonalization : To Enable or Disable personlaization for Siebel Users
    EnableRuntimeEvents : To Enable or disable Runtime Events
    EnableObjectCOCI : To Enable object check in check out when set to false you are not allowed to check out a single object. Remember Object checkout has to be enabled from tools also before you can do that

    2. [DataSources] : This section contians the what you can see from the dropdown of you dedicated client. Default values are
    Local = Local
    Sample = Sample
    ServerDataSrc = Server

    You can specify more datasources under this section to specify more section you have to define it in the following way.

    MyNewDataSource = NewDataSource
    MyNewDataSource is the name of the Section that should be present in the cfg file that is going to contain parameters to be used for this datasource
    'NewDataSource' is the value that is going to appear in the dropdown of dedicated siebel tools or client.
    3. [Local] : In this section only one parameter is important and that we can change to our advantage
    ConnectString = C:\PROGRA~1\Siebel\7.8\Tools\local\sse_data.dbf -q -m -x NONE -gp 4096 -c256m -ch256m

    As you can see the value of the connection string is in the form of Path and then switches.

    The path is the path to your dbf file and the switches that you can give are as following
    -q : means start local database in quite mode.This prevents a SQL Anywhere window from showing up.
    -m : truncate transaction log after checkpoint.
    -x NONE : Do not load any network drivers.
    -gp 4096 : Tells the engine that the database page size is 4,096 bytes.
    -c256m : Initial cache size is 256 MB
    -ch256m : Maximum cache size can be mb256.

    4. [Sample] : This section is pretty similar to Local Section with exception of one parameter

    FileSystem : It contains path to you file system where you attachments are stored

    5. [ServerDataSrc] : This is one of the most important section and you have to change few parameter before you can actually login to server through Dedicated Client.

    ConnectString : Here just like local section indicates the connection string to be used to connect to server
    FileSystem : Path to you file system. Similar to local section
    GatewayAddress : This will contain the name of your Siebel Gateway Server. This section has to be changed to a valid value
    EnterpriseServer : This will contain the name of your Siebel Enterprise Server.This section has to be changed to a valid value

    6. [SWE] : This section contains parameters related to the bitmaps and appearance of Siebel Client. But It contains an important parameter which is as following.

    ClientBusinessService : This parameter is used if you want a business service to be called from browser scripts. The Business service has to be mentioned here in this section.
    The format to mention the business service is

    ClientBusinessServicen = "Business Service Name" where n is a incremental number one more than the number mentioned in last ClientBusinessService entry. For example
    ClientBusinessService0 = "Message Bar"
    ClientBusinessService1 = "Communications Client"

    If I want to have one more entry in the file then I will enter
    ClientBusinessService2 = "Business Service Name"

    This completes the listing and explaination of important parameters of the cfg file used by siebel tools and siebel client.

    Hope this post was helpful to you. If yes please post your comments and visit again for more.
    Read more!

    Sunday, September 30, 2007

    Siebel 7.8 Signals - A Case Study!

    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.

    If you face any problems while implementing solutions then mail me at neelmani.gautam@gmail.com

    Hope this post helps you! If yes then please do write you comments and come back for more.
    Read more!

    Saturday, September 29, 2007

    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.
    Read more!

    Friday, September 28, 2007

    Siebel Business Component Outer Join - How Important?

    During my past two years of working on Siebel I have come across lot of situations where just one little miss can wreck havoc with the application. It can result in performance issues and Data issues. I think some of you might have guessed by know what miss I am talking about.

    I am talking about Outer Join Flag on Join Section of the Business Component. Joins are the integral part of Siebel configuration. They are indispensable, joins are required because we know the database (it can be oracle, DB2 or Microsoft SQL Server) is a relational database known as RDBMS in short form. Which means the information that resides in it is in the form of related tables and we always need information of one table in another. These tables are related with the help of Foreign Keys (FK). So, when we want to show information of one table in another we use Joins and we use them all the times.


    When we are creating Joins in Siebel you can see a field called Outer Join Flag. Please see the screenshot below.



    and every time we don't check that flag we are heading for trouble.
    Now, what exactly does that flag represent? Before I explain it I assume that you have basic understanding of SQL and simple joins. As I have mentioned earlier that everything that configure or do on UI is converted into SQL and that is where this flag comes into picture.

    For example see the simple sql pulling data from another table with the help of simple join

    select name b
    from siebel.s_opty a, siebel.s_doc_quote b
    where b.par_row_id = a.row_id
    and a.somefield = b.somefield
    and a.row_id = 'Some Id'

    Now this SQL is suppose to select name of the quote where the par_row_id column (which store row id of its parent) is equal to the row if of opportunity and in addition to that somefield of opportunity is equal to some field of quote. Now we assume that you had created a join between Opportunity-Quote and forgot to check the outer join flag.You will be amazed to see that there are No Records on UI. The reason being it will try to match the exact values in the field and any record that is a not a match will be discarded. Which means if there are some records that have no value in 'somefield' either in Opportunity or on Quote will be discarded. What if we want those records to shown? We have to check the Outer join flag which will result in a query as given below

    select name b
    from siebel.s_opty a, siebel.s_doc_quote b
    where b.par_row_id = a.row_id
    and a.somefield = b.somefield(+)
    and a.row_id = 'Some Id'

    Which will result in all the Quotes that have 'Some Id' in par_row_id or in simple terms that have Opportunity Id with 'Some Id' as their parent.

    My experience has taught me to ask this as the first question whenever I face problem mentioned above and I have seen developers sweat over this kind of problem for hours before they spot it. I will mention some real life situations I have faced which were due this little (or rather huge) miss while doing configuration.

    Examples - Real Life Situations:
    We have developed a web service that resulted in the insertion of quotes from a Java Application. When we inserted a quote it got inserted successfully and when we tried to update it, it Failed. It took us almost a day to find out that a developer had created a new join in business component and forgot to check that Outer Join flag which resulted in update to failed as it was not able to fetch that record.

    I had created a new View in Assets Screen. When user was in My Assets view then he was able to see the records but as soon as he choose All view the records disappeared. The reason same a new join and forgot to check Outer join flag.

    Whenever you face this kind of problem go through logs and more often than not you will find this as your root cause. To know more about logs read my Post Siebel - Logs How useful are they?

    If this Post was helpful to you please post some comments and come back for more.


    Read more!

    Thursday, September 27, 2007

    Siebel CRM - Workflow Debugging through Logs.

    When we talk about Siebel, I think Workflows are the most common term that we come across after Object Manager. We can achive really complex functionality through worklfows but what it means is that debugging them is equally complex. We generally test workflows through Simulation but if we were debug workflows in real time it can be quite painful and time consuming.

    A simple method to debug workflow is to increase the log level for Workflow Process Manager (WPM) component. But if somebody has ever tried that he can vouch that it can be quite a headache to go through that log (believe me it is a lot and it can go up in MB's even if the workflow is of moderate complexity). And what's more is that most of the information that is contained in that log is useless and not realted to workflow functionality.
    So here in this article I am going to present a pretty simple technique which can help you to get just the right amount of information that you need to debug a workflow.
    Instead of increasing the log level of complete WPM component if you just increase the log level of just selective sub-components that should do the trick. I will list down the Sub-Components that you need to increase the log level to get just the appropirate information that you need.

    • Workflow Definition Loading
    • Workflow Engine Invoked
    • Workflow Process Execution
    • Workflow Step Execution
    • SQL Tracing
    Just increase the log level of the above said components from 1 to 4 and you are done !!!!!
    To get logs from dedicated client you need set the Environmental Variable on your system. To understand the process of doing that Please go through my Old Post where I have explained about siebel logs.

    Hope this post has helped you.
    If the answer is "YES"!! Please leave your comments and visit again.
    Read more!

    Wednesday, September 26, 2007

    Siebel Logs - How Useful are they ?

    If you have worked on Siebel CRM I am sure that you have heard the term LOGS lot of times. They are one of the most important and useful things if you are a Siebel Developer. But still most of us actually know how to use them to our advantage or to reduce our development time. Here in this Article I will try to explain some tips and tricks to get the logs and debug our code. Now we all know that we have two types of Siebel Application Clients.


    • Dedicated Client
    • Web Client
    Siebel Web Client : We will talk first about the Siebel Web Client. Now to get logs from Siebel Web Client there is no easy way and the only way to get logs is to increase the log level at server for "Object Manager" or particular component that you want to get logs of for example Workflow Process Manager. I will talk detail about the Web Client Logging techniques in my next few posts.

    In this article I am going to discuss ways which can help us get logs from dedicated clients and speed up our debugging and development time.


    Dedicated Client : There are essentialy two ways to get logs from dedicated client

    • Spool
    • Environmental Variable

    Spool : it is a very basic and known technique to get the spool of all the SQL Queries that are fired in the database level and we all come across it during our initial Siebel development days. We can enable the spool for Siebel Client as well as Siebel Tools. The steps to enable spool for both the Siebl tools and client there is common process which is as following

    1. Right click the siebel tools or Siebel Client Shortcut
    2. Go to end of String which is in Target Text Field
    3. Enter the Following string at the end: /s "c:\spool.txt"

    /s switch here stands for Spool. Various other switches that can be used are as following

    • /u : username
    • /p : password
    • /d : database

    With the following string you can automate login to your local or sample database depeding on the value you give in the switch. I am providing you examples of both

    /u sadmin /p sadmin /d sample : String to login to Sample database with Sadmin user id
    /u user /p pwd /d local : String to login to Local database with "user" user id.

    Environmental Variable : This is more powerful and less know method of generating logs for dedicated client. Siebel has provided couple of Environmental Variables which are as following :

    • SIEBEL_LOG_EVENTS
    • SIEBEL_LOG_DIR

    SIEBEL_LOG_EVENTS : This environmental variable can have two types of values.
    Numeric or text.
    The numeric value is the log level which can be between 1-4. 1 being the lowest and 4 being the highest. The Text value can be ALL which means Log Level of 4.

    SIEBEL_LOG_DIR : This value of this variable is path where you want to create the logs. Makes sure that the path you mention is valid otherwise the logs will be created in the temp directory.

    Examples of both the environmental variables are as following

    SIEBEL_LOG_EVENTS : ALL
    SIEBEL_LOG_DIR : C:\siebel_logs

    The process to create these enviornmental variables is as following

    1. Right click on the My Computer Icon
    2. Select Properties from context menu
    3. Go to ==> Advanced Tab
    4. Click ==> Environmental Variables
    5. In User Environmental Variables Tab click New
    6. Enter SIEBEL_LOG_EVENTS in Variable Name field
    7. Enter ALL in Variable Value Field
    8. Click New again and Enter the following details
    9. Variable Name : SIEBEL_LOG_DIR ; Variable Value : "your siebel log path"

    Remember that Variable Names are case Sensitive. After you have created the variables when you start you dedicated client you will notice that in the path that you have given a file named siebel.log is created for Dedicated Client and file named siebel_dev is created for Siebel Tools.

    If you don't provide the SIEBEL_LOG_DIR environmental variable the logs are created by default in Temp Directory.

    Hope this posts helps you.
    If the answer
    is yes. Please post your comments and visit again.

    Read more!