const regex = /(?m:((?<=").*?$)|((?i:\*)([\t ].*?)?$))/ig;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?m:((?<=").*?$)|((?i:\\*)([\\t ].*?)?$))', 'ig')
const str = `CLASS zcl_re7_upd_ctrl DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS gc_deleted_m_type TYPE rebdmeas VALUE 'W001'. "#EC NOTEXT
CONSTANTS gc_deleted_m_value TYPE rebdmeasvalue VALUE 0. "#EC NOTEXT
METHODS fill_log_from_bapiret2
IMPORTING
!bapi_return TYPE bapiret2_t .
METHODS constructor
IMPORTING
!obj_type TYPE string
!mode TYPE string
!window_start_date TYPE datum
!window_end_date TYPE datum
!last_update_ts TYPE tzntstmpl "Timestamp of last update
.
METHODS main .
CLASS-METHODS gen_next_window_start_date
IMPORTING
!obj_type TYPE string
!last_update_ts TYPE tzntstmpl "Timestamp of last update
RETURNING
VALUE(next_window_start_date) TYPE datum .
CLASS-METHODS gen_init_window_start_date
IMPORTING
!window_end_date TYPE datum
RETURNING
VALUE(window_start_date) TYPE datum .
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS gc_login_app TYPE string VALUE 'fpp_ena' ##NO_TEXT.
CONSTANTS gc_login_lang TYPE string VALUE 'pl' ##NO_TEXT.
CONSTANTS gc_login_user TYPE string VALUE 'sap' ##NO_TEXT.
CONSTANTS gc_login_password TYPE string VALUE 'IVNhcFNlcnZpY2U1Kg==' ##NO_TEXT.
CLASS-METHODS init_log
RETURNING
VALUE(go_log) TYPE REF TO if_reca_message_list.
DATA go_log TYPE REF TO if_reca_message_list .
DATA buffer TYPE zre_t_measur_buf_tab .
DATA last_update_ts TYPE tzntstmpl .
DATA obj_type TYPE string .
DATA m_type TYPE rebdmeas . " TODO: move to subclass
DATA proxy TYPE REF TO zre7_co_si_get_ln_lngths_so .
DATA mode TYPE string .
DATA window_start_date TYPE datum .
DATA window_end_date TYPE datum .
DATA received_ts TYPE tzntstmpl.
DATA tz TYPE timezone.
DATA status_rec TYPE zre_t_measur_sta.
DATA:
is_line TYPE boolean,
is_building TYPE boolean,
is_property TYPE boolean
.
DATA current_ts TYPE tzntstmpl.
* DATA go_events TYPE REF TO lcl_handle_events.
METHODS process_building
IMPORTING
!building_obj TYPE REF TO if_rebd_building
!value TYPE rebdmeasvalue
!unit TYPE rebdmeasunit
RAISING
zcx_re1_exception .
METHODS calc_valid_period_for_building
EXPORTING
!valid_from TYPE recadatefrom
!valid_to TYPE recadateto .
METHODS commit_changes .
METHODS process .
METHODS read_buffer .
METHODS download_data_to_buffer
IMPORTING
update_timestamp TYPE any OPTIONAL
RAISING
zcx_re1_exception .
METHODS create_proxy .
METHODS clean_buffer
IMPORTING
processed TYPE zre_t_measur_buf_tab.
METHODS finish.
METHODS store_data_in_buffer
IMPORTING
received_data TYPE zre7_get_ln_lngths_resp_lc_tab
update_timestamp TYPE tzntstmpl
window_start_date TYPE datum
window_end_date TYPE datum
.
METHODS init_status_record.
METHODS setup_new_window_dates.
METHODS display_buffor
IMPORTING
buffer TYPE zre_t_measur_buf_tab.
ENDCLASS.
CLASS zcl_re7_upd_ctrl IMPLEMENTATION.
METHOD calc_valid_period_for_building.
DATA next_year TYPE char4.
DATA next_year_i TYPE integer.
next_year = me->window_end_date(4).
next_year_i = next_year.
next_year_i = next_year_i + 1.
next_year = next_year_i.
valid_from = next_year && '0101'.
valid_to = valid_from.
ENDMETHOD.
METHOD clean_buffer.
zcl_re7_storage_gateway=>clean_buffer( processed ).
ENDMETHOD.
METHOD commit_changes.
DATA: ls_return TYPE bapiret2.
* * W zależności od trybu wykonania zrób commit albo rolback i wyświetl raport
* IF p_exetyp = 'S'.
*
* * Do nothing - rollback not needed, BAPI_RE_BU_CHANGE run in simulation mode
*
* ELSEIF p_exetyp = 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true
IMPORTING
return = ls_return.
IF ls_return-type CA 'EAX'.
CALL METHOD me->go_log->add_from_bapi
EXPORTING
is_bapiret = ls_return.
ENDIF.
ENDMETHOD.
METHOD constructor.
DATA l_ts TYPE tzntstmpl.
DATA: l_window_start_date TYPE datum,
lcx TYPE REF TO zcx_re1_exception.
IF mode = 'download' OR mode = 'view' OR mode = 'buffer'.
ELSE.
MESSAGE 'API error: Incorrect usage of class zcl_re7_upd_ctrl - mode must be one of: download, view, buffer.' TYPE 'E'.
ENDIF.
* CREATE OBJECT update_controller.
me->mode = mode.
IF obj_type = 'line' OR obj_type = 'building' OR obj_type = 'property'.
ELSE.
MESSAGE 'API error: Incorrect usage of class zcl_re7_upd_ctrl - obj_type must be one of: line, building or property.' TYPE 'E'.
ENDIF.
me->obj_type = obj_type.
CALL FUNCTION 'GET_SYSTEM_TIMEZONE' IMPORTING timezone = me->tz EXCEPTIONS customizing_missing =1.
me->go_log = zcl_re7_upd_ctrl=>init_log( ).
me->last_update_ts = last_update_ts.
CONVERT DATE sy-datum TIME sy-uzeit INTO TIME STAMP me->current_ts TIME ZONE me->tz.
IF mode <> 'download'.
IF last_update_ts IS INITIAL.
MESSAGE 'API error: Incorrect usage of class zcl_re7_upd_ctrl - if processing buffer, ts must not be empty.' TYPE 'E'.
ENDIF.
ELSE.
ENDIF.
me->window_start_date = window_start_date.
me->window_end_date = window_end_date.
ENDMETHOD.
METHOD create_proxy.
ENDMETHOD.
METHOD display_buffor.
DATA:
ls_key TYPE salv_s_layout_key,
lo_salv_msg TYPE REF TO cx_salv_msg,
lo_table TYPE REF TO cl_salv_table,
lo_cols TYPE REF TO cl_salv_columns_table,
lo_events TYPE REF TO cl_salv_events_table,
lo_funcs TYPE REF TO cl_salv_functions_list,
lo_layout TYPE REF TO cl_salv_layout,
lo_display TYPE REF TO cl_salv_display_settings,
lt_buffer LIKE buffer.
lt_buffer = buffer.
TRY.
CALL METHOD cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_table
CHANGING
t_table = lt_buffer ).
CATCH cx_salv_msg INTO lo_salv_msg.
CLEAR lo_table.
CALL METHOD cl_reca_message_services=>raise_from_exception
EXPORTING
io_exception = lo_salv_msg
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
DISPLAY LIKE sy-msgty.
ENDIF.
RETURN.
ENDTRY .
** Include own functions by setting own status
* lo_table->set_screen_status(
* pfstatus = 'STATUS_1'
* report = sy-repid
* set_functions = lo_table->c_functions_all ).
** Events
* lo_events = lo_table->get_event( ).
* CREATE OBJECT go_events.
** Register to the event USER_COMMAND
* SET HANDLER go_events->on_user_command FOR lo_events.
** Register to the event DOUBLE_CLICK
* SET HANDLER go_events->on_double_click FOR lo_events.
*
* Layouts
ls_key-report = sy-repid.
lo_layout = lo_table->get_layout( ).
lo_layout->set_key( ls_key ).
lo_layout->set_default( abap_true ).
lo_layout->set_save_restriction( ).
lo_cols = lo_table->get_columns( ).
lo_cols->set_optimize( abap_true ).
* Functions
lo_funcs = lo_table->get_functions( ).
lo_funcs->set_all( abap_true ).
* Display Settings
lo_display = lo_table->get_display_settings( ).
lo_display->set_striped_pattern( abap_true ).
* Display ALV
lo_table->display( ).
ENDMETHOD.
METHOD download_data_to_buffer.
DATA:
exception_ref TYPE REF TO cx_ai_system_fault,
exception_ref_a TYPE REF TO cx_ai_application_fault,
lcx TYPE REF TO zcx_re1_exception,
l_exception_msg TYPE string,
wa_output TYPE zre7_get_ln_lngths_rq_lcl,
wa_input TYPE zre7_get_ln_lngths_resp_lcl,
lv_message TYPE string,
exception_ref_root TYPE REF TO cx_root,
tz TYPE timezone.
MESSAGE s006(zre7) WITH me->window_start_date me->window_end_date INTO lv_message.
me->go_log->add_symsg( ).
wa_output-get_line_lengths_request_local-date_from = me->window_start_date.
wa_output-get_line_lengths_request_local-date_to = me->window_end_date.
wa_output-get_line_lengths_request_local-login-app = gc_login_app.
wa_output-get_line_lengths_request_local-login-lang = gc_login_lang.
wa_output-get_line_lengths_request_local-login-user = gc_login_user.
wa_output-get_line_lengths_request_local-login-password = gc_login_password.
TRY .
CREATE OBJECT me->proxy.
me->proxy->si_get_line_lengths_sync_out( EXPORTING
output = wa_output
IMPORTING
input = wa_input
).
IF wa_input-get_ln_lngths_resp_lcl-status-status_code = 'OK'.
DATA(received_count) = lines( wa_input-get_ln_lngths_resp_lcl-row ) .
MESSAGE s010(zre7) WITH received_count INTO lv_message.
me->go_log->add_symsg( ).
* received_ts = wa_input-get_ln_lngths_resp_lcl-status-time_stamp.
received_ts = me->current_ts.
zcl_re7_storage_gateway=>save_sta_record( me->status_rec ).
me->store_data_in_buffer(
received_data = wa_input-get_ln_lngths_resp_lcl-row
update_timestamp = received_ts
window_start_date = me->window_start_date
window_end_date = me->window_end_date
).
COMMIT WORK.
MESSAGE s011(zre7) INTO lv_message.
me->go_log->add_symsg( ).
COMMIT WORK.
* me->last_update_ts = received_ts.
ELSE.
lcx = zcx_re1_exception=>create( ).
MESSAGE e007(zre7) INTO lv_message.
me->go_log->add_symsg( ).
MESSAGE e008(zre7) WITH wa_input-get_ln_lngths_resp_lcl-status-error_reason wa_input-get_ln_lngths_resp_lcl-status-debug_msg
INTO lv_message.
me->go_log->add_symsg( ).
lcx->add_sy( ).
RAISE EXCEPTION lcx.
ENDIF.
* TODO: extract message logging into sep meth. and fix shortened longtext
CATCH cx_ai_system_fault INTO exception_ref.
l_exception_msg = exception_ref->get_text( ).
WRITE: 'AI SYSTEM:', l_exception_msg.
lcx = zcx_re1_exception=>create( ).
MESSAGE e007(zre7) INTO lv_message.
me->go_log->add_symsg( ).
MESSAGE e008(zre7) WITH 'cx_ai_system_fault' l_exception_msg INTO lv_message.
me->go_log->add_symsg( ).
lcx->add_sy( ).
RAISE EXCEPTION lcx.
CATCH cx_ai_application_fault INTO exception_ref_a.
l_exception_msg = exception_ref->get_longtext( ).
WRITE: 'AI APP:', l_exception_msg.
MESSAGE e007(zre7) INTO lv_message.
me->go_log->add_symsg( ).
MESSAGE e008(zre7) WITH 'cx_ai_application_fault' l_exception_msg INTO lv_message.
me->go_log->add_symsg( ).
lcx->add_sy( ).
RAISE EXCEPTION lcx.
CATCH cx_root INTO exception_ref_root.
l_exception_msg = exception_ref_root->get_longtext( ).
WRITE: 'AI APP:', l_exception_msg.
MESSAGE e007(zre7) INTO lv_message.
me->go_log->add_symsg( ).
MESSAGE e008(zre7) WITH 'cx_ai_application_fault' l_exception_msg INTO lv_message.
me->go_log->add_symsg( ).
lcx->add_sy( ).
RAISE EXCEPTION lcx.
ENDTRY.
ENDMETHOD.
METHOD fill_log_from_bapiret2.
CALL METHOD me->go_log->add_from_bapi
EXPORTING
it_bapiret = bapi_return.
ENDMETHOD.
METHOD finish.
CALL FUNCTION 'RECA_GUI_MSGLIST_POPUP'
EXPORTING
io_msglist = me->go_log
if_popup = abap_false.
me->go_log->store(
* EXPORTING
* if_in_update_task = ABAP_TRUE " Call update program using "IN UPDATE TASK"
EXCEPTIONS
error = 1
OTHERS = 2
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
COMMIT WORK.
ENDMETHOD.
METHOD gen_init_window_start_date.
window_start_date = window_end_date.
window_start_date+4 = '0101'.
ENDMETHOD.
METHOD gen_next_window_start_date.
* DATA lv_last_update_ts TYPE tzntstmpl.
** me->last_update_ts should already contain TS of the last update, but to be sure..
* lv_last_update_ts = zcl_re7_storage_gateway=>get_last_meas_upd_ts( m_type = m_type ).
IF NOT last_update_ts IS INITIAL.
zcl_re7_storage_gateway=>get_window_dates_from_stas_tab(
EXPORTING
obj_type = obj_type
last_update_ts = last_update_ts
IMPORTING
window_end_date = DATA(last_window_end_date)
).
IF NOT last_window_end_date IS INITIAL.
next_window_start_date = last_window_end_date + 1.
ENDIF.
IF next_window_start_date > sy-datum.
next_window_start_date = sy-datum.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD init_log.
CALL METHOD cf_reca_message_list=>create
EXPORTING
id_object = 'ZRE7_IF'
id_subobject = 'ZRE7_LN_MEAS_UPD'
id_extnumber = 'RE Line Measures Update Log'
RECEIVING
ro_instance = go_log.
ENDMETHOD.
METHOD init_status_record.
me->status_rec-timestamp = me->current_ts.
me->status_rec-created_by_user = sy-uname.
me->status_rec-is_line = me->is_line.
me->status_rec-is_building = me->is_building.
me->status_rec-is_property = me->is_property.
* me->status_rec-processing_finished = abap_false.
me->status_rec-window_start_date = me->window_start_date.
me->status_rec-window_end_date = me->window_end_date.
ENDMETHOD.
METHOD main.
DATA: lv_last_update_ts TYPE tzntstmpl,
lv_message TYPE string.
* me->display_buffor( me->buffer ).
IF me->mode = 'download'.
TRY.
me->setup_new_window_dates( ).
IF me->window_start_date > me->window_end_date.
MESSAGE e013(zre7) INTO lv_message.
me->go_log->add_symsg( ).
me->finish( ).
RETURN.
ENDIF.
me->init_status_record( ).
me->download_data_to_buffer( ).
CATCH zcx_re1_exception INTO DATA(lcx_download).
me->finish( ).
RETURN.
ENDTRY.
ELSEIF me->mode = 'buffer' OR me->mode = 'view'.
me->status_rec = zcl_re7_storage_gateway=>read_sta_record( last_update_ts = me->last_update_ts obj_type = me->obj_type ).
me->window_start_date = me->status_rec-window_start_date.
me->window_end_date = me->status_rec-window_end_date.
me->read_buffer( ).
ENDIF.
* >>> mark processing start in STA table - update entry with matching ts
IF me->mode = 'buffer' OR me->mode = 'download'.
me->process( ).
* commit changes
* display log
me->finish( ).
ELSEIF me->mode = 'view'.
me->display_buffor( buffer = me->buffer ).
ENDIF.
ENDMETHOD.
METHOD process.
DATA:
lv_validfrom TYPE recadatefrom,
lv_validto TYPE recadateto,
lt_buildings TYPE re_t_if_rebd_building
,
lcx TYPE REF TO zcx_re1_exception,
lt_processed LIKE me->buffer,
lv_message TYPE string.
* get all distinct municip_ids
* loop at municip_ids
* read all buff records with municip_id
* loop at municip_id/sat_id
* process building (update meas)
* endloop
* endloop
MESSAGE s014(zre7) WITH me->window_start_date me->window_end_date INTO lv_message.
me->go_log->add_symsg( ).
DATA(lt_munic_ids) = me->buffer.
SORT lt_munic_ids BY municip_id ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_munic_ids COMPARING municip_id.
me->calc_valid_period_for_building( IMPORTING valid_from = lv_validfrom valid_to = lv_validto ).
LOOP AT lt_munic_ids ASSIGNING FIELD-SYMBOL(<fs_buffer_record>) .
CLEAR lt_buildings.
lt_buildings = zcl_re7_storage_gateway=>get_buildings_by_municip_key( municip_key = <fs_buffer_record>-municip_id go_log = me->go_log ).
LOOP AT lt_buildings ASSIGNING FIELD-SYMBOL(<fs_building_obj>).
IF zcl_re7_storage_gateway=>check_building_validity( building = <fs_building_obj> valid_from = lv_validfrom valid_to = lv_validto ) = abap_true.
TRY.
IF zcl_re7_storage_gateway=>is_building_assigned_to_sat( building_obj = <fs_building_obj> valid_from = lv_validfrom valid_to = lv_validto sat = <fs_buffer_record>-sat ) = abap_true.
TRY.
* TODO: refactor! pass whole record?
me->process_building( building_obj = <fs_building_obj> value = <fs_buffer_record>-value_length unit = <fs_buffer_record>-unit_length ).
APPEND <fs_buffer_record> TO lt_processed.
CATCH zcx_re1_exception INTO lcx.
me->fill_log_from_bapiret2( lcx->get_list( ) ).
ENDTRY.
ENDIF.
CATCH zcx_re1_exception INTO lcx.
me->go_log->add_from_exception(
EXPORTING
io_exception = lcx " Global Exception Reference
* if_cumulate = " Cumulation of Messages
* id_detlevel = " Level of Detail (0..9)
* id_probclass = " Problem class
* id_tabname = " Table Name
* id_fieldname = " Field Name
* id_value = " Value
* id_index = " Line Index
* id_intreno = " INTRENO of Calling Program
* id_context = " Enhanced Navigation Data (Maximum 75 Characters)
).
ENDTRY.
ELSE.
MESSAGE w003(zre7) WITH <fs_buffer_record>-sat <fs_buffer_record>-municip_id lv_validfrom lv_validto INTO lv_message.
me->go_log->add_symsg( ).
ENDIF.
ENDLOOP.
IF sy-subrc = 4 .
MESSAGE w005(zre7) WITH <fs_buffer_record>-municip_id INTO lv_message.
me->go_log->add_symsg( ).
ENDIF.
ENDLOOP.
IF sy-subrc = 4 .
MESSAGE s004(zre7) INTO lv_message.
me->go_log->add_symsg( ).
ENDIF.
IF lt_processed IS NOT INITIAL.
" TODO: remember to enable after tests!
me->clean_buffer( lt_processed ).
ENDIF.
IF lines( lt_processed ) <> lines( me->buffer ).
MESSAGE w002(zre7) INTO lv_message.
me->go_log->add_symsg( ).
ENDIF.
* >>> update status in STA table
me->commit_changes( ).
ENDMETHOD.
METHOD process_building.
DATA: lt_return TYPE TABLE OF bapiret2,
lt_measurement TYPE TABLE OF bapi_re_measurement_datc,
ls_meas_change LIKE LINE OF lt_measurement.
DATA: lv_test_run TYPE abap_bool VALUE abap_false.
DATA: bukrs TYPE bukrs,
swenr TYPE swenr,
sgenr TYPE sgenr
,
lv_message TYPE string.
FIELD-SYMBOLS <ls_meas> TYPE LINE OF re_t_rebd_meas.
* check if line not deleted (look for measurement W0001 with value 0)
* check if measurement exists (for validity period)
* -> close measurement by setting valid_to = 31.12.YYYY (YYYY from me->window_end_date)
* -> if valid_from > new_valid_to
* -> report error
*
* insert new measurement: value = value, valid_from = 01.01.YYYY+1 (YYYY from me->window_end_date)
me->calc_valid_period_for_building( IMPORTING valid_from = DATA(lv_validfrom) ).
DATA(building_details) = building_obj->get_detail( ).
bukrs = building_details-bukrs.
swenr = building_details-swenr.
sgenr = building_details-sgenr.
* data(building_desc_key) = bukrs && '/' && swenr && '/' && sgenr.
DATA(lo_meas_mngr) = building_obj->get_meas_mngr( ).
" get measurements for buildng
CALL METHOD lo_meas_mngr->get_list
EXPORTING
if_fix_periods = abap_true
IMPORTING
et_list = DATA(lt_meas).
* --------------------
* processing..
* --------------------
" check if deleted
LOOP AT lt_meas ASSIGNING <ls_meas>
WHERE meas = zcl_re7_upd_ctrl=>gc_deleted_m_type AND measvalue = zcl_re7_upd_ctrl=>gc_deleted_m_value.
IF <ls_meas>-validfrom <= lv_validfrom AND <ls_meas>-validto >= lv_validfrom.
MESSAGE w012(zre7) WITH bukrs && '/' && swenr && '/' && sgenr INTO lv_message.
me->go_log->add_symsg( ).
RETURN. " building deleted, not to be processed
ENDIF.
ENDLOOP.
" look for existing, open or overlapping measurements, that need to be closed first
LOOP AT lt_meas ASSIGNING <ls_meas>
WHERE validto >= lv_validfrom
AND meas = me->m_type.
IF <ls_meas>-validfrom < lv_validfrom.
CLEAR ls_meas_change.
ls_meas_change-change_indicator = 'U'.
ls_meas_change-measurement = <ls_meas>-meas.
ls_meas_change-valid_from = <ls_meas>-validfrom.
ls_meas_change-valid_to = lv_validfrom - 1.
ls_meas_change-value_avail = <ls_meas>-measvalue.
APPEND ls_meas_change TO lt_measurement.
ENDIF.
ENDLOOP.
* insert new value
CLEAR ls_meas_change.
ls_meas_change-change_indicator = 'I'.
ls_meas_change-measurement = me->m_type.
ls_meas_change-valid_from = lv_validfrom.
ls_meas_change-valid_to = zcl_re7_storage_gateway=>gc_max_date.
ls_meas_change-value_avail = value.
APPEND ls_meas_change TO lt_measurement.
* Update measurements for building
CALL FUNCTION 'BAPI_RE_BU_CHANGE'
EXPORTING
compcode = bukrs
businessentitynumber = swenr
buildingnumber = sgenr
test_run = lv_test_run
TABLES
measurement = lt_measurement
return = lt_return.
IF lt_return IS NOT INITIAL.
LOOP AT lt_return TRANSPORTING NO FIELDS
WHERE type CA 'EAX'.
* raise exception with bapiret
DATA(lo_exception) = zcx_re1_exception=>create( ).
lo_exception->add_bapiret(
EXPORTING
it_message = lt_return
).
RAISE EXCEPTION lo_exception.
ENDLOOP.
* log success
me->fill_log_from_bapiret2( lt_return ).
ENDIF.
ENDMETHOD.
METHOD read_buffer.
zcl_re7_storage_gateway=>read_buffer( EXPORTING m_type = me->m_type ts = me->last_update_ts CHANGING buffer = me->buffer ).
ENDMETHOD.
METHOD setup_new_window_dates.
me->window_start_date = zcl_re7_upd_ctrl=>gen_next_window_start_date( obj_type = me->obj_type last_update_ts = me->last_update_ts ).
IF me->window_start_date IS INITIAL.
me->window_start_date = zcl_re7_upd_ctrl=>gen_init_window_start_date( window_end_date = me->window_end_date ).
ENDIF.
ENDMETHOD.
METHOD store_data_in_buffer.
me->buffer = zcl_re7_storage_gateway=>save_buffer(
m_type = me->m_type
ts = received_ts
buffer = received_data
window_start_date = window_start_date
window_end_date = window_end_date
).
ENDMETHOD.
ENDCLASS.`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions