Friday, December 25, 2009

Inbound Web service

Integration has always been fun and good that my exposure to integration has improved considerably in the last year. In my current project I had to create couple of inbound web services and was successful in finding a scriptless solution. Here is how I configured it,
1 .Create a workflow process with first step of EAI Integration Object Hierarchy to XML Hier Bus Service .Define a process property of type Integration Object and In (for In/Out)
2. Then use EAI Dispatch web service look up method to parse the XML .

For the EAI Dispatch service to process the XML define the xpath for the xml elements on Administration-Integration -> EAI Dispatch Service view.
The Key point in the workflow process , which I figured after a while, create a process property of type in and data type Integration Object. This would make sure that incoming message is received as Siebel Message and then process XML.

I'm planning to change the configuration I posted for Outbound webservice before with Integration-data-map and then EAI dispatch service. I bet that would be scriptless too and would perform better..Later.



Friday, December 18, 2009

Visibility for pick applet

Hi
Just configured something tricky today.Had to configure an account pick applet to show only My account. As always wanted to find a scriptless solution for this too and was successful. There is a set of class defined in the Siebel Security guide as well as on how to configure. Followed the instruction in the bookshelf to create a pick applet based on a special class and defined a applet user property and that's it I could see only My accounts on the pick applet.

I wish this was on the config apps bookshelf but later when I read through the configuration understood why Siebel has documented it in Security guide.Probably need to skim through the book to learn few more tricks on access control..Later...

Sunday, October 4, 2009

Siebel Essentials 3

iHelp..This is one of the interesting and powerful feature in Siebel from BA perspective.Basically it's an excellent guide for new users to get accustomed to Siebel screens and views . BA can give step by step instructions to users to navigate to various screens and enter data. These instructions can be hyperlinked for navigation and you can highlight some critical fields on a view . iHelp items would change based on the active screen.

Its based on workflow but an admin or BA can easily configure after skimming through few pages in the bookshelf .. It's a good tool from BA perspective to streamline the users to Business process flow. Check the bookshelf Appsadmin.pdf on how to configure..It's easy , and should not take more than couple of hours to configure it... I'd say Task based UI is an extension of iHelp except that's it more powerful and requires configuration to almost all the objects in Siebel Tools.


Later...

Tuesday, September 29, 2009

Siebel Essentials - 2

Here are few new things for configuration that I did recently.

Users needed to sort one of the applets list column.Was trying to find options to avoid scripting. But no luck this time.Wrote a script on applet_load event to display all the records after sorting the column. If someone finds a scriptless solution for the same please post your comments here.

Also found something new to enable shuttle list applet for MVG field...Was trying to add shuttle applet for MVG field and it was always showing up as pop up list applet.Checked on EnableAutoShuttle property value and it was set to true.

Did some research and found from supportweb that the parent list applet should have Update set to true to enable mvg shuttle applet..Changed the update property on the parent list applet and it worked!!

I understand above configurations are basics but it's at least something new for me. To be continued..

Saturday, September 26, 2009

Siebel Essentials One

Configuring views in a screen will be one of the few areas in the Siebel where you could leverage Out-of –the-box feature to meet Business needs. There are different types of level and views you can configure under a screen. So it’s better to understand the levels and their use before trying to configure them. But as always it’s better to refer to the bookshelf if you are configuring screens and views for the first time. There are four levels to configure views in Siebel screens

First Level - Screen Tabs

Second Level - Aggregate Category and Aggregate Views – This will be displayed as links below the screen tabs
Aggregate Category & Parent category is null - Helps to access group of views
Aggregate views & Parent category is null – links to single views
Aggregate view & Parent category is not null – Links will be displayed as drop down on the view. The parent category is the aggregate category here.. For example this will display My Contacts, My Team Contacts in the drop down

Third Level – Detail Category or Detail view

Detail Category – Parent is an aggregate category. This will display as tab under the second level .This links to group of view
Detail View - Parent is an aggregate category This will as a link to single view at third level

Fourth Level - Parent is the detail category. This will display as link under the third level detail category

If you understand the above concepts well you can configure views for a screen probably few minutes. Also make sure you add the views to appropriate responsibilities and check the display on page property to display under the screen.

Friday, September 18, 2009

Cancel Query in Siebel

Long running queries are annoying and especially on a web based application like Siebel it's highly possible. Most of the time user would think of more criterias to include with their current query when it's executing .They wish they have a second chance to refine the query.Fortunately there is a way you can do this in Siebel. This varies slightly depending on the version.

