NextGen Consulting

IT Consulting CRM BSS OSS

Migrating Amdocs CRM Classic to Smart Client (part 1)

Business justification for migration from classic to smart client technology is a difficult subject.  In some respects migration can be seen as having purely IT benefits, such as reduced deployment costs, reduced maintenance costs etc. 

The main business drivers for migration are often based on leveraging new functionality that is available in the smart client, not available the classic client.  This means that a purely technical migration will likely result in limited or no identifiable business benefits, making the business case very difficult to prove. 

In many cases both technical and business drivers arise during the migration assessment.

It is important to understand that although both technical and business drivers for migration are viewed separately, there is an overlap between the two areas, as improved functionality is enabled through the use of the new architecture.


Read the full story Migrating Amdocs CRM Classic to Smart Client (Part 1)



09/10/2010 Posted by | Amdocs, BSS, CRM, CRM, Smart Client, Technology | Leave a comment

Implementing ‘Got_focus’ Event in Smart Client

Q: Clear Basic provide ‘got_focus’ event for controls but I can’t find the same event in smart client.
Is there any way to implement this feature in smart client?


A: You can add your native contol focus event listeners (lost/gained) as follows:
(assuming your control is a textBox named ‘txtCustomerName’)

// Add the following in the form_Load() event handler:  
// define focus event listeners (lost/gained)  
(    (javax.swing.JComponent)this.txtCustomerName.getNativeControl())
             .addFocusListener(new FocusListener()   
// this is the equivalent to Clear Basic Lost_Focus() 
public void focusLost(FocusEvent focusEvent)
// your logic here... 
System.out.println("focus lost");
// this is the equivalent to Clear Basic Got_Focus() 
public void focusGained(FocusEvent focusEvent)
// your logic here... 
System.out.println("got focus");


01/10/2010 Posted by | Amdocs, CRM, CRM, Development, Front End, Smart Client, Technology | Leave a comment

Using Contained Core Business Objects

Q. When working with establish relation, I had a problem with a Bo having many parent, like:

1. We have an exist CaseBo object:  caseBo
2. By using XVO, we create 2 new row to insert: emailLogBo and actEntryBo
3. In which: actEntryBo is child of both caseBo and emailLogBo, emailLogBo also is child of caseBo.

=> how can I insert emailLogBo and actEntryBo to database ?

Note that: Both emailLogBo and caseBo are parent of actEntryBo, so we can’t use actEntryBo.setParentBo(..) to set up relation. So, please suggest how to solve this problem.


A.  Note that CaseBo object contains all the logic to do it automatically for you.
All you need to do is to add your new emailLog record to the CONTAINED emailLogBo.
When doing so, an actEntry will automatically be added and related with all relevant BO parties (CaseBo, UserBo, EmailLogBo).

About Contained Business Objects

Many BOs Contain other Business Objects. These contained CBOs are exposed as properties of the containing BO. For example, when a Case BO is created, contained BOs are automatically created for the logs related to the cases, the site and contact that reported the cases, and the installed part identified in the case

These contained CBOs are automatically related to the Case BO, usually as child BOs of the parent BO. They are accessed through CaseBO properties.

Field values for contained CBOs are accessed through properties of the containing BO
The following code shows how to get the first name of the contact who logged a case: String firstName=boCase.getContact().toString(“first_name”); 


  1.  Most contained CBOs are Generic BOs.
  2. To reduce network traffic and improve response times, many contained BOs set bo.DataFields and bo.QueryMode to minimize the amount of data retrieved. Make sure to modify the DataFields property of the contained Bo to include necessary fields before performing the query.



String fields= boCase.getContact().getDataFields() + ",e_mail";
boCase.getContact().setDataFields( fields );


Example of adding email log to a CaseBo: 

// Add a new row to the contained EmailLog BO.

// Set the note description for the new row.
  "Customer mailed again to ask about the case status"); 

// Commit changes to the database.

01/10/2010 Posted by | Amdocs, Backend, BSS, CRM, CRM, Development, Smart Client, Technology | Leave a comment

Smart Client Messaging

About Smart Client Messaging

Smart Client messaging is far more flexible than its Classic predecessor. Smart Client forms can communicate with other forms by messaging.

See more about Smart Client Messaging…

22/09/2010 Posted by | Amdocs, CRM, CRM, Development, Smart Client, Technology | Leave a comment

Implementing Smart Client Tree Control

Smart Client Tree control displays hierarchical information in an outline structure.

It extends SWING’s JTree base functionality and provides visual presentation to hierarchical data.

Need to display logical model 



In a dynamic tree control?

Learn how to implement Tree control in Smart Client Java Swing technology.    

