da “hello world” a “hello world wide web”. -...

20
1 Vincenzo de Stefano SAP e Servizi Web http://desvino.altervista.org Prefazione. Da “Hello World” a “Hello World Wide Web”. “Hello World” è la prima frase stampata a video dal primo programma di esempio scritto in linguaggio C all'inizio del libro "Programmare in C" di Brian Kernighan e Dennis Ritchie (…questa è storia dell’Informatica). Per decenni tale frase è stata utilizzata in tutti gli esempi all’interno dei libri di qualsiasi linguaggio di programmazione. Oggi facciamo un salto nel futuro, qualcuno potrebbe dire nel passato dato che la nascita del “web” è datata 1991, e da un’applicazione stand alone ovvero che funziona indipendentemente dalla presenza di altri oggetti con cui potrebbe comunque interagire e che stampa “Hello World” sul video dell’elaboratore su cui è eseguita passiamo ad un’applicazione o servizio che stampa “Hello World Wide Web <<nome utente>>” grazie all’interoperabilità tra 2 elaboratori sulla rete, un fornitore di servizi, in questo caso un servizio per la stampa, ed un consumatore di servizi che richiede la stampa. La nuova applicazione viene identificata da un URI e la sua interfaccia è descritta attraverso meccanismi basati sul XML, la messaggistica XML su protocolli internet (es. SOAP – Simple Object Acces Protocol) permette l’interazione con altre applicazioni. Fig 1. Hello World in Python

Upload: doanliem

Post on 16-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

1 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Prefazione.

Da “Hello World” a “Hello World Wide Web”.

“Hello World” è la prima frase stampata a video dal primo programma di esempio scritto in linguaggio C all'inizio del libro "Programmare in C" di Brian Kernighan e Dennis Ritchie (…questa è storia dell’Informatica). Per decenni tale frase è stata utilizzata in tutti gli esempi all’interno dei libri di qualsiasi linguaggio di programmazione.

Oggi facciamo un salto nel futuro, qualcuno potrebbe dire nel passato dato che la nascita del “web” è datata 1991, e da un’applicazione stand alone ovvero che funziona indipendentemente dalla presenza di altri oggetti con cui potrebbe comunque interagire e che stampa “Hello World” sul video dell’elaboratore su cui è eseguita passiamo ad un’applicazione o servizio che stampa “Hello World Wide Web <<nome utente>>” grazie all’interoperabilità tra 2 elaboratori sulla rete, un fornitore di servizi, in questo caso un servizio per la stampa, ed un consumatore di servizi che richiede la stampa.

La nuova applicazione viene identificata da un URI e la sua interfaccia è descritta attraverso meccanismi basati sul XML, la messaggistica XML su protocolli internet (es. SOAP – Simple Object Acces Protocol) permette l’interazione con altre applicazioni.

Fig 1. Hello World in Python

2 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Contenuti.

1. Generazione del servizio sul nostro sistema. 2. Consumo del servizio. 3. Appendice A W3C web service. 4. Appendice B SAP WAS architettura per i web services.

Prerequisiti.

Abap Workbench e Function Module su SAP.

Concetti di base RFC.

Abap Objects.

Questo documento non spiega in dettaglio cosa è un servizio web, cosa è l’XML, cosa è SOAP, cosa è WSDL; l’arduo compito è lasciato a wikipedia e alla curiosità del lettore.

3 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

1 Generazione del servizio sul nostro sistema.

Il primo passo per la generazione di un servizio web su SAP è la creazione di un function module. Precisiamo che un servizio web può essere basato anche su una BAPI o persino su tutto un gruppo funzioni, è chiaro che al momento scegliamo la soluzione più semplice da implementare …

Digitiamo il codice della transazione SE80 (Abap Workbench) creiamo il nostro pacchetto (ZPK_WEB) ed il gruppo funzioni (ZGF_WEB) al cui interno creiamo il function module ZFM_GREETINGS.

Fig. 2 Abap Workbench – creazione del function module

All’interno del codice è visibile l’interfaccia della funzione; in particolare si nota che i parametri sono passati per valore. Il motivo di tale scelta è che la funzione deve essere di tipo RFC (Remote Function Call). Un’applicazione che richiama la funzione e che è risiedente su una macchina diversa da quella in cui risiede la funzione stessa non è in grado di puntare direttamente alla memoria della seconda macchina per cui il passaggio dei valori per riferimento non è possibile.

4 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Fig.3 proprietà del function module

Fig. 4 parametri di importazione/esportazione del function module

Dal codice e dall’interfaccia dovrebbe essere chiaro che il function module non fa altro che prendere in input un nome e stampare “Hello <<nome>>”.

Attiviamo la funzione e creiamo il servizio web. Da Utilities seguiamo il percorso: Altre utilities -> Generare servizio Web -> Dal function module.

5 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

fig.5 creazione del servizio web

A questo punto seguiamo il wizard e inseriamo tutti i dati richiesti per la generazione del servizio.

Fig.6 - 1/5 wizard per la creazione del servizio

6 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Fig.7 - 2/5 wizard per la creazione del servizio

Precisiamo che ciò che offre il sevizio web è realmente implementato all’interno del function module.

Fig.8 - 3/5 wizard per la creazione del servizio

7 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Fig.9 - 4/5 wizard per la creazione del servizio

