Monday, August 16, 2010

Oracle Siebel CRM Book

I would like to inform you that recently a book titled "Oracle Siebel CRM 8 Installation and Management" written by Alexander Hansal is published. This book helps Install, configure and manage a robust Customer Relationship Management system using Siebel CRM. This book helps in understanding Siebel Web Architecture and ways to plan and prepare Siebel CRM infrastructure.

Alexander Hansal has worked as an IT professional in small, medium, and global corporations. Since 2001, Alexander works as a technical instructor and consultant for Siebel CRM and Oracle Business Intelligence in Europe. He enjoys teaching, and shares his knowledge and expertise in his classes at Oracle University and in his weblog,

Sharing is the Power.

Wednesday, June 9, 2010

Local Database - For Multiple Users

We had to show a demo to the Client, our server got some issues and was getting restarted every now and then. We had only one environment set up at that time. We needed something if Server will not be up then how can we show demo to the client. The option was Local Database. We needed something like what we can do with the sample database where multiple users can login into the application using same database.

In our application, we were using Position and Organization based visibility for the Cases. Call Center user creates a record and assign it to an Organization and Position. Then the users who have that position has to work on that case. We needed to show the functionality where multiple users can login into the application.

How we can create multiple users login into Local Database. One of co-author of this blog and my friend Nikhil found something. On behalf of him, I am writing down steps to run some sql commands and multiple users can login into Local databases.
  1. Open the dbisqlc with User ID Siebel and password of the user with whose Id local was extracted.
  2. Then in dbisqlc, Grant permissions for users to use the Siebel application.
  3. Run SQL 'grant connect to SSE_ROLE'.
  4. Run SQL 'grant connect to identified by '.
  5. Run SQL 'grant group to SSE_ROLE'.
  6. Run SQL 'grant membership in group SSE_ROLE to '.
  • The must already exist in the database and the must be SSE_ROLE.
  • The and in the grant command must be in UPPERCASE
Now you can grant multiple users the access to the Database. 

Sharing is the power.

Tuesday, June 1, 2010

Incremental Compile - Popup Visibility Auto All Issue

I have heard many times that there could be problem with the Incremental Compile Issue of the SRF.
I have also seen some times that there are some inconsistent issues because of Incremental Compile. Today , I saw it having issues with Incremental Compile and it has also been documented on Oracle Support aka metalink.

As we know that on BC level, there are two of the properties like Popup Visibility Auto All and Popup Visibility Type. 
Ideally, It should work like if Popup Visibility Auto All is TRUE and the Login User has responsibility to see All Across Organization View, then "Popup Visibility Auto All" will override the Popup Visibility Type value.

For eg. Let's say User ANWALIA(myself) has responsibility to see All Contact Across Organization View. The Contact BusComp has Popup Visibility Auto All as TRUE and Popup Visibility Type as Organization.
Now because I have All Contact Across Organization View, in any popup applet used by Siebel like Associate Applet, Pick Applet etc. I should be able to see all contacts across organizations.

Here is a catch of Incremental Compile, If any buscomp has the above kind of configurations and you lets say recompilation of the Contact Screen is done, hen Popup Visibility Auto All would not work as expected. It will work based on Popup Visibility type.

This can be avoided if you compile the whole project or do a full compile.

Sharing is the power.

Tuesday, May 18, 2010

Case sensitive and Insensitive Query

Siebel earlier used to have one Field Level Property Use Default Senstivity. This property is obsolete now.

To provide Case Insensitive Query on the Fields, Siebel 8.1 version has introduced a CIAI (Case and Accent Insensitive). Accent Insensitive does not work in Siebel vesrion. You can use SoundsLike Operator for the Accent based query.
On the column level, right click at Column.
Siebel will run you through a wizard and create a new column and indexes to support the Case Insensitive Query.

Note: You need to lock the project to run through the wizard.

Calculate Commit Time using Business Hours

 This post is a supplement to one of my previous post Calculate Business Hours