Read Implementing Smart Client Tree Control for full story and step by step examples.


21/09/2010 Posted by | Amdocs, CRM, CRM, Development, Smart Client, Technology | Leave a comment

How to Upgrade Backend

Q. There is a form, the back end for that form was implemented by Worker Bean.
I’m upgrading that form to a new version by creating derived form and add on some needed features.
What about the backend, Is there any way to upgrade the old Woker Bean?
Note that the new backend should be implemented by XBean.



A. Using derived form does not require any change in the backend if you do not need any changes or additions to the backend logic.

If you do need to modify the backend code, you can use either of the following options:

  1. Countinue using the WorkerBean and its related SaveBean / LoadBean
  2. Move the logic completely to a new XBean.


  1. Countinue using the WorkerBean and its related SaveBean / LoadBean

In this case you need to:

  • Override the original Workerbean.
    Create your own version to the WorkerBean only if your new logic require passing new parameters.
    If there is no change is the parameters, do not override the workerbean, leave the original one.
  • Override the related Savebean (or Loadbean) with a new Save/Load bean.


Remember that overriding a backend Bean (WorkerBean, SaveBean or LoadBean) equires:

  • Providing a new name to the new Bean (i,e X1<original_bean_name>)
  • Mapping the original bean name with the new bean name.



The mapping should be in a backend class called  located in the package com.<your Organization>.crm

For example:


 The mapping format for each entry should be as follows:

String <original class full qualified name> + ";" + String <new class full qualified name>

If you have several new entries, seperate them by a coma (,).


Example for which contains two entries:


package com.nextgen.crm;
  * @Description Replace OOB Beans with Custom Beans
  * @version NextGen
  * @author 
public class Config {
  // Default constructor
  public Config() {}
  //String array mapping baseline classes with custom subclasses
   public static String[] m_MapTable = { + ";" +

 ,com.clarify.isales.account.workerbean.CustomerProfileTabCreateSaveWB.class.getName() + ";" +
    * @Description Retrieve the mapping of custom subclasses when Weblogic starts
  public String[] getClassMapTable()
     System.out.println("*** New Class Map *** [" + this.getClass().getName() + "]");
     return m_MapTable;
} /// Config


Updating ASC

Remember that you need to make sure class path of is configured in your ASC (Amdocs System Configuration) as follows:

Node Path:             /crm/baseConfig/clarifyEnv/user_package
Entry:                 com.<your organization>.crm

Entry example:     com.nextgen.crm



2.  Move the logic completely to a new XBean

Moving the logic to a new XBean first requires copying the old logic from the Workerbean and its related SaveBean (or LoadBean) to a new XBean.


Note the following:


