1. مقدمة
في هذا الدرس التطبيقي حول الترميز، أدرجنا الخطوات اللازمة لإنشاء حساب خدمة واستخدامه لإعداد جدول "مفتاح العميل" و"خريطة الاتصال" المقدَّمَين من ABAP SDK for Google Cloud واستدعاء Cloud Storage JSON API في ABAP.
يتم استخدام خدمات Google Cloud التالية في هذا الدرس التطبيقي حول الترميز:
- Compute Engine
- خدمات الشبكة
- Cloud Shell
- الإصدار 1 من Cloud Storage JSON API
ملاحظة: عند إنشاء مشروع جديد على Google Cloud، يتم تلقائيًا تفعيل مجموعة معيّنة من واجهات برمجة التطبيقات والخدمات، بما في ذلك Cloud Storage. يضمن لك ذلك الاستفادة فورًا من حلّ التخزين الفعّال هذا. لذلك، لست بحاجة إلى تفعيلها كخطوة إضافية.
المتطلبات الأساسية
- تأكَّد من إمكانية الوصول إلى نظام SAP مثبَّت عليه ABAP SDK for Google Cloud.
- يمكنك الرجوع إلى الدرس التطبيقي حول الترميز " تثبيت الإصدار التجريبي من منصة ABAP على Google Cloud Platform وتثبيت حزمة تطوير البرامج (SDK) لمنصة ABAP" لإعداد نظام جديد.
ما ستنشئه
ستنشئ البرامج التالية في نظام SAP باستخدام ABAP SDK for Google Cloud
- أنشئ حزمة في Cloud Storage.
- قراءة ملف من خادم التطبيق وتحميله إلى حزمة Cloud Storage التي تم إنشاؤها
2. المتطلبات
- متصفّح، مثل Chrome أو Firefox
- مشروع Google Cloud تم تفعيل الفوترة فيه أو إنشاء حساب تجريبي مجاني لمدة 90 يومًا على Google Cloud Platform
- تثبيت SAP GUI (Windows أو Java) في نظامك إذا كان SAP GUI مثبَّتًا على الكمبيوتر المحمول، يمكنك الاتصال بنظام SAP باستخدام عنوان IP الخارجي للجهاز الافتراضي كعنوان IP لخادم التطبيقات. إذا كنت تستخدم جهاز Mac، يمكنك أيضًا تثبيت SAP GUI for Java المتاح في هذا الرابط.
3- قبل البدء
- تأكَّد من إمكانية الوصول إلى نظام SAP مثبَّت عليه ABAP SDK for Google Cloud.
- يمكنك الرجوع إلى الدرس التطبيقي حول الترميز تثبيت الإصدار التجريبي من منصة ABAP على Google Cloud Platform وتثبيت حزمة تطوير البرامج (SDK) لمنصة ABAP لإعداد نظام جديد.
- في 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 for Google Cloud.
- يجب إكمال الدرس التطبيقي حول الترميز 1 (تثبيت الإصدار التجريبي من منصة ABAP 1909 على Google Cloud Platform وتثبيت ABAP SDK for Google Cloud) والدرس التطبيقي حول الترميز 2 (إعداد مصادقة ABAP SDK باستخدام الرموز المميّزة لـ SAP المستضافة على جهاز Compute Engine الافتراضي) قبل المتابعة إلى هذا الدرس التطبيقي حول الترميز.
- إذا أكملت الدرس التطبيقي حول الترميز 1 والدرس التطبيقي حول الترميز 2، سيتم توفير نظام ABAP Platform Trial 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 برقم تعريف مشروعك.
- للتأكّد من إضافة الدور، انتقِل إلى صفحة إدارة الهوية وإمكانية الوصول. يجب أن يظهر حساب الخدمة الذي أنشأته مع الدور الذي تم تعيينه له كما هو موضّح أدناه:

5- إنشاء إعدادات مفتاح العميل
بعد إعداد المتطلبات الأساسية على Google Cloud، يمكننا المتابعة مع عملية الإعداد على SAP.
بالنسبة إلى الإعدادات المتعلّقة بالمصادقة والاتصال، تستخدم حزمة ABAP SDK for Google Cloud الجدول /GOOG/CLIENT_KEY
للحفاظ على الإعدادات في الجدول /GOOG/CLIENT_KEY، اتّبِع الخطوات التالية:
- في SAP GUI، أدخِل رمز المعاملة
SPRO. - انقر على SAP Reference IMG.
- انقر على ABAP SDK for Google Cloud > الإعدادات الأساسية > إعداد مفتاح العميل.
- احتفِظ بالقيم التالية مقابل الحقول:
الحقل | القيمة |
اسم مفتاح Google Cloud | TEST_STORAGE |
اسم حساب خدمة Google Cloud |
|
نطاق Google Cloud |
|
رقم تعريف المشروع | abap-sdk-poc |
فئة التفويض |
|
اترك جميع الحقول الأخرى فارغة
6. إنشاء "تقرير Z" لإنشاء حزمة في Cloud Storage
- سجِّل الدخول إلى نظام 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 لقراءة ملف من خادم التطبيق وتحميله إلى حزمة Cloud Storage
قبل تنفيذ هذا النشاط، عليك إعداد ملف نصي كبير. لدينا هنا ملف نصي كبير تم إنشاؤه وتحميله إلى خادم التطبيق. يمكنك استخدام رمز المعاملة CG3Z لتحميل ملف إلى خادم تطبيق نظام SAP
في هذا المثال، نستخدم ملفًا نصيًا بحجم 40 ميغابايت تقريبًا، وقد تم تحميله مسبقًا إلى "خادم التطبيقات" في الدليل /tmp.
يمكنك أيضًا تنزيل هذا المجلد من GitHub باستخدام الرابط التالي: ملف نموذجي
- تسجيل الدخول إلى نظام 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).
عند التنفيذ بنجاح، من المفترض أن يظهر لك ناتج التقرير كما هو موضّح أدناه:

