In SAP systems, External Early Numbering is a technique where unique identifiers (like document numbers or order IDs) are generated by external systems before data is persisted in SAP RAP. This approach is crucial for:
- Integration scenarios with third-party systems
- Pre-numbered documents (e.g., invoices from legacy systems)
- Compliance requirements where numbers must be assigned upfront
What is External Early Numbering?
External Early Numbering refers to the practice of generating unique identifiers (like invoice numbers, order IDs, or transaction codes) outside SAP before data enters the SAP system. This contrasts with traditional SAP numbering which typically uses:
- Number range objects (SNRO)
- Automatic internal numbering
- Late numbering techniques
Key Benefits of External Early Numbering
✔ Seamless integration with external applications
✔ Avoids duplicate numbering across systems
✔ Supports compliance with pre-numbered documents
✔ Reduces SAP load by offloading numbering logic
How External Early Numbering Works in RAP
✔ Pre-Allocation of Numbers: IDs are assigned before save sequence
✔ Custom Logic Support: Enables business-specific numbering rules
✔ Transaction Safety: Maintains consistency even if transaction fails
✔ Backward Compatibility: Works with legacy numbering systems
Technical Implementation Flow
- Client application requests new entity with desired ID
- RAP framework validates number availability
- Business object is created with the provided ID
- Database commit confirms persistence
Implementation Methods for External Early Numbering
Using BAPIs for Number Assignment
DATA: lv_external_number TYPE bapivbeln-vbeln.
" Call external system to get number
CALL FUNCTION 'Z_GET_EXTERNAL_NUMBER'
IMPORTING
ev_doc_number = lv_external_number.
" Validate number format
IF lv_external_number CO '0123456789' AND
strlen( lv_external_number ) = 10.
" Use number in SAP document creation
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
salesdocument = lv_external_number
order_header = ls_header
TABLES
return = lt_return.
IF line_exists( lt_return[ type = 'E' ] ).
" Handle error
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
ENDIF.
Direct Table Update with Authorization Check
DATA: lv_number_range_object TYPE inri-object,
lv_external_number TYPE char20.
" Get number from external system
lv_external_number = zcl_external_system=>get_next_number( ).
" Verify number doesn't exist
SELECT SINGLE docnum FROM vbak
INTO @DATA(lv_exists)
WHERE docnum = @lv_external_number.
IF sy-subrc = 0.
" Handle duplicate
ELSE.
" Insert with external number
vbak-docnum = lv_external_number.
MODIFY vbak FROM vbak.
COMMIT WORK.
ENDIF.
External Early Numbering is essential for integrated SAP landscapes. By following this guide:
✔ Implement secure number integration
✔ Maintain data consistency across systems
✔ Handle high-volume scenarios efficiently