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 แล้ว
- คุณสามารถดู Codelab "ติดตั้งช่วงทดลองใช้แพลตฟอร์ม ABAP ใน Google Cloud Platform และติดตั้ง ABAP SDK" เพื่อตั้งค่าระบบใหม่
สิ่งที่คุณจะสร้าง
คุณจะต้องสร้างโปรแกรมต่อไปนี้ในระบบ 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. ก่อนเริ่มต้น
- ตรวจสอบว่าคุณมีสิทธิ์เข้าถึงระบบ SAP ที่ติดตั้ง ABAP SDK สําหรับ Google Cloud แล้ว
- คุณสามารถดูข้อมูลใน Codelab ติดตั้งช่วงทดลองใช้แพลตฟอร์ม ABAP ใน Google Cloud Platform และติดตั้ง ABAP SDK เพื่อตั้งค่าระบบใหม่
- ใน Google Cloud Console ในหน้าเครื่องมือเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud (เช่น
abap-sdk-poc).
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์หรือไม่ โปรดข้ามขั้นตอนนี้หากคุณใช้บัญชีทดลองใช้ฟรี 90 วัน
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud จากคอนโซลระบบคลาวด์ ให้คลิกเปิดใช้งาน 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 รุ่นทดลอง 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. สร้างบัญชีบริการที่มีบทบาทผู้ใช้ออบเจ็กต์พื้นที่เก็บข้อมูล
หากต้องการสร้างบัญชีบริการที่มีบทบาทที่จําเป็น ให้ทําตามขั้นตอนต่อไปนี้
- เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล 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 เพื่อสร้างที่เก็บข้อมูลใน Cloud Storage
- เข้าสู่ระบบระบบ SAP
- ไปที่รหัสธุรกรรม
SE38
และสร้างโปรแกรมรายงานชื่อZDEMO_CREATE_BUCKET.
- ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดดังที่แสดงด้านล่าง
ในป๊อปอัปถัดไป ให้เลือก "ออบเจ็กต์ในเครื่อง" หรือ "ระบุชื่อแพ็กเกจ" ตามต้องการ
- ในตัวแก้ไข 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 MB ซึ่งอัปโหลดไปยังเซิร์ฟเวอร์แอปพลิเคชันในไดเรกทอรี /tmp
แล้ว
นอกจากนี้ คุณยังดาวน์โหลดโฟลเดอร์นี้จาก GitHub โดยใช้ลิงก์ต่อไปนี้ได้ด้วย ไฟล์ตัวอย่าง
- เข้าสู่ระบบ SAP
- ไปที่รหัสธุรกรรม
SE38
และสร้างโปรแกรมรายงานชื่อZDEMO_UPLOAD_FILE.
- ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดดังที่แสดงด้านล่าง
ในป๊อปอัปถัดไป ให้เลือก "ออบเจ็กต์ในเครื่อง" หรือ "ระบุชื่อแพ็กเกจ" ตามต้องการ
- ในตัวแก้ไข 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 โดยใช้โค้ด 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 StorageIV_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
ลบทรัพยากรแต่ละรายการ
- ลบอินสแตนซ์การประมวลผลโดยทำดังนี้
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