我已经在 java 中构建了不同的 SOAP Web 服务(几年前......),并使用 abap 中的 SAP Gateway 构建了不同的 OData 服务。主要区别(编程语言除外)是我通过 SOAP-webservice 收到 WSDL(可能是 XML),通过 OData,我可以在 xml 或 json 输出之间进行选择。
两者都实现/实现了 REST 范式,但最常见的是实现 OData 服务。我知道任何不同的软件都可以轻松使用 OData,但这两种服务之间的优缺点在哪里?我实在不明白。
我看过两篇关于 URL 约定的帖子,但我的问题是针对 OData Web 服务假设的 SAP 网关实现的。尝试$filter与 with 结合使用时,$expand我们收到错误消息:
Left hand expression of memberaccess operation has wrong cardinality
Run Code Online (Sandbox Code Playgroud)
假设我有两个简单的实体:
Foo
* Key
- Value
Bar
* Key
* Id
- Value
Run Code Online (Sandbox Code Playgroud)
Foo 与 1:n 关联Bar。以下 URL 按预期工作。
/sap/opu/odata/sap/ZTEST_SRV/Foo?$expand=Bar
Run Code Online (Sandbox Code Playgroud)
就像
/sap/opu/odata/sap/ZTEST_SRV/Foo?$filter=Key gt 10&$expand=Bar
Run Code Online (Sandbox Code Playgroud)
尝试$filter在实体Bar属性上使用时,Id我们收到错误消息。
/sap/opu/odata/sap/ZTEST_SRV/Foo?$filter=Key gt 10 and Bar/Id gt 2&$expand=Bar
Run Code Online (Sandbox Code Playgroud)
是否可以$filter在 SAP 中以这种方式使用 a ?相关文章如下。
我创建了一个 Web 服务并尝试使用 SAPUI5 中的 oData 协议绑定数据。
我创建了一个表:
createContent : function(oController) {
jQuery.sap.require("sap.ui.table.Table");
//Create table control with properties
var oTable = new sap.ui.table.Table({
width : "100%",
rowHeight : 50,
title : "Lst of Items",
selectionMode : sap.ui.table.SelectionMode.None
});
oTable.addColumn(new sap.ui.table.Column({
label : new sap.ui.commons.Label({
text : "PO Number"
}),
template : new sap.ui.commons.TextView({
text : "{PoNumber}"
}),
}
));
oTable.addColumn(new sap.ui.table.Column({
label : new sap.ui.commons.Label({
text : "Item"
}),
template : new sap.ui.commons.TextView({
text : "{PoItem}"
}),
}
));
//Filter …Run Code Online (Sandbox Code Playgroud) 我有一个变量类型time但有时这个变量没有任何内容。
当它是初始的时,它不应该是"000000",我想要一个没有任何内容的空值(没有零)。让我用代码解释一下我的问题:
IF lwa_hora IS INITIAL.
CLEAR lwa_hora.
ls_entity-hora = lwa_hora. " Result: 000000 but I don't want any zero
ELSE.
ls_entity-hora = lwa_hora. " Result: 000000
ENDIF.
Run Code Online (Sandbox Code Playgroud)
我尝试过CLEAR但没有任何反应。
我需要这个是因为在 JavaScript 前端客户端逻辑中,我需要 OData 属性包含一个假值(例如null或一个空字符串"")。
"000000"但它始终具有不是空字符串的值。是否可以在后端做一些事情来“清除”变量?
调用时,我的MPC提供商未完全向浏览器提供元数据。
我正在按以下方式致电服务:
http://SERVER/sap/opu/odata/sap/SERVICE/?$metadata
Run Code Online (Sandbox Code Playgroud)
返回:
<app:service xmlns:app="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:sap="http://www.sap.com/Protocols/SAPData" xml:lang="en" xml:base="http://SERVER:8000/sap/opu/odata/sap/SERVICE/">
<app:workspace>
<atom:title type="text">Data</atom:title>
<app:collection sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1" href="hu_headerSet">
<atom:title type="text">hu_headerSet</atom:title>
<sap:member-title>hu_header</sap:member-title>
</app:collection>
<app:collection sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1" href="hu_itemSet">
<atom:title type="text">hu_itemSet</atom:title>
<sap:member-title>hu_item</sap:member-title>
</app:collection>
</app:workspace>
<atom:link rel="self" href="http://SERVER:8000/sap/opu/odata/sap/SERVICE/"/>
<atom:link rel="latest-version" href="http://SERVER:8000/sap/opu/odata/sap/SERVICE/"/>
</app:service>
Run Code Online (Sandbox Code Playgroud)
我期望它返回两个实体集的详细信息,包括实体和关联的属性,这是它应该做的。
我已经调试了MPC,它获取了所有属性,关联和实体,但是在调用它们时不会输出这些属性。我正在尝试生成EDMX来创建新的应用程序,之前已经手动完成过此操作,但是这两个实体集都有40/50字段。
我检查了SU53,并且没有失败的Authorzations,每次调试时都清除了缓存,以确保不是这样,并且已将MPC中的get_entity调用设置为受保护作为测试。
有人有什么想法吗?对于那些更成功的人,这里有一些我已经尝试过的建议的资源:https : //blogs.sap.com/2016/06/15/entityset-of-an-odata-not-appearing-in -元数据/
无论我们用OData做什么,我们都可以使用BAPI吗?
那么,与BAPI相比,OData的主要内容是什么?
请让我知道你的看法
odata ×6
sap-gateway ×6
abap ×2
sap ×2
bapi ×1
metadata ×1
rest ×1
sapui5 ×1
soap ×1
web-services ×1