1. บทนำ
ใน Codelab นี้ เราได้แสดงขั้นตอนในการสร้างบัญชีบริการและใช้บัญชีดังกล่าวเพื่อกำหนดค่าคีย์ไคลเอ็นต์และตารางแผนที่การสื่อสารที่จัดทำโดย ABAP SDK สำหรับ Google Cloud และเรียกใช้ Cloud Storage JSON API ใน ABAP
บริการ Google Cloud ต่อไปนี้ใช้ใน Codelab นี้
- Compute Engine
- บริการเครือข่าย
- Cloud Shell
- Cloud Storage JSON API V1
หมายเหตุ: เมื่อสร้างโปรเจ็กต์ Google Cloud ใหม่ ระบบจะเปิดใช้ชุด API และบริการที่เฉพาะเจาะจงโดยอัตโนมัติ ซึ่งรวมถึง Cloud Storage เพื่อให้คุณใช้ประโยชน์จากโซลูชันพื้นที่เก็บข้อมูลที่มีประสิทธิภาพนี้ได้ทันที ดังนั้นคุณจึงไม่จำเป็นต้องเปิดใช้เป็นขั้นตอนเพิ่มเติม
ข้อกำหนดเบื้องต้น
- ตรวจสอบว่าคุณมีสิทธิ์เข้าถึงระบบ SAP ที่ติดตั้ง ABAP SDK สำหรับ Google Cloud
- คุณดู Codelab "ติดตั้งแพลตฟอร์ม ABAP เวอร์ชันทดลองใช้ใน Google Cloud Platform และติดตั้ง ABAP SDK" เพื่อตั้งค่าระบบใหม่ได้
สิ่งที่คุณจะสร้าง
คุณจะสร้างโปรแกรมต่อไปนี้ในระบบ SAP โดยใช้ ABAP SDK สำหรับ Google Cloud
- สร้าง Bucket ของ Cloud Storage
- อ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและอัปโหลดไปยัง Bucket ของ Cloud Storage ที่สร้างขึ้น
2. ข้อกำหนด
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน หรือสร้างบัญชีทดลองใช้ฟรี 90 วันสำหรับ Google Cloud Platform
- SAP GUI (Windows หรือ Java) ที่ติดตั้งในระบบ หากติดตั้ง SAP GUI ในแล็ปท็อปแล้ว ให้เชื่อมต่อกับ SAP โดยใช้ที่อยู่ IP ภายนอกของ VM เป็น IP ของเซิร์ฟเวอร์แอปพลิเคชัน หากใช้ Mac คุณยังติดตั้ง SAP GUI สำหรับ Java ได้ด้วยโดยไปที่ลิงก์นี้
3. ก่อนเริ่มต้น
- ตรวจสอบว่าคุณมีสิทธิ์เข้าถึงระบบ SAP ที่ติดตั้ง ABAP SDK สำหรับ Google Cloud
- คุณดู Codelab ติดตั้ง ABAP Platform Trial ใน Google Cloud Platform และติดตั้ง ABAP SDK เพื่อตั้งค่าระบบใหม่ได้
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ 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 สำหรับ Google Cloud
- คุณต้องทำ Codelab 1 (ติดตั้ง ABAP Platform Trial 1909 ใน Google Cloud Platform และติดตั้ง ABAP SDK สำหรับ Google Cloud) และ Codelab 2 (กำหนดค่าการตรวจสอบสิทธิ์ ABAP SDK โดยใช้โทเค็นสำหรับ SAP ที่โฮสต์ใน VM ของ Compute Engine) ให้เสร็จสมบูรณ์ก่อนจึงจะดำเนินการกับ Codelab นี้ได้
- หากคุณทำ Codelab 1 และ Codelab 2 เสร็จแล้ว ระบบจะจัดสรรระบบทดลองใช้ ABAP Platform 1909 ใน Google Cloud พร้อมกับการตั้งค่าที่จำเป็นสำหรับการตรวจสอบสิทธิ์และการเชื่อมต่อให้คุณ
- หากยังไม่ได้ทำ Codelab 1 และ Codelab 2 คุณจะไม่มีโครงสร้างพื้นฐานและการเชื่อมต่อที่จำเป็นทั้งหมดเพื่อทำตามขั้นตอนที่ระบุไว้ใน Codelab นี้ ดังนั้น คุณต้องทำ Codelab 1 และ Codelab 2 ให้เสร็จก่อนจึงจะทำ Codelab นี้ต่อได้
4. สร้างบัญชีบริการที่มีบทบาทผู้ใช้ที่เข้าถึงออบเจ็กต์ใน Cloud Storage
หากต้องการสร้างบัญชีบริการที่มีบทบาทที่จำเป็น ให้ทำตามขั้นตอนต่อไปนี้
- เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล 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 > การตั้งค่าพื้นฐาน > กำหนดค่าคีย์ไคลเอ็นต์
- คงค่าต่อไปนี้ไว้ในช่อง
ช่อง | ค่า |
ชื่อคีย์ Google Cloud | TEST_STORAGE |
ชื่อบัญชีบริการของ Google Cloud |
|
ขอบเขตของ Google Cloud |
|
รหัสโปรเจ็กต์ | abap-sdk-poc |
คลาสการให้สิทธิ์ |
|
เว้นช่องอื่นๆ ทั้งหมดว่างไว้
6. สร้างรายงาน Z เพื่อสร้าง Bucket ใน Cloud Storage
- เข้าสู่ระบบ SAP
- ไปที่รหัสธุรกรรม
SE38แล้วสร้างโปรแกรมรายงานที่มีชื่อZDEMO_CREATE_BUCKET. - ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดตามที่แสดงด้านล่าง

