Monday, 21 July 2014

MS CRM: CRM for Outlook configuration

MS CRM application can be created as a profile in Outlook by installing and configuring CRM for outlook plug in. Download it here.

Once you install the application, you need to configure the profile.

Run the configuration wizard, enter your credentials and synchronize the organisation data.
Close the wizard and open outlook. You can find the application related information in Outlook folder structure as a profile in outlook.
This way, instead of relying on a browser, we can use application in outlook more efficiently. Advantages include working offline capability, synchronization with emails, reminders for Alerts and meetings and so on.

MS CRM: System Administration

In this post, I am going to introduce some basics of System Administration in MS CRM. 

You can access Administration options from Microsoft Dynamics CRM -> Settings -> Administration. Few important options/features are defined below. 

Auto Numbering: We can specify a format of auto numbering like below. 
Business Units: We can create the organisation hierarchy by using Business Units. We can define a BU, add users, teams, child BU etc to it. If I disable a BU, no user in the BU will be able to access the application.
Security Roles: Security role is the entity where we mention which objects should be accessible and upto which access level for a user role. We assign security role to user. This is the most important security feature of MS CRM.

Teams: We can define teams of users and group them as a logical entity.
System Settings: We can define calendar settings, currency settings, format of numbers, email tracking options etc for the organisation in this section.
Field Security Profiles: We can define a security profile for users to provide access to modify certain field data. (Example: only a manager can edit quote amount)

MS CRM: Default Solution, Managed and Unmanaged Solutions

Solutions: All the configurations in an MS CRM application is maintained in a solution. It is a repository of configuration items like Entities, Fields, Forms, reports, Dashboards etc. People who are new to MS CRM can get confused easily by terms like Default Solution, Managed Solution and Unmanaged Solution.

Every application will have one default solution defined with all the basic entities. Default solution is a vanilla solution. It is recommended not to modify anything in a default solution. We should create our own custom solution. Every custom solution once created is a unmanaged solution. Once you are done with your customization, you need to make it a managed solution, meaning that you do not let anyone modify the solution. It is locked and can be moved to other environments as a package.

We can add unmanaged solutions, do our customizations in it, export it as a Managed solution and import it to higher environments as a Managed solution. If a managed solution is deleted, it deletes all the customizations. For testing in unmanaged solutions, we need to publish the customizations.

Navigate to Microsoft Dynamics CRM -> Settings -> Customizations

You can access default solution by clicking Customize the System link.

You can create, access or modify custom solutions by clicking Solutions link.


A default solution looks like this.



MS CRM: Application UI Sections and Navigation Basics

This series of posts on MS CRM will be targeted for a novice developer. I will start with basics and later on extend it to complex functionalities. I will be providing some video tutorials later covering these topics with a use case.

Microsoft Dynamics CRM is a software package developed by Microsoft. MS CRM is gaining a lot of CRM market lately.


Microsoft Dynamics CRM is available in two primary delivery mechanisms:
Dynamics CRM On-Premises and Dynamics CRM Online.
The on-premises version of CRM is hosted by the customer in an on-premises server. With CRM Online, Microsoft takes over the hosting responsibilities. Decision points like direct access to SQL tables and expanded backup capabilities can drive the decision to go on-premises or online.

I am going to use CRM Online only in my posts as I have limited access to a trial version of MS CRM application. You can get one month trial access by registering in the link

After registering, the application will look like this. By default, we will have Sales, Service and Marketing modules. I am going to explain basic navigation steps below.


The red box indicates the application bar where on clicking the Microsoft Dynamics CRM drop down, the available apps and the settings can be accessed.

On selecting an App (like Sales dropdown), the available entities will be shown like below.
On selecting an entity, it will show the recent records and the records of the entities in below section.

We have a quick Create option also.

The green box shows the default view of the entity selected (Dashboard in this case), the one which we want to see on home page. We can change the default any time by changing our preferences. 

The yellow box is a what's new section, showing recently created, updated records information. We can follow a particular record and the updates will be shown in follow section in the right.

