Monday, March 19, 2012

Happy Birthday, dear Customer!

I hope the title is misleading enough to hide the fact that I am a bit stuck with a requirement.

This actually came in as a comment to an older post on how to use Siebel Query Language and the built in Julian date functions to retrieve a list of all contacts who have their birthday in the current month.

Here is the comment:

"I am looking for a way to search for a specific month/day combination.  Our users want to look for all of our customers with a specific birth date (e.g. March 2nd) and not just all birthdays in the current month.  Is there any way to do this?  Thanks!"


Ok, that should be easy. So I thought...

I tried with julian functions but soon found out that it is quite challenging to find out how many leap years have occurred between the person's birth date and today. Among other studies, I spent a considerable amount of time trying to wrap my brain around this masterpiece of calculations with julian dates.

Simple math to calculate the gregorian date from a julian day number.
Source: Bill Jefferys, University of Texas.
But alas, the Siebel Query Language has no floor() function which would be required to apply the algorithm described in the page mentioned above. So a calculated field or predefined query was out of the question.

So I decided to resort to the last resort: Scripting (eScript has a proper Date() object, hasn't it).

I wrote a nice little business service method (did I mention that I like "nice little" business service methods?) which goes like this (omitting try, catch, etc... for readability):

function IsBirthday (Inputs, Outputs)
{
//instantiate vars for today and birthday
var dTD : Date = new Date();
var dBD : Date = new Date();

//check for empty birth date
if (Inputs.GetProperty("BirthDate") == "")
{
Outputs.SetProperty("isBirthday","N");
}

else
{
//get birth date from Input PS
dBD = new Date(Inputs.GetProperty("BirthDate"));

//if month == month and day == day, we have a jubilee
if (dTD.getMonth() == dBD.getMonth() && dTD.getDate() == dBD.getDate())
{
Outputs.SetProperty("isBirthday","Y");
}
else //maybe another day...
{
Outputs.SetProperty("isBirthday","N");
}
}
}

The method basically takes any date's month and day and compares it with the current day and month. If there is a match, it sets the isBirthday output argument to "Y", otherwise "N".

Then I added a new calculated field to the Contact business component, with the following expression:

IIf([Birth Date] IS NULL,"N",InvokeServiceMethod("AHA Date Service","IsBirthDay","BirthDate='" + [Birth Date] + "'" ,"isBirthday"))

The new calculated field will have a value of "N" if the Birth Date field is empty, otherwise it invokes the business service method I wrote.

The InvokeServiceMethod() function of Siebel Query Language is a nice feature and has had some exposure in various blogs and the documentation. It has four arguments which must be passed as a string (i.e. enclosed in double quotes (")).
  1. The name of the business service
  2. The name of the method
  3. A comma separated list name=value pairs for the input arguments to the method
  4. The name of one output argument, the value of which will be returned by the function
Next, I exposed the new field in the Contact List Applet to see if it works:

Screenshot taken on March 9th (honestly ;-)
So the answer is: Yes, you can calculate if a person has birthday today.

But (and here comes a BIG "but"): When you want to query for all people having birthday today (using the calculated field), then the business service will be invoked once for each record which results in very poor performance.

So this is where I am stuck and ask the Siebel community for help. If you have any idea how to solve the above requirement including optimal performance, please let us know by sharing your knowledge in the comments.

have a nice (birth)day (maybe)

@lex

Thursday, March 15, 2012

Are you a Blogger? Really?

Recently, I read a blog post by Mitch Denny in which he lays out the differences between a 'day programmer' and a 'night programmer'. While I personally need a lot of sleep, I count myself more into the 'night' types, especially if you replace 'programmer' with 'blogger' or 'IT professional'. If you are a 'night blogger' you might take a certain pride in the extra mile you go to deliver high quality content.

Regular followers of this humble blog might remember my recent call for blogs which I should mention in my blogroll. While I found many interesting new blogs, I stumbled across a large number of blogs which are obviously the result of reckless copying and pasting (from Oracle documentation, support sites and other blogs).

Also (and this is one of the main reasons I am writing this post) I am glad to announce that the number of page hits and - so I suppose - the number of people reading my blurb is ever increasing and has reached the highest number measured so far in last February. The total count of page hits has also crossed the magic 7 digit mark (a 1 with 6 zeros - yay).

A big THANK YOU! to all loyal readers.

So you want to blog too? Then read on, as I am in a generous mood ;-) and I am willing to share some tips for successful blogging.

1. Create your own content

Only post content which comes from a process in your own brain. NEVER EVER copy and paste from any other source. Some readers won't realize that you plagiarize, but you will never be able to find your own unique style which sets you apart from others. Apart from that, the fact that you steal from others doesn't make you more likeable.

If you are quoting from other sources then ensure that readers realize that what they read is not a product of your brain.

2. (Try to) avoid typos and grammar errors

Many of us are not native English speakers (me included). If you want to be a member of the writing guild, make sure you do your homework and ensure your content is mostly error free and readable.

If you are blogging in a language other than English, be aware that people might use google translate on your text. So you should try to inspect the auto-translated version your text before publishing. If you do that frequently, you will switch to English sooner or later ;-)

3. Be consistent

Don't let your blog go stale. Find a rhythm which suits your lifestyle and keep it. My personal rhythm is 2 posts a week. I keep it. Even in weeks where I manage to churn out more articles, I only post two, keeping the other articles for a future date where I have less time to write. I even have a post scheduled one month ahead for the case I die (just kiddin' - but a good idea anyhow ;-).


