在ABAP程序中,使用class显示本地表时,我注意到数据的意外持久性cl_salv_table。
为了重现,我创建了一个最小的代码示例。该程序进行插入,在ALV中显示数据,然后执行ROLLBACK WORK。我希望插入的值在回滚之前存在于数据库中,而在回滚之后不存在。
但是,如果在插入和回滚之间显示ALV网格,则数据将保留在回滚之后,并立即对其他事务可见。
这是预期的行为吗?如果是,该如何避免呢?我们确实经常使用此类,并且看起来当我们实际上不想要时,可能会无意间将值提交给数据库。
这是代码:
*&---------------------------------------------------------------------*
*& Report zok_alv_commit
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zok_alv_commit.
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: p_showtb TYPE boolean AS CHECKBOX DEFAULT abap_false.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
DATA: lt_table TYPE TABLE OF zok_alv,
ls_table TYPE zok_alv.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Create new GUID and insert into table
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
TRY.
ls_table-guid = cl_system_uuid=>create_uuid_c22_static( ).
CATCH cx_uuid_error.
" Error creating UUID
MESSAGE e836(/basf/dps3_apodata).
ENDTRY.
WRITE: |Create guid { ls_table-guid } |, …Run Code Online (Sandbox Code Playgroud) 我有一个整数列表,可以有任意数量的项目。现在,我想计算所有这些数字的 BITWISE XOR。如果数字已经知道,可以按如下方式完成:
int xor = 10 ^ 25 ^ 40 ^ 55......and so on
Run Code Online (Sandbox Code Playgroud)
但是当元素数量未知时,我无法在运行时为列表的每个元素动态实现它。我想一次对所有时间应用按位异或,而不是一次两个。