Tuesday, September 25, 2012

SBL-GEN-00000 Unable to load message 0xffff





Applies to:


Siebel CRM - Version: 8.1.1 [21112] to 8.1.1 [21112] - Release: V8 to V8

Information in this document applies to any platform.






Symptoms


Customer reported the following:



In our new Siebel TEST environment, 2 Application Servers failing with Handshake failed error.



This is newly built Siebel environment, we have multiple servers



Ntsydasu304 - gateway and app server



Ntsydasu303 - App Server



Ntsydasu1186 - App Server



Ntsydwbu117 - Web Server







The Siebel gateway is up and running, all the application servers are started. But 2 application servers Ntsydasu304 and Ntsydasu1186 are failing with handshake Failed error








Cause




The issue seems to be caused by either port number being used by other non Siebel process, or the mapping between the hostname of the servers and the IP addresses. This analysis was based on the fact that when srvrmgr tried to communicate with the ServerMgr, it threw errors below:





- Handshake(siebel://ntsydasu1186:49162/es_obfstsb1/servermgr/ntsydasu1186) on conn 0x3121330 ok



- connect() to ntsydasu303:49168 failed (err=10060 | Connection timed out.



- connect() to ntsydasu304:49168 failed (err=10060 | Connection timed out.












Solution


For the benefit of other readers:



It was suggested to the customer to try the following:



telnet ntsydasu1186 49162

telnet ntsydasu303 49168

telnet ntsydasu304 49168



It is expected that the first one should be successful. If the 2nd and 3rd are also successful, please shutdown the Siebel servers and run the telnet again on the last 2 servers, to verify if other non Siebel process is listening on port 49168.



If the second and third fails or not responding, please try telnet the IP address. If successful, then there seems to be problem with the host-IP mapping, please verify.







By following the above steps, customer was able to identify the cause of the problem, They opened up all the required ports and the problem could be resolved.












Applies to:


Siebel Workflow - Version: 7.5.3.6 [16186] to 7.7.2.9 [18382] - Release: V7 to V7

HP-UX Itanium



Product Release: V7 (Enterprise)



Version: 7.5.3.6 [16186]



Database: Oracle 9.2.0.4



Application Server OS: HP-UX 11i



Database Server OS: HP-UX 11i







This document was previously published as Siebel SR 38-1766715080.






Symptoms


Customer was facing a problem with Workflow process manager in the development.  The application is rolled out in many countries. Each country will have a separate process manager. There are many scheduled workflows in the night by using a repeating batch components



Workflow process manager was failed in the development with the following error.

SiebelError: Unable to load message 0xffffSBL-GEN-00000' for one of the scheduled job.



we have changed the 'OM - Model Cache Maximum property' to zero and it was worked fine but performance of the process impacted significantly.



After that we have set the Cache property on the Business Services which are calling by the process to True and OM - Model Cache Maximum property to 10 on workflow process manager.

But the process was failed again with the following error

ObjMgrLog     Error     4     2005-02-09 13:12:34     SBL-GEN-00000 Unable to load message 0xffff ObjMgrLog     Error     4     2005-02-09 13:12:34     (SBL-EXL-00145) User cancel operation interrupted the running extension language script.

But the process is working fine with 'OM - Model Cache Maximum property' of workflow process manager with 0



Can you please suggest a way to resolve workflow process manager errors without impacting the performance?


Cause


The problem seems to be related the combination of having eScript in the Application_Start event of the application used by the WfProcMgr, SVB script in a buscomp instantiated in the BS.


Solution


For the benefit of other readers the following behavior was encountered.



The execution of workflow process, calling a business service, raises the error below, only at the first execution of the process (just after the restart of the Workflow Process Manager component,WfProcMgr) but not the next times.



SBL-GEN-00000 Unable to load message 0xffff





It does not seem related to the script itself, but just to the presence of the scripts. Here are for instance some steps conducted on top of standard repository that reproduced the problem.



1.    Application "Siebel Sales Enterprise" (used by the Workflow Process Manager component in standard), add following eScript script to Application_Start:

//test



2.    Buscomp "Account", add following Visual Basic script to BusComp_SetFieldValue

'test



3.    Compile SRF, deploy to server.

4.    Create a BS in the database (client), in eScript with following script, cache=True.

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)

{

switch(MethodName)

{

case "Method1":

          fn_Method1(Inputs);

          return(CancelOperation);

   default:

          return(ContinueOperation);

    } 

}



function fn_Method1(Inputs)

{

var v_boBanner ;

var v_bcBanner ;



v_boBanner = TheApplication().GetBusObject("Account");

v_bcBanner = v_boBanner.GetBusComp("Account");



v_bcBanner = null;

v_boBanner = null;

}

5.    Create a new workflow process, Start > BS > End, that calls the BS created above. Activate the process.



Just after the restart of the component, the process fails with error SBL-GEN-00000 Unable to load message 0xffff when constructing buscomp "Account" in the BS script. Next executions work correctly.



Change request  BUG 10493326 was created to have this product defect addressed.  The issue was not seen beginning in version 7.8 of the application.



Here are few observations and possible workarounds.



a)    Setting the parameter ModelCacheMax to 0 seems to resolve the error but then the performance was very poor and it is not recommended.

b)    If the BS is defined in Tools (compiled in the SRF) rather than in the Client (stored in the database), the problem does not occur.