CancelQueryTimeout = Time in Secs ..If you set this parameter to -1 it means that this feature is disabled.

Before 8.0
You set this parameter in [SWE] section of the config file

After 8.0
You set this parameter on the appropriate component .Note this is an advanced component parameter..

Later.

Thursday, September 17, 2009

Default instance for Dedicated client

Hi,
Quick Siebel tip for the day.When you log into dedicated client it's always default to Local.To set this to server change the following parameter in the appropriate config file.

DataSource = Serverdatasrc.

I'm planning to try out EAI XSL service and data mapping this week.Will update the blog for the same.
Later..

Wednesday, September 16, 2009

Pre-defaulting User Preferences

Going forward I have planned to write up something I learned new in Siebel. Today's catch in Siebel.


Today there was a request about how to default the user preferences values in Siebel.Well I found that there are two ways to do it.But the following changes will overwrite all the previous user preferences.

1.All the user preferences can be set on the Administrator's login and then SPF files on the server can be copied and named appropriately for other users.
2. Or predefault field property on the User Preferences BC can be set to populate the field with appropriate values. Also, this requires deleting the previous User preferences files.So when the user logs in Siebel application will create new spf files bases on the predefault values.

Also saw some basic things a developer must know to start on Siebel integration.Here is the mapping between Siebel definitions and Variable Definitions

Type in Siebel -> XML Element
Property Sets in Siebel - > XML Attribute
Value in Siebel - > Value in XML.

Well that's it for the day..Later.

Tuesday, July 7, 2009

Troubleshooting EIM

Well there are few ways to import data into Siebel but my favorite is EIM since its much faster than the others.Also it's much interesting when it involves loading data in millions and billions.But probably not an interesting area for most of the Siebel developers out there because it does not involve lot of design and customization but leveraging OOB functionalities to import data. I had been working more actively in EIM these days and identified the following steps to run and troubleshoot EIM jobs.


> To create the import script use the EIM reports in tools (Client from 8.1) and identify the required columns and foreign keys to be imported.
>Look at the foreign key column mapping to populate all the UK columns required to resolve the FK during EIM. Also, this will help us identify the various base tables required to populate UK columns in EIM tables.
>Better keep number of rows less than 5000 rows in a batch .Siebel recommends < 20k
> Run the EIM job for few records at first ,in numbers less than 100 with sql flags,error flags and task flags set to 8
>Check the IF_ROW_STAT for all the records imported in the EIM table
>Check the if_row_stat_num for all the records imported .If the row status number is not zero look for the status number in log file to get more info on the error against all the base tables.
> Check the temporary columns row_id for the base tables and check if the foreign key columns are correctly populated.

If I find more in addition to this will post it later..

Tuesday, June 30, 2009

Problem vs Solution(s)

In the last couple of weeks I was trying to configure Oracle BI and informactica to run a full ETL for data transfer from Siebel Sales to Oracle Sales Analytics. I’m almost there but I had been posting some questions in forums to get some help with the configuration. Also, happen to skim through some threads for answers. One thing I noticed in all the threads was when people ask question on certain error people give solutions based on the knowledge or past experience even when it’s completely irrelevant to the problem posted. I agree that it depends on the question too. When you see a vague question in the thread you tend to give multiple solutions. But most of the times it happens even if you post the problem correclty. That got me thinking on interesting argument, how to approach a problem.
In the IT world you can either think of a solution that would fix the problem or identify the problem then think of a solution. I would say the later is better since it’s based on experience and ability but the first one is just based on a person experience. I don’t think it's just not IT field but it across all profession .When something is not working as expected try to identify the problem then just suggesting a solution.

I got this error when I was running a full ETL using DAC.I should say it took almost 4 hours to fix this but as always felt great when it worked.
ANOMALY INFO::: Failed:General error while executing ETL javax/mail/Authenticator
MESSAGE:::javax/mail/Authenticator
Solution :
Merge the Oracle BI Lib folder with DAC library folder.OOB Oracle BI library folder was missing mail.jar files so I got the above error..

BTW , this is my first post on Oracle BI .Later…

Sunday, February 22, 2009

Close Local DB Connection

Found something new in the configuration file that would close your database file connection automatically after you close the Siebel Tools or Client.

Parameter:AutoStopDB

Set this parameter in tools.cfg to TRUE to close the database connection automatically after you exit the tools.Well that was easy right!!

Later..

Thursday, January 15, 2009

It's Frost bites time!!!

