CommandSet

Contains a set of commands and events supported by a commandable object. The CommandSet supports command interceptors and command call chains.

Description

The CommandSet class allows you to create a set of commands and events supported by a commandable object. In addition, it supports command interceptors and command call chains.

Important points

  • CommandSets can be used as an alternative commandable interface to a business object.
  • This class can be used to auto generate multiple external services for a business object.

Constructors

Creates an empty CommandSet object.

CommandSet()

Properties

Commands

Gets all commands registered in this command set. See ICommand.

public List<ICommand> Commands { get; }

Events

Gets all events registred in this command set.
See IEvent.

public List<IEvent> Events { get; }

Instance methods

AddCommand

Adds a command to this command set.
See ICommand.

public void AddCommand(ICommand command)

AddCommandSet

Adds all of the commands and events from a specified command set into this one.

public void AddCommandSet(CommandSet commandSet)

AddCommands

Adds multiple commands to this command set.
See ICommand.

public void AddCommands(IEnumerable<ICommand> commands)

  • commands: IEnumerable<ICommand> - array of commands to add.

AddEvent

Adds an event to this command set.
See IEvent.

public void AddEvent(IEvent ev)

AddEvents

Adds multiple events to this command set.
See IEvent.

public void AddEvents(IEnumerable<IEvent> events)

  • events: IEnumerable<IEvent> - array of events to add.

AddInterceptor

Adds a command interceptor to this command set.

public void AddInterceptor(ICommandInterceptor intercepter)

AddListener

Adds a listener to receive notifications on fired events.
See IEventListener.

public void AddListener(IEventListener listener)

ExecuteAsync

Executes a command specificed by its name.
See ICommand, Parameters.

public Task<\object> ExecuteAsync(string correlationId, string command, Parameters args)

  • correlationId: string - (optional) transaction id used to trace execution through the call chain.
  • command: string - name of that command that is to be executed.
  • args: Parameters - parameters (arguments) to pass to the command for execution.
  • returns: Task<\object> - execution result

FindCommand

Searches for a command by its name. See ICommand.

public ICommand FindCommand(string command)

  • command: ICommand - name of the command to search for.
  • returns: ICommand - command, whose name matches the provided name.

FindEvent

Searches for an event by its name in this command set.

public IEvent FindEvent(string ev)

  • ev: string - name of the event to search for.
  • returns: IEvent - event whose name matches the provided name.

NotifyAsync

Fires event specified by its name and notifies all registered listeners.

public Task NotifyAsync(correlationId: string, ev: string, args: Parameters)

  • correlationId: string - (optional) transaction id used to trace execution through the call chain.
  • ev: string - name of the event that is to be fired.
  • args: Parameters - event arguments (parameters).

RemoveListener

Removes a previosly added listener.
See IEventListener.

public void RemoveListener(IEventListener listener)

validate

Validates args for a command specified by its name using a defined schema. If the validation schema is not defined, then the methods returns no errors. It returns a validation error if the command is not found.

IList<ValidationResult> validate(string command, Parameters args)

  • command: string - name of the command for which the ‘args’ must be validated.
  • args: Parameters - parameters (arguments) to validate.
  • returns: IList<ValidationResult> - array of ValidationResults. If no command is found by the given name, then the returned array of ValidationResults will contain a single entry, whose type will be ValidationResultType.Error.

Examples

public class MyDataCommandSet: CommandSet 
{
    private IMyDataController _controller;
    /// 
    public MyDataCommandSet(IMyDataController controller)  // Any data controller interface
    {
        base();
        this._controller = controller;
        this.addCommand(this.MakeGetMyDataCommand()); }
    
        private ICommand MakeGetMyDataCommand() 
        {
            return new Command(
            "get_mydata", 
            null,
            async(correlationId, args)=> {
                String param = args.getAsString("param");
                return this._controller.getMyData(correlationId, param);  });
        }
}

See also