Hey Guys

I have literally been banging my head on this for the last three days. 
I have used flex in a previous project, and had enormous success with 
the great charts and presentation layer. I am now taking on a fairly 
ambitious new project and wanted to do things a different way, as it 
needs to be scalable.

My previous project used HTTPServices to connect to a .aspx page, 
which in turn returned a XML page. This works, but is very messy.

I would now like to use webservices, as I think it would simplify 
things a great deal.

I have written the following service in ASP.NET, which works as it 
returns the XML document when I test the method by running the 
report.asmx file from the following link:

http://localhost:1464/MyProject/report.asmx/All_Entities

***********************************************************
WebMethods and function in ASP.NET Web service:

<WebMethod()> _
    Public Function HelloWorld() As String
        Return "This works"
    End Function

<WebMethod()> _
    Public Function All_Entities() As XmlDocument
        Return ReturnXMLData("sp_AllEntities", 0, "NA")
    End Function




Public Function ReturnXMLData(ByVal spName As String, _
                               ByVal numParams As Integer, _
                               ByVal ParamArray spParam() As String) 
As XmlDocument

        Dim cnString As String = 
ConfigurationManager.ConnectionStrings("cnDBConnect").ConnectionString

        Dim myConnection As New SqlConnection
        myConnection.ConnectionString = cnString

        Dim myCommand As New SqlCommand
        With myCommand
            .Connection = myConnection
            .CommandType = CommandType.StoredProcedure
            .CommandText = spName
        End With

        myConnection.Open()

        'Return the XML data from SQL and read into a string value
        Dim xmlr As System.Xml.XmlReader
        xmlr = myCommand.ExecuteXmlReader()
        xmlr.Read()

        Dim retXMLString As New StringBuilder
        retXMLString.Append("<data>")
        Do While xmlr.ReadState <> ReadState.EndOfFile
            retXMLString.Append(xmlr.ReadOuterXml())
        Loop
        retXMLString.Append("</data>")
        myConnection.Close()

        Dim xmlDoc As New XmlDocument()
        xmlDoc.LoadXml(retXMLString.ToString())
        Return xmlDoc

    End Function

***********************************************************
The XML output returned from the .NET web service is below. I copied 
this straight from the page returned inside Firefox after calling the 
webmethod:

<data>
<root EntityName="US" EntityId="1"/>
<root EntityName="EMEA" EntityId="2"/>
<root EntityName="Benelux" EntityId="3"/>
<root EntityName="Africa" EntityId="4"/>
<root EntityName="Asia" EntityId="5"/>
</data>
***********************************************************

I now need to catch the output (which I assume is a XML object) and 
then bind it to a datagrid or chart.

I have the following MXML component set up. It connects to the 
webservice, catches the result, and then converts it into XML. I then 
try to bind it to a datagrid. I also have a text box which binds to a 
method "HelloWorld()" which returns a string value and then correctly 
displays the text, so I know the connection works:

***********************************************************
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml"; width="100%" 
height="100%" >
    
        <mx:Script>
        <![CDATA[
                import mx.rpc.events.ResultEvent; 
                [Bindable]
                private var retData:XML;
                private var retList:XMLList;
                private var lstAM:ArrayCollection;
                            
                private function handleResult(event:ResultEvent):void{
                        
                        retData = event.result as XML;
                        retList = retData.data;
                        this.dgDataReturned.dataProvider = retList;
                }
                
        ]]>
        </mx:Script>
      
    <mx:Button label="Get String" click="{WS.HelloWorld();}"/>
    <mx:TextArea width="252" height="116" id="txtHello" 
text="{WS.HelloWorld.lastResult}"/>
      
    <mx:Button label="Get Data" click="{WS.All_Entities();}"/>
    <mx:DataGrid id="dgDataReturned">
        <mx:columns>
            <mx:DataGridColumn headerText="label" 
dataField="@EntityName"/>
            <mx:DataGridColumn headerText="data" 
dataField="@EntityId"/>
        </mx:columns>
    </mx:DataGrid>
          
        <mx:WebService id="WS" 
wsdl="http://metrix3/asp/metrixwebservice.asmx?wsdl";
                 result="handleResult(event);">
        </mx:WebService>

</mx:Box>

***********************************************************

I have tried just about anything to get this working, but as I have 
learned flex as I needed I don't really have the background knowledge 
to even ask the right questions when searching for answers.

I am not sure if there are other people struggling with this as well, 
but I think it must be a common problem. I just haven't been able to 
find any help online.

Any ideas would be appreciated.

Cheers
Duan



Reply via email to