Wednesday, 23 December 2015

Making a Field Readonly Based on User's Responsibility

Hi All,

I had a requirement wherein i had to make a field Editable only for certain user and read only for others.
the requirement is very easy and can be achieved with configuration.


  • Create a Responsibility and Assign it to Users for whom to make Field Editable.
  • Create a calculated field on BC with the following expression .

IIf((GetProfileAttr("User Responsibilities") = "Your New Responsibility"),"N","Y")

name this field as ReadOnlyFlag.

  • Create a User Property Field Read Only with the following value,

Name :Field Read Only Field: Email Address
Value :ReadOnlyFlag

and you are done now the field Email Address will be editable for users with responsibility Your New Responsibility.

Limitations : The Expression "IIf((GetProfileAttr("User Responsibilities") = "Your New Responsibility"),"N","Y")" get the of users primary responsibility only so you have to make the new responsibility as Primary responsibility of User.

the alternative for this is using another method

GetProfileAttrAsList("User Responsibilities")
and make the calculate field as ,
IIF(InList("Your New Responsibility",GetProfileAttrAsList("User Responsibilities")), "Y", "N")

this method gets the list of user responsibility and the expression above checks if the New Created Responsibility is in this list and based on this check returns Y or N.

Hope this was helpful ...


Configuring Constraint Picklist in Siebel

Hi All,

This sort of requirement is very common in projects, where we want to show only restricted data in Dropdown based on value of Other field or dropdown.
for achieving this we are actually constraining the data based on some field ,so the value based on which we are restricting the data can be called as constrained.

for example suppose we have a case of Country and States and we want to restrict the value of states depending the country ,in this case since the value of State which will appear in dropdown depends on the value of Country so we can say the constrain is on County.

Configuring this is very simple in Tools ,

1. Under Field Pickmap ,select the value of field on which to apply constraint.(Country in our Case)












2. Enter the field with which to match the constraint in Picklist Field. In My case since the LOV was not based on PickList Hierarchical  BC so we can not use Parent value directly, here i have provided Description in the Field.

3. The Last step now is to enter Country Name in Description field in List Of Value for the State LOV.











and you are done Now for County India , state with Value Defined in LOV will only appear.

Note: There is some major difference between Constrain Picklist and Hierarchical Picklist

Hierchial Picklist are based on PickList Hierarchical BC can only be constrained on value in Parent LIC in LOV.
where as Constraint Picklist we need to Specify the Picklist field on which to apply constraint.




Friday, 11 December 2015

How to Add new Node in XML in Siebel

Hello All,

This post is in continuation of my prevoius post http://siebelfoundation.blogspot.qa/2015/12/how-to-get-value-of-xml-node-from-ioxml.html , where i was getting the value of a particular node in XML and based on certain condition resetting its value.
here instead of resetting the value of node i will update the value in new XML element(Node).

The approach is Prety simple:

  1. Need a way to get the XML Hierchy/IO Hierarchy 
  2. Get the value of particular Node in XML/IO Hierarchy
  3. Set the value in a new Node in the Hierarchy.
you can refer the solution for first 2 points in the previous posts, for the third one we will use the same BS Workflow Utility set the value in a new Node.


Set the value in a new Node Points.

Business Service : Workflow Utilities
Method : Echo

In input pass the XMLHierarchy as input, and the value of node which is to be set you can ether use a literal value or any expression for that, the only difference is that if the node you are setting value in already there in Hierarchy then it will update its value and if node is different it will add a new node with the provided value in Hierarchy.

Input Argument :







Here i am adding a new node with some custom value

Input Argument is :
XMLHierarchy.ListOfMember.Member.PointsValue.<Value>

value is :
2*[&Points]

Output Argument :






here we are just returning the XML Output which will contain the XMLHierarchy with modified node value.

the output will be something like ,

