1. Introducción
En este codelab, enumeramos los pasos para crear una cuenta de servicio y usarla para configurar la clave del cliente y la tabla de asignación 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 nuevo de Google Cloud, se habilitan automáticamente un conjunto específico de APIs y servicios, incluido Cloud Storage. Esto garantiza que puedas aprovechar de inmediato esta sólida solución de almacenamiento. 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 "Instala la versión de prueba de ABAP Platform en Google Cloud Platform y el SDK de ABAP" 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.
- Leer un archivo del servidor de aplicaciones y subirlo 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.
- La GUI de SAP (Windows o Java) instalada en tu sistema Si SAP GUI ya está instalado 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 Instala la versión de prueba de ABAP Platform en Google Cloud Platform y el SDK de ABAP 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. La zonaus-west4-bse usa 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.
- Antes de continuar con este codelab, debes completar el codelab 1 (Instala la versión de prueba de la plataforma ABAP 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 la VM de Compute Engine).
- Si completaste los codelabs 1 y 2, se te habrá aprovisionado un sistema de prueba de la plataforma 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 la conectividad necesarias para realizar los pasos que se proporcionan en este codelab. Por lo tanto, debes completar el codelab 1 y el codelab 2 antes de continuar con este codelab.
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 que creaste 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 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.
En 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 Z-Report para crear un bucket en Cloud Storage
- Accede a tu sistema SAP.
- Ve al código de transacción
SE38y crea un programa de informes con el nombreZDEMO_CREATE_BUCKET.. - En la ventana emergente que se abre, proporciona los detalles que se muestran 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á el bucket. 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 de GitHub con el siguiente vínculo: Archivo de muestra
- Accede a tu sistema SAP
- Ve al código de transacción
SE38y crea un programa de informes con el nombreZDEMO_UPLOAD_FILE.. - En la ventana emergente que se abre, proporciona los detalles que se muestran 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 archivos a Cloud Storage
En esencia, este programa ABAP se integra con Google Cloud Storage. Lee un archivo del servidor de aplicaciones y pasa los datos del archivo al cliente auxiliar 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
Establecer conexión:
- Establece una conexión HTTP con el servicio de Google Storage a través de la clase
/GOOG/CL_STORAGE_V1.
Leer datos de archivo
- Lee el archivo en el servidor de aplicaciones realizando un
OPENDATASETy, luego, llama al módulo de funciones estándar de SAPSCMS_STRING_TO_XSTRINGpara convertirlo al formatoXSTRING.
Agrega parámetros de consulta comunes
- Para lograr la fragmentación, el tipo de carga que debemos elegir es la carga "reanudable". 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 modificar este tamaño de fragmentación configurando el parámetro
IV_P_CHUNK_SIZE, pero se recomienda usar el parámetro de configuración predeterminado. - Para que el método de la API sepa que se debe elegir la opción de carga "reanudable", llamamos al método
ADD_COMMON_QPARAMy pasamosuploadTypecomoresumable..
Insertar objetos
- Llama al método
INSERT_OBJECTSpasando los siguientes parámetros: IV_Q_NAME: Nombre del archivo con el que se almacenará el contenido en Cloud StorageIV_P_BUCKET: Nombre del bucket en el que se debe subir el archivoIS_DATA: Datos del archivo que se deben subirIV_CONTENT_TYPE: Es el tipo de contenido del archivo. En nuestro caso actual, usamos "text/plain" 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 dejamos que el stub del cliente de la API use el valor predeterminado asociado a este parámetro, que es de 8 MB.
Controla los errores y los casos de éxito:
- 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 capacidades 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, organizaciones y aplicaciones.
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 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
- Recibe un evento de Cloud Pub/Sub
- Usa la API de Cloud Translation para traducir textos
- Usa la API de DLP para ocultar la IIP
- Cómo llamar 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
Borra 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