The OMM documentation indicates that the set definition encoding can be used when encoding in order to save bandwidth. I am using MarketPrice domain which returning FieldList in payload.
I would like to use FieldList’s set definitions for payload in the MarketPrice response.
The typical type of set definitions used throughout the system today are 'local' set definitions. Local set definitions are carried in the same payload with the content that it is optimized and is housed in the wrapping containers encoding. If you look at the Map, Vector, or Series container interfaces you will see that they have encSetDefs as well as methods for helping to encode set definitions into the container headers. This helps achieve higher optimization for repetitive content as things like fieldID is sent once (in the encoded set definition) and every container entry can optimize it out.
Field List and Element List do not have a way to carry set definitions unless they are housed inside of another container. This is largely due to diminishing returns on optimization on a single flat field list/element list, the savings really come in when the definition optimizes repeating content.
Global set definitions would likely provide more of what you are looking for. This is where the definitions are created once and exchanged out of band, sort of like a Dictionary request. This lets the application have a database of the known definitions that they reuse so they do not need to be sent in-line with the content they optimize. This allows bandwidth savings across messages more effectively than local set definitions. From an application perspective, other than obtaining these definitions they would work very similarly from an encoding and decoding perspective.
Section 5.7 in the UPA/ETA RDM Usage Guide defines the format for global set definition exchange. Your providing application would most likely define its universe of definitions and encode these in the format described in the RDM Usage Guide. It can then advertise that dictionary in its Source Directory, honoring any requests for it and providing it to client apps. When encoding your Field Lists that abide by a definition in your global set definition database, you would use its setId in the field list header and encode similar to what is shown in the UPA/ETA Dev Guide chapter 11.6. The client apps, after they have the definitions downloaded and decoded into a database, can pass this in for decoding. This concept is not heavily used today because it requires a lot of coordination and tight management of those definitions to ensure no collisions across components. The rsslEDFExample shows use of global set definitions from a decoding perspective, where the example is expected to connect to the components in the EDF product to download definitions.
Hope this helps,