1. Введение
В этой лаборатории кода мы перечислили шаги по созданию учетной записи службы и ее использованию для настройки таблицы ключа клиента и карты связи, предоставленной ABAP SDK для Google Cloud, и вызова API JSON Cloud Storage в ABAP.
В этой лаборатории кода используются следующие сервисы Google Cloud:
- Вычислительный двигатель
- Сетевые службы
- Облачная оболочка
- Облачное хранилище JSON API V1
Примечание. Когда вы создаете новый проект Google Cloud, автоматически включается определенный набор API и сервисов, включая облачное хранилище. Это гарантирует, что вы сможете немедленно воспользоваться преимуществами этого надежного решения для хранения данных. Поэтому вам не нужно включать его в качестве дополнительного шага.
Предварительные условия
- Убедитесь, что у вас есть доступ к системе SAP с установленным ABAP SDK для Google Cloud.
- Вы можете обратиться к кодовой лаборатории « Установить пробную версию платформы ABAP на Google Cloud Platform и установить ABAP SDK », чтобы настроить новую систему.
Что ты построишь
Вы создадите следующие программы в своей системе SAP, используя ABAP SDK для Google Cloud.
- Создайте сегмент облачного хранилища.
- Считайте файл с сервера приложений и загрузите его в созданную корзину Cloud Storage.
2. Требования
- Браузер, например Chrome или Firefox .
- Проект Google Cloud с включенной оплатой или создайте 90-дневную бесплатную пробную учетную запись для Google Cloud Platform.
- SAP GUI (Windows или Java), установленный в вашей системе. Если графический интерфейс SAP уже установлен на вашем ноутбуке, подключитесь к SAP, используя внешний IP-адрес виртуальной машины в качестве IP-адреса сервера приложений. Если вы используете Mac, вы также можете установить графический интерфейс SAP для Java, доступный по этой ссылке.
3. Прежде чем начать
- Убедитесь, что у вас есть доступ к системе SAP с установленным ABAP SDK для Google Cloud.
- Вы можете обратиться к лаборатории кода «Установить пробную версию платформы ABAP на Google Cloud Platform» и «Установить ABAP SDK», чтобы настроить новую систему.
-  В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud (например: abap-sdk-poc).
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте . Пропустите этот шаг, если вы используете 90-дневную бесплатную пробную учетную запись .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud. В Cloud Console нажмите «Активировать Cloud Shell» в правом верхнем углу:

-  Выполните следующие команды для аутентификации своей учетной записи и установите проект по умолчанию abap-sdk-poc. В качестве примера используется зонаus-west4-b. При необходимости измените проект и зону с помощью следующих команд в соответствии с вашими предпочтениями.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- У вас должен быть доступ к системе SAP с установленным ABAP SDK для Google Cloud.
- Прежде чем приступить к этой лаборатории кода, необходимо выполнить лабораторную работу 1 ( Установить пробную версию платформы ABAP 1909 на Google Cloud Platform и установить ABAP SDK для Google Cloud ) и лабораторную работу 2 ( Настроить аутентификацию ABAP SDK с использованием токенов для SAP, размещенного на виртуальной машине Compute Engine ).
- Если вы завершили Codelab 1 и Codelab 2, это предоставит вам пробную систему ABAP Platform 1909 в Google Cloud, а также необходимые настройки для аутентификации и подключения.
- Если вы не завершили Лабораторию кода 1 и Лабораторию кода 2, у вас не будет всей необходимой инфраструктуры и возможностей подключения для выполнения шагов, описанных в этой лаборатории кода. Таким образом, вам необходимо завершить кодовую таблицу 1 и кодовую таблицу 2, прежде чем приступать к этой кодовой таблице.
4. Создайте учетную запись службы с ролью пользователя объекта хранения.
Чтобы создать сервисную учетную запись с необходимой ролью, выполните следующие действия:
- Выполните следующую команду в терминале Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Теперь добавьте необходимые роли в сервисную учетную запись, созданную на предыдущем шаге:
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'
 Приведенная выше команда использует abap-sdk-poc в качестве заполнителя для проекта Google Cloud. Замените abap-sdk-poc на идентификатор вашего проекта.
- Чтобы убедиться, что роль добавлена, перейдите на страницу IAM . Созданная вами учетная запись службы должна быть указана вместе с назначенной ей ролью, как показано ниже:

5. Создайте конфигурацию ключа клиента.
Теперь, когда вы настроили предварительные условия на стороне Google Cloud, мы можем продолжить настройку на стороне SAP.
 Для конфигурации, связанной с аутентификацией и подключением, ABAP SDK для Google Cloud использует таблицу /GOOG/CLIENT_KEY
Чтобы сохранить конфигурацию в таблице /GOOG/CLIENT_KEY, выполните следующие действия:
-  В графическом интерфейсе SAP введите код транзакции SPRO.
- Щелкните Справочное IMG SAP .
- Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить ключ клиента.
- Поддерживайте следующие значения для полей:
| Поле | Ценить | 
| Имя облачного ключа Google | TEST_STORAGE | 
| Имя учетной записи облачной службы Google |   | 
| Облачная область Google |   | 
| Идентификатор проекта | abap-sdk-poc | 
| Класс авторизации |   | 
Все остальные поля оставьте пустыми
6. Создайте Z-отчет для создания сегмента в облачном хранилище.
- Войдите в свою систему SAP.
-  Перейдите к коду транзакции SE38и создайте программу отчетов с именемZDEMO_CREATE_BUCKET.
- В открывшемся всплывающем окне укажите детали, как показано ниже:

В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета по вашему выбору.
- В редакторе ABAP добавьте следующий код:
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.
 
