อัปโหลดไฟล์ไปยัง Cloud Storage ด้วยการแบ่งออกเป็นส่วน

1. บทนำ

ในโค้ดแล็บนี้ เราได้แสดงขั้นตอนการสร้างบัญชีบริการและใช้บัญชีดังกล่าวเพื่อกำหนดค่าคีย์ไคลเอ็นต์และตารางแผนที่การสื่อสารที่ ABAP SDK สำหรับ Google Cloud ให้มา รวมถึงเรียกใช้ Cloud Storage JSON API ใน ABAP

บริการ Google Cloud ที่ใช้ในโค้ดแล็บนี้มีดังนี้

  • Compute Engine
  • บริการเครือข่าย
  • Cloud Shell
  • Cloud Storage JSON API V1

หมายเหตุ: เมื่อคุณสร้างโปรเจ็กต์ Google Cloud ใหม่ ระบบจะเปิดใช้ API และบริการชุดหนึ่งๆ โดยอัตโนมัติ ซึ่งรวมถึง Cloud Storage วิธีนี้จะช่วยให้คุณใช้ประโยชน์จากโซลูชันพื้นที่เก็บข้อมูลที่มีประสิทธิภาพนี้ได้ทันที คุณจึงไม่จำเป็นต้องเปิดใช้ในขั้นตอนเพิ่มเติม

ข้อกำหนดเบื้องต้น

สิ่งที่คุณจะสร้าง

คุณจะต้องสร้างโปรแกรมต่อไปนี้ในระบบ SAP โดยใช้ ABAP SDK สําหรับ Google Cloud

  • สร้างที่เก็บข้อมูล Cloud Storage
  • อ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและอัปโหลดไปยังที่เก็บข้อมูล Cloud Storage ที่สร้างขึ้น

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินหรือสร้างบัญชีทดลองใช้ฟรี 90 วันสำหรับ Google Cloud Platform
  • SAP GUI (Windows หรือ Java) ที่ติดตั้งในระบบ หากติดตั้ง SAP GUI ในแล็ปท็อปอยู่แล้ว ให้เชื่อมต่อกับ SAP โดยใช้ที่อยู่ IP ภายนอกของ VM เป็น 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 สําหรับ Google Cloud
  • คุณต้องทํา Codelab 1 (ติดตั้งแพลตฟอร์ม ABAP รุ่นทดลอง 1909 ใน Google Cloud Platform และติดตั้ง ABAP SDK สําหรับ Google Cloud) และ Codelab 2 (กําหนดค่าการตรวจสอบสิทธิ์ ABAP SDK โดยใช้โทเค็นสําหรับ SAP ที่โฮสต์ใน VM ของ Compute Engine) ให้เสร็จสมบูรณ์ก่อนจึงจะดําเนินการต่อใน Codelab นี้ได้
  • หากคุณทำ Codelab 1 และ Codelab 2 เสร็จแล้ว ระบบจะจัดสรรระบบเวอร์ชันทดลอง 1909 ของ ABAP Platform บน Google Cloud ให้คุณ พร้อมกับการตั้งค่าที่จำเป็นสำหรับการตรวจสอบสิทธิ์และการเชื่อมต่อ
  • หากคุณยังไม่ได้ทํา Codelab 1 และ Codelab 2 ให้เสร็จสิ้น คุณจะไม่มีโครงสร้างพื้นฐานและการเชื่อมต่อที่จําเป็นทั้งหมดเพื่อทําตามขั้นตอนที่ระบุไว้ใน Codelab นี้ ดังนั้น คุณต้องทํา Codelab 1 และ Codelab 2 ให้เสร็จก่อนจึงจะทํา Codelab นี้ได้

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. ไปที่หน้า IAM เพื่อยืนยันว่าได้เพิ่มบทบาทแล้ว บัญชีบริการที่คุณสร้างขึ้นควรแสดงพร้อมกับบทบาทที่กำหนดไว้ดังที่แสดงด้านล่าง

92d75ce1554efb69.png

5. สร้างการกำหนดค่าคีย์ไคลเอ็นต์

ตอนนี้คุณได้ตั้งค่าข้อกําหนดเบื้องต้นในฝั่ง Google Cloud แล้ว เราจึงดําเนินการกําหนดค่าในฝั่ง SAP ต่อได้

สําหรับการกําหนดค่าที่เกี่ยวข้องกับการตรวจสอบสิทธิ์และการเชื่อมต่อ ABAP SDK สําหรับ Google Cloud จะใช้ตาราง /GOOG/CLIENT_KEY

หากต้องการดูแลรักษาการกําหนดค่าในตาราง /GOOG/CLIENT_KEY ให้ทําตามขั้นตอนต่อไปนี้

  1. ใน SAP GUI ให้ป้อนรหัสธุรกรรม SPRO
  2. คลิก SAP Reference IMG
  3. คลิก ABAP SDK สําหรับ 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

ในป๊อปอัปถัดไป ให้เลือก "ออบเจ็กต์ในเครื่อง" หรือ "ระบุชื่อแพ็กเกจ" ตามต้องการ

  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 MB ซึ่งอัปโหลดไปยังเซิร์ฟเวอร์แอปพลิเคชันในไดเรกทอรี /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

