What is difference between Incremental Compile and Full Compile?

Incremental Compile: When we select a single object (BC, Applet etc), several objects (Multiple BC, Applets, BO etc), single project or several projects to compile in an existing SRF file that is known as Incremental Compile.

Full Compile: When you compile all the projects in a SRF file that is known as Full Compile.

: Difference:

SRF File: We do an Incremental compile on an existing SRF file and Full Compile results in creation of a New SRF file.

SRF Size: SRF size is more when we do an Incremental Compile as compared to Full Compile. For example if a Full Compile results in a 28 MB SRF file then an Incremental compile on that file can increase it’s size up to 32 MB

2) How to update a field based on change in another field?

How to update a field based on change in another field?

OR

How to update a field when another field is updated?
Scripting

  • On Field Update Set n user property. (This is the answer interviewer is looking for though)

Explanation:

Scripting:

You can write script on SetFieldValue event of buscomp to update the target field. But the problem with this solution is if user UNDO the record then your script won’t revert back the changes that it has done.

One more solution can be to check in SetFieldValue event if that field is being updated through global flag and then on WriteEvent of buscomp execute your script only if that flag is set to true. But again you will have to set global flag to false may be Delete event (this is fired when user undo the record).

These solutions by scripting are really cumbersome. So we generally use On Field Update set n User property for this kind of requirement.

On Field Update Set n:

As the name suggests that this user property is used to set value of another field when a particular field is updated. In this user property n is the incremental number which is 1 more than the number used in the last On Field Update Set user property.

Value:
The value of the On Field Update Set user property consists of three quoted parameters separated by a comma and a space which is as following “FieldToCheck”, “FieldToSet”, “[Value]“

Example:
You want to set TargetField with SourceField value whenever SourceField is updated. So you will specify it like this.

Property: On Field Update Set 1
Value : “SourceField”, “TargetField”, “[SourceField]”

You can also make use of expression in the Value that you specify.

Example:

“SourceField”, “TargetField”, “[SourceField] + [AnotherField]”

3) What is the primary purpose of using surrogate key?

  1. What is the primary purpose of using surrogate key?
  2. Will those be used in fact tables? If not then what is the purpose in using it?

Answer:

Surrogate key is used for indexing purpose i.e. as a primary key for a table.

Reason of using Surrogate Key over Primary Key:
Primary Keymay take more or less memory i.e. it may contain characters but Surrogate Key contains only number. So comparison of numbers is easy when comparing with characters.Yes, Surrogate Key will be used in fact tables to establish a relationship between dimensions.Surrogate keys are implemented by using the Sequence generator.

4) Position and Responsibility relationship – Interview Question

An important question (every question asked in an interview is important isn’t it ) involving quite a few important entities in Siebel such as Position and Responsibilities. This question can come in variety of ways I am just giving a single question, but other flavors might be exist

What kind of relationship exists between Position and Responsibilities?

It is a question that requires a subjective answer, and answer can vary from person to person. I will try to give answer to the above question(s) but before that I would like to give a disclaimer.

The views presented in this post are mine and only mine. No person dead or living has anything to do with it. Please use the answer in interview at your own risk and if somebody is offended by it or feels differently he is free to express his views by the way of comments in this post
Answer or Explanation

There is no direct relationship between Responsibility and Position.
The indirect relationship between Responsibility and Position is of Visibility. Both of them drive Visibility in Siebel.

  • Responsibility restricts access to particular view so that user cannot see those views.
  • Position restricts access to particular set of data.

So, as a result both are used to limit visibility of users of application.

After discussing with my friends and peers about this question I am getting a feeling that I am putting my hand in a bee nest but I think this could end up as a new learning to me and for all.

So guys I beg you to tell me your views what do you think about this question so that this post can become the new answer for all of us.

5) What will happen if I provide value in both Pre-Default and Post-Default properties?

I will try to explain the answer with the help of an example of“Status” field.

We will assume the following values have been given for Pre-Default and Post-Default properties of Status Field

Pre-Default Value: “In Process”
Post-Default Value: “Complete”

Following are the scenarios which can take place:

User creates a New Record and saves the record without changing value of status field:
Pre-Default value (In Process) will be assigned to Status field.

User creates a New Record and changes the value of Status field to “Planning”
Pre-Default value is going to take effect as soon as user creates a new record but Post-Default value will not take effect. [Corrected as pointed by Gururaj]
User creates a New Record and changes the value of Status field to blank
Post Default Value (“Complete”) will take effect

User copies an existing record where value of status field is “Planning”
Neither Post-Default nor Pre-Default will take effect

User copies an existing record where value of status field is blank
Pre-Default (“In-Process”) Value will take effect

User copies an existing record and makes the value of the field as blank
Post-Default Value (“Complete”) will take effect

User changes the value of existing record to blank and saves the record.
Neither Post-Default nor Pre-Default will take effect as these values only takes when the record is initially created and saved.

