[Flex] Treeview vullen met behulp van een webservice.

Pagina: 1
Acties:

  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Ik ben momenteel bezig met wat test-applicaties.
Hierbij wil ik een tree vullen aan de hand van een webservice die ik in .NET maak.
Deze webservice geeft momenteel hard-coded data terug, maar zal straks een databaseje moeten aanspreken.

Het probleem is echter als volgt:
Als ik de output van m'n webservice copy paste in een .xml file, en deze inlees met een HttpService is er niks aan de hand, dan werkt het goed.

Als ik echter m.b.v. een WebService object m'n webservice direct aanspreek, krijg ik null terug.

Hier mijn gebruikte code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   <mx:Script>
        <![CDATA[
           
            import mx.rpc.events.ResultEvent;
            
            default xml namespace = "http://myNamespace.nl";
            
            [Bindable]
            private var xmlData : XMLList;
            
            private function resultHandler(event:ResultEvent):void
            {
                var result:XML = event.result as XML;
                xmlData = result.Item;
            }
        ]]>
    </mx:Script>

    <mx:WebService id="wsItems"
        wsdl="http://localhost:3500/flex_test/Service.asmx?WSDL"
        showBusyCursor="true"
        load="wsItems.GetItems()">
        <mx:operation name="GetItems" result="resultHandler(event)" resultFormat="e4x" />
    </mx:WebService>

    <mx:Tree dataProvider="{xmlData}" id="tvItems"
        labelField="@Titel" width="100%" height="100%" />


M'n output van m'n xml/webservice is (die gegenereed wordt door zo'n asp.net pagina):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://myNamespace.nl">
  <Item Titel="MyItem100">
    <Item Titel="Child1" />
    <Item Titel="Child2" />
    <Item Titel="Child3" />
  </Item>
  <Item Titel="MyItem200">
    <Item Titel="Child4" />
    <Item Titel="Child5" />
    <Item Titel="Child6" />
  </Item>
  <Item Titel="MyITem300" />
</ArrayOfItem>


Ik hoop dat iemand me kan helpen, want ik zie echt niet wat ik fout doe.

Binnen de resultHandler gaat ie fout, waar die event.result probeert aan te spreken.
Dat levert op:
TypeError: Error #1009: Cannot access a property or method of a null object reference.

Hij vind de webservice wel, want als ik GetItemsAAAAA() aanroep ipv GetItems krijg ik netjes te zien dat ie die functie niet kent binnen de webservice.


Ik heb ook geprobeerd ipv
code:
1
var result:XML = event.result as XML

het volgende te doen:
code:
1
var result:XML = event.result[0]


Hier krijg ik niet de nullpointer, maar hij doet er ook niks mee.
Als ik hier een breakpoint op zet, ziet de waarde van "event.result[0]" er ook raar uit naar mijn idee.
Ik krijg namelijk 2x een node GetItemResult daarin te zien.
Maar waarom... ik heb geen idee.

Beide (flex + webservice) draaien op dezelfde machine hier.

Heeft iemand enig idee wat ik fout doe?
Al vast bedankt.

  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
schopje?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:17

Janoz

Moderator Devschuur®

!litemod

Weet je zeker dat je webservice wel een juist resultaat opleverd?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Ik heb even de volgende test-objecten aangemaakt:
code:
1
2
    <mx:Button label="Invoke" click="wsItems.GetItems()" />
    <mx:Text text="** {wsItems.GetItems.lastResult}"  enabled="true"/>

En m'n resulthandler is momenteel:
code:
1
2
3
4
5
6
7
8
            [Bindable]
            private var xmlData : XMLList;
            
            private function resultHandler(event:ResultEvent):void
            {
                var result:XML = event.result[0];
                xmlData = result.Item;
            }


En het resultaat wat in het label komt is nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<GetItemsResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://filmdb.cryothic.nl/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <GetItemsResult>
    <Item Titel="MyDvd100">
      <Item Titel="Child1"/>
      <Item Titel="Child2"/>
      <Item Titel="Child3"/>
    </Item>
    <Item Titel="MyDvd200">
      <Item Titel="Child4"/>
      <Item Titel="Child5"/>
      <Item Titel="Child6"/>
    </Item>
    <Item Titel="MyDvd3"/>
  </GetItemsResult>
</GetItemsResponse>


Het maffe is nu, dat dus ook m'n treeview 1 item krijg op deze manier. (edit: verkeerd gekeken, treeview blijft leeg)
En dat item bestaat uit de complete XML, zoals hierboven.
En dat terwijl ik daar weldegelijk m'n labelField heb ingesteld op "@Titel"


edit:
probleem opgelost
Bleek dat ik die hele resultHandler niet moest gebruiken.
Gewoon de dataprovider van m'n tree verwijzen naar webservice.methode.lastResult.methodeResults.Node

Evengoed bedankt voor het mee denken :)

[ Voor 8% gewijzigd door Cryothic op 26-03-2007 19:00 ]