129 12 16 27

RFA to download dictionary and save as a re-useable local dictionary

Is it is possible for RFA to download dictionary from ADS/ADH and save that dictionary for local use next time the app runs?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

52.4k 134 44 63

Yes, it is possible.

RDMFieldDictionary provides functions (encodeRDMFieldDictionary() and encodeRDMEnumDictionary()) to encode Series from RDMFieldDictionary. After that, the application can write the encoded buffer of Series to binary files.

#include <fstream> 
void Consumer::processDictionariesComplete() 
rfa::rdm::RDMFieldDictionary& dict = getRDMFieldDict(); 
rfa::data::Series rdmSeries; 
rfa::data::Series enumSeries; 

//Encode dictionary to Series 

ofstream rdmFile("rdmfield.bin", ios::out | ios::binary); 
ofstream enumFile("enumtype.bin", ios::out | ios::binary); 

//Get Encoded buffer of Series 
const rfa::common::Buffer& rdmBuffer = rdmSeries.getEncodedBuffer(); 
const rfa::common::Buffer& enumBuffer = enumSeries.getEncodedBuffer(); 

//Write encoded buffer to binary files 
rdmFile.write(reinterpret_cast<const char*>(rdmBuffer.c_buf()), rdmBuffer.size()); 

enumFile.write(reinterpret_cast<const char*>(enumBuffer.c_buf()), enumBuffer.size()); 

Then, the application can read those binary files and set the encoded buffers to the Series and then use RDMFieldDictionary::decodeRDMFieldDictionary() and RDMFieldDictionary::decodeRDMEnumDictionary() to decode the Series.

char* Consumer::ReadAllBytes(const char* filename, int* read) 
ifstream ifs(filename, ios::binary | ios::ate); 
ifstream::pos_type pos = ifs.tellg(); 
int length = pos; 
char *pChars = new char[length]; 
ifs.seekg(0, ios::beg);, length); 
*read = length; 
return pChars; 

void Consumer::DecodeDictionaryFromFiles() 
rfa::rdm::RDMFieldDictionary& newDict = rfa::rdm::RDMFieldDictionary::create(); 
rfa::data::Series rdmSeries, enumSeries; 
rfa::common::Buffer rdmBuffer, enumBuffer; 
int rdmSize, enumSize; 
char* rdmSeriesData = ReadAllBytes("rdmfield.bin", &rdmSize); 
char* enumSeiresData = ReadAllBytes("enumtype.bin", &enumSize); 

//Set binary data to the buffers 
rdmBuffer.setFrom(reinterpret_cast<const unsigned char*>(rdmSeriesData), rdmSize); 
enumBuffer.setFrom(reinterpret_cast<const unsigned char*>(enumSeiresData), enumSize); 

//Set buffers to Series 

//Decode Series with RDMFieldDictionary 

delete rdmSeriesData; 
delete enumSeiresData; 
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

24.9k 86 10 22

Hi @Akechi Sato

As you may know, changes are made to the dictionary as & when required by Thomson Reuters e.g. there have been 5 dictionary service packs released in the past 6 months to add new Fields and update/add Enumeration types.

If the application consumes data which contains a new Field that does not exist in the local cached dictionary or if the definition of the field or list of enumerated values have changed, the application could experience a problem.

Please make your client aware of this.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.