Thursday, August 28, 2014

Siebel Open UI: Restricting Functionality to Groups of Users

Remember the 'see-through' applets example? If not (and if you're too lazy to click the link), it demonstrates how we can display field-level metadata with a simple double-click on a form applet.

Now, whenever I demonstrate this to my students and customers, they really like it. But then always comes the question, what if an unsuspecting end user double-clicks by accident? Of course, we don't want to confuse end users (and the helpdesk staff) with an applet that looks like this:

Click to enlarge.
So how can we restrict Open UI functionality to certain users or groups such as super users or analysts? One possible answer to this questions is found in the Manifest Expressions view.

Let's assume - for the sake of simplicity - that you have assigned positions like 'Siebel Administrator' or 'Open UI Administrator' to some of your fellow employees.

With the following custom manifest expression you can easily provide conditional logic to load certain JavaScript files (or web templates) only for people who have an 'Admin' position:

GetProfileAttrAsList('Me.Position') LIKE "*Admin*"

The above expression evaluates to TRUE when the string returned by the GetProfileAttrAsList function (a quite useful method I must say) contains the sub-string 'Admin'. It would evaluate to FALSE for everyone who is not an administrator.

have a nice day

@lex

Monday, August 25, 2014

Back to School: Understanding the Siebel Open UI Architecture

Welcome to part 1 of our 'back to school' series on Siebel Open UI. Today we are taking a helicopter ride to get the 'big picture' of the components that contribute to the Siebel Open UI architecture.

As indicated in the kick-off post for this series, we keep the tone nice and easy, just in case you are new to Open UI and just started your career as an Open UI developer. But nonetheless, we will dispense some hooks and bait for the seasoned veteran ;-)

Let's start with a listing of all the ingredients that make up a good Siebel Open UI discussion:

  • Siebel Repository
  • Manifest Data
  • Web Templates
  • Siebel Web Engine
  • Object Manager
  • Web Server
  • JavaScript
  • Cascading Style Sheets
  • Browser

As you might discern, the list is somehow sorted in reverse order. As this is an architectural discussion, we'll start with the foundation rather than the roof. So here we go:

1. The Siebel Repository

If you want to define a Siebel view, you need applets. Where are they defined? Of course in the Siebel repository (and subsequently, the SRF file). With Open UI it is important not to forget your good manners in terms of Siebel Tools. If you want a button on an applet, you do it the old-fashioned way.

Remember that the user interface objects that you manipulate in Siebel Tools are a 'logical' user interface definition. In Siebel, we never define the look and feel of an applet in Tools, merely we declare a logical layout.

2. Manifest Data

With Open UI, Oracle introduced a new concept of storing the association between user interface objects such as applets and external files (JavaScript, CSS or web templates). For the first two versions, this association was made in XML files but as of IP 2013 and forward, manifest data is stored in the Siebel repository. Funny enough, you can only access the data from a set of new views in the Siebel web client.

With the manifest administration also comes a powerful way of creating conditional expressions to determine when a certain set of files should be loaded for a given UI object. For more information about Open UI manifests click here.

3. Web Templates

As discussed in earlier posts on this blog, Siebel Open UI relies on Siebel Web Template (SWT) files as much as any other type of UI (HI or SI). However, you will find a new folder (OUIWEBTEMPL) for SWT files that are specific to Open UI. Think of the new files as refurbished versions of the old-school ones. Most elements are now no longer laid out in <table> elements but in <div> elements.

Example of a modern Siebel Open UI SWT file (flowchart applet)
4. Siebel Web Engine

The Siebel Web Engine (SWE) is the part of the Object Manager that is responsible for executing client commands and rendering the UI. That hasn't changed with Open UI. However the SWE (in Open UI mode), loads different web templates and can read the manifest to determine what files it should include in the HTML it generates.

5. Object Manager

Forever the vital session-bearing server component, the object manager for Open UI applications is just one parameter away from traditional object managers. Of course, it's the notorious EnableOpenUI parameter that we must set to TRUE to effectively turn the key.

6. Web Server

No Siebel architecture discussion is complete without the Siebel web server (and extension - SWSE). As with any browser-based front end, we need to keep all files that the browser possibly wants to download in the web server extension's PUBLIC folder. For Open UI, there are of course a lot of new folders and files...

