Purpose
In this blog post I will show you how can you work this a new communication channel tool in order to start or stop a channel in SAP PO from a SAP ABAP Program.
My system
My System: SAP S/4HANA 1909 and SAP PO 7.5
SAP Note relevant
2691666 – How to extract PI Communication Channel list
Steps
1. You need to create a new program in the sap transaction SE38 as you can see in the developer system.
Write the name of the program, change the attributes/Type as “Executable program” and click on SAVE
In the following window you can select a Package and a transportation request or you just can select Local Object.
2. Paste the following code and activate it.
*&---------------------------------------------------------------------*
*& Report ZPO_TOOL_CHANNEL.
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&INFORMATION
*&WRICEF : 001
*&Program : ZPO_TOOL CHANNEL
*&Títle : ZPO_TOOL CHANNEL
*&Autor : Freddy Valderrama
*&Date : 26.04.2021 10:58:37
*&Description : Program for administration of communications channel of SAP PO, you can START or STOP a channel with double click in the name of channel.
*& with double click in the first four lines you can, stop all the channel, start all the channel,
*& download the current status or update with the previus saved status.
*&Prerequisites : it is necessary the communication channel has the control data in the communication channel monitor in External
*&*************************************************************************
REPORT ZPO_TOOL_CHANNEL.
INCLUDE <icon>.
INCLUDE <symbol>.
DATA: v_url TYPE string,
client TYPE REF TO if_http_client.
DATA: response_code TYPE sysubrc,
response_text TYPE string.
DATA: fields_tab TYPE tihttpnvp,
status_code TYPE string,
status_reason TYPE string,
number TYPE i.
DATA: w_result TYPE string,
result_tab TYPE TABLE OF string,
result_wa LIKE LINE OF result_tab.
DATA : lv_file_string TYPE xstring,
te_t_xml_data TYPE TABLE OF smum_xmltb,
te_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA: BEGIN OF ls_w_zgraymarketinfo ,
party TYPE string,
service TYPE string,
channelname TYPE string,
adaptertype TYPE string,
channelstate TYPE string,
activationstate TYPE string,
color TYPE lvc_t_scol,
END OF ls_w_zgraymarketinfo.
DATA: BEGIN OF ls_w_zgraymarketinfos ,
party TYPE string,
service TYPE string,
channelname TYPE string,
adaptertype TYPE string,
channelstate TYPE string,
activationstate TYPE string,
END OF ls_w_zgraymarketinfos.
DATA: te_t_zgraymarketinfo LIKE STANDARD TABLE OF ls_w_zgraymarketinfo,
te_t_zgraymarketinfo2 LIKE STANDARD TABLE OF ls_w_zgraymarketinfo,
te_t_zgraymarketinfos LIKE STANDARD TABLE OF ls_w_zgraymarketinfos,
ls_s_zgraymarketinfo LIKE ls_w_zgraymarketinfo.
DATA :xml_table TYPE TABLE OF smum_xmltb,
ls_xml_table TYPE smum_xmltb,
return TYPE TABLE OF bapiret2.
DATA gr_table TYPE REF TO cl_salv_table.
DATA functions TYPE REF TO cl_salv_functions_list.
DATA: l_text TYPE string,
l_icon TYPE string.
DATA g_dsp TYPE REF TO cl_salv_display_settings.
DATA gr_columns TYPE REF TO cl_salv_columns_table.
DATA column TYPE REF TO cl_salv_column.
DATA lo_sorts TYPE REF TO cl_salv_sorts.
DATA: ls_color TYPE lvc_s_scol.
DATA: lr_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key,
l_repid TYPE sy-repid.
DATA: lr_columns TYPE REF TO cl_salv_columns.
DATA: lr_display TYPE REF TO cl_salv_display_settings.
DATA: gr_layout TYPE REF TO cl_salv_layout.
DATA: key TYPE salv_s_layout_key.
DATA: lo_header TYPE REF TO cl_salv_form_layout_grid,
lo_h_label TYPE REF TO cl_salv_form_label,
lo_h_flow TYPE REF TO cl_salv_form_layout_flow.
DATA lv_lines TYPE i.
DATA s_slddest TYPE sld_s_accessdata_display.
DATA: lv_start TYPE string VALUE 'START'.
DATA: lv_stop TYPE string VALUE 'STOP'.
DATA: lv_download TYPE string VALUE 'DOWNLOAD'.
DATA: lv_upload TYPE string VALUE 'UPLOAD AND ***UPDATE***'.
DEFINE titulo.
&2 = &1->get_column( &3 ).
&2->set_short_text( &4 ).
&2->set_medium_text( &5 ).
&2->set_long_text( &6 ).
&2->set_output_length( &7 ).
END-OF-DEFINITION.
DEFINE set_color.
ls_color-fname = &1.
ls_color-color-col = &2.
ls_color-color-int = &3.
ls_color-color-inv = &4.
APPEND ls_color TO ls_w_zgraymarketinfo-color.
END-OF-DEFINITION.
CLASS lcl_datos DEFINITION.
PUBLIC SECTION.
METHODS:
on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function,
double_click
FOR EVENT double_click OF cl_salv_events_table
IMPORTING row.
ENDCLASS.
DATA lr_events TYPE REF TO cl_salv_events_table.
DATA gr_events TYPE REF TO lcl_datos.
CLASS lcl_datos IMPLEMENTATION.
METHOD double_click.
DATA lv_strig0 TYPE string.
DATA lv_strig TYPE string.
DATA lv_new_state TYPE string.
DATA: ls_is_stable TYPE lvc_s_stbl.
DATA: gd_nom_archivo TYPE string,
ld_filename TYPE string,
ld_path TYPE string,
ld_fullpath TYPE string,
ld_result TYPE i.
DATA: BEGIN OF gs_line_salida,
line TYPE string,
END OF gs_line_salida.
DATA gt_line_salida LIKE TABLE OF gs_line_salida.
DATA ti_file TYPE filetable.
DATA wa_file TYPE LINE OF filetable.
CONSTANTS: lv_stop(7) VALUE 'STOP'.
CONSTANTS: lv_start(7) VALUE 'START'.
CHECK row IS NOT INITIAL.
READ TABLE te_t_zgraymarketinfo INTO ls_w_zgraymarketinfo INDEX row.
CASE ls_w_zgraymarketinfo-service.
WHEN lv_start.
lv_strig = ' ?'.
lv_strig0 = '¿Alert!!!: Do you want to "' && lv_start && '" all channels'.
lv_new_state = lv_start.
PERFORM ask_change_mass USING lv_strig0 lv_strig lv_new_state row.
WHEN lv_stop.
lv_strig = ' ?'.
lv_strig0 = '¿Alert!!!: Do you want to "' && lv_stop && '" all channels'.
lv_new_state = lv_stop.
PERFORM ask_change_mass USING lv_strig0 lv_strig lv_new_state row.
WHEN lv_download.
gd_nom_archivo = 'Backup_Tool_Channel_' && sy-datum && '-' && sy-uzeit && '.txt'.
* Display save dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Download File with all Channels'
default_extension = 'txt'
file_filter = '(*.txt)'
default_file_name = gd_nom_archivo
initial_directory = 'c:\'
CHANGING
filename = ld_filename
path = ld_path
fullpath = ld_fullpath
user_action = ld_result.
gd_nom_archivo = ld_fullpath.
CLEAR te_t_zgraymarketinfos[].
LOOP AT te_t_zgraymarketinfo INTO ls_w_zgraymarketinfo.
MOVE-CORRESPONDING ls_w_zgraymarketinfo TO ls_w_zgraymarketinfos.
APPEND ls_w_zgraymarketinfos TO te_t_zgraymarketinfos.
ENDLOOP.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = gd_nom_archivo
write_field_separator = 'X'
CHANGING
data_tab = te_t_zgraymarketinfos.
MESSAGE i398(00) WITH 'Was saved the file:' ld_filename.
WHEN lv_upload.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Select File'
default_filename = '*.txt'
multiselection = ''
CHANGING
file_table = ti_file
rc = ld_result.
READ TABLE ti_file INTO wa_file INDEX 1.
CHECK sy-subrc IS INITIAL.
gd_nom_archivo = wa_file-filename.
CLEAR te_t_zgraymarketinfos[].
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = gd_nom_archivo
has_field_separator = 'X'
CHANGING
data_tab = te_t_zgraymarketinfos
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF te_t_zgraymarketinfos[] IS INITIAL.
MESSAGE i398(00) WITH 'Error or File Empty...'.
ELSE.
lv_strig = ''.
lv_strig0 = '¿Alert!!!: Do you want to UPDATE all channels ?'.
PERFORM ask_change_mass_update USING lv_strig0 lv_strig lv_new_state row.
ENDIF.
WHEN OTHERS.
IF ls_w_zgraymarketinfo-activationstate EQ 'STARTED'.
lv_strig = ls_w_zgraymarketinfo-channelname && ' ?'.
lv_strig0 = '¿Do you want to "' && lv_stop && '" the channel:'.
lv_new_state = lv_stop.
ELSE.
lv_strig = ls_w_zgraymarketinfo-channelname && ' ?'.
lv_strig0 = '¿Do you want to "' && lv_start && '" the channel:'.
lv_new_state = lv_start.
ENDIF.
PERFORM ask_change USING lv_strig0 lv_strig lv_new_state row.
ENDCASE.
ls_is_stable-row = 'X'.
ls_is_stable-col = 'X'.
CALL METHOD gr_table->refresh
EXPORTING
s_stable = ls_is_stable.
ENDMETHOD. "on_double_click
METHOD on_user_command.
ENDMETHOD.
ENDCLASS. "lcl_event_handler IMPLEMENTATION
PARAMETERS: host TYPE string. "" DEFAULT 'SAPPOD'.
PARAMETERS: port TYPE string. "" DEFAULT '50000'.
PARAMETERS: user TYPE string DEFAULT sy-uname.
PARAMETERS: password TYPE string LOWER CASE OBLIGATORY.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'PASSWORD'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
IF host IS INITIAL.
CALL FUNCTION 'SLDAPI_GET_PRIMARY_DEST'
IMPORTING
dest = s_slddest
EXCEPTIONS
no_primary_available = 1.
host = s_slddest-host.
port = s_slddest-port.
ENDIF.
START-OF-SELECTION.
v_url = 'http://' && host &&':' && port && '/AdapterFramework/ChannelAdminServlet?party=*&service=*&channel=*&action=STATUS'.
PERFORM call_service.
PERFORM move_data.
END-OF-SELECTION.
IF te_t_zgraymarketinfo[] IS NOT INITIAL.
PERFORM call_alv.
ELSE.
MESSAGE i398(00) WITH 'No CC found...'.
ENDIF.
FORM call_service.
CLEAR client.
CALL METHOD cl_http_client=>create
EXPORTING
host = host
service = port
IMPORTING
client = client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
*set header fields
CALL METHOD client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.
CALL METHOD client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = 'application/xml'.
""*; charset=utf-8′ .
*Set request protocol
CALL METHOD client->request->set_header_field
EXPORTING
name = '~server_protocol'
value = 'HTTP/1.0'.
*Update url
CALL METHOD client->request->set_header_field
EXPORTING
name = '~request_uri'
value = v_url.
*Disable logon popup
client->propertytype_logon_popup = client->co_disabled.
CALL METHOD client->authenticate
EXPORTING
username = user
password = password.
cl_http_utility=>set_request_uri( request = client->request uri = response_text ).
*Send http request to server
CALL METHOD client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc <> 0.
CALL METHOD client->get_last_error
IMPORTING
code = response_code
message = response_text.
MESSAGE i000(sr) WITH response_text.
EXIT.
ENDIF.
*Get http response from server
CALL METHOD client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc <> 0.
CALL METHOD client->get_last_error
IMPORTING
code = response_code
message = response_text.
status_code = client->response->get_header_field( '~status_code' ).
status_reason = client->response->get_header_field( '~status_reason' ).
CONCATENATE response_text '(' status_code status_reason ')'
INTO status_reason SEPARATED BY space.
MESSAGE i000(sr) WITH status_reason.
EXIT.
ENDIF.
CLEAR: w_result.
w_result = client->response->get_cdata( ).
REFRESH result_tab.
SPLIT w_result AT cl_abap_char_utilities=>newline INTO TABLE result_tab.
CLEAR lv_file_string.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = w_result
IMPORTING
buffer = lv_file_string
EXCEPTIONS
failed = 1
OTHERS = 2.
CLEAR: xml_table[], te_return[].
CALL FUNCTION 'SMUM_XML_PARSE'
EXPORTING
xml_input = lv_file_string
TABLES
xml_table = xml_table
return = te_return.
IF te_return[] IS NOT INITIAL.
READ TABLE te_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc IS INITIAL.
MESSAGE i398(00) WITH 'ERROR: with parameters or credentials...'.
STOP.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MOVE_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM move_data .
LOOP AT xml_table INTO ls_xml_table.
ASSIGN COMPONENT ls_xml_table-cname OF STRUCTURE ls_w_zgraymarketinfo TO FIELD-SYMBOL(<fs_val>).
IF sy-subrc IS INITIAL AND <fs_val> IS ASSIGNED.
<fs_val> = ls_xml_table-cvalue.
ENDIF.
IF ls_xml_table-cname EQ 'Control'.
IF ls_w_zgraymarketinfo-activationstate EQ 'STARTED'.
set_color 'ACTIVATIONSTATE' 5 0 0.
ELSE.
set_color 'ACTIVATIONSTATE' 6 0 0.
ENDIF.
IF ls_w_zgraymarketinfo-channelstate EQ 'OK'.
set_color 'CHANNELSTATE' 5 0 0.
ELSEIF ls_w_zgraymarketinfo-channelstate EQ 'ERROR'.
set_color 'CHANNELSTATE' 6 0 0.
ELSE.
set_color 'CHANNELSTATE' 7 0 0.
ENDIF.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo2.
CLEAR ls_w_zgraymarketinfo.
ENDIF.
ENDLOOP.
PERFORM add_double_click_to.
SORT te_t_zgraymarketinfo2 BY party service channelname.
LOOP AT te_t_zgraymarketinfo2 INTO ls_w_zgraymarketinfo.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALL_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM call_alv .
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = te_t_zgraymarketinfo[].
CATCH cx_salv_msg .
ENDTRY.
functions = gr_table->get_functions( ).
functions->set_all( abap_true ).
g_dsp = gr_table->get_display_settings( ).
g_dsp->set_striped_pattern( abap_true ).
gr_columns = gr_table->get_columns( ).
gr_columns->set_color_column( 'COLOR' ).
titulo gr_columns column 'PARTY' 'PARTY' 'PARTY' 'PARTY' 20.
titulo gr_columns column 'SERVICE' 'SERVICE' 'SERVICE' 'SERVICE' 30.
titulo gr_columns column 'CHANNELNAME' 'CHANNEL' 'CHANNEL' 'CHANNEL' 40.
titulo gr_columns column 'ADAPTERTYPE' 'TYPE' 'TYPE' 'TYPE' 10.
titulo gr_columns column 'ACTIVATIONSTATE' 'START/STOP' 'STARTED/STOPPED' 'STARTED/STOPPED' 20.
titulo gr_columns column 'CHANNELSTATE' 'OK/ERR/INA' 'OK/ERROR/INACTIVE' 'OK/ERROR/INACTIVE' 20.
key-report = sy-repid.
gr_layout = gr_table->get_layout( ).
gr_layout->set_key( key ).
gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
CREATE OBJECT lo_header.
* Information in Bold
lo_h_label = lo_header->create_label( row = 1 column = 1 ).
lo_h_label->set_text('Comunication Channel Tool V 1.0').
* Information in tabular format
lo_h_flow = lo_header->create_flow( row = 2 column = 1 ).
lo_h_flow->create_text( text = 'CC Total:' ).
lo_h_flow = lo_header->create_flow( row = 2 column = 2 ).
lv_lines = lines( te_t_zgraymarketinfo ).
lo_h_flow->create_text( text = lv_lines ).
lo_h_flow = lo_header->create_flow( row = 3 column = 1 ).
lo_h_flow->create_text( text = 'Date of List Generation' ).
lo_h_flow = lo_header->create_flow( row = 3 column = 2 ).
lo_h_flow->create_text( text = sy-datum ).
* Set the top of list using the header for Online
gr_table->set_top_of_list( lo_header ).
* Set the top of list using the header for Print
gr_table->set_top_of_list_print( lo_header ).
lr_events = gr_table->get_event( ).
CREATE OBJECT gr_events.
** double click
SET HANDLER gr_events->double_click FOR lr_events.
gr_table->display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ASK_CHANGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM ask_change USING lv_strig lv_strig2 lv_new_state row.
DATA lv_response.
CLEAR lv_response.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = lv_strig
textline2 = lv_strig2
titel = 'Update Information?'
start_column = 35
start_row = 6
IMPORTING
answer = lv_response.
IF lv_response = 'J'. "Yes
v_url = 'http://' && host &&':' && port && '/AdapterFramework/ChannelAdminServlet?party=' && ls_w_zgraymarketinfo-party
&& '&service=' && ls_w_zgraymarketinfo-service && '&channel=' && ls_w_zgraymarketinfo-channelname && '&action=' && lv_new_state.
PERFORM call_service.
READ TABLE xml_table INTO ls_xml_table WITH KEY cname = 'ActivationState'.
IF lv_new_state EQ 'STOP'.
IF ls_xml_table-cvalue EQ 'STOPPED'.
MESSAGE i398(00) WITH 'Channel:' ls_w_zgraymarketinfo-channelname ',was updated successful.'.
ELSE.
MESSAGE i398(00) WITH 'Channel:' ls_w_zgraymarketinfo-channelname ',was not updated.'.
ENDIF.
ELSE.
IF ls_xml_table-cvalue EQ 'STARTED'.
MESSAGE i398(00) WITH 'Channel:' ls_w_zgraymarketinfo-channelname ',was updated successful.'.
ELSE.
MESSAGE i398(00) WITH 'Channel:' ls_w_zgraymarketinfo-channelname ',was not updated.'.
ENDIF.
ENDIF.
ls_w_zgraymarketinfo-activationstate = ls_xml_table-cvalue.
DELETE ls_w_zgraymarketinfo-color WHERE fname EQ 'ACTIVATIONSTATE'.
IF ls_w_zgraymarketinfo-activationstate EQ 'STARTED'.
set_color 'ACTIVATIONSTATE' 5 0 0.
ELSE.
set_color 'ACTIVATIONSTATE' 6 0 0.
ENDIF.
MODIFY te_t_zgraymarketinfo FROM ls_w_zgraymarketinfo INDEX row.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ASK_CHANGE_MASS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM ask_change_mass USING lv_strig lv_strig2 lv_new_state row.
DATA lv_response.
DATA lv_updated TYPE i.
DATA lv_error TYPE i.
CLEAR: lv_response, lv_updated, lv_error.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = lv_strig
textline2 = lv_strig2
titel = 'Update Information?'
start_column = 35
start_row = 6
IMPORTING
answer = lv_response.
IF lv_response = 'J'. "Yes
LOOP AT te_t_zgraymarketinfo INTO ls_w_zgraymarketinfo WHERE party NE 'DOUBLE CLICK TO'.
row = sy-tabix.
v_url = 'http://' && host &&':' && port && '/AdapterFramework/ChannelAdminServlet?party=' && ls_w_zgraymarketinfo-party
&& '&service=' && ls_w_zgraymarketinfo-service && '&channel=' && ls_w_zgraymarketinfo-channelname && '&action=' && lv_new_state.
PERFORM call_service.
READ TABLE xml_table INTO ls_xml_table WITH KEY cname = 'ActivationState'.
IF lv_new_state EQ 'STOP'.
IF ls_xml_table-cvalue EQ 'STOPPED'.
ADD 1 TO lv_updated.
ELSE.
ADD 1 TO lv_error.
ENDIF.
ELSE.
IF ls_xml_table-cvalue EQ 'STARTED'.
ADD 1 TO lv_updated.
ELSE.
ADD 1 TO lv_error.
ENDIF.
ENDIF.
ls_w_zgraymarketinfo-activationstate = ls_xml_table-cvalue.
DELETE ls_w_zgraymarketinfo-color WHERE fname EQ 'ACTIVATIONSTATE'.
IF ls_w_zgraymarketinfo-activationstate EQ 'STARTED'.
set_color 'ACTIVATIONSTATE' 5 0 0.
ELSE.
set_color 'ACTIVATIONSTATE' 6 0 0.
ENDIF.
MODIFY te_t_zgraymarketinfo FROM ls_w_zgraymarketinfo INDEX row.
ENDLOOP.
MESSAGE i398(00) WITH lv_updated ': was updated successful AND ' lv_error ': finished with Error:'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ASK_CHANGE_MASS_UPDATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM ask_change_mass_update USING lv_strig lv_strig2 lv_new_state row.
DATA lv_response.
DATA lv_updated TYPE i.
DATA lv_error TYPE i.
CLEAR lv_response.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = lv_strig
textline2 = lv_strig2
titel = 'Update Information?'
start_column = 35
start_row = 6
IMPORTING
answer = lv_response.
IF lv_response = 'J'. "Yes
CLEAR: te_t_zgraymarketinfo[], lv_updated, lv_error.
DELETE te_t_zgraymarketinfos WHERE party EQ 'DOUBLE CLICK TO'.
PERFORM add_double_click_to.
LOOP AT te_t_zgraymarketinfos INTO ls_w_zgraymarketinfos.
CLEAR ls_w_zgraymarketinfo.
MOVE-CORRESPONDING ls_w_zgraymarketinfos TO ls_w_zgraymarketinfo.
IF ls_w_zgraymarketinfo-activationstate EQ 'STARTED'.
lv_new_state = lv_start.
ELSE.
lv_new_state = lv_stop.
ENDIF.
v_url = 'http://' && host &&':' && port && '/AdapterFramework/ChannelAdminServlet?party=' && ls_w_zgraymarketinfo-party
&& '&service=' && ls_w_zgraymarketinfo-service && '&channel=' && ls_w_zgraymarketinfo-channelname && '&action=' && lv_new_state.
PERFORM call_service.
READ TABLE xml_table INTO ls_xml_table WITH KEY cname = 'ActivationState'.
IF lv_new_state EQ 'STOP'.
IF ls_xml_table-cvalue EQ 'STOPPED'.
ADD 1 TO lv_updated.
ELSE.
ADD 1 TO lv_error.
ENDIF.
ELSE.
IF ls_xml_table-cvalue EQ 'STARTED'.
ADD 1 TO lv_updated.
ELSE.
ADD 1 TO lv_error.
ENDIF.
ENDIF.
ls_w_zgraymarketinfo-activationstate = ls_xml_table-cvalue.
DELETE ls_w_zgraymarketinfo-color WHERE fname EQ 'ACTIVATIONSTATE'.
IF ls_w_zgraymarketinfo-activationstate EQ 'STARTED'.
set_color 'ACTIVATIONSTATE' 5 0 0.
ELSE.
set_color 'ACTIVATIONSTATE' 6 0 0.
ENDIF.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo.
ENDLOOP.
MESSAGE i398(00) WITH lv_updated ': was updated successful AND ' lv_error ': finished with Error:'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_DOUBLE_CLICK_TO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM add_double_click_to .
CLEAR ls_w_zgraymarketinfo.
set_color 'PARTY' 5 0 0.
set_color 'SERVICE' 5 0 0.
set_color 'CHANNELNAME' 5 0 0.
set_color 'ADAPTERTYPE' 5 0 0.
set_color 'ACTIVATIONSTATE' 5 0 0.
set_color 'CHANNELSTATE' 5 0 0.
ls_w_zgraymarketinfo-party = 'DOUBLE CLICK TO'.
ls_w_zgraymarketinfo-service = lv_start.
ls_w_zgraymarketinfo-channelname = 'ALL CHANNEL'.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo.
CLEAR ls_w_zgraymarketinfo.
set_color 'PARTY' 6 0 0.
set_color 'SERVICE' 6 0 0.
set_color 'CHANNELNAME' 6 0 0.
set_color 'ADAPTERTYPE' 6 0 0.
set_color 'ACTIVATIONSTATE' 6 0 0.
set_color 'CHANNELSTATE' 6 0 0.
ls_w_zgraymarketinfo-party = 'DOUBLE CLICK TO'.
ls_w_zgraymarketinfo-service = lv_stop.
ls_w_zgraymarketinfo-channelname = 'ALL CHANNEL'.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo.
CLEAR ls_w_zgraymarketinfo.
set_color 'PARTY' 4 1 0.
set_color 'SERVICE' 4 1 0.
set_color 'CHANNELNAME' 4 1 0.
set_color 'ADAPTERTYPE' 4 1 0.
set_color 'ACTIVATIONSTATE' 4 1 0.
set_color 'CHANNELSTATE' 4 1 0.
ls_w_zgraymarketinfo-party = 'DOUBLE CLICK TO'.
ls_w_zgraymarketinfo-service = lv_download.
ls_w_zgraymarketinfo-channelname = 'ALL CHANNEL'.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo.
CLEAR ls_w_zgraymarketinfo.
set_color 'PARTY' 3 1 0.
set_color 'SERVICE' 3 1 0.
set_color 'CHANNELNAME' 3 1 0.
set_color 'ADAPTERTYPE' 3 1 0.
set_color 'ACTIVATIONSTATE' 3 1 0.
set_color 'CHANNELSTATE' 3 1 0.
ls_w_zgraymarketinfo-party = 'DOUBLE CLICK TO'.
ls_w_zgraymarketinfo-service = lv_upload.
ls_w_zgraymarketinfo-channelname = 'ALL CHANNEL'.
APPEND ls_w_zgraymarketinfo TO te_t_zgraymarketinfo.
ENDFORM.
3. You can now run the program.
The program take the name of SAP PO, port and the user from the configuration as you can see, just write you private password.
If all is OK you can see the list with the complete details of the communication channel.
You can see the C.C Total in SAP PO and their Status.
- If you do double click at one channel you will get a message from the system in order to reject or approver the change of status.
- If you do double click at the first green line you will get a message in order to reject or approver starting all the Communication Channels.
- If you do double click at the second red line you will get a message in order to reject or approver stopping all the Communication Channels.
- If you do double click at the their blue line you will download the current status of the all channel in order save it as backup and you can update this same status in the future.
- If you do double click at the yellow line you will upload and update the previous status downloaded.
Prerequisites
It is necessary the communication channel has the
control data in the communication channel monitor in External
Configuration and Monitoring Home / Monitoring / Communication Channel Monitor