<ListOfMember>
<Member>
<Name>ABC</Name>
<Age>30</Age>
<Email>A@B.C</Email>
<Points>1000</Points>
<PointsValue>2000</PointsValue>
.....
</Member>
</ListOfMember>

you could also see the new Node in the watch window during simulation.
Hope this was helpful , cheers ...



Friday, 4 December 2015

How to Get value of XML node from IO/XML Hierarchy in Siebel workflows

Hello All,

Recently i got a new requirement where in i have to get the value of a Node of Output XML Hierarchy and depending on some condition change the value of the node. ie. say, I have Queried on LOY Member IO and i got Output Member points, now i need to return money value of Member Points.

<ListOfMember>
<Member>
<Name>ABC</Name>
<Age>30</Age>
<Email>A@B.C</Email>
<Points>10000</Points>
.....
</Member>
</ListOfMember>

here i needed to return the Amount equivalent of points, ie, say 100 points equals 200 rupee so, for 1000 points it should return 2000 in Points, as customer is concerned only with the Money value of points in all not the actual point balance.

The approach is Prety simple:

  1. Need a way to get the XML Hierchy/IO Hierarchy 
  2. Get the value of particular Node in XML/IO Hierarchy
  3. Set the value of Node in the Hierarchy.

Here i use a very common BS Workflow Utility to get and set the value of the Node.

1.Get the value of Node Points.

Business Service : Workflow Utilities
Method : Echo

Create a Process Property of type Hierarchy , name it say XML Output.
I my case i am first Querying data using EAI Siebel Adapter and Converting the IO output hierchy in XML hierarchy and Storing the output in XML Output.

Input Argument :









Output Argument :



The path is given in Dot notation till to node whose value we want to fetch.

as in this case it is XMLHierarchy.ListOfMember.Member.Points.<Value> , and we can store this value in any Process Property in my case Points.

2.Set the value of Node Points.

Business Service : Workflow Utilities
Method : Echo

In input pass the XMLHierarchy as input, and the value of node which is to be set you can ether use a literal value or any expression for that,

Input Argument :









Here i am setting the value the value of Node Points as Points*2 ,

Input Argument is :
XMLHierarchy.ListOfMember.Member.Points.<Value>

value is :
2*[&Points]

Output Argument :






here we are just returning the XML Output which will contain the XMLHierarchy with modified node value.

the output will be something like ,

<ListOfMember>
<Member>
<Name>ABC</Name>
<Age>30</Age>
<Email>A@B.C</Email>
<Points>20000</Points>
.....
</Member>
</ListOfMember>

you could also see the modified values in the watch window during simulation.
Hope this was helpful , cheers ...

I will also share how to Add a new node in the Output XML Hierarchy in case the requirement is to show the Calculated/New value as a new entry in XML in upcoming post.

Thursday, 26 November 2015

Unlock Objects for Local/Sample Database

Hi All , we all might need to unlock certain objects in our Local or Sample database while development.

I am compiling a list of all the used object unlock SQL statement that can be useful.


TABLE


UPDATE siebel.s_table tab SET tab.obj_locked_flg = 'N', tab.obj_locked_date = null, tab.obj_locked_by = null, tab.obj_locked_lang = null WHERE tab.name = 'S_CONTACT';

commit;


BUSCOMP


UPDATE siebel.s_buscomp bc SET bc.obj_locked_flg = 'N', bc.obj_locked_date = NULL, bc.obj_locked_by = null, bc.obj_locked_lang = null WHERE bc.row_id = '1-xxxx';

commit;


BUSSERVICE


UPDATE siebel.s_service serv SET serv.obj_locked_flg = 'N', serv.obj_locked_date = NULL, serv.obj_locked_by = null, serv.obj_locked_lang = null WHERE serv.row_id = '1-xxxx';

commit;


APPLET


UPDATE siebel.s_applet appl SET appl.obj_locked_flg = 'N', appl.obj_locked_date = NULL, appl.obj_locked_by = null, appl.obj_locked_lang = nullWHERE appl.name = 'ABC Applet';

