Crear Web Service SAP R3
Contenido |
Resumen
Para extraer los datos de las tablas de SAP es necesario crear una función y exponerla en un Web Service.
Tablas consultadas
Customer
columna | descripción |
---|---|
KNB1 | Clientes de una Sociedad. |
KNA1 | Name, Region, Address y phone. |
KNKK | Credit Amount |
ADR6 | Email. |
KNVP | Representative from RRHH. |
KNVV | Representative from Sales. |
Representative
columna | descripción |
---|---|
PA0002 | Representative from RRHH. |
TVGRT | Representative from Sales. |
KNKK | Monto de Crédito. |
Product
columna | descripción |
---|---|
MARA | Product. |
MAKT | Name. |
KONP, A004 | Price. |
Stock
columna | descripción |
---|---|
MARD | Stock. |
Warehouse
columna | descripción |
---|---|
T001L | Warehouse. |
Term
columna | descripción |
---|---|
T052 | Terms. |
Invoice, CreditNote, DebitNote
columna | descripción |
---|---|
VBRK | Billing Document (sales document). |
VBPA | Representative from RRHH. |
VRKPA | Representative from Sales. |
BSID | Pending. |
BSAD | Pending. |
Crear función a exponer
Pasos:
1. Navegar hasta la transacción SE37 en SAP y copiar el módulo de funciones RFC_READ_TABLE con el nomber ZNIMBOX_RFC_READ_TABLE (debe ser obligatoriamente este nombre)
2. En el código fuente de la función, ubicar la sección "ASSIGN WORK TO CASTING TYPE” cerca de la línea 165 y reemplazarlo con el siguiente código"
DATA: BEGIN OF WORK, BUFFER(30000), END OF WORK. FIELD-SYMBOLS: <WA> TYPE ANY, <COMP> TYPE ANY. " --- begin of modification " ASSIGN WORK TO <WA> CASTING TYPE (QUERY_TABLE). DATA: tab_ref TYPE REF TO data. CREATE DATA tab_ref TYPE (query_table). ASSIGN tab_ref->* TO <wa>. " --- end of modification IF ROWCOUNT > 0. ROWCOUNT = ROWCOUNT + ROWSKIPS. ENDIF. SELECT * FROM (QUERY_TABLE) INTO <WA> WHERE (OPTIONS).
Esta sustitución en el código de la función RFC_READ_TABLE permite que la nueva función pueda leer campos de tipo float.
3. Guardar y activar la nueva funcion presionando Ctrl + F3
Exponer función en Web Service
Seguir las indicaciones expuestas en el siguiente documento para exponer la función y obtener el WSDL que necesitamos: Archivo:ExposeWebService.pdf
Es importante al momento de escoger el endpoint para la función marcar el check "Mapping der Namen", este check hace que tanto el endpoint como la función sean expuestas usando notación CamelCase (XML es case sensitive y necesitamos que la función sea expuesta a través del web service tomando eso en cuenta).
Request para consumir el Web Service
Es importante asegurarnos que el request para consumir el Web Service cumpla con las siguientes condiciones. Esto es automático si se exporta el web service desde el ERP pero debe ser configurado específicamente si la función se exporta desde PI
- El tag soapenv debe ser de la siguiente manera, atributos deben ser así:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
- Al exponer la función ha de quedar con el nombre ZnimboxRfcReadTable.
Siendo el tag urn:
<urn:ZnimboxRfcReadTable>...</urn:ZnimboxRfcReadTable>
- La mayoría de los tags usan el standard Java, donde la primera letra de cada palabra es mayúscula y el resto minúsculas (excepto: item, soapenv, urn)
Los tags del request deben quedar de la siguiente manera:
<soapenv:Header/>
<Fieldname>...</Fieldname>
<QueryTable>...</QueryTable>
<Fields> <item> <Fieldname>KUNNR</Fieldname> <Offset /> <Length /> <Type /> <Fieldtext/> </item> </Fields>
Los tags del response deben quedar:
<ns0:ZnimboxRfcReadTable.Response xmlns:ns0="urn:sap-com:document:sap:rfc:functions"> <Data> <item> <Wa/> </item> <item> <Wa></Wa> </item> </Data> <Fields> <item> <Fieldname></Fieldname> <Offset></Offset> <Length></Length> <Type></Type> <Fieldtext></Fieldtext> </item> </Fields> <Options> <item> <Text/> </item> </Options> </ns0:ZnimboxRfcReadTable.Response>