I had one requirement where I need to calculate the Date Time, user has to finish the work.
The time taken should not include the Holidays. It should only consider Working Hours to calculate the time taken.

As I told you in my previous post that the Business Service 'FS Holiday API Service' provides 3 methods:
   1. GetElapsedBusinessTime
   2. GetResponseTime
   3. IsHoliday

GetElapsedBusinessTime: It majorly requires input as the below:
  • Service Calender Id
  • Start Time
  • End Time
As the result it provides you the time spent in between the Start and End Time excluding Holiday and including only working hours.
Note: This method has a bug in Siebel (21215):
Defined our Schedule from Sunday to Thursday, time from 7 AM to 7 PM. The timezone is (GMT+04:00) Abu Dhabi, Muscat. It is observed that whenever there is data like:
Start Time: 4/15/2010 10:31:34
Schedule Time Zone: (GMT+04:00) Abu Dhabi, Muscat
Calender Id: <>
End Time: 4/18/2010 08:31:33
Time Unit: Hours.
And the end time is coming on Sunday. like April 18, 2010, April 25, 2010 or 2 May 2010.
It is failing and crashing the server.

GetResponseTime: It majorly requires input as the below:
  • Service Calender Id
  • Start Time
  • Response Time
As the result it provides you the Date time or Commit Time, for example time till which user has to finish the work excluding Holiday and including only working hours.

  • Calender Id
  • Date Time
As a result, it gives if that Date Time is lying on Holiday.

Oracle does not provide any OOTB functionality in OBIEE (reporting) to cater this requirement. Our OBIEE team has to write a Procedure.

Sharing is the power.

Saturday, May 1, 2010

SoundsLike Operator

Searching for exact Contacts in Call Centre with First and Last Names is not that much easier as we may think.Different people uses different spelling for their names for example John can be spelled like Joan, Jon, Joanne, Joann.

How to search a contact with similar pronouncing name. This was one of the requirement I came across. One of my friend Jalaj suggested SoundsLike Operator. Siebel provides a SoundsLike Operator which can be used to find the similar pronouncing names.
Let me show you how it works, you need to query in the Applet Field with SoundsLike('John').
In return or clicking on Go, it will give results like in below.
This Operator can also be used to BusComp Prequery event to modify the searchexpr with SoundsLike Operator.

Sharing is the power

Saturday, April 10, 2010

Localization - Multi-Lingual Application

I was very much amazed with the application which was set up in multilingual. I never had this kind of experience in my earlier projects. In new project, most of us was never worked in Multilingual application.

We have to work for English and Arabic Languages. We have categorized that there will be following object where we need to work for multilingual applications.
  1. Static List of Values.
  2. Data Validation Manger.
  3. Symbolic Strings.
  4. Alerts in Browser Script.
  5. Error Messages in Server Script.
  6. Email Templates.
  7. Dynamic List of Values.
Testing of the applications in English and Arabic. For the Arabic Applications testing and the label names, we had to call a Translator and we used Google Translator also.

Apart from installing the Application set up in both languages and language packs. Some of the facts are like:-
  • The Arabic application and English application, both use different Object Managers
  • To compile the SRF also.You need to change the language setting of the Server tools
  • You also need to set one Language parameter at Object Manager level. 
  • For each static LOV, you need to mention the LOV and Translate Table at Column level.
  • Use LookupValue in Calculated Field and TheApplication().InvokeMethod("LookupValue", ) for script.
  • For each language,Validation Messages for DVM
  • Symbolic Strings for labels on User Interface.
  • Object Message Category- Error Messages
  • Administration Communication - Email Templates - Languages.
  • Choose the right Parent LIC for Hierarchical Picklist Like if the Child is in Arabic then Choose the Parent LIC also as Arabic only(we were careless while doing this and had to face issues)
Sharing is the Power.

Named Method n - Alternative to Scripting

