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

Monday, June 4, 2012

How to Create a Parent with Multi Child Tabs on Aggregate Views

As the quote goes, "You cannot NOT have a user experience". User experience is one of the most important things in product design. I personally feel that Siebel's User Interface could be a lot better than what it is (but thanks to the new Innovation pack for 2012, with the Open UI I think Siebel is getting there).

Most users do not like drilling down on a record which then takes them to the detail view of a record and then navigating back to the parent record. What they usually ask for is, if they could have the tabs right on the main view of the screen. Something like this -

 










Some thought this was not possible but actually it is and requires just a web template change for the Aggregate views.

Change the Web Template of the view to either one of the following -

1. View Parent Multi Child With Tabs
2. View Parent List With Tabs

Cheers!

Thursday, May 31, 2012

Generate Quote using Narrative Reports in CRM On Demand

Hey Guys,

One thing we all think about is how to design a simple solution to a complicated requirement and so today lets see how to create a Narrative report for a 1:M relation. As you may know Narrative Report can be used only on one record. But, using a combination of reports, we can do the a LOT more!

All we need to do is create 2 reports linked to each other and add them to a Dashboard. let me show you how.

Step 1: Create a Opportunity Parent Report

Using Opportunities Subject Area (Reporting  or Real-Time) Add the fields you would like to use on the Opportunity Information Section of the Quote report.














In Step 2: Create Layout, Add a Narrative View and use the this code
Opportunity Parent Narrative View Code. Make sure you use the @"Number" symbol in the right places, or the values would display against the wrong columns.











You'll notice that the values are not correct in this preview, don't worry. since this report is not being filtered from the Prompt yet, the right values do not appear.

Save the report

Step 2:  Create a Opportunity Product Report










Using Opportunity Product Revenues Subject Area (Reporting  or Real-Time) Add the fields you would like to use on the Product List.
Note that I am filtering the contents of this report based on the results of the Opportunity Parent Report.
In Step 2: Create Layout, Add a Table or Pivot Table (Whichever works for you) and a Narrative View and use the this code Opportunity Parent Product Narrative View Code.




















You'll notice that the values are not correct in this preview, don't worry. since this report is not being filtered from the parent yet, the right values do not appear.

OK. Save the Report.

Step 3: Create a Dashboard

Create a New Dashboard and give it a name. In the Design Section add both the above reports.











Save the Dashboard.

Step 4: Create a Web Link (Last Step)

Create a Web Link on  Opportunity and in the URL text area, add the link to your Dashboard you created in Step 3. You can get the URL by Viewing the Source Code

Ex: https://secure-ausomxxxx.crmondemand.com/OnDemand/user/analytics/saw.dll?Dashboard&PortalPath=%2fshared%2fCompany_XXXXX_Shared_Folder%2f_portal%
2fOpportunityQuote+Report&Options=rfd&Action=Navigate&P0=1&P1=eq&P2=Opportunity%2E%22Opportunity%20ID%22&P3=%%%Id%%%

The %%%Id%%% will dynamically change on clicking the Web-Link from your Opportunity Detail Page and display the Opportunity and Opportunity Product Information on your Quote Report


Make sure you test the URL by Adding a Opportunity ID and running the URL in your browser.

After creating the Web-Link, add it onto your Opportunity Layout.


Finally: Let's see how this report works in reality.

Goto any Opportunity that has at least One Product associated











Now click the "Generate Quote" link that you added. You should now see your Opportunity and Opportunity Product Information in a beautifully formatted Quote Report.




















Now, it's time for you to go and impress your customers!

If you have any questions about the post, feel free to add your comments!

Cheers!
Ryan

Automate Siebel EIM Mapping using SQL

Hey Everybody,

Hope you all are doing Great!

It's been a long time since my last post, apologies for that! Anyway, I have decided to make up for that time and give you some great stuff!

Recently, I had a LOT of people asking for a way to Automatically generate EIM Mappings. I have written a post previously called Generate EIM mapping using SQL Script. However I made some new changes that will give you more information than before.

So here are the updated versions for Oracle and MS SQL

Output Preview











Document Links : Do what the document tells you are you're good!

Automate Siebel EIM Mapping using SQL_MSSQL
Automate Siebel EIM Mapping using SQL_Oracle

Watch out for more interesting Stuff!


Cheers!
Ryan


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