如何从Illuminator OData服务返回空的DateTime

2020-09-15 15:42发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家

我们正在使用IlluminatorOData服务从SQL查询模板中以JSON格式检索日期。

/XMII/IlluminatorOData/QueryTemplate?QueryTemplate = <查询模板路径>&$ format = json
 

其中一列定义为DateTime类型,并由OData服务作为JSON字符串化的行集/行集/行对象返回:

 {" start_date":"/img/Date()/"} 

但是,如果数据库中的源字段为null,则OData服务不会返回空的DateTime,而是由MII用当前时间戳填充结果。

相反,如果我们调用与XML输出相同的SQL查询模板,则会收到众所周知的占位符:

 时间不可用 

我的问题是,如果源值为null,我们如何防止MII OData服务返回默认的DateTime值?

我们希望它为null,空白或" TimeUnavailable",即使"/img/Date(0)/"也可以使用...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家

我们正在使用IlluminatorOData服务从SQL查询模板中以JSON格式检索日期。

/XMII/IlluminatorOData/QueryTemplate?QueryTemplate = <查询模板路径>&$ format = json
 

其中一列定义为DateTime类型,并由OData服务作为JSON字符串化的行集/行集/行对象返回:

 {" start_date":"/img/Date()/"} 

但是,如果数据库中的源字段为null,则OData服务不会返回空的DateTime,而是由MII用当前时间戳填充结果。

相反,如果我们调用与XML输出相同的SQL查询模板,则会收到众所周知的占位符:

 时间不可用 

我的问题是,如果源值为null,我们如何防止MII OData服务返回默认的DateTime值?

我们希望它为null,空白或" TimeUnavailable",即使"/img/Date(0)/"也可以使用...

付费偷看设置
发送
2条回答
compass1988
1楼 · 2020-09-15 16:29.采纳回答

菲利普,

请考虑使用MII中的SQL查询模板从事务中执行以下MSSQL查询:

 DECLARE @dateExample表(id INT IDENTITY(1,1),日期DATETIME)
 插入@dateExample(日期)值(GETDATE())
 INSERT INTO @dateExample(日期)值(NULL)

 SELECT ID,
 日期,
 ISNULL(date,'')AS emptyDate,
 ISNULL(date,'1970-01-01 00:00:00')AS nullAsEpochDate,
 ISNULL(CONVERT(VARCHAR(23),date,21),'')AS转换日期21,
 ISNULL(CONVERT(VARCHAR(23),date,126),'')AS convertedDate126,
 ISNULL(CONVERT(VARCHAR(24),date,127),'')AS转换日期
 FROM @dateExample
 

针对xacuteQuery使用IlluminatorOData服务返回时:

"行":{
 "结果":[
 {
 " __metadata":{
 " uri":" http://mii.domain.com:50000/XMII/IlluminatorOData/Row(1)",
 " type":" QueryTemplate.Row"
 },
 " id":1
 " date":"/日期(1530536140000)/",
 " emptyDate":"/img/Date(1530536140000)/",
 " nullAsEpochDate":"/日期(1530536140000)/",
 " convertedDate21":" 2018-07-02 12:55:40.230",
 " convertedDate126":" 2018-07-02T12:55:40.230",
 " convertedDate127":" 2018-07-02T12:55:40.230",
 " RowId":1
 },
 {
 " __metadata":{
 " uri":" http://mii.domain.com:50000/XMII/IlluminatorOData/Row(2)",
 " type":" QueryTemplate.Row"
 },
 " id":2
 " date":"/img/Date(1530536142380)/",
 " emptyDate":"/img/Date(-2208988800000)/",
 " nullAsEpochDate":"/img/Date(0)/",
 " convertedDate21":null,
 " convertedDate126":null,
 " convertedDate127":null,
 " RowId":2
 }
 ]
 }
 

如果使用的是MSSQL,则很可能希望在日期字段上使用ISNULL(date,'1970-01-01 00:00:00'),以返回"/img/Date(0)/"作为空值。 默认情况下,由于某种原因,NULL值返回为" 1900-01-01 00:00:00.000"或"/img/Date(-2208988800000)/"。 如果您希望在SQL端设置日期格式并将其作为字符串返回,则也可以按照上面所示进行操作。 这将以SQL格式的字符串而不是/Date()/值的形式返回日期值,而以 null 的NULL日期形式返回。


我希望这会有所帮助。

Eric

半个程序猿
2楼-- · 2020-09-15 16:22

我同意可以将其视为错误。 在从我们的SAP ECC环境调用的OData服务中,我验证了ABAP代码以JSON格式返回的日期字段为 null 或"/img/Date(#)/" 的日期字段。 我认为来自MII的SQL查询应该以相同的方式执行,尽管以我的经验,MII从未返回关键字 null 。 我已经看到了NA,-和TimeUnavailable,它们是MII中的SQL NULL返回的空值(不特定于OData服务)。

一周热门 更多>