I will explain about the steps to configure application in further posts.

Sunday, 20 July 2014

SIEBEL:XML Hierarchy, Binary XML, XML Encoding and other usages in Siebel

A lot of people get confused with using terminologies like XML Hierarchy, Binary XML, Encoding in XML, XML Hierarchy etc. Siebel has a lot of functionality built on XML and uses vanilla business services for this purpose.

First of all, an XML document is just a valid XML. Data in any XML file can be considered as a XML document. A well formed XML is a standard to create and use XML documents. Now let us look at how siebel uses XML. 

XML is a transport language. We use XML to transfer data from one system to another in a well formed readable format. During Siebel EAI transactions, data is sent and received in XML formats. Consider this example where we send account information to external system from siebel.

I will call EAI Siebel Adapter BS, Query method to create an instance of Integration Object. The output is a property set of type SiebelMessage. It will have properties with Name as Integration Component field name. When I send this information to external system, it will send the xml name of the field. When external system sends data,it is an XML but when we receive it, it will be a property set message. We process the message using EAI Siebel Adapter service. 

As in the below example, if I have a field 'Integration Id' in IC, it will be the same in SiebelMessage but in XML, it will be IntegrationId.




An XML can be converted to Property Set or Siebel Message using EAI XML Converter business service. 

If I do a EAI Siebel Adapter query, we get property set output. If I convert the property set to an XML document using EAI XML converter, it gives XML as a string in output of type <Value>. 


If you look at above screenshot, the test case 1 is as output of EAI siebel adapter query method. I used it to convert the property set to XML Document (as seen in Value field) using EAI XML converter BS. I got test case 2 record as output. I used the XML document and converted it to XML Hierarchy which is again a property set with XML tags as properties.

I have exported the structure of data from BS simulator.

Siebel Message looks like this.



An XML Doc looks like this.

An XML Hierarchy looks like this.




Below table describes few differences of the terminology.



XML Encoding is a standard which we use to make sure that every character is unique. I can send special characters in an XML document. Every character should be understood by the receiving system. If I use English and the other person use French, we should be able to communicate with each other properly. For this, a standard called Unicode is in place. It has a unique code for each character in almost all the languages. This way, data transfer can occur without loss of meaning. 

Unicode is an industry standard for character encoding of text documents. It defines (nearly) every possible international character by a name and a number.

If you look at the below line, the attribute encoding denotes the type of Unicode used for encoding. UTF-8 is commonly used encoding. 

<?xml version="1.0" encoding="UTF-8"?>

Binary XML is an XML with encoded binary data. The text is converted to binary data and the XML is formed with the binary information. This makes the XML as not readable by humans. This has an added advantage of performance. I will cover this topic in another post.

Hope this explains the XML usage in Siebel terms.

Friday, 18 July 2014

SIEBEL: Displaying Images and Static HTML Content in an Applet

Requirement: I want to display an image and a message or a static html content with look and feel like a webpage in an Applet.

Solution: Most of the developers will say symbolic URL is the only method to display a Web based content in an applet. This approach will give you another great option that many people do not know.

Have you ever seen Field Retrieval Type property in a Control? You might have used it for Symbolic Url. But have you got a chance to see other available options in this property. I am going to tell you about Field Retrieval Type = Service. 


If you set this to Service, you need to provide a Control User Prop to the control.

Name = Field Retrieval Service : Value = ContentBase - Asset Publish Service

This is the only available service for the retrieval type. It checks the value of the control and looks up the value of Row Id of record in Administration - Content Center -> Content Assets. If it finds a record with the same id, it shows the asset content that is added in this content view. 



If you click on Edit HTML in the top applet, it opens a HTML editor popup. You can enter text or links, with different fonts and other settings similar to a word document. Once you are done with editing, you can add an image also in the same applet if needed. Remember to checkout and check in the asset using buttons in top applet.



Once you are done with creating the Content Asset, you can be able to see the content in desired applet. This is documented in bookshelf.