commit;


PROJECT


UPDATE siebel.s_project  AS proj SET proj.locked_flg = 'N', proj.locked_date = NULL WHERE proj.name = 'Sample Project Name';

commit;

Tuesday, 10 November 2015

Siebel can give you sleepless nights :-) ,if not configured properly

Hello All,
Recently we had some issue with our new dev environment where in Siebel Server components were crashing and were not coming online by executing start component commands and from Admin - Server Management, we had to restart siebel enterprise server all the time if any component shhudown unexpectedly. Also because of some uknown reasons many componets like Generate Triggers, Database Extract , Communiation Outbound Manager, Communication Inbound Processor were not comming online at all.

Log files were flodded with errors

SBL-SVR-00029: Internal: Shared memory has not been initialized. 

SBL-SVR-00011: Required argument, (null), is missing\n", 

CommInboundProcessor 26574 SBL-OSD-02011 Process 26574 exited with error - Process exited because of a segment violation (SIGSEGV) 

eMediaObjMgr_enu 25472 TERMINATED Process 25472 was terminated 

loyaltyscwObjMgr_enu 25526 TERMINATED Process 25526 was terminated  

CommInboundRcvr 25191 TERMINATED Process 25191 was terminated 

Process 25231 exited with error - Process exited because it received signal SIGABRT



after much of analysis we noticed that under Admin - Server Management , Components
many components were online and most of them were unnecessary ,we then set the unnecessary components on Manual startup and restarted the gateway and Siebel enterprise server and finally server components were up and there were no component crash.

so what was happening that On startup load on server was too heavy because of unwanted components which were installed and that was causing OS to run out of thread which generally referenced by the following error 

SBL-SMI-00063: Internal: Error 852173 creating a service thread (11) or SBL-OSD-00205: Internal: pthread_create() failed with error 11.

So while instaling siebel server it should be carefully chosen that which are the required components and only required components should be installed.

Happy Debugging....


Thursday, 1 October 2015

Working with Siebel VBC, Extracting data from external file

Hi All,

Recently we were preparing some POC for our client, one of our team member suggested to present some functionality which enables us to show data from an excel file in Siebel Screen.
so we thought to give it a try .we used the below approach.

1. Since data sorce was not any siebel table but a external file, we had to use VBC to read the file.
2. Created New VBC ,Business Service, Applet  to show the data.

the exact steps were :

1. Create a new VBC based on class CSSBCVExtern.
2. Add field in the VBC.
3. In BC User Property create a new record
   Name : Service Name
   Value : Read From File Business Service (Name Of Business Service)







4. Create the Business Service ,the sample code looks like

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
switch (MethodName)
{
case "Init" :
Outputs.SetProperty ("NumberOfCard", "");
Outputs.SetProperty ("TypeOfCard", "");
return (CancelOperation);
break;
case "Query" :
readFile(Inputs, Outputs);
return (CancelOperation);
break;
}
return (ContinueOperation);
}

//function to read file
function readFile(Inputs, Outputs)
{
var str;
var usageAry = new Array();
var test:PropertySet = TheApplication().NewPropertySet();
var filePath = "C:\\Output.CSV";
var oFile = Clib.fopen(filePath,"r+");
var out;

try
{
if(oFile != null)
{
while(!Clib.feof(oFile))
{
str = Clib.fgets(4000,oFile);
usageAry = str.split(","); // Delimiter to separate data from the file
test.SetProperty ("NumberOfCard", usageAry[0]);
test.SetProperty ("TypeOfCard", usageAry[1]);
Outputs.AddChild(test.Copy());
test.Reset();
}
}
}//end of try
catch(e)
{
//handle the error
}
finally
{
test = null;
usageAry = null;
}
}

5. Create a new applet based on the created VBC and Add it to either existing view or create a new view.
6. Compile and test you changes.

