ABAP Block Chain

*&---------------------------------------------------------------------*
*& Report ZBLOCKCHAIN_V1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zblockchain_v1.

PARAMETERS: num TYPE int4 DEFAULT 1.
DATA(lo_chain) = NEW zcl_blockchain( ).

DO num TIMES.
  DATA(lv_data) = | Jerry block: { sy-index } |.
  DATA(lo_block) = NEW zcl_block( iv_index = sy-index iv_data = lv_data ).
  lo_chain->add_block( lo_block ).
ENDDO.

WRITE:/ 'Check valid:' , lo_chain->is_valid( ).

lo_block = lo_chain->get_block_by_index( 1 ).

lo_block->set_data( 'Change by Jerry' ).

WRITE:/ 'Check valid:' , lo_chain->is_valid( ).

*====================================================================================

DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,
      gt_data    TYPE STANDARD TABLE OF zcl_abap_blockchain_tool=>ty_displayed_node,
      ok_code    LIKE sy-ucomm,
      save_ok    LIKE sy-ucomm,
      ls_data    LIKE LINE OF gt_data.

FIELD-SYMBOLS: <field> TYPE LINE OF lvc_t_fcat.

IF lo_chain->is_valid( ) = abap_false.
  WRITE:/ 'Chain is not valid, cannot display!' COLOR COL_NEGATIVE.
  RETURN.
ENDIF.

DATA(lo_tool) = NEW zcl_abap_blockchain_tool( lo_chain ).
DATA(lt_fieldcat) = lo_tool->get_fieldcat_by_data( ls_data ).
PERFORM change_label.
CALL SCREEN 100.

DEFINE define_label.

  READ TABLE lt_fieldcat ASSIGNING <field> INDEX &1.
  <field>-seltext = <field>-reptext = <field>-scrtext_m = <field>-scrtext_s = <field>-scrtext_l = &2.
  <field>-outputlen = &3.

END-OF-DEFINITION.

FORM change_label.
  define_label 1 'Block Data' 20.
  define_label 2 'Hash' 40.
  define_label 3 'PHash' 40.

ENDFORM.

FORM init_tree.
  g_alv_tree = lo_tool->get_tree( ).
  DATA l_hierarchy_header TYPE treev_hhdr.
  PERFORM build_hierarchy_header CHANGING l_hierarchy_header.
  CALL METHOD g_alv_tree->set_table_for_first_display
    EXPORTING
      is_hierarchy_header = l_hierarchy_header
    CHANGING
      it_fieldcatalog     = lt_fieldcat
      it_outtab           = gt_data.
  PERFORM create_tree.
  g_alv_tree->frontend_update( ).
  lo_tool->expand( ).
ENDFORM.

FORM create_tree.
  lo_tool->display( ).
ENDFORM.

FORM build_hierarchy_header CHANGING p_hierarchy_header TYPE treev_hhdr.
  p_hierarchy_header-heading = 'BlockChain list'.
  p_hierarchy_header-width = 30.
  p_hierarchy_header-width_pix = ' '.
ENDFORM.

FORM exit_program.
  LEAVE PROGRAM.
ENDFORM.

MODULE pbo OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAINTITLE'.
  IF g_alv_tree IS INITIAL.
    PERFORM init_tree.
    CALL METHOD cl_gui_cfw=>flush
      EXCEPTIONS
        cntl_system_error = 1
        cntl_error        = 2.
    ASSERT sy-subrc = 0.
  ENDIF.
ENDMODULE.

MODULE pai INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'EXIT' OR 'BACK' OR 'CANC'.
      PERFORM exit_program.
    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=>dispatch.
  ENDCASE.
  CALL METHOD cl_gui_cfw=>flush.
ENDMODULE.

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/i042416/article/details/126669357