You might get strucked up by this error. Record cannot be found or is not visible to you.(SBL-CTM-00326)
This is because we do not have access to the content Asset records. The access is group based, so add you access group in the Access Group sub view in Content Assets. 



Alternatively if you need to open a popup window with the required Static HTML content with images etc, you can use SWE commands like this: 
http://localhost:8080/start.swe?SWEMethod=GetPublishedContent&SWECmd=InvokeMethod&SWEService=ContentBase+-+Asset+Version+Publish+Service&&ContentIdentifier=1-282F8

Provide the content Id in the last argument in below url.

If you are looking for ways to display an image or a service level agreement or an offer that should look and behave like a webpage, this is the best way to achieve the requirement.

Thursday, 17 July 2014

SIEBEL: Invoking and Cancelling Methods

Every Siebel developer might have faced this error. 

"The method %1 is not supported on Business Component %2 in Business Object %3"

This is a common error if you are configuring new custom methods. Why do we get this error?

You know how to Walk, how to Run but you don't know how to dance. If I tell you to dance, will you? You will say I don't know. This is Siebel's way of saying I don't know :)

Siebel Objects are built on classes and dll files. Every business component is built on a class. Now every class has common methods like NewRecord, WriteRecord, DeleteRecord etc., internally defined. If I ask a BC to do something that is not internally defined in its class, it throws this error. If I invoke a custom method in a BC, it will not understand what it need to do. 

You could have observed similar error and behavior when using Business Services with custom methods. 

Why do we use custom methods? We use them to achieve custom functionality. But, once our custom functionality is achieved, we should cancel the method to go till Business Component level and avoid such errors. 

The solution is to use CancelOperation in return to the custom methods.

return(CancelOperation);

Always remember to give this statement in your custom method scripts at the end for events like PreInvokeMethod and InvokeMethod in Applet or Business Component. This will fix your issue.

Event Cancel FlagWe can do CancelOperation from a workflow also. On the start step connector of the Workflow, we can define an event and cancel the event also.

If I have to call a workflow on invoking a custom method in an applet then I will define the properties of the connector as below.



Event Object Type : Applet
Event: InvokeMethod
Event Object: Applet Name
Subevent: CustomMethod
EventCancelFlag: TRUE

The event cancel flag will cancel the operation automatically. Once you Deploy the workflow, it will create a Run time Event automatically based on above properties. You do not need any custom code to Cancel Operation. 

This is an useful option if you want to do custom actions on method invocations without writing any scripts.

---------------------------------------------------------------------------------------------

But wait!! There is another way to teach you how to dance!! If I tell you to move your leg, move your hip etc., if I give you exact commands that you understand, you can as well dance. But every time I want you to dance, i will tell you to do the routine as above (only synchronously, if I am not giving instructions and engaged to you, you cant dance!!). I can also tell you to mix and match the steps according to the type of dance (Mode).

Similarly, I can tell a method to do something the system knows using Signals. Signals are supported only in Order Management enabled applications.

Signals are synchronously used and will not work if I use them asynchronously. Also, signals work according to Modes like the type of objects.

If you create a custom method and do not specify any script or user property for the method, system will use Signals to perform the action. 


If you look at the above screenshot, we have prepared a cheat sheet (Ordered actions) in form of a signal for the system to run a workflow once you call a Method from Quote (Mode) business component. Signals is an important feature of Order Management. I will discuss more on order management and its entities in future posts.

SIEBEL: Web Service, WSDL and Namespace Explained ..

Siebel has a lot of options to integrate with other applications. I am going to discuss about Web Services in this post. This post contains generic concepts that may not be related specifically to Siebel.

A Web Service is, as the name says is a Web based Service using which we can send and receive data. A Web Service is defined in a standard format called Web Service Definition Language (WSDL). WSDL is written in XML. 

Basically WSDL contains the definition of the Service, which URL to call, what is the type and format of inputs and outputs to the Service etc. You can get a good idea about WSDL here

The basic components of a WSDL are 