7. JavaScript

Open UI is written completely in JavaScript. Gone are the days of the merry multi-tech commune that the HI client was. When we state that Open UI is written completely in JavaScript, we actually mean A LOT OF JavaScript. The .js files from Oracle alone amount to 4 MB. But of course, not all of them are downloaded at once.

Not only are there a lot of JavaScript files, they also form a browser-side multi-layer architecture replete with a well-documented *cough* API that allows customers to happily abandon all fear of non-manageability and create their own presentation models and physical renderers. How to do that is of course a whole different story and the Siebel community is working hard to provide useful examples.

8. Cascading Style Sheets

Open UI is the first Siebel variant that is completely 'theme-able'. Oracle provides some base themes and customers or partners can build and register their own collections of style rules.

Theme by OpenUIThemes.com
9. Browser

Last, but not least, it's the 'user-agent'. The unbeatable argument for Siebel Open UI is that we can access all Siebel application data from any browser that is capable of executing JavaScript, interpreting modern CSS and HTML. Be it on a desktop, laptop, tablet or whatever size your smart device comes in; all Siebel data is at your fingertips.

Summary

In this first part of our mini-series, we deliberately took the helicopter perspective and discussed the most important aspects of the Siebel Open UI architecture. What else do you want to see in this series? Please find the comments.

have a nice day

@lex

Thursday, August 21, 2014

Siebel Open UI - Back to School Series

Honestly, it has been a while since this time of the year meant 'back to school' for me. However, in my life - personally and professionally - school has never ended (and hopefully never will, just keep on learning).

This is essentially true when you make a living with enterprise IT systems such as Siebel CRM. As we all know, Siebel CRM reached a new evolutionary step with Siebel Open UI. On this blog, we have been spreading the news about Open UI from the beginning and as we are getting close to the 100th post on this topic, it seems worthwhile to pause, take a step back and look at the big picture.

A big picture...
In the following weeks we will look at several aspects of Siebel Open UI from a 'back to school' perspective. The main topics of the series are as follows:
...and here is where you can join in. I am inviting all dear readers of Siebel Essentials to submit your requests for 'big picture' articles. Please find the comments and put your topics in. Please refrain from "I am trying to implement a whacky 3rd party plugin and fifteen hidden buttons and this is the error message I got" type of requests. There are plenty of posts on this and other blogs that deal with the nifty details of Open UI.

The series is intended to give you high-level but precise big-picture information, so that everyone benefits, whether they are already Open UI 'aces' or newbies.

have a nice day

@lex

Monday, August 18, 2014

From the Archives: Siebel Query Language And Julian Functions

Time for another 'blast from the past'. From August 2008, the below article covers the all-time favorite query language that is SQL, but not the SQL you think of now.

***

Romeo and Julia(n)?

About the Siebel Query Language

First of all, it abbreviates to SQL which is kind of funny, of course it has nothing to do with SQL.
Just like you can get more out of a spreadsheet application like Excel when you are familiar with its internal functions and syntax, you can get much more out of Siebel CRM if you are familiar with the Siebel Query Language.

Where is it used?

The answer to this question is very interesting, it is used almost everywhere when you define expressions. It is available in both Siebel Tools and the Siebel Web Client and since version 8.0 both the developement environment and the Web Client (that one since 7.0) sport an expression designer.


Expression Designer in the Siebel Web Client
click to enlarge




Expression Designer in Siebel Tools (since 8.0)

Here is a probably complete list of areas where you can use the Siebel Query Language:

Siebel Web Client
  • Predefined Queries
  • Conditional Expressions for Personalization Rules
  • Conditional Expressions for Runtime Events
  • Data Validation Manager rules
  • Data Map Editor
  • [Update] iHelp branching expressions

Siebel Tools
  • Calculated fields
  • Pre-default and post-default values for fields
  • Field Validation property
  • User properties
  • Expressions in Siebel Workflow and UI Tasks

Where is the reference?

The Siebel Query Language is documented in the Personalization Administration Guide of the Siebel Bookshelf.

An example:

The following is an example for a predefined query. The task is to filter the list of contacts so that it displays only persons that have their birthday in the current month.

