You are here

Siebel EAI

Approach to massively change a product configuration, keeping BRM and the entire Siebel/AIA stack is in sync

Question

We need to remove a cycle forward event from existing product which is being used for both the prepaid and postpaid customers. We don't want the pin_cycle_forward to pick up prepaid accounts.

There is a product which is a default product for both the prepaid and the postpaid customers. The product has a cycle forward fee of 0 (zero) amount associated with it. The product is associated with the current 700K subscribers. When we run the CF application, all the 700K subscribers are being picked up in the cycle forward application (pin_cycle_forward), out of which 650K are prepaid and they are getting picked up due to this product.

We need to stop the prepaid accounts from getting picked up in the CF application. If any update needs to be done in BRM side, it would have been possible, but in our stack we are using the Siebel CRM, AIA also. So, we need to achieve this in a End-to-End manner, so that all the components are in sync.

Answer

The following is a list of a few possible suggestions, to address the above business requirement.

Option #1 - Siebel is on driver seat for managing the products, and there must be a way to submit a batch process from Siebel to AIA. I assume this is one time effort and will require AIA configuration enhancement to handle the load and recovery. This option will maintain integrity between Siebel, BRM and AIA xref tables.

Option#2 - Run batch process on BRM and then on Siebel and then update cross reference table, in theory this should work but is not documented.

Option#3 - Create your own workflow and let Siebel send data to it, on the other end of your workflow call OOB O2B PIP.

Option#4 - Explore if any ODI KM is available for Siebel batch process which you can use to call O2B process.

Firewall Considerations when Siebel is behind a firewall

You have AIA deployed on one server, BRM is on the same network. Siebel on the other hand is installed on a server which is behind a firewall.

Which ports on the firewall need to be opened from SOA Suite and Siebel networks in order for the integration to work?

There are 2 considerations when having a firewall between Siebel and the SOA Suite used by AIA:

1- All the AIA ABCs providers which connect from SOA Suite to Siebel invoke a Web Service in Siebel.


   Firewall Consideration: In this case what you need to do is open the http port on the Siebel side to be reached from the SOA Suite.

The parameter SEBL_01.EndpointURI for the following Business Services configured on the $AIA_HOME/config/AIAConfigurationProperties.xml file, provide the host, port which needs to be opened from SOA Suite towards the Siebel server:
CreateTroubleTicketSiebelCommsProvABCSImpl
ProductOptimizedSyncPriceListListSiebelCommsProvABCSImpl
SyncItemCompositionListSiebelCommsProvABCSImpl
UpdateAccountBalanceAdjustmentRespSiebelCommsProvABCSImpl
UpdateSalesOrderSiebelCommsProvABCSImpl

