เกี่ยวกับ Codelab นี้
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