gpt4 book ai didi

javascript - SAPUI5 创建带有日期的 OData 实体 - 生成以 CX_SXML_PARSE_ERROR 结尾的错误请求负载

转载 作者:行者123 更新时间:2023-12-02 17:22:48 24 4
gpt4 key购买 nike

我们正在尝试通过 odata 服务创建一个具有日期属性的实体。后端是一个sap系统。这个实体只有 3 个关键属性加上一堆其他属性。我们已经确定键中的日期是问题的根本原因。

按键:

  • Pernr 类型字符串,
  • begda 类型日期时间
  • endda 类型日期时间。

在尝试解决问题时,下面的代码(不起作用)已被大大简化。目前,它从实体集中读取一个实体,并立即尝试使用完全相同的数据创建一个实体。

代码:

var oODataModel = new sap.ui.model.odata.ODataModel("/sap/opu/odata/sap/Z_PERSONAL_DATA_SRV/");

//Test entity to be saved
var entity = null;

//Handler for read error
var handleReadE = function (oEvent){
alert("error");
};

//Handler for read success
var handleRead = function (oEvent){
//Get the data read from backend
entity = oEvent.results[0];

//Try to create a new entity with same data
oODataModel.create('/PersDataSet', entity, null, function(){
alert("Create successful");
},function(oError){
alert("Create failed", oError);
});
};

oODataModel.read("/PersDataSet", null, [], true, handleRead, handleReadE);

网关错误日志中出现xml解析错误。在这个日志中,我们可以看到请求数据,可以看出日期是用String类型传输的。这些日期在服务中定义为 DateTimes,因此请求被拒绝。示例:

<m:properties>
<d:Pernr m:type="Edm.String">00000001</d:Pernr>
<d:Endda m:type="Edm.String">9999-12-31T00:00:00</d:Endda>
<d:Begda m:type="Edm.String">1979-05-23T00:00:00</d:Begda>

读取实体时,后端不会发送任何类型信息。它发送如下示例:

<m:properties>
<d:Pernr>72010459</d:Pernr>
<d:Endda>9999-12-31T00:00:00</d:Endda>
<d:Begda>1876-07-21T00:00:00</d:Begda>

事实上,如果我们尝试在没有 type=".."的情况下保存相同的信息,它会起作用。所以问题是 ODataModel.create 添加到 xml 的类型不正确。

我的问题是:我可以告诉 ODataModel.create 不要添加此类型信息吗?它在推断类型方面做得不好。

有人可以分享一个通过 odata 读取和写入日期的示例吗?

提前非常感谢您。

最佳答案

从 oODataModel.read 返回的数据是原始数据,在发布之前需要解析它

 var handleRead = function (oEvent){
//Get the data read from backend
entity = oEvent.results[0];

var newEntity = jQuery.extend({},entity);
delete newEntity.__metadata;
newEntity.Begda = new Date(entity.Begda);
newEntity.Endda = new Date(entity.Endda);

//Try to create a new entity with same data
oODataModel.create('/PersDataSet', newEntity, null, function(){

为什么不使用 json 而不是 xml?

关于javascript - SAPUI5 创建带有日期的 OData 实体 - 生成以 CX_SXML_PARSE_ERROR 结尾的错误请求负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com