对本地版本或任何云版本的 ABAP SDK for Google Cloud 进行问题排查

如需排查本地版本或任何云版本的 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 应用日志。如需详细了解日志记录,请参阅应用日志记录

如需查看日志消息,请按以下步骤操作:

  1. 在 SAP GUI 中,输入事务代码 SLG1
  2. 输入日志对象名称和子对象名称。
  3. 请选择有效的日期和时间范围。
  4. 运行事务。系统会显示 SDK 生成的所有日志消息。

日志消息通常由以下两个条目组成:

  • Entering:提供有关发生了错误的代码位置的信息。进行问题排查时,您可以在调试时使用此代码位置作为断点。
  • 错误消息:提供有关执行操作期间发生的错误的信息。

调试

如果您拥有所需的授权,则可以调试 API 客户端类。

如需调试 API 客户端类,请使用以下选项之一:

  • 将断点添加到 /GOOG/CL_HTTP_CLIENT 类的构造函数,然后运行程序。

  • 或者,向您使用的方法添加断点,然后运行程序。

HTTP 跟踪记录

排查错误时,您可以在事务 SMICMST05 中启用 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)

问题:对于托管在 Compute Engine 虚拟机上的 SAP 系统,当您使用基于令牌的身份验证方法时,无法访问 Google Cloud API。

原因:对于托管在 Compute Engine 虚拟机上的 SAP 系统,在客户端密钥配置中,创建指定服务账号的项目不同于包含 SAP 主机虚拟机的 Google Cloud 项目。

解决方法:要解决此问题,请执行以下步骤:

  1. 在包含 SAP 主机虚拟机的 Google Cloud 项目中,向主机虚拟机的服务账号授予 Service Account Token Creator 角色。如需详细了解这些步骤,请参阅授予单个角色
  2. 在包含 SAP 主机虚拟机的 Google Cloud 项目中:
    1. 创建一个服务账号。记下服务账号的名称。您需要在将服务账号作为主账号添加到包含 Google Cloud API 的另一个项目时指定此名称。如需了解如何创建服务账号,请参阅创建服务账号
    2. 在 SDK 的客户端密钥配置中,指定此服务账号。
  3. 在包含 Google Cloud API 的另一个项目中:
    1. 将服务账号添加为主账号。
    2. 授予适当的角色以连接到 Google Cloud API。如需详细了解 API 特定预定义角色,请参阅 IAM 基本角色和预定义角色参考文档

如需了解详情,请参阅使用访问令牌进行身份验证

常见的操作问题

通过客户端存根公共方法使用 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 1Authorization Parameter 2

解决方法:在客户端密钥表中,更新所需的 Authorization Parameter 1Authorization 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

问题:您无法连接到 Google Cloud APIs。

原因STRUST 中的 JWT 配置和服务账号密钥设置未正确配置。

解决方法:确认已按照使用 JSON Web 令牌进行身份验证部分所述配置 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 目标中,目标主机无效。

解决方法:要解决此问题,请按以下步骤操作:

  1. 使用示例 RFC 目标 GOOG_OAUTH2_TOKEN 创建 RFC 目标。如需了解如何创建 RFC 目标,请参阅 RFC 目标

  2. 确保您的 RFC 目标使用以下值:

    • 主机oauth2.googleapis.com
    • 路径前缀/token.
  3. 如果您的 SAP 系统使用代理连接到互联网,请在 RFC 目标中保留所需的代理详细信息。

OAuth RFC HTTP Destination not maintained in /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: 421 - SSL handshake with iamcredentials.googleapis.com: 443 failed: SSSLERR_PEER_CERT_UNTRUSTED

问题:向 Google Cloud 进行的身份验证失败,并显示错误消息 /GOOG/MSG: 421 - SSL handshake with iamcredentials.googleapis.com: 443 failed: SSSLERR_PEER_CERT_UNTRUSTED

原因:Google 证书未正确安装在 STRUST 中。

解决方法:从 Google Trust Services 代码库下载新的证书,并在 STRUST 交易中上传这些证书。确保您未使用现有证书。如需了解如何执行此操作,请参阅设置 SSL 证书

/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_enabledssl/client_sni_enabled 设置为 TRUE,具体取决于您的 NetWeaver 内核版本。如需查看更多由 SAP 提供的信息,请参阅:

The caller does not have permission

问题:即使您已成功通过身份验证,也无法访问 Google Cloud API 资源。

原因:您无权查看 API 资源。

解决方法:要解决此问题,请按以下步骤操作:

  1. 确保 API 资源与您的 Google 账号凭据共享。
  2. 向 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_KEYAuthorization 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 不正确或未维护。

解决方法:要解决此问题,请按以下步骤操作:

  1. 在您的 SAP 系统中,输入事务代码 OA2C_CONFIG。SAP 登录页面会在默认浏览器中打开。
  2. 使用您的 SAP 凭据登录。
  3. 选择所需的客户端 ID。
  4. 重定向 URI 字段中,记下您的 SAP 重定向 URI。
  5. 在 Google Cloud 控制台中,转到菜单 > API 和服务 > 凭据

    进入“凭据”页面

  6. 选择 Web 应用的客户端 ID。

  7. 已获授权的重定向 URI 字段中,输入 SAP 重定向 URI。

  8. 保存更改。

/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 调用中处于活跃状态。

如需解决此问题,请完成以下步骤:

  1. 在 SAP GUI 中,输入事务代码 SMICM

  2. 在菜单栏上,点击转到 > 服务

  3. 确保 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 所需的范围。

解决方法:要解决此问题,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Compute Engine 虚拟机实例页面。

    转到虚拟机实例

  2. 点击运行 SAP 工作负载的虚拟机实例。

  3. 点击停止,然后按照说明停止虚拟机实例。

  4. 点击修改

  5. 对于关联的服务账号,请修改访问权限范围,以授予对所有 Cloud API 的完整访问权限。

  6. 点击保存

  7. 点击启动/恢复以重启虚拟机实例。

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 方法之前,您需要确保对象名称不包含任何空格。

如需解决此问题,请执行以下步骤:

  1. 调用 cl_http_utility=>escape_url( OBJECT_NAME ) 方法。

    OBJECT_NAME 替换为您需要删除的对象名称。

    该方法会在将名称中的所有空格替换为 %20 后返回对象名称,从而使其成为网址安全名称。

  2. 使用上一步返回的对象名称调用 /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 APIs 返回的错误消息

每个 API 客户端存根都具有导出参数,用于提供 API 返回代码和错误消息。

  • ev_ret_code 包含 HTTP 状态代码。如果 API 返回错误,此参数包含一个值 4XX

  • ev_err_resp 包含 API 返回的错误类别和错误消息。

以下示例在创建新主题名称已存在的 Pub/Sub 主题时显示了 API 返回的错误。

  • ERROR_TEXT:Conflict
  • ERROR_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 支持