Routing Rules and Session Events: XML Transformation Language
- 1 Overview
- 2 Rule element
- 2.1 Source element
- 2.2 Condition element
- 2.2.1 Condition element extensions
- 2.2.2 Functions of Condition element
- 2.2.2.1 EqualField
- 2.2.2.2 NotEqualField
- 2.2.2.3 FieldIsLessThan
- 2.2.2.4 FieldIsGreaterThan
- 2.2.2.5 MatchField
- 2.2.2.6 NotMatchField
- 2.2.2.7 FieldContains
- 2.2.2.8 MsgType
- 2.2.2.9 FieldIsToday
- 2.2.2.10 FieldBeginsWith
- 2.2.2.11 FieldLengthGreaterOrEqual
- 2.2.2.12 FieldCheckBits
- 2.2.2.13 ExistField
- 2.2.2.14 NotExistField
- 2.2.2.15 MatchMessage
- 2.2.2.16 NotMatchMessage
- 2.2.2.17 IsSessionActive
- 2.2.2.18 EqualDestination
- 2.2.2.19 NotEqualDestination
- 2.2.2.20 MatchDestination
- 2.2.2.21 NotMatchDestination
- 2.2.2.22 Script
- 2.2.2.23 LDAPAuthenticate
- 2.3 Action element
- 2.3.1 ActionIfTrue and ActionIfFalse elements
- 2.3.2 Session instructions
- 2.3.2.1 StartSession
- 2.3.2.2 DisconnectSession
- 2.3.2.3 TerminateSession
- 2.3.3 Sending instructions
- 2.3.3.1 Send
- 2.3.3.2 SystemCommand
- 2.3.3.3 StrategySend
- 2.3.4 Instructions for modifying Fields
- 2.3.4.1 SetField
- 2.3.4.2 CopyField
- 2.3.4.3 MoveField
- 2.3.4.4 RemoveField
- 2.3.4.5 ModifyField
- 2.3.4.6 DecryptField
- 2.3.4.7 HashField
- 2.3.5 Instructions for work with Histories
- 2.3.5.1 SaveToHistory
- 2.3.5.2 ClearHistory
- 2.3.6 Instructions for message transformation
- 2.3.6.1 ProcessNetStatusRequest
- 2.3.6.2 Transform
- 2.3.6.3 Convert
- 2.3.6.4 HandlerAction
- 2.3.6.5 CreateReject
- 2.3.6.6 ConvertToBusinessReject
- 2.3.6.7 Script
- 2.3.6.8 CreateNotification
- 2.3.6.9 StopProcessing
- 2.3.6.10 FormatSymbol
- 3 Cases of Routing Rules
- 4 Session Events
- 4.1 Element CreateSessionEvent
- 4.1.1.1 Example:
- 4.1.2 CreateSessionActionIfTrue(-IfFalse) element
- 4.1.2.1 AcceptSession
- 4.1.2.2 RejectSession
- 4.1.2.3 HandlerAction
- 4.1.2.4 Script
- 4.1.2.5 DecryptField
- 4.1.2.6 HashField
- 4.1.3 Example:
- 4.2 Element DestroySessionEvent
- 4.2.1 DestroySessionAction element
- 4.2.1.1 HandlerAction
- 4.2.1.2 Script
- 4.2.2 Example:
- 4.2.1 DestroySessionAction element
- 4.3 Element OnNotificationEvent
- 4.4 Element OnUndeliveredMessageEvent
- 4.5 Element OnSessionLevelRejectEvent
- 4.6 Element OnSessionLevelRejectWithSeqNumTooHighEvent
- 4.7 Element OnOutgoingSessionLevelRejectEvent
- 4.8 Element OnRuleFailEvent
- 4.9 BL loops and finite control
- 4.1 Element CreateSessionEvent
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:
New session was created. See 'Element CreateSessionEvent'.
Session was destroyed. See 'Element DestroySessionEvent'.
Inability to route a message to a specified target. See 'Element OnUndeliveredMessageEvent'.
Session level reject was received in response to the sent application message. See 'Element OnSessionLevelRejectEvent'.
Session level reject was received with unexpectedly high sequence numbers. See 'Element OnSessionLevelRejectWithSeqNumTooHighEvent'.
Session level reject was sent in response to the received application message. See 'Element OnOutgoingSessionLevelRejectEvent'.
Routing rule failed during execution. See 'Element OnRuleFailEvent'.
Allowed memory usage is reached and exceeded. See 'Element OnNotificationEvent'.
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 ‘_’ ;