Data from csv file shown in applet








csv file with data













Hope this was helpful...

Note : VBC are specialised type of BC which are not based on any tables but get the data from the business service on which they are based. Various operation like Update, Query, Insert can be performed on VBC based on the method defined in the Business service.

Wednesday, 30 September 2015

Fixing Text Area Issue in Siebel using custom PR file

Hi all,

In Open UI there is a change in behaviour of fields of type Text Area, in HI there used to be a icon in text area field on on click on that a popup opened and the data was displayed separately in popup.
But in Open UI the functionality has been replaced with dragable Field option, wherea icon apper in the botton right of field and the field can be enlarged.








We had a requirement recently to fix the Text Area field issue, we used the below appraoch.

1. Increase the dimension of TextArea field onFocus.








2. Set the values of dimensions to initial onBlur.






This does not replicates the HI behaviour but serves the purpose.
PR file looks Like


 if (typeof(SiebelAppFacade.LOYHideFieldPR) === "undefined")
 {
 SiebelJS.Namespace("SiebelAppFacade.LOYFixTextAreaPR");
 define("siebel/custom/LOYFixTextAreaPR", ["siebel/phyrenderer"],
 function () {
 SiebelAppFacade.LOYFixTextAreaPR = (function ()
 {
 function LOYFixTextAreaPR( pm )
 {
 /* Be a good citizen. Let Superclass constructor function gets executed first */  SiebelAppFacade.LOYFixTextAreaPR.superclass.constructor.call( this, pm );
 /* Static List of Control Identifier which will be displayed in Carousel; */
 }
 SiebelJS.Extend( LOYFixTextAreaPR, SiebelAppFacade.PhysicalRenderer );  LOYFixTextAreaPR.prototype.ShowUI = function()  SiebelAppFacade.LOYFixTextAreaPR.superclass.ShowUI.call( this );
 var pm = this.GetPM();
 //Enlarge Comments field on Focus Rahul Verma
 $('[aria-labelledby = "Description_Label"]').focus(function()
{
 $(this).css( {
 'height': '147px',
 'width': '488px',
 'position': 'inherit',
 'margin': '2px 0px',
 })
 });
 $('[aria-labelledby = "Description_Label"]').blur(function()
{ $(this).css( {
 'height' : '48px',
 'width' : '104px' ,
 'position' : 'inherit'
 })
 });
 };
 return LOYFixTextAreaPR ;
 }
());
 return "SiebelAppFacade.LOYFixTextAreaPR";
 });
}

Hope this was helpful..

#Note : please see post http://www.siebelfoundations.com/2017/08/siebel-open-ui-enhancement-fixing-text.html for a jQuery based solution to this issue.

Monday, 21 September 2015

How to Show custom Error message in Siebel Workflows

Hi all , while using workflows we all have used Stop step , to stop the execution of workflow and display error message.
By default stop step provides many vanila messages, what if we have to diaplay oue own custom message?

This can be done in 2 ways.

1. Using WF_ERR_CUSTOM_N in Error code , which defaults error message to %1 and error to display can be set as literal value in Multi value Property window.












2. Using WF_ERR_CUSTOM_N in Error code , which defaults error message to %1 and error to display can be set as Expression in Multi value Property window.











Hope this was helpful.

Conditionally hide a field using PR file in siebel

Hi all,

Recently i had a requirement to hide a field conditionally based on the value of another field. This could be done using browser script but since we are using Open UI so we achieved it using
Physical Renderer file(PR). The arrpoach is preety simple.

1. Need to Identify the field depending on which to hide the other field or Hide same field.
2. Write the logic in PR file to hide the field.
3. Register the custom PR against the applet in Mainfest Administration.












The exact logic is :









Result
Field Active is hidden if the value is N, This can be modified for other requirement as well we just need to identify the correct element /field to hide, using inspect element.









PR file looks Like