Inseriamo il nome del pacchetto creato precedentemente e selezioniamo una CR oppure creiamo il servizio come oggetto locale.

Fig.10 - 5/5 wizard per la creazione del servizio

8 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Il risultato: all’interno dell’albero a sinistra nel workbench è visibile la cartella Enterpise services e nella sottocartella Definizione serv. è presente il servizio ZWEB_HELLO.

Fig.11 Enterprise Services sul Workbench

Utilizziamo la transazione SOAMANAGER per ottenere l’indirizzo del file WSDL.

Il WSDL (Web Services Description Language) è un linguaggio formale utilizzato per la creazione di documenti che descrivono i servizi web. Il formato utilizzato è XML. Esso di solito è utilizzato in combinazione con SOAP e XML Schema.

Selezioniamo Business-Administratio e poi Web-Service-Administration.

Fig.12 SOAMANGER – Business-Administration

9 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Selezioniamo Service dalla list box Nome Servizio, inseriamo z* nell’input field successivo ed otteniamo la lista dei servizi web disponibili sul sistema.

Fig.13 lista dei servizi web

Selezioniamo ZWEB_HELLO e clicchiamo su Apply Selection.

Fig.14 dettagli del servizio per ottenere il wsdl file

Nella Overview selezioniamo il link Open WSDL document for selected binding.

10 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Fig.15 dettaglio del documento wsdl

Otteniamo dalla barra degli indirizzi del browser l’URI del documento wsdl che descrive il servizio. Il client lo utilizzerà per chiamare il servizio.

Un documento di questo tipo descrive le operazioni che il servizio mette a disposizione, come utilizzare il servizio (protocollo di comunicazione e interfaccia del servizio) e dove si trova il servizio (endpoint in formato URI).

Un programma/applicazione client può utilizzare il servizio grazie ai dati messi a disposizione all’interno del documento wsdl.

11 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

2 Consumo del servizio.

Creiamo un proxy per un oggetto di tipo Service Consumer. Nell’albero a sinistra sul workbench posizioniamoci sulla radice ZPK_WEB ed utilizziamo il tasto destro per selezionare le voci nei menu/sottomenu Creare -> Servizio Enterprise / servizio Web -> Oggetto proxy.

Fig.16 creazione di un oggetto proxy

Seguiamo il wizard e inseriamo tutti i dati richiesti per la generazione dell’oggetto.

Fig.16 wizard creazione oggetto proxy per il Service Consumer

12 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Fig.17 wizard creazione oggetto proxy per il Service Consumer

Inseriamo il solito link al documento WSDL.

Fig.18 wizard creazione oggetto proxy per il Service Consumer

13 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Inseriamo pacchetto, prefisso e CR.

Fig.19 wizard creazione oggetto proxy per il Service Consumer

Fig.20 wizard creazione oggetto proxy per il Service Consumer

14 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

All’interno dell’albero a sinistra nel workbench troviamo la nuova voce Proxies d.client e i tipi di dati che utilizza per la request e la response.

Fig.21 Proxy nel Workbench

Fig.22 dettaglio della classe Proxy generata

15 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

All’interno della classe tra i metodi notiamo ZFM_GREETINGS (lo stesso nome della funzione creata inizialmente).

Fig.23 metodi della classe Proxy

Il metodo, tra le altre cose, esegue la funzione attraverso il richiamo del metodo execute fornito dall’interfaccia if_proxy_client.

Fig.24 metodo ZFM_GREETINGS

16 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Strutture create automaticamente per la gestione dell’I/O.

Fig.25 struttura ZFM_GREETINGS - input

Fig.26 struttura ZFM_GREETINGS_RESPONSE - output

Utilizziamo di nuovo la transazione SOAMANAGER per creare una porta logica per il client proxy.

Questa porta va creata nel sistema nel quale vogliamo chiamare il client proxy.

Fig.27 SOAMANAGER Consumer Proxy

17 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Clicchiamo su Apply Selection e creiamo una porta logica per il client proxy.

Fig.28 Creazione della porta logica

Inseriamo i dati necessari alla creazione della porta. Servizio, nome porta e link del documento WSDL.

Fig.29 Creazione della porta logica – maschera per input dati

18 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Utilizziamo la SE38 per creare un programma che utilizzi la classe proxy creata e la porta associatagli per utilizzare il servizio.

Fig.30 programma client - Consumer

Fig.31 output

19 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Appendice A

Il World Wide Web Consortium definisce così un web service:

A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP-messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.

Fig.32 Schema WS

20 Vincenzo de Stefano – SAP e Servizi Web http://desvino.altervista.org

Appendice B

SAP Web Application Server supporta l'utilizzo di servizi web attraverso l'implementazione degli standard: eXtensible Markup Language (XML); Simple Object Access Protocol (SOAP); Web Service Definition Language (WSDL); and Universal Description, Discovery, and Integration (UDDI).

Il Web Service Framework consiste di:

Ambiente di sviluppo per ABAP Engine Ambiente di sviluppo per J2EE Engine

Strumenti che supportano la registrazione UDDI SOAP runtime (ABAP e J2EE Engine)

Le richieste SOAP vengono processate utilizzando l'Internet Communication Framework (ICF)

Fig.33 SAP Web Application Server