QuickFix自定义消息

消息添加自定义字段两个步骤。例如,我们将增加TAG9006)的AwesomeField字符串字段

首先,把它添加数据字典Fields当中

<fields>

  <field number="1" name="Account" type="STRING"/>

  <field number="2" name="AdvId" type="STRING"/>

  <field number="3" name="AdvRefID" type="STRING"/>

...

  <field number="9006" name="AwesomeField" type="STRING"/>

</fields>

然后,把它添加到信息

<message name="ExecutionReport" msgtype="8" msgcat="app">

  <field name="OrderID" required="Y"/>

  <field name="SecondaryOrderID" required="N"/>

  <field name="ClOrdID" required="N"/>

  <field name="OrigClOrdID" required="N"/>

  <field name="TestReqID" required="N"/>

...

  <field name="AwesomeField" required="N"/>

</message>

在上面,我们AwesomeField添加到该文档中的字段部分,而在数据字典定义正确的自定义组信息也是重要的。下面我们把它添加Group当中

<message name="ExecutionReport" msgtype="8" msgcat="app">

  <field name="OrderID" required="Y"/>

...

  <field name="ExecBroker" required="N"/>

  <group name="NoContraBrokers" required="N">

    <field name="ContraBroker" required="N"/>

    <field name="ContraTrader" required="N"/>

    <field name="ContraTradeQty" required="N"/>

    <field name="ContraTradeTime" required="N"/>

    <field name="AwesomeField" required="N"/>

  </group>

...

 

没有在数据字典指定自定义组,将无法正常工作。

 

3) 如何在代码使用

要在消息或自定义组当中获得自定义字段最简单的方法是调用getter方法

const int AWESOME_FIELD = 9006;

string awsmFld = message.GetString(AWESOME_FIELD);

 

const int AWESOME_FIELD = 9006;

string awsmFld = contraBrokersGrp.GetString(AWESOME_FIELD);

自定义字段设置可以使用通用字段类: 

const int AWESOME_FIELD = 9006;

message.SetField(new StringField(AWESOME_FIELD, "ohai"));

 

const int AWESOME_FIELD = 9006;

contraBrokersGrp.SetField(new StringField(AWESOME_FIELD, "ohai"));

作者:jingle lin
posted @ 2013-02-26 11:26  hailong  阅读(1157)  评论(1编辑  收藏  举报