تحميل ملف إلى Cloud Storage باستخدام ميزة التقسيم

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

  • أنشئ حزمة في 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- قبل البدء

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 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. إنشاء حساب خدمة باستخدام دور مستخدم كائن التخزين

لإنشاء حساب خدمة يتضمّن الدور المطلوب، اتّبِع الخطوات التالية:

  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. للتأكّد من إضافة الدور، انتقِل إلى صفحة إدارة الهوية وإمكانية الوصول. يجب أن يظهر حساب الخدمة الذي أنشأته مع الدور الذي تم تعيينه له كما هو موضّح أدناه:

92d75ce1554efb69.png

5- إنشاء إعدادات مفتاح العميل

بعد إعداد المتطلبات الأساسية على Google Cloud، يمكننا المتابعة مع عملية الإعداد على SAP.

بالنسبة إلى الإعدادات المتعلّقة بالمصادقة والاتصال، تستخدم حزمة ABAP SDK for Google Cloud الجدول /GOOG/CLIENT_KEY

للحفاظ على الإعدادات في الجدول /GOOG/CLIENT_KEY، اتّبِع الخطوات التالية:

  1. في SAP GUI، أدخِل رمز المعاملة SPRO.
  2. انقر على SAP Reference IMG.
  3. انقر على ABAP SDK for Google Cloud > الإعدادات الأساسية > إعداد مفتاح العميل.
  4. احتفِظ بالقيم التالية مقابل الحقول:

الحقل

القيمة

اسم مفتاح Google Cloud

TEST_STORAGE

اسم حساب خدمة Google Cloud

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

نطاق Google Cloud

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

رقم تعريف المشروع

abap-sdk-poc

فئة التفويض

/GOOG/CL_AUTH_GOOGLE

اترك جميع الحقول الأخرى فارغة

6. إنشاء "تقرير Z" لإنشاء حزمة في Cloud Storage

  1. سجِّل الدخول إلى نظام SAP.
  2. انتقِل إلى رمز المعاملة SE38 وأنشئ "برنامج تقارير" بالاسم ZDEMO_CREATE_BUCKET.
  3. في النافذة المنبثقة التي تظهر، قدِّم التفاصيل كما هو موضّح أدناه:

93f3edb7bbb5c3c4.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

7. إنشاء تقرير Z لقراءة ملف من خادم التطبيق وتحميله إلى حزمة Cloud Storage

قبل تنفيذ هذا النشاط، عليك إعداد ملف نصي كبير. لدينا هنا ملف نصي كبير تم إنشاؤه وتحميله إلى خادم التطبيق. يمكنك استخدام رمز المعاملة CG3Z لتحميل ملف إلى خادم تطبيق نظام SAP

في هذا المثال، نستخدم ملفًا نصيًا بحجم 40 ميغابايت تقريبًا، وقد تم تحميله مسبقًا إلى "خادم التطبيقات" في الدليل /tmp.

يمكنك أيضًا تنزيل هذا المجلد من GitHub باستخدام الرابط التالي: ملف نموذجي

  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

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

90678b475e165adf.png1886be610c63ed6b.png

8. شرح رمز تحميل الملف إلى Cloud Storage باستخدام حزمة تطوير البرامج (SDK) للغة ABAP

في الأساس، يتكامل برنامج ABAP هذا مع Google Cloud Storage. يقرأ ملفًا من خادم التطبيق ويمرّر بيانات الملف إلى "الرمز الأولي لعميل واجهة برمجة التطبيقات" في Storage API لتحميله إلى حزمة تخزين تم إنشاؤها في برنامج التقارير السابق.

ينفّذ برنامج التقارير الذي أنشأته لتحميل ملف ما يلي:

شرح مفصّل خطوة بخطوة

إنشاء اتصال:

  • تنشئ هذه السمة اتصال HTTP بخدمة Google Storage باستخدام الفئة /GOOG/CL_STORAGE_V1.

قراءة بيانات الملف

  • يقرأ الملف على خادم التطبيق من خلال تنفيذ OPEN DATASET، ثم يستدعي وحدة وظائف 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

حذف موارد فردية

  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