Named method is a very good alternative to the Scripting if you have custom method to invoke. It can be used both at applet level as well as at BC level. You need to specify a user property Named Method n.

It can be used to do some of  following things:-
  1. Set the field values with or without conditional expression, 
  2. To invoke OOTB methods.
  3. To invoke Business Service/Workflow.
I have used this user property with On Field Update Set and On Field Update Invoke user properties.I really found them very handy to use. I have to use the customize method because in our project Client was very demanding and was very much focused on usability of buttons to perform actions.

Some of the examples I have used of the above user properties are like:-

User Property Value
Named Method 1 "DeclineCase", "SET", "Position Name", "IIF([Case Decline Reason]='Incorrect SM', [Parent Position Name], IIF([Case Decline Reason]='Incorrect Entity', '', [Position Name]))"
Named Method 2 "DeclineCase", "INVOKE", "HLS Case", "WriteRecord"
Named Method 3 "DeclineCase", "INVOKESVC", "HLS Case", "Workflow Process Manager", "RunProcess", "ProcessName", "Case Assignment Email Notification"
Named Method 4 "DeclineCase", "INVOKE", "HLS Case", "RefreshBusComp"

For more details, Please refer the bookshelf.

Sharing is the power

Tuesday, April 6, 2010

Using Email Templates for Automatic triggering of Emails

This is the extended post of my previous posts how to create and use email template on F9, Send Email OOTB functionality. Supplementary to this, I have also posted creating Recipient Group.

In this post, I will tell the rest of the things:-
  1. Creating the New Recipient Source.
  2. Creating the Non-Joined Recipient Group.
  3. Creation of Email template.
  4. Substituting the Fields in the Email text.
  5. Adding HTML templates.
  6. Testing the Outbound Communication Request.
  7. Calling the BS to send the emails.
Let's take a scenario where the Bus Comp is not there listed in the Object for the field Substitutions.

Step1: Query with LOV Type as 'COMM_RECIP_SRC' and Parent LIC as null.
Copy the record and put the Display value and LIC as your Bus Object name.

Step2: Query with the LOV type as 'COMM_RECIP_SRC' and Parent LIC as not null.
Copy the record and put the Display value and LIC as your Child Buscomp which is the Recipient Group BusComp(like Contacts or Employee). Here you may get the unique record error. You may need to update from back end. You can also create Joined Recipient Source.

Step3 and Step4: Creation of Email template

Step5: To add the HTML templates go to Template Items View. There, you need to add the HTML file. In the HTML code, add the fields name inside square brackets for example [Full Name]. Check the Substitute values if you have used substitute fields and message body if you want to add the HTML into message body of the email.

Step6: To Test the Recipient Source, Recipient Group and Email Template, you can create a Outbound Communication Request from Administration-Communication Screen.
  • Go to Outbound Request Overview View, 
  • Create a new record, 
  • Put the Recipient Group. 
The below applets will be based on the Recipient Source and Recipient Group. Like if you Recipient Source is Account, the New button on Recipient Source will be a Associate Applet of Account BC and the Recipient Source will get auto-populated based on the relation of Recipient Source and Recipient Group.

Make sure that Communication Outbound Manager component is up and running and you have selected the Communication Profile at Email template level.

Step7: Now you have created the Recipient Source, Recipient Group and Email templates.
To triggering the email you need to call the 'Outbound Communications Manager' BS and its method CreateRequest. The arguments you need to pass to this method are follows:
  • PackageNameList: Name of the Email Template
  • ProcessMode: Remote for Dedicated Client, Local for Web Client
  • RecipientGroup: Recipient Group Name like Contact
  • SourceIdList: Row Id of the Recipient Source BC like Account
You can call this Business from any triggering point where you want to send the Email.

The best thing about using the Email templates and CreateRequest of Outbound Communications Manager is the flexibility of changing the Email Body while this is not possible if you are using SendMessage of Outbound Communication Manager.

Sharing is the power.

Sunday, February 28, 2010

