kya*_*ara 2 abap odata sap-gateway
我有一个变量类型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.
Run Code Online (Sandbox Code Playgroud)
我尝试过CLEAR但没有任何反应。
我需要这个是因为在 JavaScript 前端客户端逻辑中,我需要 OData 属性包含一个假值(例如null或一个空字符串"")。
"000000"但它始终具有不是空字符串的值。是否可以在后端做一些事情来“清除”变量?
abap()中的时间数据类型t是值类型。它在内部实现为一个整数,计算自午夜以来的秒数。自午夜起 0 秒是有效值,因此不能为空值。
但是,ABAP 允许您创建对任何值类型的引用:
hora TYPE REF TO t.
Run Code Online (Sandbox Code Playgroud)
这意味着hora将是对变量的引用TYPE t。最初,该引用将是未绑定的,这在概念上与其他编程语言中的空引用非常相似。您可以通过以下方式检查:
IF ls_entity-hora IS BOUND.
...
IF ls_entity-hora IS NOT BOUND.
Run Code Online (Sandbox Code Playgroud)
您可以使用 指定时间值GET REFERENCE OF lwa_hora INTO ls_entity-hora。但现在您有了对现有变量的引用。改变 的值lwa_hora, 的值ls_entity-hora也会改变。这可能并不总是您想要的。因此,最好在内存中创建一条新数据供我们参考:
CREATE DATA ls_entity-hora.
Run Code Online (Sandbox Code Playgroud)
Nowls_entity-hora不再是未绑定的(或者“null”,如果你想这样称呼它),它指向一个新的时间值000000。如果您想读取或更改此引用所指向的这段无名数据的值,那么您可以使用取消引用运算符来执行此操作->*:
ls_entity-hora->* = lwa_hora.
Run Code Online (Sandbox Code Playgroud)
如果您有意将引用设置为未绑定(或“将引用设置为 null”),则可以通过清除引用来实现:
CLEAR ls_entity-hora.
Run Code Online (Sandbox Code Playgroud)
顺便说一句:用两个不同类型的变量来表示一个时间点d,t在过去的十年里已经过时了。当前针对这种情况的最佳实践是使用单个类型的变量TIMESTAMP(如果需要秒精度)或TIMESTAMPL(如果需要微秒精度)。时间戳00000000000000显然是非法值,因此可以用它来表示不存在某个时间点。这种类型通常还使与 SAPUI5 前端(如您的情况)的通信变得更加容易,因为许多用于制作 oData 服务的技术提供 JavascriptDate和 ABAP之间的自动转换TIMESTAMP。
| 归档时间: |
|
| 查看次数: |
3030 次 |
| 最近记录: |