Routing Rules and Session Events: XML Transformation Language

Routing Rules and Session Events: XML Transformation Language

Overview

Routing rules are main elements in FIXEdge configuration file. They contain FIXEdge instructions for:

  • Routing of incoming and outgoing FIX messages (via the correspondence between ClientID and FIX Session).

  • Filtering of incoming and outgoing FIX messages.

  • Transformation of incoming and outgoing FIX messages

More than one rule can be applied to a message. It is also possible to route one message to multiple destinations or to the same destination multiple times. See section 'Cases of Routing Rules' for details. All rules are applied to each FIX message separately (independently) in the order set in the configuration file. Even if a set of transformation actions is applied to messages, the next rule will be applied to the original message. Details are described in the Rule element section.

Session Events are a special kind of business rules that handle events launched during execution. The following FIXEdge events can be processed:

Be careful, while Routing rules mechanism is very flexible, you can even implement loops, and, as a case infinite loops. For example, you create a route message from client "The client" - > "Some another client" - > "The client". And if "The client" is able to process its own message and output is the same or meet the rule above, you will take a risk to get infinite loop. To take more detailed description and ways to avoid such behavior, see the 'BL loops and finite control' section.

Rule element

Element <Rule> is meant to describe one Routing rule. Each <Rule> element consists of 3 sections (XML elements):

Name

Section Description

<Source>

Mandatory section. This section defines instructions for primary filtering of messages. <Source> element defines a source from which the FIX message can come. If the message source coincides with the source defined in the section <Source> then the rule will be applied to the message. See part 'Source element' for details.

<Condition>

Optional section. This section contains a set of pre-defined criteria. The application checks FIX messages on the criteria and if the criteria is met the instructions are to be executed; otherwise section <Action> is ignored. See part 'Condition element' for details.

<Action>

Mandatory section. The section denotes the instructions that must be performed when a Rule is being applied to a message. It must contain at least one instruction. See part 'Action element' for details.

<Rule>  element has two attributes:

Attribute

Description

Enabled

Optional. Possible values "true" or "false". <Rule Enabled=”false”> disables rule parsing by Business Layer and the rule is not loaded into the memory. By default the attribute value has a "true" value.

Description

Optional. Used for naming of rules

Example:

<Rule Enabled="true" Description="Save order data"> <Source> <!-- Source (FIX session or Transport Client) definition --> </Source> <Condition> <!-- conditions definition --> </Condition> <Action> <!-- actions definition --> </Action> </Rule>

Note: Any XML comments cannot be inside <Rule> structure, only outside the rule. If the formed rules do not meet the syntax requirements, FIXEdge stops loading and records an error message in the log file.

Source element

Source from which the FIX message can come for processing, defines either a FIX Session or a Transport Client (i.e. Transport Adaptor Session) by means of one of 3 variants:

  • by the element FIXSession

Defines FIX session as a source; FIX session is identified either by the pair of attributes "SenderCompID" and "TargetCompID" or by the set of attributes "SenderCompID",  "TargetCompID" and "SessionQualifier".

Example:

<Source> <FixSession SenderCompID="Sender" TargetCompID="Target" SessionQualifier="Q1" /> </Source>

The values of the attributes have to coincide with values defined for properties: FixLayer.FixEngine.Session.<Name>.SenderCompID and FixLayer.FixEngine.Session.<Name>.TargetCompID (and optionally FixLayer.FixEngine.Session.<Name>.SessionQualifierValue) which were configured for FIX Sessions.

  • by the element Client

Defines Transport Client as source; The attribute "name" of the element <Client> is used

Example:

<Source> <Client Name="TestClient"/> </Source>

See also configuring Transport Adaptors (for example: property TransportLayer.SmtpTA.SMTPSessions)

  • by the attribute "Name"

Defines the identifier of FIX session or Transport Client as source; The attribute "name" of the element <Source> is used

Example:

<Source Name="SourceID"/>

Note: It is possible to use the rule for all configured sessions. In this case it is necessary to use pair of symbols ".*" in the attributes' values.

For example:

<!-- Messages from any transport adaptors will be processed --> <Source> <Client Name=".*"/> </Source>   <!-- Messages from any FIX sessions related to TargetCompID="Target" will be processed --> <Source> <FixSession SenderCompID=".*" TargetCompID="Target"/> </Source>

Note: Source identifier has the following restrictions:

  •  

    • The name of source identifier must be unique for each FIX session;

    • The source identifier of TA client must be represented as Client ID;

    • It must contain characters with codes from ASCII [30] to ASCII [128];

    • It must begin with a letter, digit or underlining symbol ‘_’ ;