How to: Limit the Amount of Objects Created using the New Action

This topic describes how to limit the number of objects that an end-user can create using the New Action. Assume you are using the Task business class from the Business Class Library. When creating a new Task using the New Action, the count of existing Task objects will be checked and an end-user will not be allowed to create additional objects if there are already three objects.

Note

The approach described in this topic is not supported by the Mobile platform.

Tip

A complete sample project is available in the DevExpress Code Examples database at http://www.devexpress.com/example=E239.

To access the Task List View when the New Action is about to create a new object, handle the NewObjectViewController.ObjectCreating event of the NewObjectViewController, which contains the New Action. To do this, implement a new View Controller and override the OnActivated method in the following manner.

using DevExpress.ExpressApp;
using DevExpress.Persistent.BaseImpl;
using DevExpress.ExpressApp.SystemModule;
//...
public class LimitTaskAmountController : ViewController {
    private NewObjectViewController controller;
    protected override void OnActivated() {
        base.OnActivated();
        controller = Frame.GetController<NewObjectViewController>();
        if (controller != null) {
            controller.ObjectCreating += controller_ObjectCreating;
        }
    }
    void controller_ObjectCreating(object sender, ObjectCreatingEventArgs e) {
        if ((e.ObjectType == typeof(Task)) && 
            (e.ObjectSpace.GetObjectsCount(typeof(Task), null) >= 3)) {
                e.Cancel = true;
                throw new UserFriendlyException(
                    "Cannot create a task. Maximum allowed task count exceeded.");
        }
    }
    protected override void OnDeactivated() {
        if (controller != null) {
            controller.ObjectCreating -= controller_ObjectCreating;
        }
        base.OnDeactivated();
    }
}
Note

You can disable an Action instead of interrupting its execution. See the How to: Disable an Action When the Current View Has Unsaved Changes example.

See Also