يمكنك التحقّق مما إذا تم تحميل الملف بنجاح أم لا من خلال الانتقال إلى حزمة Cloud Storage كما هو موضّح أدناه


8. شرح رمز تحميل الملف إلى Cloud Storage باستخدام حزمة تطوير البرامج (SDK) للغة ABAP
في الأساس، يتكامل برنامج ABAP هذا مع Google Cloud Storage. يقرأ ملفًا من خادم التطبيق ويمرّر بيانات الملف إلى "الرمز الأولي لعميل واجهة برمجة التطبيقات" في Storage API لتحميله إلى حزمة تخزين تم إنشاؤها في برنامج التقارير السابق.
ينفّذ برنامج التقارير الذي أنشأته لتحميل ملف ما يلي:
شرح مفصّل خطوة بخطوة
إنشاء اتصال:
- تنشئ هذه السمة اتصال HTTP بخدمة Google Storage باستخدام الفئة
/GOOG/CL_STORAGE_V1.
قراءة بيانات الملف
- يقرأ الملف على خادم التطبيق من خلال تنفيذ
OPENDATASET، ثم يستدعي وحدة وظائف SAP العاديةSCMS_STRING_TO_XSTRINGللتحويل إلى تنسيقXSTRING.
إضافة مَعلمات طلب البحث الشائعة
- لتحقيق التقطيع، يجب اختيار نوع التحميل "قابل للاستئناف". عند اختيار التحميل القابل للاستئناف، يتم تقسيم بيانات الملف تلقائيًا إلى أجزاء بحجم 8 ميغابايت وتحميلها. يمكن للمطوّرين تغيير حجم التقسيم هذا من خلال ضبط المَعلمة
IV_P_CHUNK_SIZE، ولكن يُنصح باستخدام الإعداد التلقائي. - لإعلام طريقة واجهة برمجة التطبيقات بأنّه يجب اختيار خيار التحميل "قابل للاستئناف"، نستدعي الطريقة
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 ميغابايت.
التعامل مع النجاح/الأخطاء:
- تعرِض هذه السمة استجابة واجهة برمجة التطبيقات استنادًا إلى ما إذا كان طلب البيانات من واجهة برمجة التطبيقات ناجحًا أم لا.
إغلاق الاتصال:
- يغلق هذا الإجراء اتصال HTTP بخدمة التخزين.
9. تهانينا
تهانينا! لقد أكملت بنجاح الدرس التطبيقي حول الترميز "تحميل ملف إلى حزمة Cloud Storage".
تتضمّن Cloud Storage JSON API العديد من الإمكانات، وباستخدام ABAP SDK for Google Cloud، يمكنك الوصول إليها مباشرةً في أنظمة SAP بشكلٍ أصلي باستخدام ABAP.
Google Cloud Storage هي خيار رائع لتخزين كميات كبيرة من البيانات وإدارتها. ويتم استخدامه من قِبل مجموعة كبيرة من الأنشطة التجارية والمؤسسات والتطبيقات.
في ما يلي بعض مزايا استخدام Google Cloud Storage:
- فعالية التكلفة: Google Cloud Storage هي طريقة فعالة من حيث التكلفة لتخزين كميات كبيرة من البيانات وإدارتها.
- البساطة: يسهل استخدام Google Cloud Storage، وذلك بفضل واجهة برمجة التطبيقات البسيطة والسهلة.
- المرونة: يمكن استخدام Google Cloud Storage مع مجموعة متنوعة من التطبيقات والأنظمة الأساسية.
يمكنك الآن الانتقال إلى الدرس التطبيقي حول الترميز أدناه لمواصلة رحلتك التعليمية حول استخدام ABAP SDK للوصول إلى خدمات Google Cloud المختلفة.
- إرسال حدث إلى Pub/Sub
- تلقّي حدث من Cloud Pub/Sub
- استخدام Cloud Translation API لترجمة النصوص
- استخدام واجهة برمجة التطبيقات لمنع فقدان البيانات لإخفاء معلومات تكشف الهوية الشخصية
- استدعاء BigQuery ML من ABAP
10. تَنظيم
إذا كنت لا تريد مواصلة استخدام دروس البرمجة الإضافية المتعلّقة بحزمة ABAP SDK for 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