ในป๊อปอัปถัดไป ให้เลือกออบเจ็กต์ในเครื่องหรือระบุชื่อแพ็กเกจตามที่คุณต้องการ
- ใน ABAP Editor ให้เพิ่มโค้ดต่อไปนี้
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.
โปรดทราบว่าหากชื่อ Bucket ไม่ซ้ำกันทั่วโลก ระบบจะไม่สร้าง Bucket ดังนั้นโปรดลองใช้ชื่อที่ไม่ซ้ำกันสำหรับ Bucket ก่อนที่จะเรียกใช้โค้ด
- บันทึกและเปิดใช้งานรายงาน
- เรียกใช้รายงาน (กด F8)
เมื่อดำเนินการสำเร็จ คุณควรเห็นเอาต์พุตของรายงานดังที่แสดงด้านล่าง

7. สร้างรายงาน Z เพื่ออ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและอัปโหลดไปยัง Bucket ของ Cloud Storage
ก่อนที่จะทำกิจกรรมนี้ คุณต้องเตรียมไฟล์ข้อความขนาดใหญ่ ในที่นี้ เรามีไฟล์ข้อความขนาดใหญ่ที่สร้างและอัปโหลดไปยังเซิร์ฟเวอร์แอปพลิเคชันแล้ว คุณสามารถใช้รหัสธุรกรรม CG3Z เพื่ออัปโหลดไฟล์ไปยังเซิร์ฟเวอร์แอปพลิเคชันของระบบ SAP
ในตัวอย่างนี้ เราใช้ไฟล์ข้อความขนาดประมาณ 40 MB ซึ่งอัปโหลดไปยังเซิร์ฟเวอร์แอปพลิเคชันในไดเรกทอรี /tmp แล้ว
คุณยังดาวน์โหลดโฟลเดอร์นี้จาก GitHub ได้โดยใช้ลิงก์ต่อไปนี้ ไฟล์ตัวอย่าง
- เข้าสู่ระบบ SAP
- ไปที่รหัสธุรกรรม
SE38แล้วสร้างโปรแกรมรายงานที่มีชื่อZDEMO_UPLOAD_FILE. - ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดตามที่แสดงด้านล่าง

ในป๊อปอัปถัดไป ให้เลือกออบเจ็กต์ในเครื่องหรือระบุชื่อแพ็กเกจตามที่คุณต้องการ
- ใน ABAP Editor ให้เพิ่มโค้ดต่อไปนี้
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)
เมื่อดำเนินการสำเร็จ คุณควรเห็นเอาต์พุตของรายงานดังที่แสดงด้านล่าง

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


