Как выполнить чтение OData с датой в качестве первичных ключей объекта - PullRequest
0 голосов
/ 12 июня 2018

Я запутался в формате даты, который будет использоваться при вызове операции чтения OData, где параметры указаны в скобках набора сущностей.Было бы здорово, если бы вы могли вставить свой ответ против каждого

  1. Как использовать метод ODataModel read(), если у нас есть значения, которые должны быть переданы в параметрах набора сущностей?

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

    Это подход, которому нужно следовать?Или у нас есть какой-то другой подход?

  2. Как установить дату как ключевой параметр набора сущностей с OData?Исправьте приведенный ниже фрагмент кода (который дает мне неверную ошибку запроса во время выполнения), где dBegDate и dEndDate являются стандартными объектами даты 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)
    });
    

Дальнейшие обновления

Я последовал предложению b 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, Not Found, {"error": {"code": "005056A509B11EE1B9A8FEC11C21D78E", "message": {"lang": "en", "value": "Ресурс не найден для сегмента '49: 52' , EndDate = datetime'9999-12-31T14: 49: 52' , Hafid = '' "}," innererror. ": {" TransactionID ":" 5B20F78A93457852E10000000ACD4014" , "метка время": "20180613052610,2725590",»Error_Resolution ": {" SAP_Transaction ":" Выполнить транзакцию / IWFND / ERROR_LOG в системе-концентраторе SAP Gateway и выполнить поиск записей с указанной выше временной меткой для получения дополнительной информации "," SAP_Note ":" См. SAP-ноту 1797736 для анализа ошибок ... "}}}}

Знаете ли вы, почему?

Обратите внимание, что следующий URL работает нормально и возвращает результат при выполнении из клиента SAP Gateway: / sap / opu / odata / XXX/ YYYY_SRV / EMP_DETAILSSet (EmpId = '50160458', Begdate = datetime'2014-03-11T14: 49: 52' , EndDate = datetime'9999-12-31T14: 49: 52 ', HAFId =' ')? $ ExpandNAVTODETAIL, NAVTOPROFILE, NAVTOREPORTEES & $ format = json

1 Ответ

0 голосов
/ 12 июня 2018
  1. Прежде всего, проверьте, что primitive type определено в вас SAP Netweaver gateway .Скорее всего, это будет Edm.DateTime.Вы можете получить эту информацию, используя $metdata вызов по услуге.

  2. OData имеет стандартное представление Edm.DateTime

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)
});
...