1. types - Data types of input or output arguments of the service. They have simple data types like String, Number as well as complex hierarchical data types. They are defined in XML schema standards. When we import a web service in siebel, external integration objects will get created. If you generate schema of the IO structure as XML Schema, you will basically get the same as types section of the WSDL you imported. Try to compare this.



2. message - Message tags contain the business service arguments. They will refer the defined types above. This will actually refer the input and output arguments of a proxy business service when we import the WSDL.


3. portType - Port Type is the reference to the operations we perform when we execute a Web Service. This refers to the Methods of the proxy business service and its input and output arguments.


4. binding - Binding denotes the type of protocol used to call and the style of the transport of arguments. We use SOAP protocol to communicate using HTTP as type of transport in this scenario. Basically SOAP is Simple Object Access Protocol which is a standard set of rules that many systems use to communicate. I will write another post about the available binding options and the styles of transport. For the moment, I am using a document style with arguments sent as literal texts rather than encoding the data.

5. Service definition - Finally we give the details of the service like the available ports and their end points.


So basically we can correlate the Web Service call similar invoke a business service internally in siebel as below.

Imagine that I am calling a Siebel Business service, I'll write code as below. The same thing can be compared to a Web Service call.

Input = TheApplication().NewPropertySet();
Output = TheApplication().NewPropertySet(); 
ChildProperty = TheApplication().NewPropertySet();
Input.AddProperty("Name","Value");
Input.AddChild(ChildProperty);
TheApplication().GetService("Test").InvokeMethod("Abc", Input, Ouput);

Input, Output and child property Type of data and Structure in first 5 lines refers to <Types>
The Input, Output in the last line refers to <message> . Abc method can be referenced to <portType>
Test is the <Service Definition>
The only missing item is SOAP binding with HTTP transport which is a way to interact with external source.

Name Space: We have another element within the Web Services called NameSpace. NameSpace is nothing but a unique identifier given to differentiate similar objects. I can have two Web Services with same names but different namespaces. 



Imagine that I have an XML with data like this:

<Account>
<Id>1-ABC</Id>
<Contact>
<Id>1-QWE</Id>
<Contact>
</Account>

Now if I tell you to give me the Id value from this XML, can you get the value? You will ask me which Id I need, Account's or Contact's. Similarly a system will also get confused to get Id value from this.

To avoid confusion, we define a namespace and write XML like this:

<definitions xmlns:A = "Unique URI for Account" xmlns:C = "Unique URI for Contact"/>
<A:Account>
<A:Id>1-ABC</A:Id>
<C:Contact>
<C:Id>1-QWE</C:Id>
<C:Contact>
</A:Account>

Now I can clearly ask the system to get me the C:Id tag value. 

Note: xmlns stands for xml namespace. It is a standard to provide a unique resource identifier (URI) to identify a Namespace. If you do not specify a URI, then also Namespace works till the time the value is unique.

SIEBEL: What you do is what you script !!

This is a post for basic Siebel eScripting learners/ beginners. 

For scripting experts, it is easy to start writing script without any reference. But a fresher might get struck about where to start. I think I can say that whatever you do in the application can be correlated to eScript. 

Let me show you an example.

Requirement:Write Business Service script with a method, to add a position to the MVG Account Team to an Account.

Solution:Now, how do you add a position to a Account from the application?

1. Login to Application
2. Go to Account View
3. Search for Account record
4. Find Position field and open MVG.
5. In MVG, look for the desired position in associate applet.
6. Add record by clicking Add button. 

Whatever you do in UI Layer can be related to Business Layer and Database Layer.





Now each of the above steps can be written in code.

First, Get the application.

TheApplication() is the method.

Go to Account view. A view is related to a Business Object.

Get the business object.

BO = TheApplication().GetBusObject();

In the view, look for an applet. Applet is related to a Business Component.

BC = BO.GetBuscomp("Account");

Now within the Applet query for a record.

