如何执行OData读取日期作为实体主键

时间:2018-06-12 10:58:52

标签: odata sapui5

我对调用OData读取操作时使用的日期格式感到困惑,其中参数在entityset括号中提到。如果您可以针对每个

粘贴答案,那就太棒了
  1. 如果我们要在实体集参数中传递值,如何使用ODataModel的read()方法?

    var sPath ="/EMP_DETAILSSet(Empid='50160458'/*, ...*/)";
    oBackEndModel.read(sPath, {
      success: this._fGetDetailsSuccess.bind(this),
      error: this._fBackEndInvocationError.bind(this)
    });
    

    这是遵循的方法吗?或者我们还有其他方法吗?

  2. 如何使用OData将日期设置为实体设置关键参数?请更正以下代码段(在运行时给出错误的请求错误),其中dBegDatedEndDate是JS标准日期对象。

    var sPath ="/EMP_DETAILSSet(Empid='50160458',Begdate="+ dBegDate.toJSON() + ",Enddate=" + dEndDate.toJSON() + ",HAFId=' ')";
    oBackEndModel.read(sPath, {
      success: this._fGetDetailsSuccess.bind(this),
      error: this._fBackEndInvocationError.bind(this)
    });
    
  3. 如何执行多个展开操作以及上面提到的实体集参数?请修复以下代码中的错误,因为它对我不起作用。

    var sPath ="/EMP_DETAILSSet(Empid='50160458',Begdate="+ dBegDate.toJSON() + ",Enddate=" + dEndDate.toJSON() + ",HAFId=' ')";
    oBackEndModel.read(sPath, {
      urlParameters: {
        $expand: "NAVTODETAIL,NAVTOPROFILE,NAVTOREPORTEES"
      },
      success: this._fGetDetailsSuccess.bind(this),
      error: this._fBackEndInvocationError.bind(this)
    });
    
  4. 进一步更新

    我遵循了Sunil的建议。 sPath在运行时看起来如下:

    "/EMP_DETAILSSet(Empid='50160458',Begdate=datetime'2014-03-11T14:49:52',Enddate=datetime'9999-12-31T14:49:52',HAFId=' ')"
    

    当我尝试这个时,它给了我以下错误:

      

    2018-06-13 10:56:31.872300发生以下问题:HTTP请求失败404,未找到,{“错误”:{“code”:“005056A509B11EE1B9A8FEC11C21D78E”,“message”:{“lang”:“en “,”value“:”找不到段'49:52'的资源,Enddate = datetime'9999-12-31T14:49:52',HAFId =''。“},”innererror“:{”transactionid“ :“5B20F78A93457852E10000000ACD4014”,“timestamp”:“20180613052610.2725590”,“Error_Resolution”:{“SAP_Transaction”:“在SAP Gateway集线器系统上运行事务/ IWFND / ERROR_LOG并搜索上面带有时间戳的条目以获取更多详细信息”,“SAP_Note” :“请参阅SAP Note 1797736以进行错误分析......”}}}}

    你知道为什么吗?

    请注意,以下URL工作正常,并在从SAP Gateway Client执行时返回结果:     / SAP / OPU /的OData / XXX / YYYY_SRV / EMP_DETAILSSet(EMPID = '50160458',Begdate = datetime'2014-03-11T14:49:52' ,结束日期= datetime'9999-12-31T14:49:52' ,哈菲德='')?$ expandNAVTODETAIL,NAVTOPROFILE,NAVTOREPORTEES& $ format = json

1 个答案:

答案 0 :(得分:0)

  1. 首先要检查您 SAP Netweaver网关中定义的primitive type是什么。 最有可能的是,它将是Edm.DateTime。您可以使用$metdata服务电话来获取此信息。

  2. OData具有Edm.DateTime

  3. 的标准表示形式

    datetime'yyyy-mm-ddThh:mm[:ss[.fffffff]]'

    注意:datetime和引用部分之间不允许有空格。 datetime不区分大小写

    示例datetime'2000-12-12T12:00'

    如果是JSON Format表示,

    示例:"FlightDate": "/Date(1354665600000)/"

    它应该类似于:

    var sPath = "/EMP_DETAILSSet(Empid='50160458',Begdate=datetime'2014-03-11T14:49:52',Enddate=datetime'2014-03-11T14:49:52',HAFId = ' ')";
    oBackEndModel.read(sPath, {
        urlParameters: {
            $expand: "NAVTODETAIL,NAVTOPROFILE,NAVTOREPORTEES"
        },
        success: jQuery.proxy(this._fGetDetailsSuccess, this),
        error: jQuery.proxy(this._fBackEndInvocationError, this)
    });