Monday 22 September 2014

Workflow event Through report


REPORT  ZWF_EVENT.


DATA:
W_OBJTYPE TYPE SWR_STRUCT-OBJECT_TYP,
W_OBJKEY  TYPE SWR_STRUCT-OBJECT_KEY,
W_EVENT   TYPE SWR_STRUCT-EVENT.

W_OBJKEY = '1234'.

W_OBJTYPE = 'MTRREADDOC'.

W_EVENT = 'CREATED'.

CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
  EXPORTING
    OBJECT_TYPE             = W_OBJTYPE
    OBJECT_KEY              = W_OBJKEY
    EVENT                   = W_EVENT
   COMMIT_WORK             = 'X'
*   EVENT_LANGUAGE          = SY-LANGU
*   LANGUAGE                = SY-LANGU
*   USER                    = SY-UNAME
*   IFS_XML_CONTAINER       =
* IMPORTING
*   RETURN_CODE             =
*   EVENT_ID                =
* TABLES
*   INPUT_CONTAINER         =
*   MESSAGE_LINES           =
*   MESSAGE_STRUCT          =
          .

Monday 8 September 2014

Report for abap flow diagram

*&---------------------------------------------------------------------*
*& Report  ZFLOW_CHART
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZFLOW_CHART.



include lcnetdat. "allg. Datendeklarationen
include lcnetcon. "Konstanten
*----------------------------------------------------------------------*
* CLASS flow_chart DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class flow_chart definition.
public section.
 databegin of w_secs,
 progm type sy-cprog,
 type,
 name type string,
 start type i,
end type i,
end of w_secs,
 t_secs like standard table of w_secs,
begin of w_nodes,
id type i,
 type,
 name type string,
end of w_nodes,
 t_nodes like standard table of w_nodes,
begin of w_calls,
 start,
 type,
 calledby type string,
 ntype,
 name type string,
end of w_calls,
 t_calls like standard table of w_calls.
 data: l_comp type ref to cl_abap_compiler,
 t_result type scr_glrefs,
 w_result like line of t_result,
 t_secst like t_secs,
 l_match type i,
 t_ref type scr_refs,
 w_ref type line of scr_refs.
 data: t_cprog type standard table of sy-cprog,
 l_cprog type sy-cprog.
 data: t_prog type standard table of char255,
 l_prog type char255,
 l_evnt type string,
 t_stmt type standard table of sstmnt,
 l_stmt type sstmnt,
 t_strc type standard table of sstruc,
 l_strc type sstruc,
 l_tabix type i,
 t_tokn type standard table of stokes.
methods get_chart importing p_cprog type sy-cprog.
methods find_data importing p_start type string p_end type string. methods find_pattern importing p_full type string p_last type string p_type type string
  changing p_subrc type i.
methods get_data importing value(p_pos) type i value(p_ntype) type char01 value(p_name) type
string.
endclass"flow_chart DEFINITION
*----------------------------------------------------------------------*
* CLASS flow_chart IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class flow_chart implementation.
method get_chart.
call function 'RS_GET_ALL_INCLUDES'
exporting
program = p_cprog
 with_inactive_incls = 'X'
tables
 includetab = t_cprog
exceptions
 not_existent = 1
 no_program = 2
others = 3.
append p_cprog to t_cprog.
loop at t_cprog into l_cprog.
read report l_cprog into t_prog.
scan abap-source t_prog tokens into t_tokn statements into t_stmt structures into t_strc.
 w_secs-progm = l_cprog.
 w_secs-type = 'F'.
call method find_data
exporting
 p_start = 'FUNCTION'
 p_end = 'ENDFUNCTION'.
 w_secs-type = 'S'.
call method find_data
exporting
 p_start = 'FORM'
 p_end = 'ENDFORM'.
 w_secs-type = 'D'.
call method find_data
exporting
 p_start = 'MODULE'
 p_end = 'ENDMODULE'.
 w_secs-type = 'M'.
call method find_data
exporting
 p_start = 'METHOD'
 p_end = 'ENDMETHOD'.
 w_secs-type = 'E'.
loop at t_strc into l_strc where type = 'E'.
read table t_stmt into l_stmt with key number = l_strc-stmnt_from.
read table t_prog into l_prog index l_stmt-trow.
translate l_prog to upper case.
translate l_prog using '. '.
 w_secs-name = l_prog.
 w_secs-start = l_stmt-trow.