with(BC)
{
ClearToQuery(); // click on Query button -- it clears the applet of any existing records and shows query mode
SetSearchSpec("Account Name","3 Com"); // in Account Name field, Write '3 Com'
ExecuteQuery(); // click on Go button



if (FirstRecord()) // if it returns a record - get first record
{
MVGBc = GetMVGBusComp("Position"); // go to position field and click on MVG, it opens an applet - which is related to a BC

var AssocBC = MVGBc.GetAssocBusComp(); // go to the associate applet

with (AssocBC)
{
ClearToQuery(); // click on Query button -- it clears the applet of any existing records and shows query mode
SetSearchSpec("Position Name","ABC"); // in Position Name field, Write 'ABC'
ExecuteQuery(); // click on Go button
}

if(FirstRecord())
{
Associate(); // click on Add button - check the method invoked on Add button

}
}
}


This is just my conceptual view of writing script. This way we can visualize what script we are going to write with what we do in the application.

Wednesday, 16 July 2014

SIEBEL: Property Set, Siebel Message and XML explained

A lot of people get confused about Property Sets, Siebel Message and XMLs.

XML is a standard mark up language that almost every web based (or any other technology based which can support XML) application understands just like HTML can be understood by any browser. It is a web standard. Read more about XML here.

Now Siebel being a web based application, uses XML language to communicate to another application. Siebel data that needs to be sent to another application can be sent as an XML and siebel can receive XML data. The data would be in a xml string format with proper xml syntax like this.


Property Sets are a set of name, value pairs that denote structured data. Siebel uses property sets to define structured data. We use property sets to call Business Services or Workflows (check Storage Type in BS Input arguments, workflow inputs and outputs are called process properties - a set of properties). 

Remember that property set is a application variable. Siebel has a set of methods to define and use property sets. (TheApplication().NewPropertySet(), SetProperty(),GetProperty(),AddChild() etc). 

We can use property sets to define a list of name values pairs along with a list of child name value pairs. We can build a property set with our own structure. I can have related data in one property set. Property Sets are often used as Hierarchy type inputs to Workflows or Business Services.

Below is an example where we use property set to provide input to business service.



Siebel Message is a Property Set of type Siebel Message. Siebel Message is normally a property set that complies with a Integration Object structure. Siebel Message is a Integration Object Hierarchy.

Properties of a typical SiebelMessage is given below. A siebel message is compliant with a IO in siebel. If you import WSDL from an external source, it will create an External IO. We can simply create Siebel Message with internal IO and map it with external IO rather than going  through the pain of creating a hierarchical property set. Note that we can write a Siebel Message using eScript, it is not necessary to have EAI siebel Adapter to create a Siebel Message.


Siebel Property Sets or Siebel Messages can be understood and can be processed (Insert/Update/Delete operation on the data) by Siebel services like EAI Siebel Adapter, EAI UI Data Adapter etc. They are identified by the Siebel Message type. We can programmatically create an IO instance like this. Check this link also for better understanding.

A typical XML of the property set we created is given below.



So basically we come down to this. 

1. XMLs are global, siebel and other systems talk in XML. An external system does not know what a siebel property set is. They send data as an XML. 
2.Property Sets are hierarchical name value pairs which siebel use for its purpose like calling workflows or business services.
3. Siebel Messages are IO compliant Property Sets which are restricted to have the data in IO format. But, Siebel Messages are the ones that are more useful and quick way to process data as they can be understood by Siebel Business Services as data sets and processed in one go.

There are services to convert an XML to Property Set to Siebel Message and vice versa. EAI Integration Object to XML Hierarchy Converter, EAI XML Converter,XML Converter,XML Hierarchy Converter are few Business Services that are used to convert the data formats. Read CSV File and Write To CSV are the services we can use to convert CSV file data to property sets and XML.

SIEBEL: Server connection components

Do you know what SC Broker, SR Broker and SR proc server components do?

Well, very few people got a good idea about these. Let me tell you what I know.

