درباره این codelab
1. مقدمه
در این لبه کد، مراحل ایجاد یک حساب سرویس و استفاده از آن برای پیکربندی جدول Client Key و Communication Map ارائه شده توسط ABAP SDK برای Google Cloud و فراخوانی Cloud Storage JSON API در ABAP را فهرست کرده ایم.
خدمات Google Cloud زیر در این کد لبه استفاده می شود:
- موتور محاسباتی
- خدمات شبکه
- پوسته ابری
- Cloud Storage JSON API V1
توجه: وقتی یک پروژه Google Cloud جدید ایجاد میکنید، مجموعه خاصی از APIها و سرویسها، از جمله فضای ذخیرهسازی ابری، بهطور خودکار فعال میشوند. این تضمین می کند که می توانید بلافاصله از این راه حل ذخیره سازی قوی استفاده کنید. بنابراین لازم نیست آن را به عنوان یک مرحله اضافی فعال کنید.
پیش نیازها
- اطمینان حاصل کنید که به سیستم SAP با نصب ABAP SDK برای Google Cloud دسترسی دارید.
- برای راه اندازی یک سیستم جدید می توانید به codelab " Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK " مراجعه کنید.
چیزی که خواهی ساخت
برنامه های زیر را با استفاده از ABAP SDK برای Google Cloud در سیستم SAP خود ایجاد خواهید کرد
- یک سطل ذخیره سازی ابری ایجاد کنید.
- یک فایل را از سرور برنامه بخوانید و آن را در Cloud Storage Bucket ایجاد شده آپلود کنید.
2. الزامات
- یک مرورگر، مانند کروم یا فایرفاکس .
- یک پروژه Google Cloud با فعال کردن صورتحساب یا ایجاد یک حساب آزمایشی رایگان 90 روزه برای Google Cloud Platform.
- SAP GUI (ویندوز یا جاوا) در سیستم شما نصب شده است. اگر SAP GUI قبلاً روی لپتاپ شما نصب شده است، با استفاده از آدرس IP خارجی VM به عنوان IP سرور برنامه، به SAP متصل شوید. اگر در مک هستید، می توانید SAP GUI برای جاوا را نیز در این لینک نصب کنید.
3. قبل از شروع
- اطمینان حاصل کنید که به سیستم SAP با نصب ABAP SDK برای Google Cloud دسترسی دارید.
- برای راه اندازی یک سیستم جدید می توانید به codelab Install ABAP Platform Trial در Google Cloud Platform و Install ABAP SDK مراجعه کنید.
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید (به عنوان مثال:
abap-sdk-poc).
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید. اگر از حساب آزمایشی رایگان 90 روزه استفاده می کنید، از این مرحله رد شوید.
- شما از Cloud Shell ، یک محیط خط فرمان در حال اجرا در Google Cloud استفاده خواهید کرد. از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:
- دستورات زیر را برای احراز هویت برای حساب خود اجرا کنید و پروژه پیش فرض را روی
abap-sdk-poc
تنظیم کنید. Zoneus-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 Platform Trial 1909 در Google Cloud Platform و نصب ABAP SDK for Google Cloud ) و codelab 2 ( پیکربندی احراز هویت ABAP SDK با استفاده از نشانهها برای SAP Hosted on Compute Engine VM ) را تکمیل کنید.
- اگر کد 1 و کد 2 را تکمیل کرده باشید، با این کار یک سیستم آزمایشی 1909 پلتفرم ABAP در Google Cloud به همراه تنظیمات لازم برای احراز هویت و اتصال را برای شما فراهم می کند.
- اگر Codelab 1 و Codelab 2 را تکمیل نکرده باشید، تمامی زیرساخت ها و اتصالات لازم برای انجام مراحل ارائه شده در این کدلب را نخواهید داشت. بنابراین، قبل از ادامه کار با این کد، باید کد 1 و کد 2 را تکمیل کنید.
4. یک حساب سرویس با نقش کاربر Storage Object ایجاد کنید
برای ایجاد یک حساب کاربری با نقش مورد نیاز، مراحل زیر را انجام دهید:
- دستور زیر را در ترمینال 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 GUI، کد تراکنش
SPRO
را وارد کنید. - روی SAP Reference IMG کلیک کنید.
- روی ABAP SDK برای Google Cloud > Basic Settings > Configure Client Key کلیک کنید.
- مقادیر زیر را در برابر فیلدها حفظ کنید:
میدان | ارزش |
نام کلید Google Cloud | TEST_STORAGE |
نام حساب سرویس Google Cloud | |
Google Cloud Scope | |
شناسه پروژه | abap-sdk-poc |
کلاس مجوز | |
تمام فیلدهای دیگر را خالی بگذارید
6. یک گزارش Z برای ایجاد یک سطل در فضای ذخیره سازی ابری ایجاد کنید
- وارد سیستم 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 را فشار دهید).
در اجرای موفقیت آمیز باید خروجی گزارش را مطابق شکل زیر مشاهده کنید:
7. یک Z-Report برای خواندن فایل از Application Server و آپلود آن در Cloud Storage Bucket ایجاد کنید.
قبل از انجام این فعالیت، باید یک فایل متنی بزرگ تهیه کنید. در اینجا ما قبلاً یک فایل متنی بزرگ ایجاد و در سرور برنامه خود آپلود کرده ایم. می توانید از کد تراکنش CG3Z برای آپلود فایل در سرور برنامه سیستم SAP خود استفاده کنید
برای این مثال، ما از یک فایل متنی با اندازه ~40 مگابایت استفاده میکنیم که قبلاً در دایرکتوری /tmp
در Application Server آپلود شده است.
همچنین می توانید این پوشه را از GitHub با استفاده از لینک زیر دانلود کنید: Sample File
- وارد سیستم 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 را فشار دهید).
در اجرای موفقیت آمیز باید خروجی گزارش را مطابق شکل زیر مشاهده کنید:
میتوانید تأیید کنید که آیا فایل با موفقیت آپلود شده است یا نه
8. آپلود فایل به فضای ذخیره سازی ابری با استفاده از کد ABAP SDK توضیح داده شده است
در اصل، این برنامه ABAP با Google Cloud Storage ادغام می شود. یک فایل را از سرور برنامه می خواند و داده های فایل را به API Client Stub of Storage API ارسال می کند تا آن را در یک سطل ذخیره سازی که در برنامه گزارش قبلی ایجاد شده بود، آپلود کند.
برنامه گزارشی که برای آپلود فایل ایجاد کردهاید، کارهای زیر را انجام میدهد:
تفکیک گام به گام
برقراری ارتباط:
- با استفاده از کلاس
/GOOG/CL_STORAGE_V1
یک اتصال HTTP به سرویس Google Storage برقرار می کند.
داده های فایل را بخوانید
- فایل را روی سرور برنامه با انجام
OPEN
DATASET
می خواند و سپس ماژول استاندارد تابع SAPSCMS_STRING_TO_XSTRING
را برای تبدیل به فرمتXSTRING
فراخوانی می کند.
اضافه کردن پارامترهای رایج پرس و جو
- برای دستیابی به قطعه بندی، نوع آپلودی که باید انتخاب کنیم، آپلود "Resumable" است. بهطور پیشفرض زمانی که آپلود مجدد انتخاب میشود، دادههای فایل به تکههای 8 مگابایتی تقسیم میشوند و آپلود میشوند. با این حال، توسعهدهندگان میتوانند با تنظیم پارامتر
IV_P_CHUNK_SIZE
، این اندازه قطعهسازی را تغییر دهند، اما توصیه میشود از تنظیمات پیشفرض استفاده کنید. - برای اینکه روش API بداند که گزینه آپلود "Resumable" باید انتخاب شود، روش
ADD_COMMON_QPARAM
را صدا می زنیم وuploadType
به عنوانresumable.
درج اشیاء
- متد
INSERT_OBJECTS
را با ارسال پارامترهای زیر به آن فراخوانی می کند: -
IV_Q_NAME
: نام فایلی که قرار است محتویات با آن در Cloud Storage ذخیره شوند -
IV_P_BUCKET
: نام سطلی که فایل باید در آن آپلود شود -
IS_DATA
: داده های فایلی که باید آپلود شوند -
IV_CONTENT_TYPE
: نوع محتوای فایل، برای سناریوی فعلی ما از "text/plain" در هنگام آپلود یک فایل متنی استفاده می کنیم.
توجه داشته باشید که ما هیچ مقداری را به پارامتر وارد کننده IV_CHUNK_SIZE
ارسال نمی کنیم و اجازه می دهیم API Client Stub از مقدار پیش فرض مرتبط با این پارامتر که 8 مگابایت است استفاده کند.
مدیریت موفقیت / خطاها:
- پاسخ API را بر اساس موفقیت آمیز بودن یا نبودن تماس API نشان می دهد.
بستن اتصال:
- اتصال HTTP به سرویس ذخیره سازی را می بندد.
9. تبریک میگم
تبریک می گویم! شما Codelab "آپلود یک فایل در سطل ذخیره سازی ابری" را با موفقیت به پایان رساندید.
Cloud Storage JSON API دارای قابلیتهای زیادی است و با ABAP SDK برای Google Cloud، میتوانید مستقیماً با استفاده از ABAP در سیستمهای SAP خود به آنها دسترسی داشته باشید.
Google Cloud Storage یک گزینه عالی برای ذخیره و مدیریت حجم زیاد داده است. این توسط طیف گسترده ای از مشاغل، شرکت ها و برنامه های کاربردی استفاده می شود.
برخی از مزایای استفاده از Google Cloud Storage:
- مقرون به صرفه بودن: Google Cloud Storage یک روش مقرون به صرفه برای ذخیره و مدیریت مقادیر زیادی داده است.
- سادگی: استفاده از Google Cloud Storage با یک API ساده و شهودی آسان است.
- انعطاف پذیری: Google Cloud Storage را می توان با انواع برنامه ها و پلتفرم ها استفاده کرد.
اکنون می توانید برای ادامه مسیر یادگیری خود در استفاده از ABAP SDK برای دسترسی به خدمات مختلف Google Cloud، با کدهای زیر ادامه دهید.
- یک رویداد به Pub/Sub ارسال کنید
- رویدادی را از Cloud Pub/Sub دریافت کنید
- از Cloud Translation API برای ترجمه متون استفاده کنید
- از DLP API برای ویرایش PII استفاده کنید
- با 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