1 Reply Latest reply on Jul 11, 2006 12:57 PM by Flex harUI

    filling a tree with the result of calls to a document/wrapped soap1.1 webservice

    vrlink
      Hi,

      I'm having trouble with filling a tree with the result to calls to a document/wrapped soap 1.1 webservice.

      I first declared the webservice in the mxml file as it was in the examples and tried to call it with no luck. The fault was it wasn't finding the document type for the call's unique parameter. I figured out the solution to this, I added a method in the webservice declaration having a single element named the same as the required parameter, and inside it, the "actual" parameters, bound to variables defined elsewhere.

      The reason for wanting the tree to be filled programatically, is the potential whole contents of the tree can be about 1.000.000 nodes. Huge.

      quote:


      <?xml version="1.0" encoding="utf-8"?>
      <mx:Application xmlns:mx=" http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="initM()">
      <mx:Script>
      <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.controls.Alert;
      import mx.controls.treeClasses.TreeListData;

      [Bindable] public var aParentId:String = null;
      [Bindable] public var aLevel:Number = 0;

      ]]>
      </mx:Script>
      <mx:WebService id="lws" wsdl=" http://myServer/myContext/myPortURI?WSDL" useProxy="false" makeObjectsBindable="true">
      <mx:operation name="getNodes" resultFormat="object">
      <mx:request>
      <getNodesElement>
      <parentId>{aParentId}</parentId>
      <level>{aLevel}</level>
      </getNodesElement>
      </mx:request>
      </mx:operation>
      </mx:WebService>
      <mx:Tree x="0" y="0" width="326" height="100%" id="layoutTree" enabled="true" labelField="nodeName">
      <mx:dataProvider>{lws.getNodes.lastResult}</mx:dataProvider>
      </mx:Tree>
      <mx:Script>
      <![CDATA[
      public function initM():void {
      lws.getNodes.send();
      return;
      }
      ]]>
      </mx:Script>
      </mx:Application>



      So, here's the problem:

      1.- In both Java2 and .NET, I've been able to produce sets of proxy classes from the webservice wsdl, these include a proxy class for the service port and a set of classes for both the call parameter types and the call result types. I have not found yet a way to do the same with flex2, so I wonder, can I produce the required classes for dealing with such a webservice in an automatic way with flex2?

      2.- The second problem, is I haven't found a way to make a webservice call in sychronous mode, and I can't seem to find a way to set the parameters for the subsequent calls to the webservice. Is there a way to make a call to such webservice programatically? I mean, I've been able to make the first call I need programatically, but what if I end up making 2 or more simultaneous calls? I can't rely on setting the `variables defined elsewhere` before each call, because of possible concurrency issues (calls will be long after the 2nd level of the tree), so I wonder if there's a way to make a call to such webservice (document/wrapped, soap1.1) passing it the parameters programatically. If so, can I just put the parameters or do I have to produce the complete enclosure? If I have to produce also the enclosure, any hint on how to do so? I will need to pass different parentId, level pairs probably triggered by tree events.

      3.- the other problem, finally, is Tree looks quite different to me than the Java2 one. In java2, I can easily produce a changing model for the tree wich will even handle the calls to the webservice as needed (triggered by the tree itself), making it a `live model`. If there is a way to produce the same behaviour in flex2, I haven't found it yet. Sure, I've only downloaded the trial version yesterday, so I may have overlooked some docs or blogs.

      Any hints would be appreciated, specially on programatically modifying the tree, and making calls to the webservice changing the parameters every time.