Working with date fields can be tricky and you just can't type something like *June* in a date field. This is where the date functions, also known as julian functions come into play.

Our first choice would be the JulianMonth() function. This function takes a date field as a parameter and returns the julian number of the current month which is for example 80660 for August 2008. So the nerds among you will have quickly calculated this back and month #1 is of course January of 4713 BC.

If we want to query for persons who have their birthday in the current month, then the JulianMonth() function alone is not helpful because the return value for August 1968 is different from August 2008, so we need a way to extract the month number (1-12) from the date. This can be accomplished by multiplying the julian year number (6721 for 2008) by 12 and subtracting it from the julian month number.

So the equation is: # of current month = JulianMonth(Today()) - JulianYear(Today())*12

This equation will be the base for our query in Siebel CRM. So basically if we want to match the Birth Date field of a Contact with the # of current month, the query goes as follows:

JulianMonth([Birth Date])-JulianYear([Birth Date])*12 = JulianMonth(Today()) - JulianYear(Today())*12

Creating the predefined query:

Usually you can enter even complex queries directly in any control or list column of the applet (in query mode) but there are restrictions in field length and data type. So here is a way that always works.

Navigate to the Contacts List and save the current query (even an empty query would do).


click to enlarge

Navigate to Site Map -> Administration - Application -> Predefined Queries and retrieve your previously saved query.

Replace anything that might be between the two double quotes after 'Contact'.Search = with
JulianMonth([Birth Date])-JulianYear([Birth Date])*12 = JulianMonth(Today()) - JulianYear(Today())*12

So finally it looks like this:


click to enlarge

In the Household Contact view you can enter some birth dates and run your test in the contact List. I have added the Birth Date field to the Contact List Applet to verify.



List of contacts with a birth date in August
click to enlarge


have a nice day

@lex

Thursday, August 14, 2014

Siebel Open UI: As it Happened

If you follow the evolution of Siebel CRM (and this blog), you sure haven't missed Open UI. The latest patch set for IP 2013 bears the number 10 which makes it only 2 months to go for a full year since the last Innovation Pack. Sure you know that IP 2014 is in the making and there will be a lot to tell the round table as soon as it is generally available.



In the meantime, we witness that IP 2013 and Open UI get some good coverage inside and outside Oracle. Today I would like to point out some interesting blogs, articles and news on Open UI - just as it happened. Kudos to all people who are willing to sacrifice some of their private time to share these valuable tidbits of information to make Open UI a success.

Blogs of Note

I am glad that the blogosphere is steadily picking up Open UI. You should bookmark Oracle's Jeroen Burgers blog "Oracle Implementation Advisor". He recently published great articles such as on smooth view transitions and worked with fellow blogger Neel from Siebel Unleashed on enabling the scroll wheel for list applets.

Our good friend Richard Napier from On Demand Education has - in his very own humorous ways - recently documented the Mobile Disco Client with blog posts and videos.

Jason from Impossible Siebel was one of the first to blog about Siebel Open UI and his articles never leave out the prickly technical details - and challenges.

But it's not all fun and games. Rightfully so, problems with Open UI must be pointed out as well, just as Oli recently did on his Siebel Tech blog.

Oracle partner companies like boxfusion consulting or ec4u are specializing and blogging on Open UI as well.

Of course there are even more people contributing to the growing field of Open UI knowledge such as Prasanth from the dedicated Siebel Open UI blog.

If you feel missed out and want your blog listed here or in the Siebel Essentials blogroll, please find the comments.

Update: Please welcome Shiv and his Siebel & Open UI blog to the community.

Oracle Community

With more and more projects and consultants ramping up on Open UI, the Oracle Community (aka forums) is quickly growing into an interesting resource for all things Open UI.

My Oracle Support

For those among us who have access to My Oracle Support, we can feast on the latest alerts, newsletters, service requests and the Open UI Info Center.

have a nice day

@lex

Monday, August 11, 2014

Siebel CRM Patchset 10 for Innovation Pack 2013 is Available

Last week, Oracle made the latest patch set 8.1.1.11.10 / 8.2.2.4.10 available for download on My Oracle Support.



As with other patch sets, this one contains a lot of bugfixes for HI, SI and Open UI applications and is of course cumulative.