if (typeof(SiebelAppFacade.LOYHideFieldPR) === "undefined")
 {
 SiebelJS.Namespace("SiebelAppFacade.LOYHideFieldPR"); define("siebel/custom/LOYHideFieldPR", ["siebel/phyrenderer"], function ()
 { SiebelAppFacade.LOYHideFieldPR = (function () { function LOYHideFieldPR( pm )
 { /* Be a good citizen. Let Superclass constructor function gets executed first */ SiebelAppFacade.LOYHideFieldPR.superclass.constructor.call( this, pm );
 /* Static List of Control Identifier which will be displayed in Carousel; */
 }
 SiebelJS.Extend( LOYHideFieldPR, SiebelAppFacade.PhysicalRenderer );
LOYHideFieldPR.prototype.ShowUI = function()  { SiebelAppFacade.LOYHideFieldPR.superclass.ShowUI.call( this );
 var pm = this.GetPM();
 var controls = this.GetPM().Get("GetControls");
 var cntrl = controls[ "ActiveFlag" ];
 var ActiveFlg = pm.ExecuteMethod( "GetFieldValue", cntrl );
 // alert(ActiveFlg); Test to check if value is retrieved or not
 if(ActiveFlg == "N")
 {
 $('[aria-labelledby = "ActiveFlag_Label"]').hide();
 $('#ActiveFlag_Label').parent().hide();
 } };
 return LOYHideFieldPR ; }());
 return "SiebelAppFacade.LOYHideFieldPR";
 });
}

Hope this was helpful..

Fixing UI issue using CSS in Open UI

 Hi All ,

 In my previous post http://siebelfoundation.blogspot.in/2015/09/adding-new-css-in-siebel.html i explained how to register a new css in siebel. In this post i will show you how to make changes in CSS and deploy on server.
 The steps are very simple.

 1. We need to use the console to identify the Object on which we need to make changes
    Press F12 and select Inspect element from the top left of the consle window.










Hover on the element you need to apply any change and click on the element.









CSS and HTML tags related to the element will be seen in the right corner of console.

Identify the element and test changes in the console, once changes have been identified we will move the changes to custom CSS file.


Issue : Fields Width is too small and text is not appearing properly







Solution : Identified the Class for the field and increased the field width.









2. Write the code in custom CSS file located on webserver under "swse/public/enu/files/custom/NewCss.css"
    Once you have idetified and tested the changes in console now you need to add the changes in CSS file

// custom CSS file

.siebui-align-left { width: 180px !important; } // For increasing the width

 

3. Clear browser cache and reload siebel application, and your are done.

Hope this was helpful ... 

Friday, 18 September 2015

Adding new CSS in Siebel

Hi all,

Recently i had a requirement to make some changes in siebel application layout, the changes were related to CSS. So instead of making changes in existing CSS we prefered to write a new CSS file and register in the application.
The approch is very simple we need to follow below steps.

1. Write a new css file, and add your code there.
2. Save your file under custom folder in Web Server  (swse/public/enu/files/custom/NewCss.css) 
3. Make an entry for your new css in Theme.js file located in (swse/public/enu/23030/script/siebel/custom/Theme.js)
4. Under Administration - Application ,Mainfest File make an entry for Theme.js if its not there.







clear cache and you are done, changes made in new css will be reflected without changing vanila siebel files.
 you need to add the below lines in theme.js to register custom css with the vanila themes.

SiebelApp.ThemeManager.addResource(
    "GRAY_TAB",
    {
       css : {
               "sce-theme" : "files/custom/NewCSS.css"  // Location of CSS file which needs to be added as part of existing theme 
             }
    }
);

