छोटे-छोटे हिस्सों में ट्रांसफ़र की गई फ़ाइल को Cloud Storage में अपलोड करना

एक से ज़्यादा हिस्सों में बांटकर, Cloud Storage में फ़ाइल अपलोड करना

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी

subjectपिछली बार सित॰ 4, 2024 को अपडेट किया गया
account_circleSatish Inamdar ने लिखा

1. परिचय

इस कोडलैब में, हमने सेवा खाता बनाने और उसका इस्तेमाल करके, Google Cloud के लिए ABAP SDK की ओर से दी गई क्लाइंट पासकोड और कम्यूनिकेशन मैप टेबल को कॉन्फ़िगर करने का तरीका बताया है. साथ ही, ABAP में Cloud Storage JSON API को कॉल करने का तरीका भी बताया है.

इस कोडलैब में, Google Cloud की इन सेवाओं का इस्तेमाल किया गया है:

  • Compute Engine
  • नेटवर्क सेवाएं
  • Cloud Shell
  • Cloud Storage JSON API V1

ध्यान दें: नया Google Cloud प्रोजेक्ट बनाने पर, Cloud Storage के साथ-साथ API और सेवाओं का एक खास सेट अपने-आप चालू हो जाता है. इससे यह पक्का होता है कि आपके पास स्टोरेज के इस बेहतरीन सलूशन का तुरंत फ़ायदा लेने का विकल्प है. इसलिए, आपको इसे अलग से चालू करने की ज़रूरत नहीं है.

ज़रूरी शर्तें

आपको क्या बनाना है

आपको Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, अपने SAP सिस्टम में ये प्रोग्राम बनाने होंगे

  • Cloud Storage बकेट बनाएं.
  • ऐप्लिकेशन सर्वर से कोई फ़ाइल पढ़ें और उसे बनाई गई Cloud Storage बकेट में अपलोड करें.

2. ज़रूरी शर्तें

  • Chrome या Firefox जैसा कोई ब्राउज़र.
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट या Google Cloud Platform के लिए 90 दिनों के मुफ़्त ट्रायल वाला खाता बनाएं.
  • आपके सिस्टम में SAP GUI (Windows या Java) इंस्टॉल हो. अगर आपके लैपटॉप पर SAP GUI पहले से इंस्टॉल है, तो ऐप्लिकेशन सर्वर आईपी के तौर पर, वर्चुअल मशीन (वीएम) के बाहरी आईपी पते का इस्तेमाल करके SAP से कनेक्ट करें. अगर आपके पास Mac है, तो इस लिंक पर जाकर, Java के लिए SAP GUI भी इंस्टॉल किया जा सकता है.

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 सिस्टम का ऐक्सेस होना चाहिए जिसमें Google Cloud के लिए ABAP SDK टूल इंस्टॉल हो.
  • इस कोडलैब को शुरू करने से पहले, आपको पहला कोडलैब (Google Cloud Platform पर ABAP Platform Trial 1909 इंस्टॉल करना और Google Cloud के लिए ABAP SDK इंस्टॉल करना) और दूसरा कोडलैब (Compute Engine VM पर होस्ट किए गए SAP के लिए, टोकन का इस्तेमाल करके ABAP SDK की पुष्टि करने की सुविधा कॉन्फ़िगर करना) पूरा करना होगा.
  • अगर आपने पहला और दूसरा कोडलैब पूरा कर लिया है, तो आपको Google Cloud पर ABAP Platform Trial 1909 सिस्टम के साथ-साथ, पुष्टि और कनेक्टिविटी के लिए ज़रूरी सेटअप भी मिल जाएगा.
  • अगर आपने पहला और दूसरा कोडलैब पूरा नहीं किया है, तो इस कोडलैब में दिए गए चरणों को पूरा करने के लिए, आपके पास ज़रूरी इन्फ़्रास्ट्रक्चर और कनेक्टिविटी नहीं होगी. इसलिए, इस कोडलैब को शुरू करने से पहले, आपको कोडलैब 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'

