1. Giới thiệu
Trong lớp học lập trình này, chúng tôi đã liệt kê các bước để tạo tài khoản dịch vụ và sử dụng tài khoản đó để định cấu hình Khoá ứng dụng khách và bảng Communication Map (Bản đồ giao tiếp) do ABAP SDK cho Google Cloud cung cấp, đồng thời gọi Cloud Storage JSON API trong ABAP.
Các dịch vụ sau đây của Google Cloud được dùng trong lớp học lập trình này:
- Compute Engine
- Dịch vụ mạng
- Cloud Shell
- Cloud Storage JSON API phiên bản 1
Lưu ý: Khi bạn tạo một Dự án mới trên Google Cloud, một nhóm API và dịch vụ cụ thể (bao gồm cả Cloud Storage) sẽ tự động được bật. Điều này đảm bảo bạn có thể tận dụng ngay giải pháp lưu trữ mạnh mẽ này. Do đó, bạn không cần bật tính năng này như một bước bổ sung.
Điều kiện tiên quyết
- Đảm bảo bạn có quyền truy cập vào một hệ thống SAP đã cài đặt ABAP SDK cho Google Cloud.
- Bạn có thể tham khảo lớp học lập trình " Cài đặt phiên bản dùng thử nền tảng ABAP trên Google Cloud Platform và cài đặt ABAP SDK" để thiết lập một hệ thống mới.
Sản phẩm bạn sẽ tạo ra
Bạn sẽ tạo các chương trình sau trong Hệ thống SAP bằng ABAP SDK cho Google Cloud
- Tạo một bộ chứa Cloud Storage.
- Đọc một tệp từ máy chủ ứng dụng và tải tệp đó lên Bộ chứa Cloud Storage đã tạo.
2. Yêu cầu
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox.
- Một dự án trên đám mây của Google Cloud đã bật tính năng thanh toán hoặc Tạo tài khoản dùng thử miễn phí 90 ngày cho Google Cloud Platform.
- SAP GUI (Windows hoặc Java) được cài đặt trong hệ thống của bạn. Nếu SAP GUI đã được cài đặt trên máy tính xách tay, hãy kết nối với SAP bằng địa chỉ IP ngoài của máy ảo làm IP của Máy chủ ứng dụng. Nếu đang dùng máy Mac, bạn cũng có thể cài đặt SAP GUI cho Java có trong đường liên kết này.
3. Trước khi bắt đầu
- Đảm bảo bạn có quyền truy cập vào một hệ thống SAP đã cài đặt ABAP SDK cho Google Cloud.
- Bạn có thể tham khảo lớp học lập trình Cài đặt phiên bản dùng thử nền tảng ABAP trên Google Cloud Platform và cài đặt ABAP SDK để thiết lập một hệ thống mới.
- Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud (Ví dụ:
abap-sdk-poc). - Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không. Bỏ qua bước này nếu bạn đang sử dụng Tài khoản dùng thử miễn phí 90 ngày.
- Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud. Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải:

- Chạy các lệnh sau để xác thực tài khoản của bạn và đặt dự án mặc định thành
abap-sdk-poc. Vùngus-west4-bđược dùng làm ví dụ. Nếu cần, vui lòng thay đổi dự án và khu vực trong các lệnh sau theo lựa chọn ưu tiên của bạn.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Bạn phải có quyền truy cập vào một hệ thống SAP đã cài đặt ABAP SDK cho Google Cloud.
- Bạn phải hoàn thành lớp học lập trình 1 (Cài đặt ABAP Platform Trial 1909 trên Google Cloud Platform và cài đặt ABAP SDK cho Google Cloud) và lớp học lập trình 2 (Định cấu hình quy trình xác thực ABAP SDK bằng mã thông báo cho SAP được lưu trữ trên máy ảo Compute Engine) trước khi tiếp tục với lớp học lập trình này.
- Nếu bạn đã hoàn thành lớp học lập trình 1 và lớp học lập trình 2, thì bạn sẽ được cung cấp một Hệ thống dùng thử nền tảng ABAP 1909 trên Google Cloud, cùng với chế độ thiết lập bắt buộc cho hoạt động xác thực và kết nối.
- Nếu chưa hoàn thành lớp học lập trình 1 và lớp học lập trình 2, bạn sẽ không có tất cả cơ sở hạ tầng và khả năng kết nối cần thiết để thực hiện các bước được cung cấp trong lớp học lập trình này. Do đó, bạn phải hoàn tất lớp học lập trình 1 và lớp học lập trình 2 trước khi tiếp tục với lớp học lập trình này.
4. Tạo Tài khoản dịch vụ có Vai trò người dùng đối tượng lưu trữ
Để tạo tài khoản dịch vụ có vai trò bắt buộc, hãy thực hiện các bước sau:
- Chạy lệnh sau trong cửa sổ dòng lệnh Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Giờ đây, hãy thêm các vai trò bắt buộc vào tài khoản dịch vụ mà bạn đã tạo ở bước trên:
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'
Lệnh trên sử dụng abap-sdk-poc làm phần giữ chỗ cho Dự án Google Cloud. Thay abap-sdk-poc bằng mã dự án của bạn.
- Để xác minh rằng vai trò đã được thêm, hãy chuyển đến trang IAM. Tài khoản dịch vụ mà bạn đã tạo sẽ xuất hiện cùng với vai trò được chỉ định cho tài khoản đó như minh hoạ dưới đây:

5. Tạo cấu hình khoá ứng dụng
Giờ đây, sau khi thiết lập các điều kiện tiên quyết trên Google Cloud, chúng ta có thể chuyển sang bước định cấu hình trên SAP.
Đối với cấu hình liên quan đến hoạt động xác thực và kết nối, ABAP SDK cho Google Cloud sẽ sử dụng bảng /GOOG/CLIENT_KEY
Để duy trì cấu hình trong bảng /GOOG/CLIENT_KEY, hãy thực hiện các bước sau:
- Trong SAP GUI, hãy nhập mã giao dịch
SPRO. - Nhấp vào SAP Reference IMG.
- Nhấp vào ABAP SDK for Google Cloud > Basic Settings > Configure Client Key (ABAP SDK cho Google Cloud > Cài đặt cơ bản > Định cấu hình khoá ứng dụng).
- Duy trì các giá trị sau đối với các trường:
Trường | Giá trị |
Tên khoá Google Cloud | TEST_STORAGE |
Tên tài khoản dịch vụ Google Cloud |
|
Phạm vi Google Cloud |
|
Mã dự án | abap-sdk-poc |
Lớp uỷ quyền |
|
Để trống tất cả các trường khác
6. Tạo Z-Report để tạo một nhóm trên Cloud Storage
- Đăng nhập vào Hệ thống SAP.
- Chuyển đến mã giao dịch
SE38và tạo một Chương trình báo cáo có tên làZDEMO_CREATE_BUCKET. - Trong cửa sổ bật lên mở ra, hãy cung cấp thông tin chi tiết như minh hoạ dưới đây:

Trong cửa sổ bật lên tiếp theo, hãy chọn Local Object (Đối tượng cục bộ) hoặc Provide a package name (Cung cấp tên gói) theo lựa chọn của bạn.
- Trong Trình chỉnh sửa ABAP, hãy thêm đoạn mã sau:
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.
Xin lưu ý rằng nếu tên bộ chứa không phải là tên duy nhất trên toàn cầu thì bộ chứa sẽ không được tạo. Do đó, hãy thử sử dụng một tên duy nhất cho bộ chứa trước khi thực thi mã
- Lưu và kích hoạt báo cáo.
- Thực thi báo cáo (Nhấn F8).
Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như minh hoạ dưới đây:

7. Tạo Z-Report để đọc tệp từ máy chủ ứng dụng và tải tệp đó lên bộ chứa Cloud Storage
Trước khi thực hiện hoạt động này, bạn cần chuẩn bị một tệp văn bản lớn. Ở đây, chúng ta đã có một tệp văn bản lớn được tạo và tải lên máy chủ ứng dụng. Bạn có thể dùng mã giao dịch CG3Z để tải một tệp lên máy chủ ứng dụng của hệ thống SAP
Trong ví dụ này, chúng ta sẽ sử dụng một tệp văn bản có kích thước khoảng 40 MB, đã được tải lên Máy chủ ứng dụng trong thư mục /tmp.
Bạn cũng có thể tải thư mục này xuống từ GitHub bằng đường liên kết sau: Tệp mẫu
- Đăng nhập vào Hệ thống SAP
- Chuyển đến mã giao dịch
SE38và tạo một Chương trình báo cáo có tên làZDEMO_UPLOAD_FILE. - Trong cửa sổ bật lên mở ra, hãy cung cấp thông tin chi tiết như minh hoạ dưới đây:

Trong cửa sổ bật lên tiếp theo, hãy chọn Local Object (Đối tượng cục bộ) hoặc Provide a package name (Cung cấp tên gói) theo lựa chọn của bạn.
- Trong Trình chỉnh sửa ABAP, hãy thêm đoạn mã sau:
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( ).
- Lưu và kích hoạt báo cáo.
- Thực thi báo cáo (Nhấn F8).
Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như minh hoạ dưới đây:

Bạn có thể xác minh xem tệp đã được tải lên thành công hay chưa bằng cách chuyển đến Bộ chứa của bộ nhớ trên đám mây như minh hoạ bên dưới


