Bonjour à tous,
Je continue mon apprentissage de Flex 4.
Là, je cale sur le traitement des retours des Web Services SOAP.
Soit le Web Service SOAP suivant :Le code Flex 4 suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
28
29
30
31
32 <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:getSortedAllCompanyEmployeesByNameResponse xmlns:ns2="http://usc.webservice.fr.java.main/"> <uscEmployeeListSoap> <uscEmployeeMapping> <birthdate>25/04/1979</birthdate> <department> <code>DivT</code> <description/> <id>2</id> <name>Division technique</name> </department> <function> <code>SUPP1</code> <description/> <id>13</id> <name>Ingénieur Support Client I</name> </function> <id>37</id> <user> <active>true</active> <connectionDate>16/07/2010</connectionDate> <email>Steeve.Achard@Company.fr</email> <firstname>Steeve</firstname> <gender>M</gender> <login>SUPP1</login> <name>ACHARD</name> <role>Employee</role> </user> </uscEmployeeMapping> ...Là où le bas blesse donc, c'est que je n'ai qu'une information qui est affichée, la date de naissance, toutes les autres colonnes/propriétés sont vides.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
28
29
30
31
32
33
34
35
36
37 <?xml version="1.0" encoding="utf-8"?> <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:uscwsgetemployee="services.uscwsgetemployee.*"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.FlexEvent; import mx.rpc.events.ResultEvent; protected function EmployeesDirectory_creationCompleteHandler(event:FlexEvent):void { getSortedAllCompanyEmployeesByNameResult.token = uscWsGetEmployee.getSortedAllCompanyEmployeesByName(); } ]]> </fx:Script> <fx:Declarations> <s:CallResponder id="getSortedAllCompanyEmployeesByNameResult"/> <uscwsgetemployee:UscWsGetEmployee id="uscWsGetEmployee" fault="Alert.show(event.fault.faultString + 'n' + event.fault.faultDetail)" showBusyCursor="true"/> <!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). --> </fx:Declarations> <mx:AdvancedDataGrid id="EmployeesList" designViewDataType="flat" creationComplete="EmployeesDirectory_creationCompleteHandler(event)" dataProvider="{getSortedAllCompanyEmployeesByNameResult.lastResult}"> <mx:columns> <mx:AdvancedDataGridColumn headerText="Civilité" dataField="user.gender"/> <mx:AdvancedDataGridColumn headerText="Nom" dataField="user.name"/> <mx:AdvancedDataGridColumn headerText="Prénom" dataField="user.firstname"/> <mx:AdvancedDataGridColumn headerText="Date de naissance" dataField="birthdate"/> <mx:AdvancedDataGridColumn headerText="Fonction" dataField="_function.code"/> <mx:AdvancedDataGridColumn headerText="Actif" dataField="user.active"/> </mx:columns> </mx:AdvancedDataGrid> </s:Group>
Pourtant, lors de l'introspection de mon Web Service faite par Flash Builder, il m'a bien été généré(e ?) une classe Employee avec comme attribut un User (et donc la classe User correspondante).
Testé avec ce deuxième bout de code :Sur la première bouche for, Flash Tracer me renvoie bien une liste d'employés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 <?xml version="1.0" encoding="utf-8"?> <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:uscwsgetemployee="services.uscwsgetemployee.*"> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.FlexEvent; import mx.rpc.events.ResultEvent; import mx.utils.ObjectUtil; protected function uscWsGetEmployee_resultHandler(event:ResultEvent):void { var result:ArrayCollection=getSortedAllCompanyEmployeesByNameResult.lastResult as ArrayCollection; var cpt1:int; var cpt2:int; for (cpt1; cpt1<result.length; cpt1++) { trace(ObjectUtil.toString(result.getItemAt(cpt1))); } for (cpt2; cpt2<result.length; cpt2++) { trace(result.getItemAt(cpt2).name); } } protected function button1_clickHandler(event:MouseEvent):void { getSortedAllCompanyEmployeesByNameResult.token = uscWsGetEmployee.getSortedAllCompanyEmployeesByName(); } ]]> </fx:Script> <fx:Declarations> <s:CallResponder id="getSortedAllCompanyEmployeesByNameResult"/> <uscwsgetemployee:UscWsGetEmployee id="uscWsGetEmployee" fault="Alert.show(event.fault.faultString + 'n' + event.fault.faultDetail)" result="uscWsGetEmployee_resultHandler(event)" showBusyCursor="true"/> <!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). --> </fx:Declarations> <s:Button label="Invoquer Web Service" click="button1_clickHandler(event)" y="170"/> </s:Group>
Sur la deuxième boucle for, Flash Tracer me renvoie l'erreur suivante :Merci par avance pour vos divers éclairages/contributions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ReferenceError: Error #1069: La propriété name est introuvable sur services.uscwsgetemployee.valueObjects.Employee et il n'existe pas de valeur par défaut. at fr.comatek.views.employee::EmployeesDirectory/uscWsGetEmployee_resultHandler()[C:Devworkspaceu-ston-config-localflex_srcfrcomatekviewsemployeeEmployeesDirectory.mxml:28] at fr.comatek.views.employee::EmployeesDirectory/__uscWsGetEmployee_result()[C:Devworkspaceu-ston-config-localflex_srcfrcomatekviewsemployeeEmployeesDirectory.mxml:42] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at com.adobe.fiber.services.wrapper::AbstractServiceWrapper/http://www.adobe.com/2008/flex/model/internal::propagateEvents()[C:depotDataServicesbrancheslcds31_finalframeworksprojectsfiber-swcsrccomadobefiberserviceswrapperAbstractServiceWrapper.as:200] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.rpc::AbstractService/dispatchEvent()[E:dev4.xframeworksprojectsrpcsrcmxrpcAbstractService.as:333] at mx.rpc.soap.mxml::WebService/dispatchEvent()[E:dev4.xframeworksprojectsrpcsrcmxrpcsoapmxmlWebService.as:267] at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:dev4.xframeworksprojectsrpcsrcmxrpcAbstractOperation.as:254] at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:dev4.xframeworksprojectsrpcsrcmxrpcAbstractInvoker.as:318] at mx.rpc::Responder/result()[E:dev4.xframeworksprojectsrpcsrcmxrpcResponder.as:56] at mx.rpc::AsyncRequest/acknowledge()[E:dev4.xframeworksprojectsrpcsrcmxrpcAsyncRequest.as:84] at DirectHTTPMessageResponder/completeHandler()[E:dev4.xframeworksprojectsrpcsrcmxmessagingchannelsDirectHTTPChannel.as:446] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete()
Partager