Scripting alternative –Data Validation Manager

Many times, system requires us to put validations; we generally end up with scripting in Pre Events like PreSetFieldValue or PreWriteRecord.

Recently, I worked on Data Validation Manager which is a quite useful tool to do validations in the application itself without changing the srf. With the combination of Run Time Events, I really found DVM competitive to avoid scripting and from maintenance perspective also.

We can use conditional expression to check the validation and invoke a RTE and DVM.
I will run through the End to End process of creating a RTE and DVM Rule. I will also show you validation getting fired in the application.

Let’s take an example, I want to put a validation that a contact record must have an email address or a Mobile Phone number or a Work Phone number.

To work this validation out, I will do the following steps:- 
  1. Create a DVM Validation Message.
  2. Create a DVM Rule.
  3. Call Data Validation Manager BS using the Action Set.
  4. In the Business Service Context, Provide the DVM Rule name.
  5. Create a RTE.
  6. Reload the RTE and activate the DVM Rule.
  7. Creating a new Contact Record and test the DVM.

I need to create RTE and DVM. It will be a mandatory check for email address or a Mobile Phone number or a Work Phone number. This RTE will be on PreWriteRecord of Contact BC.

Step1: Go to Administration - Data Validation and Create the DVM Message

Step 2: Create DVM Rule for contact validation.

Step 3 and Step 4: Create an Action Set for RTE
Business Service:  Data Validation Manager
Business Service Method:  Validate
Business Service Context:  "Rule Set Name", "Contact Details", "Enable Log", "Y".

Step 5: Create a Run Time Event on PreWriteRecord on Contact BusComp and Call the Action Set created in Step 3 and 4.

Step 6: Reload Run Time Event and Activate DVM Rule.

Step 7: Create a Contact Record and test DVM.
The Limitation of the DVM is that field should be visible on the UI.

Sharing is the Power.

Saturday, February 20, 2010

SetNamedSearch - Cannot be modified through UI

Have you come across a requirement where after reaching a view. You don't want user to do a new query and get all the records. You only want to show those records which user saw first time on reaching to this view.
Though you want to give him a query option to search in the given records first time.

Yes, this can be achieved using SetNamedSearch BusComp Method. 

Let me explain you with the help of a example.
Using a Drilldown, user reached to a All Activities List View where I don't want him to see Confidential Activities. I captured the method Drilldown and the Field name using SWEField property, in the drill down only I put code like

BusComp.SetNamedSearch(searchName, searchSpec)

SetNamedSearch("NotConfidential", "[Confidential] != 'Y'")
GotoView(ViewName, BO instance)

Now even after reaching to the DrillDown View, if user do a null query. He will not be able to see the confidential activities.

It is a search criterion that is not cleared by the ClearToQuery; for example, a predefined query or business component search specification.It can only be modified through script; it cannot be modified through the UI. 

You can retrieve this search specification, use GetNamedSearch metho.

Note: that when a new instance of the BusComp is created, the named search specification is cleared.

Friday, February 19, 2010

MVG Set Primary Restricted: Position

Have you ever seen that you are not able to change the primary in a MVG applet based on position. you are not able to figure it out how this Primary Field becomes editable. The Primary flag is read only.
You checked the No Update Property if it is set. You have checked if any Buscomp Read Only User Property for the primary Record. If still you are not able to find the reason why you are not able to change the Primary.

The reason may be Position Protection mechanism. Position Protection is a mechanism that protects against unauthorized changes within a MVG applet based on Positions. If Position Protection is active then changes can only be done by privileged persons or within certain views.

In Siebel previous version before 7.x, Position Protection mode can be disable but to a limited extent.
In Siebel version 7.x and above, this does not apply. Disabling Position Protection is handled by setting the 'MVG Set Primary Restricted: visibility_mvlink_name' user property to 'FALSE'.

Position Protection is active when:
  • the view's Property Admin Mode is set to FALSE
  • the multi-value field's (MVF) business component is set up with Position Team Ownership