8. Tải tệp lên Cloud Storage bằng mã ABAP SDK (có giải thích)
Về cơ bản, chương trình ABAP này tích hợp với Google Cloud Storage. Thao tác này sẽ đọc một tệp từ máy chủ ứng dụng và truyền dữ liệu tệp đến API Client Stub của Storage API để tải tệp đó lên một bộ chứa lưu trữ. Bộ chứa này được tạo trong chương trình báo cáo trước đó.
Chương trình báo cáo mà bạn đã tạo để tải tệp lên sẽ thực hiện những việc sau:
Giải thích từng bước
Thiết lập kết nối:
- Thao tác này thiết lập một kết nối HTTP với dịch vụ Google Storage bằng cách sử dụng lớp
/GOOG/CL_STORAGE_V1.
Đọc dữ liệu tệp
- Đọc tệp trên máy chủ ứng dụng bằng cách thực hiện
OPENDATASETrồi gọi mô-đun hàm SAP tiêu chuẩnSCMS_STRING_TO_XSTRINGđể chuyển đổi sang định dạngXSTRING.
Thêm tham số truy vấn chung
- Để đạt được việc phân đoạn, loại tệp tải lên mà chúng ta cần chọn là "Có thể tiếp tục". Theo mặc định, khi bạn chọn chế độ tải lên tiếp tục, dữ liệu tệp sẽ được chia thành các khối 8 MB và tải lên. Tuy nhiên, nhà phát triển có thể thay đổi kích thước phân đoạn này bằng cách đặt tham số
IV_P_CHUNK_SIZE, nhưng bạn nên sử dụng chế độ cài đặt mặc định. - Để cho phương thức API biết rằng bạn phải chọn chế độ tải lên "Có thể tiếp tục", chúng ta sẽ gọi phương thức
ADD_COMMON_QPARAMvà truyềnuploadTypedưới dạngresumable.
Chèn đối tượng
- Gọi phương thức
INSERT_OBJECTSbằng cách truyền các tham số sau vào phương thức đó: IV_Q_NAME: Tên tệp mà nội dung sẽ được lưu trữ trong Cloud StorageIV_P_BUCKET: Tên nhóm nơi bạn phải tải tệp lênIS_DATA: Dữ liệu tệp cần được tải lênIV_CONTENT_TYPE: Loại nội dung của tệp. Trong trường hợp hiện tại, chúng ta đang sử dụng "text/plain" vì chúng ta đang tải một tệp văn bản lên.
Xin lưu ý rằng chúng ta không truyền bất kỳ giá trị nào vào tham số nhập IV_CHUNK_SIZE và để API Client Stub sử dụng giá trị mặc định được liên kết với tham số này, tức là 8 MB.
Xử lý thành công/lỗi:
- Hiển thị phản hồi API dựa trên việc lệnh gọi API có thành công hay không.
Đóng kết nối:
- Đóng kết nối HTTP với Dịch vụ lưu trữ.
9. Xin chúc mừng
Xin chúc mừng! Bạn đã hoàn tất thành công Lớp học lập trình "Tải tệp lên vùng lưu trữ trên Cloud Storage".
Cloud Storage JSON API có nhiều chức năng và với ABAP SDK cho Google Cloud, bạn có thể truy cập trực tiếp vào các chức năng này trong hệ thống SAP một cách tự nhiên bằng ABAP.
Google Cloud Storage là một lựa chọn tuyệt vời để lưu trữ và quản lý lượng lớn dữ liệu. API này được nhiều doanh nghiệp, công ty và ứng dụng sử dụng.
Một số lợi ích khi sử dụng Google Cloud Storage:
- Tiết kiệm chi phí: Google Cloud Storage là một cách tiết kiệm chi phí để lưu trữ và quản lý lượng lớn dữ liệu.
- Tính đơn giản: Google Cloud Storage rất dễ sử dụng, với một API đơn giản và trực quan.
- Tính linh hoạt: Bạn có thể sử dụng Google Cloud Storage với nhiều ứng dụng và nền tảng.
Giờ đây, bạn có thể tiếp tục với lớp học lập trình bên dưới để tiếp tục hành trình học tập cách sử dụng ABAP SDK để truy cập vào nhiều dịch vụ của Google Cloud.
- Gửi một sự kiện đến Pub/Sub
- Nhận một sự kiện từ Cloud Pub/Sub
- Sử dụng Cloud Translation API để dịch văn bản
- Sử dụng DLP API để biên tập thông tin nhận dạng cá nhân
- Gọi BigQuery ML từ ABAP
10. Dọn dẹp
Nếu bạn không muốn tiếp tục với các codelab bổ sung liên quan đến ABAP SDK cho Google Cloud, vui lòng tiếp tục với bước dọn dẹp.
Xoá dự án
- Xoá dự án trên Google Cloud:
gcloud projects delete abap-sdk-poc
Xoá từng tài nguyên
- Xoá phiên bản điện toán:
gcloud compute instances delete abap-trial-docker
- Xoá các quy tắc về tường lửa:
gcloud compute firewall-rules delete sapmachine
- Xoá tài khoản dịch vụ:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com