۱. مقدمه
در این آزمایشگاه کد، مراحل ایجاد یک حساب کاربری سرویس و استفاده از آن برای پیکربندی جدول 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 روی آن نصب شده است، دسترسی دارید.
- برای راهاندازی سیستم جدید میتوانید به codelab « نصب آزمایشی پلتفرم ABAP روی پلتفرم ابری گوگل و نصب ABAP SDK » مراجعه کنید.
آنچه خواهید ساخت
شما برنامههای زیر را در سیستم SAP خود با استفاده از ABAP SDK برای Google Cloud ایجاد خواهید کرد.
- یک سطل ذخیرهسازی ابری ایجاد کنید.
- یک فایل را از سرور برنامه بخوانید و آن را در سطل ذخیرهسازی ابری ایجاد شده آپلود کنید.
۲. الزامات
- یک مرورگر، مانند کروم یا فایرفاکس .
- یک پروژه گوگل کلود با قابلیت پرداخت فعال یا ایجاد یک حساب آزمایشی ۹۰ روزه رایگان برای پلتفرم گوگل کلود.
- رابط کاربری گرافیکی SAP (ویندوز یا جاوا) روی سیستم شما نصب شده باشد. اگر رابط کاربری گرافیکی SAP از قبل روی لپتاپ شما نصب شده است، با استفاده از آدرس IP خارجی ماشین مجازی به عنوان IP سرور برنامه به SAP متصل شوید. اگر از مک استفاده میکنید، میتوانید رابط کاربری گرافیکی SAP برای جاوا را که در این لینک موجود است، نصب کنید.
۳. قبل از شروع
- مطمئن شوید که به یک سیستم SAP که ABAP SDK برای Google Cloud روی آن نصب شده است، دسترسی دارید.
- برای راهاندازی سیستم جدید میتوانید به codelab Install ABAP Platform Trial on Google Cloud Platform و Install ABAP SDK مراجعه کنید.
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود (برای مثال:
abap-sdk-poc). - مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر . اگر از حساب آزمایشی رایگان ۹۰ روزه استفاده میکنید، از این مرحله صرف نظر کنید.
- شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد. از کنسول Cloud، روی Activate Cloud Shell در گوشه بالا سمت راست کلیک کنید:

- دستورات زیر را برای احراز هویت حساب کاربری خود اجرا کنید و پروژه پیشفرض را روی
abap-sdk-pocتنظیم کنید. Zoneus-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 را تکمیل کنید.
۴. یک حساب کاربری سرویس با نقش کاربری شیء ذخیرهسازی ایجاد کنید
برای ایجاد یک حساب کاربری سرویس با نقش مورد نیاز، مراحل زیر را انجام دهید:
- دستور زیر را در ترمینال 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 به عنوان یک متغیر برای پروژه ابری گوگل استفاده میکند. abap-sdk-poc با شناسه پروژه خود جایگزین کنید.
- برای تأیید اضافه شدن نقش، به صفحه IAM بروید. حساب کاربری سرویسی که ایجاد کردهاید باید به همراه نقشی که به آن اختصاص داده شده است، مطابق شکل زیر فهرست شود:

۵. ایجاد پیکربندی کلید کلاینت
اکنون که پیشنیازها را در سمت Google Cloud تنظیم کردهاید، میتوانیم پیکربندی سمت SAP را ادامه دهیم.
برای پیکربندی مربوط به احراز هویت و اتصال، ABAP SDK برای Google Cloud از جدول /GOOG/CLIENT_KEY استفاده میکند.
برای حفظ پیکربندی در جدول /GOOG/CLIENT_KEY، مراحل زیر را انجام دهید:
- در رابط کاربری گرافیکی SAP، کد تراکنش
SPROرا وارد کنید. - روی SAP Reference IMG کلیک کنید.
- روی ABAP SDK برای Google Cloud > تنظیمات اولیه > پیکربندی کلید کلاینت کلیک کنید.
- مقادیر زیر را در برابر فیلدها حفظ کنید:
میدان | ارزش |
نام کلید گوگل کلود | ذخیره سازی آزمایشی |
نام حساب کاربری سرویس ابری گوگل | |
محدوده فضای ابری گوگل | |
شناسه پروژه | abap-sdk-poc |
کلاس مجوز | |
تمام فیلدهای دیگر را خالی بگذارید
۶. برای ایجاد یک سطل در فضای ذخیرهسازی ابری، یک Z-Report ایجاد کنید
- وارد سیستم SAP خود شوید.
- به کد تراکنش
SE38بروید و یک برنامه گزارش با نامZDEMO_CREATE_BUCKET. - در پنجره باز شده، جزئیات را مطابق شکل زیر وارد کنید:

در پنجرهی بعدی، یا Local Object را انتخاب کنید یا نام پکیج مورد نظر خود را وارد کنید.
- در ویرایشگر 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 را فشار دهید).
در صورت اجرای موفقیتآمیز، باید خروجی گزارش را مانند تصویر زیر مشاهده کنید:

۷. ایجاد یک Z-Report برای خواندن فایل از سرور برنامه و آپلود آن در فضای ذخیرهسازی ابری
قبل از انجام این فعالیت، باید یک فایل متنی بزرگ آماده کنید. در اینجا ما از قبل یک فایل متنی بزرگ ایجاد و در سرور برنامه خود آپلود کردهایم. میتوانید از کد تراکنش CG3Z برای آپلود فایل در سرور برنامه سیستم SAP خود استفاده کنید.
برای این مثال، ما از یک فایل متنی با حجم تقریبی ۴۰ مگابایت استفاده میکنیم که از قبل در سرور برنامه در دایرکتوری /tmp آپلود شده است.
همچنین میتوانید این پوشه را از گیتهاب با استفاده از لینک زیر دانلود کنید: فایل نمونه
- وارد سیستم SAP خود شوید
- به کد تراکنش
SE38بروید و یک برنامه گزارش با نامZDEMO_UPLOAD_FILE. - در پنجره باز شده، جزئیات را مطابق شکل زیر وارد کنید:

در پنجرهی بعدی، یا Local Object را انتخاب کنید یا نام پکیج مورد نظر خود را وارد کنید.
- در ویرایشگر 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 را فشار دهید).
در صورت اجرای موفقیتآمیز، باید خروجی گزارش را مانند تصویر زیر مشاهده کنید:

میتوانید با رفتن به مسیر زیر در بخش ذخیرهسازی ابری خود، تأیید کنید که آیا فایل با موفقیت آپلود شده است یا خیر.


۸. آپلود فایل در فضای ابری با استفاده از کد ABAP SDK توضیح داده شده است
در اصل، این برنامه ABAP با Google Cloud Storage ادغام میشود. این برنامه یک فایل را از سرور برنامه میخواند و دادههای فایل را به API Client Stub of Storage API ارسال میکند تا آن را در یک مخزن ذخیرهسازی که در برنامه گزارش قبلی ایجاد شده بود، بارگذاری کند.
برنامهی گزارشی که برای آپلود فایل ایجاد کردهاید، کارهای زیر را انجام میدهد:
تجزیه و تحلیل گام به گام
ایجاد اتصال:
- این کد با استفاده از کلاس
/GOOG/CL_STORAGE_V1یک اتصال HTTP به سرویس ذخیرهسازی گوگل برقرار میکند.
خواندن دادههای فایل
- فایل را با انجام دستور
OPENDATASETروی سرور برنامه میخواند و سپس ماژول تابع استاندارد SAPSCMS_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
حذف منابع تکی
- نمونه محاسبه را حذف کنید:
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