Professional Documents
Culture Documents
Source Code:
METHOD if_ex_isu_ami_send_mr~trigger_send_mr.
*&---------------------------------------------------------------------*
*& *
*& Method - ZCL_ISU_AMI_SEND_MR~TRIGGER_SEND_MR *
************************************************************************
* PROJECT : AMI *
* OBJECT NAME : ZCL_ISU_AMI_SEND_MR~TRIGGER_SEND_MR *
* OBJECT Type : Badi Implementation Class *
* DATE OF CREATION : 24-Sep-2018 *
* DEVELOPER : Saurabh Roy *
* FUNCTIONAL OWNER : Venkat *
* TECHNICAL SPEC NO. : *
* DESCRIPTION : Triggers AMI MR Results *
* TRANSPORT REQUEST : RD1K981135 *
************************************************************************
************************************************************************
* MODIFICATIONS LOG : *
************************************************************************
* DATE REQUEST NO. DEVELOPER DESCRIPTION OF CHANGES *
* -------- ---------- ------------- ----------------------- *
* 29.05.19 RD1K984206 Karteek Katta Commented clearing memory ID
*
************************************************************************
ENDMETHOD.
Authorization Object:
Source Code:
METHOD if_ex_isu_ami_attr_mr~set_attr_mr_changing.
*&---------------------------------------------------------------------*
*
************************************************************************
* DATE REQUEST NO. DEVELOPER DESCRIPTION OF CHANGES *
* -------- ---------- ------------- ----------------------- *
* 19/03/2019 RD1K983067 Karteek Katta To disable MR entry to *
* unauthorized user *
************************************************************************
WHEN 'EL28'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EG31'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EG32'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EG30'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EL29'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '02'.
WHEN 'EL27'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '03'.
IF sy-subrc NE 0.
* No Authorization for Display
MESSAGE e020(zdm) DISPLAY LIKE 'I'.
* No Authorization to perform activity - Smart Meter
RETURN.
ENDIF.
WHEN 'EG42'.
IF sy-subrc NE 0.
* No Authorization for Display
* MESSAGE 'No Authorization to perform activity' TYPE 'E' DISPLAY LIKE
'I'.
* MESSAGE 'No Authorization to perform activity' TYPE 'S' DISPLAY LIKE
'E'.
* RETURN.
DATA(lv_unauthorized) = abap_true.
ENDIF.
WHEN 'EC50E'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EC85'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EC86'.
WHEN 'EC87'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '01'.
WHEN 'EL37'.
AUTHORITY-CHECK OBJECT 'ZAMI_MR' ID 'ACTVT' FIELD '06'.
WHEN OTHERS.
ENDCASE.
IF sy-subrc NE 0.
ENDMETHOD.
Step 3: Enhancement to send Manual meter reads to MDM using the standard WS
for all meter read reasons.
METHOD lcl_get_mrdr_for_send.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""$"$\SE:(1) Class CL_ISU_AMI_MRR_MANAGER, Method LCL_GET_MRDR_
FOR_SEND, Start
A
*$*$-Start: (1)--------------------------------------------------------------
-------------------$*$*
ENHANCEMENT 1 Z_SEND_MR_RESULTS_EL28. "active version
*if sy-tcode = 'EL28'.
* Enhanced to trigger meter reading result web service for meter reading reas
ons defined by customer
return.
*endif.
ENDENHANCEMENT.
*$*$-End: (1)--------------------------------------------------------------
-------------------$*$*
INCLUDE: ielablgr,
ielablst.
* local tables
DATA: lt_ins_eabl_send TYPE eabl_tab, "inserted mr results eligible fo
r send
lt_upd_eabl_send TYPE eabl_tab, "updated mr results eligible for
send
lt_ins_eabl_trig_send TYPE eabl_tab, "inserted mr results to trigger
send
lt_upd_eabl_trig_send TYPE eabl_tab, "updated mr results to trigger s
end
lt_ins_eabl TYPE eabl_tab, "inserted mr results not sent
lt_change_eabl_send TYPE eabl_tab, "changed mr results for send
lt_upd_eabl TYPE eabl_tab, "updated mr results not sent
lt_eablg TYPE eablg_tab.
* local workareas
DATA: lw_ins_eabl_send TYPE eabl, "inserted mr result eligible for se
nd
lw_upd_eabl_send TYPE eabl, "updated mr result eligible for sen
d
lw_ins_eabl_trig_send TYPE eabl, "inserted mr result to trigger send
lw_upd_eabl_trig_send TYPE eabl, "updated mr result to trigger send
lw_db_eabl TYPE eabl, "db mr result
lw_eabl TYPE eabl, "generic mr result workarea for loo
ps
lw_ablesgr TYPE eablg. "meter reading reason
* local variables
DATA: lv_send_relevant_change TYPE regen-
kennzx, "mr result change is send relevant
lv_create_sent TYPE regen-
kennzx. "create was already sent according to ami monitoring
lt_eablg = xt_eablg.
DELETE lt_eablg WHERE ablesgr NE co_gr_einbau AND
ablesgr NE co_gr_ausbau AND
ablesgr NE co_gr_zuordg AND
ablesgr NE co_gr_zuordd AND
ablesgr NE co_gr_weeinb AND
ablesgr NE co_gr_weausb.
* determine valid updated meter reading results for installation, removal and
replacement
LOOP AT xt_upd_eabl INTO lw_eabl.
LOOP AT lt_eablg INTO lw_ablesgr WHERE ablbelnr = lw_eabl-ablbelnr.
IF lw_eabl-ablstat CA co_as_valid AND (
lw_ablesgr-ablesgr = co_gr_einbau OR
lw_ablesgr-ablesgr = co_gr_ausbau OR
lw_ablesgr-ablesgr = co_gr_zuordg OR
lw_ablesgr-ablesgr = co_gr_zuordd OR
lw_ablesgr-ablesgr = co_gr_weeinb ).
READ TABLE xt_db_eabl INTO lw_db_eabl WITH KEY ablbelnr = lw_eabl-
ablbelnr.
IF lw_db_eabl-ablstat NE co_as_vorbereitet AND
lw_db_eabl-transstat = co_systat_iu109 OR
lw_db_eabl-transstat = co_systat_iu110 OR
lw_db_eabl-transstat = co_systat_iu111 OR
lw_db_eabl-transstat = co_systat_iu112.
* meter reading result valid for sending change
* check if send relevant fields have been changed
CALL METHOD cl_isu_ami_mrr_manager=>lcl_check_change_send_relevant
EXPORTING
x_eabl_changed = lw_eabl
x_eabl_db = lw_db_eabl
IMPORTING
y_send_relevant_change = lv_send_relevant_change.
IF lv_send_relevant_change = abap_true.
APPEND lw_eabl TO lt_change_eabl_send.
ENDIF.
EXIT.
ELSE.
* it is not possible to determine based on the meter reading document
whether a
* create service was sent out already or not e.g. in case it was chan
ged in the meantime
* to implausible (not sent relevant) transmission status was set to I
U200 (manual entry)
* the only possibility is to check in ami monitoring if a create serv
ice was already
* sent for this meter reading document result
CALL METHOD cl_isu_ami_mrr_manager=>lcl_check_mrdr_create_amimon
EXPORTING
x_ablbelnr = lw_eabl-ablbelnr
IMPORTING
y_create_sent = lv_create_sent.
IF lv_create_sent = abap_true.
* meter reading result valid for sending change since create was se
nt before according to ami monitoring
* check if send relevant fields have been changed
CALL METHOD cl_isu_ami_mrr_manager=>lcl_check_change_send_relevan
t
EXPORTING
x_eabl_changed = lw_eabl
x_eabl_db = lw_db_eabl
IMPORTING
y_send_relevant_change = lv_send_relevant_change.
IF lv_send_relevant_change = abap_true.
APPEND lw_eabl TO lt_change_eabl_send.
ENDIF.
EXIT.
ELSE.
* meter reading result valid for sending create since no create ser
vice was sent before according to ami monitoring
APPEND lw_eabl TO lt_upd_eabl_send.
EXIT. "make sure mr result is only added once in case it has more
than one eligible mr reason
ENDIF.
ENDIF.
ELSE.
* meter reading result not valid for sending
APPEND lw_eabl TO lt_upd_eabl.
EXIT. "make sure mr result is only added once in case it has more tha
n one mr reason
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
* meter reading result not valid for sending
APPEND lw_eabl TO lt_upd_eabl.
ENDIF.
ENDLOOP.
TRY.
GET BADI obj_badi_isu_ami_send_mr.
* determine which meter reading results should be sent
CALL BADI obj_badi_isu_ami_send_mr->trigger_send_mr
EXPORTING
x_masterdata = x_masterdata
xt_eablg = xt_eablg
xt_ins_eabl_send = lt_ins_eabl_send
xt_upd_eabl_send = lt_upd_eabl_send
IMPORTING
yt_ins_eabl_trig_send = lt_ins_eabl_trig_send
yt_upd_eabl_trig_send = lt_upd_eabl_trig_send.
CATCH cx_badi_not_implemented.
* badi not implemented, no send of meter reading results neccessary
* still mr results must get new status so add them to table for later u
pdate
APPEND LINES OF lt_upd_eabl_send TO lt_upd_eabl.
APPEND LINES OF lt_ins_eabl_send TO lt_ins_eabl.
ENDTRY.
ENDIF.
yt_ins_eabl = lt_ins_eabl.
yt_upd_eabl = lt_upd_eabl.
yt_create_ins_eabl = lt_ins_eabl_trig_send.
yt_create_upd_eabl = lt_upd_eabl_trig_send.
yt_change_upd_eabl = lt_change_eabl_send.
ENDMETHOD.