ऊपर दिए गए निर्देश में, Google Cloud प्रोजेक्ट के प्लेसहोल्डर के तौर पर abap-sdk-poc का इस्तेमाल किया गया है. abap-sdk-poc की जगह अपना प्रोजेक्ट आईडी डालें.

  1. भूमिका जोड़ी गई है या नहीं, इसकी पुष्टि करने के लिए IAM पेज पर जाएं. आपने जो सेवा खाता बनाया है वह यहां दिखाए गए तरीके से, उसमें असाइन की गई भूमिका के साथ दिखना चाहिए:

92d75ce1554efb69.png

5. क्लाइंट पासकोड कॉन्फ़िगरेशन बनाना

Google Cloud की ओर से ज़रूरी शर्तें सेट अप करने के बाद, हम SAP की ओर से कॉन्फ़िगरेशन की प्रोसेस शुरू कर सकते हैं.

पुष्टि करने और कनेक्टिविटी से जुड़े कॉन्फ़िगरेशन के लिए, Google Cloud के लिए ABAP SDK टूल, टेबल /GOOG/CLIENT_KEY का इस्तेमाल करता है

टेबल /GOOG/CLIENT_KEY टेबल में कॉन्फ़िगरेशन को बनाए रखने के लिए, यह तरीका अपनाएं:

  1. SAP GUI में, ट्रांज़ैक्शन कोड SPRO डालें.
  2. SAP रेफ़रंस IMG पर क्लिक करें.
  3. Google Cloud के लिए ABAP SDK टूल > बुनियादी सेटिंग > क्लाइंट पासकोड कॉन्फ़िगर करें पर क्लिक करें.
  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. Cloud Storage पर बकेट बनाने के लिए Z-Report बनाना

  1. अपने SAP सिस्टम में लॉग इन करें.
  2. लेन-देन कोड SE38 पर जाएं और ZDEMO_CREATE_BUCKET. नाम से रिपोर्ट प्रोग्राम बनाएं
  3. इसके बाद, खुलने वाले पॉप-अप में नीचे दी गई जानकारी दें:

93f3edb7bbb5c3c4.png

अगले पॉप-अप में, अपनी पसंद के हिसाब से स्थानीय ऑब्जेक्ट चुनें या पैकेज का नाम दें.

  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. ऐप्लिकेशन सर्वर से फ़ाइल पढ़ने और उसे Cloud Storage की बकेट में अपलोड करने के लिए, Z-रिपोर्ट बनाना

इस गतिविधि को करने से पहले, आपको एक बड़ी टेक्स्ट फ़ाइल तैयार करनी होगी. यहां हमारे पास पहले से ही एक बड़ी टेक्स्ट फ़ाइल है, जिसे हमने अपने ऐप्लिकेशन सर्वर पर बनाया और अपलोड किया है. अपने SAP सिस्टम के ऐप्लिकेशन सर्वर पर फ़ाइल अपलोड करने के लिए, ट्रांज़ैक्शन कोड CG3Z का इस्तेमाल किया जा सकता है

इस उदाहरण में, हम ~40 एमबी साइज़ की टेक्स्ट फ़ाइल का इस्तेमाल कर रहे हैं. यह फ़ाइल, /tmp डायरेक्ट्री में मौजूद ऐप्लिकेशन सर्वर पर पहले से अपलोड है.

इस फ़ोल्डर को GitHub से भी डाउनलोड किया जा सकता है. इसके लिए, इस लिंक का इस्तेमाल करें: सैंपल फ़ाइल

  1. अपने SAP सिस्टम में लॉग इन करें
  2. लेन-देन कोड SE38 पर जाएं और ZDEMO_UPLOAD_FILE. नाम से रिपोर्ट प्रोग्राम बनाएं
  3. इसके बाद, खुलने वाले पॉप-अप में नीचे दी गई जानकारी दें:

19cbe6987bba58e4.png

अगले पॉप-अप में, अपनी पसंद के हिसाब से स्थानीय ऑब्जेक्ट चुनें या पैकेज का नाम दें.

  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

1886be610c63ed6b.png

8. ABAP SDK कोड का इस्तेमाल करके, Cloud Storage में फ़ाइल अपलोड करना