2- Siebel notifies SOA Suite of any Business Event using JMS messages on a queue. Siebel acts as a JMS client to the JMS Server deployed as part of the SOA Suite, the communication between client and server is through RMI. The RMI specification allows the client RMI to communicate to the RMI Server through a firewall.

   Firewall Consideratiooin: You need to have a Proxy Server between Siebel and SOA Suite. The Siebel server has to have the system property configuration parameters http.proxyHost and http.proxyPort pointing to the proxy between both servers. (Please refer to the document on http://www.rmiproxy.com/doc/ejp/Internet.pdf, page 194, section 15.5 Firewalls and RMI). As explained in the document what happens is that each time you want to enqueue a message in the JMS Queue, Siebel, acting as an RMI client, tries to create a socket connection to the SOA RMI Server. If it fails it will read the JVM System Properties http.proxyHost and http.proxiPort and will try to establish an HTTP Connection to the SOA Server through the Proxy server.
reference an EAI Value Map in an integration field map source expression

The requirement is to convert a field value from it’s external representation into it’s internal representation and visa versa by referencing a EAI Value Map in a Data Map.

According to the information included in eAI Volume IV: Business Processes and Rules, Data Mapping Using Scripts, EAI Value Maps, the functions EAIGetValueMap, EAILookupSiebel and EAILookupExternal work on the EAI data map tables.

The source expression in an integration field map can reference the EAI value maps.

You can use the EAILookupSiebel function for inbound value mapping which uses the following syntax:

EAILookupSiebel(“”,[Value],[])

You can use the EAILookupExternal function for outbound value mapping which uses the following syntax:

EAILookupExternal(“”,[Value],[])

The following is an example integration field map source expression:

EAILookupExternal(“SAP Country”, ifNULL(LookupName(‘COUNTRY’,[Bill To Country]), “USA”))

In this case, EAILookupExternal returns a value from the EAI data map table whereas LookupName returns a value from the LOV table.

Increase Error Code Process property text lenght for Siebel Workflow

Here are the steps to Increase Error Code Process property text lenght for Siebel Workflow :

1.    Login to Siebel tools using SADMIN/SADMIN.
2.    Navigate to object definition "Business Component".
3.    Search for the Name "Repository WF Step" which is based on Table "S_WFR_STP".
4.    Now go to Field definition and search for the field "Error Code" which is based on Column "ERROR_CD".
5.    The default "Text Length" Property for the "Error Code" field is 75 with Type "DTYPE_TEXT".
6.    Now go to Object definition "Table" and search for Table name "S_WFR_STP".
7.    Hit Keyboard shortcut "Alt +L" to Lock the Current selected Object definitions.
8.    Go to Sub Object definition "Column" for the table "S_WFR_STP" and create Copy Record of Column "ERROR_CD" and Make the Text Lenght Property as Required.
9.    Click on Apply/DDL button and then Click on Activate Button to Activate the Table definition.
10.  Go back to object definition "Business Component" and Search for the Name "Repository WF Step" which is based on Table "S_WFR_STP".
11.   Hit Keyboard shortcut "Alt +L" to Lock the Current selected Object definitions.
12.   Now go to Field definition and search for the field Name "Error Code".
13.   Change the "Text Length" Property for the "Error Code" field as Declared in above step (7).
14.   Compile all the Locked projects.

Techniques to display the CTI Call Data in Siebel Application

While integrating Siebel and CTI with products like Avaya or CISCO typically clients will have following types of requirement:

- Create a customer control on the CTI toolbar and populate it with Call Data
- Present Call Data to the agent for the duration of a call
- Inform the agent at the beginning of the ANI or Language of the caller

 

There are three techniques how these types of requirements can be achieved:

1. Populate Call Data into the Persistent Customer Dashboard
2. Display Call Data in the status bar at the top of the application
3. Populate the call data on the CTI toolbar

Please see the details below on how to achieve each of these:

1. Populate Call Data into the Persistent Customer Dashboard

A.) On the first event into Siebel when a new call is received, for example "EventRinging" for Genesys or "InboundCall" for CT Connect, trigger an Event Log. Configure the Event Log to create an Activity record and populate some of its Fields with Call Data:

[EventLog:LogIncomingCall]
BusObj = "Action"
BusComp = "Action"
LogField.ANI = "{ANI}"
LogField.DNIS = "{DNIS}"
LogField.RefId = "{RefId}"
LogField.Type = "Call - Inbound"
LogField.Description = "Inbound call"
AfterWork.'Planned Completion'= "{@Now}"
AfterWork.'Done' = "{@Now}"
AfterWork.'ACD Call Duration' = "{@WorkDuration}"

Please note the fields "LogField.ANI", "LogField.DNIS" and "LogField.RefId" mentioned above will have to be created separately on the "Action" business component. Also, the above configuration is based on the fields {ANI}, {DNIS} and {RefId} already existing in the Call Data attached to the call. The three fields mentioned are only examples, any field from the Call Data could be populated into the Activity record.


B.) On the next event into Siebel (i.e. "EventEstablished" in Genesys or "TpAnswered" for CT Connect) trigger another EventLog that will populate the dashboard:

[EventLog:LogIncomingCallConsumerNotFound]
ServiceMethod = "Persistent Customer Dashboard.Update Dashboard from CTI"
ServiceParam.Field = "Id"
ServiceParam.Value = "{@WorkObjectID}"
ServiceParam.BuscompName = "Action"


2.) Display Call Data in the Status Bar at the top of the application

It should be possible to update the text displayed in the Status Bar area at the top of the application above the CTI toolbar by invoking a command on the following lines:

[Command:ShowMessage]
ServiceMethod = "Communications Client.ShowStatusText"
CmdData = "ShowMessage"

;; The message is shown at the status box. Please change it accordingly.
[CmdData:ShowMessage]
ServiceParam.Text = "{ANI} {DNIS} {RefId}"

This command could be called from an EventResponse or a script anywhere in the application.

However, please note the following with regards to the text displayed in the Status Bar:

- The message will timeout after a short period of time.

- Even with the increased timeout specified the message will be overwritten next time the "ShowStatusText" method is invoked. This method can be invoked at anytime by the 3rd party CTI driver which we cannot control or prevent.


3.) Populate the Call Data on the CTI toolbar