  • The Workerbean is used only for passing the data from your front end client to your SaveBean. This data is passed via CDOs, where the XBean gets its data directly using XDOs (practically XVos).
    You shall need to convert your passed data fron CDO to XVo.
  • You shall need to copy the SaveBean (or loadBean) logic to the new XBean.  
    This should be fairly easy if you managed to properly convert your data as mentioned in (1).
  • You might consider *not* to map the original OOB WorkerBean to your new XBean,  but call it explicitely from your front-end.
    This is to maintain backward compatibility with other front-end code that might use it from other forms.



Which Option to Use?

Obviously, moving logic to a new XBean is more complex, and needs to be updated with every upgrade to a future release. However, it provides much more efficient code which is easier to maintain.

On the other hand, merely creaying your new versions for the OOB WorkerBean and SaveBean (or LoadBean) is much easier task and backward compatible.

15/09/2010 Posted by | Amdocs, CRM, CRM, Development, Smart Client, Technology | Leave a comment

Smart Client Look and Feel

Smart Client Look and Feel

The “look and feel” (LAF) describes the appearance of UI components. It handles presentation for Smart Client UIF custom controls & states.

It works in conjunction with currently active Swing’s look and feel and Swing’s controls (Only Windows XP LAF supported).



For full discussion see Smart Client Look and Feel .


02/09/2010 Posted by | Amdocs, CRM, CRM, Development, Smart Client, Technology | Leave a comment

Implemnting Lookup Control

About Lookup Control

The Lookup control assists users search for data with which they need to associate.

For example, when creating a new contact, we need to need to associate it with a site to which this contact belongs.

The lookup button launches a search form which allows the user to select the relevant record that update the necessary values in the launching form.

The lookup button is often used in create and edit forms, where the main focus object (in our above example – a new contact) needs to be related to another object (site in above example.

The Lookup control allows users to search and associate objects in the application. The control provides standard drop-down button functionality plus additional specific ones. 

For the full discussion, see Implementing Lookup Control.

31/08/2010 Posted by | Amdocs, CRM, CRM, Development, Smart Client, Technology | Leave a comment

Setting Search Grid Properties


Q:  I want to set the style for Search Grid control, but I don’t know how set it?
Could you tell me to set the style for Search Grid controls?
for example:  Set the width of columns, scroll…



Grid Properties

General Grid properties set the overall Grid control behavior.  For example:

  • autoResizeMode
    Sets the auto resize mode of a grid.
  • gridColumnSequence
    Sets the column sequence by the input column name order, the column sequence is an ordered collection of column names.  The order of this collection represents the order of columns in a grid like display. The column orientation, either from left to right or from right to left depends on the end users locale setting. The column order string is delimited by comma.
  • preferredRows
    Sets the preferred height of the control in logical units. In other words, define Setting the value to -1 restores the default behavior.Scrolling will be set according to the number of records provided in the Display Tabular Data Model (TDM) versus the grid height. If the number if the total height of rows to be displayed is larger than the Grids height – then scroll bars will be displayed (you can limit the number of retrieved records from the database by setting the application’s workspace variable gridDefaultNumRequested to your preferred capacity (the default is 20).


 Column Properties

Each Search Grid (or any simple grid) column is directly related with a UI control (I.e. label, textbox or a dropdown). The column’s control properties set the column rendering attributes such as column width etc. 

When setting Grid’s column controls properties, note that within the column main properties, you will find a property named ‘control’. This ‘control’ can be expanded to reveal a group of sub-properties. Both types of properties set the way the column will be displayed. However, note the difference behavior impact between ‘main’ properties and ‘control’ properties which have similar name. 

For example, assuming we need to display a three columns Grid. We need to add three Label controls under the Grid control (drag 3 label controls and drop them under the Grid control).

The following label column ‘main’ properties (marked in red) will set the following behavior:

  • Title 
    Column title
  • columnSpan
    Indicates by  how many columns this column is to be spanned.
    Value   1 or 0 means no span.
    Value of  -1 means span the whole row.
  • Visible
    Sets the visibility of the entire column space:
    When set to  false the whole column space is removed (our example grid will show only two columns).

 Control Properties

The following are ‘Control’ properties (marked in green):

  •  horizontalAlignment
    Sets the horizontal alignment of the (optional) icon and text.
  • horizontalTextPosition
    Sets the horizontal position of the text relative to the icon.
  • preferredColumns
    Sets the column width.  Setting the value to -1 restores the default behavior (defined by grid’s property).
  • Visible
    Sets the visibility of the column contents. Does not remove column space.
    When set to false the column space remains in Grid (our example grid will show three columns), but column content will be empty.

For complete list of properties, follow the Smart Client designer properties tooltips, or read programmer’s documentation.



Look and Feel

Smart Client Framework also provides a Look and Feel control using Style sheet. This sets the UI controls appearance on the screen. The style sheet defines styles, each style group set of display attributes. In order to apply a style to specific Grid, the Grid’s style property needs to be set to the style name.

The following L&F style attributes can be applied on a Grid:

  • Border
    The border for a search grid is applied around the table, including the column titles. It does not surround the search grid header (the area containing the Search Now button etc.). In order to set a border around the entire search grid, place the search grid in a panel and apply the desired border to that panel.
  • alternateRow
    A 24-bit number; 3 X 8 bits RGB components  I.e.: Red -> 0xff0000
    Used to paint row’s background alternately between table’s background color and the specified alternate backgroundColor.
  • rowHeight
    Row height in pixels. I.e.: 18
  • gridColor
    Color             a 24-bit number; 3 X 8 bits RGB components  I.e.: Red -> 0xff0000
  • showGrid
    Boolean         true or false
  • showHorizontalLines
    Boolean         true or false
  • showVerticalLines
    Boolean         true or false
  • backgroundSelectionColor 
    Color    3 X 8 bits RGB components      I.e.:  Red -> 0xff0000
  • textSelectionColor
    Color             a 24-bit number; 3 X 8 bits RGB components  I.e.: Red -> 0xff0000
  • backgroundHighlightColor
    Color             a 24-bit number; 3 X 8 bits RGB components I.e.:  Red -> 0xff0000
  • textHighlightColor
    Color             a 24-bit number; 3 X 8 bits RGB components I.e.:  Red -> 0xff0000
  • focusBorderColor
    Color             a 24-bit number 3 X 8 bits RGB components  I.e.:  Red -> 0xff0000


For more information see the full discussion on Look and Feel.


26/08/2010 Posted by | Amdocs, CRM, Smart Client, Technology | 4 Comments

Smart Client Deployment Architecture

25/08/2010 Posted by | Amdocs, CRM, Smart Client, Technology | 2 Comments

%d bloggers like this: