Saturday 31 December 2016

Siebel eMail integration : Part Four, Reading a SR Number from Email Subject

In previous Post we read subject of Mail using Inbound Email Manager GetTokens methood and sent Help Template in return,
In this post we will configure our process to read Subject and perform certain Operations.


  • Status(Query)
  • Submit(Create)
  • Update
  • Delete


lets take example for Searching a Service Request.

Let us suppose the sample subject is on format,

Subject : STATUS SR#

Approach : since we have to read the subject that has status keyword and SR# we need to get the fetch their values. We will use BS Inbound Email Manager and GetTokens method, since there are two words in Subject we will have to pass NumOfToken as 2 in input and get SR number in Output











Output,












here Service Request Number process property will contain the value of SR Number. Which we will pass further to query SR in database.

Query SR,












only task now left is sending Mail with the required details we fetched using above step.

For more details refer workflow  "eMail Response - SR Status"

sample Email, 





















Template can be modified as per requirement ..Hope this was helpful .

<--Previous Post-->                                       <--Next Post-->

Wednesday 28 December 2016

Siebel eMail integration : Part Three, Reading a Mail and sending reply

In this Post i will explain setup of Response Mail in reply to an incoming mail.

Goal : Configure a Template to return the user with the Help template listing the right steps of using the Functionality and correct template syntax.

We can use the Vanilla workflow eMail Response - Process Service Request for configuring this ..

Some Important BS used in the Process:














More details about the BS is available on Bookshelf

  • First step is to read the workflow and understand what does we require from it, it contains certain validations and checks on Email , Organization.













  • Extract the required fields using Workflow Utility BS, we require these fields for further processing.
Sender's Email
Subject
Body
Receiver's Profile
Time etc..


















  • Call Sub Process based on subject keyword, In this case we are calling HELP sub process to send us help template.











Finally define the action to be done in Sub Process.
















Here we are sending back mail to the recipient from which we received mail. Refer this to understand how to send mail using workflows.


Working Sample Mails :

Incoming Mail: 








Response Mail :











Hope this was helpfull,,, keywords can be setup as per your choice... 

<--Previous Post-->               <--First Post-->         <--Next Post-->

Tuesday 27 December 2016

How to enable Server Component in Siebel

Hello All,

Many times we have to enable particular server components which we generally do not use. Recently was setting up Siebel Email Inegration but Siebel Communication components were not enable on Server.
So i had to enable the component Group and Synchronize it to make them available for use.

1. Navigate to Admin Server - Configuration

2. In component group search for the particular component group










Click on Enable Button and verify the state is Enabled

3. Under components verify for each components Enabled on Server flag is checked in Component Assignment Group Applet.












4. Once Verified, Navigate to Synchrionize Tab and select the required component and click Synchronze button










Restart Siebel Enterprise Server and Gateway Name Server ... Components will now be available under component view in Administration - Server Management.

Siebel eMail integration : Part Two, Monitoring a Mailbox

for better understanding of siebel email integration lets know some important server components.

Siebel Communication Components

Communications Session Manager (CommSessionMgr): Used with CTI/Voice Integration

Communications Configuration Manager (CommConfigMgr): Used with CTI/Voice Integration

Communications Inbound Receiver (CommInboundRcvr): Receives inbound work items and, in some deployments, queues them for processing by Communications Inbound Processor. Work items can include email messages (for Siebel Email Response).

Communications Inbound Processor (CommInboundProcessor): For deployments of Siebel Email Response supporting nonreal-time work items, this component processes inbound work items that were queued by Communications Inbound Receiver.

Communications Outbound Manager (CommOutboundMgr): Processes outbound communications, for email, fax, wireless messages, or page channels. Supports communication requests, whether directly or through Siebel Workflow. Responsible for Sending Mails Notification

Page Manager (PageMgr): Used to send pages by the Send Page command.

Email Manager (MailMgr): Used to send email by some workflow processes in Siebel Workflow.

these components are a part of Communications Management component group, for Siebel Email Integration we require these components to be online.

First step is to enable the Communications Management component group ,synchronize the components, restart Siebel servers(Enterprise and gateway both) and verify the components are Online. Please refer the post to enable these components