read table t_stmt into l_stmt with key number = l_strc-stmnt_to.
 w_secs-end = l_stmt-trow.
append w_secs to t_secs.
 endloop.
 endloopcreate object l_comp
exporting
 p_name = p_cprog.
call method l_comp->get_all_refs
exporting
 p_local = 'X'
importing
 p_result = t_result.
loop at t_result into w_result.
call method find_pattern
exporting
 p_full = '\PR:*\TY:*\ME:*'
 p_last = '\ME:'
 p_type = 'M'
changing
 p_subrc = l_match.
if l_match ne 0.
call method find_pattern
exporting
 p_full = '\TY:*\ME:*'
 p_last = '\ME:'
 p_type = 'C'
changing
 p_subrc = l_match.
if l_match ne 0.
call method find_pattern
exporting
 p_full = '\FU:*'
 p_last = '\FU:'
 p_type = 'F'
changing
 p_subrc = l_match.
if l_match ne 0.
call method find_pattern
exporting
 p_full = '\PR:*\FO:*'
 p_last = '\FO:'
 p_type = 'S'
changing
 p_subrc = l_match.
if l_match ne 0.
 continue.
 endif.
 endif.
 endif.
 endif.
refresh t_ref.
call method l_comp->get_single_ref
exporting
 p_full_name = w_result-full_name
 p_grade = 2
importing
 p_result = t_ref
exceptions
 syntax_error = 1
 object_not_found = 2
 ref_not_found = 3
 parameter_error = 4
others = 5. t_secst[] = t_secs[].
loop at t_ref into w_ref where grade ne 0.
loop at t_secst into w_secs where start <= w_ref-line and end >= w_ref-line and progm = w_ref-statement->source_info->name.
delete t_secst index sy-tabix.
 w_calls-type = w_secs-type.
 w_calls-calledby = w_secs-name.
append w_calls to t_calls.
 endloop.
 endloop.
clear w_calls.
 endloop.
 data: w_cald like w_calls.
loop at t_calls into w_calls.
 l_tabix = sy-tabix.
 w_nodes-type = w_calls-type.
 w_nodes-name = w_calls-calledby.
append w_nodes to t_nodes.
 w_nodes-type = w_calls-ntype.
 w_nodes-name = w_calls-name.
append w_nodes to t_nodes.
read table t_calls into w_cald with key name = w_calls-calledby ntype = w_calls-type.
if sy-subrc ne 0.
 w_calls-start = 'X'.
modify t_calls from w_calls index l_tabix transporting start.
 endif.
 endloop.
sort t_nodes.
delete adjacent duplicates from t_nodes comparing all fields.
loop at t_nodes into w_nodes.
 w_nodes-id = sy-tabix.
modify t_nodes from w_nodes index sy-tabix.
 endloop.
loop at t_nodes into w_nodes.
 net_nodes_tab-id = w_nodes-id.
 net_nodes_tab-type = 0.
case w_nodes-type.
when 'F'.
 net_nodes_tab-type = 'F'.
when 'M'.
 net_nodes_tab-type = 'I'.
when 'S'.
 net_nodes_tab-type = 'S'.
when 'C'.
 net_nodes_tab-type = '0'.
when 'E'.
 net_nodes_tab-type = 'T'.
 endcase.
append net_nodes_tab to net_nodes_tab[].
 nvals_tab-id = net_nodes_tab-id.
 nvals_tab-fl = net_const-text_index_0.
 nvals_tab-val = w_nodes-name.
append nvals_tab to nvals_tab[].
if strlen( w_nodes-name ) > 19.
 nvals_tab-fl = net_const-text_index_1.
 nvals_tab-val = w_nodes-name+19.
append nvals_tab to nvals_tab[].
endif.
 endloop.
sort t_calls by type calledby.
loop at t_calls into w_calls where start is not initial.
delete t_calls index sy-tabix.
add 1 to lines_tab-id.
read table t_nodes into w_nodes with key type = w_calls-type name = w_calls-calledby.
if sy-subrc eq 0.
 lines_tab-pre = w_nodes-id.
read table t_nodes into w_nodes with key type = w_calls-ntype name = w_calls-name.
if sy-subrc eq 0.
 lines_tab-suc = w_nodes-id.
 lines_tab-ab = net_const-aob_ea.
append lines_tab to lines_tab[].
 endif.
 endif.
call method get_data
exporting
 p_pos = 4
 p_ntype = w_calls-ntype
 p_name = w_calls-name.
 endloop.
