abap 调用rfc,调用form 显示alv


*&---------------------------------------------------------------------*
*& Report ZCALLRFC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zcallrfc.
PARAMETERS i_mat TYPE c LENGTH 50.

DATA: ld_i_material   TYPE mgv_rfc_matnr, " 物料号
      ld_e_return     TYPE cad_return-value, " 返回码
      ld_e_message    TYPE message-msgtx, " 返回信息
      it_sap_field_data TYPE STANDARD TABLE OF rfcdmsdata, " 物料数据内表
      wa_sap_field_data LIKE LINE OF it_sap_field_data, " 物料数据工作区
      it_dms_class_data TYPE STANDARD TABLE OF cls_charac, " 分类数据内表
      wa_dms_class_data LIKE LINE OF it_dms_class_data. " 分类数据工作区

* 1. 填充导入参数:指定要读取的物料号
ld_i_material = i_mat.

* 2. 调用函数模块
CALL FUNCTION 'RFC_GET_MATERIAL_DATA'
  EXPORTING
    i_material      = ld_i_material
  IMPORTING
    e_return        = ld_e_return
    e_message       = ld_e_message
  TABLES
    sap_field_data  = it_sap_field_data
    dms_class_data  = it_dms_class_data.

* 3. 处理返回结果
IF ld_e_return = '0'.
  PERFORM display_alv(zcallrfc).

  " 调用成功,处理 it_sap_field_data 中的数据
  LOOP AT it_sap_field_data INTO wa_sap_field_data.
    " wa_sap_field_data-fieldname 包含字段名,如 'MATNR'
    " wa_sap_field_data-fieldvalue 包含对应的值
    " wa_sap_field_data-fieldmulti 包含语言相关的描述
    WRITE: / wa_sap_field_data-fieldname, wa_sap_field_data-fieldvalue.
  ENDLOOP.
ELSE.
  " 调用失败,显示错误信息
  MESSAGE ld_e_message TYPE 'E'.
ENDIF.

DATA: a TYPE i,
      b TYPE i,
      c TYPE i.
a = 100.
b = 200.
c = 1000.

WRITE:/ sy-uline.

DATA i_tabb TYPE table of t001.
CALL FUNCTION 'ZRFC_GETT001'
  EXPORTING
    bukrs              =  '北京'
    ort01              =  '上海'
  TABLES
    e_table            =  i_tabb
 EXCEPTIONS
   FIND_NO_DATA       = 1
   OTHERS             = 2
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc = 0.
  cl_demo_output=>display( i_tabb ).
ENDIF.

WRITE:/ sy-uline.

PERFORM gett001data   USING a b c .


FORM display_alv.
  DATA: lo_alv     TYPE REF TO cl_salv_table,
        lo_events  TYPE REF TO cl_salv_events_table.

  IF it_sap_field_data IS INITIAL.
    RETURN.
  ENDIF.

  TRY.
      cl_salv_table=>factory(
        IMPORTING r_salv_table = lo_alv
        CHANGING  t_table      = it_sap_field_data
      ).

      lo_alv->get_columns( )->set_optimize( abap_true ).

      lo_alv->display( ).

    CATCH cx_salv_msg INTO DATA(lx).
      MESSAGE lx->get_text( ) TYPE 'E'.
  ENDTRY.
ENDFORM.

FORM gett001data USING a b c.
  c = a + b.
  WRITE: / c.

ENDFORM.
posted @ 2026-07-30 10:50  虚拟过客之IT老男人  阅读(1)  评论(0)    收藏  举报