Monday 26 June 2017

Unable to read value from export file - Siebel-ERR-1109

While we are doing a Full Get in Siebel Tools for first time or while setting a new ODBC Connection, many times we faced an error like below

Siebel-ERR-1109 : Unable to
read value from export file ( myLen (8) > valueLen (2))

This error caused due to some missing registry key entries in ODBC connection.
To resolve this error add below registry keys for new Oracle ODBC connections:

Registry editing path for 64 bit:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\ORACLE_CONNECTION_NAME]

Registry editing path for 32 Bit:
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ORACLE_CONNECTION_NAME]
Registry keys:
  • PacketSize = 0
  • EnableScrollableCursors = 0
  • ColumnsAsChar = 1
  • ColumnSizeAsCharacter = 1



ORACLE_CONNECTION_NAME is the name of the ODBC database connection.

Tuesday 28 March 2017

Exporting Product Lines in Siebel


As we know we can export Products, Product classes, Attributes etc., using workspaces. 

But can we export Product Lines also using workspace??? No. This cannot be done using product workspace. 

Reason being, Product line is not a versioned object. You can add/delete product from a product lines as and when required and there is no track for that.

Hence exporting and importing Product Lines doesn’t work in same way. 

See the below snapshot where you cannot find the Type of Versioned Object.

Here comes the question of how do we export product lines? The answer is through ADM (Application Deployment Manager)


  • We need to go through ADM process, we need to follow following process
  • Navigate to Application Deployment Manager --> Deployment Projects
  • Create a New Record and make sure Export to File is selected
  • Create a New Record in Project Items with below details
    • Data Type Name=ProdFeature
    • Deployment Mode=Synchronize or Upsert (as per Business customization)
    • It is recommended to always have one master environment, hence in that case it would be Synchronize
    • Save the record
  • Now there will be a child for ProdFeature with Data Type Name as “ProdLine”
  • Provide a Filter against ProdLine as “[Name]='<Product Line>'
  • Click on Validate Filter Button
  • Once Validated, navigate to Deployment Sessions
  • Create a New Record
  • Select the project Created
  • Click on Save
  • You should be able to see the status as Filter Validated under Session Transactions
  • Click on Deploy
  • System will prompt for Server Path, Provide the same
  • Once Export is done, Status will be changed to Export Completed


Snapshot showing Project Items with Deployment mode as “Upsert”



Importing Product Lines

  • Navigate to Application Deployment Manager --> Deployment Sessions
  • Go to Menu and Select Deploy from Local File
  • Click Browse and select the XML file, import the same


Note: Make sure Organization Id in XML is as per Target Environment, if not, you need to change in XML, else import will be successful but Organization will not be mapped, hence you might face Visibility issues

Saturday 4 February 2017

Force Active - Control User Property

Many time we face the situation where we are using GetFieldValue() in script for particular field and it is giving below error:

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

In this case we either add ActivateField() before GetFieldValue() code or we make Field property Force Active to True.

BC property Force Active, make field active even though it is not mapped to UI. So whenever BC gets called this force active field is also get queried and many times it leads to performance issue.

To avoid above situation, if you want to make a particular field force active on particular applet then you can use Control user property or List column user property to make field force active instead of making Force active at BC level and instead of mapping field in UI.

This will reduce performance issue as that field will get queried when that particular applet will get called not every time BC will get called.

Configuration is as below:

    1)  Add a control (which you want to make force active) to applet.
    2)  Add control user property as below:

     Name: ForceActive
     Value: Y

    3)  Compile your applet.

As output you can get this field value in script only for that applet without having any performance issue.

Similar user property is there for list column as well.



Wednesday 1 February 2017

Load data from Excel to Siebel

We came across requirement where we have to upload bulk hierarchical data (Account-Contact-Asset) from excel into Siebel.

Below are few approach which we generally used to load bulk data in Siebel:
  • EIM
  • Macro
  • Custom Business Service – using Clib() function or Com object
Here we used simplified approach, using vanilla business service. We used “Read CSV file” vanilla BS to read data from csv file and convert it into IO structure. After creating IO structure we used EAI Siebel Adapter BS to inset or upsert data in Siebel.

Currently there are two standard workflow processes which are using the Read CSV File business service
  •          Import Marketing Contact
  •          Import KPIs

Implementation of this approach is as below:
1) Prepare csv file in specific format as below:
-          Identify the IO in which format you want to import the data.
-          Follow file format as below:
1.   First Line should contain # Integration Object name.
2.   Second line should contain
#Integration Component name.IC Field name1, #Integration Component name.IC Field name2…and so on
3.   Data should be there from third line.



     2) Create workflow as sample below :

   



 Sr No
Step
Business Service
Method
Input parameter
Output Parameter
1
Read from CSV
Read CSV File
CsvToPropSet
CsvFileName
SiebelMessage
2
Insert in Siebel
EAI Siebel Adapter
Insert
SiebelMessage


