odata - 在 CDS 中创建 2 个传输请求后出现“重复资源”错误
问题描述
我为同一个项目创建了两个传输请求 (TR),同时在 CDS 视图中进行了更改,之后显示错误代码为 400 的重复资源错误并且我无法在我的 UI5 表中获取任何数据。
我将锁定在新 TR 中的更改转移到旧 TR 但它仍然给出相同的错误。
HTTP 请求失败400,Bad Request,{"error":{"code":"/IWBEP/CM_MGW_RT/030","message":{"lang":"en","value":"Duplicate resource"},"内部错误“:{“应用程序”:...
解决方案
首先:通过使用事务(n/h)读取底层 SQL 视图(在 CDS 定义中注释)来仔细检查是否实际上没有重复键。@AbapCatalog.sqlViewName
se16
如果 SQL 视图中确实没有重复,则该错误可能是由 ABAP CDS 框架中的各种错误引起的。这些错误大多发生在您更改 CDS 源/定义之后。这里有几个:
打开事务
segw
并通过右键单击“全部刷新”刷新实体结构。然后单击红色白色沙滩球以重新生成 MPC/DPC 类。
红白色沙滩球实际上所做的是将更改后的结构与现有类合并。右键单击项目并选择“生成运行时”以真正重新生成所有运行时对象。
有时实体概览中有一个清理按钮。点击它。
在事务中
/iwfnd/gw_client
选择元数据→<strong>清理缓存→在两个系统上对于从 ABAP 类型手动创建的 OData 视图,清理缓存非常有效,
segw
但核心数据服务可能仍会被缓存。如果以上都没有帮助:- 注销并再次登录
- 重新开始交易
- 等一两个小时
尝试直接在
/iwfnd/gw_client
. 您可以激活登录/iwfnd/traces
以仔细检查来自客户的请求的实际外观。检查您的 OData 客户端。它是否可能在内部缓存
$metadata
?检查传输请求是否已成功处理,例如使用事务
se10
。长时间运行的 SADL 查询可能会阻止传输/导入到另一个系统。sm50
必要时使用杀死它们。
推荐阅读
- c# - 使用 TraceSource 跟踪和记录到文件
- r - 使用 R 分析的 Django Web 应用程序
- ruby - Rubocop atom linter 不起作用
- java - 程序在数组中找到最不常见的条目
- python - 使用“def”API 时的 Python - 不返回任何内容(或错误)
- docker - 是否可以在可能受到物理危害的主机上运行 Kubernetes 节点?
- reactjs - 不使用 Webpack 和 Babel 构建的 React 类属性
- c# - 从 C# (Visual Studio) 中的非 Web 项目中读取 xml 文件
- c# - 仅在国际支持下的 C# RegEx 字母
- class - 在 Java 中加载 .properties 文件的顺序