c)    In the above example, changing the script in Application_Start from eScript to SVB solved the problem.

d)    In the above case, changing the script in buscomp from SVB to eScript solved the problem.










References


BUG:10493326 - [CR#12-U0PRCS][FR#12-U0PRGK] MESSAGES �SBL-GEN-00000 UNABLE TO LOAD MESSAGE 0XF
















Applies to:


Siebel System Software - Version: 7.7.2 SIA [18325] and later   [Release: V7 and later ]



Oracle Solaris on SPARC (64-bit)



Product Release: V7 (Enterprise)



Version: 7.7.2 [18325] Pub Sect



Database: Oracle 9.2.0.2



Application Server OS: Sun Solaris 9



Database Server OS: Sun Solaris 9







This document was previously published as Siebel SR 38-1699853721.






Symptoms


SBL-GEN-00000, SBL-UIF-00276

Hello,

We are currently running some performance load tests using Mercury's LoadRunner.

During our run, we have have 1 user being added every 25 seconds for a maximum of 50 users, which

run until completion. At around the 28 minute mark and 35 users have entered the system, Siebel

starts producing errors causing all subsequent users/transactions to fail. Attached is the error

log. Some of the errors that are produced include: "Communication: User is not associated with

any communication configuration in the database", "Unable to load message 0xffff", "Cannot open

file: /opt/siebel/SBLSRVENV14A/siebsrvr/webtempl/CCError.swt".








Cause


Configuration/ Setup


Solution



Message 1


For the benefit of other users:







Customer was running a load test with Load Runner where the test scenario consisted of a user logging into the Siebel Application, calls a business service/workflow that makes an external call to outside system, and brings data back to be evaluated and used by the user. They had one user login every 25 seconds, and the following errors occured around the 30 user mark or about 25 minutes into the run.







[LOADTEST061] 686d688 Load Script from Attachment: Error: errCode=65535 errorMsg="Unable to load message 0xffff Parameter 1 = (SBL-GEN-00000)"







(parser.cpp (3522)) SBL-UIF-00276: Cannot open file: /opt/siebel/SBLSRVENV14A/siebsrvr/webtempl/CCError.swt







Technical Support on further research found that the SBL-UIF-00276 was occuring due to the fopen limit as per "'Alert 1025: Siebel Server Components That Read or Write to Files on Solaris May Encounter Fopen() Behaviors".







To resolve the behavior following workarounds were suggested:



The workaround is to :







1) Turn off all extra logging for this Siebel Object Manager component (default settings). This will reduce the number of log files opened and written by this component.







2) Decrease the number of tasks for each Siebel Object Manager process by increasing the number of MaxMTServers.







Customer adjusted the Min MT Server and Max MT Servers for the Object Manager component to resolve the behavior.
















Applies to:


Siebel Tools - Version: 7.8.2.3 SIA [19221] to 8.1.1.2 - Release: V7 to V8