6) Siebel Workflow Step – Missing Query Operation

Loading ...

Problem:

I had to create a workflow and the first step in the workflow was Query Operation on Opportunity BC. I dragged the Siebel Operation Step into designer and then started entering Values for this step which were as following

Type: Siebel Operation
Business Component: Opportunity
Operation: Query

But to my utter surprise Query was missing in the Operation field dropdown and only Insert and Update were available.

When I entered Query manually in the field it accepted the value but started giving error

“Error loading Step Definition: Query Operation not found”
(Not exact error message)

Solution:

After going through the logs and thinking logically I was able to find the solution of the problem. My logical thinking that gave met he answer was.

Drop down is a pick list in Siebel and picklist gets its values from List of Values. I queried with Insert in the Display Value in List of Values view and there was a LOV Type called “WF_SIEBEL_OPER_TYPE_CD” which had Insert and Update as active and “Query” was inactive.
After making “Query” record Active and restarting tools I was able to execute my workflow successfully.

Note: Even if you provide LIC of this LOV in small case then also you will get the error. For this LOV Display value has to be in Camel Case and LIC in caps

Hope this will save someone from a lot of hassel and I still have to find the person who made this LOV inactive.

7) High Interactivity Framework Problem.

Loading ...

We faced this problem quite often in Siebel 7.7. I am yet to face this error in Siebel 7.8 but I think there are lot of people that are still using Siebel 7.7 or even Siebel 7.5 so they might be facing this kind of problem.

Problem:

When clicking on Pick Applet in Siebel 7.7 application the application IE instance used to crash and we had to reopen the application. It happened only in case we were working with Pick Applet.

Reason:

This error was due to High Interactivity Framework files getting corrupt. For those who feel this is new term I will just give a background.

Siebel can operatewith two types of framework

  • Standard Interactivity
  • High Interactivity.

The difference between both the frameworks is how Siebel Client communicates with Server. In case of standard interactivity the changes you make to record are not committed automatically to the database and use has to explicitly save the record and in High interactivity even if you step of the record or screen the changes are committed automatically.

Solution:

Solution of this problem is to go and remove the High Interactivity framework files and open the application again. When you open your application Siebel downloads fresh interactivity file from server.

These are steps you can follow to remove and reinstall the interactivity files

Goto Internet Explorer –> Tools Menu –> Internet Options

Click on Settings Button

Click on View Objects Button

Locate High Interactivity Files

8) Siebel CRM – How To Call a Workflow Asynchronously?

Loading ...

This Article is about Siebel CRM 7.X Workflows and Runtime Events. It tells you how can we use them to our advantange.
We all want the response time of our Application to be as fast as it can and we do everything that we can to achieve that. I am going to tell you about a way which can help you to reduce the response time without actually reducing any functionality. Siebel can execute workflows in two ways.

  • Synchronous
  • Asynchronous

Synchronous Execution : When workflows are executed Synchronously then user gets the control back only when the workflow has finished it execution.

Asynchronous Execution: When workflows are executed Asynchronously then user gets back the control immediately and the workflow is submitted to workflow process manager (WPM) as a job to be executed. WPM then executes the job later.

Often we have a functionality where large amount of processing needs to be done on an object which user is not going to use access right now. I can explain it with an example.

When user clicks copy button on a opportunity or quote we want certain custom entities to be copied over but which user will not access at that time but later.

So, we can reduce our response time by just copying the quote or opportunity synchronously and placing the code of copying of custom entities in workflow and executing that workflow asynchronously.

There are two way to execute a workflow asynchronously

  • Workflow Policy
  • Runtime Event and Business Service (BS) Combination

Workflow Policy is pretty traditional method of executing a workflow process.
You create a policy. Enter the conditions Specify the workflow to be executed Generate Triggers
I wouldn’t go into details of creating a policy but I will tell you some disadvantages of using Workflow Policy

  1. Slow Execution
  2. Difficult to setup
  3. Not Reliable and Error Prone

But from siebel 7.7 onwards we have another more robust, efficient and quicker way to do that which is Runtime Events and Business Service.

This Article is about Siebel CRM 7.X Workflows and Runtime Events. It tells you how can we use them to our advantange.

In this article I will tell you about the actual process of Setting up Runtime Event and Business Service assuming you have working knowledge of both. If you want to know the basics of these please see other posts of my blog.
Just one important thing that you should know about runtime evetns is that they are executed even before the Business Component Events. To explain it better I am taking an example where our requirement is to execute a workflow when you click Submit Oppty button on Opportunity Form Applet.

  1. Goto Administration ==>Runtime Events Screen
  2. Goto Action Sets View
  3. Create a New Record in the Action Set View of Runtime Events Administration Screen
  4. Enter Any Name in the Name Field of the Action Set List Applet
  5. Create New Record List Applet Below it
  6. Enter

