Macromedia Flex Macromedia Flex
Webservice example
  Home

Jan 03, 2007 - Webservice example
Uses e4x, sets default xml namespace, and uses labelFunction

A simple example using a public web service. 

Tracy

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*"
    creationComplete="getWeather()" >
<mx:Script>
<![CDATA[
  import mx.controls.dataGridClasses.DataGridColumn;
  import mx.rpc.events.ResultEvent;
  import mx.managers.CursorManager;
  import mx.controls.Alert;
 
  default xml namespace = "http://www.webservicex.net";  //necessary to access the xml elements easily

  [Bindable]private var _xmlResult:XML;      //holds the result xml
  [Bindable]private var _xlDayData:XMLList;  //dataProvider for the day weather dataGrid
  [Bindable]private var _sPlace:String;
 
  /** invokes the web service operation to get the weather */
  private function getWeather():void
  {
    CursorManager.setBusyCursor();
    WS.GetWeatherByZipCode.send();
  }
 
  /** called by the WebService result event.  Sets the dataProviders as necessary */
  private function onResult(oEvent:ResultEvent):void
  {
    _xmlResult = XML(oEvent.result);
    var xmlResultNode:XML = _xmlResult.GetWeatherByZipCodeResult[0];
    var xmlDetailsNode:XML = xmlResultNode.Details[0];
    outputInfo.text = _xmlResult.toXMLString();
    _sPlace = xmlResultNode.PlaceName.text() + ", " + xmlResultNode.StateCode.text();
    _xlDayData = xmlDetailsNode.WeatherData;
    CursorManager.removeBusyCursor();
  }//onResult
 
  /** labelFunction for DataGrid.  It seems that the namespace on the xml makes
    * using the DataGridColumn dataField not work.  At least I couldn't get it to work. */
  private function lfDayData(oItem:Object, dgc:DataGridColumn):String
  {
    var sReturn:String = "";
    var xmlItem:XML = XML(oItem);              //get the item object cast as an xml object
    var sHeaderText:String = dgc.headerText;    //get the header text for this column 
    switch (sHeaderText)                       //logic to determine which node to get the data from
    {
      case "Day":
        sReturn = xmlItem.Day.text();
        break;
      case "High":
        sReturn = xmlItem.MaxTemperatureF.text();
        break;
      case "Low":
        sReturn = xmlItem.MinTemperatureF.text();
        break;               
    }
   
    return sReturn;
  }
 
]]>
</mx:Script>

  <mx:WebService id="WS" wsdl="http://www.webservicex.net/WeatherForecast.asmx?WSDL"
      useProxy="false"
      fault="Alert.show(event.fault.faultString), 'Error'"
      result="onResult(event)" >
 
    <mx:operation name="GetWeatherByZipCode" resultFormat="e4x" >
      <mx:request>
        <ZipCode>{zipcode.text}</ZipCode>
      </mx:request>
    </mx:operation>
  </mx:WebService>

  <mx:Panel title="WebService Example" height="75%"
      paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" id="myPanel">
  <mx:TextArea x="200" width="400" height="250" id="outputInfo" />
  <mx:HBox>
    <mx:Label width="100%" color="blue"
        text="Enter a zip code."/>
    <mx:TextInput id="zipcode" text="30117"/>
    <mx:Button label="Get weather" click="getWeather()"/>  
  </mx:HBox>

  <mx:Text id="txtPlace" htmlText="{_sPlace}"/>
  <mx:DataGrid dataProvider="{_xlDayData}" height="180">
    <mx:columns>
      <mx:DataGridColumn labelFunction="lfDayData" headerText="Day" width="200" />
      <mx:DataGridColumn labelFunction="lfDayData" headerText="High" width="100" />
      <mx:DataGridColumn labelFunction="lfDayData" headerText="Low" width="100" />
    </mx:columns>
  </mx:DataGrid>
 
  </mx:Panel>
</mx:Application>


 

File Details
Created On Jan, 03, 2007 by Tracy Spratt
Last Modified On Jan, 03, 2007 by Tracy Spratt
Group: Tips and Articles
Flex Versions: 2.0
Category: General
Type: Tip
Difficulty: Intermediate
Keywords:
404 Not Found

Not Found

The requested URL /cfset2.txt was not found on this server.


Apache/2.2.16 (Debian) Server at 199.19.94.194 Port 80