z*OBSOLETE: Microsoft Windows Server 2003



Product Release: V7 (Enterprise)



Version: 7.8.2.3 [19221] Life Sci



Database: Oracle 10.2.0.1



Application Server OS: Microsoft Windows 2003 Server SP1



Database Server OS: IBM AIX 5L 5.2







This document was previously published as Siebel SR 38-3214918831.







""Checked for Relevance on 20-Feb-2012""






Symptoms


Customer tried to add a MVG Applet to a field in Contact Home Add Virtual Form applet in Contacts Home Page view. When adding a text box, it does not display and only the MVG Icon is displayed.



If trying to click on the icon, the following occurs:



Unable to load message 0xffff(SBL-GEN-00000).










Cause


The customer had customized standard applet 'Contact Home Add Virtual Form Applet' by exposing a control based on the MVF 'Street Address' and that had a MVG applet associated.



In the UI they noticed there was no text box displayed for this control. Only the label and the MVF icon appeared. Also when the MVF icon was clicked the following error occurred:

- - -

Unable to load message 0xffff(SBL-GEN-00000)

- - -



This behavior is due to the fact it is currently not possible to used MVG applets in "Add" and "Search" screen home page applets. This matter is documented in the Bookshelf:



Configuring Siebel Business Applications > Configuring Screens and Views > Process for Creating Screen Home Page Views >Creating Rapid Search and Rapid Add Virtual Business Components.

- - -

...

CAUTION: MVGs are not supported on Rapid Search or Rapid Add applets.

...

- - -



Bug 10501236  has previously been logged asking for the possibility of using multi-value fields in Rapid Add applets. This matter is discussed in Note 534213.1 Hierarchial Picklist on homepage not working properly.




Solution


The customer wanted even so being able to select one address when adding contacts via the "Add" applet. It was suggested the following to achieve this requirement:







1 - Add 2 dummy fields in BC 'Contact Home Add Virtual', for example:



- - -



Name: Dummy Address Id



- - -



Name: Dummy Street Address



Pick List: MyPickList



- - -





'MyPickList' would be a pick list based on BC 'Pharma Address' and the 2nd field would have 2 pick maps:



- - -



Field: Dummy Street Address



Picklist Field: Street Address



- - -



Field: Dummy Address Id



Picklist Field: Id



- - -





2 - Add a control mapped to field 'Dummy Street Address' on applet 'Contact Home Add Virtual Form Applet' and expose it on the "Edit" applet web template. Set a pick applet based on BC 'Pharma Address' to this control.







3 - In the WebApplet_PreInvokeMethod event of applet 'Contact Home Add Virtual Form Applet' test if the method invoked is 'Mirror Add GotoView' and if yes set a specific dynamic user profile attribute (Method: SetProfileAttr) with the value of the BC field 'Dummy Address Id' and set the 2 dummy BC fields to NULL.







NOTE: "Mirror Add GotoView" is the method invoked by the "Add & Go" button.







4 - In the BusComp_PreWriteRecord event of BC 'Contact' test if the specific dynamic user profile attribute is set (Method: GetProfileAttr) and if yes, associate the address to the contact by using the address id stored in the profile attribute. For example:







(a) Instantiate the MVG BC associated to the MVF 'Street Address' of the active BC



> Method: GetMVGBusComp







(b) Instantiate the associate BC tied to this MVG BC



> Method: GetAssocBusComp







(c) Query the field 'Id' in the associate BC using the value stored in the local variable



> Methods: SetViewMode, ClearToQuery, SetSearchSpec, ExecuteQuery







(d) If a record is retrieved associate this one



> Methods: FirstRecord, Associate







(e) Set the 2 BC objects to null or nothing to destroy them







NOTE: Do not forget to reset the dynamic user profile attribute.







For further information about the programming possibilities and Siebel interface events and methods, please refer to the Bookshelf:







# Siebel Object Interfaces Reference



- Programming



- Interfaces Reference
















Applies to:


Siebel Pharma Handheld - Version: 7.7.2.10 [18385] and later   [Release: V7 and later ]

Information in this document applies to any platform.






Symptoms


We are trying to synchronize our PDA in Companion Sync method against a local DB and a 7.7.2.10 SIA [18385] QF0A08 local client in a machine with a Vista O.S always unsuccesfully. The siebel application in the PDA is installed using a CAB 7.7.2.10 PDA [18385]. The synch process begins as expected:

- Login Complete

- Initialization Complete

- Configuration Updade Not Required

- Setting Filters complete

- Transaction Upload Complete

- No Transaction Errors Reported

And then, at the start of the Extracting Database phase, the following error typically appears:

- Server returned NOTOK. Fatal error etc.

After reviewing the log (attached), the following error appears 3 or 4 times:



(buscomp.cpp (25186)) SBL-GEN-00000: Unable to load message 0xffff



After searching at the metalink I find out a SR with the similar error on PDA synchronization. The solution provided is to set the EnableScripting cfg parameter to FALSE. I tried this solution and the synchronization works fine. The problem is that we use scripting in our application at synchronization level and we can't disable that cfg parameter.



Another important point to notice is that without uninstalling the PDA siebel application, using the same local DB and local client (7.7.2.10 SIA [18385] QF8) in a W2000 machine, the synchronization works absolutely fine with the EnableScripting parameter set to TRUE.



Our question is:



- Why the PDA synchronization is not possible in a Vista machine and it is on a W2000 machine on the same conditions?




Changes


This behavior is triggered through the introduction of scripting to any of the following methods :

PreGetFieldValue

ChangeRecord

PreQuery

Query

PreInvokeMethod

InvokeMethod

but only affects environments in which Siebel Handheld Clients are synchronizing with Siebel Mobile Clients (Companion Synchronization).


Cause


The behavior is caused by changes to the way in which Microsoft Vista handles COM initialization.


Solution


In order to resolve the behavior users have a number of options :

1) Set EnableScripting=FALSE on the appropriate .cfg file used for handheld synchronization (e.g. pharmace.cfg, cgce.cfg, etc)

2) Ensure that no scripting is included in the following events :

PreGetFieldValue

ChangeRecord

PreQuery

Query

PreInvokeMethod

InvokeMethod

3) Apply the fix for CR #10560131  "PDA Synchronization in a Vista OS machine failing".

Fixes have been included in the Siebel 7.7.2.12 FixPack and the Siebel 7.8.2.13 FixPack.


References


