Sunday, December 30, 2012

Happy New Year!!

New Year's Day is every man's birthday. 

Cheers to New Year with another chance to get it right.  With Sun settling in and 2k12 memories getting recycled i wish you and your loved ones a very happy and prosperous new year. May you get less bugs and more incentives. I am going for a new assignment and hope it will be on Open UI. 


Resolution or no resolution again wishing you a very bombastic new year.

Happy 2k13!!

Sunday, December 9, 2012

Standard Interactivity or High Interactivity

With winters approaching hibernation starts and efficiency dips (even though its below par through out the year). But still issues never stop. Recently while working on standard interactivity portal we have written script on BC which was used in both HI as well as SI application. However typical business requirement forced us that this piece should be executed only on SI mode of the application and not on the HI mode.

The real trick here is to identify in which mode of application you are working on. With some support from Google we were able to find its-another-mystery-service-type business service which is used extensively but less talked about. "Web Engine State Properties" is the magic service here. Below piece of code can help you find the mode.

var sInputs = TheApplication().NewPropertySet();
var sOutputs = TheApplication().NewPropertySet();
TheApplication().GetService("Web Engine State Properties").InvokeMethod("IsHighInteractive",sInputs,sOutputs);
var sTest = sOutputs.GetProperty("IsHighInteractive");

The key here is the name of the method and name of output argument is same. There are more methods of this BS. All will return either 1 or 0. This BS is primarily used in SWT tags to determine modes, main example being CCStylesChoice.swt where it directs which CSS file to be used for which mode. Any other method to identify application mode is more than welcome in comments section.

Happy Crunching!!





Tuesday, November 13, 2012

Happy Diwali!!

Troubles as light as Air
Love as deep as Ocean
Friends as solid as Diamonds
And Success as bright as Gold
These are the wishes for you
And your family on this festive season...






Tuesday, October 23, 2012

Symbolic String Locator


As an addendum to my previous post here i publish a mini symbolic string locator. It can help you to identify at what all places any particular symbolic string is being used. As a part of beta release it searches only at the Applet(List + Control) level. It is available in Downloads section also.

This can be of real help in scenario when you are asked to modify any existing symbolic string value and you have to look at objects to compile. The advantage of this tool is you don't have to open any sort of siebel client on your machine while running it. Only you have to remember the DSN name, the one given in the CFG for local client. It takes two parameter as input.

Local DSN = The DSN name of your siebel local client and Username/Password.

Symbolic String = The symbolic string to search.

The Objects sheet gives you flexibility to search the limited objects. The output for each object type is captured in respective object sheet.  If it errors out after giving correct DSN name make sure you have selected "Microsoft ActiveX Data Objects Library"  in your excel references. Once again valuable inputs/suggestions/comments are always welcome.


Happy Crunching!!

Monday, October 15, 2012

Symbolic String Compilation

Issues are multifaceted. They can teach and piss you off at the same time.

Recently we faced a simple-cum-silly issue while changing the symbolic string. I have modified the string value of existing string but to my surprise the new value was not getting reflected in the applet. It is only after the compilation of Applet,where this symbolic string is being used, changes were reflected. This is because objects may store the string name rather reference.

Ideally the compilation of symbolic string should have sufficed but unfortunately we have to compile all the underline objects where it is being used in order to confirm the change.


This gives rise to bigger question how to know at what all places any particular Symbolic String is being used. Repository search can aid but again it can force you to wait for ages. I am in process of creating a tool which will take any Symbolic String as Input and will list all the objects where it is being used. Hope to put for global audience for comments soon.

Happy Crunching!!

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




Thursday, June 7, 2012

User Keys & Blind Insert

If ignorance is bliss, why aren't there more happy developers?


Recently I found something strange in our inbound integration. For Upsert scenario we received XML data in all Upper Case format. Despite having CaseInsensitive setting set to TRUE for EAI Object Manager the integration was failing. It was because of the fact that user keys are always case sensitive irrespective of setting at OM level.

As a workaround for this we can either use "Force Case" field property at BC level or we can have numeric user keys. 

Another interesting user property we came across insert unique-user-key scenario is "SuppressQueryOnInsert" at IC level to do blind insert. This is real performance boost in scenarios when you are sure incoming user keys will always be unique. Without this user property Siebel first generates SELECT statement which queries for the record with given user key across the table. This user property helps in suppressing this SELECT statement and thus improves the performance by some mile.

Happy Integration!!

Tuesday, May 22, 2012

Thread Bar Updation