We used the same workflow to import LOV as well, just we need to make sure that IO should be present to import the data and create respective csv file to import data.

Tuesday 31 January 2017

Aspect User Property

We came across the requirement where we have to default field value depend on the view.

Basically we have to default Service Request Type to Internal if service request is raised from employee service request view and if service request is raised from Account Service request view then default service type to External.

We observed that in both the views same applet is being used. Here we came up with approach to use aspect user property instead of scripting/BC cloning.

Approach is as below:

1) Add applet user property as below:



Applet User Property:
Name: View Apsect:Account Service Request List View(eService)
Value: SRType_E

Here depending on view name we have specified the value.

2) Search for Service Request Type field and add Field user property as below:


Field User Property
Name: Aspect Default Value:SRType_E
Value: Lookup(“SR_AREA”,”External”)
Here we are referring SRType_E from Applet user property.

In BC user property depending upon the value whether SRType_E or SRType_I field will get default value either External or Internal respectively.

By using aspect user property we can control BC functionality, instead of going for scripting or cloning the BC.


Friday 13 January 2017

After upgrade Binocular search drilldown is not visible

After upgrade we found that, drilldown links are not visible for binocular search results.

Binocular search is major functionality in our project, for each binocular search result more than one result fields are having drilldown link but after upgrade to open ui drill down links were disable.

After further analysis we found that this is due to change in behaviour of OPEN UI.

From version 8.1.1.11, drill down from any other field is not supported except the field that was queried in Open UI. Also Open UI only provides drilldowns for the lowest sequence number result.

In our case for Asset search, you have to provide Phone number as input and in result you will find information like Account number, Activation date, Status and so on.

In above scenario drilldown is on Account Number.

Configuration is as below:

Find field
Sequence
Display in Result
Display in Entry
Drilldown View
Phone Number
1
N
Y

Account Number
2
Y
N
Test View

In above case, we have not done query on Account Number as well as Account Number is not lowest sequence.

Hence Drill down were not visible on Account Number.

To make drill down visible we just made few changes in configuration as below in Open UI:

Find field
Sequence
Display in Result
Display in Entry
Drilldown View
Phone Number
2
N
Y

Account Number
1
Y
Y
Test View

Make the sequence number of field on which you want drill down to lowest number, in above scenario made Account Number sequence to 1.

Also Add field on which you want drill down in query field i.e. in above made Display in Entry for Account Number to Y.

By just doing above two small changes your drill down for search field will be back J


Please refer Oracle Doc ID 1610626.1 for more information.

Product Names appended with Row Id


With respect to Products in Siebel, sometimes, you might have encountered with a situation where product name will be appended with ROW_ID of the product.

Here we will discuss on Issue, Reason, and Possible Solution for this Problem


One basic thing everyone has to remember about products is, they come in to exists only once the products are released, which means only when a versioned object reference of that product are created.


Scenarios of Observation:

 You might have observed this issue in different situations like
  • During Products addition in Workspace
  • When products are imported in Target System


Possible reasons:

1. This happens generally when OBJECT_NUM reference of VOD table doesn't match with that of ROW_ID of S_PROD_INT

Initially OBJECT_NUM value will be set to that of ROW_ID of S_PROD_INT.
These values are preserved and referenced/used in many other tables.
Now, lets see why the values are changed with following Example

Consider following are the details of a Product in two different environments


Product Name
ROW_ID
CFG_MODEL_ID
OBJECT_NUM
VOD_NAME
Env1
Test
1-1A
1-1A
1-1A
Test
Env2
Test
1-1B
1-1B
1-1B
Test


Now, when you import the product Export from Env1 to Env2, This might either fail or if it gets success a new record will be created in New Environment. And final structure looks like this


Product Name
ROW_ID
CFG_MODEL_ID
OBJECT_NUM
VOD_NAME
Env1
Test
1-1A
1-1A
1-1A
Test
Env2
Test
1-1B
1-1B
1-1B
Test
Env2
Test {1-1A}
1-1A
1-1A
1-1A
Test {1-1A}


Where an Extra record is created in Target Environment Env2.

Remember, CFG_MODEL_ID stores the versioned object Identifier

Scenarios you might encounter when Duplicate products Exists

  • During Customization, we might get an error saying object Identifier not found
  • Product Name appended with RowId
  • Duplicate Class and attribute records in Target Environment

Possible Solutions

Following solutions are not tested by me but might work
  • Use Name based Import using ISS Authoring Import Export business service as suggested by Oracle
  • Rename older product NAME  in S_PROD_INT and VOD_NAME in  S_VOD and try to import

Best Practices

  • Never Create products with same name in two different Environments
  • Never Create Attributes, Classes and any other information in other environments
  • Maintain single product  master environment for configuring the products from Scratch