Introduction to the ABS Framework

When considering the solution design for a business requirement, we usually have a few configuration options at our disposal.

One of the cardinal decisions we make, is wether we choose to build our solution using WF or Script, there is a lot of emphasis put on this decision by the Siebel community.

In my opinion, wether we use WF or Script isnt important, what is important, is the result. The ultimate goal should be to ensure that the build, is maintainable, scalable, and upgradable.

In the comming series, and i'm going to look at the ABS framework, and see wether it meets the above goals.

What is the ABS framework?

The ABS framework is a custom Siebel framework that embodies the following principles

  1. Maintainable
  2. Resuable
  3. Scalable

and it is written in eScript!

Its important to note that, the ABS framework is more than just a library of functions, it is an alternative Siebel framework, with features beyond scripting.

What are the features of the ABS framework?

  1. Centralization of all business logic
  2. Reduces scripting
  3. Reduces development time and implementation
  4. Superior Logging and Tracing
  5. Ready made eScript library
  6. Abstraction of Siebel Objects

There is no public documentation on the ABS framework, and what we currently know, are mainly from word of mouth or blogs across the Internet. There are still a lot of questions and speculation about the ABS Framework.

With courtesy from the ATI framework (which is extended from ABS), i have a unique opportunity to explore the framework from the source code level.

In the next series of articles, i will endeavour to reveal its features and discover the answers to all the questions we've been asking.

Suppress menu item across the entire application

Requirement

Remove the "Save Target List", "Applet Target List", "Apply List" and "Save List" options from the applet menu.

These options are on the Siebel 8 menus and enabled by default, the problem is that there are 500+ applets, and we needed a global solution to remove them from the entire application.



A SR was lodged and the solution from Siebel was simple, go into the 500+ applets and disable the menu items individually. This was not exactly the practicle solution that we were after.

For customers out there who have similiar requirements to remove items from the menu. Here are 2 alternative global configuration options that allow us to achieve the above requirement.

1. PreCanInvoke on Command Object

Co-incidently Alex from Siebel Essentials has highlighted this behaviour in his recent post.

We can disable or enable a menu command by configuring the PreCanInvoke of the Business Service that the command calls. This is what the command object for our menu item looks like.



We can see that "Apply Target List", "Save Target List" and "Save List" call methods on the Business Service "SLM Save List Service". To disable both of these menu items, we can use the following PreCanInvoke code to grey out these options in the menu.

function Service_PreCanInvokeMethod (MethodName, &CanInvoke)
{
var iOperation = ContinueOperation;

switch(MethodName)
{
case "CreateSaveListPopup":
case "CreateApplyListPopup":
CanInvoke = false;
iOperation = CancelOperation;
break;
}

return (iOperation);
}


"Apply List" seem little tricker because it dosnt call a Business Service, instead it calls a class method. Since we dont need this command anymore, we can just override the Method and Arguments with the Business Service and Method that we have just disabled.



This allows the command to utilize the PreCanInvoke powers of the Business Service to grey our desired menu items. If you are concerned that the business service you are disabling is used elsewhere in the Application. You can always substitute it with a dummy Business Service with disabled methods.

2. Supress Menu Item from Applet Class

This option was provided by JM, an ever resourceful colleague. This technique entails that we go directly to the class object that all list applets inherit, and disable the menu item from there.

Simple and elegant!

Navigate to the Class "CSSSWEFrameList", and goto the Class Method Menu Item object, you will see the following options.



Click the "Supress Menu Item" option for these menu items, and re-compile. You will notice that instead of being greyed out, the menu items have dissppeared.

Remember that this technique hides the menu item, it dosnt disable them. So if you have keyboard accelerators for your commands, the user can still invoke the action using the shortcuts, unless those are disabled as well.

To finish the job, we need to also disable the options from the Application Menu, this can be done by disabling the menu item from the Menu "Generic Web".




Conclusion

Both these solutions allow you to disable the menu items globally in the application.

The first option has the advantage that you can conditionally enable and disable these commands based on condition, while the second option is nicer if you dont need the menu item at all.