i.e. : Using Secondary Tables in Live Data Sources
The sample XML below will be used to illustrate the concepts presented in this discussion.
There are 4 <item> nodes, each representing a record.
They can be categorized by the value in the <type> nodes.
Let's say you would like to retrieve all the data at once, but show them in lists that only show records of one type.
As remote data sources do not filter data locally (their data source filters modify the query URL), the way to do this is by using secondary tables in the remote data source.
<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml-stylesheet type="text/xsl" href="http://www.ctv.ca/mar/xsl/rss.xsl"?> <rss version="2.0"> <channel> <item> <title><![CDATA[TestTitle]]></title> <link>http://eachscape.com/links</link> <guid>001</guid> <type>entertainment</type> <author><![CDATA[Steve Smith]]></author> <description><![CDATA[Steve Smith]]></description> </item> <item> <title><![CDATA[TestTitle2]]></title> <link>http://eachscape.com/links2</link> <guid>002</guid> <type>game</type> <author><![CDATA[Steve Smith]]></author> <description><![CDATA[Steve Smith]]></description> </item> <item> <title><![CDATA[TestTitle3]]></title> <link>http://eachscape.com/links3</link> <guid>002</guid> <type>game</type> <author><![CDATA[Steve Smith]]></author> <description><![CDATA[Steve Smith]]></description> </item> <item> <item> <title><![CDATA[TestTitle4]]></title> <link>http://eachscape.com/links4</link> <guid>002</guid> <type>entertainment</type> <author><![CDATA[Steve Smith]]></author> <description><![CDATA[Steve Smith]]></description> </item> </channel> </rss>
Having that in mind, here are the steps to create the secondary data source.
1.
Create the data source datasource with one table (we call that the primary table).
It refers to all the data.
record /rss/channel/item name=allitems field author field description field enclosure field guid field link name=link2 field pubDate field title name=title2 field enclosure/@url name=image end
2.
To create a secondary table, add another table descriptor after the one for the primary table.
Notice that we must also refer to the name of the primary table by adding “primary=allitems” on the record definition of the secondary table.
This identifies the secondary table, like this:
record /rss/channel/item name=allitems field author field description field enclosure field guid field link name=link2 field pubDate field title name=title2 field enclosure/@url name=image end record /rss/channel/item[type='entertainment'] name=entertainmentitems primary=allitems field author field description field enclosure field guid field link name=link2 field pubDate field title name=title2 field enclosure/@url name=image end
3.
So now, in the entertainment view, If you create the list, you can refer table ds:/ABC/entertainmentitems as the datasource, assuming you named the data source ABC.
One thing that you need to remember is that “Refresh Data Source” on the primary table will refresh all the secondary data sources that depend on it. On the other hand, “Refresh Data Source” on the secondary data source will not cause the primary data source to be refreshed.