Thursday, October 10, 2013

Volume Discount in Siebel

Volume Discount
Volume Discount is probably the easier discount to understand and to implement.The idea is to give a discount if you buy more of the same product. Example:
  • If you buy 4 products ABC, you get 3%
  • If you buy 5 products ABC, you get 3.5%
  • If you buy more than 6 products ABC, you get 4%
You add product ABC to the Quote/Order, you update the Qty field to a value of 4 or greater and you will see your volume discount applied.
Now, there is something the bookshelf very vaguely mentions (see “Volume Discounts Across Line Items): the Volume Discount only works per Line Item in the Quote/Order. Not per product!!!
Example:
You add product ABC to your quote and specify a qty of 2.
Then you add product ABC again to your quote (maybe with a different size/color) and specify a qty of 3.
Your quote now contains 5 products ABC.
Common sense will tell you that you should get 3% discount since you’re buying 5 of the same product (Pricing Engine works with Product Row Id). But the Pricing Engine will evaluate the Volume Discount rule line item after line item. Therefore, you won’t get the discount at all.
If you want the pricing engine to consider all shirts in the quote before calculating the volume discount, you have to implement it in the Pricing workflows. This will be discussed in section: Aggregate Volume Discount.
Note: I will not discuss the differences between Simple and Tier volume discount as this is a no-brainer and the bookshelf is crystal-clear on this.
Finally, the Volume Discount must be linked to each individual product that qualifies for this discount. This is done in the Price List Line Item.
Alternatively, you can also link the Volume Discount to a Discount Matrix, although be careful with this option, make sure the Start/End Dates of the Discount Matrix and the Volume Discount are consistent. Also the Price Waterfall will not be able to show calculations of the Volume Discount, only its result (see my upcoming chapter on this wonderful Waterfall)

How will I know that a volume discount is available for a product?

It is important that your customers know that you are offering such a discount. Knowing that such a discount exist could lead to higher sales volumes.
Unfornately, the only way to know that such a discount exists is to first add a product to the quote and then look in the Discount Negociation Form Applet (Quote Screen > Pricing > Discount Negociation). Similar view exists in Orders and you can always expose these fields to other applets)
In this applet, you will see 3 fields:
  • Current Volume Discount
  • Next Volume Discount
  • Upsell
The first 2 fields are self-explanatory. The Upsell field shows a message that you can customize with Siebel UMS. The message could be: Buy 2 more and get 3% Discount.
The “2” and the “3%” are dynamically generated, depending on the current qty of the product in the Quote/Order.
If you increase your quantity by 2 to get these 3% you may get a new message:
Buy 1 more and get 3.5% Discount.
Etc… until you’ve reached the highest possible Volume Discount segment as per your volume discount rule. At that point the Upsell field would be empty.
I’d like to add one recommendation here: I believe it is important that the existence of a Volume Discount must also be shown in the Product Catalog. Again, the idea is to convince the customer to buy your products. If you sell realms of paper, you get a better chance to sell them if you inform the customer of volume discount while he/she browses the Catalog.
To achieve this you have 2 options:
Option 1:
Expose the volume discount name in the Catalog Applet (there are 2 Catalog Applet to update). But this is not enough. You should also take into account that volume discount have Start and End dates:
  • Create fields in the underlying Catalog BC (again there is 2 to update) to get those dates,
  • Use a calc field that will show the Volume Discount name depending of whether it is active or not
  • Expose this field in the 2 Catalog Applets.
Option 2:
If you want to go a little step further, you can also expose the Next Volume Discount and Upsell (so you can benefit from the Siebel UMS). This is possible since those fields are populated in the Buscomp by the Pricing PSP procedure)
But you need to be comfortable with the Siebel PSP architecture before you can play with this. My opinion is that from a Sales/Marketing point of view, showing the Volume Discount name is already a nice added value; showing more info doesn’t justify the extra man-days implied (unless your Product Catalog is segmented by language or geographical regions).
Note: If your Volume Discount is part of a Discount Matrix you will not be able to recommend it to the customer.

Discount Matrices in Siebel Pricing