As usual, the patch set comes with a "Read Me" link which leads you to the accompanying detail information which also contains descriptions of the resolved issues.

(All links require a valid account for My Oracle Support)

have a nice day

@lex

Thursday, August 7, 2014

Let's Give Incentive Compensation a HUG

This humble writer is currently in the student seat and enriching his training portfolio with Oracle Sales Cloud: Incentive Compensation (formerly known as Fusion Incentive Compensation).

As usual, I like to start a learning path with a H.U.G. (Hopefully Useful Graphic). Here it is without further ado.


In the diagram we can discern many entities which compose the data model for Oracle Sales Cloud Incentive Compensation. Let's quickly describe each of them:

Compensation Plan: This is the overall container. Most importantly, we assign participants (commission/bonus recipients) directly or indirectly - using roles - to the compensation plan.

Plan Component: A compensation plan contains at least one plan component. This reusable entity defines the overall logic of the calculation. The logic is defined within the following reusable entities.

  • Performance Measure: This reusable entity allows us to define the basis for the bonus or commission payment. For example, this is where we define the attainment goals for each period and the credit categories which are used to classify transaction for a specific payment.
  • Rate Table: The other main building block of a plan component are rate tables. Imagine rate tables as lookup tables. For example, when a salesperson has achieved 70% of the sales quota in the period, the rate table defines how many percent (or total pay) the sales rep will receive in commission or bonus.

The following screenshot shows an example performance measure and its goal definitions for each period.

Click to enlarge.
Expression: Calculations for Incentive Compensation can become quite complex. The Expression entity allows compensation plan admins to define a formula once and reuse it across the data model.

Classification Rule: When a revenue transaction is processed, it needs to be "classified" in order to determine whether the transaction will incur additional payments for the salesperson. This logic is stored in the classification rules.

User Interface and Oracle BI Integration

The compensation plan administration is implemented in a nicely structured work area in Oracle Sales Cloud (see above screenshot).

End users - individual salespersons and their managers - can view information about their and their team's compensation using dashboards which are driven by Oracle Business Intelligence.


The above screenshot shows the 'My Team's Compensation' dashboard which nicely demonstrates the data visualization prowess of Oracle BI within Fusion Applications *err* Sales Cloud.

Extensibility

Oracle Sales Cloud Incentive Compensation cannot deny its ERP heritage. Stemming from the Oracle eBusiness Suite offering, it has found its place in the Sales Cloud (former Fusion CRM) product line. Regarding extensibility, Flexfields (the extensibility vehicle for all non-CRM product lines) are used rather than Application Composer.

More Information 

For more information on Oracle Sales Cloud Incentive Compensation, here are some resources:


have a nice day

@lex

Monday, August 4, 2014

Oracle BI 11g: Verifying Logical Table Sources in Analyses

Inspired by a nice instance of the Oracle BI 11g Build Repositories class I delivered last week as an LVC, I decided to share a little trick with you.

What if we could verify the name of the logical table source in Answers (aka "Analysis Editor")? For example, when you create multiple table source for aggregates or partitioned data, it is important to verify your implementation.

I found the following procedure to be quite helpful with that.

Create a new logical column that displays the name of the logical table source.

Within your logical dimension or fact, create a new logical column and map it (physically) in each table source. As the expression use a string identifying the logical table source. Just as in the screenshot below.

Click to enlarge.
In the above example I specified 'LTS2 F2 Revenue Aggregate' (the exact name of the LTS) as the constant value for the new column. This specific LTS is mapped to an aggregate fact table at the quarter level. In the other logical table sources, I do the same but of course using the name of the respective LTS.

Next, I exposed the new column in a separate presentation table, just to make it easier to control the visibility of these 'developer tools'.

After deploying the RPD, we can now expose the 'LTS column' in our analyses.

Click to enlarge.
The above analysis shows the revenue per quarter (within the boundaries of the aggregate table) and the LTS column proves that the LTS for the aggregate table is used.

Next is the same analysis after a drill down to the month level (not available from the aggregate table).


As we can see, the LTS column displays the name of the LTS that maps to the detail table.

Summary

Knowing which LTS(s) are used while testing OBIEE is adding more Intelligence to your BI.

have a nice day

@lex