It is not possible to achieve this requirement using standard out of the box functionality. However, you can add custom controls to the Siebel CTI toolbar and update them with values from the call data. This configuration requires the modification of internal .swt and .js files and you must engage Expert services to achieve such a requirement.

Troubleshooting – Common Workflow Errors

The following lists some commonly encountered errors for Workflow Process Manager.

1. Problem: You activated your workflow but it is not executing

Solution: Verify if <Reload Runtime Events> performed. In order to tell if a process has been triggered, Turn workflow logging (EngInv, DfnLoad, StpExec, PrcExec) on. See the Business Process Administration Guide in Siebel Bookshelf for procedures on how to do this.

2. Problem: You revised the workflow process and re-activated it, but somehow the previous workflow information was read.

Solution: Restart Siebel Server service to refresh the cached version.

3. Problem: When workflow is triggered by runtime event Display Applet, the workflow is triggered the first time but not subsequently? Why?

Solution: Since the DisplayApplet event is a UI event, and the default web UI framework design is to use cache, the event only got fired when the first time a non-cached view is accessed. The workflow gets triggered whenever the event is fired and worked correctly. To make the trigger work each time, you could explicitly set EnableViewCache to FALSE in .cfg file. NOTE: Setting EnableViewCache to FALSE is not recommended as this may severely impact performance.

4. Problem: If a business component has code on WriteRecord and the runtime event fires on Writerecord, which occurs first?

Solution: Runtime events fire before any script events.

5. Problem: After you triggered workflow from a runtime event, you do not get the row-id of the record on which the event occurred.

Solution: Runtime event passes the row-id of the object BO (i.e. primary BC) and not the row-id of the BC. Retrieve the row-id of the active BC using searchspecs (e.g. Active_row-id (process property) = [Id] defined as Type = Expression and BC = BC name)

6. Problem: Encountered the error <Cannot resume Process <x-xxxxx> for Object-id <x-xxxxx>. Please verify that the process exists and has a waiting status.

Solution: This error typically occurs in the following scenario:
(1) A workflow instance is started and paused, waiting for a runtime event
(2) The runtime event fires. The workflow instance is resumed and run to completion.
(3) The runtime event fires for a second time. Workflow engine tries to resume the workflow instance and fails, since the workflow instance is no longer in a Waiting state.
Deleting existing instances will not help. You should ignore the error message and proceed. Steps (1)-(3) need to occur, in that order, in the same user session for the error message to be reported. As a result, the error message would disappear when the application is re-started.
Also, Purge only works on stopped/completed instances. In order to delete persisted/incomplete instances, you will need to manually stop the instances first.

7. Problem: How do you access a different business object (BO) from a workflow process?

Solution: Workflow architecture restricts the use of 1 BO to a workflow. Use a sub process step to access a different BO.

8. Cannot initiate process definition <process name>

Solution: Verify that the workflow process exists, process status is set to Active, and the process has not expired.

9. Problem: OMS-00107: (: 0) error code = 4300107, system error = 27869, msg1 = Could not find 'Class' named 'Test Order Part A'
OMS-00107: (: 0) error code = 4300107, system error = 28078, msg1 = Unable to create the Business Service 'Test Order Part A„

Solution: Make sure at least one .srf file is copied to SIEBEL_INSTALL\objects\<lang> directory

Automating "Generate Reporting Relationship" on the Position applet

To Automate "Generate Reporting Relationship" on the Position applet, you could :

1. Create the script as a Siebel business service.
2. Create a workflow process that calls this business service.
3. Schedule this workflow process to run at the interval you desire, by using Siebel's Repeating Component Request feature with the component "Workflow Process Manager".

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
var busobj;
var buscomp;

busobj = TheApplication().GetBusObject("Assignment");
buscomp = busobj.GetBusComp("Assignment Group");
buscomp.InvokeMethod("Release");

return (CancelOperation);
}

Note:Work flow Process Manager (Server Request) Business Service instead. This would fire the workflow process which runs on wfprocmgr component. This will then take the SADMIN username to invoke.

(OR)

Business Service script below:

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{

try
{

var AsgnBO = TheApplication().GetBusObject("Assignment");
var AsgnBC = AsgnBO.GetBusComp("Assignment Group");
AsgnBC..InvokeMethod("Release");
}
catch (e)
{
Outputs.SetProperty("Error Message", e.toString())
}

finally
{
AsgnBC = null;
AsgnBO = null;
}

return (CancelOperation);
}

SBL-DAT-00500 SBL-EAI-04451 when there are 10000 or more records using Web Service based on EAI Siebel Adapter or EAI UI Adapter