The following business component Properties must be set:
  • Visibility Emp MVField
  • Visibility MVLink
The MVLink must point to the Position business component.
  • The Multi Value Field is based on Positions.
NOTE: Position Protection is not active within Siebel VB / eScript, regardless of above settings.

View Links

We must have seen the Links on the Screen Homepages. But I was never known that these are just links to the View which can have default PDQs. It just works like a Drilldown on a field. I always thought that these are configured at Applet Level and its a SRF Change.

Recently, there was a requirement I came across to configure those links. We can configure those link from Application itself. As we know that PDQs can be Private and Public. Similarly, these links as well can be Private and Public.
Private View Links: Visible only to the Creator.
Public View Links: Visible to everyone using the application.
If User wants to configure these links, they can do so using User Preferences->View Links.These links from User preference can be only Private for that user only.

You can specify the Default Query, which can be configured using Application Administration -> Predefined Queries.
The Public and Private View Links can also be configured from Application Administration -> View Links in the same way as you do in User Preference.
To configure the View Links in Screen Homepages, you should know Screen Name, View Name.
If you want to specify Default Query then a pre-default query will be created by System Admin.
Let me show my customized View Links 

There are some BCs which may not have Screen Homapages, you need to add a User Property VlinkScreen::  value as 'Y' in the 'SRF Vlink Screen' Business Component.

Saturday, February 6, 2010

Calculating Business Hours

I had one requirement where I need to calculate the time, user has taken, to complete a certain task.
The task time taken should not include the Holidays. It should only consider Working Hours to calculate the time taken.
First, we need to know where we can feed in the working hours, holidays in Siebel.

Question: Do we have something OOTB?
Answer: Yes, we have got a View based on Shift BC using view Administration Service->Schedules

Question: Where can we put the Holidays?
Answer: Administration Service -> Schedules -> Exception Hours

Question: Do we need a customize BS to calculate the Time difference considering working hours only?
Answer: Yes we have got a OOTB BS 'FS Holiday API Service', that gives output as Elapsed Time using input as Start Time, End Time, Time Unit, Calender Id(Schedule Id)

FS Holiday API Service BS provides 3 methods:
  1. GetElapsedBusinessTime
  2. GetResponseTime
  3. IsHoliday
I simulated this BS using method GetElapsedBusinessTime to calculate the Elapsed Time.

You can provide input argument as below:
  • Calender Id : Id of the New Schedule
  • End Time: 02/06/2009 12:54:28
  • Schedule Time Zone:
  • Start Time: 04/06/2009 10:54:28
  • Time Unit: Hours
It will give the Business Hours based on the Service Calender used.

Sharing is the Power.

Monday, January 25, 2010

Global Target List Management

List Management is a functionality extensively used for Campaign and Surveys.
Apply List and Save List Button which you usually see in Menu Item for the Applet are the two ways to manage Internal Lists.

Siebel provides this feature for entities like Contacts, Accounts, Employee, Positions, Prospects. Let us take an example that I want to do a Email Campaign for Contacts Living in California. I will do a query on state field in All Contact List Applet. Clicking on Save List will give me a popup applet shown below.

I will save the List with a name. List can be seen in the List Management Screen.

The List is ready to be used for campaign. There are many applet where Apply List and Save List buttons are disabled. To enable those button, you may need to configure the User Properties, Link and MVL.
I configured that for Case List Applet
I had created the below things to enable the Save button and work it for me.
  1. A Link between HLS Case and List Mgmt Lists.  
  2. A MVL for HLS Case and List Mgmt Lists
  3. MVF for Id fields.
  4. User Property TargetProp.
  5. List Column for Ids
  6. Applet User property as Save Target List Source1.
For details, please read AppsAdmin.pdf, chapter Global Target List Management.

Sharing is the Power

Wednesday, January 13, 2010

Configuring Recipient Groups

