- 增强结构SGLPOS_N_GL_CT,SGLPOS_N_CT:注意两个结构增强的字段名需一致
2.BADI 实施增强 FAGL_LIB
METHOD if_fagl_lib~select_data.
TYPES: BEGIN OF ty_data,
" 前台关联字段
bukrs TYPE sglpos_n_ct-bukrs,
belnr TYPE sglpos_n_ct-belnr,
buzei TYPE sglpos_n_ct-buzei,
gjahr TYPE sglpos_n_ct-gjahr,
ebeln TYPE sglpos_n_ct-ebeln,
matnr TYPE sglpos_n_ct-matnr,
" 自定义描述字段
zycxgys TYPE sglpos_n_ct-zycxgys,
zzgg TYPE sglpos_n_ct-zzgg,
zzxh TYPE sglpos_n_ct-zzxh,
zzwlms TYPE sglpos_n_ct-zzwlms,
END OF ty_data.
" 容器字段
FIELD-SYMBOLS: <fs_data> TYPE any,
<fs_cell_data> TYPE any.
DATA: ls_component LIKE LINE OF it_component.
DATA: lr_data TYPE REF TO data,
lo_descr TYPE REF TO cl_abap_typedescr,
lo_str_descr_in TYPE REF TO cl_abap_structdescr,
ls_abap_comp_descr TYPE abap_compdescr.
" 前台关联字段
DATA: lv_bukrs TYPE sglpos_n_ct-bukrs,
lv_belnr TYPE sglpos_n_ct-belnr,
lv_buzei TYPE sglpos_n_ct-buzei,
lv_gjahr TYPE sglpos_n_ct-gjahr,
lv_ebeln TYPE sglpos_n_ct-ebeln,
lv_matnr TYPE sglpos_n_ct-matnr.
" 自定义描述字段
DATA: lv_zgysx TYPE c.
DATA: lt_data TYPE TABLE OF ty_data.
*&--获取ct_data的表结构
CREATE DATA lr_data LIKE LINE OF ct_data.
ASSIGN lr_data->* TO <fs_data>.
* Get structure description of data table
CALL METHOD cl_abap_structdescr=>describe_by_data
EXPORTING
p_data = <fs_data>
RECEIVING
p_descr_ref = lo_descr.
lo_str_descr_in ?= lo_descr.
* LOOP AT lo_str_descr_in->components INTO ls_abap_comp_descr.
* CASE ls_abap_comp_descr-name.
* WHEN 'ZZYCXGYS'.
* lv_zgysx = 'X'.
* WHEN OTHERS.
* CONTINUE.
* ENDCASE.
* ENDLOOP.
*&--获取前台关联字段以查询自定义字段
MOVE-CORRESPONDING ct_data TO lt_data.
WITH +tab AS ( SELECT DISTINCT bukrs,belnr,buzei,gjahr FROM @lt_data AS h )
SELECT a~bukrs,a~belnr,a~buzei,a~gjahr,c~name1
FROM +tab AS a
JOIN mseg AS b ON a~bukrs = b~bukrs AND a~belnr = b~belnr
AND a~buzei = b~buzei AND a~gjahr = b~gjahr
JOIN lfa1 AS c ON b~lifnr = c~lifnr
INTO TABLE @DATA(lt_mseg).
SORT lt_mseg BY bukrs belnr buzei gjahr.
WITH +tab AS ( SELECT DISTINCT ebeln FROM @lt_data AS h )
SELECT a~ebeln,c~name1
FROM +tab AS a
JOIN ekko AS b ON a~ebeln = b~ebeln
JOIN lfa1 AS c ON b~lifnr = c~lifnr
INTO TABLE @DATA(lt_ekko).
SORT lt_ekko BY ebeln.
WITH +tab AS ( SELECT DISTINCT ebeln FROM @lt_data AS h )
SELECT a~ebeln,c~name1
FROM +tab AS a
JOIN ekko AS b ON a~ebeln = b~ebeln
JOIN adrc AS c ON b~adrnr = c~addrnumber
INTO TABLE @DATA(lt_ekko2).
SORT lt_ekko2 BY ebeln.
WITH +tab AS ( SELECT DISTINCT matnr FROM @lt_data AS h )
SELECT a~matnr,b~zzgg,b~zzxh,b~zzwlms
FROM +tab AS a
JOIN ztmara AS b ON a~matnr = b~matnr
INTO TABLE @DATA(lt_ztmara).
SORT lt_ztmara BY matnr.
*&-- 循环ct_data给自定义字段赋值
LOOP AT ct_data ASSIGNING <fs_data>.
" 获取前台关键字段
LOOP AT lo_str_descr_in->components INTO ls_abap_comp_descr.
" 根据字段名找到字段
ASSIGN COMPONENT ls_abap_comp_descr-name OF STRUCTURE <fs_data> TO <fs_cell_data>.
CASE ls_abap_comp_descr-name.
WHEN 'BUKRS'.
lv_bukrs = <fs_cell_data>.
WHEN 'BELNR'.
lv_belnr = <fs_cell_data>.
WHEN 'BUZEI'.
lv_buzei = <fs_cell_data>.
WHEN 'GJAHR'.
lv_gjahr = <fs_cell_data>.
WHEN 'EBELN'.
lv_ebeln = <fs_cell_data>.
WHEN 'MATNR'.
lv_matnr = <fs_cell_data>.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ENDLOOP.
"实际供应商名称
READ TABLE lt_mseg INTO DATA(ls_mseg) WITH KEY bukrs = lv_bukrs belnr = lv_belnr
buzei = lv_buzei gjahr = lv_gjahr BINARY SEARCH.
IF sy-subrc = 0.
ASSIGN COMPONENT 'ZZYCXGYS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
IF <fs_cell_data> IS ASSIGNED.
<fs_cell_data> = ls_mseg-name1.
ENDIF.
ELSE.
READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = lv_ebeln BINARY SEARCH.
IF sy-subrc = 0.
ASSIGN COMPONENT 'ZZYCXGYS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
IF <fs_cell_data> IS ASSIGNED.
<fs_cell_data> = ls_ekko-name1.
UNASSIGN <fs_cell_data>.
ENDIF.
ELSE.
READ TABLE lt_ekko2 INTO DATA(ls_ekko2) WITH KEY ebeln = lv_ebeln BINARY SEARCH.
IF sy-subrc = 0.
ASSIGN COMPONENT 'ZZYCXGYS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
IF <fs_cell_data> IS ASSIGNED.
<fs_cell_data> = ls_ekko2-name1.
UNASSIGN <fs_cell_data>.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
"物料相关增强字段
READ TABLE lt_ztmara INTO DATA(ls_ztmara) WITH KEY matnr = lv_matnr BINARY SEARCH.
IF sy-subrc = 0.
ASSIGN COMPONENT 'ZZXH' OF STRUCTURE <fs_data> TO <fs_cell_data>.
IF <fs_cell_data> IS ASSIGNED.
<fs_cell_data> = ls_ztmara-zzxh.
UNASSIGN <fs_cell_data>.
ENDIF.
ASSIGN COMPONENT 'ZZGG' OF STRUCTURE <fs_data> TO <fs_cell_data>.
IF <fs_cell_data> IS ASSIGNED.
<fs_cell_data> = ls_ztmara-zzgg.
UNASSIGN <fs_cell_data>.
ENDIF.
ASSIGN COMPONENT 'ZZWLMS' OF STRUCTURE <fs_data> TO <fs_cell_data>.
IF <fs_cell_data> IS ASSIGNED.
<fs_cell_data> = ls_ztmara-zzwlms.
UNASSIGN <fs_cell_data>.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
3.上面增强做完之后需要执行事务码 HDBVIEWS 重新激活视图,每个CLIENT都需要重新激活