Whenever a service based on EAI Siebel Adapter or EAI UI Data Adapter business service run to insert a child record when there are already 10000 records associated to the parent, i.e. Contacts for an Accout, Usert to a Responsibility, an error message is received as the following:

"Method 'NextRecord' of business component 'User' (integration component 'User') for record with search specification '[Login Name] = "[email protected]"' returned the following error:"There were more rows than could be returned. Please refine your query to bring back fewer rows(SBL-DAT-00500)"(SBL-EAI-04451)"

"Method 'NextRecord' of business component 'Contact' (integration component 'Related Contact') for record with search specification '[Middle Name] = "Cont_MN" AND [Last Name] = "Cont_LN" AND [First Name] = "Cont_FN"' returned the following error:"There were more rows than could be returned. Please refine your query to bring back fewer rows(SBL-DAT-00500)"(SBL-EAI-04451)"

Cause

This behavior is expected as the default 'ForwardBackward' execution mode is used to limit fetched records from the Select statement needed in this kind of operations (as explained in Document 478896.1 – 'SBL-DAT-00500: There were more rows than could be returned. Please refine your query to bring back fewer rows').

In the context of EAI Siebel Adapter and EAI UI Data Adapter business service, the 'ExecutionMode' is a hidden input argument for Insert methods, and included in Bookshelf > Integration Platform Technolgies: Siebel Enterprise Application Integration > EAI Siebel Adpter Business Service > EAI Siebel Adapter Business Service Method Arguments, Table 23 and Table 24 with the following description:

"Used to set the direction of a query on a business component. Valid values are ForwardOnly and Bidirectional. The default is Bidirectional.

ForwardOnly is more efficient than Bidirectional, and should be used in cases where you need to process a large number of records in the forward direction only (such as for report generation).

For more information on executing queries, see the topic on the ExecuteQuery business component method in Siebel Object Interfaces Reference"

As opposite to 'ForwardBackward' value, 'ForwardOnly' does not restrict the number of fetched records during the Select statement.

Solution

In order to implement the 'ForwardOnly' execution Mode in EAI Siebel Adapter or EAI UI Data Adapter services, the argument 'ExecutionMode' has to be added in the method's arguments.

For instance, using 'Siebel Account' Business Service (based on EAI Siebel Adapter), InsertOrUpdate method to link Contacts to an Account:

a. From Siebel Tools, Business Services, select 'Siebel Account' and expand it.
b. From Business Service Method, select InsertOrUpdate.
c. Select Business Service Method Arg.
d. Add a new Argument with name 'ExecutionMode'.

If needed, publish again your service (Web Service, JCA Code Generated).

When invoking the service, set the value 'ForwardOnly' to argument 'ExecutionMode'.

Repeat the required call. This will enable the option not to limit fetched records and allow the Insert operation for the child record.

EAI HTTP Transport does not read the sleep time parameter from the enterprise or object manager settings. Instead, it defaults to 120 seconds internally (hardcoded). The default can be changed if you explicitly pass the value as input to the business se

 Siebel Application does not support REST web services on Siebel 8.0.x version, inbound .REST inbound web service support is GA in release 8.1.1.4.For more information on REST support please refer to this MOS posting:
- Siebel REST Service - Quick Start Guide [ID 988872.1] - ACR 599: Siebel REST Service Implementation Guide [ID 980769.1] I understand REST services are based on pure HTTP calls though.Specifically for the OUTBOUND scenario, nothing new is added by release 8.1.1.4.Outbound scenarios are similar to "pure" HTTP calls and EAI HTTP Transport business service is already capable of doing that on any siebel release.Siebel does have the EAI HTTP Transport, XML converters , eScript programming language and workflows, all of which can be leveraged to build a custom solution to call OUTBOUND REST services.
Customization is needed to build the message to be sent out and to read the message received.
EAI HTTP Transpor can make an http call to send data and receive responses back.
This works in all Siebel versions.
The customization effort is unknown though and we recommend you consider a billable consulting engagement to assist you further. 

How can we increase the default HTTP Sleep Time on outbound web service calls ?

EAI HTTP Transport does not read the sleep time parameter from the enterprise or object manager settings.
Instead, it defaults to 120 seconds internally (hardcoded).
The default can be changed if you explicitly pass the value as input to the business service.
There are a few different ways to do this for outbound web services and they depend on the version you are running.
Details can be seen at document :
How to Control Parameters on Transport for Outbound Web Service, e.g. HTTPSleepTime (Doc ID 859382.1)

Pages

Subscribe to Siebel EAI