4. Post links as links

If you post a link then please don't paste the URL as plain text, requiring the reader to highlight it and paste it to the browser's address bar. Go the extra mile for your readers and create a nice little hyperlink (it's the weeeeb, buddy).

5. Use graphics

Most RSS readers, social networks or blogroll systems parse your posts to find a header picture. So make sure you include a nice picture in your post (like I did above; yep, carbon-aware we are in our neck of the woods). If you use pictures from other people, ensure that you have the rights to publish them.

have a nice day

@lex

Monday, March 12, 2012

Fuzzy Search in Siebel CRM with Oracle Data Matching

If you spent a quarter or more of your life - like I did - with Siebel CRM implementations, you might have well stumbled upon Siebel Data Quality. For veteran Siebelians, this rings with names like FirstLogic and SSA-NAME3. The latter is now a part of Informatica's Identity Resolution (IIR) server which is OEM'ed as the Oracle Data Quality (ODQ) server.

In any Siebel CRM implementation, where standardized and high quality data for contacts, accounts and addresses is a key success criteria (where isn't?), ODQ is used to validate, standardize, cleanse and match the data imported (or typed in) against the IIR index.

The "Fuzzy Search" (no connection with the product, ok SAP?) uses the Data Matching server (with SSA-NAME3 working behind the scenes) to match the query input with the IIR index and return the possible matches as query result.

Siebel Fuzzy Search works only in conjunction with ODQ and only if you enter exact strings (no wildcards; if you use wildcards, you run a normal query against the Siebel database).

So this is the result when I enter "dave" as first name and "smith" (note the lower case) as last name as query criteria in the Contact List Applet (ODQ is up and running and several persons with similar names are in the database).


As you can see, the query returns all "versions" of 'Dave' and 'Smith'.

have a nice day

@lex

Thursday, March 08, 2012

Hit the Oracle PacktPot!

Time to blow the marketing whistles again...

Packt, the publisher of my two books on Siebel CRM (Oracle Siebel CRM 8 Installation and Management and Oracle Siebel CRM 8 Developer's Handbook) has an interesting offer for March 2012.



Here's the official press release:


As a leading publisher of Oracle books/eBooks, Packt Publishing is inviting their readers to celebrate the upcoming COLLABORATE 12 conference being held in Las Vegas from 22nd-26th April.

The COLLABORATE 12 conference covers a wide array of topics across all Oracle technologies and applications, including everything from OBIEE and Siebel, to Hyperion and E-Business Suite R12. Over 6,000 attendees are expected in Las Vegas this April for an exciting week of sessions and networking, and Packt’s offer will help any Oracle professionals make the most of the conference, whether they’re attending or just taking an interest from afar.

Packt is offering a range of exciting discounts on their 60+ titles across all areas of Oracle technology including Applications, Database and Fusion Middleware:

  • 20% off all Oracle print books
  • 30% off all Oracle eBooks
  • 10% off Oracle PacktLib subscriptions
***


So if you're interested in high quality technical books on Oracle technology, ensure you hit the PacktPot. You might even win a year free access to the Oracle PacktLib library.

have a nice day

@lex

Monday, March 05, 2012

Oracle Fusion Applications: Available Training

The good people at Oracle University are busily developing new training courses for Oracle Fusion Applications. A list of currently (and soon) available courses can be found here.

I believe it's worthwhile to introduce the training offerings here a bit because I am personally involved as an Oracle University instructor and I hope to see you soon in one of these courses.

Fusion Applications: Executive Overview

A one day seminar aimed at technical and business personnel alike who wish to get an overview of the Fusion Applications Suite.

Fusion Applications: Customer Relationship Management Overview

A one day seminar providing an overview of the features and capabilities of the Fusion CRM modules such as Leads, Opportunities, Territories, Forecasting and Analytics.



Fusion Applications: Financial Applications Overview

This two day seminar introduces course participants to general Fusion topics such as BI and Functional Setup Manager as well as Financial modules such as General Ledger, Payables and Expenses.

Fusion Applications: Human Capital Management Overview

Another two day seminar which provides course delegates with insight on Fusion HCM capabilities such as Payroll, Benefits, Compensation and Talent Management.

In the HCM area, Oracle University also currently offers one day seminars on Core HR & Payroll as well as Talent Management, Benefits and Compensation.

Fusion Applications: Installation and Administration

Coming soon to a training center near you is a four day intensive technical training for those keen enough to tame the beast. This course will surely separate the men from the boys ;-)

Fusion Applications: Extend Applications with ADF

I am sure there will be plenty of training on the famous extensibility of Fusion Apps by means of browser based composers. For those who wish a deep dive into JDeveloper and ADF for Fusion Apps, this 5 day course might be interesting.

Update:

If you are an Oracle Partner employee, make sure you can access the Oracle Fusion Applications Learning Center for partners (Fusion Learning Center). This is a great resource for overview and deep-dive technical training on all aspects and modules of Oracle Fusion Apps.

have a nice day

@lex

Thursday, March 01, 2012

BI Publisher 11g Layout Editor: g is for Grid

One of the many recommended practices (don't dare to say 'best practice' anymore) is to place all components of a BI Publisher report into a layout grid. The following hopefully has some tips and tricks for those using the BIP online layout editor which was introduced in 11g.

To create the grid, click (or drag) the Layout Grid component and enter the initial grid size (for example 2x2 like in the screenshot below).


Once the grid is established you can start dragging other components such as tables and charts into the grid cells, thus arranging them easily on the page.

Using CTRL+click you can select two or more cells and you can then use the Join Selected Cells button to create a joined cell. By doing so, you can create a '1 on 2 on 1' grid and so on.

Click to enlarge
Grid cells can be resized with drag and drop. The Properties pane allows manual editing of the grid cell size, background color, frame, padding, etcetera.


The Layout Grid Cell ribbon provides buttons for easy insertion of additional grid cells.


Most of this is well documented in the BIP Report Designer's Guide.

have a nice day

@lex

Monday, February 27, 2012

OBIEE 11g: Vertical Scale Out

Inspired by a post from fellow blogger Senthil, I would like to share my own findings on a simple vertical scale out of an Oracle BI server. Since version 10g, I have not yet had the privilege to lay my hands on the cluster feature of OBIEE. Having a second server (on the same physical host) is adding at least a bit of failover security and load balancing to the system.

So here are the steps I executed to add a second BI server to an existing OBIEE instance.

1. Increase the number of servers

In Enterprise Manager, navigate to Capacity Management/Scalability. Click Lock and Edit Configuration. Now you can set the desired number of components.


After clicking Apply and Activate Changes, it's time for setting up the global cache.

2. Set up global cache

Because we will have two BI servers, they should use a global cache directory for metadata (BI servers will maintain their own cache even in a cluster). Create a shared directory on your server and ensure that it can be reached via UNC path. In the Capacity Management/Performance tab, lock the configuration and enter the UNC path to the cache directory and set the maximum size.


After clicking Apply and Activate Changes we can verify that a second BI server exists, but is not yet started (screenshot shows a started server nonetheless).



3. Restart all components

Use opmn or EM to restart all BI components, so that the cluster controller and the cluster members pick up all settings correctly. We can use the Administration Tool in online mode to verify the cluster configuration.


Please note that this is just a simple vertical scale out on a single host. Even better failover security can be achieved by hosting the BI components on different physical machines.

have a nice day

@lex

Wednesday, February 22, 2012

Updated: OBIEE 11.1.1.6 is here

Well, you really had to surf the web yesterday with your eyes shut to not get the news that Oracle has released the latest version 11.1.1.6 of its business intelligence flagship.

The community is already abuzz with postings about new features and enhancements, so for now, I'll just provide a compilation of recommended reading.

Mark Rittman always manages to provide indepth information from the start.
Make sure you visit Adrian's blog frequently for news on 11.1.1.6.
fiston also shares a nice compilation of new features.
Michael Verzijl posted a comprehensive list too.
Check Antony's blog for information about 11.1.1.6
Bravesoft has some details on BI Publisher enhancements.

Sparklines didn't make it into OBIEE 11.1.1.6 but hopefully the next release.
(Thanks to Mark for the update)
The software is available on Oracle's Software Delivery Cloud or OTN. The documentation can be downloaded from there as well and there is an online version as usual. A good resource to check out the "What's new...." pages.

As most of you are aware, OBIEE 11.1.1.6 is the base for Oracle's Exalytics machine, so you might want to check out some information on this as well.

Update: Antony Heljula has compiled a no-further-questions-thank-you-sir FAQ on Exalytics.

have a nice day

@lex

Monday, February 20, 2012

Inside the Shuttle Applet

A while ago, I was asked to go into a bit more detail on shuttle applets in Siebel CRM. As they belong to the multi value family in Siebel, they can be a bit tricky to understand. So here are my findings:

Two in one:

The shuttle applet is in fact a browser window displaying two distinct list applets. The one on the right - generally known as "MVG Applet" is of type MVG and displays the records associated to the parent record in the current M:M relationship. The applet to the left is of type Association List and is also known as the "Associate Applet" or "Assoc Applet". The Associate Applet displays a list of all records available as potential children for the current parent record.

Siebel veterans might remember version 7.5.2 and earlier where these two applet types never appeared side by side but only one at a time. When you clicked the MVG icon in those early versions, the MVG Applet (associated with the Control by the MVG Applet property) popped up. Only after clicking the New button on the MVG applet, the Associate Applet (associated with the MVG Applet by means of the Associate Applet property) appeared and allowed the selection.

But those versions are - so I dearly hope - long gone and ever since the new standard is the "Shuttle Applet".

Here's a screenshot of the Account Address Mvg Applet and the Com Address Assoc Applet bound together in a shuttle applet window:


Click to enlarge
I have taken the freedom of framing the areas controlled by the two applets with different colors. Let me explain a bit further:

The MVG Applet (red frame) provides the following controls:

  • The MVG list body to the right
  • The Add >, Add All > (if present), < Remove and << Remove All buttons
  • The OK button
  • The Selected label
  • The applet title in the browser window title bar
The Associate Applet (green frame) provides these controls:


  • The list body to the left
  • The Find and Starting with fields with the Go button above the MVG applet
  • The New, Delete and Query button (if present)

The  Add > and other buttons as well as the Selected and Available labels are only visible in "shuttle mode". This is accomplished by setting the Mode property of the Applet Web Template Item to a value of More. The screenshot below shows the Applet Web Template Items of the Account Address Mvg Applet.


Both applets, by the way, are referencing the same business component. As stated above, the shuttle applet is used only in a M:M parent - child relationship.

Siebel bookshelf has more on this topic and there's of course more for future posts.

have a nice day

@lex

Thursday, February 16, 2012

Let 'em Roll

As a long-time valued reader of this humble blog, you know that I take linking serious. This is why you find an extensive blogroll on the right hand side of the page.

At the moment, 40 Oracle BI blogs, 26 Siebel CRM blogs and 35 other Oracle and IT related blogs are listed. That is a total of 101 blogs.

Recently, I noticed that some of the blogs are stale, with the latest post being more than a year old. So the blog owner has definitely mothballed his/her cabinet.

I am in the process of filtering these stale blogs out and looking for fresh new blogs on the block.

Image source: Georgia Blogroll
I am calling out to the Siebel Essentials reader community: If you know of an interesting and honest blog (please no copy/paste rats) related to OBIEE, Siebel CRM, Oracle Fusion Applications or Oracle/IT in general, please find the comment section and let me know, so I can include it in the blogroll.

have a nice day

@lex