Invoca Cloud Functions

En esta guía de inicio rápido, se muestra cómo invocar una función que publica un mensaje construido a partir de los argumentos que recibe la función mediante la API de Cloud Functions.

Antes de comenzar

Antes de ejecutar esta guía de inicio rápido, asegúrate de que tú o tus administradores hayan completado los siguientes requisitos previos:

  • Asegúrate de que la API de Cloud Functions esté habilitada en tu proyecto de Google Cloud.

    Ir a la biblioteca de API

  • Según el entorno en el que se aloja tu sistema SAP, configura la autenticación para invocar Cloud Functions. Si deseas obtener instrucciones, consulta Autenticación para invocar Cloud Functions. Configura las claves de cliente de la siguiente manera:

    • Para acceder al extremo de Cloud Function, crea una clave de cliente llamada DEMO-CF.
    • Para invocar la Cloud Function, crea una clave de cliente llamada DEMO-CF-INVOKER.
  • En la consola de Google Cloud, escribe una función de HTTP de 2ª gen., cf-gen2-hello-with-args, que publica un mensaje usando los argumentos proporcionados:

        exports.helloWorld = (req, res) => {
        let name = req.body.name || req.query.name;
        let full_name = `${req.body.firstname} ${req.body.lastname}`;
        res.status(200).send(`Hello ${name}! Full Name: ${full_name}`);
      };
    

    Para obtener información sobre cómo escribir funciones HTTP, consulta Escribe Cloud Functions.

Crea un programa para invocar Cloud Functions

  1. En el sistema SAP, crea un programa ejecutable en tu espacio de nombres personalizado (por ejemplo, Z o Y) mediante la transacción SE38.

    1. En la GUI de SAP, ingresa el código de transacción SE38.

    2. En el campo Programa, ingresa un nombre de tu programa, por ejemplo, ZDEMO_CLOUDFUNC_INVOKER.

    3. Haz clic en Crear.

    4. Especifica los atributos del programa:

      1. En el campo Título, ingresa un título para el programa, por ejemplo, Invoke Cloud Function using Cloud Function Invoker.

      2. En el campo Tipo, selecciona Executable Program.

      3. Haz clic en Guardar.

    5. Guarda el programa como un objeto local.

    6. En el Editor de ABAP, agrega el siguiente código:

      **********************************************************************
      *  Copyright 2024 Google LLC                                         *
      *                                                                    *
      *  Licensed under the Apache License, Version 2.0 (the "License");   *
      *  you may not use this file except in compliance with the License.  *
      *  You may obtain a copy of the License at                           *
      *      https://www.apache.org/licenses/LICENSE-2.0                   *
      *  Unless required by applicable law or agreed to in writing,        *
      *  software distributed under the License is distributed on an       *
      *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,      *
      *  either express or implied.                                        *
      *  See the License for the specific language governing permissions   *
      *  and limitations under the License.                                *
      **********************************************************************
      REPORT zr_qs_cfinvoker.
      
      DATA(lv_cf_name)  = CONV string( 'cf-gen2-hello-with-args' ).
      DATA(lv_msg)      = CONV string( '{"firstname": "John", "lastname" : "Doe"}' ).
      
      
      TRY.
          " Create a Client API stub for Cloud Functions
          DATA(lo_cloudfunc_client) = NEW /goog/cl_cloudfunc_v2( iv_key_name   = 'DEMO_CF' ).
          " Create a Client API stub for Cloud Function Invoker.
          " Internally this uses the Cloud Function instance to fetch the cloud function HTTP endpoint
          DATA(lo_cfinvoker_client) = NEW /goog/cl_cloudfunc_invoker( iv_key_name   = 'DEMO_CF_INVOKER' ).
      
          " Send additional query parameters as inputs to the cloud function.
          lo_cfinvoker_client->add_common_qparam( iv_name  = 'name'
                                                  iv_value = 'Johnny' ).
      
          lo_cfinvoker_client->invoke(
            EXPORTING
              iv_cf_name      = lv_cf_name            "Cloud Function Name
              iv_cf_location  = 'us-central1'         "Location where the Cloud Function is hosted
              io_cf_instance  = lo_cloudfunc_client   "Instance of cloud Function Client API Stub
              iv_body         = lv_msg                "Input payload to the Cloud Function
              iv_content_type = 'application/json'
              iv_method       = 'POST'
            IMPORTING
              es_output       = DATA(lv_output)
              ev_ret_code     = DATA(lv_ret_code)
              ev_err_text     = DATA(lv_err_text)
              es_err_resp     = DATA(ls_err_resp)
          ).
      
          IF lo_cfinvoker_client->is_success( iv_code = lv_ret_code ).
            WRITE: / 'HTTP Return Code:', lv_ret_code.
            WRITE: / 'Response:', lv_output. "Output of cloud function
          ELSE.
            WRITE: / 'HTTP Return Code:', lv_ret_code.
            WRITE: / 'Error:', lv_err_text.
          ENDIF.
      
        CATCH /goog/cx_sdk INTO DATA(lo_exp).
          WRITE: / lo_exp->get_text( ).
      ENDTRY.

    Reemplaza lo siguiente:

    • DEMO_CF: nombre de la clave de cliente que se usa para acceder al extremo de Cloud Function.
    • DEMO_CF_INVOKER: Es el nombre de la clave de cliente que se usa para invocar la Cloud Function.
  2. Ejecuta tu aplicación en SE38. Si se ejecuta de forma correcta, se mostrará el siguiente resultado:

     HTTP Return Code:        200
     Response: Hello Johnny! Full Name: John Doe
    

¿Qué sigue?