Acerca de este codelab
1. Introducción
En este codelab, enumeramos los pasos para crear una cuenta de servicio y usarla para configurar la tabla de claves de cliente y el mapa de comunicación que proporciona el SDK de ABAP para Google Cloud, y para invocar la API de JSON de Cloud Storage en ABAP.
En este codelab, se usan los siguientes servicios de Google Cloud:
- Compute Engine
- Servicios de red
- Cloud Shell
- API de Cloud Storage JSON v1
Nota: Cuando creas un proyecto de Google Cloud nuevo, se habilita automáticamente un conjunto específico de APIs y servicios, incluido Cloud Storage. De esta manera, te aseguras de poder aprovechar esta solución de almacenamiento sólida de inmediato. Por lo tanto, no es necesario que lo habilites como un paso adicional.
Requisitos previos
- Asegúrate de tener acceso a un sistema SAP con el SDK de ABAP para Google Cloud instalado.
- Puedes consultar el codelab "Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK" para configurar un sistema nuevo.
Qué compilarás
Crearás los siguientes programas en tu sistema SAP con el SDK de ABAP para Google Cloud.
- Cree un bucket de Cloud Storage.
- Lee un archivo del servidor de aplicaciones y súbelo al bucket de Cloud Storage creado.
2. Requisitos
- Un navegador, como Chrome o Firefox
- Un proyecto de Google Cloud con la facturación habilitada o crea una cuenta de prueba gratuita de 90 días para Google Cloud Platform.
- GUI de SAP (Windows o Java) instalada en tu sistema Si la GUI de SAP ya está instalada en tu laptop, conéctate a SAP con la dirección IP externa de la VM como la IP del servidor de aplicaciones. Si usas Mac, también puedes instalar la GUI de SAP para Java disponible en este vínculo.
3. Antes de comenzar
- Asegúrate de tener acceso a un sistema SAP con el SDK de ABAP para Google Cloud instalado.
- Puedes consultar el codelab Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK para configurar un sistema nuevo.
- En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud (por ejemplo,
abap-sdk-poc).
- Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto. Omite este paso si usas la cuenta de prueba gratuita de 90 días.
- Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud. En la consola de Cloud, haz clic en Activar Cloud Shell en la esquina superior derecha:
- Ejecuta los siguientes comandos para autenticar tu cuenta y establecer el proyecto predeterminado en
abap-sdk-poc
. Se usa la zonaus-west4-b
como ejemplo. Si es necesario, cambia el proyecto y la zona en los siguientes comandos según tus preferencias.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Debes tener acceso a un sistema SAP con el SDK de ABAP para Google Cloud instalado.
- Debes completar el codelab 1 (Instala la versión de prueba de ABAP Platform 1909 en Google Cloud Platform y el SDK de ABAP para Google Cloud) y el codelab 2 (Configura la autenticación del SDK de ABAP con tokens para SAP alojado en una VM de Compute Engine) antes de continuar con este codelab.
- Si completaste los codelabs 1 y 2, se te aprovisionó un sistema de prueba de la plataforma de ABAP 1909 en Google Cloud, junto con la configuración necesaria para la autenticación y la conectividad.
- Si no completaste los codelabs 1 y 2, no tendrás toda la infraestructura y conectividad necesarias para realizar los pasos que se proporcionan en este codelab. Por lo tanto, debes completar los codelabs 1 y 2 antes de continuar con este.
4. Crea una cuenta de servicio con el rol de usuario de objetos de almacenamiento
Para crear una cuenta de servicio con el rol requerido, sigue estos pasos:
- Ejecuta el siguiente comando en la terminal de Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Ahora, agrega los roles necesarios a la cuenta de servicio creada en el paso anterior:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/storage.objectUser'
El comando anterior usa abap-sdk-poc
como marcador de posición para el proyecto de Google Cloud. Reemplaza abap-sdk-poc
por el ID de tu proyecto.
- Para verificar que se haya agregado el rol, ve a la página IAM. La cuenta de servicio que creaste debería aparecer en la lista junto con el rol que se le asignó, como se muestra a continuación:
5. Crea la configuración de la clave de cliente
Ahora que configuraste los requisitos previos en Google Cloud, podemos continuar con la configuración en SAP.
Para la configuración relacionada con la autenticación y la conectividad, el SDK de ABAP para Google Cloud usa la tabla /GOOG/CLIENT_KEY
.
Para mantener la configuración en la tabla /GOOG/CLIENT_KEY, sigue estos pasos:
- En la GUI de SAP, ingresa el código de transacción
SPRO
. - Haz clic en IMG de referencia de SAP.
- Haz clic en SDK de ABAP para Google Cloud > Configuración básica > Configurar clave de cliente.
- Mantén los siguientes valores en los campos:
Campo | Valor |
Nombre de la clave de Google Cloud | TEST_STORAGE |
Nombre de la cuenta de servicio de Google Cloud |
|
Permiso de Google Cloud |
|
ID del proyecto | abap-sdk-poc |
Clase de autorización |
|
Deja todos los demás campos en blanco
6. Crea un informe Z para crear un bucket en Cloud Storage
- Accede a tu sistema SAP.
- Ve al código de transacción
SE38
y crea un programa de informes con el nombreZDEMO_CREATE_BUCKET.
. - En la ventana emergente que se abre, proporciona los detalles que se indican a continuación:
En la siguiente ventana emergente, selecciona Objeto local o Proporciona un nombre de paquete según tu elección.
- En el editor de ABAP, agrega el siguiente código:
DATA lv_json_response TYPE string.
DATA ls_input TYPE /goog/cl_storage_v1=>ty_001.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
TRY.
lo_storage = NEW #( iv_key_name = 'TEST_STORAGE' ).
" Bucket Name should be globally unique & permanent
ls_input = VALUE #( name = 'newtest_bucket_abapsdk_gcloud001' ).
lo_storage->insert_buckets
( EXPORTING iv_q_project = CONV #( lo_storage->gv_project_id )
is_input = ls_input
IMPORTING es_raw = lv_json_response
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket was created:'
)->next_section( 'JSON Response:'
)->write_json( lv_json_response
)->display( ).
ELSE.
DATA(lv_msg) = lv_ret_code && ':' && lv_err_text.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket creation failed;'
)->next_section( 'Error:'
)->write_json( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
Ten en cuenta que, si el nombre del bucket no es único a nivel global, no se creará. Por lo tanto, intenta usar un nombre único para el bucket antes de ejecutar el código.
- Guarda y activa el informe.
- Ejecuta el informe (presiona F8).
Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación:
7. Crea un informe Z para leer un archivo del servidor de aplicaciones y subirlo al bucket de Cloud Storage
Antes de realizar esta actividad, debes preparar un archivo de texto grande. Aquí ya tenemos un archivo de texto grande creado y subido a nuestro servidor de aplicaciones. Puedes usar el código de transacción CG3Z para subir un archivo al servidor de aplicaciones de tu sistema SAP.
En este ejemplo, usamos un archivo de texto de aproximadamente 40 MB, que ya se subió al servidor de aplicaciones en el directorio /tmp
.
También puedes descargar esta carpeta desde GitHub con el siguiente vínculo: Archivo de muestra
- Accede a tu sistema SAP
- Ve al código de transacción
SE38
y crea un programa de informes con el nombreZDEMO_UPLOAD_FILE.
. - En la ventana emergente que se abre, proporciona los detalles que se indican a continuación:
En la siguiente ventana emergente, selecciona Objeto local o Proporciona un nombre de paquete según tu elección.
- En el editor de ABAP, agrega el siguiente código:
DATA lv_file_length TYPE i.
DATA lv_msg TYPE string.
DATA lv_dset TYPE string.
DATA lv_data TYPE string.
DATA ls_data TYPE xstring.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
" Read file data from the application server
DATA(dset) = '/tmp/sample_file.txt'.
OPEN DATASET dset FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'Cannot opening/reading dataset' TYPE 'E'.
ENDIF.
DO.
READ DATASET dset INTO lv_dset.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CONCATENATE lv_data lv_dset INTO lv_data SEPARATED BY cl_abap_char_utilities=>newline.
CLEAR lv_dset.
ENDDO.
CLOSE DATASET dset.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING text = lv_data
IMPORTING buffer = ls_data
EXCEPTIONS failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Conversion from string to xstring failed' TYPE 'E'.
ENDIF.
TRY.
lo_storage = NEW #( iv_key_name = 'DEMO_STORAGE' ).
lo_storage->add_common_qparam( iv_name = 'uploadType' iv_value = 'resumable' ).
lo_storage->insert_objects( EXPORTING iv_q_name = 'large_text_file_demo.txt'
iv_p_bucket = 'newtest_bucket_abapsdk_gcloud001'
is_data = ls_data
iv_content_type = 'text/pdf'
IMPORTING es_output = data(ls_output)
ev_ret_code = data(lv_ret_code)
ev_err_text = data(lv_err_text)
es_err_resp = data(ls_err_resp) ).
IF lo_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Object was uploaded successfully'
)->write_text( 'Object Self Link:'
)->write_text( ls_output-self_link
)->display( ).
ELSE.
cl_demo_output=>new(
)->begin_section( 'Error:'
)->write_text( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO data(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDTRY.
lo_storage->close( ).
- Guarda y activa el informe.
- Ejecuta el informe (presiona F8).
Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación:
Para verificar si el archivo se subió correctamente, navega a tu bucket de Cloud Storage como se muestra a continuación.
8. Explicación del código del SDK de ABAP para subir un archivo a Cloud Storage
En esencia, este programa de ABAP se integra en Google Cloud Storage. Lee un archivo del servidor de aplicaciones y pasa los datos del archivo al stub de cliente de la API de Storage para subirlo a un bucket de almacenamiento, que se creó en el programa de informes anterior.
El programa de informes que creaste para subir un archivo hace lo siguiente:
Desglose paso a paso
Establece la conexión:
- Establece una conexión HTTP al servicio de Google Storage con la clase
/GOOG/CL_STORAGE_V1
.
Cómo leer datos de archivos
- Lee el archivo en el servidor de aplicaciones realizando un
OPEN
DATASET
y, luego, llama al módulo de funciones estándar de SAPSCMS_STRING_TO_XSTRING
para convertirlo al formatoXSTRING
.
Cómo agregar parámetros de consulta comunes
- Para lograr el almacenamiento en fragmentos, el tipo de carga que debemos elegir es la carga "Resumable". De forma predeterminada, cuando se selecciona la carga reanudable, los datos del archivo se dividen en fragmentos de 8 MB y se suben. Sin embargo, los desarrolladores pueden alterar este tamaño de fragmentación configurando el parámetro
IV_P_CHUNK_SIZE
, pero se recomienda usar la configuración predeterminada. - Para informarle al método de la API que se debe elegir la opción de carga "Resumable", llamamos al método
ADD_COMMON_QPARAM
y pasamosuploadType
comoresumable.
.
Inserta objetos
- Llama al método
INSERT_OBJECTS
pasándole los siguientes parámetros: IV_Q_NAME
: Es el nombre del archivo con el que se almacenará el contenido en Cloud Storage.IV_P_BUCKET
: Es el nombre del bucket al que se debe subir el archivo.IS_DATA
: Datos de archivos que se deben subirIV_CONTENT_TYPE
: Es el tipo de contenido del archivo. En nuestro caso, usamos "texto/sin formato" porque subimos un archivo de texto.
Ten en cuenta que no pasamos ningún valor al parámetro de importación IV_CHUNK_SIZE
y permitimos que el stub de cliente de la API use el valor predeterminado asociado con este parámetro, que es de 8 MB.
Cómo controlar el éxito o los errores:
- Muestra la respuesta de la API según si la llamada a la API se realizó correctamente o no.
Cerrar conexión:
- Cierra la conexión HTTP al servicio de almacenamiento.
9. Felicitaciones
¡Felicitaciones! Completaste correctamente el codelab "Cómo subir un archivo a un bucket de Cloud Storage".
La API de JSON de Cloud Storage tiene muchas funciones y, con el SDK de ABAP para Google Cloud, puedes acceder a ellas directamente en tus sistemas SAP de forma nativa con ABAP.
Google Cloud Storage es una excelente opción para almacenar y administrar grandes cantidades de datos. Lo usan una amplia variedad de empresas, aplicaciones y organizaciones.
Estos son algunos de los beneficios de usar Google Cloud Storage:
- Rentabilidad: Google Cloud Storage es una forma rentable de almacenar y administrar grandes cantidades de datos.
- Simplicidad: Google Cloud Storage es fácil de usar, con una API simple e intuitiva.
- Flexibilidad: Google Cloud Storage se puede usar con una variedad de aplicaciones y plataformas.
Ahora puedes continuar con el siguiente codelab para seguir con tu recorrido de aprendizaje sobre el uso del SDK de ABAP para acceder a varios servicios de Google Cloud.
- Envía un evento a Pub/Sub
- Cómo recibir un evento de Cloud Pub/Sub
- Usa la API de Cloud Translation para traducir textos
- Usa la API de DLP para ocultar PII
- Llama a BigQuery ML desde ABAP
10. Limpia
Si no deseas continuar con los codelabs adicionales relacionados con el SDK de ABAP para Google Cloud, continúa con la limpieza.
Borra el proyecto
- Borra el proyecto de Google Cloud:
gcloud projects delete abap-sdk-poc
Cómo borrar recursos individuales
- Borra la instancia de procesamiento:
gcloud compute instances delete abap-trial-docker
- Borra las reglas de firewall:
gcloud compute firewall-rules delete sapmachine
- Borra la cuenta de servicio:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com