SAP Business Application Studio ha ampliado recientemente su soporte para abarcar Python, tal y como indica SAP.
Esta capacidad adicional facilita el desarrollo de Pitón-Aplicaciones basadas en. En esta publicación de blog, le explicaré cómo establecer un entorno de desarrollo impulsado por Python en Estudio de aplicaciones empresariales SAP. También iniciaremos un proyecto y desarrollaremos una aplicación web compacta, que incluye un punto final API REST que interactúa con el SAP S/4HANA Sistema en la nube para recuperar datos de proveedores a través del servicio de destino, obteniendo así la lista de proveedores. Para una comprensión más profunda de Plataforma tecnológica empresarial SAP (SAP BTP) y la configuración de SAP Business Application Studio, considere haciendo referencia al E-Bite del que fui coautor para SAP PRESS. Si está interesado en obtener más información sobre Python, consulte el artículo proporcionado. enlace.
Esta publicación sirve como continuación de nuestra discusión anterior sobre la API RESTful de Python, donde profundizamos en el desarrollo de las API RESTful en Python. Aquí nos centraremos en cómo utilizar el Odatos servicio del sistema SAP S/4HANA Cloud, cómo incorporarlo en una aplicación Python y cómo exponerlo a través de una API RESTful mediante la creación de un contenedor para la API OData de SAP S/4HANA Cloud.
Mi objetivo secundario es guiarte en la creación de un prototipo de aplicación. Esto implicará configurar un proyecto Python y configurar un destino para vincularlo en el sistema SAP S/4HANA Cloud. La aplicación tiene como objetivo interpretar la API OData para adquirir una lista de proveedores y crear una API RESTful contenedora en Python, que se obtendrá consumiendo datos de proveedores de SAP S/4HANA Cloud.
Las API RESTful son recursos potentes que facilitan la comunicación entre varias aplicaciones de software. En el alcance de nuestro tutorial, se utilizará para extraer una lista de proveedores mediante la creación de un contenedor para el servicio OData preexistente del sistema de demostración SAP S/4HANA Cloud ES5. Esto es para ejemplificar cómo podemos consumir cualquier servicio del sistema en la nube y administrar los datos o servicios en Python para personalizarlos, o realizar cualquier forma de manipulación de datos utilizando el lenguaje de programación Python.
Únase a nosotros para explorar el intrigante dominio del desarrollo de Python, donde configuraremos un entorno de desarrollo y crearemos una aplicación que interactúa con las API RESTful. Estoy seguro de que esta publicación ofrecerá conocimientos esenciales y experiencia práctica que serán beneficiosos para sus próximos proyectos de Python.
Ahora haga clic en el espacio de desarrollo y proporcione un nombre único como «py_dev». Seleccione las «Herramientas de Python» de las Extensiones adicionales de SAP; Puede seleccionar otras extensiones también según sus requisitos y actividad de desarrollo. Seleccioné un par de extensiones más en mi tutorial, pero eso es opcional. Después de la selección, haga clic en «Crear espacio de desarrollo» y espere unos minutos. Consulte la figura siguiente para obtener una vista previa.
Una vez que el estado de creación del espacio de desarrollo se muestre como «EN EJECUCIÓN», como se muestra a continuación, haga clic en él para abrir el espacio de desarrollo. Es posible que tarde algún tiempo en cargarse.
Una vez que se inicia el espacio de desarrollo, navegue hasta el espacio de trabajo y cree una nueva «Aplicación básica multiobjetivo» seleccionando la opción «Nuevo proyecto a partir de plantilla» como se muestra a continuación.
Seleccione «Aplicación básica multiobjetivo» y haga clic en la opción de inicio. En la siguiente pantalla, proporcione el nombre del proyecto como «mywebApp» y haga clic en FINALIZAR como se muestra a continuación.
La razón por la que creas el “Plantilla básica multiobjetivo”es porque necesita crear un proyecto con mta.yml, ya que se utilizará para crear la aplicación basada en MTA. Una vez desarrollada la aplicación completa, puede implementarla en SAP BTP.
Después de configurar el sistema de demostración ES5, configure el destino en la cuenta SAP BTP como se menciona a continuación.
Ahora abra una terminal/cree una carpeta para «mywebApp» y navegue hasta esta carpeta usando el comando. Luego instale el paquete relacionado con Python como se muestra a continuación.
> mkdir mywebApp
> cd mywebApp
> npm install python
> python –version // 3.0+ version should be 3+
> npm install pip // python package installer
> pip install flask // python web development package should be 3.0.0
> pip install jsonify
> npm i cfenv
> npm i requests
> pip3 install werkzeug
> touch app.py
> touch BTPServices.py
> touch ProcFile
> touch requirements.txt
> touch runtime.txt
> touch manifest.yml
El comando proporcionado debe ejecutarse en la terminal SAP Business Application Studio. Una vez que el paquete de instalación esté implementado, puede abrir app.py e introducir un método de obtención para obtener una lista de proveedores del sistema SAP S/4HANA Cloud. Sin embargo, antes de continuar, es importante abordar los paquetes de Python utilizados para realizar esta aplicación web de Python. Existen numerosos marcos web Python a nuestra disposición, muchos de los cuales son de código abierto. Los más populares incluyen Django, CherryPy, Falcon, Flask y Tornado. De esta lista, elegí construir la API REST usando Flask debido a su marco web RESTful liviano que conlleva una deuda técnica mínima.
En este ejemplo, creé una API REST para recuperar la lista de proveedores del sistema SAP S/4HANA Cloud usando el servicio OData y preparé un contenedor para devolver la respuesta como una respuesta de API RESTful en formato JSON. Estas API son asincrónicas y se crean utilizando WSGI (Web Server Gateway Interface). A continuación se muestra una captura de pantalla de un fragmento de código de app.py para su lectura.
# importing modules
# ---------------------------------------------------------------------
# import all the necessary modules here that will be used in the program
from flask import Flask, jsonify
import os
import requests
from requests.auth import HTTPBasicAuth
# importing local module: BTPservices: containing generic codes for destination
# ---------------------------------------------------------------------
import BTPServices
# application initialization
# ---------------------------------------------------------------------
app = Flask(__name__)
# data fetch using the destination
# ---------------------------------------------------------------------
@app.route('/getSuppliers', methods=['GET'])
def getSuppliersES5():
lv_request = getSuppliersList('ES5', '/sap/opu/odata/sap/EPM_REF_APPS_SHOP_SRV/Suppliers?$format=json')
return jsonify(lv_request)
# fetching of records having BasicAuthentication authorization
# ---------------------------------------------------------------------
def getSuppliersList(lv_dest, lv_string):
lv_usr = ""
lv_pass=""
lv_destination = BTPServices.getDestination(sDestinationService="python_dest_service", sDestinationName=lv_dest)
if lv_destination is None:
return "Error: Destination not found"
lv_url = lv_destination['destinationConfiguration']['URL'] + lv_string
lv_usr = lv_destination['destinationConfiguration']['User']
lv_pass = lv_destination['destinationConfiguration']['Password']
try:
lv_request = requests.get(lv_url, headers={'Accept': 'application/json'}, auth=HTTPBasicAuth(lv_usr, lv_pass))
lv_request.raise_for_status()
except requests.exceptions.HTTPError as err:
return jsonify(replies=str(err))
response_json = lv_request.json()
# clearing variables
del lv_destination, lv_url, lv_usr, lv_pass
return response_json
Aquí notarás que utilicé el marco Flask en Python e importé los módulos necesarios para el código. Luego invoqué el método getSuppliersES5 para recuperar una lista de proveedores. Este método, a su vez, llama al método getSuppliersList, que llama a un método genérico para obtener información de una instancia que se ha creado. Recupera los detalles del destino denominado «ES5». Posteriormente establece conexión y adquiere los datos de los proveedores del sistema demo ES5 del sistema SAP S/4HANA Cloud, luego de recibir la respuesta pude convertirla en una respuesta JSON.
Aquí hay un fragmento de código de BTPServices.py para la configuración de la conexión de destino SAP BTP.
from cfenv import AppEnv
import requests
def getDestination(sDestinationService, sDestinationName):
# Read the environment variables
# -------------------------------------------------------------------------------
env = AppEnv()
dest_service = env.get_service(name=sDestinationService)
if dest_service is None:
print(f"Service {sDestinationService} not found")
return None
sUaaCredentials = dest_service.credentials['clientid'] + ':' + dest_service.credentials['clientsecret']
# Request a JWT token to access the destination service
# -------------------------------------------------------------------------------
headers = {'Authorization': 'Basic '+sUaaCredentials, 'content-type': 'application/x-www-form-urlencoded'}
form = [('client_id', dest_service.credentials['clientid'] ),('client_secret', dest_service.credentials['clientsecret'] ), ('grant_type', 'client_credentials')]
url = dest_service.credentials['url'] +"/oauth/token"
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=form)
# Search your destination in the destination service
# -------------------------------------------------------------------------------
token = response.json()["access_token"]
headers= { 'Authorization': 'Bearer ' + token }
r = requests.get(dest_service.credentials['uri'] + '/destination-configuration/v1/destinations/'+sDestinationName, headers=headers)
print("DEST URI:",dest_service.credentials['uri'])
# Access the destination securely
# -------------------------------------------------------------------------------
destination = r.json()
return destination
El código anterior muestra cómo establecer la conexión con el servicio de destino y obtener la URL y otros detalles del sistema ES5, utilizando el mecanismo de token JWT.
Ahora cree los tres archivos restantes mencionados en la figura siguiente, ya que son necesarios para ejecutar las configuraciones de la aplicación.
La versión del paquete puede cambiar en el futuro según las versiones de estas bibliotecas.
Una vez realizados los cambios en la aplicación, ahora necesitamos implementar la aplicación en SAP BTP. El primer paso sería crear manifest.yml para definir las configuraciones de implementación.
---
applications:
- name: myPythonApp
routes:
- route: app-python.cfapps.ap21.hana.ondemand.com
path: ./
memory: 128M
stack: cflinuxfs4
disk_quota: 512M
buildpack: python_buildpack
command: python3 app.py
services:
- python_dest_service
Sigue estos pasos:
Después de la implementación exitosa de la aplicación, navegue hasta las subcuentas de SAP BTP, haga clic en el espacio de desarrollo y luego haga clic en la aplicación implementada como se menciona en el archivo manifest.yml.
Ahora haga clic en la URL como se muestra a continuación (“URL de la aplicación”). Abrirá los puntos finales de la API en una nueva pestaña del navegador y agregará el texto /getSuppliers.
A continuación se muestra la instantánea de la respuesta.
Este es el proceso utilizado para recuperar datos de proveedores de un sistema SAP S/4HANA Cloud a través de un marco de aplicación web que utiliza el lenguaje de programación Python.
Esta integración con SAP S/4HANA Cloud abre nuevas oportunidades para que otros lenguajes de programación, como Python, exploten plenamente sus capacidades en la implementación de dichos servicios, mejorando así el ecosistema general. Esta publicación no solo demostró la versatilidad de Python como lenguaje de programación, sino que también subrayó su potencial para mejorar la funcionalidad y eficiencia de SAP Business Application Studio.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073