آپلود فایل به Cloud Storage با chunking

۱. مقدمه

در این آزمایشگاه کد، مراحل ایجاد یک حساب کاربری سرویس و استفاده از آن برای پیکربندی جدول Client Key و Communication Map ارائه شده توسط ABAP SDK برای Google Cloud و فراخوانی API JSON مربوط به Cloud Storage در ABAP را فهرست کرده‌ایم.

سرویس‌های ابری گوگل زیر در این آزمایشگاه کد استفاده می‌شوند:

  • موتور محاسباتی
  • خدمات شبکه
  • پوسته ابری
  • ذخیره‌سازی ابری JSON API نسخه ۱

توجه: وقتی یک پروژه جدید Google Cloud ایجاد می‌کنید، مجموعه‌ای خاص از APIها و سرویس‌ها، از جمله Cloud Storage، به طور خودکار فعال می‌شوند. این تضمین می‌کند که می‌توانید بلافاصله از این راهکار ذخیره‌سازی قوی بهره‌مند شوید. بنابراین نیازی به فعال کردن آن به عنوان یک مرحله اضافی نیست.

پیش‌نیازها

آنچه خواهید ساخت

شما برنامه‌های زیر را در سیستم SAP خود با استفاده از ABAP SDK برای Google Cloud ایجاد خواهید کرد.

  • یک سطل ذخیره‌سازی ابری ایجاد کنید.
  • یک فایل را از سرور برنامه بخوانید و آن را در سطل ذخیره‌سازی ابری ایجاد شده آپلود کنید.

۲. الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس .
  • یک پروژه گوگل کلود با قابلیت پرداخت فعال یا ایجاد یک حساب آزمایشی ۹۰ روزه رایگان برای پلتفرم گوگل کلود.
  • رابط کاربری گرافیکی SAP (ویندوز یا جاوا) روی سیستم شما نصب شده باشد. اگر رابط کاربری گرافیکی SAP از قبل روی لپ‌تاپ شما نصب شده است، با استفاده از آدرس IP خارجی ماشین مجازی به عنوان IP سرور برنامه به SAP متصل شوید. اگر از مک استفاده می‌کنید، می‌توانید رابط کاربری گرافیکی SAP برای جاوا را که در این لینک موجود است، نصب کنید.

۳. قبل از شروع

6757b2fb50ddcc2d.png

  • دستورات زیر را برای احراز هویت حساب کاربری خود اجرا کنید و پروژه پیش‌فرض را روی abap-sdk-poc تنظیم کنید. Zone us-west4-b به عنوان مثال استفاده شده است. در صورت نیاز، لطفاً پروژه و Zone را در دستورات زیر بر اساس ترجیح خود تغییر دهید.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
  • شما باید به یک سیستم SAP که ABAP SDK برای Google Cloud روی آن نصب شده باشد، دسترسی داشته باشید.
  • قبل از ادامه‌ی این آزمایشگاه کد، باید آزمایشگاه کد ۱ ( نصب نسخه آزمایشی ۱۹۰۹ پلتفرم ABAP روی پلتفرم ابری گوگل و نصب کیت توسعه نرم‌افزار ABAP برای گوگل ابری ) و آزمایشگاه کد ۲ ( پیکربندی احراز هویت SDK ABAP با استفاده از توکن‌ها برای SAP میزبانی‌شده روی ماشین مجازی موتور محاسباتی ) را تکمیل کنید.
  • اگر codelab 1 و codelab 2 را تکمیل کرده باشید، این به شما یک سیستم آزمایشی پلتفرم ABAP 1909 روی Google Cloud به همراه تنظیمات لازم برای احراز هویت و اتصال ارائه می‌دهد.
  • اگر codelab 1 و codelab 2 را تکمیل نکرده‌اید، تمام زیرساخت‌ها و اتصالات مورد نیاز برای انجام مراحل ارائه شده در این codelab را نخواهید داشت. بنابراین، قبل از ادامه‌ی این codelab، باید codelab 1 و codelab 2 را تکمیل کنید.

۴. یک حساب کاربری سرویس با نقش کاربری شیء ذخیره‌سازی ایجاد کنید

برای ایجاد یک حساب کاربری سرویس با نقش مورد نیاز، مراحل زیر را انجام دهید:

  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 به عنوان یک متغیر برای پروژه ابری گوگل استفاده می‌کند. abap-sdk-poc با شناسه پروژه خود جایگزین کنید.

  1. برای تأیید اضافه شدن نقش، به صفحه IAM بروید. حساب کاربری سرویسی که ایجاد کرده‌اید باید به همراه نقشی که به آن اختصاص داده شده است، مطابق شکل زیر فهرست شود:

92d75ce1554efb69.png

۵. ایجاد پیکربندی کلید کلاینت

اکنون که پیش‌نیازها را در سمت Google Cloud تنظیم کرده‌اید، می‌توانیم پیکربندی سمت SAP را ادامه دهیم.

برای پیکربندی مربوط به احراز هویت و اتصال، ABAP SDK برای Google Cloud از جدول /GOOG/CLIENT_KEY استفاده می‌کند.

برای حفظ پیکربندی در جدول /GOOG/CLIENT_KEY، مراحل زیر را انجام دهید:

  1. در رابط کاربری گرافیکی SAP، کد تراکنش SPRO را وارد کنید.
  2. روی SAP Reference IMG کلیک کنید.
  3. روی ABAP SDK برای Google Cloud > تنظیمات اولیه > پیکربندی کلید کلاینت کلیک کنید.
  4. مقادیر زیر را در برابر فیلدها حفظ کنید:

میدان

ارزش

نام کلید گوگل کلود

ذخیره سازی آزمایشی

نام حساب کاربری سرویس ابری گوگل

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

محدوده فضای ابری گوگل

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

شناسه پروژه

abap-sdk-poc

کلاس مجوز

/GOOG/CL_AUTH_GOOGLE

تمام فیلدهای دیگر را خالی بگذارید

۶. برای ایجاد یک سطل در فضای ذخیره‌سازی ابری، یک Z-Report ایجاد کنید

  1. وارد سیستم SAP خود شوید.
  2. به کد تراکنش SE38 بروید و یک برنامه گزارش با نام ZDEMO_CREATE_BUCKET.
  3. در پنجره باز شده، جزئیات را مطابق شکل زیر وارد کنید:

۹۳f3edb7bbb5c3c4.png

در پنجره‌ی بعدی، یا Local Object را انتخاب کنید یا نام پکیج مورد نظر خود را وارد کنید.

  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

۷. ایجاد یک Z-Report برای خواندن فایل از سرور برنامه و آپلود آن در فضای ذخیره‌سازی ابری

قبل از انجام این فعالیت، باید یک فایل متنی بزرگ آماده کنید. در اینجا ما از قبل یک فایل متنی بزرگ ایجاد و در سرور برنامه خود آپلود کرده‌ایم. می‌توانید از کد تراکنش CG3Z برای آپلود فایل در سرور برنامه سیستم SAP خود استفاده کنید.

برای این مثال، ما از یک فایل متنی با حجم تقریبی ۴۰ مگابایت استفاده می‌کنیم که از قبل در سرور برنامه در دایرکتوری /tmp آپلود شده است.

همچنین می‌توانید این پوشه را از گیت‌هاب با استفاده از لینک زیر دانلود کنید: فایل نمونه

  1. وارد سیستم SAP خود شوید
  2. به کد تراکنش SE38 بروید و یک برنامه گزارش با نام ZDEMO_UPLOAD_FILE.
  3. در پنجره باز شده، جزئیات را مطابق شکل زیر وارد کنید:

19cbe6987bba58e4.png

در پنجره‌ی بعدی، یا Local Object را انتخاب کنید یا نام پکیج مورد نظر خود را وارد کنید.

  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۱۸۸۶be610c63ed6b.png

۸. آپلود فایل در فضای ابری با استفاده از کد ABAP SDK توضیح داده شده است

در اصل، این برنامه ABAP با Google Cloud Storage ادغام می‌شود. این برنامه یک فایل را از سرور برنامه می‌خواند و داده‌های فایل را به API Client Stub of Storage API ارسال می‌کند تا آن را در یک مخزن ذخیره‌سازی که در برنامه گزارش قبلی ایجاد شده بود، بارگذاری کند.

برنامه‌ی گزارشی که برای آپلود فایل ایجاد کرده‌اید، کارهای زیر را انجام می‌دهد:

تجزیه و تحلیل گام به گام

ایجاد اتصال:

  • این کد با استفاده از کلاس /GOOG/CL_STORAGE_V1 یک اتصال HTTP به سرویس ذخیره‌سازی گوگل برقرار می‌کند.