SiebelApp.ThemeManager.addResource(
    "TANGERINE_TAB",
    {
      css : {
               "sce-theme" : "files/custom/NewCSS.css"  // Location of CSS file which needs to be added as part of existing theme 
             }
    }
); 
SiebelApp.ThemeManager.addResource(
    "GRAY_ACCORDION",
    {
       css : {
               "sce-theme" : "files/custom/NewCSS.css"  // Location of CSS file which needs to be added as part of existing theme 
             }
    }
);
SiebelApp.ThemeManager.addResource(
    "TANGERINE_ACCORDION",
    {
       css : {
               "sce-theme" : "files/custom/NewCSS.css"  // Location of CSS file which needs to be added as part of existing theme 
             }
    }

I will post details of how to customise the UI in my upcoming post..till then happy reading...:-)

Tuesday, 15 September 2015

Query Data between two Dates using Siebel Workflow

Hi All,
recently i had a requirement to fetch data between two dates and send this data to other application in XML format.
The exact requirement was someting like,

1. Allow user to Give two dates and it should return the Records within the given date range.
2. Implement this in a workflow and expose it as a webservice.

I used the below apprach to implement this functionality.

1. Created a workflow and Used EAI Siebel Adapter Busines Service, QueryPage or Query method
2. In Search Spec i gave the below expression

[LOY Transaction.Transaction Date] >= '" + [&StartDate]+ "' AND [LOY Transaction.Transaction Date] =< '" + [&EndDate]+ "'"












this queries the data withing the given date range, the expression can be extended to support other fields as well and Checks for NULL values.

eg. IIf (
  [&TxnNumber] IS NULL ,
  "[LOY Transaction.Transaction Date] >= '" + [&StartDate]+ "' AND [LOY Transaction.Transaction Date] <= '" + [&EndDate]+ "'",
  IIf ([&StartDate] IS NULL OR [&EndDate] IS NULL ,
  "[LOY Transaction.Transaction Number] = '" + [&TxnNumber]+ "'",
  "[LOY Transaction.Transaction Number] = '" + [&TxnNumber]+ "' AND [LOY Transaction.Transaction Date] >= '" + [&StartDate]+ "' AND [LOY Transaction.Transaction Date] <= '" + [&EndDate]+ "'")
  )

 this expession takes in 3rd variable transaction Number in Input as well and allows to query with the following options which was my actual requirement.

1. Only Transaction Number
2. Only Start and End Dates
3. Both Transaction Number and Date Range

Paging can be used if the Number of records is huge.. hope this was helpful.,..

Saturday, 12 September 2015

Replicating the functionalty of siebel F9 - Send Email

Hi all, 

recently i had some issue while configuring email functionality so while exploring the solution and analysing the log file i found the functionality being executed on F9 command.

1. F9 send email command uses two method of Outbound communications Manager business service.