Next step is Configuring Siebel to Monitor a Mailbox,

In this setup we require

  1. Mailbox (POP Enabled)
  2. CIP (Communication Inbound Processor)
  3. CIR (Communication Inbound Receiver)
  4. Response Group 
  5. Communication Profile (already created in Previous post)


Response Group, is responsible for defining the Mailbox to monitor and the workflow to call that will read and process the mails.

  1. Navigate to Administration -- Communication, All Response Group and provide the Name, Service Name as workflow Process Manager and Status as Active.






     2. Define the Profile we created in Previous step and verify Mailbox details












    3. Provide Input arguments, Generally the name of workflow that reads and processes the mails.











after defining the Response group Active it and Submit Response Group Changes.























Now verify the configuration by sending Test mail to mailbox, it should be read by CIR, and should be automatically removed from mailbox.
This can also be verified from /SBA_81/siebsrvr/bin/incoming folder where the processed emails are temporarily stored.
Hope this was helpful, comments are always welcome :-).

<-- Previous Post -->                                                   <--Next Post-->

Monday 26 December 2016

Siebel eMail integration : Part One, setting communication profile

Hello All,

In this series i will explain Siebel Email Management and related concepts, Profiles, Outbound Components, Inbound Requests.

Siebel Supports 3 types of communication. 

1. Session-based or interactive communications. Through Siebel CTI and CTI middleware products. 

2. Inbound communications. Supports integrating to third-party email servers and processing
inbound email, for Siebel Email Response deployments. For more information, see Siebel Email
Administration Guide.

3. Outbound communications. Supports integrating to a variety of third-party communications
systems such as email servers to send outbound communications. For more information, see
Siebel Email Administration Guide.

we will cover the 2nd and 3rd section in this series.

Defining/Setting Communication Profile, 

The first step to setup any commuication process is defining a communication profile, where we provide POP, SMTP, Port details.

POP :Post Office Protocol version 3 (POP3) is a standard mail protocol used to receive emails from a remote server to a local email client

IMAP :The Internet Message Access Protocol (IMAP) is a mail protocol used for accessing email on a remote web server from a local client. 
While the POP3 protocol assumes that your email is being accessed only from one application, IMAP allows simultaneous access by multiple clients. This is why IMAP is more suitable for you if you're going to access your email from different locations or if your messages are managed by multiple users.

SMTP :Simple Mail Transfer Protocol (SMTP) is the standard protocol for sending emails across the Internet.

Ports :Port on which SMTP, POP listen the incomming/outgoing requests

110, POP
995 , POP (SSL/TLS)
25, SMTP
587, SMTP(SSL/TLS)

Steps to setup communication profile

1.Navigate to Administration -- Communication , Communication Profile view 












2.Under Profile View Provide the required Details 











deafult port for SMTP is 25 and POP is 110, so you do not need to explicitly provide those unless mailbox is some addition configuation of TLS or SSL.

3.POP server is required when you require inbound communication i.e. Monitor a mailbox 
for outbound communication only SMTP server is required i.e. server to send emails

4.After the details are provides Reload Communication Profile and test.
























Hope his was helpful... In next post i will explain how to read a Particular Mailbox using siebel communication components i.e. CIP (Communication Inbound Processor) and CIR (Communication Inbound Receiver). 
Any suggestions are always welcome :-) ..

                                                                                                       <-- Next Post -->



Tuesday 13 December 2016

Error when trying to Change Login from Employee Screen,operation is not supported by your security adapter (SBL-DAT-00567)

Hello All,

One of my colleague recently showed me a strange error "The requested operation is not supported by your security adapter. Please contact your system administrator if you feel the operation should have been supported.(SBL-DAT-00567)" , he got the error when trying to change login Name in employee screen for a user.

At first i was clueless about what this error could be then i delineate the behavior and analysed why was it appearing.