In many industries, prices and price adjustments often depend on both the product that is being sold and other information relevant to the sale. Often, customer and market conditions affect the price for which a product is sold.
Discount matrices allow you to tailor prices and adjustments to specific customer and market segments. They allow you to create and manage prices and adjustments for products in conjunction with other customer and market factors. The discount matrix administrative framework allows pricing administrators to logically group factors that result in a price or adjustment, working in the Siebel client without changing the Siebel repository.
For example, a company that sells laptop computers can create a discount matrix that allows it to charge a different price for laptops based on customer account type and sales region. In this example, customer account type, product, and sales region are the criteria for the price or discount. Therefore, the columns of the matrix would be Product, Account Type, Sales Region, Adjustment Type, Adjustment Amount, and a few additional columns that will be covered later in this chapter. Each row of the matrix defines the price or discount that will be applied when a given product is sold to a given account type in a given sales region, as shown in Table 5.
Table 5. An Example of a Matrix Defining Discounts
Product
Account Type
Sales Region
Adjustment Type
Adjustment Amount
Laptop 2000
Platinum
Europe
% Discount
10
Laptop 2000
Gold
Europe
% Discount
5
Laptop 2000
Platinum
Asia
% Discount
11
Laptop 2000
Gold
Asia
% Discount
6
Discount matrices allow you to maintain all of this critical pricing information in a single matrix, instead of dispersing it across numerous Siebel views.
Discount matrices are recommended in cases where:
  • There is a high volume of prices and adjustments.
  • The criteria for prices and adjustments are known ahead of time and do not change frequently.
Because prices and adjustments are frequently stored in disparate applications, discount matrices:
  • Support integration with SAP condition tables.
  • Can be loaded using Enterprise Integration Manager (EIM) or Enterprise Application Integration (EAI) integration objects.
  • Can be integrated with legacy applications using other XML-based integration technologies.

Wednesday, October 9, 2013

Creating Custom BIP Reports in Siebel

The following steps list the process of how to create a custom Siebel Report:
  1. Create a Siebel integration object
  2. Generate an xml data file to use it as a data source during template developing
  3. Create a template using BI Publisher Add-in for MS Word
  4. Upload the new template to Siebel
Create a Siebel Integration Object:
In this first step you will use the Integration Object Builder wizard to create an Integration Object using Siebel Tools.
BI Publisher is integrated with Siebel through web services as it is necessary to create or reuse a Siebel Integration Object. This step provides a hierarchical structure of data.
1
Figure  1, the Integration Object Builder wizard.
Once the integration object has been created, you have to deploy it to runtime database. One of the main advantages of BI Publisher as a reporting tool is that the compilation of the SRF file is not necessary in this step.
2
Figure 2, Integration Object and Integration Components
Generate an xml data file to use it as a data source during template developing
Now you will generate xml sample data. In Sample Data File Generation Siebel View, select the new Integration Object, generate Sample XML and save the file. This process extracts a subset of data that you will use to build the RTF layout. In a case where the complete hierarchy is not generated in this subset of data; you must generate a XSD Schema of your integration object using the Generate XML Schema Wizard in Siebel Tools. Remember to save it as a XML file.
3a3b
Figure 3, Sample data file and schema generation
Create a template using BI Publisher Add-in for MS Word
Now you are ready to build your RTF layout. Use BI Publisher Add-in for MS Word to load the XML file which you generated in the previous step. Build your template using XML tags from the Integration Object and check if the report preview is working.
4
Figure 4, Load Data or Schema in BI Publisher Add-in
To generate the XLIFF file in MS Word go to Translate Template, then Extract text and save it with an xlf extension.
5
Figure 5, Creating XLIFF file
Upload the new template to Siebel
Once you have your template finished, it is time to register it. In Siebel Application, go to template view and create a new report. Select the report layout, XLIFF file and assign the Integration Object. Associate the Report with a Siebel Applications view and upload the file.
6
Figure 6, Template Registration
Your report is now available in the view you have associated it with. From this point you can run or schedule your new custom report.
In conclusion, you would need to create a customized Siebel Report when any of the existing predefined Siebel reports does not match your reporting needs. However, you have to be familiar with all these predefined reports so that when you go to analyze the requirements you can be completely sure that you need to build that report and not spending your time reinventing the wheel.
- See more at: http://www.clearpeaks.com/blog/oracle-bi-ee/how-to-create-a-custom-siebel-report-using-bi-publisher#sthash.Ff35MtBT.dpuf

