Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Made some additional minor changes

...

To explain what occurs in the the the index.js file, we will break the file down piece by piece.

  1. Describe the node, name, description, category, and icon:

    Code Block
    .add('encodeuri', {
            name: 'Encode URI',
            icon: 'icon.svg',
            description: 'URI encoder.',
            category: 'utils'
    })

    The name is the text that is displayed in the Flow Editor. The default icon is a placeholder (a star) that should be replaced with a graphic that represents the action of the node. The icon is displayed at 28 pixels x 28 pixels. The category is the section in the Flow Editor tool panel where the node is contained.

  2. Add a method to the node and describe its parameters:

    Code Block
    .method('encode', {
            name: 'Encode URI',
            description: 'Encodes a URI by replacing each instance of certain characters with UTF-8 encodings.'
        })
        .parameter('uri', {
            description: 'The URI to encode.',
            type: 'string'
    })

    A method called encode, that is displayed in the Flow Editor as Encode URI, was added. The encode method has a single parameter. If there was more than one parameter, we would repeat the .parameter(name, schema) block. The second value in the parameter method is a JSON Schema that describes the parameter type.

  3. Describe the possible outputs from the method:

    Code Block
    .output('next', {
        name: 'Next',
        description: 'The URI was encoded successfully.',
        context: '$.encodedURI',
        schema: {
            type: 'string'
        }
    })

    The outputs section defines what the possible outcomes of the node are. In this simple case there is just one output; however, however nodes can have multiple outputs with different return types. For example, this node could have added an error output to indicate that encoding failed.

  4. Define the implementation:

    Code Block
    .action(action);

    The action() expects a function that will be passed the request details parameter and a callback object parameter.

...

To simplify management of the code, the starter project puts the implementation of the methods in the action.js file. There is not a requirement to follow this pattern, you can structure your project however how best suits your needs.

Code Block
exports = module.exports = function (req, cb) {
        const uri = req.params.uri;
        if (!uri) {
                return cb('invalid argument');
        }
        cb.next(null, encodeURI(uri));
};

This is a simple scenario, but it highlights the main features. The parameters for the node method are accessed under the req.params parameter. In this example, the parameter for the encode method is defined as uri:

Code Block
    .parameter('uri', {
        description: 'The URI to encode.',
        type: 'string'
    })

...

These errors are not handled and will abort the flow execution. In general, avoid doing this for any expected error scenarios. If there are known error situations, it is better to define an output for those scenarios and allow the flow designer the flexibility to specify what to do on when an error occurs.

If uri is set, the fallback for the next output is fired. The name of this callback will match the name of the output defined in the method. For example, if you defined an output encoderError, then there would be a callback cb.encoderError(). The encoded string is passed to the callback as the methods output value.

...

Anchor
NodeBuilder
NodeBuilder
axway-flow-sdk~NodeBuilder

Kind: Inner class of axway-flow-sdk

Anchor
add
add
nodeBuilder.add(key, [options])

Adds a new node spec and prepares the NodeBuilder to accept the following specification operations:

The key parameter is used to uniquely identify the specification and represents a distinct instance of a node for the flow editor. The key will be used as the name unless the name option is provided. The new node will appear in the general category by default, or under the provided category option.

The icon option can be a bmp, jpeg, png, gif, tiff, or svg file. The .method option is used to add method(s), and the .output option is used to define an output. The .action option is used to define an action function and finish the specification.

Kind: Instance method of NodeBuilder

Returns: Current NodeBuilder object

Access: Public

ParameterTypeDefaultDescription
key
string
 A unique key identifier for the node.
[options]
object
 Options for the node.
[options.name]
string
 A friendly name for the node as it will appear in the UI.
[options.icon]
string
 An icon file.
[options.description]
string
 A description for the node.
[options.category]
string
general
A category under which the node will appear in the UI.

...

Adds a new method to the current node specification and prepares the NodeBuilder to accept the following method operations:

The .add(key, [options]) must be called prior to adding a method.

The key uniquely identifies the method for the node and will be used as the name unless the name option is provided.

Kind: Instance method of NodeBuilder

Returns: Current NodeBuilder object

Access: Public

ParameterTypeDescription
key
string
A unique key identifier for the method.
[options]
object
Options for the method.
[options.name]
string
A friendly name for the method as it will appear in the UI.

...

Adds a new parameter to the current method. Any number of parameters can be added to a method.

The .method(key, [options]) must be called prior to adding a parameter.

The name uniquely identifies the parameter, and the schema is a valid JSON Schema definition (both draft-04 and draft-06 are supported).

Kind: Instance method of NodeBuilder

Returns: Current NodeBuilder object

Access: Public

ParameterTypeDefaultDescription
name
string
 A unique name for the parameter as it will appear in the UI.
schema
object
 A schema used to validate the parameter.
[required]
boolean
true
A flag to indicate the parameter is required or optional.

...

Adds a new output to the current method. Any number of outputs can be added to a method, but for usability-sake, you should limit this.  The output represents one of the possible callback routes for your method. For example, if your method tested prime numbers, then one output might be prime, and the other not-prime.

The .method(key, [options]) must be called prior to adding an output.

...

The context is a valid JSON Path and is used as the default by the flow editor. When the output is invoked, the configured context is where the output value will be written.

Kind: Instance method of NodeBuilder

Returns: Current NodeBuilder object

Access: Public

ParameterTypeDescription
key
string
A unique key for the output.
[options.name]
string
A friendly name for the output as it will appear in the UI.
[options.description]
string
The output description.
[options.context]
string
The default context string.
[options.schema]
object
The expected JSON schema for the output value.

...

Assigns an action handler to the current method. The method can only have one action handler. Assigning an action will terminate the current method definition.

Kind: Instance method of NodeBuilder

Returns: Current NodeBuilder object

Access: Public

ParameterTypeDescription
handler
handler
The action handler function.

...

Axway API Builder SDK for creating custom nodes to work with flows.

Kind: Inner method of axway-flow-sdk

Returns: NodeBuilder - A newly constructed NodeBuilder object 

ParameterTypeDescription
module
object
The node module.

...

Kind: Inner type definition of axway-flow-sdk

Access: Public

ParameterTypeDescription
req
request
The Request object.
cb
callback
The output callback.

...

Kind: Inner type definition of axway-flow-sdk

Access: Public

ParameterTypeDescription

[err]

*
A non null value indicates a terminal error (flow processing will stop).
[value]
*
The output value to be written back to the flow processing context.

...

Kind: Inner type definition of axway-flow-sdk

Properties:

NameTypeDescription
envobjectThe application configuration.
paramsobjectThe params method, as supplied during runtime (see .parameter).