Sometimes Simplicity just does not precede complexity, but follows it. Recently while configuring Thread Bar for some views, we faced a trivial issue. Value of the Thread Field defined was not coming in the Thread bar.  We have specified the correct Thread Applet, Thread Field and Thread Title properties for the related views but only Thread Title was being displayed when we drilldown from List view to Form View. Google resulted this issue being faced by other users without fix.
Things got luckier for me when i found a similar article on support web which stated that this is the intended behavior of siebel when the underlying Business Objects of traversing views are same. However as workaround of this issue there are three options:

  1. Have different BO's for List View and Destination View.
  2. Remove thread bar and make use of IE back option.
  3. If it is business critical to have navigation path in thread bar then one can define Source Field and Destination Field in the drilldown from list View to form view. This setting of source field in the drilldown causes Thread Field to be displayed in the Thread Bar. However it comes with its own inherent issue in a way that user can't traverse through record set in Form view. 
Hope this post helps you while configuring thread bar and keeping business object context in mind. Yup simplicity follows complexity.

Happy Configuration!!

Monday, April 9, 2012

Validation Utility Service


Many  times we have wished that workflows could have ActiveViewName function so that we can perform actions based on the current view. For long i have been resolving this by using profile attributes in workflow but GetProfileAttr('ActiveViewName') is not bullet proof, as when we do Reload/Refresh profile attribute it clears out this profile attribute.



In our quest to overcome profile attribute usage, we discovered another siebel gem, rarely talked,business service "Validation Utility Service". This business service contains a method "GetActiveView" which returns active view name. One can directly use this business service in workflow and can get name of active view.

While writing this piece i also came across another siebel blog which talks about fetching active view details using different business service. Hope either of business service helps your cause.

Happy Crunching!!



Monday, April 2, 2012

Reload Profile Attributes


There are times one has to wear multiple hats as part of job, definitely a mandate if you are married. Sometimes a Manager has to work as team lead or vice versa.

Typically such scenarios are easily handled in siebel using "Change Position" concept. However trouble starts when you have used persistent profile attributes in the search scenarios which fails when user opts for changing position specially if search is based on profile attributes like Job Title, Position Type.

Recently we faced similar scenarios as one of the user had two roles. We used "Division Name" profile attribute to display list of employees while picking SR owner. Trouble started when user did change position and for the other position intended list of employee was not coming. Division Name profile attribute is available in personalization profile BC using join and loaded in session when user logged in. The issue is profile attributes doesn't refresh when you do change position. Even a call to "LoadUserAttributes" method after "Change Position" failed to refresh this attribute.

However one cool thing this method does is it returns correct output for DivisionName function. It doesn't refresh other profile attributes which are pulled from joins but it reloads calculated profile attributes based on functions like PositionName, DivisionName and OrganizationName. This was good for us as we based the profile attribute on DivisionName() function and bingo, the resultant set of employees was perfect.  Hope it helps if you are struggling with similar scenario or planning to use profile attributes in search conditions.

Awaiting some alternate tips in order to refresh profile attributes.

Happy Reloading!!

Thursday, March 22, 2012

HTML content in BIP Report

This is war-cry for all BIP gladiators.

Recently while working with BIP reports we hit a road block in displaying HTML content. We need to display a control in BIP report with proper HTML formatting but however when report is rendered it displays HTML tag as is without formatting. The data input is RTCEmbedded control in siebel which saves data encapsulated in HTML tags but instead of transformation those tags are displayed in BIP report as normal text. We tried with integration approach as well as SQL query based reporting architecture but of no luck.

From Tim's blog we got an idea of XSLFO format but it is of not much help as while retrieving the content from database BIP engine process data as & l t; instead of proper HTML < or > tags i.e. they are not escaped. I have already tried below options to fail.

  •  Escaping <,> to its ascii equivalent in sql
  •  Using clob/Nclob column to store data
As a stop gap solution we are currently chopping HTML tags from the data using XSL and displaying content in a plain format. Any jail break on this trivial issue is most welcome. 

Happy Reporting!!



Wednesday, March 7, 2012

RTCEmbedded Control

"When the solution is simple, God is answering"- Albert Einstein

Recently we were asked to implement a embedded text editor in a control which could facilitate user for text formatting including features such as bold, italic,font, color etc.  The first reaction was can-we-do-it types with nothing popping in mind (Yeah, thought of Email Templates view never occurred ).But with some help of support web solution turned out to be much much simpler.

We can achieve this by using control of type "RTCEmbedded". This control type provides an embedded text editor which supports below html tag:
  • Bold < STRONG>
  • italic <EM>
  • Underline <U>
  • Ordered list <OL>
  • List items <LI>
  • <P>
  • <FONT>
  • <BLOCKQUOTE >