2. First it stores the Template body in a variable by using ExpandCommTemplate method ,which is hidden method and not much documentation has been given about it.(for more details please refer http://siebelfoundation.blogspot.in/2015/07/hidden-methods-of-outbound.html)

3. Secondly it uses send message method and uses the value it gets from parsing the template as Message body ,email from the recipient group and communication profile which user selects after pressing F9. (for details about send message method please refer http://siebelfoundation.blogspot.in/2015/04/how-to-test-email-notification-in.html)



So this the  reason why HTML templates cannot be sent using F9  ,as the method ExpandCommTemplate converts template body in plain text not HTML.
Hope this was helpful.  cheers ..

Setting value of a field depending on values of other field

Hi all. 
Recently I had a requirement where i had to populate the value of a field depending on other fields. To achieve this i used post default value with a conditional expression, the exact requirement was something like.

1. If type of transaction is Redemption and Sub type is Product then set the field value Product Name to value say Sample Product.

2.else set it to null.

The solution can also be achieved by scripting but its more easy with configuration. 
We made a expression that validates the values of type and subtype and the sets the value of product field.
expr : iif( [Type] = "Redemption" AND [Sub Type] = "Product" , "Sample Product" , "")








Add this expression in post default value and u r done.

Thursday, 3 September 2015

Using List of values to control flow of workflow

Hi all, recently i had a requirement to enable and disable Email notification in a workflow depending on some flag or user provided value.
To achieve this we used LOV to conditionally control the notification flow.
We used the following step.

1.Create a LOV type say ENABLE_EMAIL_NOTIFICATION.

2.Set Display name to TRUE and parent LIC to TRUE.

this value TRUE will be used as a conditon to execute the process.

Now in the workflow create a decision step and in the condition branch add the following condition.

Lookupvalue(ENABLE_EMAIL_NOTIFICATION,"TRUE") = "TRUE"

this expression takes input lov type and parent lic and get the Display value, so the condition executes only if value of LOV is TRUE.

Hope this was helpful.  

Wednesday, 2 September 2015

Siebel HTML Email Templates - Embedding Images and FIelds

Hi All,

recently i had a requirement to send welcome email to user upon registration, the welcome mail was a HTML template with Tables, Div's and Embeded images.
the approach is prety simple we need to use Advanced Email Templates to form the template.

need to follow the below steps

1.go to Admin - Communication --> All Templates



2.go to Advanced Tab - Create a new record and check HTML flag.
3.go to Template Items and Add HTML file and Images.








the HTML file is the actual template which will be sent in mail Body and Images that are added as attachment will be used in the HTML file.
4.under HTML file record Check the Substitute value and Message Body flag.







the HTML file can be configured as per requirement also field values can be used in the template using the format as described

<html><head><style>
#main {
   height:800px;
   background-color:#F2F2F2;
   width:600px;
}
#header {
    text-align:center;
    padding:5px;
}
#section {
    float:left;
    padding:10px;
}
#footer {
    clear:both;
    text-align:center;
   padding:5px;
}
</style></head><body>
<div id="main">
<div id="header">
<img src="images2" style="width:600px;height:228px;>
</div>
<div id="section">
<h2>Dear [Full Name]</h2>
<p>
THE ULTIMATE SHOPPING EXPERIENCE, MADE EVEN MORE REWARDING<br>
</p>
<p>
<img src="images3" style="width:600px;height:228px;>
</p>
</div>
<div id="footer">
Copyright © ABC Store
</div><div></body></html>

Now when email is sent it is recieved in the below format









Hope this was helpful . 

Tuesday, 11 August 2015

Changing login password in Siebel

Hi All ,

Recently i had a requirement where in we had  to give user the  option of changing their login password ,for tise siebel has given default functionality for password change.

1.Navigate to User Preference - Profile view














2. There are two fields Password and Verify Password, enter new password here and save the record.

and its done now you can login with the changed password.

Note : The functionality is available for only DB users ,users with Active Directory login (LDAP) cannot update their password using this approach.

Issues with this functionality.

By default the fields Password and Verify password are non-editable ,you can not enter any values in the fields, to enable the fields some changes need to be made at component level in Server.

1. Navigate to Admin - Server Configuration.

2. Go to Profile Configuration

 Query for profile "DB Security Adapter"









3.In the Parameter Applet find the record ,"Propagate Change" and change its value to True.










4. Restart the Siebel Server and you are done, Now the field will be editable.

Hope this was helpful ..cheers..

Sunday, 9 August 2015

Configuring a Workflow to Send Email Notification

Hi all, recently i had a requirement where i  hadto configure a step in workflow to alow notification to be send to user as Email.
this can be done by invoking Business Service Outbound Communication Manager using a workflow or using a custom script.

I used the below approach.

1. Create a Business Service step in workflow.
     Service Name : Outbound Communications Manager
     Service Method : CreateRequest

















2. Pass the Required arguments as Input in the Business Service step.
    CommProfileOveride : Test Exchange Profile
    SourceIdList : ObjectId (rowid of the record whose value will be substituted in Email Template)
    TestAddress : Email Address to send mail (Overrides the value specified in Recipient group)
    RecipientGroup : Recipient List to Send mail to  (Optional)
    PackageNameList : Name Of Email Template