The reason is very clear, There are two type of authentication in Siebel, Database and LDAP with LDAP authentication this issue was not observed. This was appearing for Database only, the reason is setting of database security adapter(DBSecAdptPropagateChange parameter to TRUE.











PropagateChange parameter when set to true propagates the changes to Database as we have functionality to change password for Siebel directly from Profile option (http://www.siebelfoundations.com/2015/08/changing-login-password-in-siebel.html).
So when this parameter set to true and user tries to change the Login Name it tries to Propagate the changes to database or basically it tries to alter the user name which is not allowed.
Hence the error pops up.

This is my understanding of the behavior, any clarification welcomed :-) ...


Automating User Creation in Siebel

Hello All,

This is very basic requirement where you want some process to create users in Siebel directly and you do not have to create them manually in database.

Let me describe the working scenario for this.

There are two types of Authentication in Siebel

  • Siebel Database Authentication 
  • Siebel LDAP/ADSI Authentication 
for LDAP authentication user need not to be present in siebel database only a record in Employee screen with a Login name is sufficient to access siebel but for Database authentication user has to be there in siebel database (DBA_USER) also along with Employee table.

So creating a user for DB based Access requires two steps configuration, creating user in Employee screen and other in Database.

Recently i had this requirement to automate the User Creation so that each time  need not create the user in database it is created automatically when entered in application.

Approach is pretty simple, combination of  Run Time Event and Script served my purpose.

Steps:
  • Create a RTE base on User/Employee Business Component on WriteRecord event
  • Create a Action Set to call Business Service, passing Current Record's Id as input 
  • Write a Server Side BS (Why not client side? because of changes in Siebel Security model read this for more details http://www.siebelfoundations.com/2016/05/unable-to-access-file-system-using.html)
RTE :
Create a Event based on Employee BC






Set ID of the record as Profile attribute to be used in Business Service














Call Business Service
















Sample Business Service Code ;
















This Code creates the user and password with LOGIN NAME in Database by calling shell file.

shell file code :


echo "In Shell File"
sqlplus SIEBEL/SIEBEL@DATABASE @/u01/SBA_81/siebsrvr/UserCreation/User.sql $1
exit;

this shell file in turn calls User.sql file to run create user command.

Sql Code :

create user &1 identified by &1;
grant sse_role to &1;
commit;
exit;

Hope this was helpful .. for any queries or script please contact me ..

Friday 2 December 2016

Referal opening for web developes in top IT companies

Hello All,

please share it with your colleagues/friend/contacts with experience in web developement.

Referal opening for web developes in top IT companies ,please inbox me your updated profile and contact details at rahulymca007@gmail.com

Web Developer Job Duties - Web developer responsibilities include building our website from concept all the way to completion from the bottom up, fashioning everything from the home page to site layout and function.

 Responsibilities

 1. Write well designed, testable, efficient code by using best software development practices
 2. Create website layout/user interface by using standard HTML/CSS practices
 3. Integrate data from various back-end services and databases
 4. Gather and refine specifications and requirements based on technical needs
 5. Be responsible for maintaining, expanding, and scaling our site
 6. Stay plugged into emerging technologies/industry trends and apply them into operations and activities
 7. Cooperate with web designers to match visual design intent

 Requirements

 1. Proven working experience in web programming
 2. Top-notch programming skills and in-depth knowledge of modern HTML/CSS
 3. Familiarity with at least one of the following programming languages: PHP, ASP.NET, Javascript or HTML
 4. A solid understanding of how web applications work including security, session management, and best development practices
 5. Aggressive problem diagnosis and creative problem solving skills
 6. Strong organisational skills to juggle multiple tasks within the constraints of  timelines and budgets with business acumen
 7. Ability to work and thrive in a fast-paced environment, learn rapidly and master diverse web technologies and techniques.

 please inbox me your updated profile and contact details at rahulymca007@gmail.com

Tuesday 27 September 2016

Working with Multilingual Siebel Application

Hello All,

I was working in Siebel application in ENU(english language) only for most of the time but recently we had deployed our application in multiple languages so got a chance to work with multilingual application.
Some difference i observed are :

1. Many existing components are cloned for the new language, like callcenter_enu, EAI_enu etc. are for english language and for n additional language deployed n new components will be created i.e. callceter_fra, callcenter_ara.

2. Components like Communication, Data Managers are not cloned i.e. they are language independent

3. We need to manage multiple SRF files for each language type, default directories for SRF are creted under siebsrvr/Objects/Lang 













4. Each SRF needs to compiled with tools language set as that particular language.

To change tools language :-
Select Options from View tab,  from the Pop up select the language and click OK.


















5. Symbolic String , with multiple language deployed each Symbolic String has child in the deployed language that lets captions to be loaded in different languages.









6. Multilingual LOV's, with multilingual application LOV's are maintained in multiple languages.









Other things are similar as in single language application, main points to keep in mind are multiple SRF and Captions for controls.

Hope this was helpful..


Wednesday 21 September 2016

Creating a Custom Button using PR file

Hello All,

Recently i had a requirement where i was required to add a new button on List applet to perform some update operation. This is very basic requirement and can be easily done by creating a button at applet control and associating a script to perform the desired operation.

This time i thought to work without a SRF recompile, so i tried this with PR file and i actually saved a lot of time and learned something new.

Actual Requirement was like :

  • Need to Create a button in the Highlighted area








  • Button Created using PR







Sample PR Code :









explanation of Code :

var id1 = this.GetPM().Get("GetFullId") + '-siebui-cust-Validate-btn' , Id which we are assigning to the button 


var ValidateBttn = "<button " +  
  "id= '" + id1 + "' " +  
  "class= 'siebui-ctrl-btn appletButton' " +  
  "aria-label=Validate" +  
  "type=\"button\" " +  
  "data-display=\"Active\" " + 
          "title=Validate" + ">" + "Validate" + "</button>" , code for custom button here we have defined Id, Label and Title for this button


.find(".siebui-icon-find").append(ActivateMemberBttn) , code finds Object with class siebui-icon-find and adds button near this object

to find the Place holder for button :








  • Click fn + F12 to open browser console
  • Select the element after which you want to place control
  • Look for its class, can be found under (Class : "") tag 
  • make sure the class is unique i.e. used only once in the current div else it will result in Creation of multiple buttons
Now complete you PR file and write any code you want to perform in your PR on button click event.
Register PR in Manifest Administration and you are good to go.

Hope this was helpful ...

Tuesday 20 September 2016

Working with Crontab in Linux Environment

Hello All,

We have often worked with schedulers to run a task on a set frequency i.e. daily, weekly or hourly. In windows we use Task Scheduler to run a task at a specified interval. Recently i had to schedule a daily task in Linux environment so like windows task scheduler we have Cron process in Linux.which runs in background and executes scheduled process. A detailed description is given in the following article http://www.howtogeek.com/101288/how-to-schedule-tasks-on-linux-an-introduction-to-crontab-files/ 

To List out some Important commands in Brief :

Listing Crontab - crontab -l
Editing Crontab - crontab -e
Opening Crontab in Edit Mode - i (Insert Mode)
Escape Crontab - Esc (Brings Crontab in Read Only Mode)
Exit Crontab - :q
Exit and Save Crontab - :wq

Setting The Frequency of Running Tasks :

minute(0-59) hour(0-23) day(1-31) month(1-12) weekday(0-6) command

i.e. 30 7 1 12 * /siebel/export.sh

the command translates to , run export.sh file every 12th Month(December) on 1st day at 7 hrs 30 minutes
* in the crontab represent no validation so, 

30 7 * * * /siebel/export.sh, represents run export.sh every day at 7 hrs 30 minutes 

Issue faced with SQL Data Export using Crontab  :

I was running a Task to Export data from table to a shared location, i implemented this by Spooling a SQL file and Calling the File from a shell script(.sh) then set its frequency to run daily.
If i ran the .sh file manually from command terminal it was running fine with SQL export files generated in specified directory, but after scheduling it in cron tab log files were generated but no SQL export files were being generated.
After much of research, re verifying syntax and hit and trial i realized i was missing some very important points.


  • I did not specify the target directory in shell file where i wanted my export files to be generated, since while running manually from terminal i had placed my .sh file in same location so export files were generated 
  • While running in Cron tab since there was no explicit directory specified field were being generated under /HOME location
  • The issue resolved after i specified target directory path before SQL export was called.

Sunday 28 August 2016

Error : SBL-DBC-00104: Error retrieving next record from the database

Hello All,

Recently i faced an issue where in a view was not loading and error "SBL-DBC-00104: Error retrieving next record from the database" was appearing.
In detailed log also not much of the information was given ,
"SBL-DBC-00104: Error retrieving next record from the database.
SQLParseAndExecute Execute 5 0000a9f7572e1aa8:0 2016-08-25 18:03:38 ORA-24345: A Truncation or null fetch error occurred"

after some debugging i narrowed down the scenarios where this type of error could occur.
  • Some wrong query is being run in back end, which is not fetching any record.
  • Some wrong or Null value is there in any column which is causing the Select selection which is generated at view load time to fail
  • Some columns attribute is being wrongly defined i.e. Length of column is Different then what is maximum declared at table level.
  • Some existing column is mistakenly used again

if found below articles very helpful to make me sure that i was in the right direction.(thank you respective authors for such nice articles)




i further debugged and the root cause in my case was ,

Some existing column is mistakenly used again

in the course of development we used a already used extension column to store some custom value and this column was appearing in the select statement of view load, there was some conflict because of this and it resulted in error.

After changing the column to a new one and clearing any previous value in the columns solved my issue.

so to summaries,

  • whenever using any existing extension column make sure its not already used
  • always make sure length property of column and BC level are same
  • In any error situation the best approach is to first generate Spool and read the Select statement that is failing, most of the issue can be resolved by debugging this SQL statement.
Related Error : "SBL-DBC-00105: An error has occurred executing a Sql statement" ,caused by difference in Physical Schema and Logical Schema, can be removed after Applying DDL from Siebel Tools to the changed/modified table.

Hope it was helpful..  

Wednesday 17 August 2016

Working with Property Sets in Siebel

Hello All,

Siebel property set are indispensable when it comes to format data in hierarchical formats. Recently I had some requirement wherein I had to return output in hierarchical format.
The exact requirements was we have queried multiple SR's and return the result in a hierarchy.

so to format data i used Property Sets to convert  output data in required format

Format 1: 
  PropertySet [
 <?xml version="1.0" encoding="UTF-8"?>
 <?Siebel-Property-Set EscapeNames="true"?>
 <PropertySet>
 <SR1>
          <SRNumber>1-23245</SRNumber>
          <Status>Closed</Status>
          <Error></Error>
 </SR1>
 <SR2>
         <SRNumber>1-456386</SRNumber>
          <Status>Open</Status>
          <Error></Error>                                                                            
 </SR2>
 </PropertySet>]            

in this format Attributes appear as Separate Tags under parent SR tag.

Format 2: 
  PropertySet [
 <?xml version="1.0" encoding="UTF-8"?>
 <?Siebel-Property-Set EscapeNames="true"?>
 <PropertySet>
 <SR1 SRNumber="1-23245" Status="Closed" Error=""></SR1>
<SR2 SRNumber="1-23245" Status="Closed" Error=""></SR2>               
 </PropertySet>]            

in this format Attributes appear witin parent SR tag.

Depending on the requirement below code can be used to format the output.

Sample Code for Format 1:
  for(var x = 1; x <= NumberOfSR; x++)
{
     var outPropset = TheApplication().NewPropertySet() ;
     var outPropset1 = TheApplication().NewPropertySet() ;
     var outPropset2 = TheApplication().NewPropertySet() ;
     var outPropset3 = TheApplication().NewPropertySet() ;
       // oOutputs contains values of Multiple SR's,
    SR = oOutputs.GetProperty('SR '+x);
    var pInputs = TheApplication().NewPropertySet();
    var pOutputs = TheApplication().NewPropertySet();
    pInputs.SetProperty("ProcessName", "Process SR Workflow");
    pInputs.SetProperty("Object Id", SR);
    pService.InvokeMethod("RunProcess", pInputs, pOutputs);
    var SR = oOutputs.GetProperty("SRNumber");
    var Status = oOutputs.GetProperty("Status LIC");
    var Error = oOutputs.GetProperty("Error Code");

     outPropset.SetType('SR'+x) ;
   outPropset1.SetType("SRNumber") ;
   outPropset2.SetType("Status");
   outPropset3.SetType("Error");

   outPropset1.SetValue(SR) ;
   outPropset2.SetValue(Status) ;
   outPropset3.SetValue(Error) ;

   outPropset.AddChild(outPropset1) ;
   outPropset.AddChild(outPropset2) ;
   outPropset.AddChild(outPropset3) ;

   Outputs.AddChild(outPropset);  

}
   // After looping if you want to convert Property set to XML use XML Converter Business Service

Sample Code for Format 2:
 // Declaration same as above
    {
   outPropset.SetType('SR'+x) ;
 outPropset.SetProperty("SRNumber", SR);
 outPropset.SetProperty("Status", Status);
 outPropset.SetProperty("Error", Error);
 Outputs.AddChild(outPropset);

}
   // After looping if you want to convert Property set to XML use XML Converter Business Service 
various methods that can be used with Property sets are.
  • AddChild
  • SetType
  • SetProperty
  • GetProperty
  • SetValue


Tuesday 16 August 2016

Array Variable in siebel eScript

Hello All,

While working with siebel eScript I got a requirement to use array for storing some variables.
Arrays work like normal JavaScript variable in siebel the difference is just in the declaration and the dimension.
Below code describes how to use array.

Sample code looked like.


      var Result= new Array();

      for(var x = 1; x <= 5; x++)
      {  
        // Dynamically assign value in Array variable
          Result[x] = x;
          Outputs.SetProperty('Output'+x,Result[x]);                                                            
      }

the oputput of this will be,
Output1 = 1
Output2 = 2
Output3 = 3
Output4 = 4
Output5 = 5

we can also declare multiple dimensional arrays also,


      var Result= new Array();
// or we can explicitly specify multi dimensional arrays var Result= new Array(x,y);

      for(var x = 1; x <= 5; x++)
      {  
        for(var y = 1; y <= 5; y++)
         {
        // Dynamically assign value in variable
          Result[x,y] = x+y;
          Outputs.SetProperty('Output'+x+y,Result[x,y]);
         }                                                        
      }


the oputput of this will be,
Output11 = 2
Output12 = 2
...
Output21 = 3
Output22 = 4
...
Output51 = 6
Output55 = 10

we can create hierarchical property sets from the outputs depending on the format we are required to return output.

for Creating Hierarchical property sets refer the post http://www.siebelfoundations.com/2016/08/working-with-property-sets-in-siebel.html

Monday 15 August 2016

How to work with input of Array Type in Siebel eScript

Hello All,

Recently I had a requirement wherein I was getting multiple values in inputs and had to use the values one by one in my code ,perform some calculation till all values have been read from input.
The requirement can be summarized as, suppose we are given 5 Service Request number in input and we are required to perform some operation on each of them.

  • We need a way to read each Service Request number individually
  • We need to parse the input based on a delimiter

In my case I was getting the input in format as : 1-12345;1-34566;3-78686;9-09867
Multiple SR numbers separated by semicolon( ; ) as delimiter.

first i had to use Vanilla Business Service

BS : Inbound E-mail Manager 
Method : GetTokens

to parse input text and convert input string in multiple SR numbers.
For more information on this BS please refer bookshelf.
https://docs.oracle.com/cd/E14004_01/books/eMail/eMail_BusServMeth3.html

then, Iterate my code number of time and each time store the output in a variable, since the number of SR in input is not fixed i had to user arrays to dynamically store output.

Sample code looked like.
function Service_PreInvokeMethod(MethodName, Inputs, Outputs)
{
    if (MethodName == 'GetSRNumber')
     {
      var Result= new Array();
      var Status = "";
      var SRInput = Inputs.GetProperty("SRInput");
      var NumberOfSR = Inputs.GetProperty("NumberOfSR");
      var Token = "";
      var oService = TheApplication().GetService("Inbound E-mail Manager");                                    
      var oInputs = TheApplication().NewPropertySet();
      var oOutputs = TheApplication().NewPropertySet();

 // call BS to parse input to separate Numbers

      oInputs.SetProperty("Delimiter", ";");
      oInputs.SetProperty("NumTokens", NumberOfSR);
      oInputs.SetProperty("Text", SRInput);
      oService.InvokeMethod("GetTokens", oInputs, oOutputs);
      for(var x = 1; x <= NumberOfSR; x++)
      {
         Token = oOutputs.GetProperty('Token '+x);
        // Dynamically assign value in variable
          Result[x] = Token;
          Outputs.SetProperty('SR'+x,Result[x]);
      }
 }
 return (CancelOperation);
}


here, NumberOfSR is the count of SR's in Input which we require to separate to individual SR, Result is a array in which we are storing values of SR Number
expression Outputs.GetProperty('Token '+x) this expression iterates in the loop for each instance i.e. for x =1 it is evaluated as
 Outputs.GetProperty("Token 1")
and for subsequent values of x as
 Outputs.GetProperty("Token 2")
 Outputs.GetProperty("Token 3")
 Outputs.GetProperty("Token 4"), here we are dynamically creating the variable based in the number of times we need to run loop.

The same way we are dynamically assigning values in Array,
expression Result[x]  this expression iterates in the loop for each instance i.e. for x =1 it is evaluated as
Result[1] 
and for subsequent values of x as
Result[2] 
Result[3]
Result[4]  
.
The output of this is











we can then fetch the values of SR Number from output or we can use Property set to create Hierarchical outputs as well.

for Creating Hierarchical property sets refer the post http://www.siebelfoundations.com/2016/08/working-with-property-sets-in-siebel.html


Wednesday 27 July 2016

Working with Siebel Outbound Web Services

Hello All,

Recently i has some requirement wherein i had to work with siebel outbound webservices.
It was first time i was working with Outbound web services so i tried to first understand the working of outbound webservices, so to explain in brief
  • Outbound Web services requires a WSDL file provided by external System.
  • This WSDL file contains Methods that are understood by external system and URL's that will be requesting connection to external system
  • WSDL file is Imported in Siebel Tools and Path for XML and Log file is specified
From Tools new wizard select Web Service
















Provide a WSDL file location and Directory for log and WSDL file XML generation (generally a writable directory i.e. c://siebel/tools/temp)












Import start and we have Option to auto deploy the IO and Business Service to client or we can manually do it by importing the WSDL XML file generated in previous step in Administration - Web Service > Outbound web service view












  • This Import of WSDL generates a Proxy Business Service in Siebel and Related IO (External IO)
Proxy BS based on class "CSSWSOutboundDispatcher" with methods defined in WSDL file







IO's created with type as XML(external IO)








  • The BS actually contains the Methods and Input/Output description that are understood by external system
  • Either the webservice can be deployed while Importing WSDL by selecting deploy as Web Service option or by imporitng the XML file that was generated from WSDL import in Administration - Web Service, Outbound web services view.
  • Verify the Newly imported Business Service and IO's created in the Tools, 
  • Compile the BS in the SRF and you are now ready to move to Next Step.
Important step now is to understand the format in which data has to be passed in the Web Service and when to call the web service. So some points that should be understood are 

  • How the data/Inputs needs to be passed to Web Service - We need to pass the inputs to proxy BS which was generated after WSDL Import, which in turn internally calls the outbound deployed Web Service.
  • What should be the data structure (Input Data Type), Since WSDL import generated IO (external) with XML base we have to pass data with XML as Structure. The exact Structure can be known from IO Structure, generally it's
<IO>
<ListOfIC>
<IC>
<ICField1></ICField1>
------------------------
<ICFieldn></ICFieldn>
</IC>
</ListOfIC>
</IO>

  • How to use the Output, since the Output will also be in XML format we need to identify the Tags we require form the Output XML, we can use vanila siebel business services to get elements value from XML's. To get value of tag ICField1, we will have to traverse XML till the node and get it value general format in dot notation is
                  IO.ListOfIC.IC.ICField1.<value>          
  • The Most important thing is when to call this whole Process, its important to decide the event when to send the outbound request it may be on a Record Write on database or on Button click. So for that we need to create RTE, or custom method on the particular events to call the Process  and pass the inputs.
In my next post i will take a Sample WSDL file and create a Process that will pass inputs to the web service and extract Output returned from external system.




Monday 18 July 2016

Deploying Siebel Busines Service as Web Service

Hi All,

While working with Integration with different systems, we need to expose Siebel process to external system.
We can use Workflows or Business Services as web services and can expose these to external system. So the process is like.

  • Siebel Workflow/Business Service Exposed as Web Service
  • WSDL for the Web Service is shared with external system
  • Communication happens over different Protocol (SOAP / REST)
In this post i would explain and describe how to expose Business Service as web service.

Suppose we have a scenario in which External system need to query Siebel Contacts and get the result.
We will first write a simple Business Service with the Describe logic and once BS is tested will deploy it as Web Service.
I assume that you have already a Business Service Ready ,we need to follow below Steps: 

1. Navigate to Administration Web Service - Inbound Web Services









2. Enter a new record with the following details








  • Namespace - Provide a valid name her this will be used as refernce by external system
  • Name - Name of web service for Siebel reference

3. In Below Applet Serivce Ports, define the required details


  • Click on New button, 
  • In Business Service Field open the Pick applet, it will show the List of available BS in system
  • click New button in the pick applet and choose your created BS, and give it a name
  • Choose Transport as HTTP, and define the Address, its of the form http://<webServer>/eai_<language>/start.swe


4. In the below Operation applet choose the Method described for the BS, it shows the method defined in the Business Service - Method






After this steps your Inbound Web Service is ready we can generate WSDL for this and can share it with external system.

note: before generating WSDL , click on Clear Cache button to load latest data also make sure popup is not blocked. The web service can be tested on any SOA based tool like SOAP UI, more detail like how to simulate web service using SOAP UI i will share a separate post for this.


Thursday 14 July 2016

Calculating Difference Between two dates in Siebel eScript

Hello All,

Very often we get to work with dates in Siebel, comparing two dates, Subtracting two dates. So how do actually date types field behave. In eScript we declares variable as var which is general format as eScript is not strongly typed language.
I had a very simple requirement to compare Today's date with created date calculate age of record.
Logic is very simple,

Today()-RecordDate, and it should give me the output but it didn't work. :(

Here comes the use of Date() object to actually compare, manipulate date variable.

so the expression is modified to ,

var Today = new Date();
var RecordDate = new Date(Rec_Date);

Difference = Today - RecordDate ;

Now it works as expected, the difference is in Milliseconds, that can be converted to Years or Days by dividing with factor.

To Days, Difference/(1000*60*60*24);
To Years, Difference/(1000*60*60*24*365);

Hope this was helpful.

Friday 10 June 2016

Siebel Data Validation Manager

Hi All,

In this post i will explain about siebel data validation manager and its advantages over Applet or BC level scripting.

Data Validation Manager aka DVM, is a Business Service that can validate business component data based on a set of rules. In the case of a rule violation, a custom error message appears or a user-defined error code is returned.

Advantages of DVM over Scripting :
  • SRF Independent
  • No downtime required for adding/modifying rules
  • Executes before any applet/BC events
  • Works at application level
Creating a DVM :

1. Navigate to Administration - Data Validation 

2. Under Rule Set create new record.










  • Sequence Number : Specifies Order of execution
  • Expression : Sepcifies expression to validate
  • Business Component : BC Name 
  • Apply To : Current Record on which to perform validation
  • Return Code : Error message to return
3. Validation Message/Return code is defined in Validation Message view






4. DVM can be called using run time event on various events, to create a RTE follow below steps

Navigate to Administration - Runtime Events, create new action set 










  • Business Service Name : enter Data Validation Manager in this field
  • Business Service Method : enter Validate in this field

Now Activate rule set from rule set view ,status of rule set should be changed to Active and Reload run time events and you are done.




Siebel GoTo View - Handling Realtime cases

 Hello All,  We all must have used GoTo view functionality of siebel to navigate to a particular view from current view. What if the require...