असल में, यह ABAP प्रोग्राम Google Cloud Storage के साथ इंटिग्रेट होता है. यह ऐप्लिकेशन सर्वर से फ़ाइल पढ़ता है और फ़ाइल डेटा को Storage API के एपीआई क्लाइंट स्टब को भेजता है, ताकि उसे स्टोरेज बकेट में अपलोड किया जा सके. यह बकेट, पिछले रिपोर्ट प्रोग्राम में बनाई गई थी.

फ़ाइल अपलोड करने के लिए बनाया गया रिपोर्ट प्रोग्राम, ये काम करता है:

सिलसिलेवार जानकारी

कनेक्शन सेट अप करना:

  • यह /GOOG/CL_STORAGE_V1 क्लास का इस्तेमाल करके, Google Storage सेवा से एचटीटीपी कनेक्शन बनाता है.

फ़ाइल का डेटा पढ़ना

  • OPEN DATASET करके, ऐप्लिकेशन सर्वर पर फ़ाइल को पढ़ता है. इसके बाद, XSTRING फ़ॉर्मैट में बदलने के लिए, स्टैंडर्ड SAP फ़ंक्शन मॉड्यूल SCMS_STRING_TO_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 को कोई वैल्यू नहीं देते. साथ ही, हम एपीआई क्लाइंट स्टब को इस पैरामीटर से जुड़ी डिफ़ॉल्ट वैल्यू का इस्तेमाल करने देते हैं, जो 8 एमबी है.

सफलता/गड़बड़ियों को मैनेज करना:

  • एपीआई कॉल पूरा होने या न होने के आधार पर, एपीआई का जवाब दिखाता है.

कनेक्शन बंद करना:

  • स्टोरेज सेवा के एचटीटीपी कनेक्शन को बंद करता है.

9. बधाई हो

बधाई हो! आपने "क्लाउड स्टोरेज बकेट में फ़ाइल अपलोड करना" कोडलैब पूरा कर लिया है.

Cloud Storage JSON API में कई सुविधाएं हैं. Google Cloud के लिए ABAP SDK की मदद से, इन सुविधाओं को सीधे अपने SAP सिस्टम में, ABAP का इस्तेमाल करके ऐक्सेस किया जा सकता है.

Google Cloud Storage, ज़्यादा डेटा को सेव और मैनेज करने के लिए एक बेहतरीन विकल्प है. इसका इस्तेमाल कई तरह के कारोबारों, एंटरप्राइज़, और ऐप्लिकेशन करते हैं.

Google Cloud Storage का इस्तेमाल करने के कुछ फ़ायदे:

  • कम कीमत: Google Cloud Storage, बड़ी मात्रा में डेटा को सेव और मैनेज करने का एक किफ़ायती तरीका है.
  • आसानी से इस्तेमाल किया जा सकता है: Google Cloud Storage को आसानी से इस्तेमाल किया जा सकता है. इसमें आसान और सहज एपीआई है.
  • आसानी से इस्तेमाल किया जा सकता है: Google Cloud Storage का इस्तेमाल कई तरह के ऐप्लिकेशन और प्लैटफ़ॉर्म के साथ किया जा सकता है.

अब नीचे दिए गए कोडलैब पर जाएं और Google Cloud की कई सेवाओं को ऐक्सेस करने के लिए, ABAP SDK टूल का इस्तेमाल करने के बारे में जानें.

  • Pub/Sub को इवेंट भेजना
  • Cloud Pub/Sub से इवेंट पाना
  • टेक्स्ट का अनुवाद करने के लिए, Cloud Translation API का इस्तेमाल करना
  • निजी पहचान से जुड़ी जानकारी हटाने के लिए, DLP API का इस्तेमाल करना
  • ABAP से BigQuery ML को कॉल करना

10. व्यवस्थित करें

अगर आपको Google Cloud के लिए ABAP SDK टूल से जुड़े अन्य कोडलैब जारी नहीं रखने हैं, तो कृपया क्लीनअप की प्रक्रिया शुरू करें.

प्रोजेक्ट मिटाना

  • 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