question

Upvotes
Accepted
3 0 0 1

Application migration from SSL to RFA

Hi,

I have a customer that migrated an application from very old SSL (they named it as Triarch SSL, I think it is Marketfeed SSL) to RFA 7.

They found a strange behavior in some RICs like .SAR1MC in prices being displayed in field TRDPRC_1 because when requesting RIC during the day, the value is completely wrong and change between request, but when they request the price around 18:00 GMT, or later, the value is the correct one.

Do you have an idea about what could be the reason for that behavior? Do they need to use a specific Dictionary?

Thanks & Regards,

Alfredo

#contentfieldsmarket-price
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.

Upvote
Accepted
18k 83 39 63

Hi @alfredo.brito01

You are correct. The TRDPRC_1 (Fid 6) is being published. I just checked the source code within the utility I used in the above display (SpeedGuide) and do see this:

ahs.png

Note: SpeedGuide is written using the strategic RealTime SDKs (Java version).

In here, if a FID is flagged as BLANK, then it will not be displayed. The NEWS field is actually not BLANK, but contain an empty string.

In the above RTSDK Java code, the logic is for each field within the response, you should be able to detect if the value is blank (True) and if so, do not process the field buffer to extract a value.

In RFA, the message processing for blank fields can be performed before you determine the type of data field, which is consistent with the way it is done in RTSDK. For example, below is taken from the RFA docs:

ahs.png

You only need to determine if the field is blank once, not after you process the type of field as the above code you provided is showing.

It is also worth noting that the RFA libraries will be end of life in the future. I don't know the history of the decision to migrate to this particular API, but I thought you should be aware.


ahs.png (26.1 KiB)
ahs.png (93.7 KiB)
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.

Upvotes
18k 83 39 63

Hi @alfredo.brito01

This doesn't appear to be an issue related to the API/technology but rather a potential issue with the content. This site does not have the resources nor content experts to confirm or troubleshoot issues with our data. I would suggestion you reach out to the Helpdesk and simply mention the RIC and the data the client is observing. There is no need to mention the technology you are using as they may inadvertently bring you back here.

Hope this helps.

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.

Upvotes
3 0 0 1

Hi Nick,

Apparently this is not related with content but with the way code is managing the value received in field TRDPRC_1 when there is no price published (as far as I could check, during the day the RICs .SAR1MC, .SAR3MC and .SAR6MC have the field empty. Only around 18:00 GMT these RICs publish the value on TRDPRC_1 field)

Customer developer is now trying to manage this issue with “IsBlank” component. Apparently even with this component as “false” the code is getting the content of dataBuffer to populate the variable “valor”. The DataBuffer returns always a value even if “IsBlank” is set to “false”, and seems this is responsible to have code displaying the erroneous values when there is no price in TRDPRC_1.

Customer developer added code highlighted in bold to play with “IsBlank” component to try to fix the issue, and apparently it solves the issue but still in test. Could you please confirm if this is an appropriate way to manage empty fields?


private string mDecodeDataBuffer(DataBuffer dataBuffer)

{

string valor = "";

switch (dataBuffer.DataBufferType)

{

case DataBuffer.DataBufferEnum.Int:

case DataBuffer.DataBufferEnum.UInt:

if (dataBuffer.IsBlank)

valor = null;

else

valor = dataBuffer.Int.ToString();

break;

case DataBuffer.DataBufferEnum.Float:

case DataBuffer.DataBufferEnum.Double:

case DataBuffer.DataBufferEnum.Real:

if (dataBuffer.IsBlank)

valor = null;

else

valor = dataBuffer.Double.ToString();

break;

case DataBuffer.DataBufferEnum.StringAscii:

case DataBuffer.DataBufferEnum.StringUTF8:

valor = dataBuffer.GetAsString().ToString();

break;

case DataBuffer.DataBufferEnum.Buffer:

case DataBuffer.DataBufferEnum.StringRMTES:

valor = dataBuffer.GetAsString().ToString();

break;

case DataBuffer.DataBufferEnum.Date:

valor = dataBuffer.Date.Year.ToString("0000") + "-" + dataBuffer.Date.Month.ToString("00") + "-" + dataBuffer.Date.Day.ToString("00");

break;

case DataBuffer.DataBufferEnum.Time:

valor = dataBuffer.Time.Hour.ToString("00") + ":" + dataBuffer.Time.Minute.ToString("00") + ":" + dataBuffer.Time.Second.ToString("00") + "." + dataBuffer.Time.Millisecond.ToString("000");

break;

case DataBuffer.DataBufferEnum.DateTime:

valor = dataBuffer.Date.Year.ToString("0000") + "-" + dataBuffer.Date.Month.ToString("00") + "-" + dataBuffer.Date.Day.ToString("00") +

" " + dataBuffer.Time.Hour.ToString("00") + ":" + dataBuffer.Time.Minute.ToString("00") + ":" + dataBuffer.Time.Second.ToString("00") + "." + dataBuffer.Time.Millisecond.ToString("000");

valor = dataBuffer.DateTime.ToString();

break;

case DataBuffer.DataBufferEnum.NoDataBuffer:

case DataBuffer.DataBufferEnum.UnknownDataBuffer:

default:

break;

}

return valor;

}

Thanks & Regards

Alfredo

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.

Upvote
18k 83 39 63

Hi @alfredo.brito01,

I just checked all 3 of the RICs provided and the TRDPRC_1 field is not sent within the Refresh. For example:

I highlighted 2 things above that are important. First, there is no TRDPRC_1 field at all. So the concept of checking isBlank() is not valid because the field doesn't exist. Second, I highlighted FID 28 (NEWS) as an example of a field where you can apply the isBlank() check.

I'm assuming the code you have above is attempting to inspect FID 6 (TRDPRC_1)? Sorry, I'm not following because when you process the incoming refresh, you would not even see a TRDPRC_1. Are you saying they are always seeing a TRDPRC_1? Because what I'm seeing above is that the TRDPRC_1 field does not even exist so I'm not sure what they are attempting to process.



ahs.png (45.8 KiB)
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.

Upvotes
3 0 0 1

Hi Nick,

I don´t understand why you say that field TRDPRC_1 doesn´t exists in ric .SAR3MC because I am seeing it in fields list of Eikon and I am sure when price is published (around 6PM GMT) the price appears in this field.

During the day, Eikon interprets this field content as +0 (not sure if this is because field is empty or if it is zero or if it has any other character).

1712325025709.png


1712325025709.png (90.6 KiB)
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.

Upvotes
3 0 0 1

Hi Nick, as said, price is published in TRDPRC_1 field around 18h00 (GMT+1).

1712339255793.png


1712339255793.png (114.2 KiB)
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.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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