您可以使用 SAP 應用程式記錄檔查看錯誤和記錄訊息,藉此排解 Google Cloud 適用的 ABAP SDK 在內部部署或任何雲端版本的問題。
檢查軟體需求和先決條件
請確認所有系統軟體都執行必要的最低版本,且已符合所有 ABAP SDK for Google Cloud 的必要條件。
如要瞭解 SDK 安裝前置條件,請參閱「事前準備」。
閱讀 SAP 支援文件
如果您有 SAP 使用者帳戶,只要閱讀 SAP ONE 支援 Launchpad 提供的 SAP 附註和 SAP 知識庫文章,就能找到許多 SAP 軟體問題的解決方法。
記錄
設定記錄功能後,ABAP SDK for Google Cloud 會將錯誤訊息記錄到 SAP 應用程式記錄。如要進一步瞭解記錄功能,請參閱「應用程式記錄」。
如要查看記錄訊息,請按照下列步驟操作:
- 在 SAP GUI 中輸入交易代碼
SLG1
。 - 輸入記錄物件名稱和子物件名稱。
- 請選取有效的日期和時間範圍。
- 執行交易。系統會顯示 SDK 產生的所有記錄訊息。
記錄訊息通常包含下列兩個項目:
- 輸入:提供發生錯誤的確切程式碼位置資訊。如要排解問題,您可以在偵錯時使用這個程式碼位置做為中斷點。
- 錯誤訊息:提供執行作業時發生的錯誤資訊。
偵錯
如果您已取得必要的授權,就可以對 API 用戶端類別進行偵錯。
如要對 API 用戶端類別進行偵錯,請使用下列其中一個選項:
在
/GOOG/CL_HTTP_CLIENT
類別的建構函式中加入中斷點,然後執行程式。或者,您也可以在使用的程式中加入中斷點,然後執行程式。
HTTP 追蹤記錄
在排解錯誤時,您可以在交易 SMICM
或 ST05
中啟用 HTTP 追蹤功能。為避免對效能造成影響,請在完成後立即停用 HTTP 追蹤。
常見的設定問題
/GOOG/MSG 461: Insufficient privileges for execution
問題:使用者無法執行 SDK 設定、執行公用程式或示範程式。
原因:使用者缺少授權。
解決方法:使用交易 SU53
,找出 SDK 所需的缺少授權。如要為您的使用者 ID 取得必要授權,請與 SAP 安全性管理員聯絡。詳情請參閱「管理授權」。
/GOOG/MSG: 403 - Permission iam.serviceAccountTokenCreator
denied on resource (or it may not exist)
iam.serviceAccountTokenCreator
denied on resource (or it may not exist)問題:如果您在 Compute Engine VM 上託管 SAP 系統,當您使用以權杖為基礎的驗證方法時,就無法存取Google Cloud API。
原因:如果 SAP 系統是託管在 Compute Engine VM 上,在用戶端金鑰設定中,指定的服務帳戶會在與 SAP 主機 VM 不同 Google Cloud 專案中建立。
解決方法:如要解決這個問題,請執行下列步驟:
- 在 Google Cloud 包含 SAP 主機 VM 的專案中,將
Service Account Token Creator
角色授予主機 VM 的服務帳戶。如要進一步瞭解這些步驟,請參閱「授予單一角色」。 - 在包含 SAP 主機 VM 的 Google Cloud 專案中:
- 建立服務帳戶。請記下服務帳戶名稱。當您將服務帳戶新增為包含 Google Cloud API 的其他專案的擁有者時,請指定這個名稱。如要瞭解如何建立服務帳戶,請參閱「建立服務帳戶」。
- 在 SDK 的用戶端金鑰設定中,指定這個服務帳戶。
- 在包含 Google Cloud API 的其他專案中:
- 將服務帳戶新增為主體。
- 授予適當的角色,以便連線至 Google Cloud API。如要進一步瞭解 API 專屬的預先定義角色,請參閱 IAM 基本角色和預先定義角色參考資料。
詳情請參閱「使用存取權存證進行驗證」。
常見的營運問題
透過用戶端存根公開方法使用 Google Cloud API 時,開發人員可能會遇到錯誤和例外狀況。這些錯誤和例外狀況大致分為兩類:
- ABAP SDK for Google Cloud 觸發的錯誤和例外狀況
- Google Cloud API 傳回的錯誤
本節將說明 SDK 觸發的錯誤和例外狀況。針對 API 傳回的錯誤,建議您查看對應 API 的公開說明文件。
/GOOG/MSG : 461 - Bad Request: Client key is not found in /GOOG/CLIENT_KEY table
問題:您無法例項化 API 用戶端 Stub 物件。
原因:用戶端金鑰表 /GOOG/CLIENT_KEY
不含有效的用戶端金鑰。
解決方法:在用戶端金鑰資料表 /GOOG/CLIENT_KEY
中,維護有效的用戶端金鑰。在例項化 API 用戶端存根時,請使用匯入參數 iv_key_name
傳遞有效的用戶端金鑰。
您可以使用驗證方法的詳細資料設定用戶端金鑰。如要瞭解驗證方法,請參閱「驗證」。
如要瞭解如何透過匯入參數 iv_key_name
傳遞用戶端金鑰,請參閱「建構函式」。
/GOOG/MSG : 461 - Log Object not maintained in TCode SLG0
問題:您無法例項化 API 用戶端 Stub 物件。
原因:在 /GOOG/LOG_CONFIG
資料表中維護無效的預設記錄物件,或是將無效的記錄物件傳遞至匯入參數 iv_log_object
。
解決方法:請確認 SAP 系統中是否有有效的記錄物件。
如要瞭解記錄功能,請參閱「應用程式記錄」。
如要進一步瞭解如何傳遞記錄物件,請參閱「建構函式」一節。
/GOOG/MSG : 461 - Log SubObject not maintained in TCode SLG0
問題:您無法例項化 API 用戶端 Stub 物件。
原因:在 /GOOG/LOG_CONFIG
資料表中保留無效的預設記錄檔子物件,或是將無效的記錄檔子物件傳遞至匯入參數 iv_log_subobject
。
解決方法:請確認 SAP 系統中是否有有效的記錄子物件。
如要瞭解記錄功能,請參閱「應用程式記錄」。
如要進一步瞭解如何傳遞記錄子物件,請參閱「建構函式」。
/GOOG/MSG : 461 - Destination does not exist exception occurred in reading RFC destination
問題:您無法例項化 API 用戶端 Stub 物件。
原因:在 /GOOG/SERVIC_MAP
資料表中,RFC 目的地不存在於 SAP 系統中。
解決方法:建立必要的 RFC 目的地。詳情請參閱「設定 RFC 目的地」。
/GOOG/MSG : 461 - Invalid RFC Destination GOOGLE_API exception occurred in reading RFC destination
問題:您無法連線至 GOOGLE_API。
原因:這個問題可能是下列任一原因所致:
- RFC 連線類型不是
G - HTTP connection to external server
。 443
服務編號未指定。- 預設的 SSL 用戶端 (標準) 處於停用狀態。
解決方法:針對必要的 RFC 目的地,請執行下列操作:
- 將 RFC 連線類型更新為
G - HTTP connection to external server
。 - 請確認服務編號為
443
。 - 在「SSL 憑證」欄位中,確認已選取「預設 SSL 用戶端 (標準)」選項。
- 如果您已為中繼資料伺服器建立 RFC 目的地,請確認服務編號為
80
。 Google Cloud
如要瞭解如何建立 RFC 目的地,請參閱:
/GOOG/MSG : 461 - ERROR_MESSAGE exception occurred during the request creation
問題:您無法連線至 Google Cloud API。
原因:SAP 系統無法建立 HTTP 用戶端物件。
解決方法:請確認 ICM 已設定為透過 HTTP 與外部伺服器通訊。詳情請參閱「驗證 Internet Communication Manager (ICM)」。
/GOOG/MSG: 461 - Secret Manager Client Key not maintained in table /GOOG/CLIENT_KEY ERROR_MESSAGE
問題:您無法使用 Secret Manager 授權類別 /GOOG/CL_AUTH_API_KEY_SM
連線至 Google Cloud API。
原因:在用戶端金鑰設定中,缺少 Authorization Parameter 1
或 Authorization Parameter 2
。
解決方法:在用戶端金鑰表格中,更新必要的 Authorization Parameter 1
或 Authorization Parameter 2
。詳情請參閱「設定用於存取 Secret Manager 的用戶端金鑰」。
/GOOG/MSG: 461 - SSF Application APPLICATION_NAME is not set up in the system ERROR_MESSAGE
問題:您無法使用 SSF 授權類別 /GOOG/CL_AUTH_API_KEY_SSF
連線至 Google Cloud API。
原因:在用戶端金鑰設定中,缺少 Authorization Parameter 1
。
解決方法:在用戶端金鑰表格中,更新所需的 Authorization Parameter 1
。詳情請參閱「為 SSF 設定用戶端金鑰」。
/GOOG/MSG: 461 - Method call of /GOOG/IF_AUTH~GET_ACCESS_TOKEN failed; the class CLASS_NAME does not exist
問題:您無法使用用戶端金鑰表格中維護的設定連線至 Google Cloud API。
原因:在用戶端索引鍵資料表中,Authorization Class
不正確。
解決方法:維持正確的 Authorization Class
。詳情請參閱「使用存取權權杖進行驗證」。
/GOOG/MSG: 404 - Not Found
問題:您無法連線至 Google Cloud API。無法連上 API 端點。
原因:SDK 用來連線至Google Cloud API 的 RFC 目的地未正確設定。例如,在 RFC 目的地中設定無效的端點。
解決方法:請檢查 RFC 目的地是否已正確設定。詳情請參閱「設定 RFC 目的地」。
DESCRIPTION_OF_ISSUE while signing JWT using profile KEY_FILE_NAME.pse. Check JWT config in STRUST
STRUST
問題:您無法連線至 Google Cloud API。
原因:STRUST
中未正確設定 JWT 設定和服務帳戶金鑰設定。
解決方法:確認 JWT 設定和服務帳戶金鑰已按照「使用 JSON Web Token 進行驗證」一文所述方式設定。
Bad Request invalid_grant. Invalid JWT Signature
問題:您無法連線至 Google Cloud API。
原因:匯入 STRUST
的 PSE 或 P12 金鑰檔案不屬於您用來簽署 JWT 的服務帳戶。
解決方法:請務必將正確的服務帳戶金鑰檔案匯入 STRUST
。這個金鑰檔案必須屬於您指定用於 JWT 簽署的特定服務帳戶。
參考資料:
- 如要進一步瞭解如何將服務帳戶金鑰匯入
STRUST
,請參閱「將服務帳戶金鑰匯入 STRUST」。 - 如需相關社群文章,請參閱「在 Google Cloud 適用的 ABAP SDK 中設定 JWT 驗證機制」。
/GOOG/MSG : 417 - Direct connect to googleapis.com/oauth:443 failed: NIEHOST_UNKNOWN (-2)
問題:驗證 Google Cloud 失敗,並顯示錯誤訊息 /GOOG/MSG : 417 - Direct connect to googleapis.com/oauth:443 failed: NIEHOST_UNKNOWN (-2)
。
原因:在 ABAP SDK for Google Cloud 用於驗證 Google Cloud的 RFC 目的地中,目標主機無效。
解決方法:如要解決這個問題,請完成下列步驟:
使用範例 RFC 目的地
GOOG_OAUTH2_TOKEN
建立 RFC 目的地。如要瞭解如何建立 RFC 目的地,請參閱「RFC 目的地」。請確認 RFC 目的地使用下列值:
- 主辦人:
oauth2.googleapis.com
- 路徑前置字串:
/token
。
- 主辦人:
如果 SAP 系統會透過 Proxy 連線至網際網路,請在 RFC 目的地中維護必要的 Proxy 詳細資料。
OAuth RFC HTTP Destination not maintained in /GOOG/SERVIC_MAP
/GOOG/SERVIC_MAP
問題:您無法連線至 Google Cloud API。
原因:服務對應表 /GOOG/SERVIC_MAP
中未提供 OAuth 2.0 的 RFC 目的地。
解決方法:在服務對應表 /GOOG/SERVIC_MAP
中更新 OAuth 2.0 的 RFC 目的地。如要瞭解如何指定 RFC 目的地,請參閱「在 /GOOG/SERVIC_MAP
中指定 RFC 目的地」。
Authentication error due to root CA certificates not being valid
問題:您無法驗證 Google Cloud ,且遇到下列情況:
- 您收到錯誤訊息
/GOOG/MSG: 421 - SSL handshake with iamcredentials.googleapis.com: 443 failed: SSSLERR_PEER_CERT_UNTRUSTED
。 - 在交易
SMICM
中,您會看到錯誤訊息ERROR: The chain of certificates is incomplete or untrusted, missing certificate of CN-GTS Root R4.
原因:最新的 Google 根憑證授權單位在 STRUST
中未正確安裝。
解決方法:從 Google Trust Services 存放區下載所有最新的根 CA 憑證,然後在 STRUST
交易中上傳這些憑證。請確認您未使用現有的憑證。如需相關資訊,請參閱「設定 TLS/SSL 憑證」。
/GOOG/MSG: 503 - HTTP Communication Failure - SSL client SSL Client (Standard)
問題:對 API 方法的 HTTP 要求失敗。
原因:針對在 Google Cloud上執行的 SAP 工作負載,在 SDK 用來連線至 Google Cloud API 的 RFC 目的地 (/GOOG/SERVIC_MAP
表格中會維護相關設定) 中,Target Host 欄位值不正確。
解決方法:檢查 RFC 目的地是否已正確設定。詳情請參閱「設定 RFC 目的地」。
/GOOG/MSG: 503 - HTTP Communication Failure exception occurred during the request sending
問題:對 API 方法的 HTTP 要求失敗。
原因:這可能是連線問題所致。
解決方法:驗證連線,並確認網路已正確設定、運作正常且沒有壅塞。
如要找出網路連線問題,請使用交易 SMICM
檢查 ICM 追蹤記錄檔。詳情請參閱 2351619 - How to take SMICM trace?。
/GOOG/MSG: 503 - HTTP Communication Failure exception occurred during the response receiving
問題:對 API 方法的 HTTP 要求失敗。
導致這個問題的原因可能包括:
在 RFC 目的地中未啟用 SSL
原因:在 SDK 用來連線至 API 的 RFC 目的地中,未啟用使用 SSL 憑證的安全選項。 Google Cloud
解決方法:檢查 RFC 目的地是否已正確設定。詳情請參閱「設定 RFC 目的地」。
安全資料傳輸層 (SSL) 握手失敗
原因:當 SAP 主機和 Google Cloud API 端點之間的 SSL 握手失敗時。當 TLS 伺服器提供的憑證,對 SAP 伺服器提供的目標主機名稱無效時,就會發生這個問題,可能是因為 NetWeaver 核心未實作用戶端傳送選用 TLS 擴充功能 SNI 的功能。
解決方法:在交易 SMICM
中,找出傳回碼 SSLERR_SERVER_CERT_MISMATCH
。如果您發現傳回碼 SSLERR_SERVER_CERT_MISMATCH
,就需要啟用 TLS 擴充功能 SNI 的傳送功能。此外,請確認您的 NetWeaver 核心實作了用戶端傳送選用 TLS 擴充功能 SNI 的功能。
如要啟用 TLS 擴充功能 SNI 的傳送功能,請視 NetWeaver 核心版本而定,將設定檔參數 icm/HTTPS/client_sni_enabled
或 ssl/client_sni_enabled
設為 TRUE
。如需 SAP 提供的詳細資訊,請參閱:
- SAP 注意事項 510007 - 在應用程式伺服器 ABAP 上設定 SSL 的其他注意事項
- SAP 注意事項 2582368 - 針對 saphttp、sapkprotp 的 TLS 擴充功能 SNI 傳送的用戶端端傳送,更新 SapSSL
- SAP 注意事項 2124480 - ICM / Web 調度器:以用戶端身分使用 TLS 擴充功能伺服器名稱指示 (SNI)
The caller does not have permission
問題:即使您已成功通過驗證,仍無法存取 Google Cloud API 資源。
原因:您沒有查看 API 資源的權限。
解決方法:如要解決這個問題,請完成下列步驟:
- 請確認 API 資源已與您的 Google 帳戶憑證共用。
- 向 API 提出要求並查看回應。
Google API_NAME API has not been used in project PROJECT_ID before or it is disabled
問題:您無法使用 OAuth 2.0 用戶端憑證存取 Google Cloud API。
原因:您使用在一個 Google Cloud 專案中建立的用戶端 ID 來呼叫在另一個 Google Cloud 專案中啟用的 API。
一個 Google Cloud 專案的用戶端 ID 無法用於呼叫其他專案的 API,即使兩者皆屬於同一機構也一樣。
解決方法:在已啟用 API 的 Google Cloud 專案中建立用戶端 ID。詳情請參閱「建立 OAuth 2.0 用戶端 ID 憑證」。
/GOOG/MSG : 461 - OAuth 2.0 Client Profile CLIENT_PROFILE_NAME is assigned to multiple OAuth 2.0 clients
問題:您無法使用 OAuth 2.0 用戶端憑證存取 Google Cloud API。
原因:您使用已指派給多個 OAuth 2.0 用戶端的 OAuth 2.0 設定檔,呼叫 Google Cloud API。不過,OAuth 2.0 用戶端設定名稱並未在用戶端金鑰表 /GOOG/CLIENT_KEY
的 Authorization Parameter 2
欄位中指定。
解決方法:如要將 OAuth 2.0 設定檔指派給多個 OAuth 2.0 用戶端,您必須為每個 OAuth 2.0 用戶端定義專屬的設定名稱,並在用戶端金鑰表 /GOOG/CLIENT_KEY
的 Authorization Parameter 2
欄位中指定設定名稱。詳情請參閱「多個 Google Cloud 專案情境」。
/GOOG/MSG : 461 - No refresh token available for current user
問題:您無法使用 OAuth 2.0 用戶端憑證存取 Google Cloud API。
原因:您使用 OAuth 2.0 用戶端憑證呼叫 Google Cloud API,但未為用戶端 ID 授予 OAuth 2.0 重新整理權杖。
解決方法:使用 Google 帳戶憑證,為用戶端 ID 要求 OAuth 2.0 權杖。詳情請參閱「要求 OAuth 2.0 存取權杖」。
Access blocked: This app's request is invalid (Error 400: redirect_uri_mismatch)
問題:當您要求 OAuth 2.0 存取權杖時,系統會顯示「使用 Google 帳戶登入」畫面,並顯示錯誤訊息 Access blocked: This app's request is invalid (Error 400: redirect_uri_mismatch)
。
原因:OAuth 2.0 用戶端 ID 憑證中的已授權重新導向 URI 有誤或未維護。
解決方法:如要解決這個問題,請完成下列步驟:
- 在 SAP 系統中輸入交易代碼
OA2C_CONFIG
。系統會在預設瀏覽器中開啟 SAP 登入頁面。 - 使用 SAP 憑證登入。
- 選取必要的用戶端 ID。
- 在「Redirection URI」欄位中,記下 SAP 重新導向 URI。
在 Google Cloud 控制台中,依序點選「選單」圖示 >「API 和服務」 >「憑證」。
選取網頁應用程式的用戶端 ID。
在「Authorized redirect URIs」(已授權的重新導向 URI) 欄位中輸入 SAP 重新導向 URI。
儲存變更。
/GOOG/MSG : 406 - IcmIConnCheckClientEnabled: Connect for protocol HTTP denied by configuration HTTP Response
問題:您無法存取 Google Cloud API。
原因:SAP 系統中缺少 HTTP 通訊埠設定。
解決方法:您必須在 SAP 系統中建立並啟用 HTTP 和 HTTPS 通訊埠。
VM 中繼資料會儲存在中繼資料伺服器上,且只能透過 HTTP 通訊埠存取。因此,如要存取 VM 中繼資料,您必須確保 HTTP 連接埠處於活動狀態。您也必須確保 HTTPS 通訊埠可供後續 API 呼叫使用。
如要解決這個問題,請完成下列步驟:
在 SAP GUI 中輸入交易代碼
SMICM
。在選單列中,依序點選「前往」>「服務」。
確認已建立並啟用 HTTP 和 HTTPS 通訊埠。如果「Actv」欄顯示綠色勾號,表示 HTTP 和 HTTPS 通訊埠處於啟用狀態。
如要進一步瞭解如何設定 HTTP 和 HTTPS 通訊埠,請參閱「ICM 中的 HTTP(S) 設定」。
/GOOG/MSG: 403 - Request had insufficient authentication scopes
問題:API 呼叫失敗,並顯示錯誤訊息 /GOOG/MSG: 403 - Request
had insufficient authentication scopes
。
原因:對於在 Google Cloud上執行的 SAP 工作負載,在 /GOOG/CLIENT_KEY
表格中,指定的服務帳戶沒有存取 Google Cloud API 所需的範圍。
解決方法:如要解決這個問題,請完成下列步驟:
在 Google Cloud 控制台中,前往 Compute Engine 的「VM instances」(VM 執行個體) 頁面。
按一下 SAP 工作負載執行所在的 VM 執行個體。
按一下「停止」,然後按照說明操作,停止 VM 執行個體。
按一下 [編輯]。
針對相關聯的服務帳戶,編輯「存取權範圍」,允許所有 Cloud API 的完整存取權。
按一下 [儲存]。
按一下「Start / Resume」,重新啟動 VM 執行個體。
Error in HTTP Request: Invalid version (44)
問題:您無法使用 /GOOG/CL_STORAGE_V1
類別的 DELETE_OBJECTS
方法,從 Cloud Storage 值區刪除物件。您的要求失敗,錯誤訊息為 Error in HTTP Request: Invalid version (44)
。
原因:您要刪除的物件名稱含有空格。
解決方法:在呼叫 /GOOG/CL_STORAGE_V1
類別的 DELETE_OBJECTS
方法之前,請確認物件名稱不含任何空格。
如要解決這個問題,請按照下列步驟操作:
呼叫
cl_http_utility=>escape_url( OBJECT_NAME )
方法。將
OBJECT_NAME
替換為您要刪除的物件名稱。這個方法會先將名稱中的空格替換為
%20
,然後傳回物件名稱,以便安全地用於網址。使用上一個步驟傳回的物件名稱,呼叫
/GOOG/CL_STORAGE_V1
類別的DELETE_OBJECTS
方法。
/GOOG/MSG: 405 - Error in HTTP Request: Invalid request line(9):
問題:使用 /GOOG/CL_PUBSUB_V1
類別的 CREATE_TOPICS
方法建立新的 Pub/Sub 主題時,要求失敗,並顯示錯誤訊息 /GOOG/MSG: 405 - Error in HTTP Request: Invalid request line(9):
。
原因:您建立的 Pub/Sub 主題名稱含有空格。
解決方法:請務必從 Pub/Sub 主題名稱中移除所有空格。
請確認 Pub/Sub 主題名稱符合下列規則:
- 以英文字母開頭
- 開頭不是
GOOG
- 不包含任何空格
- 由 3 到 255 個字元組成
- 只能包含下列字元:英文字母
[A-Za-z]
、數字[0-9]
、連字號(-)
、半形句號.
、底線_
、波浪號~
、百分比符號%
和加號+
如要進一步瞭解 Pub/Sub 主題命名規範,請參閱「命名主題、訂閱、結構定義或快照的規範」。
Google Cloud API 傳回的錯誤訊息
每個 API 用戶端 Stub 都有匯出參數,可提供 API 傳回代碼和錯誤訊息。
ev_ret_code
包含 HTTP 狀態碼。如果 API 傳回錯誤,這個參數會包含4XX
值。ev_err_resp
包含 API 傳回的錯誤類別和錯誤訊息。
以下範例顯示,當您使用已存在的主題名稱建立新的 Pub/Sub 主題時,API 傳回的錯誤。
ERROR_TEXT
:衝突ERROR_DESCRIPTION
:專案中已存在資源 (resource=SAMPLE_TOPIC_01
)
向社群尋求支援
在 Cloud 論壇上向社群提問,並討論 ABAP 適用的 Google Cloud SDK。
取得支援
如果您需要協助解決 Google Cloud 適用的 ABAP SDK 問題,請收集所有可用的診斷資訊,然後與 Cloud Customer Care 團隊聯絡。
如要進一步瞭解如何與 Cloud Customer Care 聯絡,請參閱「取得 SAP 支援 Google Cloud」一文。