gpt4 book ai didi

odata - 将空值传递给 OData V2 Edm.Time 属性

转载 作者:行者123 更新时间:2023-12-05 09:03:45 25 4
gpt4 key购买 nike

我有一个变量类型 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" 值,不是空字符串。是否可以在后端做一些事情来“清除”变量?

最佳答案

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

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

hora TYPE REF TO t.

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

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.

现在 ls_entity-hora 不再是未绑定(bind)的(或者“null”,如果你想这样调用它),它指向一个新的时间值 000000。如果您想读取或更改此引用指向的这段无名数据的值,则可以使用取消引用运算符 ->*:

ls_entity-hora->* = lwa_hora.

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

CLEAR ls_entity-hora.

顺便说一句:在过去十年中,用 dt 类型的两个独立变量表示时间点已经过时了。当前针对这种情况的最佳做法是使用 TIMESTAMP(如果您需要秒级精度)或 TIMESTAMPL(如果您需要微秒级精度)类型的单个变量。 00000000000000 的时间戳显然是非法值,因此可以用来表示时间点不存在。这种类型通常还可以更轻松地与 SAPUI5 前端(如您的情况)进行通信,因为许多用于制作 oData 服务的技术都提供 Javascript Date 和 ABAP TIMESTAMP< 之间的自动转换.

关于odata - 将空值传递给 OData V2 Edm.Time 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69568708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com