คุณสามารถตรวจสอบว่าอัปโหลดไฟล์สําเร็จหรือไม่โดยไปที่ที่เก็บข้อมูล Cloud Storage ตามที่แสดงด้านล่าง

90678b475e165adf.png

1886be610c63ed6b.png

8. อธิบายการอัปโหลดไฟล์ไปยัง Cloud Storage โดยใช้โค้ด ABAP SDK

โดยพื้นฐานแล้ว โปรแกรม ABAP นี้จะผสานรวมกับ Google Cloud Storage โดยจะอ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและส่งข้อมูลไฟล์ไปยัง API Client Stub ของ Storage API เพื่ออัปโหลดไปยังที่เก็บข้อมูลซึ่งสร้างขึ้นในโปรแกรมรายงานก่อนหน้านี้

โปรแกรมรายงานที่คุณสร้างเพื่ออัปโหลดไฟล์จะทําสิ่งต่อไปนี้

รายละเอียดทีละขั้นตอน

สร้างการเชื่อมต่อ:

  • โดยจะสร้างการเชื่อมต่อ HTTP กับบริการ Google Storage โดยใช้คลาส /GOOG/CL_STORAGE_V1

อ่านข้อมูลไฟล์

  • อ่านไฟล์บนเซิร์ฟเวอร์แอปพลิเคชันโดยทำ OPEN DATASET จากนั้นเรียกใช้โมดูลฟังก์ชัน SAP มาตรฐาน SCMS_STRING_TO_XSTRING เพื่อแปลงเป็นรูปแบบ XSTRING

เพิ่มพารามิเตอร์การค้นหาทั่วไป

  • หากต้องการแบ่งไฟล์ ประเภทการอัปโหลดที่เราเลือกต้องเป็น "อัปโหลดแบบดำเนินการต่อได้" โดยค่าเริ่มต้น เมื่อเลือกการอัปโหลดแบบเริ่มใหม่ได้ ระบบจะแบ่งข้อมูลไฟล์ออกเป็นกลุ่มขนาด 8 MB และอัปโหลด อย่างไรก็ตาม นักพัฒนาแอปสามารถเปลี่ยนขนาดการแบ่งกลุ่มนี้ได้โดยการตั้งค่าพารามิเตอร์ IV_P_CHUNK_SIZE แต่เราขอแนะนำให้ใช้การตั้งค่าเริ่มต้น
  • หากต้องการให้เมธอด API ทราบว่าต้องเลือกตัวเลือกการอัปโหลด "อัปโหลดต่อได้" เราจะเรียกเมธอด 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 ใช้ค่าเริ่มต้นที่เชื่อมโยงกับพารามิเตอร์นี้ ซึ่งก็คือ 8 MB

จัดการความสําเร็จ/ข้อผิดพลาด:

  • แสดงการตอบกลับของ API โดยอิงตามว่าการเรียก API สำเร็จหรือไม่

ปิดการเชื่อมต่อ:

  • ปิดการเชื่อมต่อ HTTP กับบริการพื้นที่เก็บข้อมูล

9. ขอแสดงความยินดี

ยินดีด้วย คุณทำ Codelab "การอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage" เสร็จเรียบร้อยแล้ว

Cloud Storage JSON API มีความสามารถหลายอย่าง และเมื่อใช้ ABAP SDK สําหรับ Google Cloud คุณจะเข้าถึง API เหล่านี้ได้โดยตรงในระบบ SAP โดยใช้ ABAP

Google Cloud Storage เป็นตัวเลือกที่ยอดเยี่ยมในการจัดเก็บและจัดการข้อมูลจํานวนมาก ซึ่งธุรกิจ องค์กร และแอปพลิเคชันต่างๆ จำนวนมากใช้

ประโยชน์บางส่วนของการใช้ Google Cloud Storage มีดังนี้

  • คุ้มค่า: Google Cloud Storage เป็นวิธีจัดเก็บและจัดการข้อมูลจำนวนมากที่คุ้มค่า
  • ความเรียบง่าย: Google Cloud Storage ใช้งานง่ายด้วย API ที่ใช้งานง่ายและเข้าใจง่าย
  • ความยืดหยุ่น: Google Cloud Storage ใช้ได้กับแอปพลิเคชันและแพลตฟอร์มที่หลากหลาย

ตอนนี้คุณก็เริ่มทำตาม Codelab ด้านล่างเพื่อเรียนรู้วิธีใช้ ABAP SDK เพื่อเข้าถึงบริการต่างๆ ของ Google Cloud ต่อได้แล้ว

  • ส่งเหตุการณ์ไปยัง Pub/Sub
  • รับเหตุการณ์จาก Cloud Pub/Sub
  • ใช้ Cloud Translation API เพื่อแปลข้อความ
  • ใช้ DLP API สำหรับการปกปิดข้อมูลส่วนบุคคล
  • เรียกใช้ BigQuery ML จาก ABAP

10. ล้างข้อมูล

หากไม่ต้องการทำ Codelab เพิ่มเติมที่เกี่ยวข้องกับ ABAP SDK สำหรับ 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