Обратите внимание: если имя корзины не является глобально уникальным, корзина не будет создана, поэтому попробуйте использовать уникальное имя для корзины перед выполнением кода.
- Сохраните и активируйте отчет.
- Выполнить отчет (нажмите F8).
В случае успешного выполнения вы должны увидеть выходные данные отчета, как показано ниже:

7. Создайте Z-отчет для чтения файла с сервера приложений и загрузки его в корзину облачного хранилища.
Прежде чем выполнить это действие, вам необходимо подготовить большой текстовый файл. Здесь у нас уже есть большой текстовый файл, созданный и загруженный на наш сервер приложений. Вы можете использовать код транзакции CG3Z для загрузки файла на сервер приложений вашей системы SAP.
 В этом примере мы используем текстовый файл размером ~40 МБ, который уже загружен на сервер приложений в каталоге /tmp .
Вы также можете скачать эту папку с GitHub, воспользовавшись следующей ссылкой: Образец файла.
- Войдите в свою систему SAP
-  Перейдите к коду транзакции SE38и создайте программу отчетов с именемZDEMO_UPLOAD_FILE.
- В открывшемся всплывающем окне укажите детали, как показано ниже:

В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета по вашему выбору.
- В редакторе ABAP добавьте следующий код:
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( ).
- Сохраните и активируйте отчет.
- Выполнить отчет (нажмите F8).
В случае успешного выполнения вы должны увидеть выходные данные отчета, как показано ниже:

Вы можете проверить, был ли файл успешно загружен или нет, перейдя, как показано ниже, к своему сегменту облачного хранилища.


8. Загрузите файл в облачное хранилище с помощью объясненного кода ABAP SDK.
По сути, эта программа ABAP интегрируется с Google Cloud Storage. Он считывает файл с сервера приложений и передает данные файла в клиентскую заглушку API хранилища для загрузки в корзину хранилища, созданную в предыдущей программе создания отчетов.
Программа отчета, созданная вами для загрузки файла, выполняет следующие действия:
Пошаговая разбивка
Установить соединение:
-  Он устанавливает HTTP-соединение со службой хранилища Google, используя класс /GOOG/CL_STORAGE_V1.
Чтение данных файла
-  Считывает файл на сервере приложений, выполняя OPENDATASET, а затем вызывает стандартный функциональный модуль SAPSCMS_STRING_TO_XSTRINGдля преобразования в форматXSTRING.
Добавьте общие параметры запроса
-  Чтобы добиться фрагментации, нам нужно выбрать тип загрузки «Возобновляемая». По умолчанию, когда выбрана возобновляемая загрузка, данные файла делятся на фрагменты по 8 МБ и загружаются. Однако разработчики могут изменить этот размер фрагментации, установив параметр IV_P_CHUNK_SIZE, но рекомендуется использовать настройку по умолчанию.
-  Чтобы сообщить методу API, что необходимо выбрать опцию загрузки «Resumable», мы вызываем метод ADD_COMMON_QPARAMи передаемuploadTypeкакresumable.
Вставить объекты
-  Вызывает метод INSERT_OBJECTS, передавая ему следующие параметры:
-  IV_Q_NAME: имя файла, под которым содержимое должно храниться в облачном хранилище.
-  IV_P_BUCKET: имя сегмента, в который необходимо загрузить файл.
-  IS_DATA: данные файла, которые необходимо загрузить.
-  IV_CONTENT_TYPE: Тип контента файла. Для нашего текущего сценария мы используем «текст/обычный» при загрузке текстового файла.
 Обратите внимание, что мы не передаем никакого значения параметру импорта IV_CHUNK_SIZE и разрешаем заглушке клиента API использовать значение по умолчанию, связанное с этим параметром, которое составляет 8 МБ.
Обработка успехов/ошибок:
- Отображает ответ API в зависимости от того, был ли вызов API успешным или нет.
Закрыть соединение:
- Закрывает HTTP-соединение со службой хранения.
9. Поздравления
Поздравляем! Вы успешно завершили лабораторную работу «Загрузка файла в корзину облачного хранилища».
JSON API облачного хранилища обладает множеством возможностей, и с помощью ABAP SDK для Google Cloud вы можете получить к ним доступ непосредственно в своих системах SAP, используя ABAP.
Google Cloud Storage — отличный вариант для хранения и управления большими объемами данных. Он используется широким кругом предприятий, предприятий и приложений.
Некоторые преимущества использования Google Cloud Storage:
- Экономическая эффективность: Google Cloud Storage — это экономичный способ хранения больших объемов данных и управления ими.
- Простота: Google Cloud Storage прост в использовании благодаря простому и интуитивно понятному API.
- Гибкость: Google Cloud Storage можно использовать с различными приложениями и платформами.
Теперь вы можете приступить к приведенной ниже кодовой лаборатории, чтобы продолжить обучение использованию ABAP SDK для доступа к различным облачным службам Google.
- Отправить событие в Pub/Sub
- Получить событие из Cloud Pub/Sub
- Используйте Cloud Translation API для перевода текстов
- Используйте DLP API для редактирования личных данных
- Вызов BigQuery ML из ABAP
10. Очистка
Если вы не хотите продолжать работу с дополнительными лабораториями кода, связанными с ABAP SDK для Google Cloud, продолжите очистку.
Удалить проект
- Удалите проект Google Cloud:
gcloud projects delete abap-sdk-poc
Удаление отдельных ресурсов
- Удалите вычислительный экземпляр:
gcloud compute instances delete abap-trial-docker
- Удалите правила брандмауэра:
gcloud compute firewall-rules delete sapmachine
- Удалить сервисный аккаунт:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com