Siebel Connection Broker is the component that connects the application from a Web Server. If I hit https://webserver/fins_enu/start.swe in IE, it sends a request to Web Server. Web Server sends the request to SWSE. SWSE identifies the fins_enu component and it sends the request to available app servers through Gateway. Web Server has a file call lbconfig.txt which is a native load balancer for siebel web server. It routes the request to available SC Broker component in any app server. SC Broker receives the request and checks the available app servers for fins_enu component. It forwards the connection request based on a parameter ConnForwardAlgorithm in a LL (Least Load) or RR (Round Robin) fashion. This establishes a connection and thats it. SC Broker's job is done.

Server Request Broker is the component that connects one component to another. In the above example, if on click of a button, I need to call a workflow process manager component, SR Broker comes into play. SR Broker also takes care of asynchronous requests (like Server Requests (Asynchronous) service calls from one component to another)

SRBroker decides where to run a server request using the following criteria:
1. If the required component is available locally i.e, on the same application server, then SRBroker runs the task locally.
2. If the required component is not available locally, then SRBroker identifies any Siebel Servers in the same Enterprise that have the component online. It uses RR algorithm to send requests.

3. If the required component is not available anywhere in the Enterprise, then the server request will fail.

Server Request Processor is another component that handles requests within the server. For example, a Workflow process Batch Manager job or a Workflow Policy, etc need to be executed even if the server does not receive any request from a user. They should be taken by server. SR Proc does this job. SR Proc will pick the requests and send the request to SR Broker. SR Broker will call respective component (like Workflow Monitor agent or Workflow Process Batch Manager). SR Proc communicates only to SR Broker.
All the jobs we run in Server Administration - Jobs view will be picked up by SR Proc.

Now from this we understand the following. 

1. After connecting to the application, if we bring down all SC Brokers, application will run fine. It will not accept any new connections.
2. If SR Broker is not available in any of the app servers, you can not run any other component Job.
3. If you bring down SR Proc components, no server job will be run. All jobs will be in failed status. 

I will give you more information on Server Architecture in future posts.

SIEBEL: Avoiding Setting Field Force Active

Do you know that every field that is force active will be included in the SQL when ever the BC is called? Do you often think that there is no way but to make a field force active to get its field value. I have below user properties just for these purposes.

Consider a case where you need to get a field value in Scripts of Applet. You probable wrote 

var sValue = this.BusComp().GetFieldValue("Field Name");

After compiling it throws error. "Unable to get field value "Field Name". The field is inactive or does not exist" Like below:




A few people add one line before above line to avoid the error.

this.BusComp().ActivateField("Field Name");

But actually the variable sValue will not fetch the Field Value and it will be empty. Unless you execute a query, ActivateField will not fetch the field value.

Finally we give up and go to setting Force Active to the field. But wait I have an alternative.

ForceActive Control User property: Add a Control for the field to the Applet and set the User property Name= ForceActive : Value = Y and voila! You can get the field values in the script. You do not have to add the field to Web Layout.




We also have a similar user property for List Columns also. User Property Name= ForceActive : Value = Y

This will make the field to be active and added in the SQL only in this applet. I have tested this. It is working perfectly. This is a great way to avoid unnecessary performance issues. Try this!!

Tuesday, 15 July 2014

SIEBEL: Search Functionality

In continuation to previous post, I am here to discuss about search center functionality and show you how it works with a case study.

After 8.1.1.6 or above, Search functionality is using Invoke Search Business Service. Earlier, it used Search Client Service Business Service. If you are planning for an upgrade and are using Search functionality, consider this into your test plan. Search Client Service looks broken. Make sure that you modify the Auto Search, Open Search, OpenSrchCenter and Toggle Search commands to use Invoke Search service.

If you have to modify the view to which results should navigate or modify the frame size of the search window, have a look at the Business service user properties of Invoke Search. For example, find results can be displayed in Search Selection view rather than Search Lookin View by changing the user property value.



Invoke Search Service has two methods: Auto Search, Open Search.

Open Search method opens the Search Center. Auto Search method can be used to open the Search center, set field values in Find applet, perform a Search and show results.

Both the methods does not have any input arguments in tools. We can provide a property set input with the following properties.

Search Type : Value = Find
Category: Value = Account (The find object name)
Execute Search: Value = Y/N (if you want the search to execute and fetch results provide Y)
Name: Value pairs of fields to search.