Creating a custom WF Monitor Component in Siebel

  1. Navigate to Site Map > Administration – Server Configuration > Enterprises > Component Definitons.
  2. In the Component Definitions list, copy the Workflow Monitor Agent component and enter (or confirm) the following field-name values in the new record:
    Component         Netcool WF Monitor Agent
    Alias             Netcool WorkMon
    Component Type    Workflow Monitor Agent
    Component Group   Workflow Management
    Run Mode          Background
  3. Select the Menu applet and select Save Record.
  4. Refresh the Component Definitions list and verify that the new component has a state of Creating.
  5. Define parameters for the new component definition by confirming or editing values in the Component Parameters list as follows:
    Action Interval     1
    Auto Restart        true
    Default References       1
    Group Name          Netcool Group
    Sleep Time          30
    Use Action Agent    false
    Note: Some of these parameters may not be visible in the parameter list. For information about setting these values, see Frequently asked questions.
  6. Enable the new component definition as follows:
    1. In the Component Definitions list, click the Enable applet button.
    2. Verify that the state changes from Creating to Active. Click the Synchronize applet button.
  7. Log out of the Siebel client.
  8. Stop the Siebel Server service
  9. Stop the Siebel Gateway Name Server service.
  10. Restart the Siebel Gateway Name Server service.
  11. Restart the Siebel Server service.
  12. Log back into Siebel Communications and verify that the Netcool® WF Monitor Agent is running as follows:
    1. Navigate to Site Map > Administration – Server Management > Components
    2. Query for the Netcool WF Monitor Agent component in the Components list and check that its state is Running.
    3. Navigate to Site Map > Administration – Server Management > References
    4. Query for the Netcool WF Monitor Agent component in the References list and check that its reference state is Running.
    5. The Status field should show Sleeping for x seconds… where x changes cyclically from 30, to 20, to 10 when the view is refreshed.

Symbolic Url Integration In Siebel

Symbolic URL’s enable you to actually open external application inside Siebel Applets. For example it is possible for me to create a screen named Siebel Unleashed in Siebel and see my site inside Siebel application and we will do then when we get to hands on.
Most common use of Symbolic URL’s is to see Siebel Analytics Reports inside Siebel CRM application and it is used majorly in portal applications to display contents of external application.
There is no formal definition for Symbolic URL that I have come across but is quite effective and a novel way to integrate Siebel with external applications.
That’s enough of theory and now is the time for some practical. Here is a step by step tutorial on “How to configure Symbolic URL in Siebel?” and what will try to achieve is a new have a new Screen in Siebel that says Siebel Unleashed and when we click on it we should be able to see Siebel Unleashed in it.
The first thing that we need to do is define a Symbolic URL pointing to my website :)
  • Go to Administration Integration > WI Symbolic URL List view
  • Click on Dropdown in list applet and select Host Administration
  • Create a new host record and enter the following detail
    Name: siebelunleashed.com
    Virtual Name: SiebelUnleashed
  • Click on the dropdown in List Applet and Select Symbolic URL Administration
  • Create a new Symbolic URL Record and enter following details
    Name: SiebelUnleashed
    URL: http://siebelunleashed.com
    Host Name: siebelunleashed.com [Name you had given in first Step]Fixup Name: Default [It determines how you URL will appear in application]SSO Disposition: IFrame
    As we just want to see static site so will not provide any arguments. Now our Symbolic URL is ready let us go to Siebel tools to do required configuration to display it in SiebelUnleashed Screen.
  • Go to Business Component that you will base your applet upon. In this example I choose Account.
  • Create a new calculated field and provide the following detail
    Name: SiebelUnleashed
    Calculated: True
    Calculated Value: “SiebelUnleashed” [Name of the Symbolic URL we just created and don’t forget to put quotes around it]
Now we need to expose this on UI in an Applet. You can create a new Applet based on Account BO and expose just one field in that applet or you can copy an existing Applet such as “SSO Analytics Administration Applet” that is already configured with Symbolic URL and modify it to contain our newly created Symbolic URL. As I am doing in this example:
  • Query for “SSO Analytics Administration Applet” under Applet Object
  • Copy this Record and provide following detail
    Name: SiebelUnleashed
    Business Component: Account
    Title: Siebel Unleashed
  • Now go to list column section of this field and provide following details for a lone record that is available
    Name: SiebelUnleashed
    Field: SiebelUnleashed
    Field Retrieval Type: Symbolic URL
Don’t forget to expose this field in Applet Web Layout and make sure you expose it in base mode.
Now Lets create a view that will have our applet. Again here you can use Wizard to create a new view or just copyexisting Analytics View.
The Web Template of the new view should be “Analytics View”. I am going to
  • Copy an existing view “SSO Analytics Administration View” and provide the following details
    Name: SiebelUnleashed
    Business Object: Account
    Visibility Applet: SiebelUnleashed
  • In View Web Template Item object give the following details
    Name: SiebelUnleashed
    Applet: SiebelUnleashed
    Applet Mode: Base
