Performs a predefined action (an implementation of {@link Ext.form.action.Action}) to perform application-
specific processing.

@param {String/Ext.form.action.Action} action The name of the predefined action type, or instance of {@link
Ext.form.action.Action} to perform.

@param {Object} [options] The options to pass to the {@link Ext.form.action.Action} that will get created,
if the action argument is a String.

All of the config options listed below are supported by both the {@link Ext.form.action.Submit submit} and
{@link Ext.form.action.Load load} actions unless otherwise noted (custom actions could also accept other
config options):

@param {String} options.url
The url for the action (defaults to the form's {@link #url}.)

@param {String} options.method
The form method to use (defaults to the form's method, or POST if not defined)

@param {String/Object} options.params
The params to pass (defaults to the form's baseParams, or none if not defined)

Parameters are encoded as standard HTTP parameters using {@link Ext#urlEncode Ext.Object.toQueryString}.

@param {Object} options.headers
Request headers to set for the action.

@param {Function} options.success
The callback that will be invoked after a successful response (see top of {@link Ext.form.action.Submit submit}
and {@link Ext.form.action.Load load} for a description of what constitutes a successful response).
@param {Ext.form.Basic} options.success.form The form that requested the action.
@param {Ext.form.action.Action} options.success.action The Action object which performed the operation.
The action object contains these properties of interest:

- {@link Ext.form.action.Action#response response}
- {@link Ext.form.action.Action#result result} - interrogate for custom postprocessing
- {@link Ext.form.action.Action#type type}

@param {Function} options.failure
The callback that will be invoked after a failed transaction attempt.
@param {Ext.form.Basic} options.failure.form The form that requested the action.
@param {Ext.form.action.Action} options.failure.action The Action object which performed the operation.
The action object contains these properties of interest:

- {@link Ext.form.action.Action#failureType failureType}
- {@link Ext.form.action.Action#response response}
- {@link Ext.form.action.Action#result result} - interrogate for custom postprocessing
- {@link Ext.form.action.Action#type type}

@param {Object} options.scope
The scope in which to call the callback functions (The this reference for the callback functions).

@param {Boolean} options.clientValidation
Submit Action only. Determines whether a Form's fields are validated in a final call to {@link
Ext.form.Basic#isValid isValid} prior to submission. Set to false to prevent this. If undefined, pre-submission
field validation is performed.

@return {Ext.form.Basic} this
function(action, options) {
        if (Ext.isString(action)) {
            action = Ext.ClassManager.instantiateByAlias('formaction.' + action, Ext.apply({}, options, {form: this}));
        }
        if (this.fireEvent('beforeaction', this, action) !== false) {
            this.beforeAction(action);
            Ext.defer(action.run, 100, action);
        }
        return this;
    }