Let us see a case study below.

Requirement: I am a service rep and I am currently looking at a ticket raised for service outage. I want to see all the tickets of the same type in a list on click of a button (View Similar Tickets).

Solution:I will create a button which has logic to pass the Type field value and call Invoke Search service to Open  Search view.

I am simulating the same in business service simulator below. By calling this service the search center opens and searches for the data and provides the result.




Oracle has a wonderful product called Oracle Secure Enterprise Search (SES) which when installed and configured on Siebel servers, can improve the performance and fetch data from multiple sources at one go. For example, if I search with 'Washington', I will get all contacts with name Washington, accounts with name Washington and addresses containing word 'Washington' etc in one single search. In Administration - Search screen, we can configure the SES search options and optimize the search. For more details check out this link.

SIEBEL: Search Configuration

Have you ever worked on the search functionality in Siebel? The Search Icon is normally next to the Site map icon in the application.

This icon opens a Search Selection Applet on click. It calls Invoke Search Business Service.



Once you select the search, it opens the corresponding find applet. 
Each application will have a Find Object associated with it.

In tools, view --> Options, Object explorer, check the Find object to show it in tools. A find object will have a list of fields to display in search and results, the applet in which the search results need to be displayed,drilldown destination on the fields, preview view (on click of preview button) and other options.



So basically you need to modify or play around with Application and Find object to see or hide search options. 

I will discuss about the business service involved in search and a case study to run a search using customization in my next post.

SIEBEL: IC User Properties

IC user properties


SupressQueryOnInsert - IC Level:Use this property for performance tuning the EAI Siebel Adapter operation. If you are doing EAI Siebel Adapter Insert operation, the system will automatically search for the record before it is created. This is the default behavior. If you are sure that the record is new and can handle errors, add SupressQueryOnInsert user property with value Y to the IC. This will improve the performance of the operation.

PICKLIST, PicklistUserKeys - IC Field Level: Picklist user property has a peculiar behavior. If the property value is Y, it will validate the Picklist value and error out in the EAI siebel adapter operation. If the value is not present then the validation happens at BC level (Object Manager). You can see the error in EAI Object manager log rather than workflow log if you are calling the Workflow in a web service.

This has one more advantage of auto filling field values when set to N. For example, status field has Active and Inactive as valid values in picklist. If the XML has Status as 'Act', and if the PICKLIST property is set to N, the operation will set Active as the field value. 


Bookshelf mentions that performing the validation of a bounded picklist in the EAI Siebel Adapter is about 10% faster than performing the validation in the Object Manager.

Consider a scenario where we need to set Account to ABC for a Contact record. There can be multiple accounts with name ABC. Then I have to identify a particular ABC record based on another criteria like Account Number field and set the field values accordingly. In this case PicklistUserKeys property should be used. We need to set the value to 'Name, Account Number' and these two fields should be available in IC. This will determine the picklist value to pick.

Ignore Bounded Picklist is another user property which can be used to avoid bounded picklist errors in EAI Siebel Adapter operations. Valid values are Y,N.

SIEBEL: EAI Siebel Adapter Continued..

In continuation to my previous post, I am going to discuss more on the options we seldom use in EAI siebel adapter service.

Status Object and Status Key: Do you want to know what operation (update/delete/insert) is happening to an IC during Sync? Do you want to identify the list of IO instances that got inserted with their field values? Then this is the option to capture the information.

Status key is a type of Integration Component key. It can have a list of fields defined under it. Status Object is a input argument we can provide to EAI Siebel Adapter to get the status key as output or not.

Let us see an example. I have added Status Key to the EAI Account IO.


Then ran an EAI Siebel Adapter insert operation with StatusObject = true

In the output, I can see the Id of the record created.
This option can be useful to identify the operation that happened during EAI Siebel Adapter Sync method. If you add the Operation field in the IC to the user key, you can get the operation (Update/Insert/Delete) in the output. Operation is a System field in IC. This field has the information of what action happened in IC.