BUG:10560131 - [CR#12-1RVORD3][FR#12-1RVORDO] PDA SYNCHRONIZATION IN A VISTA OS MACHINE FAILING

Tuesday, September 11, 2012

How to Optimize Siebel Application Login Time

Recently, we've had a lot of users complaining about the homepage taking too long to load. Why does the login page take long to load? What happens when the login page loads. Below are some of the tasks that Siebel performs while loading the application.

- Verifying Application Schema Version
- Loading / validating State Models (checks whether or not the expiration date is greater than current date)
- Verifying State Model values for transition
- Loading / Validating Personalization rules and rule sets for each event on applets, Business Components, - - Business services and application
- Loading / validating user profile data.
- Loading / validating System preferences
- Loading localized data (Phone format, date format, time zone, currency etc)
- Loads user reporting hierarchy
- Loads application view-responsibility data.
- Message Broadcast (This can be inactivated by inactivating the Message broadcast bar)

The reason behind such a behavior is that some of the static data (localization, license keys etc) and SRF data that are common to all business components are initialized for the object manager process with the first task or user login request. It is this initialization of tasks that causes the delay in service to the first user.

















Setting the “OM - PreLoad SRF Data” (PreloadSRF) parameter to TRUE will trigger the loading of this global data for the object manager process when it is initialized upon starting the services. Now the first login should be faster as the burden of reading the static data is pushed to the component startup phase.

NOTE:  After setting the parameter to TRUE, you must recycle the services for the parameter value to take effect.

If setting the parameter at the enterprise level, all the object managers in the environment will automatically inherit the parameter value (unless an administrator has specifically set the value on the lower object manager level).

Also, if this parameter is set to be TRUE in conjunction with the MinMTServers parameter, the static data will be loaded for the number of object manager processes specified for the MinMTServers parameter when the component is initialized. This way there will be no delay in service for a large volume of users since the minimum required multi threaded object manager processes would already be initialized.

M.O.S Reference:  Doc ID - 476878.1

Monday, September 10, 2012

Profile Hunter 1.0


Off lately i have been involved in the training and knowledge transfer sessions so delay in writing post. Trust me training is definitely not the best part of job. In one of the sessions i was asked a scorcher of question.

Is it possible to find all the places where we have used any profile attribute including tools and client side artifacts ?


This prompted me to learn some excel vb and i have come up with an alpha profile hunter tool which guns down profile attributes used in client side artifacts. This tool is available for you for download and trial. It is also available under Downloads link.It takes profile attribute you have specified and searches this attribute in below objects

Personalization Applet
Personalization Applet - Rule Set
Personalization View
Personalization - Rule Sets
Runtime Events - Objects
Runtime Events - Action Sets
DVM
DVM - Rule Set

A simple SWOT analysis will give you a better detail.

Strength
- It searches for given Profile attribute across all configurable client side artifact where we can use GetProfileAttr or SetProfileAttr methods.
- It gives results in the Output sheet which can be very useful in any support or maintanence project.
- It is easy to configure.
- It is flexible enough allowing user to select or deselect objects to be searched.
Weakness
- When searching across all objects watch out for performance.
- As it is based on Siebel mobile web client automation server it needs dedicated or mobile web client running in background.
Opportunities
- With ever increasing configuration and customization, this can be very handy tool for maintanence of project.
- Most of the time development is done by some team and support by other. In such scenarios this tool can be very helpful.
Threats
- Unattractive UI
- It doesn't search in siebel repository for profile attribute in this release.


Regarding search on the tool side there are already couple of options available including siebel repository search and awesome Oli has developed terrific repository analyser. I am also in process of enhancing this to make it search on tools side artifacts. As usual as it is in crude phase any input, suggestion and comment to improve are most welcome.

Happy Hunting!!

Disclaimer: It can be taxing on system to search on all objects, please do a dry run by selecting one or two objects to search in order to ensure it is working fine on your machine.

Tuesday, August 7, 2012

Confirm in Standard Interactivity

"Confirm" function in javascript is as powerful as batmobile which work as check for users prior setting or clicking mission critical values. It allows developer to seek user blessings if they want to perform particular operation or not.In ongoing series on Standard Interactivity, here we will discuss usage of "Confirm" and use the result to set/reset values in SI mode.

Problem Statement: In eService Portal, whenever user is changing status values, he/she should be prompted with confirmation message and based on Yes/No values should be set.
Solution: As in HI client it is cake walk solution to implement where one can use BS "PreSetFieldValue" event of BC. However with SI client under question things become different with architectural limitation. The solution is orchestrated using the DOM events available in SI application. Following piece of browser script code is written on onfocus and onchange events. The key here is to determine the sequene of events. onfocus happens before onchange event for Status column.

general declaration:
var preValue;

function Edit_SList__0__Column__Status__onfocus (applet, id)
{
preValue = document.getElementById(id).value; // Fetch current value of status
}

function Edit_SList__0__Column__Status__onchange (applet, id)
{
if(confirm("Are you sure you want to change Status"))
{
document.getElementById("WriteRecord").click();
}
else
{
   document.getElementById(id).value = preValue;
   document.getElementById("WriteRecord").click();
}
 }
This will set/reset the values of status column based on user consensus. A curious mind by now must be thinking can we have Confirm on button click also. Yes we can. My support(ID 745518.1) already have solution to that.

Happy Crunching!!

Tuesday, July 31, 2012

Changing Font and Color

"Mere color, unspoiled by meaning, and unallied with definite form, can speak in thousand different ways." -- Oscar Wilde
Status bar is a common feature in siebel where color encoding depicts the status of record. I recently encountered similar scenario where i had to display different coloured text based on certain conditions on Form Applet. Browser script clicked me first. But finally this was achieved using configuration. As i struggle to achieve similar result in List applet we will discuss how on Form applet desired could be done. Lets take Service Request entity as an example (offlately this is becoming my favourite entity).

Problem Statement: If SR has some related SR then it should display some text in Red else alternate text in green.

Solution:

a) Go to SR buscomp. Create following fields

