首页 > 解决方案 > 将空值传递给 OData V2 Edm.Time 属性

问题描述

我有一个变量类型时间,但有时这个变量没有任何东西。

当它是初始值时,它不应该是"000000",我想要一个没有任何东西的空值(没有零)。让我解释一下我的代码问题:

IF lwa_hora IS INITIAL.
   CLEAR lwa_hora.
   ls_entity-hora = lwa_hora. " Result: 000000 but I don't want any zero
ELSE.
   ls_entity-hora = lwa_hora. " Result: 000000
ENDIF.

我试过了,CLEAR但没有任何反应。

我需要这是因为在 JavaScript 前端客户端逻辑中,我需要 OData 属性包含一个虚假值(例如null或空字符串"")。

但它始终具有"000000"字符串的值。是否可以在后端制作一些东西来“清除”变量?

标签: odataabapsap-gateway

解决方案


abap ( t) 中的时间数据类型是值类型。它在内部实现为一个整数,计算自午夜以来的秒数。自午夜以来的 0 秒是一个有效值,因此它不能有空值。

但是,ABAP 允许您创建对任何值类型的引用:

hora TYPE REF TO t.

这意味着hora将是对 的变量的引用TYPE t。最初,此引用将是未绑定的,这在概念上与其他编程语言中的空引用非常相似。您可以通过以下方式检查:

IF ls_entity-hora IS BOUND.
...
IF ls_entity-hora IS NOT BOUND.

您可以使用 分配时间值GET REFERENCE OF lwa_hora INTO ls_entity-hora。但是现在您有一个对现有变量的引用。改变 的值lwa_hora, 的值ls_entity-hora也会改变。这可能并不总是你想要的。因此,最好在内存中创建一条新数据以供我们参考:

CREATE DATA ls_entity-hora.

Nowls_entity-hora不再是未绑定的(或者如果你想这样称呼它为“null”),它指向一个新的时间值000000. 如果您想读取或更改此引用指向的此无名数据的值,则可以使用 dereferencing-operator 执行此操作->*

ls_entity-hora->* = lwa_hora.

如果您有意将引用设置为未绑定(或“将引用设置为 null”),您可以通过清除引用来实现:

CLEAR ls_entity-hora.

顺便说一句:用两个不同类型的变量表示一个时间点,dt过去十年中已经过时了。这种情况的当前最佳实践是使用单个类型的变量TIMESTAMP(如果您需要秒精度)或TIMESTAMPL(如果您需要微秒精度)。一个timestamp of00000000000000显然是一个非法值,所以它可以用来表示一个时间点的缺失。这种类型通常也使与 SAPUI5 前端(如您的情况)的通信变得更加容易,因为许多用于制作 oData 服务的技术都提供了 JavascriptDate和 ABAP之间的自动转换TIMESTAMP


推荐阅读