ChannelDictionary vs FileDictionary, which one should I use

Y_Intercept
Y_Intercept Newcomer
edited January 6 in EMA

Currently we are using Real-Time SDK's C# version. Our program uses an EmaConfig.xml file as demonstrated in some sample programs. I am aware of this section in the file:

<DictionaryList>
    <Dictionary>
        <Name value="Dictionary_1"/>
        <!-- dictionaryType is optional: defaulted to ChannelDictionary" -->
        <!-- possible values: ChannelDictionary, FileDictionary -->
        <!-- if dictionaryType is set to ChannelDictionary, file names are ignored -->
        <DictionaryType value="DictionaryType::ChannelDictionary"/>
    </Dictionary>
    <Dictionary>
        <Name value="Dictionary_2"/>
        <DictionaryType value="DictionaryType::FileDictionary"/>
        <!-- dictionary names are optional: defaulted to RDMFieldDictionary and enumtype.def -->
        <RdmFieldDictionaryFileName value="./Configs/Refinitiv/RDMFieldDictionary"/>
        <EnumTypeDefFileName value="./Configs/Refinitiv/enumtype.def"/>
    </Dictionary>
</DictionaryList>

Currently the consumers defined in EmaConfig.xml file all use Dictionary_2, i.e., a DictionaryType::FileDictionary. It causes a minor inconvenience to use, as you see we need to specify RdmFieldDictionaryFileName and EnumTypeDefFileName, which are paths relative to current working directory. It means if we start the program using absolute path, i.e., current working directory is not set, the program won't work.

We want to solve this issue. Could you let me know whether switching to Dictionary_1, that is. the "ChannelDictionary", can solve this issue. It sounds to me that "FileDictionary" means we use the local version and "ChannelDictionary" means each time we fetch the dictionary from server. Is this understanding correct?

Best Answer

  • Gurpreet
    Gurpreet admin
    Answer ✓

    Hello @Y_Intercept,

    Yes, your understanding is correct. The field dictionaries are modified over time and new fields get added; so its always recommended to get the dictionary from the server when the application starts. By doing this any new fields which get added over time, won't cause an exception condition in your application.

    Only time when field dictionary should be loaded from a local file is when custom (user defined) fields are being used within an application. This is mostly the case with apps which publish or consume locally published data.

Answers

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @Y_Intercept

    You can specify absolute paths in the configuration file. For example:

    <Dictionary>
    			<Name value="Dictionary_2"/>
    			<DictionaryType value="DictionaryType::FileDictionary"/>
    
    			<!-- dictionary names are optional: defaulted to RDMFieldDictionary and enumtype.def -->
    			<RdmFieldDictionaryFileName value="C:\D_DRIVE\temp\RTSDK-2.2.3.L1.CSharp.rrg\RTSDK-2.2.3.L1.CSharp.rrg\CSharp\etc\RDMFieldDictionary"/>
    			<EnumTypeDefFileName value="C:\D_DRIVE\temp\RTSDK-2.2.3.L1.CSharp.rrg\RTSDK-2.2.3.L1.CSharp.rrg\CSharp\etc\enumtype.def"/>
    		</Dictionary>
    
  • @Jirapongse as of now our practice is add this EmaConfig.xml as a static file to git and it gets deployed to server as a part of CI/CD. It has version number in path so we would need to make Ci/CD more complicated (i.e., string replacement) to make this work. But anyways, as @Gurpreet said ChannelDictionary is almost always a better option.