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

标签 javascript odata sapui5 sap-gateway

我们正在尝试通过 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/

相关文章:

javascript - 如何在 UI5 中对 F5 按键执行自己的操作?

javascript - 销毁Xml View sapui5

android - 在 OpenUI5 中禁用设备后退按钮单击?

javascript - 使用 jQuery 序列化和 CodeIgniter 函数

javascript - 从数据库中删除记录的按钮

odata - 在 Web API 2.2 上将 $select 和 $expand 与 Odata v4.0 一起使用时出错

search - OData V6.6.0 不允许 $search

javascript - 无法初始化 OData。使用 Breeze,需要支持远程 OData 服务

javascript - Node.js 的索引页面不读取 css 或 javascript 文件

javascript - 如何使用 AngularJS 以编程方式创建 URL