Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
ionatan
Level 8

Roku Firmware 8 - Issue with hasField function

I'm not sure if this is the right place to report an issue with Roku OS but I think I've found an issue with hasField function on Roku OS 8 https://sdkdocs.roku.com/display/sdkdoc/ifSGNodeField#ifSGNodeField-hasField(fieldNameasString)asBoo....
This function returns true for field name "channeltype" even if this field is not added and set yet.

Please see my code below:
contentNode = CreateObject("roSGNode","ContentNode")
if contentNode.hasField("channeltype") = true
    print "SET FIELD channeltype"
    contentNode.setField("channeltype", "test1")
else
    print "ADD AND SET channeltype"
    contentNode.addField("channeltype", "string", false)
    contentNode.setField("channeltype", "test1")
end if
? contentNode

Result:
SET FIELD channeltype
<Component: roSGNode> =
{
    change: <Component: roAssociativeArray>
    focusable: false
    focusedChild: <Component: roInvalid>
    id: ""
    CHANNELTYPE: invalid
}


If I run the code from above for other field name (channeltype1) the code works. Please see below:
contentNode = CreateObject("roSGNode","ContentNode")
if contentNode.hasField("channeltype1") = true
    print "SET FIELD channeltype1"
    contentNode.setField("channeltype1", "test1")
else
    print "ADD AND SET channeltype1"
    contentNode.addField("channeltype1", "string", false)
    contentNode.setField("channeltype1", "test1")
end if
? contentNode

Result:
ADD AND SET channeltype1

<Component: roSGNode> =
{
    change: <Component: roAssociativeArray>
    focusable: false
    focusedChild: <Component: roInvalid>
    id: ""
    channeltype1: "test1"
}


If I run addField and setField for "channeltype" field name the value is set properly.
Please see below:
contentNode = CreateObject("roSGNode","ContentNode")
print "ADD AND SET channeltype"
contentNode.addField("channeltype", "string", false)
contentNode.setField("channeltype", "test1")
? contentNode

Result:
ADD AND SET channeltype

<Component: roSGNode> =
{
    change: <Component: roAssociativeArray>
    focusable: false
    focusedChild: <Component: roInvalid>
    id: ""
    channeltype: "test1"
}
0 Kudos