loop at lines_tab[] into lines_tab.
 lvals_tab-id = lines_tab-id.
 lvals_tab-fl = net_const-text_index_0.
 lvals_tab-val = space.
append lvals_tab to lvals_tab[].
 endloop.
 profile-gruppe = 'SCTX'.
 profile-name = 'CONTEXT'.
 profile-index = 0.
 do.
call function 'CNET_GRAPHIC_NETWORK'
exporting
 stat = stat
 profile = profile
 wait_for_input = space
importing
 m_typ = m_typ
tables
 clusters = clusters_tab
 cvals = cvals_tab
 deletions = delete_tab
 inodes = inodes_tab
lines = lines_tab
 lvals = lvals_tab
nodes = net_nodes_tab
 nvals = nvals_tab
 positions = positions_tab.
case m_typ.
when net_const-m_typ_d.
 exit.
when net_const-m_typ_i.
 stat = net_const-stat_4.
 endcase.
 enddo.
 endmethod"get_chart
method find_data.  data: l_tokn like line of t_tokn,
 w_tokn like l_tokn,
 l_tokt like l_tokn,
 l_cls type i.
loop at t_tokn into w_tokn where str = p_start.
 l_tabix = sy-tabix - 1.
read table t_tokn into l_tokn index l_tabix.
if l_tokn-row ne w_tokn-row.
 l_tabix = sy-tabix + 2.
if p_start = 'METHOD'.
 l_cls = sy-tabix + 1.
while l_cls > 0.
 l_cls = l_cls - 1.
read table t_tokn into l_tokt index l_cls.
if l_tokt-str = 'IMPLEMENTATION'.
 l_cls = l_cls - 1.
read table t_tokn into l_tokt index l_cls.
 exit.
 endif.
 endwhile.
 endif.
read table t_tokn into w_tokn index l_tabix.
 w_secs-name = w_tokn-str.
if l_tokt-str is not initial.
concatenate l_tokt-str '->' w_secs-name into w_secs-name.
 endif.
 w_secs-start = w_tokn-row.
loop at t_tokn into w_tokn from l_tabix where str = p_end.
 w_secs-end = w_tokn-row.
append w_secs to t_secs.
 exit.
 endloop.
 endif.
 endloop.
 endmethod"find_data
*&---------------------------------------------------------------------*
*& Form find_pattern
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
method find_pattern.
 p_subrc = 4.
 w_calls-ntype = p_type.
if w_result-full_name cp p_full.
find p_last in w_result-full_name match offset l_match.
 l_match = l_match + 4.
find regex '\\..:' in w_result-full_name+l_match.
if sy-subrc ne 0.
case p_type.
when 'F'.
 w_calls-name = w_result-full_name+l_match.
when 'M'.
 w_calls-name = w_result-full_name+4.
find regex '\\..:' in w_calls-name match offset l_match.
 l_match = l_match + 4.
 w_calls-name = w_calls-name+l_match.
replace regex '\\..:' in w_calls-name with '->'.
when 'C'.
 w_calls-name = w_result-full_name+4.
replace regex '\\..:' in w_calls-name with '->'when 'S'.
 w_calls-name = w_result-full_name+l_match.
 endcase.
clear p_subrc.
 endif.
 endif.
 endmethod"find_pattern
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
method get_data.
 data: l_pos type i,
 l_calls like w_calls.
 l_pos = p_pos + 3.
loop at t_calls into l_calls where calledby = p_name and type = p_ntype.
delete t_calls index sy-tabix.
read table t_nodes into w_nodes with key type = l_calls-type name = l_calls-calledby.
if sy-subrc eq 0.
add 1 to lines_tab-id.
 lines_tab-pre = w_nodes-id.
read table t_nodes into w_nodes with key type = l_calls-ntype name = l_calls-name.
if sy-subrc eq 0.
 lines_tab-suc = w_nodes-id.
 lines_tab-ab = net_const-aob_ea.
append lines_tab to lines_tab[].
 endif.
 endif.
call method get_data
exporting
 p_pos = l_pos
 p_ntype = l_calls-ntype
 p_name = l_calls-name.
 endloop.
 endmethod"get_data
endclass"flow_chart IMPLEMENTATION
parameters: p_cprog type sy-cprog.
start-of-selection.
 data: l_chart type ref to flow_chart.
create object l_chart.
call method l_chart->get_chart
exporting
 p_cprog = p_cprog.