Sapui5 传递Odata对象以创建实体集
我试图调用Odata服务crequestSet,它将在MDG系统中创建一篇文章 我需要从ui5输入字段传递一些参数,其中一些应该是硬编码的值 我在models文件夹下创建了一个request.json文件: { } 现在,我尝试使用该模型调用service/createrequest。 在sapui5中创建oData模型的'eniTitySet',oData{Success:,Failure:} 对于简单的JSON模型,如:Sapui5 传递Odata对象以创建实体集,sapui5,Sapui5,我试图调用Odata服务crequestSet,它将在MDG系统中创建一篇文章 我需要从ui5输入字段传递一些参数,其中一些应该是硬编码的值 我在models文件夹下创建了一个request.json文件: { } 现在,我尝试使用该模型调用service/createrequest。 在sapui5中创建oData模型的'eniTitySet',oData{Success:,Failure:} 对于简单的JSON模型,如: { "store": "", "merchCat":
{
"store": "",
"merchCat": "",
}
我可以做:
var oData = {
Store: oLocal.getProperty("/store"),
MerchCat: oLocal.getProperty("/merchCat")
}
然后调用create方法:
oModel.create("/crequestSet", oData, {
success: this._fnSuccess.bind(this),
error: this._fnFailed.bind(this)
})
但是如何传递复杂的json对象:
{
"CR_MARA": {
"Matk": "",
"Mtart": "HAWA",
"Attyp": "01",
"Meins": "EA"
},
"CR_MAW1": {
"Wladg": "0001",
"Wbkla": "3100"
},}
到oModel。创建
我尝试将var-oData=JSONModel.Stringyfy转换为字符串,但它不起作用,并且在服务调用时出错
crequest服务的元数据结构:
-<EntityType sap:content-version="1" Name="crequest">
-<Key>
<PropertyRef Name="Matnr"/>
</Key>
<Property Name="ReasonForRequest" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="60" Nullable="false" Type="Edm.String"/>
<Property Name="Matnr" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="40" Nullable="false" Type="Edm.String" sap:label="Material"/>
<Property Name="CrDescription" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="60" Nullable="false" Type="Edm.String"/>
<Property Name="CrequestType" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="8" Nullable="false" Type="Edm.String"/>
<Property Name="CrequestId" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="12" Nullable="false" Type="Edm.String"/>
<Property Name="Matkl" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="9" Nullable="false" Type="Edm.String"/>
<Property Name="RefMatnr" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="40" Nullable="false" Type="Edm.String" sap:label="Material"/>
<Property Name="Reason" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="2" Nullable="false" Type="Edm.String"/>
<Property Name="Message" sap:filterable="false" sap:sortable="false" sap:updatable="false" sap:creatable="false" sap:unicode="false" MaxLength="220" Nullable="false" Type="Edm.String" sap:label="Message Text"/>
<NavigationProperty Name="CR_ATTACHMASTER" ToRole="ToRole_CR_ATTACHMASTER" FromRole="FromRole_CR_ATTACHMASTER" Relationship="UGIOD02_RFM_SRV.CR_ATTACHMASTER"/>
<NavigationProperty Name="CR_UOM" ToRole="ToRole_CR_UOM" FromRole="FromRole_CR_UOM" Relationship="UGIOD02_RFM_SRV.CR_UOM"/>
<NavigationProperty Name="CR_MARA" ToRole="ToRole_CR_MARA" FromRole="FromRole_CR_MARA" Relationship="UGIOD02_RFM_SRV.CR_MARA"/>
<NavigationProperty Name="CR_MARC" ToRole="ToRole_CR_MARC" FromRole="FromRole_CR_MARC" Relationship="UGIOD02_RFM_SRV.CR_MARC"/>
<NavigationProperty Name="CR_MAKT" ToRole="ToRole_CR_MAKT" FromRole="FromRole_CR_MAKT" Relationship="UGIOD02_RFM_SRV.CR_MAKT"/>
<NavigationProperty Name="CR_MARD" ToRole="ToRole_CR_MARD" FromRole="FromRole_CR_MARD" Relationship="UGIOD02_RFM_SRV.CR_MARD"/>
<NavigationProperty Name="CR_MARM" ToRole="ToRole_CR_MARM" FromRole="FromRole_CR_MARM" Relationship="UGIOD02_RFM_SRV.CR_MARM"/>
<NavigationProperty Name="CR_MVKE" ToRole="ToRole_CR_MVKE" FromRole="FromRole_CR_MVKE" Relationship="UGIOD02_RFM_SRV.CR_MVKE"/>
<NavigationProperty Name="CR_MAW1" ToRole="ToRole_CR_MAW1" FromRole="FromRole_CR_MAW1" Relationship="UGIOD02_RFM_SRV.CR_MAW1"/>
<NavigationProperty Name="CR_STEU" ToRole="ToRole_CR_STEU" FromRole="FromRole_CR_STEU" Relationship="UGIOD02_RFM_SRV.CR_STEU"/>
<NavigationProperty Name="CR_SAUSPW" ToRole="ToRole_CR_SAUSPW" FromRole="FromRole_CR_SAUSPW" Relationship="UGIOD02_RFM_SRV.CR_SAUSPW"/>
<NavigationProperty Name="CR_SVARKY" ToRole="ToRole_CR_SVARKY" FromRole="FromRole_CR_SVARKY" Relationship="UGIOD02_RFM_SRV.CR_SVARKY"/>
<NavigationProperty Name="CR_PURCHINFO" ToRole="ToRole_CR_PURCHINFO" FromRole="FromRole_CR_PURCHINFO" Relationship="UGIOD02_RFM_SRV.CR_PURCHINFO"/>
<NavigationProperty Name="CR_WLK2" ToRole="ToRole_CR_WLK2" FromRole="FromRole_CR_WLK2" Relationship="UGIOD02_RFM_SRV.CR_WLK2"/>
<NavigationProperty Name="CR_BOM" ToRole="ToRole_CR_BOM" FromRole="FromRole_CR_BOM" Relationship="UGIOD02_RFM_SRV.CR_BOM"/>
<NavigationProperty Name="CR_MBEW" ToRole="ToRole_CR_MBEW" FromRole="FromRole_CR_MBEW" Relationship="UGIOD02_RFM_SRV.CR_MBEW"/>
<NavigationProperty Name="CR_CHARACP" ToRole="ToRole_CR_CHARACP" FromRole="FromRole_CR_CHARACP" Relationship="UGIOD02_RFM_SRV.CR_CHARACP"/>
<NavigationProperty Name="CR_MAMT" ToRole="ToRole_CR_MAMT" FromRole="FromRole_CR_MAMT" Relationship="UGIOD02_RFM_SRV.CR_MAMT"/>
<NavigationProperty Name="CR_CLASSGEN" ToRole="ToRole_cr_classgen" FromRole="FromRole_cr_classgen" Relationship="UGIOD02_RFM_SRV.cr_classgen"/>
<NavigationProperty Name="CR_MESSAGE" ToRole="ToRole_Messages" FromRole="FromRole_Messages" Relationship="UGIOD02_RFM_SRV.Messages"/>
<NavigationProperty Name="CR_CLASSASGN" ToRole="ToRole_Classasgen_As" FromRole="FromRole_Classasgen_As" Relationship="UGIOD02_RFM_SRV.Classasgen_As"/>
<NavigationProperty Name="CR_VALUATION" ToRole="ToRole_Valuation_As" FromRole="FromRole_Valuation_As" Relationship="UGIOD02_RFM_SRV.Valuation_As"/>
<NavigationProperty Name="CR_SEASON" ToRole="ToRole_Season_det" FromRole="FromRole_Season_det" Relationship="UGIOD02_RFM_SRV.Season_det"/>
</EntityType>
我假设您使用v2的oData模型在使用oModel.createEntry或oModel.create时负责结构。您可以将整个对象放入第二个properties参数中。我创建了一个northwind示例项目来创建一个工作示例 接受三个参数,即API引用中的第二个参数,即需要传递的深层对象
var oData = {
ReasonForRequest: "X",
Matnr: "Y",
RefMatnr: "Z",
CR_MARA: {
Matk: "",
Mtart: "HAWA",
Attyp: "01",
Meins: "EA"
},
CR_MAW1: [
{
Wladg: "0001",
Wbkla: "3100"
}
]
}
oModel.create("/EntitySet", oData, { } );
请注意一些重要概念:
CR_MARA和CR_MAW1是元数据中的导航属性。
因为您只提供了部分服务元数据,所以它不是
可能知道每个实体的属性是什么。这个
元数据中的关联在元数据中不可用
包含有关基数的信息。
那么如果克鲁·马拉
基数1..1它应该是oData内部的深层对象
CR_MAW1的基数为1..*它应该是一个对象数组
在奥达塔里面。
此外,使用特定于操作的名称命名EntitySet(如CreateEntitySet或DeleteEntitySet)在语义上是错误的,通常会在同一实体中实现许多操作,如同时查询、读取和创建 这实际上取决于oData模型中实体的结构。也请共享您的$metadata。您好,我已附加了需要调用的crquest服务元数据,并以相同格式将值传递给create方法。请添加整个元数据,并且不仅一个entityCreateEntry不允许使用深层结构,因此在给定JSON结构的情况下无法使用。您好,感谢您的帮助,我能够用嵌套的json结构解决这个问题,并且可以触发文章创建服务。
var oData = {
ReasonForRequest: "X",
Matnr: "Y",
RefMatnr: "Z",
CR_MARA: {
Matk: "",
Mtart: "HAWA",
Attyp: "01",
Meins: "EA"
},
CR_MAW1: [
{
Wladg: "0001",
Wbkla: "3100"
}
]
}
oModel.create("/EntitySet", oData, { } );