However there are certain caveats while using this type:
1 - Control doesn't turn out grey in case of read only conditions.
2 - Throws an error when reaching field length and clears out everything forcing user to renter everything.
3 - It is not currently possible to paste text and graphics (such as graph or image) within such controls.
4 - We can't use this column directly in SQL based reporting purpose without appropriate parsing.

Happy Crunching!!


Sunday, February 26, 2012

Error Messages in SI Mode


Time again to stimulate your grey cells. Architectural differences between SI and HI clients are well documented. Recently working with SI application we observed a strange thing. SI client handles processing of error/Validation messages from BC layer and UI layer in different ways.

While invoking RaiseErrorText from BC error message was displayed on the top view bar but while invoking the same from applet was taking to different error web page resulting in context loss. User has to click Back button to go to previous page.

Same holds true for DVM messages. While invoking from BC layer using run time events the error message is displayed on the same view but while invoking from UI layer error message is displayed in different error web page. I am not able to break this thing why it behaves differently on different layers. Any insight/thought on this would be of some help.

Happy Debugging!!



Sunday, February 19, 2012

Disabling button in SI Mode


Working with SI applications can be as good as playing with fire. Recently we faced an issue when some naughty users clicked button multiple times resulting in underline action getting executed multiple times. As in case of SI applications, if the method is taking time to execute then button is not disabled it remains active giving end user an impression of nothing-is-happening. So user may end up clicking the button multiple times.

The only way to prevent multiple clicks is to disable button as soon as it is clicked. Fortunately there is an article on support which provides solution to achieve the desired but a scripted one. Following piece of code can be used to disable button after click.

function WebApplet_ShowControl (ControlName, Property, Mode, &HTML)
{
    if(ControlName == "SubmitButton")
    {
      if(Property == "FormattedHtml")
      {
          var index = HTML.indexOf("onclick=");
          var start = HTML.substring(0,index+9);
          var end = HTML.substring(index+9);
          var func = 'setTimeout("a()",10);; ';
          var funcA = "<script>function a(){";
          funcA += "var c = document.getElementById('SUBMIT');";
          funcA += "c.outerHTML='';";
          funcA += "} <script>";
          HTML=start + func + end + funcA;
      }
    }
}
However, we wanted to implement the solution by configuration and yes, we were able to achieve by using following piece of code in "HTML Attributes" property of button.

onclick="function fn(){disabled=true;}setTimeout(fn, 100);"

The idea is to diable button once it is clicked and making a recursive call after 100 milliseconds by using setTimeout function so that it gives user an impression that button is disabled. There could be alternates to achieve this. Again piece of advice/comment is always welcome. 

Happy Crunching!!

Tuesday, February 7, 2012

Cosmetic UI Changes


Cosmetics may be a weapon of women but it is always better to look over rather than over looked. Siebel OOB comes with a soothing look and feel but still it may not fit into coloring schemes. In this post we will discuss about some basic UI modifications.

Statutory Warning: Please take backup of existing files before you play around.

1 - Changing Oracle logo
This is the foremost change which should be done. lookout for the "CCFrameBanner.swt" template file and modify below code to suit your requirement.

<td align="right"><a href="http://www.oracle.com" target="_blank" ><swe:image name="POWERED_BY" category="HTML Control Icons"/></a></td>

Change this code to below code

<td align="right"><a href="http://YOURURL.com" TARGET="_blank"><img src = "images/YOURIMAGE.jpg" height ="30"></a></td>


2 - Changing login screen
In order to determine the positioning of the items on the login screen or change the graphics that appear on the login screen one has to modify web template file "SWELogin.swt". This web template file determines the layout of the web page items on the login screen.

3 - Changing Menubar color 
The menubar color can be changed by changing the jmenubar.js file.Background color of menubar is hard coded in the "jmenubar.js" file. Below attributes can be changed for desired appearance.
var MENUBAR_BGCOLOR = "#FF6633";
var MENUBAR_TEXTCOLOR = "#FFFFFF";
var MENUBAR_HIGHLIGHT_COLOR = "#FFFFFF";
var MENUBAR_SHADOW_COLOR = "yellow";

