HOW TO: ADOBE FLEX AND GETTING DATA FROM A .NET WEB SERVICE WHICH RETURNS XML DATA
2010-01-20
REFERENCES i USED TO GET THIS FAR:
SEARCH TERMS I USED:
=====================================
xml data binding flex web services
flex xml data binding using xml from a .net web service
how to work with xml data using flex returned from a .net web service
flex and xml .net web services
WEBSITES WHICH HELPED BUT NEVER GOT ME ALL THE WAY
==========================================================
(REALLY GOOD EXAMPLE)
(ALMOST GOT ME ALL THE WAY)
(GAVE ME THE EXTRA PUSH WITH USING THE XML DATA TYPE AND e4x FORMAT
THE FIRST WEBSITE WAS PERFECT FOR TURNING A QUERY
RESULT(DATAGRID) INTO A USEABLE LIST IN FLEX
http://www.codeproject.com/KB/aspnet/FlexASPWebService.aspx
BUT i WANT THE NEXT STEP:
RETURNING XML DATA FROM A .NET WEB SERVICE INTO A FLEX WEB APPLICATION
HERE IS THE XML .NET 3.5 WEB SERVICE CODE (YES XML IS RETURNED)
<WebMethod(Description:="Returns sample XML Data", EnableSession:=False)> _
Public Function getSampleXmlData() As String
Dim locStringBuild As New StringBuilder()
locStringBuild.Append("<?xml version='1.0' encoding='utf-8'?>")
locStringBuild.Append("<Data>")
locStringBuild.Append("<Person>")
locStringBuild.Append("<Name>WS-Ed Herrmann</Name>")
locStringBuild.Append("<Location>WS-New Jersey</Location>")
locStringBuild.Append("<Age>34</Age>")
locStringBuild.Append("</Person>")
locStringBuild.Append("<Person>")
locStringBuild.Append("<Name>WS-Dan McWeeney</Name>")
locStringBuild.Append("<Location>WS-New Jersey</Location>")
locStringBuild.Append("<Age>27</Age>")
locStringBuild.Append("</Person>")
locStringBuild.Append("<Person>")
locStringBuild.Append("<Name>WS-Matthias Zeller</Name>")
locStringBuild.Append("<Location>WS-California</Location>")
locStringBuild.Append("<Age>34</Age>")
locStringBuild.Append("</Person>")
locStringBuild.Append("</Data>")
Return locStringBuild.ToString()
End Function
HERE IS THE MXML CODE FOR THE FLEX APPLICATION
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()">
private function xmlWSResult(event:ResultEvent):void{
var myPeople:XML = new XML(event.result);
myDataGrid.dataProvider = myPeople.Person;
if (event.result != null){
Alert.show("Event Result ----found");
//build an array to store our totals for each location
var locationArray:Array = new Array;
for each (var node:XML in event.result ){
Alert.show("Node hit");
}
}
else {
Alert.show("Event Result is null");
}
//Alert.show("DATA RETRIEVED");
}
private function xmlWSResult(event:ResultEvent):void{
var myPeople:XML = new XML(event.result);
myDataGrid.dataProvider = myPeople.Person;
if (event.result != null){
Alert.show("Event Result ----found");
//build an array to store our totals for each location
var locationArray:Array = new Array;
for each (var node:XML in event.result ){
Alert.show("Node hit");
}
}
else {
Alert.show("Event Result is null");
}
}
<mx:WebService id="ws" wsdl="https://MYSAMPLESITE.COM?WSDL"
fault="fault(event)">
<mx:operation
name="getSampleXmlData"
resultFormat="object"
result="xmlWSResult(event)"
/>
</mx:WebService>
<mx:DataGrid x="10" y="42" width="490" height="237" id="myDataGrid">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="Name"/>
<mx:DataGridColumn headerText="Location" dataField="Location"/>
<mx:DataGridColumn headerText="Age" dataField="Age"/>
</mx:columns>
</mx:DataGrid>
THE DIFFERENCE BETWEEN THIS CODE USING FLEX FRAMEWORK 3.5 AND THE OTHER WEBSITES AT THE TOP IS TWO LINES OF CODE:
var myPeople:XML = new XML(event.result);
myDataGrid.dataProvider = myPeople.Person;
NOTICE: WHEN USING THE XML DATA...THE FIRST NODE IS ALWAYS INVISIBLE..
IN THE ABOVE EXAMPLES IS INVISIBLE
<DATA>
</DATA>