Name = “TestRuntimeEvent” ;
Action Type = “Business Service” ;
Sequence = “1″

  1. In the Form Applet Below Enter the Following Details Business Service = “TestBS” ; Business Service Method = “TestMethod”8. Click Menu ==> Reload Runtime Events Make Sure that you have Active Flag checked in both List Applets.

You are done in Action Set View.

Now Goto Events view and Follow the steps given below

  1. Click New and Enter the Following Information

Sequence = 1 ;
Object Type = “Applet” ;
Object Name = “Opportnity Form Applet” ;
Event = “InvokeMethod” ;
Sub Event = “Submit Oppty” ;
Action Set = “TestRunTimeEvent”

Conditional Expression should be given if you want the restrict the execution of this Runtime Event to certain conditions and Action Set Name is always the name of the action set that we created.

2. Click Menu ==> Reload Runtime Events.

Now we are going to write the code in the busines service which will actually result in the execution of Workflow Process Asynchronously.

  1. Go To Administration ==> Business Service
  2. Create a Business Record with name “TestBS”
  3. Create a Record in List Applet for Service_PreInvokeMethod and choose Programming Langauge as “eScript”

Write the Following code in Code Window inside the function Service_PreInvokeMethod

if(MethodName == “TestMethod”)
{
var svc;
var child;
var input;
var output;
var rowid;
var bo = TheApplication().ActiveBusObject();
var bc = bo.GetBusComp(“Opportunity”); // Change the BusComp name with the name of the BusComp you want to execute the workflow with
svc = TheApplication().GetService(“Asynchronous Server Requests”); // Don’t change this – Actual BS that is responsible for submitting a job to WPM
input = TheApplication().NewPropertySet();
child = TheApplication().NewPropertySet();
output = TheApplication().NewPropertySet();
input.SetProperty(“Component”, “WfProcMgr”);
rowid = bc.GetFieldValue(“Id”);
// We would like to pass the row id of the Current record on which the user is working – You can pass more than one arguments
child.SetProperty(“ProcessName”, “Service Agreement – Agreement Status”); // Workflow process you want to execute
child.SetProperty(“RowId”, rowid); // passing the values
input.AddChild(child);
svc.InvokeMethod(“SubmitRequest”, input, output); /// invoking the business service method
svc = null; // nullfiying the objects
child = null;
output = null;
input = null;
return(CancelOperation);
}

9) DefaultAppletFocus user property

Loading ...

Today Anisur Khan is sharing his problem that he faced after the application was upgraded from Siebel 7.5 to Siebel 8.1 and also how he achieved the solution using DefaultAppletFocus user property.

Problem:

In Siebel 7.5 the default focusin Order Detail View was on the Order header applet, however in Siebel 8.1 the default focus was on the line items applet due to which when I used the F9 functionality to send email the dropdown did not show values and sometimes didn’t work at all.

First I checked the settings in the Help > User preferences > Outbound Communications and set the Default Meassage Type to “ HTML” butit didn’t help and finally I was able to solve this problme by using DefaultAppletFocus user property.

Details:

DefaultAppletFocus user property :Allows us to set the applet within a view that should receives focus by default i.e before user changes the focus to any other applet by clicking on it.

As per Siebel the applet to receive the default focus is decided by the “Default Applet Focus” property of a view. If this property is left as blank then the default applet is decided on the basis of the “Type” property in
The Screen > Screen View of the Siebel tools:

  • If the View Type is Detail View, focus is placed on the second applet, if the view consists of two or more applets.
  • If the view type is any other type, or there is only one applet on the view, focus is placed on the first applet..

Usage:

Name: DefaultAppletFocus
Value: The name of an applet in the view, not enclosed in quotes.

After defining this user property on the view F9 functionality started working as expected.

10) Use Literals For Like

Loading ...

While working on Performance issues, I came across a rarely used user property known as ‘Use Literals For Like’.

Purpose:

If you have gone through logs sometime then you might have noticed that if you query with a text in a field then the query generated at backend has lot of like clauses which queries with all the permutations and combinations for that text. For example if I query on the Last Name Field with “SADMIN” in application the query generated at backend might have clause as shown below
((T11.LAST_NAME LIKE :2 OR T11.LAST_NAME LIKE :3 OR T11.LAST_NAME LIKE :4 OR T11.LAST_NAME LIKE :5) AND UPPER(T11.LAST_NAME) = UPPER(:6))
And the bind variables will have values like

Now, this can lead to performance issues in cases if the query is done on long fields such as Comments or Description field in Service Request BC. In that case using this user property might help.

  • 2:= ‘sa%’
  • 3:= ‘Sa%’
  • 4: = ’sA%’
  • 5:= ‘SA%’
  • 6:= ‘SADMIN’

If you use this user property on a particular field then for that field bind variables will not be used, it will be replaced by the values directly.

Usage:

It is a field level user property. Follow the steps given below to define this property.