如需排查本地版本或任何云版本的 ABAP SDK for Google Cloud 的问题,您可以使用 SAP 应用日志查看错误和日志消息。
检查软件要求和前提条件
确保所有系统软件都在所需的最低版本上运行,并且满足 ABAP SDK for Google Cloud 的所有前提条件。
如需了解 SDK 安装前提条件,请参阅准备工作。
阅读 SAP 支持文档
如果您拥有 SAP 用户账号,则可以通过阅读 SAP ONE Support Launchpad 中提供的 SAP 说明和 SAP 知识库文章,找到许多 SAP 软件问题的解决方法。
日志记录
配置日志记录后,ABAP SDK for Google Cloud 会将错误消息记录到 SAP 应用日志。如需详细了解日志记录,请参阅应用日志记录。
如需查看日志消息,请按以下步骤操作:
- 在 SAP GUI 中,输入事务代码
SLG1
。 - 输入日志对象名称和子对象名称。
- 请选择有效的日期和时间范围。
- 运行事务。系统会显示 SDK 生成的所有日志消息。
日志消息通常由以下两个条目组成:
- Entering:提供有关发生了错误的代码位置的信息。进行问题排查时,您可以在调试时使用此代码位置作为断点。
- 错误消息:提供有关执行操作期间发生的错误的信息。
调试
如果您拥有所需的授权,则可以调试 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 虚拟机上的 SAP 系统,当您使用基于令牌的身份验证方法时,无法访问 Google Cloud API。
原因:对于托管在 Compute Engine 虚拟机上的 SAP 系统,在客户端密钥配置中,创建指定服务账号的项目不同于包含 SAP 主机虚拟机的 Google Cloud 项目。
解决方法:要解决此问题,请执行以下步骤:
- 在包含 SAP 主机虚拟机的 Google Cloud 项目中,向主机虚拟机的服务账号授予
Service Account Token Creator
角色。如需详细了解这些步骤,请参阅授予单个角色。 - 在包含 SAP 主机虚拟机的 Google Cloud 项目中:
- 创建一个服务账号。记下服务账号的名称。您需要在将服务账号作为主账号添加到包含 Google Cloud API 的另一个项目时指定此名称。如需了解如何创建服务账号,请参阅创建服务账号。
- 在 SDK 的客户端密钥配置中,指定此服务账号。
- 在包含 Google Cloud API 的另一个项目中:
- 将服务账号添加为主账号。
- 授予适当的角色以连接到 Google Cloud API。如需详细了解 API 特定预定义角色,请参阅 IAM 基本角色和预定义角色参考文档。
如需了解详情,请参阅在 Compute Engine 虚拟机上使用 SAP 令牌进行身份验证。
常见的操作问题
通过客户端存根公共方法使用 Google Cloud APIs 时,开发者可能会遇到错误和异常。这些错误和异常分为两类:
- ABAP SDK for Google Cloud 触发的错误和异常
- Google Cloud APIs 返回的错误
本部分介绍了 SDK 触发的错误和异常。对于 API 返回的错误,我们建议您查看相应 API 的公共文档。
/GOOG/MSG : 461 - Bad Request: Client key is not found in /GOOG/CLIENT_KEY table
问题:您无法实例化 API 客户端存根对象。
原因:客户端密钥表 /GOOG/CLIENT_KEY
未包含有效的客户端密钥。
解决方法:在客户端密钥表 /GOOG/CLIENT_KEY
中,维护有效的客户端密钥。实例化 API 客户端桩时,请使用导入参数 iv_key_name
传递有效的客户端密钥。
您可以使用身份验证方法专用的详细信息来配置客户端密钥。如需了解身份验证方法和相关客户端密钥配置,请参阅身份验证。
如需了解如何使用导入参数 iv_key_name
传递客户端密钥,请参阅构造函数。
/GOOG/MSG : 461 - Log Object not maintained in TCode SLG0
问题:您无法实例化 API 客户端存根对象。
原因:表 /GOOG/LOG_CONFIG
中保留了无效的默认日志对象,或者将无效日志对象传递给了导入参数 iv_log_object
。
解决方法:确保 SAP 系统中存在有效的日志对象。
如需了解日志记录,请参阅应用日志记录。
如需了解如何传递日志对象,请参阅构造函数。
/GOOG/MSG : 461 - Log SubObject not maintained in TCode SLG0
问题:您无法实例化 API 客户端存根对象。
原因:表 /GOOG/LOG_CONFIG
中保留了无效的默认日志子对象,或者将无效的日志子对象传递给了导入参数 iv_log_subobject
。
解决方法:确保 SAP 系统中存在有效的日志子对象。
如需了解日志记录,请参阅应用日志记录。
如需了解如何传递日志子对象,请参阅构造函数。
/GOOG/MSG : 461 - Destination does not exist exception occurred in reading RFC destination
问题:您无法实例化 API 客户端存根对象。
原因:在 /GOOG/SERVIC_MAP
表中,对于指定的客户端密钥,SAP 系统中不存在 RFC 目标。
解决方法:创建所需的 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 Certificate(SSL 证书)字段,请确保已选中 DFAULT SSL Client (Standard)(默认 SSL 客户端 [标准])选项。
- 对于 SAP on Google Cloud 环境,如果您已为元数据服务器创建 RFC 目标,请确保该服务编号为
80
。
如需了解如何创建 RFC 目标,请参阅:
/GOOG/MSG : 461 - ERROR_MESSAGE exception occurred during the request creation
问题:您无法连接到 Google Cloud APIs。
原因:SAP 系统无法创建 HTTP 客户端对象。
解决方法:确保您的 ICM 已配置为通过 HTTP 与外部服务器通信。有关详情,请参阅验证 Internet Communications 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 APIs。
原因:在客户端密钥配置中,缺少 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 APIs。
原因:在客户端密钥配置中,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 APIs。
原因:在客户端密钥表中,Authorization Class
不正确。
解决方法:维护正确的 Authorization Class
。
如需了解详情,请参阅使用令牌进行身份验证。
/GOOG/MSG: 404 - Not Found
问题:您无法连接到 Google Cloud APIs。API 端点无法访问。
原因:SDK 用于连接到 Google Cloud APIs 的 RFC 目标未正确配置。例如,在 RFC 目标中配置了无效端点。
解决方法:检查 RFC 目标是否已正确配置。如需了解详情,请参阅配置 RFC 目标。
DESCRIPTION_OF_ISSUE while signing JWT using profile KEY_FILE_NAME.pse. Check JWT config in STRUST
STRUST
问题:您无法连接到 Google Cloud APIs。
原因:STRUST
中的 JWT 配置和服务账号密钥设置未正确配置。
解决方法:确认 JWT 配置和服务账号密钥已按照身份验证中的说明进行配置。
Bad Request invalid_grant. Invalid JWT Signature
问题:您无法连接到 Google Cloud APIs。
原因:导入 STRUST
的 PSE 或 P12 密钥文件不属于用于对 JWT 签名的服务账号。
解决方法:请务必将正确的服务账号密钥文件导入 STRUST
。如需了解如何将服务账号密钥导入到 STRUST
中,请参阅将服务账号密钥导入 STRUST。
/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 系统使用代理连接到互联网,请在 RFC 目标中保留所需的代理详细信息。
OAuth RFC HTTP Destination not maintained in /GOOG/SERVIC_MAP
/GOOG/SERVIC_MAP
问题:您无法连接到 Google Cloud APIs。
原因:服务映射表 /GOOG/SERVIC_MAP
中未提供 OAuth 2.0 的 RFC 目标。
解决方法:在服务映射表 /GOOG/SERVIC_MAP
中更新 OAuth 2.0 的 RFC 目标。如需了解如何指定 RFC 目标,请参阅在 /GOOG/SERVIC_MAP
中指定 RFC 目标。
/GOOG/MSG: 503 - HTTP Communication Failure - SSL client SSL Client (Standard)
问题:对 API 方法的 HTTP 请求失败。
原因:对于在 Google Cloud 上运行的 SAP 工作负载,在 SDK 用于连接到配置在 /GOOG/SERVIC_MAP
表中维护的 Google Cloud APIs 的 RFC 目标中,目标主机字段的值不正确。
解决方法:检查 RFC 目标是否已正确配置。如需了解详情,请参阅配置 RFC 目标。
/GOOG/MSG: 503 - HTTP Communication Failure exception occurred during the request sending
问题:对 API 方法的 HTTP 请求失败。
原因:此问题可能是由连接问题引起的。
解决方法:验证您的连接,并确保网络设置正确、没有运行错误并且没有拥塞。
如需识别网络连接问题,请使用事务 SMICM
检查 ICM 跟踪记录文件。如需了解详情,请参阅 2351619 - 如何进行 SMICM 跟踪记录?。
/GOOG/MSG: 503 - HTTP Communication Failure exception occurred during the response receiving
问题:对 API 方法的 HTTP 请求失败。
此问题可能由以下情况引起:
您的 RFC 目标中未激活 SSL
原因:在 SDK 用于连接到 Google Cloud APIs 的 RFC 目标中,使用 SSL 证书的安全选项未激活。
解决方法:检查 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,请将配置文件参数 icm/HTTPS/client_sni_enabled
或 ssl/client_sni_enabled
设置为 TRUE
,具体取决于您的 NetWeaver 内核版本。如需查看更多由 SAP 提供的信息,请参阅:
- SAP 说明 510007 - 在应用服务器 ABAP 上设置 SSL 的其他注意事项
- SAP 说明 2582368 - 通过 saphttp、sandroidprotp 对客户端发送 TLS 扩展 SNI 进行 SAPpSSL 更新
- SAP 说明 2124480 - ICM/Web Dispatcher: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。但是,没有在客户端密钥表 /GOOG/CLIENT_KEY
的 Authorization Parameter 2
字段中指定 OAuth 2.0 客户端配置名称。
解决方案:要将 OAuth 2.0 配置文件分配给多个 OAuth 2.0 客户端,您必须为每个 OAuth 2.0 客户端定义唯一的配置名称,并在 Authorization Parameter 2
客户端密钥表的字段 /GOOG/CLIENT_KEY
中指定配置名称。如需了解详情,请参阅多个 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。
- 在重定向 URI 字段中,记下您的 SAP 重定向 URI。
在 Google Cloud 控制台中,转到菜单 > API 和服务 > 凭据。
选择 Web 应用的客户端 ID。
在已获授权的重定向 URI 字段中,输入 SAP 重定向 URI。
保存更改。
/GOOG/MSG : 406 - IcmIConnCheckClientEnabled: Connect for protocol HTTP denied by configuration HTTP Response
问题:您无法访问 Google Cloud API。
原因:SAP 系统中缺少 HTTP 端口配置。
解决方法:您必须在 SAP 系统中创建并激活 HTTP 和 HTTPS 端口。
虚拟机元数据存储在元数据服务器上,该元数据服务器只能通过 HTTP 端口访问。因此,要访问虚拟机元数据,您必须确保 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 虚拟机实例页面。
点击运行 SAP 工作负载的虚拟机实例。
点击停止,然后按照说明停止虚拟机实例。
点击修改。
对于关联的服务账号,请修改访问权限范围,以授予对所有 Cloud API 的完整访问权限。
点击保存。
点击启动/恢复以重启虚拟机实例。
Google Cloud APIs 返回的错误消息
每个 API 客户端存根都具有导出参数,用于提供 API 返回代码和错误消息。
ev_ret_code
包含 HTTP 状态代码。如果 API 返回错误,此参数包含一个值4XX
。ev_err_resp
包含 API 返回的错误类别和错误消息。
以下示例在创建新主题名称已存在的 Pub/Sub 主题时显示了 API 返回的错误。
ERROR_TEXT
:ConflictERROR_DESCRIPTION
:项目中已存在该资源 (resource=SAMPLE_TOPIC_01
)
通过社区获取支持
在 Cloud 论坛上提出问题并与社区讨论 ABAP SDK for Google Cloud。
获取支持
如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请收集所有可用的诊断信息,并与 Cloud Customer Care 联系。
如需详细了解如何与 Cloud Customer Care 联系,请参阅获取 SAP on Google Cloud 支持。