خواندن داده‌های فایل

  • فایل را با انجام دستور OPEN DATASET روی سرور برنامه می‌خواند و سپس ماژول تابع استاندارد SAP SCMS_STRING_TO_XSTRING را برای تبدیل به فرمت XSTRING فراخوانی می‌کند.

پارامترهای پرس و جوی رایج را اضافه کنید

  • برای دستیابی به قطعه‌بندی، نوع آپلودی که باید انتخاب کنیم، آپلود "Resumable" است. به طور پیش‌فرض وقتی آپلود resumable انتخاب می‌شود، داده‌های فایل به قطعات ۸ مگابایتی تقسیم شده و آپلود می‌شوند. با این حال، توسعه‌دهندگان می‌توانند با تنظیم پارامتر IV_P_CHUNK_SIZE این اندازه قطعه‌بندی را تغییر دهند، اما توصیه می‌شود از تنظیم پیش‌فرض استفاده شود.
  • برای اینکه به متد API اطلاع دهیم که گزینه آپلود "Resumable" باید انتخاب شود، متد ADD_COMMON_QPARAM را فراخوانی می‌کنیم و uploadType به عنوان resumable.

درج اشیاء

  • با ارسال پارامترهای زیر، متد INSERT_OBJECTS را فراخوانی می‌کند:
  • IV_Q_NAME : نام فایلی که قرار است محتویات آن در فضای ذخیره‌سازی ابری ذخیره شود.
  • IV_P_BUCKET : نام باکتی که فایل باید در آن آپلود شود
  • IS_DATA : داده‌های فایلی که باید آپلود شوند
  • IV_CONTENT_TYPE : نوع محتوای فایل، برای سناریوی فعلی ما از "text/plain" استفاده می‌کنیم زیرا یک فایل متنی را آپلود می‌کنیم.

توجه داشته باشید که ما هیچ مقداری را به پارامتر ورودی IV_CHUNK_SIZE ارسال نمی‌کنیم و اجازه می‌دهیم API Client Stub از مقدار پیش‌فرض مرتبط با این پارامتر، که ۸ مگابایت است، استفاده کند.

مدیریت موفقیت/خطاها:

  • پاسخ API را بر اساس اینکه آیا فراخوانی API موفقیت‌آمیز بوده است یا خیر، نمایش می‌دهد.

اتصال را ببندید:

  • اتصال HTTP به سرویس ذخیره‌سازی را می‌بندد.

۹. تبریک

تبریک! شما با موفقیت مرحله‌ی «آپلود فایل در فضای ذخیره‌سازی ابری» در Codelab را به پایان رساندید.

رابط برنامه‌نویسی کاربردی JSON ذخیره‌سازی ابری قابلیت‌های زیادی دارد و با استفاده از ABAP SDK برای Google Cloud، می‌توانید مستقیماً در سیستم‌های SAP خود با استفاده از ABAP به آنها دسترسی داشته باشید.

فضای ذخیره‌سازی ابری گوگل (Google Cloud Storage) گزینه بسیار خوبی برای ذخیره‌سازی و مدیریت حجم زیادی از داده‌ها است و توسط طیف وسیعی از کسب‌وکارها، شرکت‌ها و برنامه‌ها استفاده می‌شود.

برخی از مزایای استفاده از فضای ذخیره‌سازی ابری گوگل:

  • مقرون به صرفه بودن: فضای ابری گوگل روشی مقرون به صرفه برای ذخیره و مدیریت حجم زیادی از داده‌ها است.
  • سادگی: استفاده از فضای ذخیره‌سازی ابری گوگل (Google Cloud Storage) با یک رابط برنامه‌نویسی کاربردی (API) ساده و کاربرپسند، آسان است.
  • انعطاف‌پذیری: فضای ذخیره‌سازی ابری گوگل را می‌توان با طیف وسیعی از برنامه‌ها و پلتفرم‌ها استفاده کرد.

اکنون می‌توانید با استفاده از codelab زیر، سفر یادگیری خود در مورد استفاده از ABAP SDK برای دسترسی به سرویس‌های مختلف ابری گوگل را ادامه دهید.

  • ارسال رویداد به Pub/Sub
  • دریافت رویداد از Cloud Pub/Sub
  • استفاده از API ترجمه ابری برای ترجمه متون
  • استفاده از DLP API برای ویرایش اطلاعات شخصی (PII)
  • فراخوانی BigQuery ML از ABAP

۱۰. تمیز کردن

اگر نمی‌خواهید به کار با آزمایشگاه‌های کد اضافی مربوط به 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