Recipient Groups are used to automatically populate 'To' field while we send Emails, Fax and other sort of Outbound Communications in Siebel.

Siebel provides some Predefined Recipient Groups for example
  • Account Contacts, 
  • Activity Owner, 
  • Campaign Contacts/Prospects, 
  • Employees, 
  • Opportunity Sales Team Members
  • Quote Sales Rep
  • Service Request Owner and more
If the predefined recipient groups do not serve all your business needs, you must configure the Siebel application to extend or modify the available recipient groups.

Now, we need to Configuring Recipient Sources Applets and  to add Recipient User Properties at BC level.
Steps are given in the Siebel Communications Server Administration Guide bookshelf to configure the Recipient Pick Applet.
You just need to copy applet and configure it for your BusComp Comm Source bus_obj_name List Applet like the figure below.

Add the User Properties to populate the Email Address, with Whom Email Address and which recipient should be coming in the recipient pick applet.

Compile the changed object and press F9 will open a recipient pick applet after choosing it, a send Email box will open with 'To' field populated.

Sharing is the Power.

Monday, January 11, 2010

Configuring Email Templates

To show you how to configure Email templates, Let's take an example for Object 'HLS Case' which is a part of Case Management.
I will also show you how to Substitute Fields to be used in Email Template.

Steps to Create Email Template
  1. Navigate to the Administration - Communications screen, then the All Templates view.
  2. In the Templates list, click New and complete the fields as appropriate for example Name, Channel type, Status.
  3. In the below Simple template's Pick Available Substitution section, here you can choose the Object like I have chosen HLS Case and in Available Substitution, you can choose the Fields to be used in Email templates. In case the field you want to use is not present, you can put [Object Name.Field Name] for example [HLS Case.Case Num] in the email template. Otherwise, you need to add a BC user property Substitution Field # and put the Value as Name of the Field for that Business Component.

  1. You can also configure some more parameters in Advanced template View. Please see the difference I encircled.
    • Create Activity is used to create activity as soon as the Email Template is used.
    • Attach Bookmark is used to attach the active View Link as the Bookmark of the Email.
    • Recipient Groups for the recipient of the Emails. I will post how to configure that in another post.

In the similar way, you can configure Templates for other channels like Fax Templates, Phone Templates, Paging Template and Wireless Message Templates.

Now, based on the Object you selected while creating the template, the Template will be coming in the Body dropdown list of the Send Email Popup Applet.

You can also configure default Template for Send Email Command(F9).A default template is preselected and populates the message area when the Send Email command is invoked, based on the current (active) applet at the time the command was invoked. To specify that a specific email template is the default for a given applet, specify the template name as the value for the Mail Template applet property for the applet.
In future post, I will discuss about How to Configure Recipient Groups and auto populate of To field in email. It may requires some configuration in Tools.

Sharing is the Power

Friday, January 1, 2010

Using Email Templates for Send Email F9 Functionality

Happy New Year 2010 to my Dear Friends, Today I am posting on how we can use Email templates for Send Email F9 functionality.

Siebel Public Sector is primarily using Case Management. Everything roam around that only.
We had a scenario where when a case closes, CSR can send an Email to the Customer for the survey about the services provided. This is very commonly used scenario where after providing a service, customer is asked to fill the survey for the satisfaction level about the services provided to him.

Sending Emails is very common in Siebel Application now a days. It can be done using Outbound Communication Manager Business Service or Send Email or F9 from File Menu.
Here, I did configuration so that as soon as user presses F9, a recipient pick applet gets open.

User can pick the recipient for the email. The email address gets auto-populated into 'To' field. Body field is a dropdown showing email templates assosiated with the Business Object. I selected my configured email template then by default, it populates the Body field with the Text and the Substitution Fields like Case #, Case Description, Case Owner etc.

This has also been OOTB configured in Service Request Business Object. I will discuss the whole steps to configure the same in my next post Configuring-Email-Templates

Sharing is the Power.