8. อัปโหลดไฟล์ไปยัง Cloud Storage โดยใช้โค้ด ABAP SDK ที่อธิบายไว้
โดยพื้นฐานแล้ว โปรแกรม ABAP นี้จะผสานรวมกับ Google Cloud Storage โดยจะอ่านไฟล์จากเซิร์ฟเวอร์แอปพลิเคชันและส่งข้อมูลไฟล์ไปยัง API Client Stub ของ Storage API เพื่ออัปโหลดไปยังที่เก็บข้อมูล ซึ่งสร้างขึ้นในโปรแกรมรายงานก่อนหน้านี้
โปรแกรมรายงานที่คุณสร้างขึ้นเพื่ออัปโหลดไฟล์จะทำสิ่งต่อไปนี้
รายละเอียดทีละขั้นตอน
สร้างการเชื่อมต่อ:
- โดยจะสร้างการเชื่อมต่อ HTTP กับบริการ Google Storage โดยใช้คลาส
/GOOG/CL_STORAGE_V1
อ่านข้อมูลไฟล์
- อ่านไฟล์ในเซิร์ฟเวอร์แอปพลิเคชันโดยทำ
OPENDATASETแล้วเรียกใช้ฟังก์ชันโมดูล SAP มาตรฐานSCMS_STRING_TO_XSTRINGเพื่อแปลงเป็นรูปแบบXSTRING
เพิ่มพารามิเตอร์การค้นหาทั่วไป
- หากต้องการแบ่งเป็นก้อน ประเภทการอัปโหลดที่เราต้องเลือกคือการอัปโหลด "ที่อัปโหลดต่อได้" โดยค่าเริ่มต้น เมื่อเลือกการอัปโหลดที่ดำเนินการต่อได้ ระบบจะแบ่งข้อมูลไฟล์ออกเป็นก้อนขนาด 8 MB แล้วอัปโหลด อย่างไรก็ตาม นักพัฒนาแอปสามารถเปลี่ยนขนาดการแบ่งกลุ่มนี้ได้โดยการตั้งค่าพารามิเตอร์
IV_P_CHUNK_SIZEแต่ขอแนะนำให้ใช้การตั้งค่าเริ่มต้น - หากต้องการให้เมธอด API ทราบว่าต้องเลือกตัวเลือกการอัปโหลด "อัปโหลดต่อได้" เราจะเรียกเมธอด
ADD_COMMON_QPARAMและส่งuploadTypeเป็นresumable.
แทรกออบเจ็กต์
- เรียกใช้เมธอด
INSERT_OBJECTSโดยส่งพารามิเตอร์ต่อไปนี้ไปยังเมธอด IV_Q_NAME: ชื่อไฟล์ที่จะใช้จัดเก็บเนื้อหาใน Cloud StorageIV_P_BUCKET: ชื่อที่เก็บข้อมูลที่ต้องอัปโหลดไฟล์IS_DATA: ข้อมูลไฟล์ที่ต้องอัปโหลดIV_CONTENT_TYPE: ประเภทเนื้อหาของไฟล์ ในสถานการณ์ปัจจุบัน เราใช้ "text/plain" เนื่องจากเราอัปโหลดไฟล์ข้อความ
โปรดทราบว่าเราจะไม่ส่งค่าใดๆ ไปยังพารามิเตอร์การนำเข้า IV_CHUNK_SIZE และปล่อยให้ Stub ไคลเอ็นต์ API ใช้ค่าเริ่มต้นที่เชื่อมโยงกับพารามิเตอร์นี้ ซึ่งก็คือ 8 MB
จัดการความสำเร็จ/ข้อผิดพลาด:
- แสดงการตอบกลับจาก API โดยพิจารณาว่าการเรียก API สำเร็จหรือไม่
ปิดการเชื่อมต่อ:
- ปิดการเชื่อมต่อ HTTP กับบริการพื้นที่เก็บข้อมูล
9. ขอแสดงความยินดี
ยินดีด้วย คุณทำ Codelab "การอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage" เสร็จเรียบร้อยแล้ว
Cloud Storage JSON API มีความสามารถมากมาย และด้วย ABAP SDK สำหรับ Google Cloud คุณจะเข้าถึงความสามารถเหล่านั้นได้โดยตรงในระบบ 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
ลบทรัพยากรแต่ละรายการ
- ลบอินสแตนซ์ Compute โดยทำดังนี้
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