The final step is to create a Screen which will contain this view.
- Add that screen to your Application
- Register the view in Application.
These are basic configuration steps. So I am not going to waste much of you time in writing anymore of it.
Compile the View, BC, Application, Screen, Applet objects that you just created or modified and the final result that you will get is shown below.

EBC in Siebel

  • Get an DDL file for an external table
  • Import DDL file in Siebel Tools
  • Configure the newly created table
  • Create an Business Component based on this table
  • Configure this Business Component

After that you can use this BC just like any other Siebel BC with some limitations.
Now, I am going to discuss each step in detail.
::)  Getting a DDL File
This was the part that I had to struggle with in the start and in the end it turned out to be pretty simple task. Table I used in this example is oracle database table and you can get DDL of oracle database using Toad or SQL Developeran tool provided by oracle to interact with database.
I am mentioning the steps that we need to do to get Table DDL using SQL Developer
  • Open SQL Developer and connect to database in which you table resides.
  • Select the table for which you want to get DDL file
  • On the right hand side you will see various tabs as shown below picture
  • Click on SQL Tab
  • You will see the DDL of that table in the window below
  • copy and paste it in txt file and save that file

Carriage Return in Siebel Workflows

In Siebel Workflow, there is no function for a carriage return line feed. So, if we want to populate a text field and format the contents so that they appear on separate lines, there is no simple way to do it.
One solution would be to write some eScript in a Business Service to return the CRLF escape sequences to the calling routine. The workflow can then call your business service to populate a process property with the CRLF characters and it can then use that process property as and when required.
Another solution exists which does not involve escript is to use siebel vanilla Business Service. There exists a “vanilla” Business Service which returns CRLF as a return argument.
 
Business Service details:
Business Service Name: SSSE Address Parser (eScript)
Business Service Method: GetCRLF  
 
Note : Newline characters can be added in oracle database level using the following ASCI functions CHR(10) – Line Feed and CHR(13) – Carriage Return

Debugging Profile Attribute

There would have been umpteen number of situations where you might have felt the need for an easier way of debugging profile attributes than logging the values in a script, haven't you?.If yes, then here is a much simpler way and you can do this on the fly.
When the web client is up, replace the URL with the following script:
javascript: alert(theApplication().GetProfileAttr("gNewRecord"));where 'gNewRecord' is a profile attribute.
 
1.      Place the below code in the address bar of the Siebel Application and hit Enter.
javascript:alert(theApplication().GetProfileAttr("Login Name")), results in SADMIN or CCHENG or valid login id.
 
 
2.      Similarly to set a particular Profile Attribute you can write,
javascript: alert(theApplication().SetProfileAttr("Test", "TestValue"));
 
 
3.      javascript: alert(var bo = theApplication().ActiveBusObject(););
This will return you the active bus object and assign it to the variable bo.
 
 
4.      javascript: alert(theApplication().ActiveBusObject().GetBusComp("Contact").GetFieldValue("Last Name"););
This will return you the Contact’s Last Name in that instance. Similarly SetFieldValue on the fly can also be achieved

Siebel EAI Adapter: skiptree and skipnode operations in Execute Method

Skiptree Operation
The whole sub tree rooted at this node is not processed. It is the same as that whole sub tree not existing in the integration object instance. Operations specified in child nodes do not affect processing in any way since the EAI Siebel Adapter does not act on the child.
  Property
-Set EscapeNames="false"?>
Sample

  Account" IntObjectFormat="Siebel Hierarchical">
foo
cold storage
  
    firstname
    contact1
    
    
      San Mateo
      94402
      primary address
    
    
  
 
  
Based on this example, the account is upserted. The processing of the contact is completely skipped although the business address child has an insert operation set.
If the skiptree operation is specified for the account integration component, then the EAI Siebel Adapter skips processing the complete account. This results in no operation.
 
Skipnode Operation
Similar to all other Execute operations, the children nodes inherit the semantics of the operation from the parent nodes. If a node has operationskipnode set, then the EAI Siebel Adapter will skip setting field values for all children unless a child has an explicit operation set that will override.
 
"EAI Account" IntObjectFormat="Siebel Hierarchical">
foo
cold storage
  
1-123
    firstname
    contact1
  
    
      MyOrganization
      
  
  
2-123
  firstname
  contact2
  
  
 
Based on this example, the account is skipped. However, the EAI Siebel Adapter will attempt to insert the two contacts.