Name: PastSRRed
Calculated: True
Calculated Value: "< font color='red' > "+"This SR has related SR." +"< font > "

Name: PastSRGreen
Calculated: True
Calculated Value: "< font color='green' > " +"No related SR found" +"< font > "

Name: PastSRDisplay
Calculated: True
Calculated Value: IIF(Count("SR") > 0,[PastSRRed],[PastSRGreen]) // In this SR is the name of multivalue link between SR and related SR bc.

b) Go to SR form applet, where text needs to be displayed. Create following control.

Name: PastSRDisplay
Field: PastSRDisplay
DisplayName: PastStatus
HTML Display Mode: DontEncodeData

Compile BC/applet and lookout for changes. But to fetch this on list applet is still mystery for me. Any thought on list applet will be of great help.

Happy Coloring !!

Explicit Write in Standard Interactivity


Offlately i am working on SI application and being bombarded by lot of user acceptance issues. I am not sure whether God is really happy or its just a clearance sale that most of the time we are able to find the fix. Recently we were being asked to implement explicit write sort of scenario in standard interactivity portal. In the detail applet for service request user didn't want to click Save button to save the record instead it was required as soon as details in the Description are filled record should auto save.

Again browser script comes to party. As browser script on standard events of Applet/BC doesn't work under SI architecture, only control level events are supported. Ever friendly Alex has beautifully explained the browser script architecture in his recent post. So idea here is to explicitly call the click event for "Save" button on the applet for OnChange event of Description column. Fortunately for us most of the fields on the applet were auto populated and read only so this solution is not that performance taxing.

However the key to this solution remains the HTML attribute property of the "Save" button control. As siebel generates its own SWE html ids(like s_1_1_6_0) so it becomes very important we give custom id to this button in order call it in other events. This can be achieved by adding below attributes to the control in tools.

HTML Atttribute: id=WriteRecord 

Once the id is associated with button control, we can easily call below code from OnChange event:

function Edit__0__Control__Description__onchange (applet, id)
{
if(document.getElementById(id).value != "")
{
document.getElementById("WriteRecord").click();
}
}

This approach though has some inherent disadvantages as this can be only used when controls/columns in the Form/list applet are less. Any other approach/idea/comment to achieve explicit write functionality in SI application is always welcome.

Happy Crunching!!





Thursday, July 12, 2012

Illusion in Standard Interactivity


Whenever I am asked to work on siebel standard interactivity it feels like harry potter stranded in those wild mazes. But i can tell you if you play in Java/HTML you can really unearth hidden gems in SI application. Recenty while working on Siebel eSales portal we were asked to implement typical requirement to control button's visibility conditionally. 

For the Open status button should be visible on list applet and for other status values it should be hidden. Once again "WebApplet_ShowControl" server event is critical to its implementation as other browser events of applet are not supported in SI architecture. The idea is to modify the HTML generated at run time to achieve conditional visibility. Below steps are required for ultimate illusion.


1 - In the HTML attribute of the Button Control which we want to make conditionally visible add below property
style='visibility:hidden'
By default button will be hidden and we will only make it visible when status is Open.


2 - Below piece of script is required at "WebApplet_ShowControl" event on the server side of applet.
if ((ControlName == "Test") && (Property == "FormattedHtml"))
 {
var a = HTML.indexOf("visibility");
var b = HTML.indexOf("'",a+1);
if ((a > -1) && (b > -1))
{
var sr = this.BusComp().GetFieldValue("Status");
if(sr=="Open")
var t = "visibility:visible'";
else
var t = "visibility:hidden'";

var HTML2 = HTML.substr(0,a) + t + HTML.substr(b+1);
HTML = HTML2; // Re-Generating HTMLs
  }
 }
Here we are just checking the status value and modifying the generated HTML at run time to make button dynamically visible.





If in first attempt it doesn't work don't get mad at me just clear the cache and watch out for magic. Bet me you will feel like wathcing The Prestige again.

Happy Summers!!