New year is here and I think it will be already in the books for the lowest temperature recorded in years. Its freezing cold here, temperature in -20 and sucks big time. Well my coffee is not invigorating any more but it helps me keep warm for some time. So I spent most of my time at home and been burning lot of time talking on the phone.

Our man AR rocks the western world now and every Indian should be proud of him. Saw the Slumdog millionaire and loved the screenplay. But I wish that the director has shown atleast one nice shot of Business Capital of India. I heard one of the audience in the theater commenting , “Now I understand why it’s easy to take Indian out of India”. Well some of the scenes were gross than Saw for sure. But screenplay of the movie stands tall. I wish AR wins Oscar for this sound track. I feel some of his scores in the nineties are much better than Slumdog soundtrack but the media was not big in the 90s as it is now.

Other than watching movie and talking to my friends my week has been pretty drab .Guess what spend the rest of time in Siebel trying to invoke .net web service from Siebel.It was interesting and good that it was not a smooth ride..Learnt a lot .So here is how I did it.

1.Wrote a program in C# and exposed it as web service.
Code:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

/*[WebMethod]
public string HelloWorld() {
return "Hello World";
}*/

[WebMethod]

public decimal AddNumbers(decimal lnNumber1, decimal lnNumber2) {

decimal AddNumbersResult;
AddNumbersResult = lnNumber1 + lnNumber2;
return AddNumbersResult;

}


}

2.Compiled and saved the WSDL. It’s easier to generate WSDL in .net .You just change the published web service from http://localhost:1569/WebSite1/Service.asmx?op=AddNumbers to
http://localhost:1569/WebSite1/Service.asmx?wsdl .

3.Imported the WSDL into Siebel

4.Siebel generates IO and Bus Srvc for the WSDL

5. Created a BusSrvc to build the hierarchy to send the numbers over to .net.Also, note in the program below how you define the variable type as number. This is new in Siebel and helps to improve the performance.

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
var svc;
var psInputs;
var psOutputs;
var outputListOfNum;
var getNumbersResponse;
var outputAddNum ;
var num_result;
var Rev_1:Number;
var Rev_2:Number;


try
{
if(MethodName == 'Invoke WS')
{
svc = TheApplication().GetService("ServiceSoap_1");


psInputs = TheApplication().NewPropertySet();
psOutputs = TheApplication().NewPropertySet();


psInputs.SetType("AddNumbersSoapIn:parameters");
psInputs.SetProperty("MessageId","");
psInputs.SetProperty("MessageType","Integration Object");
psInputs.SetProperty("IntObjectName","AddNumbers");
psInputs.SetProperty("IntObjectFormat","Siebel Hierarchical");

var pchild = TheApplication().NewPropertySet();
var pchild1 = TheApplication().NewPropertySet();

Rev_1 =ToNumber(Inputs.GetProperty("Revenue I"));
Rev_2 =ToNumber(Inputs.GetProperty("Revenu II"));

pchild.SetType("ListOfAddNumbers");
pchild1.SetType("AddNumbers");
pchild1.SetProperty("lnNumber1",Rev_1);
pchild1.SetProperty("lnNumber2",Rev_2);

pchild.AddChild(pchild1);
psInputs.AddChild(pchild);


Outputs.AddChild(psInputs);

return(CancelOperation);


}// if(MethodName == 'Invoke WS')

else if (MethodName == 'ParseReturn')
{
if (Inputs.GetChildCount() > 0)
{
getNumbersResponse = Inputs.GetChild(0);
if (getNumbersResponse.GetType() == "AddNumbersSoapOut:parameters")
{
if (getNumbersResponse.GetChildCount() > 0)
{
outputListOfNum = getNumbersResponse.GetChild(0);
if (outputListOfNum.GetType() == "ListOfAddNumbersResponse")
{
if (outputListOfNum.GetChildCount() > 0)
{
outputAddNum = outputListOfNum.GetChild(0);
if (outputAddNum.GetType() == "AddNumbersResponse")
num_result = outputAddNum.GetProperty("AddNumbersResult");
Outputs.SetProperty("AddResponse",num_result);
}
}

}
}
}

return(CancelOperation);

}


else
return (ContinueOperation);

}//try

catch(e)
{
//calling a function to handle the error, with event name and error object as inputs

throw(e);
}
finally
{
}

}

6. Created a workflow to :
• Build Hirerachy
• Invoke Web Service
• Parse return from .net
• Update Siebel for the result from .net




It works perfect.So that’s all it is. I should say it was easy to integrate Siebel with .net than Java. More in next.