4 - Changing Screen Bar 
The screen tab are now implemented as java controls in Siebel 7.8. Their appearance is determined by the settings in the file jctrls.css. Below section controls the appearance of screen bar.
.clsScreenBar
{
   NC-TAB-BACKGROUND-COLOR: #333399;
   NC-TAB-BACKGROUND-COLOR-SELECTED: #F0F0F0;
   NC-TAB-BACKGROUND-COLOR-MOUSE: #F0F0F0;
   NC-TAB-FONT-COLOR: #FFFFFF;
   NC-TAB-FONT-COLOR-SELECTED: #333399;
   NC-TAB-FONT-FAMILY: Arial;
   NC-TAB-FONT-SIZE: 15;
   NC-LINK-FONT-FAMILY: Arial Black;
   NC-LINK-FONT-SIZE: 18;
   NC-LINK-FONT-COLOR: #333399;
   NC-LINK-FONT-COLOR-SELECTED: #333399;
}

5 - Changing view bar
Their appearance is determined by the settings in the file jctrls.css. Below section controls the appearance of view bar. 
.clsSubDetailView
{
   NC-TAB-BACKGROUND-COLOR: #466FB4;
   NC-TAB-BACKGROUND-COLOR-SELECTED: #F0F0F0;
   NC-TAB-BACKGROUND-COLOR-MOUSE: #000000;
   NC-TAB-FONT-COLOR: #FFFFFF;
   NC-TAB-FONT-COLOR-SELECTED: #333399;
   NC-TAB-FONT-FAMILY: Tahoma;
}

6 - Changing Background Color of selected row 
Again this could be easily achieved by changing settings in jctrls.css file. Below section controls it.
.clsJLCMain
{
JBACKGROUND-COLOR-ROW-ACTIVE: #FFFFFF;
}


One can definitely change applet and view layouts by changing underlying web templates.There is no second chance to create first impression so better have a good looking UI. 

Happy Beautification!!

Thursday, February 2, 2012

Distinct Property


Distinct clause is one of the powerful clause in SQL which helps to remove duplicates from the result set. In real time scenarios we are bound to have requirements which involves updates or removal of distinct records.



Siebel provides a,how-i-missed-type, "Distinct" property on business components that helps us to achieve just this. Business components in siebel 7.8 and higher have this property. Setting this property to TRUE allows the equivalent of a select distinct query as it suppresses system fields.This property enforces a "DISTINCT" clause on all fields present in the BC, which may lead to errors during execution. It is better to clone business component and include only fields which are required in distinct clause.

Document ID 867149.1 in support web explains this siebel virtue in detail.

Happy Crunching!!


Monday, January 23, 2012

Multilingual Confirm/Alert in Browser Script


Working with multilingual can be as challenging as playing tennis with rafael nadal on clay court. Siebel provides outstanding set up to enable multilingual application.

There are different object managers for different langauges. There are symbolic strings for multiple language references, there are message categories to enhance re-usability. Lookup's for value comparison in different languages and not to forget multilingual email templates along with BIP reports giving end user 100 percent localized effect.

There are still some non-localizable elements including log files and help applets. However while working on the browser side i was not able to translate the message in the desired language using "LookupMessage" method as it is only supported on the server side. In order to achieve localization we used below java methods to identify the language in url display message accordingly.

Lets say you want to display confirm box in french application probably this piece may help you to achieve desired results.


var sURL = document.location.href;
var sCount = sURL.search(/fra/i); // this will search for object manager language
if(sCount > 0)
var sMsg = "Décochez va supprimer les données, Voulez-vous procéder";
else
var sMsg = "Uncheck will remove the data, Do you want to proceed?";
if(confirm(sMsg))
return ("ContinueOperation");
else
return ("CancelOperation");


There could be alternates to achieve this. As i write, another issue related to multilingual is dangling in Stop step in workflow. Question is whether we can use LookupMessage function in workflows or not? Any thoughts on this are much appreciated.

Happy Crunching!!





Tuesday, January 17, 2012

Vision 2012



Welcome to 2012, year being panned for much touted release of Windows 8, Olympics, US presedential elections, iphone 5 and supposedly end of world but i am sure we are more interested in how Oracle releases siebel gems.


If anything to go by the last siebel release letter from oracle, 2012 seems an exciting year for siebel community. There are enhanced funtionality in the areas of


- Public sector 
  Enhanced eService application and appeal management system being the highlights.

Loyalty for Travel

Rapid deployment and easier management of complex promotions. Enhanced user experience, control and productivity. Enhanced loyalty engine performance being the key focus areas.

- Automotive
Enhanced warranty management and claims processing solutions.

- Life Sciences
Personalized Content Delivery features to enhance the interactive digital experience.

- Financial Services
Integration capabilities with Oracle FLEXCUBE for Banking customers.

If  that comet doesn't strike then stay tuned for more bombarding features/patches/versions from oracle.

Happy 2012!!!