the method CreateRequest submits a request to server and that request us processed Asynchronously,
method CreateRequestSync can be used to create synchronous request.

Also, there is another method of Outbound Communications Manager to Send mail "SendMessage". I will explain difference of both method in my next post...



Friday, 7 August 2015

Pop Up applet on Button Click in Siebel

Hi All ,

I recently had a requirement where i had to popup a applet on button click. The approach is simple we need to call create a button with method ShowPopup and definr a applet which we want to show as popup.
Steps:
1.Create a control of Type MiniButton
2.Define Method as ShowPopup
3.In Control User property , give the following details.

Mode : Edit
Popup : Name of Applet to show as popup.








Note: Applet with class "CSSSWEFramePopup" or its child classes can only be opened as popup.

we can also configure the case if we need to Open different applets on Same button click depending on certain criteria.

SQL Error While Applying DDL to Table in Local Database

While Developement with Local Database i faced the error "SQL Error Creating table Dummy Table to Verify Previleges" when i tried to Apply DDL to a table after adding a new column.
I was providing my LOCAL db credentials for the process but it showed following errors.

1.SQL Error Creating table Dummy Table to Verify Previleges , 
2.42000 (-121): [Siebel Database][ODBC Driver][Adaptive Server Anywhere]Permission denied: you do not have permission to use the "CREATE TABLE" statement


























for removing the error we need to pass the following credentials rather than Local DB credentials.

UserName : SIEBEL
Pwd : Local DB Password


Monday, 20 July 2015

Hidden methods of Outbound Communication Manager Business Service

Hi all.
Recently i had a requirement to integrate SMS functionality in siebel while exploring the solution for this i found one method 'ExpandCommTemplate' of Outbound Communication Manager which is used to convert the template content to Process Property which can be used in siebel workflows.
I used this method to convert the Template data to process property and sent the data in SMS body. I will post the details of how to send SMS in upcoming posts.

Business Service Name : Outbound Communication Manager
Business Service Method : ExpandCommTemplate



















In Multi Value property window specify the following detals.

CommTemplateName : Name of Template
SourceBusObj : Name of  Business Object
SourceId : Object Id of record






The output is returned as Output argument.
ExpandedText, contains the template body
ExpandSubject, contains the template subject.
these values can be stored in Process Properties and can be used further.






Hope this was helpful .. cheers

Thursday, 2 July 2015

Passing inputs from one workflow to sub workflow in Siebel

Hi all . i had a requirement to pass process properties from main workflow to sub process , the approach is very simple we can easily pass process properties from a workflow to sub process input arguments and also get the  output from the sub process in output arguments.
1.We need to create process properties in the parent workflow and map the process properties to process properties created in sub process.
2.for example suppose we need to pass say Card Number to sub process for this
#Create a process property in workflow say CardNumber also create a process property in sub process say CardNum
#In property window of sub process ,pass CardNumber in input argument and map this with CardNum of child sub process.
#If we need to get any output from sub process map the process property of main workflow and sub process in output argument.
See below for illustration.

Define sub Process in Main Workflow













Define Input Arguments 






Define Output Arguments






hope this was helpful .. cheers ..

Friday, 26 June 2015

Updating Records using "Inbound E-mail Database Operations" Business Service

Hi all , in my previous post http://siebelfoundation.blogspot.com/2015/06/siebel-operations-using-inbound-e-mail.html i described how tosearch for a record using the Business service ,this BS can also be used for updating a record.

Documentation related to Update Record operation of the BS is not given in bookshelf ,we need to give the following inputs.

Method : UpdateRecord
Business Service : Inbound E-mail Database Operations
















The Following inputs need to be passed







Input Argument
 Description
BusComp
Name of Business Component
BusObject
Name of Business Object
Id
Id of Record to Query
Field: Status
Field to update

The limitation of the method is that we have to query using Row Id only.

Hope this was helpful .. Cheers..


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...