1、NUMBER_RANGE_ENQUEUE用于锁定编号范围对象,防止多用户并发访问冲突
2、NUMBER_RANGE_DEQUEUE用于解锁已维护的编号范围对象。
3、此外,还提到了NUMBER_GET_NEXT函数模块,用于获取编号范围内的下一个号码。
文章目录
- 创建编号范围
- 程序实现
- 代码
- 测试编号范围
- 函数测试
- 执行结果
创建编号范围
程序实现
代码
*&---------------------------------------------------------------------*
*& Report Z_TEST_NUMBERGET
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_TEST_NUMBERGET.DATA:LV_ZPPXM TYPE RSNUM.
DATA: NR TYPE INRI-NRRANGENR,OBJECT TYPE INRI-OBJECT.
NR = '01'. "间隔编辑里面起始编号"
OBJECT = 'ZPPXM'. " 'ZPPXM' SNRO创建的对象名称"
CLEAR LV_ZPPXM.
*DATA OBJECT TYPE TNRO-OBJECT."调用函数: Number range: Lock object Add By Code_Tool"
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'EXPORTINGOBJECT = OBJECTEXCEPTIONSFOREIGN_LOCK = 1OBJECT_NOT_FOUND = 2SYSTEM_FAILURE = 3OTHERS = 4.
IF SY-SUBRC = 0."调用函数: NUmber range: Assigns next free number Add By Code_Tool"CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGNR_RANGE_NR = NROBJECT = OBJECTQUANTITY = '1'IMPORTINGNUMBER = LV_ZPPXMEXCEPTIONSINTERVAL_NOT_FOUND = 1NUMBER_RANGE_NOT_INTERN = 2OBJECT_NOT_FOUND = 3QUANTITY_IS_0 = 4QUANTITY_IS_NOT_1 = 5INTERVAL_OVERFLOW = 6BUFFER_OVERFLOW = 7OTHERS = 8.IF SY-SUBRC <> 0.MESSAGE E001(00) WITH '无法获取新的号码: ' OBJECT.ENDIF."调用函数: Number range: Unlock object Add By Code_ToolCALL FUNCTION 'NUMBER_RANGE_DEQUEUE'EXPORTINGOBJECT = OBJECTEXCEPTIONSOBJECT_NOT_FOUND = 1OTHERS = 2.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.
ENDIF.