SAP MDG取实体数据
发布时间:2024/08/09
今天分享两种获取MDG实习数据的方法。
案例:/1MD/MD______03L 表通过物料取到技术代码,用技术代码关联/1MD/MD______09P表,取物料成熟度。
1.通过关键字段和实体类型取值。
通过事务码MDG_DATA_MODEL查看表对应的实体类型ZMM007
/1MD/MD______09P表的key字段为物料对应的技术代码和工厂。直接用key字段取实体数据。这种方法我们不需要再单独取技术代码。但是批量获取时慎用,可能获取不到全部的数据。
完整代码:
REPORT zmm_rpt_538_wu.
DATA: ls_zmm007 TYPE zsmdg_s_mm_pp_zmm007,
lt_zmm007 TYPE TABLE OF zsmdg_s_mm_pp_zmm007,
lt_zmm007_key TYPE TABLE OF zsmdg_s_mm_kf_zmm007.
DATA: lo_read_api TYPE REF TO if_usmd_read_api.
APPEND VALUE #( material = 'LZ161782050121' werks = '' ) TO lt_zmm007_key.
IF lo_read_api IS NOT BOUND.
lo_read_api = cl_usmd_read_api=>get_instance( iv_model_name = 'MM' ).
ENDIF.
lo_read_api->read_active_data( EXPORTING iv_entity_type = 'ZMM007'
it_entity_key = lt_zmm007_key
IMPORTING et_data = lt_zmm007 ).
READ TABLE lt_zmm007 INTO ls_zmm007 INDEX 1.
IF sy-subrc = 0.
WRITE:ls_zmm007-material, / ,ls_zmm007-zmaturity.
ENDIF.
看一下输出结果:
2.通过逻辑名取数据。
通过事务码MDG_DATA_MODEL查看表对应的逻辑名TMX_MM_MATERIAL,TOA_MM_MATERIAL_ZMM007
完整代码:
REPORT zmm_rpt_538_wu.
TYPES: BEGIN OF s_log_phys_name,
kind TYPE char4,
sub_kind TYPE usmd_subkind,
log_name TYPE fieldname,
phys_name TYPE fieldname,
version TYPE char4,
entity TYPE usmd_entity,
entity_cont TYPE usmd_entity,
attribute TYPE usmd_attribute,
END OF s_log_phys_name .
TYPES: BEGIN OF ts_material,
usmdkmmmaterial TYPE usmd_tech_key,
/1md/mmmaterial TYPE matnr,
END OF ts_material.
TYPES: BEGIN OF ts_mm007,
usmdkmmmaterial TYPE usmd_tech_key,
/1md/mmzmaturity TYPE zde_zmaturity,
END OF ts_mm007.
DATA: ls_material TYPE ts_material,
ls_mm007 TYPE ts_mm007.
DATA: lt_message TYPE usmd_t_message,
lt_log_phys_name TYPE STANDARD TABLE OF s_log_phys_name.
CALL METHOD cl_usmd_mdf_model_generator=>get_generated_objects
EXPORTING
i_model = 'MM'
IMPORTING
et_message = lt_message
et_log_phys_name = lt_log_phys_name.
SORT lt_log_phys_name BY kind log_name .
READ TABLE lt_log_phys_name INTO DATA(ls_phys01_table) WITH KEY kind = 'TABL' log_name = 'TMX_MM_MATERIAL' BINARY SEARCH.
READ TABLE lt_log_phys_name INTO DATA(ls_phys02_table) WITH KEY kind = 'TABL' log_name = 'TOA_MM_MATERIAL_ZMM007' BINARY SEARCH .
SELECT SINGLE * INTO CORRESPONDING FIELDS OF @ls_material FROM (ls_phys01_table-phys_name) WHERE /1md/mmmaterial = 'LZ161782050121'.
IF sy-subrc = 0.
SELECT SINGLE usmdkmmmaterial,/1md/mmzmaturity
INTO CORRESPONDING FIELDS OF @ls_mm007 FROM (ls_phys02_table-phys_name)
WHERE usmdkmmmaterial = @ls_material-usmdkmmmaterial AND usmd_active = '1'.
ENDIF.
WRITE:ls_mm007-usmdkmmmaterial, / ,ls_mm007-/1md/mmzmaturity.
最后来看一下输出结果:
分别输出了物料和对料对应的技术代码。