Bonjour

Je travaille actuellement sur la version ECC6 de SAP.
Je souhaite effectuer des requêtes à la base de TNT pour récupérer les adresses et les n° des relais colis.
Merci à Frooty pour son aide précieuse pour dégrossir le terrain. Je bute maintenant sur la transformation du résultat XML en table interne ABAP.
Je pensais avoir tout bien fait mais le programme ne réussi pas à convertir l'XML...

Voici le le programme XSLT que j'ai créé :
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
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sapxsl="http://www.sap.com/sapxsl" version="1.0">
  <xsl:template match="/">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="LISTE_COMMUNES">
    <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
      <asx:values>
        <ENREG>
          <xsl:apply-templates/>
        </ENREG>
      </asx:values>
    </asx:abap>
  </xsl:template>
  <xsl:template match="COMMUNE">
    <CODEPOSTAL>
      <xsl:value-of select="CODE_POSTAL"/>
    </CODEPOSTAL>
    <VILLE>
      <xsl:value-of select="VILLE"/>
    </VILLE>
  </xsl:template>
</xsl:transform>
Vous pouvez voir le fichier xml que je reçois en lancant la requête suivante :


Les champs déclarés dans ma table interne sont les suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
TYPES: BEGIN OF typ_xml,
codepostal(10),
ville(50),
END OF typ_xml.
Voici mon programme de test (je passe par un proxy pour accéder à internet.. J'ai donc mis en commentaire cette partie) :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
REPORT  YTEST_TNT_V3.

CLASS cl_ixml DEFINITION LOAD.
DATA: response TYPE string.
DATA: g_ixml TYPE REF TO if_ixml.
DATA: g_stream_factory TYPE REF TO if_ixml_stream_factory.
DATA: headfields TYPE tihttpnvp.
DATA: client TYPE REF TO if_http_client,
host TYPE string, port TYPE string,
proxy_host TYPE string, proxy_port TYPE string,
path TYPE string, scheme TYPE i.
DATA: wf_user TYPE string .
DATA: wf_password TYPE string ,
if_query_field TYPE LINE OF tihttpnvp,
it_query_field TYPE tihttpnvp,
if_query TYPE string.

DATA: cx_runtime_error TYPE REF TO cx_xslt_runtime_error.
DATA: cx_format_error  TYPE REF TO cx_xslt_format_error.
DATA: err_text         TYPE string.

* La structure qui receptionne les données du XML doit être définie en
* local dans la routine (je ne sais pas pourquoi)

TYPES: BEGIN OF typ_xml,
codepostal(10),
ville(50),
END OF typ_xml.


DATA: lt_xml TYPE STANDARD TABLE OF typ_xml,
ls_xml TYPE typ_xml,
source_xml TYPE string,
lt_result_xml TYPE abap_trans_resbind_tab,
ls_result_xml TYPE abap_trans_resbind.


data: begin of TAB_CONVERTED_DATA occurs 0,
data1(250) type c,
end of TAB_CONVERTED_DATA.

data w_length type i.
data w_tot type i.
data w_write type i.
data w_calc type i.

data ref_document tYPE REF TO  IF_IXML_DOCUMENT.


START-OF-SELECTION.

*Setting the parameters needed by the object
concatenate 'http://www.tnt.fr/public/relaiscolis/rechercheCommuneXML'
  '.do?code=69' into host.
  port = '80'.

*  proxy_host = '192.168.1.254'.
*  proxy_port = '8080'.
*  scheme = 1. "1=HTTP 2=HTTPS
*
*  CALL METHOD cl_http_client=>create_by_url
*    EXPORTING
*      url           = host
*      proxy_host    = proxy_host
*      proxy_service = proxy_port
*    IMPORTING
*      client        = client.
*
** Envoi user/password du proxy
*  client->propertytype_logon_popup = client->co_disabled.
*
*  wf_user = 'xxxxxx' .
*  wf_password = 'zzzz'.
*
** proxy server authentication
*
*  CALL METHOD client->authenticate
*    EXPORTING
*      proxy_authentication = 'X'
*      username             = wf_user
*      password             = wf_password.


  CALL METHOD client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'POST'.

***
* send & receive
  client->send( ).
  client->receive( ).
* Capture the result data
  response = client->response->get_cdata( ).

* VERY IMPORTANT: close your connection
  client->close( ).


**
  clear lt_result_xml.
  GET REFERENCE OF lt_xml INTO ls_result_xml-value.
  ls_result_xml-name = 'ENREG'.
  APPEND ls_result_xml TO lt_result_xml.

  TRY.

      CALL TRANSFORMATION YTEST
      SOURCE XML response
      RESULT  (lt_result_xml).

    CATCH cx_xslt_runtime_error INTO cx_runtime_error.
      WRITE :/ 'kernel_errid = ', cx_runtime_error->kernel_errid.
      err_text = cx_runtime_error->get_text( ).
      WRITE :/ 'text = ', err_text.
    CATCH cx_xslt_format_error INTO cx_format_error.
      WRITE :/ 'kernel_errid = ', cx_format_error->kernel_errid.
      err_text = cx_format_error->get_text( ).
      WRITE :/ 'text = ', err_text.
    CLEANUP.
      WRITE :/ 'passage par cleanup'.

  endtry.

  LOOP AT lt_xml INTO ls_xml.
    WRITE: / sy-tabix, ls_xml-codepostal, ls_xml-ville.
  ENDLOOP.
J'aimerai donc bien savoir ce que j'ai raté pour que ca ne fonctionne pas...
Un peu d'aide me fairait énormément de bien !

Merci