Загрузите файл в Cloud Storage с функцией фрагментирования

Загрузите файл в Cloud Storage с функцией фрагментирования

О практической работе

subjectПоследнее обновление: сент. 4, 2024
account_circleАвторы: Satish Inamdar

1. Введение

В этой лаборатории кода мы перечислили шаги по созданию учетной записи службы и ее использованию для настройки таблицы ключа клиента и карты связи, предоставленной ABAP SDK для Google Cloud, и вызова API JSON Cloud Storage в ABAP.

В этой лаборатории кода используются следующие сервисы Google Cloud:

  • Вычислительный двигатель
  • Сетевые службы
  • Облачная оболочка
  • Облачное хранилище JSON API V1

Примечание. Когда вы создаете новый проект Google Cloud, автоматически включается определенный набор API и сервисов, включая облачное хранилище. Это гарантирует, что вы сможете немедленно воспользоваться преимуществами этого надежного решения для хранения данных. Поэтому вам не нужно включать его в качестве дополнительного шага.

Предварительные условия

Что ты построишь

Вы создадите следующие программы в своей системе 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. Прежде чем начать

6757b2fb50ddcc2d.png

  • Выполните следующие команды для аутентификации своей учетной записи и установите проект по умолчанию 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. Создайте учетную запись службы с ролью пользователя объекта хранения.

Чтобы создать сервисную учетную запись с необходимой ролью, выполните следующие действия:

  1. Выполните следующую команду в терминале Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. Теперь добавьте необходимые роли в сервисную учетную запись, созданную на предыдущем шаге:
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 на идентификатор вашего проекта.

  1. Чтобы убедиться, что роль добавлена, перейдите на страницу IAM . Созданная вами учетная запись службы должна быть указана вместе с назначенной ей ролью, как показано ниже:

92d75ce1554efb69.png

5. Создание конфигурации ключа клиента

Теперь, когда вы настроили предварительные условия на стороне Google Cloud, мы можем продолжить настройку на стороне SAP.

Для конфигурации, связанной с аутентификацией и подключением, ABAP SDK для Google Cloud использует таблицу /GOOG/CLIENT_KEY

Чтобы сохранить конфигурацию в таблице /GOOG/CLIENT_KEY, выполните следующие действия:

  1. В графическом интерфейсе SAP введите код транзакции SPRO .
  2. Щелкните Справочное IMG SAP .
  3. Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить ключ клиента.
  4. Поддерживайте следующие значения для полей:

Поле

Ценить

Имя облачного ключа Google

TEST_STORAGE

Имя учетной записи облачной службы Google

abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com

Облачная область Google

https://www.googleapis.com/auth/cloud-platform

Идентификатор проекта

abap-sdk-poc

Класс авторизации

/GOOG/CL_AUTH_GOOGLE

Все остальные поля оставьте пустыми

6. Создайте Z-отчет для создания сегмента в облачном хранилище

  1. Войдите в свою систему SAP.
  2. Перейдите к коду транзакции SE38 и создайте программу отчетов с именем ZDEMO_CREATE_BUCKET.
  3. В открывшемся всплывающем окне укажите детали, как показано ниже:

93f3edb7bbb5c3c4.png

В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета по вашему выбору.

  1. В редакторе 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.
 

Обратите внимание: если имя корзины не является глобально уникальным, корзина не будет создана, поэтому попробуйте использовать уникальное имя для корзины перед выполнением кода.

  1. Сохраните и активируйте отчет.
  2. Выполнить отчет (нажмите F8).

В случае успешного выполнения вы должны увидеть выходные данные отчета, как показано ниже:

ff232fba9a4178fb.png

7. Создайте Z-отчет для чтения файла с сервера приложений и загрузки его в корзину облачного хранилища.

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

В этом примере мы используем текстовый файл размером ~40 МБ, который уже загружен на сервер приложений в каталоге /tmp .

Вы также можете скачать эту папку с GitHub, воспользовавшись следующей ссылкой: Образец файла.

  1. Войдите в свою систему SAP
  2. Перейдите к коду транзакции SE38 и создайте программу отчетов с именем ZDEMO_UPLOAD_FILE.
  3. В открывшемся всплывающем окне укажите детали, как показано ниже:

19cbe6987bba58e4.png

В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета по вашему выбору.

  1. В редакторе 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( ).
  1. Сохраните и активируйте отчет.
  2. Выполнить отчет (нажмите F8).

В случае успешного выполнения вы должны увидеть выходные данные отчета, как показано ниже:

c982bfcd07d7e487.png

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

90678b475e165adf.png

1886be610c63ed6b.png

8. Загрузить файл в Cloud Storage с помощью объясненного кода ABAP SDK

По сути, эта программа ABAP интегрируется с Google Cloud Storage. Он считывает файл с сервера приложений и передает данные файла в клиентскую заглушку API хранилища для загрузки в корзину хранилища, созданную в предыдущей программе создания отчетов.

Программа отчета, созданная вами для загрузки файла, выполняет следующие действия:

Пошаговая разбивка

Установить соединение:

  • Он устанавливает HTTP-соединение со службой хранилища Google, используя класс /GOOG/CL_STORAGE_V1 .

Чтение данных файла

  • Считывает файл на сервере приложений, выполняя OPEN DATASET , а затем вызывает стандартный функциональный модуль SAP SCMS_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

Удаление отдельных ресурсов

  1. Удалите вычислительный экземпляр:
gcloud compute instances delete abap-trial-docker
  1. Удалите правила брандмауэра:
gcloud compute firewall-rules delete sapmachine
  1. Удалить сервисный аккаунт:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com