0% found this document useful (0 votes)
66 views191 pages

Ugi4cl Ar Article Maint Api

The document defines a class named /UGI4/CL_AR_ARTICLE_MAINT_API, which includes various data types and structures for handling article maintenance in an ABAP environment. It specifies multiple internal tables and structures related to material data, including keys for different material attributes and types. Additionally, it outlines class methods for processing and mapping data related to articles and their attributes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
66 views191 pages

Ugi4cl Ar Article Maint Api

The document defines a class named /UGI4/CL_AR_ARTICLE_MAINT_API, which includes various data types and structures for handling article maintenance in an ABAP environment. It specifies multiple internal tables and structures related to material data, including keys for different material attributes and types. Additionally, it outlines class methods for processing and mapping data related to articles and their attributes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 191

class /UGI4/CL_AR_ARTICLE_MAINT_API definition

public
final
create public .

public section.

types:
BEGIN OF ty_db_fields,
type TYPE ddobjname,
fields TYPE abap_component_tab,
END OF ty_db_fields .
types:
tt_mfhm TYPE STANDARD TABLE OF mfhm WITH EMPTY KEY .
types:
tt_wlk2 TYPE STANDARD TABLE OF wlk2 WITH EMPTY KEY .
types:
tt_maw1 TYPE STANDARD TABLE OF maw1 WITH EMPTY KEY .
types:
tt_mlea TYPE STANDARD TABLE OF mlea WITH EMPTY KEY .
types:
BEGIN OF ty_plant_notes,
matnr TYPE matnr,
werks TYPE werks_d,
langu TYPE spras,
tdid TYPE tdid,
note TYPE systring,
END OF ty_plant_notes .
types:
tt_mpgd TYPE STANDARD TABLE OF mpgd WITH EMPTY KEY .
types:
tt_plant_notes TYPE STANDARD TABLE OF ty_plant_notes WITH EMPTY KEY .
types:
tt_ltx1 TYPE STANDARD TABLE OF ltx1 WITH EMPTY KEY .
types:
BEGIN OF ty_mara_key,
matnr TYPE matnr,
END OF ty_mara_key .
types:
BEGIN OF ty_marc_key,
matnr TYPE matnr,
werks TYPE werks_d,
END OF ty_marc_key .
types:
BEGIN OF ty_maw1_key,
matnr TYPE matnr,
END OF ty_maw1_key .
types:
BEGIN OF ty_makt_key,
matnr TYPE matnr,
END OF ty_makt_key .
types:
BEGIN OF ty_marm_key,
matnr TYPE matnr,
END OF ty_marm_key .
types:
BEGIN OF ty_mean_key,
matnr TYPE matnr,
END OF ty_mean_key .
types:
BEGIN OF ty_mard_key,
matnr TYPE matnr,
werks TYPE werks_d,
lgort TYPE lgort_d,
END OF ty_mard_key .
types:
BEGIN OF ty_mbew_key,
matnr TYPE matnr,
bwkey TYPE bwkey,
bwtar TYPE bwtar_d,
END OF ty_mbew_key .
types:
BEGIN OF ty_mlgn_key,
matnr TYPE matnr,
lgnum TYPE lgnum,
END OF ty_mlgn_key .
types:
BEGIN OF ty_mlgt_key,
matnr TYPE matnr,
lgnum TYPE lgnum,
lgtyp TYPE lgtyp,
END OF ty_mlgt_key .
types:
BEGIN OF ty_mvke_key,
matnr TYPE matnr,
vkorg TYPE vkorg,
vtweg TYPE vtweg,
END OF ty_mvke_key .
types:
BEGIN OF ty_msta_key,
matnr TYPE matnr,
END OF ty_msta_key .
types:
BEGIN OF ty_seasons_key_read,
matnr TYPE matnr,
attyp TYPE mara-attyp,
satnr TYPE mara-satnr,
END OF ty_seasons_key_read .
types:
BEGIN OF ty_wtaddi_key_read,
matnr TYPE matnr,
lfdnr TYPE addi_wtkey,
END OF ty_wtaddi_key_read .
types:
tt_wtaddi_key_read TYPE STANDARD TABLE OF ty_wtaddi_key_read .
types:
tt_seasons_key_read TYPE STANDARD TABLE OF ty_seasons_key_read .
types:
BEGIN OF ty_fsh_seasons.
INCLUDE TYPE fsh_seasons_mat.
TYPES: updkz TYPE char1,
END OF ty_fsh_seasons .
types:
tt_fsh_seasons TYPE STANDARD TABLE OF ty_fsh_seasons WITH DEFAULT KEY
.
types:
BEGIN OF ty_keys,
mara_keys TYPE STANDARD TABLE OF pre03 WITH NON-UNIQUE DEFAULT
KEY,
maw1_keys TYPE STANDARD TABLE OF pre03 WITH NON-UNIQUE DEFAULT
KEY,
makt_keys TYPE STANDARD TABLE OF pre09 WITH NON-UNIQUE DEFAULT
KEY,
marm_keys TYPE STANDARD TABLE OF pre11 WITH NON-UNIQUE DEFAULT
KEY,
mean_keys TYPE STANDARD TABLE OF pre03 WITH NON-UNIQUE DEFAULT
KEY,
marc_keys TYPE STANDARD TABLE OF pre01 WITH NON-UNIQUE DEFAULT
KEY,
mard_keys TYPE STANDARD TABLE OF pre08 WITH NON-UNIQUE DEFAULT
KEY,
* mdma_keys TYPE STANDARD TABLE OF pre27 WITH NON-UNIQUE DEFAULT
KEY,
mbew_keys TYPE STANDARD TABLE OF pre04 WITH NON-UNIQUE DEFAULT
KEY,
mlgn_keys TYPE STANDARD TABLE OF pre12 WITH NON-UNIQUE DEFAULT
KEY,
mlgt_keys TYPE STANDARD TABLE OF pre13 WITH NON-UNIQUE DEFAULT
KEY,
mvke_keys TYPE STANDARD TABLE OF pre10 WITH NON-UNIQUE DEFAULT
KEY,
msta_keys TYPE STANDARD TABLE OF pre03 WITH NON-UNIQUE DEFAULT
KEY,
mlan_keys TYPE STANDARD TABLE OF pre19 WITH NON-UNIQUE DEFAULT
KEY,
wlk2_keys TYPE STANDARD TABLE OF pre23 WITH NON-UNIQUE DEFAULT
KEY,
mamt_keys TYPE STANDARD TABLE OF pre03 WITH NON-UNIQUE DEFAULT
KEY,
mlea_keys TYPE STANDARD TABLE OF pre03 WITH NON-UNIQUE DEFAULT
KEY,
season_keys TYPE STANDARD TABLE OF ty_seasons_key_read WITH NON-
UNIQUE DEFAULT KEY,
wtaddi_keys TYPE STANDARD TABLE OF ty_wtaddi_key_read WITH NON-
UNIQUE DEFAULT KEY,

END OF ty_keys .
types:
tt_mara_key TYPE STANDARD TABLE OF ty_mara_key .
types:
tt_maw1_key TYPE STANDARD TABLE OF pre03 .
"ty_maw1_key .
types:
tt_mamt_key TYPE STANDARD TABLE OF pre03 .
types:
tt_mlea_key TYPE STANDARD TABLE OF pre03 .
types:
tt_wlk2_key TYPE STANDARD TABLE OF pre23 .
types:
tt_makt_key TYPE STANDARD TABLE OF ty_makt_key .
types:
tt_marm_key TYPE STANDARD TABLE OF ty_marm_key .
types:
tt_mean_key TYPE STANDARD TABLE OF pre03 .
"ty_mean_key .
types:
tt_marc_key TYPE STANDARD TABLE OF ty_marc_key .
types:
tt_mard_key TYPE STANDARD TABLE OF ty_mard_key .
types:
BEGIN OF ty_steu,
matnr TYPE matnr,
lfdnr TYPE tafol,
aland TYPE aland,
tatyp TYPE tatyp,
taxkm TYPE taxkm,
kzexi TYPE xfeld,
kzref TYPE xfeld,
kzvor TYPE xfeld,
END OF ty_steu .
types:
tt_steu TYPE STANDARD TABLE OF ty_steu WITH KEY matnr aland tatyp .
types:
BEGIN OF ty_steumm,
matnr TYPE matnr,
aland TYPE aland,
taxim TYPE taxim1,
kzexi TYPE xfeld,
kzref TYPE xfeld,
kz_init TYPE xfeld,
END OF ty_steumm .
types:
tt_steumm TYPE STANDARD TABLE OF ty_steumm WITH KEY matnr aland taxim
.
types:
BEGIN OF ty_mara.
INCLUDE TYPE mara.
TYPES: is_new TYPE abap_bool,
END OF ty_mara .
types:
tt_mara TYPE STANDARD TABLE OF ty_mara WITH DEFAULT KEY .
types:
BEGIN OF ty_structs,
makt TYPE makt,
mara TYPE mara,
maw1 TYPE maw1,
marc TYPE marc,
mard TYPE mard,
marm TYPE marm,
mbew TYPE mbew,
mean TYPE mean,
mlan TYPE mlan,
mlgn TYPE mlgn,
mlgt TYPE mlgt,
mvke TYPE mvke,
steuer TYPE mg03steuer,
steumm TYPE mg03steumm,
mpop TYPE mpop,
mfhm TYPE tt_mfhm,
mpgd TYPE mpgd,
wlk2 TYPE wlk2,
malg TYPE malg,
END OF ty_structs .
types:
BEGIN OF ty_tables,
t_makt TYPE makt_tab,
t_mara TYPE mara_tab,
t_marc TYPE marc_tab, "STANDARD TABLE OF v_marc_md WITH
EMPTY KEY,
t_mard TYPE mard_tab, "STANDARD TABLE OF v_mard_md WITH
EMPTY KEY,
t_marm TYPE marm_tab,
t_mbew TYPE mbew_tab, "STANDARD TABLE OF v_mbew_md WITH
EMPTY KEY,
t_mean TYPE mean_tab,
t_mlan TYPE mlan_tab,
t_mlgn TYPE mlgn_tab,
t_mlgt TYPE mlgt_tab,
t_mvke TYPE mvke_tab,
t_steuertab TYPE tt_steu,
t_steummtab TYPE tt_steumm,
t_mpop TYPE mpop_tab,
t_mfhm TYPE tt_mfhm,
t_mpgd TYPE tt_mpgd,
t_ltx1 TYPE tt_ltx1,
t_ltx1_del TYPE tt_ltx1,
* t_text TYPE cmd_bs_mat_t_notes,
* t_plant_text TYPE tt_plant_notes,
* t_sales_text TYPE cmd_bs_mat_t_notes_sales,
t_maw1 TYPE tt_maw1,
t_mamt TYPE mamt_tty,
t_mlea TYPE mlea_tty,
t_wlk2 TYPE tt_wlk2,
t_malg TYPE malg_tty,
t_fsh_seasons TYPE tt_fsh_seasons,
END OF ty_tables .
types:
BEGIN OF ty_tables_pmd,
t_mara TYPE mara_tab,
t_makt TYPE makt_tab,
t_marc TYPE marc_tab, "STANDARD TABLE OF v_marc_md WITH
EMPTY KEY,
t_mard TYPE mard_tab, "STANDARD TABLE OF v_mard_md WITH
EMPTY KEY,
t_marm TYPE marm_tab,
t_mbew TYPE mbew_tab, "STANDARD TABLE OF v_mbew_md WITH
EMPTY KEY,
t_mean TYPE mean_tab,
t_mlan TYPE mlan_tab,
t_mlgn TYPE mlgn_tab,
t_mlgt TYPE mlgt_tab,
t_mvke TYPE mvke_tab,
t_steuertab TYPE tt_steu,
t_steummtab TYPE tt_steumm,
t_mpop TYPE mpop_tab,
t_mfhm TYPE tt_mfhm,
t_mpgd TYPE tt_mpgd,
* t_ltx1 TYPE tt_ltx1,
t_text TYPE cmd_bs_mat_t_notes,
t_plant_text TYPE tt_plant_notes,
t_sales_text TYPE cmd_bs_mat_t_notes_sales,
t_maw1 TYPE tt_maw1,
t_mamt TYPE mamt_tty,
t_mlea TYPE mlea_tty,
t_wlk2 TYPE tt_wlk2,
t_malg TYPE malg_tty,
iv_failure TYPE char1,
END OF ty_tables_pmd .
types:
tt_tables TYPE STANDARD TABLE OF ty_tables .
types:
tt_mbew_key TYPE STANDARD TABLE OF ty_mbew_key .
types:
tt_mlgn_key TYPE STANDARD TABLE OF ty_mlgn_key .
types:
tt_mlgt_key TYPE STANDARD TABLE OF ty_mlgt_key .
types:
tt_mvke_key TYPE STANDARD TABLE OF ty_mvke_key .
types:
tt_msta_key TYPE STANDARD TABLE OF ty_msta_key .
types TT_MARC type MARC_TAB .
types TT_MARD type MARD_TAB .
types TT_MBEW type MBEW_TAB .
types:
tt_mea1 TYPE STANDARD TABLE OF mea1 .
types:
ty_t_prof TYPE STANDARD TABLE OF prof .
types:
ty_t_pre08 TYPE STANDARD TABLE OF pre08 .
types:
BEGIN OF ty_altmara ,
matkl TYPE
mara-matkl
,
mstae TYPE
mara-mstae
,
END OF ty_altmara .
types:
BEGIN OF ty_neumara ,
matkl TYPE
mara-matkl
,
mstae TYPE
mara-mstae
,
END OF ty_neumara .
types:
tt_t130f TYPE STANDARD TABLE OF st130f .
types:
tt_smeinh TYPE STANDARD TABLE OF smeinh .
types:
tt_steumm1 TYPE STANDARD TABLE OF mg03steumm .
types:
tt_mlgt TYPE STANDARD TABLE OF mlgt .
types:
tt_mlgn TYPE STANDARD TABLE OF mlgn .
types:
tt_malg TYPE STANDARD TABLE OF malg .
types:
tt_mamt TYPE STANDARD TABLE OF mamt .
types:
tt_wsteuertab TYPE STANDARD TABLE OF mg03steuer .
types:
BEGIN OF ty_product_neuflag,
product TYPE matnr,
neuflag TYPE char1,
END OF ty_product_neuflag .
types:
BEGIN OF gty_s_descr_struc,
name_component TYPE name_komp,
name_line_type TYPE ddobjname,
is_table TYPE boole_d,
struc_components TYPE abap_component_tab,
END OF gty_s_descr_struc .
types:
gty_ts_descr_struc TYPE SORTED TABLE OF gty_s_descr_struc
WITH UNIQUE KEY name_component "primary key
"primary key "primary key
WITH NON-UNIQUE SORTED KEY line_type COMPONENTS
name_line_type .
types:
BEGIN OF ty_cr_details,
usmdkarmara TYPE usmd_tech_key,
armara TYPE /ugi4/matnr,
seqnr TYPE usmd_seqnr_obj,
lartn TYPE mlea-lartn,
ean11 TYPE ean11,
usmd_crequest TYPE usmd_crequest,
usmd_value TYPE usmd_value,
usmd_creq_status TYPE usmd_crequest_status,
txtmi TYPE usmd_txtmi,
END OF ty_cr_details .
types:
ty_t_crdetails TYPE STANDARD TABLE OF ty_cr_details .
types:
BEGIN OF s_log_phys_name_type,
entity TYPE usmd_entity,
entity_cont TYPE usmd_entity,
kind TYPE char4,
sub_kind TYPE usmd_subkind, "usmd1_cs_tabl_kind
sub_kind_desc TYPE char255,
log_name TYPE fieldname,
phys_name TYPE fieldname,
version TYPE char4,
no_of_records TYPE i,
no_of_inact_records TYPE i,
unique_records TYPE i,
"only relevant for subkind = oattr
END OF s_log_phys_name_type .
types:
t_log_phys_name_type TYPE STANDARD TABLE OF s_log_phys_name_type .
types:
BEGIN OF ty_var_struc,
matnr TYPE matnr,
varnr TYPE matnr,
atinn TYPE atinn,
atnam TYPE atnam,
atwrt TYPE atwrt,
atflb TYPE atflb,
atflv TYPE atflv,
atzhl TYPE ibsegmcnt,
END OF ty_var_struc .
types:
tt_var_struc TYPE STANDARD TABLE OF ty_var_struc .
types:
BEGIN OF ty_class_gen,
mara TYPE /ugi4/matnr,
class_var TYPE /ugi4/class_var,
klart_var TYPE /ugi4/klart_var,
select_all TYPE boolean,
END OF ty_class_gen .
types:
tt_class_gen TYPE STANDARD TABLE OF ty_class_gen .

class-data STS_DDIC_API_DATA type GTY_TS_DESCR_STRUC .


data:
mt_product_neuflag TYPE TABLE OF ty_product_neuflag .
data:
mt_rfm_db_mat TYPE TABLE OF /ugi4/rfm_data_db_mat .
data MV_CR_ID type USMD_CREQUEST .
data GO_CREQUEST type ref to IF_USMD_GOV_API .
class-data GV_MATNR_IS_NEW type BOOLEAN .
class-data GT_ENTITY_STRUC type /UGI4/MDG_BS_AR_T_ENTY_STR .
class-data GV_MATNR_FINAL type MATNR .
class-data GV_ORIGNAL_MATNR type MATNR .
data MT_SEASONS_DB type FSH_TT_SEASON_ARTICLE .
constants GC_DATA_MODEL type USMD_MODEL value 'AR' ##NO_TEXT.

class-methods PROCESS
importing
!IM_DB_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IM_CREQ_ATTR type /UGI4/CREQ_ATTR_API
exporting
!ET_MESSAGE type BAPIRETTAB .
methods MAP
importing
!IS_RFM_API type /UGI4/RFM_S_DBSTRUC_IN
!IM_CREQ_ATTR type /UGI4/CREQ_ATTR_API optional
exporting
!ET_MESSAGE type USMD_T_MESSAGE
!EO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API .
class-methods GET_DESCR_STRUC
importing
!IV_NAME_STRUC type NAME_KOMP
!IV_COMPDESCR type BOOLE_D optional
changing
!CTS_DESCR_STRUC type GTY_TS_DESCR_STRUC .
methods FILL_DB_ATTR
changing
!CS_DB_ATTR type /UGI4/RFM_S_DBSTRUC_IN .
methods MAP_TO_API_STRUCTURE
importing
!IS_DB_ATTR type /UGI4/RFM_S_DBSTRUC_IN
exporting
!ES_DB_ATTR type /UGI4/RFM_S_DBSTRUC_IN .
methods READ_VARIANTS
importing
!IS_VARIANTS type /UGI4/CMD_RFM_T_VARIANTS
exporting
!ET_VARIANTS type TT_VAR_STRUC .
class-methods GENERATE_VARIANTS
importing
!IT_MATNR type TT_CLASS_GEN
!IT_RESTRICT type /UGI4/CMD_RFM_T_RESTRTICT
exporting
!ET_VARIANTS type /UGI4/CMD_RFM_T_VARIANTS .
class-methods GET_VARIANT_CHAR
importing
!IV_CHARP type KLASSE_D optional
!IV_MATKL type MATKL optional
!IV_KLART type /UGI4/KLART_VAR optional
!IV_CHAR_TYPE type CHAR1 optional
exporting
!ET_CHARVAL type /UGI4/AR_TT_CHARVAL
!ET_CHARVALT type /UGI4/AR_TT_CHARVALT
!ET_FEATURES type /UGI4/MERKMALE_T .
methods FIND_CR_BY_MATNR
importing
!IM_MATNR_SEL type FSH_MATNR_RANGE_T
exporting
!ET_CR_DETAILS type TY_T_CRDETAILS
!ET_MESSAGES type USMD_T_MESSAGE .
methods FIND_CR_BY_IDNLF
importing
!IM_IDNLF_SEL type WPOCS_IDNLF_RANGE_TAB
exporting
!ET_CR_DETAILS type TY_T_CRDETAILS
!ET_MESSAGES type USMD_T_MESSAGE .
methods FIND_CR_BY_GTIN
importing
!IM_SEL_RANGE type CMD_MATERIAL_T_RANGE_EAN11
exporting
!ET_CR_DETAILS type TY_T_CRDETAILS
!ET_MESSAGES type USMD_T_MESSAGE .
methods READ_VALUES
importing
!I_MATNR type MATNR
exporting
!ET_DATA type /UGI4/RFM_S_DBSTRUC_IN
!ES_CREQDET type /UGI4/CREQ_ATTR_API .
protected section.

methods READ_ALL_VARIANTS_SEASONS
importing
!IT_SEASONS_KEYS_READ type TT_SEASONS_KEY_READ
!IT_MARA_DB type MARA_TAB .
methods MAP_2_DB_API
importing
!IM_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IM_CREQ_ATTR type /UGI4/_T_CREQUEST_ATTR .
methods MAP_USMD_MESS_TO_BAPIRET
importing
!IT_USMD_MESSAGE type USMD_T_MESSAGE
changing
!CT_BAPIRETTAB type BAPIRETTAB .
methods CALC_AZSUB
importing
!IT_UNITOFMSR type /UGI4/T_AR_PP_UNITOFMSR
!IV_MESUB type MEINH
changing
!CV_AZSUB type MEANZSUB .
methods CHECK_INTERNAL
importing
!IS_MARA_DATA type CMD_BS_MAT_T_MARA
!IO_CREQUEST type ref to IF_USMD_CONV_SOM_GOV_API .
methods MAP_MODEL_2_STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IS_TEXT type BOOLEAN optional
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional .
methods MAP_NOSMT_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
changing
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional .
methods MAP_MPOP_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IT_T001W type /UGI4/T001W
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional .
methods MAP_DCST_TAB_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IT_T001W type /UGI4/T001W
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_FMS_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE optional
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_TAB_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_UNITOFMSR_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_MARA_DATA type CMD_BS_MAT_T_MARA
!IS_MARM_DATA type CMD_BS_MAT_T_MARM
!IS_MAW1_DATA type CMD_PRD_T_MAW1_DATA
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_TEXTFIBR_COMP
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods GET_INTERNAL_NUMBER
importing
!IM_MATNR type MATNR
!IM_MTART type MTART
!IM_MATNR_TMP type BOOLEAN
exporting
!EX_ERROR type BOOLEAN
!EX_INT_MATNR type MATNR
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API .
methods MAP_TEXT_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_MEAN_GTIN
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MARA_MANDATORY_CHECKS
importing
!IS_MARA type CMD_BS_MAT_S_MARA
!IS_CREQ_ATTR type /UGI4/CREQ_ATTR_API
exporting
!EV_ERROR type BOOLEAN
changing
!CT_MESSAGE type BAPIRET2_TAB .
methods ADD_MESSAGE
changing
!CT_MESSAGE type BAPIRET2_TAB .
methods GET_COMPONENTS
importing
!IV_LEVEL type I optional
!IS_DATA type ANY
exporting
!ET_COMPONENTS type ABAP_COMPONENT_VIEW_TAB .
methods READ
importing
!IS_KEYS type TY_KEYS
exporting
!ET_MEAN_ME_TAB type MAT_EAN
!ES_TBL_DB type TY_TABLES .
methods MAP_MAKT_STAG
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IS_TEXT type BOOLEAN optional
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods WRITE_ENTITY_DATA
importing
!IT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API .
methods DELETE_ENTITY_DATA
importing
!IT_ENTITY_DATA type USMD_GOV_API_TS_ENT_TABL
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API .
methods MAP_VARIANTS_STAG
importing
!IV_ENTITY type USMD_ENTITY
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_RESTRICT_STAG
importing
!IV_ENTITY type USMD_ENTITY
!IS_API_SOURCE type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_MLANPURCH_TAX_STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_TAX_2_STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_CLASS_GEN_STAG
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_CHARACVAL_STAG
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL optional
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods MAP_ART_IMG_2STA
importing
!IV_ENTITY type USMD_ENTITY
!IV_TARGET_STRUC type SMT_STRUCTURE
!IS_API_DATA type /UGI4/RFM_S_DBSTRUC_IN
!IO_CONV_API type ref to IF_USMD_CONV_SOM_GOV_API
exporting
!ET_MESSAGE type USMD_T_MESSAGE
changing
!CT_ENTITY_DEL type USMD_GOV_API_TS_ENT_TABL
!CT_ENTITY_DATA type USMD_GOV_API_TS_ENT_DATA .
methods CARE_CODE_CONVERT_MARA2EXT
importing
!IP_MARA_CARE_CODE type WRF_CARE_CODE optional
!IP_REGION type WRF_COUNTRY_GROUP optional
exporting
!ES_CARE_CODES_EXT type WRF_CARE_CODE_DETAIL_ISO
changing
!ET_MESSAGE type USMD_T_MESSAGE optional .
methods CARE_CODE_CONVERT_INT2EXT
importing
!IP_CARE_TYPE type WRF_CARE_TYPE optional
!IP_REGION type WRF_COUNTRY_GROUP optional
!IP_CARE_CODE_INT type WRF_GLOBAL_CARE_CODE optional
exporting
!EP_CARE_CODE_EXT type WRF_CARE_CODE_REGION
changing
!ET_MESSAGE type USMD_T_MESSAGE optional .
private section.
ENDCLASS.

CLASS /UGI4/CL_AR_ARTICLE_MAINT_API IMPLEMENTATION.

METHOD map_makt_stag.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in ##NEEDED.
DATA : lt_makt_api_x TYPE cmd_bs_mat_t_makt_x,
ls_makt_api_x TYPE cmd_bs_mat_s_makt_x ##NEEDED,
ls_entity TYPE usmd_gov_api_s_ent_tabl.
* lt_entity TYPE usmd_gov_api_ts_ent_tabl.
FIELD-SYMBOLS : <fs_target> TYPE any,
<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<lt_api_source_x> TYPE ANY TABLE,
<ls_api_source> TYPE any.
CHECK is_api_data IS NOT INITIAL.
ls_api_data = is_api_data.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .

IF iv_entity = 'MARA'.
IF is_text = abap_false.
DATA(lv_x_tabname) = 'MARA_X_TAB'. DATA(lv_tabname) =
'MARA_TAB'.
ELSE.
lv_tabname = 'MAKT_TAB'.lv_x_tabname = 'MAKT_X_TAB'.
ENDIF.
ELSE.
RETURN.
ENDIF.

DATA : lr_struc_key TYPE REF TO data ##NEEDED,


lr_table_key TYPE REF TO data.
IF is_text EQ abap_false.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).
ELSE.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_txt_langu
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

DATA : lr_struc_makt_key TYPE REF TO data,


lr_table_makt_key TYPE REF TO data.

FIELD-SYMBOLS : <lt_key> TYPE ANY TABLE,


<ls_key> TYPE any.

ASSIGN lr_struc_makt_key->* TO <ls_key>.


ASSIGN lr_table_makt_key->* TO <lt_key>.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key
IMPORTING
er_structure = lr_struc_makt_key
er_table = lr_table_makt_key
).
ENDIF.

ASSIGN lr_table_key->* TO <lt_data>.


CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(
EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CHECK lv_source IS NOT INITIAL.


CREATE DATA lr_source TYPE (lv_source).
ASSIGN lr_source->* TO <fs_source>.

IF is_text EQ abap_true.
CREATE DATA lr_target LIKE LINE OF <lt_data>.
ASSIGN lr_target->* TO <fs_target>.
ELSE.
CREATE DATA lr_target TYPE (lv_target).
ASSIGN lr_target->* TO <fs_target>.
ENDIF.

TRANSLATE lv_source TO UPPER CASE.


ASSIGN COMPONENT lv_tabname OF STRUCTURE is_api_data TO
<lt_api_source>.
CHECK sy-subrc EQ 0.
ASSIGN COMPONENT lv_x_tabname OF STRUCTURE is_api_data TO
<lt_api_source_x>.

IF <lt_api_source> IS ASSIGNED.
LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.
IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.

MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<lfs_mara_temp>).
ASSIGN COMPONENT 'MARA' OF STRUCTURE <fs_target> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.

ASSIGN COMPONENT 'TXTMI' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<txtmi>).
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<fs_maktx>).
IF sy-subrc EQ 0.
<txtmi> = <fs_maktx>.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'LANGU' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<langu>).
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<fs_spras>).
IF sy-subrc EQ 0.
<langu> = <fs_spras>.
ENDIF.
ENDIF.
READ TABLE lt_makt_api_x INTO ls_makt_api_x WITH KEY matnr =
<lfs_mara_temp> spras = <langu> delete_row = abap_true.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING <fs_target> TO <ls_key>.
INSERT <ls_key> INTO TABLE <lt_key>.
ELSE.
INSERT <fs_target> INTO TABLE <lt_data>.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
* TRY.
* co_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
ENDIF.
IF <lt_key> IS ASSIGNED AND <lt_key> IS NOT INITIAL.
ls_entity-entity = iv_entity.
GET REFERENCE OF <lt_key> INTO ls_entity-tabl.
INSERT ls_entity into TABLE ct_entity_del.
ENDIF.

ENDMETHOD.

METHOD map_mean_gtin.

DATA: lr_source TYPE REF TO data,


lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in ##NEEDED.

FIELD-SYMBOLS : <fs_target> TYPE any,


<fs_source> TYPE any,
<lt_data> TYPE ANY TABLE,
<ls_model_data> TYPE any.
CHECK is_api_data IS NOT INITIAL.
ls_api_data = is_api_data.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data,
lr_struc_del TYPE REF TO data,
lr_table_del TYPE REF TO data.

FIELD-SYMBOLS : <lt_key> TYPE ANY TABLE,


<ls_key> TYPE any.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key
IMPORTING
er_structure = lr_struc_del
er_table = lr_table_del
).

ASSIGN lr_struc_del->* TO <ls_key>.


ASSIGN lr_table_del->* TO <lt_key>.
ASSIGN lr_table_key->* TO <lt_data>.
ASSIGN lr_struc_key->* TO <ls_model_data>.
CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(
EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ) ##NEEDED.

CHECK lv_source IS NOT INITIAL.


CREATE DATA lr_source TYPE (lv_source).
ASSIGN lr_source->* TO <fs_source>.
CREATE DATA lr_target TYPE (lv_target).
ASSIGN lr_target->* TO <fs_target>.

IF is_api_data IS NOT INITIAL.


LOOP AT is_api_data-mlea_tab ASSIGNING FIELD-SYMBOL(<fs_api>).
MOVE-CORRESPONDING <fs_api> TO <fs_source>.
IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


MOVE-CORRESPONDING <fs_api> TO <ls_model_data>.

ASSIGN COMPONENT 'MEINH' OF STRUCTURE <fs_api> TO FIELD-


SYMBOL(<lfs_meinh>).
ASSIGN COMPONENT 'QTEUNIT' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_unit>).
IF <lfs_meinh> IS ASSIGNED AND <lfs_unit> IS ASSIGNED.
<lfs_unit> = <lfs_meinh>.
ENDIF.
ASSIGN COMPONENT 'EAN11' OF STRUCTURE <fs_api> TO FIELD-
SYMBOL(<lfs_ean>).
ASSIGN COMPONENT 'EAN11M' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_eanm>).
IF <lfs_ean> IS ASSIGNED AND <lfs_eanm> IS ASSIGNED.
<lfs_eanm> = <lfs_ean>.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
read TABLE is_api_data-mean_tab INTO data(ls_mean) with KEY
matnr = <fs_api>-matnr meinh = <fs_api>-meinh ean11 = <fs_api>-ean11.
if sy-subrc eq 0.
ASSIGN COMPONENT 'LIEFZ' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_LIEFZ>).
if sy-subrc eq 0.
<lfs_LIEFZ> = abap_true.
endif.
ASSIGN COMPONENT 'EANTP_MEA' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_EANTP_MEN>).
if sy-subrc eq 0.
<lfs_EANTP_MEN> = ls_mean-eantp.
endif.
endif.

INSERT <ls_model_data> INTO TABLE <lt_data>.


CLEAR <ls_model_data>.
ENDIF.
ENDLOOP.
ENDIF.
*
* IF <lt_data> IS NOT INITIAL.
* ls_entity_data-entity = iv_entity.
* GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE ct_entity_data.
* ENDIF.

* MEAN_TAB.
LOOP AT is_api_data-mean_tab ASSIGNING FIELD-SYMBOL(<fs_api_mean>).
MOVE-CORRESPONDING <fs_api_mean> TO <fs_source>.
IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.
/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

* MOVE-CORRESPONDING <fs_api_mean> TO <ls_model_data>.


MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.
ASSIGN COMPONENT 'MEINH' OF STRUCTURE <fs_api_mean> TO
<lfs_meinh>.
ASSIGN COMPONENT 'QTEUNIT' OF STRUCTURE <ls_model_data> TO
<lfs_unit>.
IF <lfs_meinh> IS ASSIGNED AND <lfs_unit> IS ASSIGNED.
<lfs_unit> = <lfs_meinh>.
ENDIF.

ASSIGN COMPONENT 'EAN11' OF STRUCTURE <fs_api_mean> TO <lfs_ean>.


ASSIGN COMPONENT 'EAN11M' OF STRUCTURE <ls_model_data> TO
<lfs_eanm>.
IF <lfs_ean> IS ASSIGNED AND <lfs_eanm> IS ASSIGNED.
<lfs_eanm> = <lfs_ean>.
ENDIF.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO
<lfs_mara>.
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
CLEAR <ls_model_data>.
ENDIF.
ENDLOOP.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.

ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
ENDIF.

* deleted the Mean GTIN. values .

LOOP AT is_api_data-mean_x_tab INTO DATA(ls_mean_x_tab) WHERE


delete_row = abap_true. "#EC CI_SORTSEQ
move-CORRESPONDING ls_mean_x_tab to <ls_key>.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_key> TO FIELD-
SYMBOL(<fs_matnr>).
IF sy-subrc EQ 0.
<fs_matnr> = gv_matnr_final.
ENDIF.

ASSIGN COMPONENT 'QTEUNIT' OF STRUCTURE <ls_key> TO FIELD-


SYMBOL(<fs_qteunit>).
IF sy-subrc EQ 0.
<fs_qteunit> = ls_mean_x_tab-meinh.
ENDIF.
INSERT <ls_key> INTO TABLE <lt_key>.
ENDLOOP.

DATA :ls_entity TYPE usmd_gov_api_s_ent_tabl.

IF <lt_key> IS ASSIGNED AND <lt_key> IS NOT INITIAL.


ls_entity-entity = iv_entity.
GET REFERENCE OF <lt_key> INTO ls_entity-tabl.
INSERT ls_entity INTO TABLE ct_entity_del.
ENDIF.

ENDMETHOD.

METHOD map_mlanpurch_tax_sta.

DATA: lr_source TYPE REF TO data,


lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in ##NEEDED.
* lsr_model_data TYPE REF TO data,
* lt_message TYPE usmd_t_message,
* lv_textseq TYPE /ugi4/seq,
* lv_fibrseq TYPE /ugi4/seq,
* lsr_model_del TYPE REF TO data.

DATA : lt_tax_api_x TYPE cmd_bs_mat_t_steumm_x,


ls_tax_api_x TYPE LINE OF cmd_bs_mat_t_steumm_x,
ls_entity TYPE usmd_gov_api_s_ent_tabl.
* lt_entity TYPE usmd_gov_api_ts_ent_tabl.

FIELD-SYMBOLS : <fs_target> TYPE any,


<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<lt_api_source_x> TYPE ANY TABLE,
<ls_api_source> TYPE any.
CHECK is_api_data IS NOT INITIAL.
ls_api_data = is_api_data.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .


DATA : lr_struc_key TYPE REF TO data ##NEEDED,
lr_table_key TYPE REF TO data.

* IF is_text EQ abap_false.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).
DATA : lr_struc_tax_key TYPE REF TO data,
lr_table_tax_key TYPE REF TO data.

FIELD-SYMBOLS : <lt_key> TYPE ANY TABLE,


<ls_key> TYPE any.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key
IMPORTING
er_structure = lr_struc_tax_key
er_table = lr_table_tax_key
).

ASSIGN lr_struc_tax_key->* TO <ls_key>.


ASSIGN lr_table_tax_key->* TO <lt_key>.

ASSIGN lr_table_key->* TO <lt_data>.


CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(
EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CHECK lv_source IS NOT INITIAL.


CREATE DATA lr_source TYPE (lv_source).
ASSIGN lr_source->* TO <fs_source>.
ASSIGN lr_table_key->* TO <lt_data>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

TRANSLATE lv_source TO UPPER CASE.


ASSIGN COMPONENT 'MLAN_PURCHASE_TAB' OF STRUCTURE is_api_data TO
<lt_api_source>.
CHECK sy-subrc EQ 0.
ASSIGN COMPONENT 'MLAN_PURCHASE_X_TAB' OF STRUCTURE is_api_data TO
<lt_api_source_x>.

IF <lt_api_source> IS ASSIGNED.
LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.

IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.


MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<lfs_mara_temp>).
ASSIGN COMPONENT 'MARA' OF STRUCTURE <fs_target> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <fs_target> INTO TABLE <lt_data>.
ENDIF.
ENDLOOP.
ENDIF.

LOOP AT lt_tax_api_x INTO ls_tax_api_x WHERE delete_row EQ abap_true.


"#EC CI_SORTSEQ
MOVE-CORRESPONDING ls_tax_api_x TO <ls_key>.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_key> TO FIELD-
SYMBOL(<lfs_matnr>).
IF sy-subrc EQ 0.
<lfs_matnr> = gv_matnr_final.
ENDIF.
INSERT <ls_key> INTO TABLE <lt_key>.
CLEAR <ls_key>.
ENDLOOP.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
INSERT ls_entity_Data into TABLE ct_entity_Data.
ENDIF.

IF <lt_key> IS ASSIGNED AND <lt_key> IS NOT INITIAL.


ls_entity-entity = iv_entity.
GET REFERENCE OF <lt_key> INTO ls_entity-tabl.
* INSERT ls_entity INTO TABLE lt_entity.
INSERT ls_Entity INto table ct_entity_del.
* TRY.
* io_conv_api->delete_entity_data(
* EXPORTING
* it_entity_keys = lt_entity " MDG: Table
Type for Table of Entities Structure
* ).
* CATCH cx_usmd_gov_api_core_error. " CX_USMD_CORE_DYNAMIC_CHECK
* CATCH cx_usmd_gov_api_entity_del. " Error While Deleting an
Entity
* ENDTRY.

ENDIF.

ENDMETHOD.

METHOD map_model_2_sta.

DATA: lr_source TYPE REF TO data,


lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in ##NEEDED.
FIELD-SYMBOLS : <fs_target> TYPE any,
<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<lt_api_source_x> TYPE ANY TABLE,
<ls_api_source> TYPE any.
DATA : lv_region_cc TYPE wrf_country_group,
lv_care_code TYPE wrf_care_code,
ls_care_code_iso TYPE wrf_care_code_detail_iso.

CHECK is_api_data IS NOT INITIAL.


ls_api_data = is_api_data.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.
FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .

IF iv_entity = 'MARA'.
IF is_text = abap_false.
DATA(lv_x_tabname) = 'MARA_X_TAB'. DATA(lv_tabname) =
'MARA_TAB'.
ELSE.
lv_tabname = 'MAKT_TAB'.lv_x_tabname = 'MAKT_X_TAB'.
ENDIF.
ELSEIF iv_entity = 'MAW1'.
lv_tabname = 'MAW1_TAB'.lv_x_tabname = 'MAW1_X_TAB'.
ELSEIF iv_entity = 'TAX'.
lv_tabname = 'TAX_TAB'.
ELSEIF iv_entity = 'MALG' .
lv_tabname = 'MALG_TAB'.
ELSEIF iv_entity = 'MLGN' .
lv_tabname = 'MLGN_TAB'.
ELSEIF iv_entity = 'MLGT' .
lv_tabname = 'MLGT_TAB'.
ELSEIF iv_entity = 'MVKE' .
lv_tabname = 'MVKE_TAB'.
ELSEIF iv_entity = 'WLK2' .
lv_tabname = 'WLK2_TAB'.
ELSEIF iv_entity = 'MLGN' ##BOOL_OK.
lv_tabname = 'MLGN_TAB'.
ELSEIF iv_entity = 'MLGT' .
lv_tabname = 'MLGT_TAB'.
ELSEIF iv_entity = 'MARD' .
lv_tabname = 'MARD_TAB'.
ELSEIF iv_entity = 'MAMT'.
lv_tabname = 'MAMT_TAB'.
elseif iv_entity = 'WRPL'.
lv_tabname = 'WRPL_TAB'.
elseif iv_entity = 'MLANPURCH'.
lv_tabname = 'MLAN_PURCHASE_TAB'.
ELSE.
RETURN.
ENDIF.

DATA : lr_struc_key TYPE REF TO data ##NEEDED,


lr_table_key TYPE REF TO data.
IF is_text EQ abap_false.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).
ELSE.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_txt_langu
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).
ENDIF.

ASSIGN lr_table_key->* TO <lt_data>.


CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(
EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).
CHECK lv_source IS NOT INITIAL.
CREATE DATA lr_source TYPE (lv_source).
ASSIGN lr_source->* TO <fs_source>.

IF is_text EQ abap_true.
CREATE DATA lr_target LIKE LINE OF <lt_data>.
ASSIGN lr_target->* TO <fs_target>.
ELSE.
CREATE DATA lr_target TYPE (lv_target).
ASSIGN lr_target->* TO <fs_target>.
ENDIF.

TRANSLATE lv_source TO UPPER CASE.


ASSIGN COMPONENT lv_tabname OF STRUCTURE is_api_data TO
<lt_api_source>.
CHECK sy-subrc EQ 0.
ASSIGN COMPONENT lv_x_tabname OF STRUCTURE is_api_data TO
<lt_api_source_x>.

IF <lt_api_source> IS ASSIGNED.
LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.
IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

ASSIGN COMPONENT 'MARA' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.

if iv_entity eq 'MARA'.
CALL FUNCTION 'WRF_CARE_CODES_GET_REGION'
IMPORTING
ep_region = lv_region_cc.
ASSIGN COMPONENT 'REGION_CC' OF STRUCTURE <fs_target> TO
FIELD-SYMBOL(<fs_region_cc>).
* MOVE lv_region_cc TO <fs_region_cc>.
<fs_region_cc> = lv_region_cc .
ASSIGN COMPONENT 'CARE_CODE' OF STRUCTURE <fs_target> TO
FIELD-SYMBOL(<fs_care_code>).
lv_care_code = <fs_care_code>.
me->care_code_convert_mara2ext(
EXPORTING
ip_mara_care_code = lv_care_code
ip_region = lv_region_cc
IMPORTING
es_care_codes_ext = ls_care_code_iso ).

ASSIGN COMPONENT 'WASHCODE' OF STRUCTURE <fs_target> TO


FIELD-SYMBOL(<fs_care_code_region>).
* MOVE ls_care_code_iso-washcode TO <fs_care_code_region>.
<fs_care_code_region> = ls_care_code_iso-washcode.
UNASSIGN <fs_care_code_region>.
ASSIGN COMPONENT 'BLEACHCOD' OF STRUCTURE <fs_target> TO
<fs_care_code_region>.
* MOVE ls_care_code_iso-bleachcode TO <fs_care_code_region>.
<fs_care_code_region> = ls_care_code_iso-bleachcode.
UNASSIGN <fs_care_code_region>.
ASSIGN COMPONENT 'IRONINGCO' OF STRUCTURE <fs_target> TO
<fs_care_code_region>.
* MOVE ls_care_code_iso-ironingcode TO
<fs_care_code_region>.
<fs_care_code_region> = ls_care_code_iso-ironingcode.
UNASSIGN <fs_care_code_region>.
ASSIGN COMPONENT 'DRYCLEANC' OF STRUCTURE <fs_target> TO
<fs_care_code_region>.
* MOVE ls_care_code_iso-drycleancode TO
<fs_care_code_region>.
<fs_care_code_region> = ls_care_code_iso-drycleancode.
UNASSIGN <fs_care_code_region>.
ASSIGN COMPONENT 'THUMBLECO' OF STRUCTURE <fs_target> TO
<fs_care_code_region>.
* MOVE ls_care_code_iso-thumblecode TO
<fs_care_code_region>.
<fs_care_code_region> = ls_care_code_iso-thumblecode.
UNASSIGN <fs_care_code_region>.
ASSIGN COMPONENT 'WETCLEANC' OF STRUCTURE <fs_target> TO
<fs_care_code_region>.
* MOVE ls_care_code_iso-wetcleancode TO
<fs_care_code_region>.
<fs_care_code_region> = ls_care_code_iso-wetcleancode.
UNASSIGN <fs_care_code_region>.

endif.
ASSIGN COMPONENT 'TXTMI' OF STRUCTURE <fs_target> TO FIELD-
SYMBOL(<txtmi>).
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<fs_maktx>).
IF sy-subrc EQ 0.
<txtmi> = <fs_maktx>.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'LANGU' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<langu>).
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<fs_spras>).
IF sy-subrc EQ 0.
<langu> = <fs_spras>.
ENDIF.
ENDIF.
INSERT <fs_target> INTO TABLE <lt_data>.
ENDIF.
ENDLOOP.
ENDIF.

CHECK <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.

* INSERT ls_entity_data INTO TABLE lt_entity_data.


* TRY.
* co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.

* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.

ENDMETHOD.
METHOD map_mpop_2sta.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data.
FIELD-SYMBOLS : <fs_target> TYPE any,
<fs_source> TYPE any,
* <ls_ddic_api> TYPE gty_s_descr_struc,
<lt_api_source> TYPE ANY TABLE,
<ls_api_source> TYPE any,
<ls_model_data> TYPE any.
DATA : ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

CHECK is_api_data IS NOT INITIAL.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

ASSIGN COMPONENT 'MPOP_TAB' OF STRUCTURE is_api_data TO


<lt_api_source>.

IF <lt_api_source> IS ASSIGNED.

LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.


IF <ls_api_source> IS ASSIGNED .
ASSIGN COMPONENT 'WERKS' OF STRUCTURE <ls_api_source> TO FIELD-
SYMBOL(<lfs_werks>).
ASSIGN COMPONENT 'SOURCE_ID' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_mat>).
* ASSIGN COMPONENT 'PNUM1' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_pnum1>).
* ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_source> TO FIELD-
SYMBOL(<lfs_matnr>).
IF <lfs_werks> IS ASSIGNED.
READ TABLE it_t001w TRANSPORTING NO FIELDS WITH KEY werks =
<lfs_werks>

vlfkz = 'A'.
IF sy-subrc = 0 AND iv_entity EQ 'MPOP_ST'.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
* <lfs_matnr> = <lfs_mat>.
* <lfs_matnr> = gv_matnr_final.
DATA(lv_new) = abap_true.
ENDIF.

READ TABLE it_t001w TRANSPORTING NO FIELDS WITH KEY werks =


<lfs_werks>

vlfkz = 'B'.
IF sy-subrc = 0 AND iv_entity EQ 'MPOP_DC'.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
* <lfs_matnr> = <lfs_mat>.
* <lfs_matnr> = gv_matnr_final.
lv_new = abap_true.
ENDIF.

IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED AND


lv_new IS NOT INITIAL.
* READ TABLE is_api_data- INTO DATA(ls_prop) WITH KEY
source_id = <lfs_mat>
* pnum1 =
<lfs_pnum1>.
* IF sy-subrc EQ 0.
* MOVE-CORRESPONDING ls_prop TO <fs_source>.
* ENDIF.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

ASSIGN COMPONENT 'MARA' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.
INSERT <fs_target> INTO TABLE <lt_data>.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.

CHECK <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.

* INSERT ls_entity_data INTO TABLE lt_entity_data.

INSERT ls_entity_data INTO TABLE ct_entity_data.

* TRY.
* co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.

* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
CLEAR lv_new.

ENDMETHOD.

METHOD map_nosmt_2sta.
DATA: "lsr_model_data TYPE REF TO data,
lv_tab TYPE name_komp,
lv_var TYPE string.

FIELD-SYMBOLS: <ls_model_data> TYPE any,


<lt_api_source> TYPE ANY TABLE,
<lt_notes> TYPE ANY TABLE.
* <lt_prc_map> TYPE ANY TABLE.

IF iv_entity = 'BOM'.
lv_tab = 'BOM_TAB'.
ELSEIF iv_entity = 'ASSORT'.
lv_tab = 'WLK1_TAB'.
ELSEIF iv_entity = 'MEAN_GTIN'.
lv_tab = 'MLEA_TAB'.
ELSEIF iv_entity = 'ARTHIER'.
lv_tab = 'WRF_MATGRP_SKU_TAB'.
ELSEIF iv_entity = 'DRADBASIC'.
lv_tab = 'DRAD_DATA-DRAD_TAB'.
ELSEIF iv_entity = 'DRADTXT'.
lv_tab = 'DRAD_DATA-DRAD_NOTES_TAB'.
ELSEIF iv_entity = 'CLASSASGN'.
lv_tab = 'CLF_DATA-CLASSASGN'.
ELSEIF iv_entity = 'VALUATION'.
lv_tab = 'CLF_DATA-VALUATION'.
ENDIF.

FIELD-SYMBOLS: <lt_data> TYPE ANY TABLE.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).
ASSIGN lr_table_key->* TO <lt_data>.
ASSIGN lr_struc_key->* TO <ls_model_data>.

* Model Structure
* CLEAR lsr_model_data.
* CREATE DATA lsr_model_data LIKE LINE OF ct_model_data.
* ASSIGN lsr_model_data->* TO <ls_model_data>.

ASSIGN COMPONENT lv_tab OF STRUCTURE is_api_data TO <lt_api_source>.

IF <lt_api_source> IS ASSIGNED.
LOOP AT <lt_api_source> ASSIGNING FIELD-SYMBOL(<ls_api_source>).
MOVE-CORRESPONDING <ls_api_source> TO <ls_model_data>.
IF iv_entity = 'BOM'.
ASSIGN COMPONENT 'MARA_BOM' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_bom>).
ASSIGN COMPONENT 'IDNRK' OF STRUCTURE <ls_api_source> TO FIELD-
SYMBOL(<lfs_idnrk>).
IF <lfs_bom> IS ASSIGNED AND <lfs_idnrk> IS ASSIGNED.
<lfs_bom> = <lfs_idnrk>.
ENDIF.
ASSIGN COMPONENT 'UOM_MARA' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_uom>).
ASSIGN COMPONENT 'BOM_UOM' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_unit>).
IF <lfs_uom> IS ASSIGNED AND <lfs_unit> IS ASSIGNED.
<lfs_uom> = <lfs_unit>.
ENDIF.
ASSIGN COMPONENT 'QTY' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_cqty>).
ASSIGN COMPONENT 'COMP_QTY' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_cmpqty>).
IF <lfs_cqty> IS ASSIGNED AND <lfs_cmpqty> IS ASSIGNED.
<lfs_cqty> = <lfs_cmpqty>.
ENDIF.

ASSIGN COMPONENT 'UOM' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_cuom>).
ASSIGN COMPONENT 'COMP_UOM' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_cmpuom>).
IF <lfs_cuom> IS ASSIGNED AND <lfs_cmpuom> IS ASSIGNED.
<lfs_cuom> = <lfs_cmpuom>.
ENDIF.
ENDIF.

IF iv_entity = 'ASSORT'.
ASSIGN COMPONENT 'FILIA' OF STRUCTURE <ls_api_source> TO FIELD-
SYMBOL(<lfs_filia>).
ASSIGN COMPONENT 'ASSORTMEN' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_assort>).
IF <lfs_assort> IS ASSIGNED AND <lfs_filia> IS ASSIGNED.
<lfs_assort> = <lfs_filia>.
ENDIF.

ASSIGN COMPONENT 'VRKME' OF STRUCTURE <ls_api_source> TO FIELD-


SYMBOL(<lfs_vrkme>).
ASSIGN COMPONENT 'VKORG' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_vkorg>).
IF <lfs_vkorg> IS ASSIGNED AND <lfs_vrkme> IS ASSIGNED.
<lfs_vkorg> = <lfs_vrkme>.
ENDIF.

ASSIGN COMPONENT 'DATBI' OF STRUCTURE <ls_api_source> TO FIELD-


SYMBOL(<lfs_datbi>).
ASSIGN COMPONENT 'DATUB' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_datub>).
IF <lfs_datbi> IS ASSIGNED AND <lfs_datub> IS ASSIGNED.
<lfs_datub> = <lfs_datbi>.
ENDIF.

ASSIGN COMPONENT 'DATAB' OF STRUCTURE <ls_api_source> TO FIELD-


SYMBOL(<lfs_datab>).
ASSIGN COMPONENT 'DATAB1_AS' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_validfrom>).
IF <lfs_datbi> IS ASSIGNED AND <lfs_validfrom> IS ASSIGNED.
<lfs_validfrom> = <lfs_datab>.
ENDIF.
ENDIF.

IF iv_entity EQ 'DRADTXT'.
ASSIGN COMPONENT 'LANGUCODE' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_langu>).
ASSIGN COMPONENT 'LANGU' OF STRUCTURE <ls_api_source> TO FIELD-
SYMBOL(<lfs_spras>).
IF <lfs_langu> IS ASSIGNED AND <lfs_spras> IS ASSIGNED.
<lfs_langu> = <lfs_spras>.
ENDIF.

ASSIGN COMPONENT 'LINES' OF STRUCTURE <ls_api_source> TO


<lt_notes>.
IF <lt_notes> IS ASSIGNED.
LOOP AT <lt_notes> ASSIGNING FIELD-SYMBOL(<ls_notes>).
ASSIGN COMPONENT 'TDLINE' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_notes>).
IF <lfs_notes> IS ASSIGNED.
CONCATENATE lv_var <lfs_notes> INTO lv_var.
ENDIF.
ENDLOOP.
ENDIF.

ASSIGN COMPONENT 'NOTE' OF STRUCTURE <ls_api_source> TO FIELD-


SYMBOL(<lfs_note>).
ASSIGN COMPONENT 'TXTDRAD' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_txt>).
IF <lfs_txt> IS ASSIGNED AND <lfs_note> IS ASSIGNED.
CONCATENATE <lfs_note> lv_var INTO lv_var.
<lfs_txt> = lv_var.
CLEAR lv_var.
ENDIF.
ENDIF.

IF iv_entity EQ 'CLASSASGN'.
ASSIGN COMPONENT 'KEY-ID-CLASS' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_cl>).
ASSIGN COMPONENT 'CLASS' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_class>).
IF <lfs_class> IS ASSIGNED AND <lfs_cl> IS ASSIGNED.
<lfs_class> = <lfs_cl>.
ENDIF.

ASSIGN COMPONENT 'KEY-ID-CLASSTYPE' OF STRUCTURE


<ls_api_source> TO FIELD-SYMBOL(<lfs_cltype>).
ASSIGN COMPONENT 'CLASSTYPE' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_ctype>).
IF <lfs_ctype> IS ASSIGNED AND <lfs_cltype> IS ASSIGNED.
<lfs_ctype> = <lfs_cltype>.
ENDIF.

ASSIGN COMPONENT 'ATT-VAL-CLSTATUS' OF STRUCTURE


<ls_api_source> TO FIELD-SYMBOL(<lfs_stat>).
ASSIGN COMPONENT 'CLSTA' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_clsta>).
IF <lfs_clsta> IS ASSIGNED AND <lfs_stat> IS ASSIGNED.
<lfs_clsta> = <lfs_stat>.
ENDIF.

ASSIGN COMPONENT 'ATT-CLINT' OF STRUCTURE <ls_api_source> TO


FIELD-SYMBOL(<lfs_aclint>).
ASSIGN COMPONENT 'CLINT' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_clint>).
IF <lfs_clint> IS ASSIGNED AND <lfs_aclint> IS ASSIGNED.
<lfs_clint> = <lfs_aclint>.
ENDIF.

ENDIF.

IF iv_entity EQ 'VALUATION'.

ASSIGN COMPONENT 'KEY-ID-ATINN' OF STRUCTURE <ls_api_source> TO


FIELD-SYMBOL(<lfs_atinn>).
ASSIGN COMPONENT 'CHARID' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lv_charid>).
IF <lv_charid> IS ASSIGNED AND <lfs_atinn> IS ASSIGNED.
<lv_charid> = <lfs_atinn>.
ENDIF.

ASSIGN COMPONENT 'KEY-ID-CLASSTYPE' OF STRUCTURE


<ls_api_source> TO <lfs_cltype>.
ASSIGN COMPONENT 'CLASSTYPE' OF STRUCTURE <ls_model_data> TO
<lfs_ctype>.
IF <lfs_ctype> IS ASSIGNED AND <lfs_cltype> IS ASSIGNED.
<lfs_ctype> = <lfs_cltype>.
ENDIF.

ASSIGN COMPONENT 'KEY-ID-VALCNT' OF STRUCTURE <ls_api_source>


TO FIELD-SYMBOL(<lfs_valcnt>).
ASSIGN COMPONENT 'VALCNT' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lv_val>).
IF <lv_val> IS ASSIGNED AND <lfs_valcnt> IS ASSIGNED.
<lv_val> = <lfs_valcnt>.
ENDIF.

ASSIGN COMPONENT 'ATT-ATAUTH' OF STRUCTURE <ls_api_source> TO


FIELD-SYMBOL(<lfs_at>).
ASSIGN COMPONENT 'ATAUT' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lv_ataut>).
IF <lv_ataut> IS ASSIGNED AND <lfs_at> IS ASSIGNED.
<lv_ataut> = <lfs_at>.
ENDIF.

ASSIGN COMPONENT 'ATT-ATSRT' OF STRUCTURE <ls_api_source> TO


FIELD-SYMBOL(<lfs_at1>).
ASSIGN COMPONENT 'ATSRT' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lv_atsrt>).
IF <lv_atsrt> IS ASSIGNED AND <lfs_at1> IS ASSIGNED.
<lv_atsrt> = <lfs_at1>.
ENDIF.

ASSIGN COMPONENT 'ATWRT_VAL' OF STRUCTURE <ls_model_data> TO


FIELD-SYMBOL(<lv_atwrt>).
ASSIGN COMPONENT 'ATT-VAL-ATWRT' OF STRUCTURE <ls_api_source>
TO FIELD-SYMBOL(<lfs_atwrtv>).
IF <lv_atwrt> IS ASSIGNED AND <lfs_atwrtv> IS ASSIGNED.
<lv_atwrt> = <lfs_atwrtv>.
ENDIF.

ASSIGN COMPONENT 'ATFLV' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lv_atflv>).
ASSIGN COMPONENT 'ATT-VAL-ATFLV' OF STRUCTURE <ls_api_source>
TO FIELD-SYMBOL(<lfs_atflvv>).
IF <lv_atflv> IS ASSIGNED AND <lfs_atflvv> IS ASSIGNED.
<lv_atflv> = <lfs_atflvv>.
ENDIF.

ASSIGN COMPONENT 'ATAWE' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_atawe>).
ASSIGN COMPONENT 'ATT-VAL-ATAWE' OF STRUCTURE <ls_api_source>
TO FIELD-SYMBOL(<lfs_atawev>).
IF <lfs_atawe> IS ASSIGNED AND <lfs_atawev> IS ASSIGNED.
<lfs_atawe> = <lfs_atawev>.
ENDIF.

ASSIGN COMPONENT 'ATFLB' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_atflb>).
ASSIGN COMPONENT 'ATT-VAL-ATFLB' OF STRUCTURE <ls_api_source>
TO FIELD-SYMBOL(<lfs_atflbv>).
IF <lfs_atflb> IS ASSIGNED AND <lfs_atflbv> IS ASSIGNED.
<lfs_atflb> = <lfs_atflbv>.
ENDIF.

ASSIGN COMPONENT 'ATAW1' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_ataw1>).
ASSIGN COMPONENT 'ATT-VAL-ATAW1' OF STRUCTURE <ls_api_source>
TO FIELD-SYMBOL(<lfs_ataw1v>).
IF <lfs_ataw1> IS ASSIGNED AND <lfs_ataw1v> IS ASSIGNED.
<lfs_ataw1> = <lfs_ataw1v>.
ENDIF.

ASSIGN COMPONENT 'ATCOD' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_atcod>).
ASSIGN COMPONENT 'ATT-VAL-ATCOD' OF STRUCTURE <ls_api_source>
TO FIELD-SYMBOL(<lfs_atcodv>).
IF <lfs_atcod> IS ASSIGNED AND <lfs_atcodv> IS ASSIGNED.
<lfs_atcod> = <lfs_atcodv>.
ENDIF.

ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara1>).
IF <lfs_mara1> IS ASSIGNED.
<lfs_mara1> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDLOOP.
ENDIF.
IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.
ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.

* TRY.
* co_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data.
ENDIF.

ENDMETHOD.

METHOD map_restrict_stag.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
lv_tab TYPE name_komp ##NEEDED.

FIELD-SYMBOLS: <ls_model_data> TYPE any,


<fs_target> TYPE any,
<fs_source> TYPE any,
<lt_data> TYPE ANY TABLE.

DATA: it_classdata TYPE STANDARD TABLE OF classdata,


wa_classdata LIKE LINE OF it_classdata,
it_features TYPE STANDARD TABLE OF merkmale,
wa_features LIKE LINE OF it_features,
it_wrf_charval TYPE /ugi4/ar_tt_charval,
it_wrf_charvalt TYPE /ugi4/ar_tt_charvalt.

DATA :" lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

IF iv_entity = 'ADDITIONA'.
lv_tab = 'ADDITIONAL_TAB'.
ELSEIF iv_entity = 'PURCHINFO'.
lv_tab = 'EINE_TAB'.
ELSEIF iv_entity = 'PURCHEINA'.
lv_tab = 'EINA_TAB'.
ENDIF.

CHECK is_api_source IS NOT INITIAL.

DATA(ls_data) = is_api_source ##NEEDED.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).

ASSIGN lr_target->* TO <fs_target>.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).
ASSIGN lr_table_key->* TO <lt_data>.
ASSIGN lr_struc_key->* TO <ls_model_data>.

READ TABLE is_api_source-class_gen_tab INTO DATA(ls_conf) INDEX 1.


IF sy-subrc EQ 0.
wa_classdata-class = ls_conf-class_var.
wa_classdata-klart = ls_conf-klart_var.
wa_classdata-spras = sy-langu.
APPEND wa_classdata TO it_classdata.

CALL FUNCTION 'RFC_MERCHANDISE_CLASSES_READ'


TABLES
pi_classdata = it_classdata
po_features = it_features
EXCEPTIONS
no_classes = 1
OTHERS = 2 ##FM_SUBRC_OK.

SORT it_features ASCENDING BY imerk.


DELETE ADJACENT DUPLICATES FROM it_features COMPARING imerk.
LOOP AT it_features INTO wa_features .
/ugi4/mdg_bs_ecc_ar_services=>get_charval_values_read_all(
EXPORTING atinn = wa_features-imerk

IMPORTING it_char_val = it_wrf_charval


it_char_valt = it_wrf_charvalt ).
IF it_wrf_charvalt IS NOT INITIAL.
SELECT atinn, atzhl, atwrt FROM cawn INTO TABLE @DATA(lt_cawn)
FOR ALL ENTRIES IN @it_wrf_charvalt
WHERE atinn = @it_wrf_charvalt-atinn AND
atwrt = @it_wrf_charvalt-atwrt.
ENDIF.
LOOP AT it_wrf_charvalt INTO DATA(ls_char).

MOVE-CORRESPONDING ls_char TO <ls_model_data>.

READ TABLE it_wrf_charval INTO DATA(wa_wrf_charval) WITH KEY


atinn = ls_char-atinn
atwrt =
ls_char-atwrt.
IF sy-subrc = 0.
ASSIGN COMPONENT 'SRTPO' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_srtpo>).
IF <lfs_srtpo> IS ASSIGNED.
<lfs_srtpo> = wa_wrf_charval-srtpo.
ENDIF.
ENDIF.

READ TABLE lt_cawn INTO DATA(wa_cawn) WITH KEY atinn = ls_char-


atinn
atwrt =
ls_char-atwrt.
IF sy-subrc = 0.
ASSIGN COMPONENT 'ADZHL' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_adzhl>).
IF <lfs_adzhl> IS ASSIGNED.
<lfs_adzhl> = wa_cawn-atzhl.
ENDIF.
ENDIF.

* ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara>).
* IF <lfs_mara> IS ASSIGNED.
** <lfs_mara> = ls_conf-source_id.
* <lfs_mara> = gv_matnr_final.
* ENDIF.

ASSIGN COMPONENT 'ATWRT_RES' OF STRUCTURE <ls_model_data> TO


FIELD-SYMBOL(<lfs_atwrt>).
IF <lfs_atwrt> IS ASSIGNED.
<lfs_atwrt> = ls_char-atwrt.
ENDIF.
ASSIGN COMPONENT 'ATWTB' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_atwtb>).
IF <lfs_atwtb> IS ASSIGNED.
<lfs_atwtb> = ls_char-atwtb.
ENDIF.
ASSIGN COMPONENT 'ATNAM1' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_atnam>).
IF <lfs_atnam> IS ASSIGNED.
<lfs_atnam> = wa_features-atnam.
ENDIF.

READ TABLE is_api_source-restrict_tab WITH KEY matnr = ls_conf-


mara
atinn = ls_char-
atinn TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'RESTRICTV' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_rest>).
IF <lfs_rest> IS ASSIGNED.
<lfs_rest> = abap_true.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara1>).
IF <lfs_mara1> IS ASSIGNED.
<lfs_mara1> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDLOOP.
CLEAR lt_cawn.
ENDLOOP.
ENDIF.

IF <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
* CALL METHOD write_entity_data
* EXPORTING
* it_entity_data = lt_entity_data " MDG: Entity
Type with Data and Attributes (Table)
* IMPORTING
* et_message = DATA(lt_messages) " Messages
* CHANGING
* co_conv_api = co_conv_api ##NEEDED. "
Governance API: Single Chg. Req. Convenience Governance API
ENDIF.
ENDMETHOD.

METHOD map_tab_2sta.
TYPES: BEGIN OF lty_klah,
clint TYPE clint,
class TYPE klasse_d,
klart TYPE klassenart,
END OF lty_klah.

DATA : lwa_klah TYPE lty_klah.

DATA: lr_source TYPE REF TO data,


lr_target TYPE REF TO data,
lv_tab TYPE name_komp.

FIELD-SYMBOLS: <ls_model_data> TYPE any,


<fs_target> TYPE any,
<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<lt_data> TYPE ANY TABLE,
<ls_api_source> TYPE any.
DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,
ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

IF iv_entity = 'ADDITIONA'.
lv_tab = 'ADDITIONAL_TAB'.
ELSEIF iv_entity = 'PURCHINFO'.
lv_tab = 'EINE_TAB'.
ELSEIF iv_entity = 'PURCHEINA'.
lv_tab = 'EINA_TAB'.
ENDIF.

CHECK is_api_data IS NOT INITIAL.

DATA(ls_data) = is_api_data ##NEEDED.


CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(
EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

ASSIGN COMPONENT lv_tab OF STRUCTURE is_api_data TO <lt_api_source>.

IF <lt_api_source> IS ASSIGNED.
LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.
IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.

IF iv_entity = 'PURCHINFO' OR iv_entity = 'PURCHEINA'.

ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_source> TO FIELD-


SYMBOL(<lfs_mat>).
ASSIGN COMPONENT 'INFNR' OF STRUCTURE <fs_source> TO FIELD-
SYMBOL(<lfs_infnr>).

* ASSIGN COMPONENT 'SOURCE_ID' OF STRUCTURE <ls_api_source> TO


FIELD-SYMBOL(<lfs_sourceid>).
* IF <lfs_sourceid> IS ASSIGNED AND <lfs_mat> IS ASSIGNED.
* <lfs_mat> = <lfs_sourceid>.

READ TABLE is_api_data-eina_tab INTO DATA(ls_eina) WITH KEY


""WITH KEY matnr = <lfs_mat>
infnr = <lfs_infnr>.
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'LIFNR' OF STRUCTURE <fs_source> TO FIELD-
SYMBOL(<lfs_lifnr>).
IF <lfs_lifnr> IS ASSIGNED.
<lfs_lifnr> = ls_eina-lifnr.
ENDIF.
ENDIF.
ENDIF.

IF iv_entity = 'ADDITIONA'.
ASSIGN COMPONENT 'SEQUENCE' OF STRUCTURE <fs_source> TO
FIELD-SYMBOL(<lfs_seq>).
ASSIGN COMPONENT 'LFDNR' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_seq1>).
IF <lfs_seq> IS ASSIGNED AND <lfs_seq1> IS ASSIGNED.
<lfs_seq> = <lfs_seq1>.
ENDIF.
ASSIGN COMPONENT 'UNIT_ADD' OF STRUCTURE <fs_source> TO
FIELD-SYMBOL(<lfs_unit>).
ASSIGN COMPONENT 'ADDIVKME' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_vkme>).
IF <lfs_unit> IS ASSIGNED AND <lfs_vkme> IS ASSIGNED.
<lfs_unit> = <lfs_vkme>.
ENDIF.

ASSIGN COMPONENT 'MTXID_ADD' OF STRUCTURE <fs_source> TO


FIELD-SYMBOL(<lfs_mtx>).
ASSIGN COMPONENT 'MTXID' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_mtxid>).
IF <lfs_mtx> IS ASSIGNED AND <lfs_mtxid> IS ASSIGNED.
<lfs_mtx> = <lfs_mtxid>.
ENDIF.
ASSIGN COMPONENT 'ADDIMAT' OF STRUCTURE <fs_source> TO FIELD-
SYMBOL(<lfs_addimat>).
IF <lfs_addimat> IS ASSIGNED.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = <lfs_addimat>
IMPORTING
output = <lfs_addimat>
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).
if iv_entity eq 'PURCHINFO' and ls_eina is NOT INITIAL.
move-CORRESPONDING ls_eina to <fs_target>.
endif.
IF iv_entity = 'ADDITIONA'.
ASSIGN COMPONENT 'ADDICLINT' OF STRUCTURE <fs_source> TO
FIELD-SYMBOL(<add_clint>).
IF <add_clint> IS ASSIGNED AND <add_clint> IS NOT INITIAL.
SELECT SINGLE clint class klart FROM klah INTO lwa_klah
WHERE clint = <add_clint>.
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'CLAS_ADD' OF STRUCTURE <fs_target> TO
FIELD-SYMBOL(<clas_add>).
IF sy-subrc EQ 0.
<clas_add> = lwa_klah-class.
ENDIF.
ASSIGN COMPONENT 'KLAS_ADD' OF STRUCTURE <fs_target> TO
FIELD-SYMBOL(<klas_add>).
IF sy-subrc EQ 0.
<klas_add> = lwa_klah-klart.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.

ASSIGN COMPONENT 'INFNR' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_infnr1>).
IF <lfs_infnr1> IS ASSIGNED.

SELECT SINGLE * FROM eina INTO @DATA(ls_eina1) WHERE "#EC


CI_ALL_FIELDS_NEEDED
infnr = @<lfs_infnr1> AND
matnr = @gv_matnr_final ##NEEDED.
IF sy-subrc NE 0.
CLEAR <lfs_infnr1>.
ENDIF.
ENDIF.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDIF.
ENDLOOP.
ENDIF.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
* TRY.
* co_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data.
ENDIF.
ENDMETHOD.

METHOD map_tax_2_sta.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in ##NEEDED.
DATA : lt_tax_api_x TYPE cmd_bs_mat_t_steu_x,
ls_tax_api_x TYPE cmd_bs_mat_s_steu_x,
ls_entity TYPE usmd_gov_api_s_ent_tabl,
lt_entity TYPE usmd_gov_api_ts_ent_tabl ##NEEDED.
FIELD-SYMBOLS : <fs_target> TYPE any,
<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<lt_api_source_x> TYPE ANY TABLE,
<ls_api_source> TYPE any.
CHECK is_api_data IS NOT INITIAL.
ls_api_data = is_api_data.

DATA : lt_entity_data TYPE usmd_gov_api_ts_ent_data ##NEEDED,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .

DATA : lr_struc_key TYPE REF TO data ##NEEDED,


lr_table_key TYPE REF TO data.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

DATA : lr_struc_tax_key TYPE REF TO data,


lr_table_tax_key TYPE REF TO data.

FIELD-SYMBOLS : <lt_key> TYPE ANY TABLE,


<ls_key> TYPE any.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key
IMPORTING
er_structure = lr_struc_tax_key
er_table = lr_table_tax_key
).

ASSIGN lr_struc_tax_key->* TO <ls_key>.


ASSIGN lr_table_tax_key->* TO <lt_key>.

ASSIGN lr_table_key->* TO <lt_data>.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CHECK lv_source IS NOT INITIAL.


CREATE DATA lr_source TYPE (lv_source).
ASSIGN lr_source->* TO <fs_source>.
ASSIGN lr_table_key->* TO <lt_data>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

* ENDIF.

TRANSLATE lv_source TO UPPER CASE.


ASSIGN COMPONENT 'MLAN_SALES_TAB' OF STRUCTURE is_api_data TO
<lt_api_source>.
CHECK sy-subrc EQ 0.
ASSIGN COMPONENT 'MLAN_SALES_TAB_X' OF STRUCTURE is_api_data TO
<lt_api_source_x>.

IF <lt_api_source> IS ASSIGNED.
LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.

IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.


MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_target> TO FIELD-


SYMBOL(<lfs_mara_temp>).
ASSIGN COMPONENT 'MARA' OF STRUCTURE <fs_target> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <fs_target> INTO TABLE <lt_data>.
ENDIF.
ENDLOOP.
ENDIF.

LOOP AT lt_tax_api_x INTO ls_tax_api_x WHERE delete_row EQ abap_true.


"#EC CI_SORTSEQ
MOVE-CORRESPONDING ls_tax_api_x TO <ls_key>.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_key> TO FIELD-
SYMBOL(<lfs_matnr>).
IF sy-subrc EQ 0.
<lfs_matnr> = gv_matnr_final.
ENDIF.
INSERT <ls_key> INTO TABLE <lt_key>.
CLEAR <ls_key>.
ENDLOOP.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_Entity_Data INto table ct_entity_data.

* TRY.
* io_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
ENDIF.

IF <lt_key> IS ASSIGNED AND <lt_key> IS NOT INITIAL.


ls_entity-entity = iv_entity.
GET REFERENCE OF <lt_key> INTO ls_entity-tabl.
INSERT ls_entity INTO TABLE lt_entity.
insert ls_entity into TABLE ct_entity_del.
* TRY.
* io_conv_api->delete_entity_data(
* EXPORTING
* it_entity_keys = lt_entity " MDG: Table
Type for Table of Entities Structure
* ).
* CATCH cx_usmd_gov_api_core_error. " CX_USMD_CORE_DYNAMIC_CHECK
* CATCH cx_usmd_gov_api_entity_del. " Error While Deleting an
Entity
* ENDTRY.
ENDIF.

ENDMETHOD.

METHOD map_textfibr_comp.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in ##NEEDED,
* lsr_model_data TYPE REF TO data,
* lt_message TYPE usmd_t_message,
lv_textseq TYPE /ugi4/seq,
lv_fibrseq TYPE /ugi4/seq,
lv_new TYPE /ugi4/seq.
* lsr_model_del TYPE REF TO data.

DATA:
* lo_usmd_model_ext TYPE REF TO if_usmd_model_ext,
lt_text_comp TYPE STANDARD TABLE OF /ugi4/_s_ar_pp_textcomp,
ls_text_comp TYPE /ugi4/_s_ar_pp_textcomp,
lt_text_fibr TYPE STANDARD TABLE OF /ugi4/_s_ar_pp_textfibr,
ls_text_fibr TYPE /ugi4/_s_ar_pp_textfibr.

FIELD-SYMBOLS : <fs_target> TYPE any,


<fs_source> TYPE any,
* <ls_ddic_api> TYPE gty_s_descr_struc,
<lt_api_source> TYPE ANY TABLE,
<ls_api_source> TYPE any,
<ls_model_data> TYPE any.
* <ls_model_del> TYPE any.

CHECK is_api_data IS NOT INITIAL.

ls_api_data = is_api_data.
DATA : lt_entity_data TYPE usmd_gov_api_ts_ent_data ##NEEDED,
ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

TRANSLATE lv_source TO UPPER CASE.


IF iv_entity = 'TEXTCOMP'.
DATA(lv_tabname) = 'TEXTILE_COMP'.
ELSEIF iv_entity = 'TEXTFIBR'.
lv_tabname = 'TEXTILE_FIBR'.
ENDIF.

ASSIGN COMPONENT lv_tabname OF STRUCTURE is_api_data TO


<lt_api_source>.
CHECK sy-subrc EQ 0.
IF <lt_api_source> IS ASSIGNED.
IF lt_text_comp IS NOT INITIAL.
SORT lt_text_comp BY text_seq DESCENDING.
READ TABLE lt_text_comp INTO DATA(ls_text_seq) INDEX 1.
IF sy-subrc = 0.
lv_textseq = ls_text_seq-text_seq.
ENDIF.
ENDIF.

IF lt_text_fibr IS NOT INITIAL.


SORT lt_text_fibr BY text_seq ASCENDING fibr_seq DESCENDING.
DELETE lt_text_fibr WHERE fiber_cod IS INITIAL.
ENDIF.
CASE iv_entity.
WHEN 'TEXTCOMP'.

LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.


IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


ASSIGN COMPONENT 'TEXT_SEQ' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_tseq>).
IF <lfs_tseq> IS ASSIGNED.
* IF /ugi4/cl_mdg_rfm_2_staging=>gv_mass_change = 'U'.
ASSIGN COMPONENT 'TEXT_CODE' OF STRUCTURE <ls_model_data>
TO FIELD-SYMBOL(<lfs_cod>).
ASSIGN COMPONENT 'ANIMAL_OR' OF STRUCTURE <ls_model_data>
TO FIELD-SYMBOL(<lfs_anml>).
ASSIGN COMPONENT 'TEXT_POS' OF STRUCTURE <ls_model_data>
TO FIELD-SYMBOL(<lfs_pos>).
IF <lfs_cod> IS ASSIGNED AND <lfs_anml> IS ASSIGNED AND
<lfs_pos> IS ASSIGNED.
READ TABLE lt_text_comp WITH KEY mara =
gv_orignal_matnr
text_code = <lfs_cod>
animal_or = <lfs_anml>
text_pos = <lfs_pos>
INTO ls_text_comp.
IF sy-subrc = 0.
<lfs_tseq> = ls_text_comp-text_seq.
ELSE.
lv_textseq = lv_textseq + 1.
<lfs_tseq> = lv_textseq.
ENDIF.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO


FIELD-SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDIF.
ENDLOOP.

WHEN 'TEXTFIBR'.
CLEAR lv_textseq.
LOOP AT is_api_data-textile_comp INTO DATA(ls_comp).
lv_textseq = lv_textseq + 1.
CLEAR lv_fibrseq.
lv_new = 1.
LOOP AT is_api_data-textile_fibr INTO DATA(ls_fibr) WHERE
textil_comp_pos = ls_comp-textil_comp_pos. "#EC CI_SORTSEQ
lv_fibrseq = lv_fibrseq + 1.
ls_fibr-textil_fibr_pos = lv_fibrseq.
ls_fibr-textil_comp_pos = lv_textseq.
MOVE-CORRESPONDING ls_fibr TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


ASSIGN COMPONENT 'TEXT_SEQ' OF STRUCTURE <ls_model_data> TO
<lfs_tseq>.
ASSIGN COMPONENT 'FIBR_SEQ' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_fseq>).
IF <lfs_tseq> IS ASSIGNED AND <lfs_fseq> IS ASSIGNED.
* IF /ugi4/cl_mdg_rfm_2_staging=>gv_mass_change = 'U'.
ASSIGN COMPONENT 'FIBER_COD' OF STRUCTURE <ls_model_data>
TO FIELD-SYMBOL(<lfs_fcod>).
ASSIGN COMPONENT 'FIBER_PAR' OF STRUCTURE <ls_model_data>
TO FIELD-SYMBOL(<lfs_par>).
ASSIGN COMPONENT 'FIBER_POS' OF STRUCTURE <ls_model_data>
TO FIELD-SYMBOL(<lfs_fpos>).
ASSIGN COMPONENT 'TEXT_POS1' OF STRUCTURE <ls_model_data>
TO <lfs_pos>.
IF <lfs_fcod> IS ASSIGNED AND <lfs_par> IS ASSIGNED AND
<lfs_fpos> IS ASSIGNED AND <lfs_pos> IS ASSIGNED.
READ TABLE lt_text_fibr WITH KEY mara =
gv_orignal_matnr fiber_cod = <lfs_fcod>
text_pos1 = <lfs_pos>
INTO ls_text_fibr.
IF sy-subrc = 0.
<lfs_fseq> = ls_text_fibr-fibr_seq.
<lfs_tseq> = ls_text_fibr-text_seq.
ELSE.
READ TABLE lt_text_fibr WITH KEY mara =
gv_orignal_matnr text_seq = lv_textseq
INTO DATA(ls_text_fibr_new).
IF sy-subrc = 0.
lv_fibrseq = ls_text_fibr_new-fibr_seq + lv_new.
<lfs_fseq> = lv_fibrseq.
<lfs_tseq> = ls_text_fibr-text_seq.
lv_new = lv_new + 1.
ELSE.
<lfs_tseq> = lv_textseq.
<lfs_fseq> = lv_fibrseq.
ENDIF.
ENDIF.
ENDIF.
* ELSE.
* <lfs_tseq> = lv_textseq.
* <lfs_fseq> = lv_fibrseq.
* ENDIF.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO


<lfs_mara>.
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDLOOP.
ENDLOOP.
ENDCASE.
CLEAR lv_textseq .
CLEAR lv_fibrseq .
ENDIF.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
* TRY.
* co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
CLEAR : lt_entity_data,ls_entity_data.
ENDIF.
ENDMETHOD.

METHOD map_text_2sta.
DATA:" lsr_model_data TYPE REF TO data,
lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
lv_var TYPE string,
lv_tab TYPE name_komp,
lv_comp TYPE name_komp.

FIELD-SYMBOLS: <ls_model_data> TYPE any,


<fs_target> TYPE any,
<fs_source> TYPE any,
<ls_ddic_api> TYPE gty_s_descr_struc,
<lt_api_source> TYPE ANY TABLE,
<ls_api_source> TYPE any,
<lt_notes> TYPE ANY TABLE.

CHECK is_api_data IS NOT INITIAL.

DATA(ls_data) = is_api_data .

IF iv_entity EQ 'MVKETEXT'.
lv_tab = 'SALES_NOTES_LINES_TAB'.
lv_comp = 'TXTMVKE'.
ELSEIF iv_entity = 'BASIDTEXT'.
lv_tab = 'NOTES_LINES_TAB'.
lv_comp = 'TXTBASIC'.
ELSEIF iv_entity = 'INSPETEXT'.
lv_tab = 'INS_LINES_TAB'.
lv_comp = 'TXTINSPEC'.
ELSEIF iv_entity = 'BPORDTEXT'.
lv_tab = 'BPORD_LINES_TAB'.
lv_comp = 'TXTBPORD'.
ENDIF.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE .


DATA : lr_struc_key TYPE REF TO data,
lr_table_key TYPE REF TO data.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_txt_langu
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

TRANSLATE lv_source TO UPPER CASE.

IF iv_entity = 'INSPETEXT'.
ASSIGN COMPONENT 'INS_TAB'
OF STRUCTURE ls_data TO <lt_api_source>.

ELSEIF iv_entity = 'BPORDTEXT'.


ASSIGN COMPONENT 'BPORD_LINES_TAB'
OF STRUCTURE ls_data TO <lt_api_source>.

ELSEIF iv_entity = 'BASIDTEXT' OR iv_entity = 'MVKETEXT'.


ASSIGN COMPONENT lv_tab OF STRUCTURE ls_data TO <lt_api_source>.
ELSE.
READ TABLE sts_ddic_api_data ASSIGNING <ls_ddic_api>
WITH TABLE KEY line_type COMPONENTS name_line_type =
lv_source.
IF sy-subrc = 0.
ASSIGN COMPONENT <ls_ddic_api>-name_component
OF STRUCTURE ls_data TO <lt_api_source>.
ENDIF.
ENDIF.

IF <lt_api_source> IS ASSIGNED.

LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.


IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.

IF iv_entity = 'BPORDTEXT'.
ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_spras>).
ASSIGN COMPONENT 'TDSPRAS' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_tdspras>).
IF <lfs_spras> IS ASSIGNED AND <lfs_tdspras> IS ASSIGNED.
<lfs_spras> = <lfs_tdspras>.
ENDIF.
ASSIGN COMPONENT 'TXTBPORD' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_potxt>).
ASSIGN COMPONENT 'LONGTEXT' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_text>).
IF <lfs_potxt> IS ASSIGNED AND <lfs_text> IS ASSIGNED.
<lfs_potxt> = <lfs_text>.
ENDIF.
ENDIF.

ASSIGN COMPONENT lv_tab OF STRUCTURE ls_data TO <lt_notes>.


IF <lt_notes> IS ASSIGNED.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_matnr>).
ASSIGN COMPONENT 'VKORG' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_vkorg>).
ASSIGN COMPONENT 'VTWEG' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_vtweg>).
ASSIGN COMPONENT 'LANGU' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_langu>).
ASSIGN COMPONENT 'TDID' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_tdid>).
ASSIGN COMPONENT 'SOURCE_ID' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_poid>).
ASSIGN COMPONENT 'TDSPRAS' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_pospras>).

LOOP AT <lt_notes> ASSIGNING FIELD-SYMBOL(<ls_notes>).


ASSIGN COMPONENT 'MATNR' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_matn>).
ASSIGN COMPONENT 'VKORG' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_vkor>).
ASSIGN COMPONENT 'VTWEG' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_vtwe>).
ASSIGN COMPONENT 'LANGU' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_lang>).
ASSIGN COMPONENT 'TDID' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_td>).
ASSIGN COMPONENT 'TDLINE' OF STRUCTURE <ls_notes> TO FIELD-
SYMBOL(<lfs_line>).
ASSIGN COMPONENT 'SOURCE_ID' OF STRUCTURE <ls_notes> TO
FIELD-SYMBOL(<lfs_pomat>).
ASSIGN COMPONENT 'TDSPRAS' OF STRUCTURE <ls_notes> TO
FIELD-SYMBOL(<lfs_polan>).

IF <lfs_matn> IS ASSIGNED AND <lfs_matnr> IS ASSIGNED AND


<lfs_lang> IS ASSIGNED AND <lfs_langu> IS ASSIGNED AND
<lfs_td> IS ASSIGNED AND <lfs_tdid> IS ASSIGNED AND
<lfs_line> IS ASSIGNED.

IF iv_entity = 'MVKETEXT'.
IF <lfs_vkor> IS ASSIGNED AND <lfs_vkorg> IS ASSIGNED
AND
<lfs_vtwe> IS ASSIGNED AND <lfs_vtweg> IS ASSIGNED.

IF <lfs_matn> EQ <lfs_matnr> AND <lfs_vkor> EQ


<lfs_vkorg> AND
<lfs_vtwe> EQ <lfs_vtweg> AND <lfs_lang> EQ
<lfs_langu> AND
<lfs_td> EQ <lfs_tdid> .
CONCATENATE lv_var <lfs_line> INTO lv_var.
ENDIF.
ENDIF.

ELSEIF iv_entity = 'BASIDTEXT' OR iv_entity =


'INSPETEXT'.

IF <lfs_matn> EQ <lfs_matnr> AND <lfs_lang> EQ


<lfs_langu> AND
<lfs_td> EQ <lfs_tdid> .
CONCATENATE lv_var <lfs_line> INTO lv_var SEPARATED
BY space.
ENDIF.
ENDIF.
ELSEIF iv_entity = 'BPORDTEXT'.
IF <lfs_poid> IS ASSIGNED AND <lfs_pomat> IS ASSIGNED AND
<lfs_pospras> IS ASSIGNED AND <lfs_polan> IS ASSIGNED AND
<lfs_poid> EQ <lfs_pomat> AND <lfs_pospras> EQ
<lfs_polan> AND
<lfs_td> EQ <lfs_tdid> .
CONCATENATE lv_var <lfs_line> INTO lv_var SEPARATED BY
space.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
IF lv_var IS NOT INITIAL.
ASSIGN COMPONENT lv_comp OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_note>).
IF <lfs_note> IS ASSIGNED.
CONCATENATE <lfs_note> '.' lv_var INTO lv_var.
<lfs_note> = lv_var.
CLEAR lv_var.
ENDIF.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDIF.
ENDLOOP.

CHECK <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
* TRY.
* co_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
ENDIF.

ENDMETHOD.

METHOD map_to_api_structure.
IF is_db_attr IS NOT INITIAL.
DATA(ls_db_attr) = is_db_attr.
fill_db_attr(
CHANGING
cs_db_attr = ls_db_attr
).
es_db_attr = ls_db_attr.
ENDIF.

ENDMETHOD.

METHOD map_unitofmsr_2sta.

DATA: lr_source TYPE REF TO data,


lr_target TYPE REF TO data,
ls_marm_data TYPE cmd_bs_mat_t_marm ##NEEDED.
* lsr_model_data TYPE REF TO data,
* lt_message TYPE usmd_t_message,
* lsr_model_del TYPE REF TO data.

FIELD-SYMBOLS : <fs_target> TYPE any,


<fs_source> TYPE any,
* <ls_ddic_api> TYPE gty_s_descr_struc,
* <lt_api_source> TYPE ANY TABLE,
* <ls_api_source> TYPE any,
<ls_model_data> TYPE any,
* <ls_model_del> TYPE any,
<lt_data> TYPE ANY TABLE.
* <lt_prc_map> TYPE ANY TABLE.

CHECK is_marm_data IS NOT INITIAL.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

ls_marm_data = is_marm_data.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.
TRANSLATE lv_source TO UPPER CASE.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

LOOP AT is_marm_data ASSIGNING FIELD-SYMBOL(<ls_marm>).

IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.


MOVE-CORRESPONDING <ls_marm> TO <fs_source>.

/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.

ASSIGN COMPONENT 'KZAUSME' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<fs_deliver>).
ASSIGN COMPONENT 'KZVRKME' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<fs_sales>).
ASSIGN COMPONENT 'KZBME' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<fs_kzbme>).
ASSIGN COMPONENT 'MESUB' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_mesub>).
ASSIGN COMPONENT 'KZBSTME' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<fs_kst>).
assign COMPONENT 'NTGEW' OF STRUCTURE <ls_model_data> to FIELD-
SYMBOL(<fs_NTGEW>).

READ TABLE is_mara_data ASSIGNING FIELD-SYMBOL(<ls_mara>) WITH


KEY matnr = <ls_marm>-matnr.
IF sy-subrc = 0.

IF ( <ls_mara>-meins IS NOT INITIAL ) and ( <lfs_mesub> is


INITIAL ).
<lfs_mesub> = <ls_mara>-meins.
ENDIF.

IF <ls_marm>-meinh EQ <ls_mara>-meins.
<fs_kzbme> = abap_true.
<fs_NTGEW> = <ls_mara>-ntgew.
ENDIF.

IF <ls_marm>-meinh EQ <ls_mara>-bstme OR ( <fs_kzbme> =


abap_true AND <ls_mara>-bstme IS INITIAL ).
<fs_kst> = abap_true.
ENDIF.
ENDIF.

READ TABLE is_maw1_data ASSIGNING FIELD-SYMBOL(<ls_maw1>) WITH


KEY matnr = <ls_marm>-matnr.
IF sy-subrc = 0.
IF <ls_marm>-meinh IS ASSIGNED.

IF <ls_marm>-meinh EQ <ls_maw1>-wvrkm OR ( <fs_kzbme> =


abap_true AND <ls_maw1>-wvrkm IS INITIAL ).
<fs_sales> = abap_true.
ENDIF.
IF <ls_marm>-meinh EQ <ls_maw1>-wausm OR ( <fs_kzbme> =
abap_true AND <ls_maw1>-wausm IS INITIAL ).
<fs_deliver> = abap_true.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDLOOP.

DATA: lv_azsub TYPE meanzsub.


DATA: lt_zam_t_za_pp_unitofmsr TYPE /ugi4/t_ar_pp_unitofmsr.

lt_zam_t_za_pp_unitofmsr = <lt_data>.

* LOOP AT <lt_data> ASSIGNING FIELD-SYMBOL(<ls_stag_str_marm>).


* ASSIGN COMPONENT 'UMREZ' OF STRUCTURE <ls_stag_str_marm> TO FIELD-
SYMBOL(<lfs_umrez>).
* ASSIGN COMPONENT 'UMREN' OF STRUCTURE <ls_stag_str_marm> TO FIELD-
SYMBOL(<lfs_umren>).
*
* IF <lfs_umrez> IS ASSIGNED AND <lfs_umren> IS ASSIGNED.
* lv_azsub = <lfs_umrez> / <lfs_umren>.
* ENDIF.
*
* ASSIGN COMPONENT 'MESUB' OF STRUCTURE <ls_stag_str_marm> TO FIELD-
SYMBOL(<lfs_mesub1>).
* IF <lfs_mesub> IS ASSIGNED.
*
* me->calc_azsub(
* EXPORTING
* it_unitofmsr = lt_zam_t_za_pp_unitofmsr
* iv_mesub = <lfs_mesub1>
* CHANGING
* cv_azsub = lv_azsub ).
*
* ENDIF.
*
* ASSIGN COMPONENT 'AZSUB' OF STRUCTURE <ls_stag_str_marm> TO FIELD-
SYMBOL(<lfs_azsub>).
* IF <lfs_azsub> IS ASSIGNED.
* <lfs_azsub> = lv_azsub.
* ENDIF.
* ENDLOOP.

* new changes.

DATA: wa_uom type LINE OF /ugi4/t_ar_pp_unitofmsr,


it_uom type /ugi4/t_ar_pp_unitofmsr,
it_uom1 type /ugi4/t_ar_pp_unitofmsr,
it_uom_Temp like STANDARD TABLE OF wa_uom,
wa_uom1 LIKE LINE OF it_uom1,
lv_ntgew TYPE ntgew,
lv_mesub TYPE mesub,
lv_qteunit TYPE string VALUE 'QTEUNIT'.
* lv_azsub TYPE string.
* wa_message_info LIKE LINE OF et_message_info.,

FIELD-SYMBOLS: <fs_data> TYPE any,


<fs_azsub> TYPE any.
* <fs_ntgew> TYPE any.

it_uom1[] = lt_zam_t_za_pp_unitofmsr[]. "it_uom[].


it_uom_temp[] = lt_zam_t_za_pp_unitofmsr[].
it_uom[] = lt_zam_t_za_pp_unitofmsr[].
* CALL METHOD me->check_uom(
* EXPORTING
* it_uom = it_uom
* IMPORTING
* et_message_info = et_message_info ).
*
* IF et_message_info IS NOT INITIAL.
*
* RETURN.
*
* ENDIF.

LOOP AT it_uom INTO wa_uom.

IF wa_uom-kzbme = /ugi4/if_mdg_bs_art_c=>gc_x.

lv_ntgew = wa_uom-ntgew.

ELSE.

lv_ntgew = 1.

ENDIF.

lv_azsub = wa_uom-umrez / wa_uom-umren.


lv_mesub = wa_uom-mesub.

DO.

READ TABLE it_uom1 INTO wa_uom1 WITH KEY qteunit = lv_mesub.

IF sy-subrc EQ 0.

IF wa_uom1-kzbme = /ugi4/if_mdg_bs_art_c=>gc_x.

wa_uom-azsub = lv_azsub / ( wa_uom1-umrez / wa_uom1-umren ).

IF wa_uom-kzbme = /ugi4/if_mdg_bs_art_c=>gc_x.
ELSE.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5 ##NO_HANDLER.

CATCH SYSTEM-EXCEPTIONS conversion_errors = 6.


wa_uom-ntgew = lv_ntgew * lv_azsub * wa_uom1-ntgew.

CALL FUNCTION 'MEINH_BRGEW'


EXPORTING
bme_ntgew = wa_uom1-ntgew
ame_brgew = wa_uom1-brgew
bme_gewei = wa_uom1-gewei
ame_gewei = wa_uom-gewei
umrez = wa_uom-umrez
umren = wa_uom-umren
p_message = ''
IMPORTING
ame_ntgew = wa_uom-ntgew
EXCEPTIONS
error_message = 1
OTHERS = 2.

IF sy-subrc EQ 6.
* wa_message_info-msgid =
/ugi4/if_mdg_bs_art_c=>gc_message.
* wa_message_info-msgty = 'W'.
* wa_message_info-msgno = 230.
* APPEND wa_message_info TO et_message_info.
ENDIF.

* IF sy-subrc NE 0 AND sy-subrc NE 6.


*
* wa_message_info-msgid = sy-msgid.
* wa_message_info-msgno = sy-msgno.
* wa_message_info-msgty = sy-msgty.
* wa_message_info-msgv1 = sy-msgv1.
* INSERT wa_message_info INTO TABLE et_message_info.
*
* ENDIF.
ENDCATCH.
* IF sy-subrc EQ 5.
* wa_message_info-msgid =
/ugi4/if_mdg_bs_art_c=>gc_message.
* wa_message_info-msgty = 'W'.
* wa_message_info-msgno = 229.
* APPEND wa_message_info TO et_message_info.
* ENDIF.
ENDCATCH.
ENDIF.

MODIFY it_uom FROM wa_uom.


READ TABLE <lt_data> ASSIGNING <fs_data> WITH KEY
(lv_qteunit) = wa_uom-qteunit. "#EC CI_ANYSEQ
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'AZSUB' OF STRUCTURE <fs_data> TO
<fs_azsub>.
* MOVE wa_uom-azsub TO <fs_azsub>.
<fs_azsub> = wa_uom-azsub.
ASSIGN COMPONENT 'NTGEW' OF STRUCTURE <fs_data> TO
<fs_ntgew>.
* MOVE wa_uom-ntgew TO <fs_ntgew>.
<fs_ntgew> = wa_uom-ntgew.

ENDIF.

EXIT.

ELSE.

lv_azsub = lv_azsub / ( wa_uom1-umrez / wa_uom1-umren ).


CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5 ##NO_HANDLER.

CATCH SYSTEM-EXCEPTIONS conversion_errors = 6.


wa_uom-ntgew = lv_azsub * wa_uom-ntgew * wa_uom1-ntgew.
IF sy-subrc EQ 6.
* wa_message_info-msgid =
/ugi4/if_mdg_bs_art_c=>gc_message.
* wa_message_info-msgty = 'W'.
* wa_message_info-msgno = 230.
* APPEND wa_message_info TO et_message_info.
ENDIF.
ENDCATCH.
IF sy-subrc EQ 5.
* wa_message_info-msgid =
/ugi4/if_mdg_bs_art_c=>gc_message.
* wa_message_info-msgty = 'W'.
* wa_message_info-msgno = 229.
* APPEND wa_message_info TO et_message_info.
ENDIF.
ENDCATCH.
ENDIF.

lv_mesub = wa_uom1-mesub.

* {{
* sap note 2770464
READ TABLE it_uom1 with KEY qteunit = lv_mesub kzbme = 'X'
TRANSPORTING NO FIELDS.
if sy-subrc ne 0.
wa_uom-ntgew = lv_ntgew * lv_azsub * wa_uom1-ntgew.
MODIFY it_uom FROM wa_uom.
READ TABLE <lt_data> ASSIGNING <fs_data> WITH KEY
(lv_qteunit) = wa_uom-qteunit. "#EC CI_ANYSEQ
IF sy-subrc EQ 0.

ASSIGN COMPONENT 'AZSUB' OF STRUCTURE <fs_data> TO


<fs_azsub>.
* MOVE wa_uom-azsub TO <fs_azsub>.
* MOVE lv_azsub TO <fs_azsub>.
<fs_azsub> = lv_azsub.
ASSIGN COMPONENT 'NTGEW' OF STRUCTURE <fs_data> TO
<fs_ntgew>.
* MOVE wa_uom-ntgew TO <fs_ntgew>.
<fs_ntgew> = wa_uom-ntgew.
ENDIF.
EXIT.
endif.
*}
*}
* sap Note : 2770464

ENDIF.

ENDDO.

ENDLOOP.
* {{
* sap note 2770464
READ TABLE it_uom_temp INTO wa_uom WITH KEY kzbme =
/ugi4/if_mdg_bs_art_c=>gc_x.
IF sy-subrc EQ 0.
LOOP AT <lt_data> ASSIGNING <fs_data>.
MOVE-CORRESPONDING <fs_data> TO wa_uom1.
* ASSIGN COMPONENT 'QTEUNIT' OF STRUCTURE <fs_data> TO FIELD-
SYMBOL(<fs_qteunit>).
* ASSIGN COMPONENT 'MESUB' OF STRUCTURE <fs_data> TO FIELD-
SYMBOL(<mesub>).
ASSIGN COMPONENT 'NTGEW' OF STRUCTURE <fs_data> TO <fs_ntgew>.

CALL FUNCTION 'MEINH_BRGEW'


EXPORTING
bme_ntgew = wa_uom-ntgew
ame_brgew = wa_uom1-brgew
bme_gewei = wa_uom-gewei
ame_gewei = wa_uom1-gewei
umrez = wa_uom1-umrez
umren = wa_uom1-umren
p_message = 'N'
IMPORTING
ame_ntgew = <fs_ntgew>
EXCEPTIONS ##FM_SUBRC_OK
OTHERS = 1.
ENDLOOP.
ENDIF.

*}
*}
* sap Note : 2770464
* caluc

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
ENDIF.

ENDMETHOD.

METHOD map_usmd_mess_to_bapiret.
DATA: l_bapiret2 TYPE bapiret2.

FIELD-SYMBOLS: <l_message> TYPE usmd_s_message.


LOOP AT it_usmd_message ASSIGNING <l_message>.
l_bapiret2-type = <l_message>-msgty.
l_bapiret2-id = <l_message>-msgid.
l_bapiret2-number = <l_message>-msgno.
l_bapiret2-message_v1 = <l_message>-msgv1.
l_bapiret2-message_v2 = <l_message>-msgv2.
l_bapiret2-message_v3 = <l_message>-msgv3.
l_bapiret2-message_v4 = <l_message>-msgv4.
l_bapiret2-row = <l_message>-row.
l_bapiret2-field = <l_message>-fieldname.
INSERT l_bapiret2 INTO TABLE ct_bapirettab.
ENDLOOP.
ENDMETHOD.

METHOD map_variants_stag.
DATA: "lsr_model_data TYPE REF TO data,
* lr_source TYPE REF TO data,
* lr_target TYPE REF TO data,
lrt_data TYPE REF TO data,
lv_variant_seperator TYPE /ugi4/rfm_var_split,
lv_cawnt1 TYPE string,
lv_cawnt TYPE string,
lv_var_comb TYPE string,
lv_var_comb1 TYPE string,
lrs_data TYPE REF TO data,
* lt_message TYPE usmd_t_message,
lv_tab TYPE name_komp.

FIELD-SYMBOLS: <ls_model_data> TYPE any,


* <fs_target> TYPE any,
* <fs_source> TYPE any,

<lt_api_source> TYPE ANY TABLE,


<lt_data> TYPE ANY TABLE.
* <ls_api_source> TYPE any.
DATA :" lt_entity_data TYPE usmd_gov_api_ts_ent_data,
ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

CHECK is_api_data IS NOT INITIAL.

DATA(ls_data) = is_api_data ##NEEDED.

READ TABLE gt_entity_struc INTO DATA(ls_entity_struc) WITH KEY entity


= iv_entity.
CREATE DATA lrt_data TYPE SORTED TABLE OF (ls_entity_struc-structure)
WITH UNIQUE DEFAULT KEY.
ASSIGN lrt_data->* TO <lt_data>.
CREATE DATA lrs_data LIKE LINE OF <lt_data>.
ASSIGN lrs_data->* TO <ls_model_data>.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

ASSIGN COMPONENT lv_tab OF STRUCTURE is_api_data TO <lt_api_source>.

IF <lt_api_source> IS ASSIGNED AND <lt_api_source> IS NOT INITIAL.

read_variants(
EXPORTING
is_variants = <lt_api_source> " Table type for
Variants
IMPORTING
et_variants = DATA(lt_variants)
).

DATA(lt_variants1) = lt_variants.
SORT lt_variants BY varnr.
DELETE ADJACENT DUPLICATES FROM lt_variants COMPARING varnr.
SORT lt_variants BY varnr atnam.
LOOP AT lt_variants INTO DATA(wa_var).
READ TABLE lt_variants1 INTO DATA(ls_var1) WITH KEY varnr =
wa_var-varnr.
IF sy-subrc = 0.
DATA(lv_tabix) = sy-tabix.

* ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_amatnr>).
* IF <lfs_amatnr> IS ASSIGNED.
** <lfs_amatnr> = ls_var1-source_id.
* <lfs_amatnr> = gv_matnr_final.
* ENDIF.

ASSIGN COMPONENT 'VAR_NUMB' OF STRUCTURE <ls_model_data> TO


FIELD-SYMBOL(<lfs_var>).
IF <lfs_var> IS ASSIGNED.
<lfs_var> = ls_var1-varnr.
ENDIF.

ASSIGN COMPONENT 'VAR_CHECK' OF STRUCTURE <ls_model_data> TO


FIELD-SYMBOL(<fs_var_check>).
IF <fs_var_check> IS ASSIGNED.
* MOVE /ugi4/if_mdg_bs_art_c=>gc_x TO <fs_var_check>.
<fs_var_check> = /ugi4/if_mdg_bs_art_c=>gc_x.
ENDIF.

LOOP AT lt_variants1 INTO ls_var1 FROM lv_tabix WHERE varnr =


wa_var-varnr.

IF lv_cawnt1 IS INITIAL.
lv_cawnt1 = ls_var1-atwrt.
ELSE.
CONCATENATE lv_cawnt1 lv_variant_seperator ls_var1-atwrt
INTO lv_cawnt.
lv_cawnt1 = lv_cawnt.
ENDIF.

IF lv_var_comb1 IS INITIAL.
lv_var_comb1 = ls_var1-atnam.
ELSE.
CONCATENATE lv_var_comb1
/ugi4/if_mdg_bs_art_c=>gc_character_separator ls_var1-atnam INTO
lv_var_comb.
lv_var_comb1 = lv_var_comb.
ENDIF.

ENDLOOP.

ASSIGN COMPONENT 'VAR_KEY' OF STRUCTURE <ls_model_data> TO


FIELD-SYMBOL(<fs_var_key>).
IF <fs_var_key> IS ASSIGNED.
* MOVE lv_cawnt1 TO <fs_var_key>.
<fs_var_key> = lv_cawnt1.
ENDIF.
ASSIGN COMPONENT 'VAR_COMB' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<fs_var_comb>).
IF <fs_var_comb> IS ASSIGNED .
* MOVE lv_var_comb1 TO <fs_var_comb>.
<fs_var_comb> = lv_var_comb1.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
CLEAR : lv_cawnt, lv_cawnt1, lv_var_comb1, lv_var_comb.
ENDIF.
ENDLOOP.

IF <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
* CALL METHOD write_entity_data
* EXPORTING
* it_entity_data = lt_entity_data " MDG:
Entity Type with Data and Attributes (Table)
* IMPORTING
* et_message = DATA(lt_messages) "
Messages
* CHANGING
* co_conv_api = co_conv_api ##NEEDED. "
Governance API: Single Chg. Req. Convenience Governance API
ENDIF.
ENDIF.

ENDMETHOD.

METHOD mara_mandatory_checks.
DATA: it_taba TYPE STANDARD TABLE OF dd07v,
it_tabb TYPE STANDARD TABLE OF dd07v.

IF is_mara-matkl IS INITIAL.
MESSAGE e031(/ugi4/_ar_msg) INTO DATA(lv_message) WITH 'MATKL'
##NEEDED.
add_message( CHANGING ct_message = ct_message "
Error Messages
).
ev_error = abap_true.
ELSE.
CALL FUNCTION 'T023_SINGLE_READ'
EXPORTING
* KZRFB = ' '
t023_matkl = is_mara-matkl
* IMPORTING
* WT023 =
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e199(mh) WITH is_mara-matkl INTO lv_message.
add_message( CHANGING ct_message = ct_message "
Error Messages
).
ev_error = abap_true.
ENDIF.
ENDIF.

IF is_mara-attyp IS INITIAL.

MESSAGE e031(/ugi4/_ar_msg) INTO lv_message WITH 'ATTYP'.


add_message( CHANGING ct_message = ct_message "
Error Messages
).
ev_error = abap_true.
ELSE.

CALL FUNCTION 'DD_DOMA_GET'


EXPORTING
* domain_name = 'ÁTTYP'
domain_name = 'ATTYP'
* GET_STATE = 'M '
langu = sy-langu
* PRID = 0
* WITHTEXT = 'X'
* IMPORTING
* DD01V_WA_A =
* DD01V_WA_N =
* GOT_STATE =
TABLES
dd07v_tab_a = it_taba
dd07v_tab_n = it_tabb
EXCEPTIONS
illegal_value = 1
op_failure = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE it_taba WITH KEY domvalue_l = is_mara-attyp
TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
MESSAGE e031(/ugi4/_ar_msg) INTO lv_message WITH 'ATTYP'.
add_message( CHANGING ct_message = ct_message
" Error Messages
).
ev_error = abap_true.

ENDIF.
ENDIF.
ENDIF.
IF is_mara-mtart IS INITIAL.
MESSAGE e031(/ugi4/_ar_msg) INTO lv_message WITH 'MTART'.
add_message( CHANGING ct_message = ct_message "
Error Messages
).
ev_error = abap_true.
ELSE.
CALL FUNCTION 'T134_SINGLE_READ'
EXPORTING
t134_mtart = is_mara-mtart
* IMPORTING
* WT134 =
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e031(/ugi4/_ar_msg) INTO lv_message WITH 'MTART'.
add_message( CHANGING ct_message = ct_message "
Error Messages
).
ev_error = abap_true.
ENDIF.
ENDIF.
IF is_creq_attr-creq_text IS INITIAL AND is_creq_attr-crequest_id
IS INITIAL.
MESSAGE ID 'USMD2' TYPE 'E' NUMBER '281'
INTO lv_message.
add_message( CHANGING ct_message = ct_message "
Error Messages
).
ev_error = abap_true.
ENDIF.

ENDMETHOD.

METHOD process.
DATA : lo_api TYPE REF TO /ugi4/cl_ar_article_maint_api.
DATA : ls_db_data TYPE /ugi4/rfm_s_dbstruc_in.

DATA:
ls_usmd_value TYPE usmd_s_value,
lt_crequest TYPE usmd_ts_crequest,
lt_usmd_message TYPE usmd_t_message,
lt_usmd_value TYPE usmd_ts_value.

DATA: lv_create_in_staging TYPE boolean.


DATA : ls_message TYPE bapiret2.
CREATE OBJECT lo_api.

ls_db_data = im_db_data.

IF im_creq_attr-mass_shema IS INITIAL AND im_creq_attr-


mdc_process_template IS INITIAL.
* Need to check preq mandatory check in MARA table.
IF im_creq_attr-crequest_id IS NOT INITIAL.
CALL METHOD cl_usmd_crequest_api=>get_instance
EXPORTING
iv_crequest = im_creq_attr-crequest_id
iv_model_name = 'AR'
IMPORTING
re_inst_crequest_api = DATA(lo_crequest).
IF lo_crequest IS BOUND.
lo_crequest->read_crequest(
IMPORTING
es_crequest = DATA(ls_crequest) " Change
Request
).
IF ls_crequest-usmd_creq_status = '00' OR ls_crequest-
usmd_creq_status = '01' OR ls_crequest-usmd_creq_status = '02' OR

ls_crequest-usmd_creq_status = '03'. "#EC CI_SORTSEQ


DATA(lv_crequest_exist) = abap_true ##NEEDED.
ENDIF.

lo_crequest->read_objectlist(
EXPORTING
iv_entity_type = 'MARA' " Entity Type
IMPORTING
et_entity = DATA(lt_entity_table) "
ChangeRequest Entity TableType
* et_message = " Messages
).

READ TABLE lt_entity_table INTO DATA(ls_entity_table) INDEX 1


##NEEDED.
IF sy-subrc EQ 0.

ENDIF.
ENDIF.
ELSEIF im_creq_attr-matnr IS NOT INITIAL.
ls_usmd_value-fieldname = 'MARA'.
ls_usmd_value-value = im_creq_attr-matnr.
INSERT ls_usmd_value INTO TABLE lt_usmd_value.
" If Material is associated with any change request then reject
the material
CALL METHOD
cl_usmd_crequest_api=>if_usmd_crequest_api~retrieve_crequest
EXPORTING
iv_entity = 'MARA'
it_entity_key = lt_usmd_value
iv_model = 'AR'
if_activeonly = abap_true
IMPORTING
et_crequest = lt_crequest
et_message = lt_usmd_message.
if lt_crequest is NOT INITIAL.
LOOP AT lt_crequest INTO ls_crequest WHERE usmd_creq_status =
'05' OR usmd_creq_status = '06' . "#EC CI_SORTSEQ
" Status 05 = 'Final Check Approved'; 06 = 'Final Check
Rejected'
lv_create_in_staging = abap_true. " If CRequest status is 05
or 06 (already approved or rejected), then the object is not locked in
Staging
* EXIT.
ENDLOOP.

IF lv_create_in_staging NE abap_true. " If CRequest status is


05 or 06 (already approved or rejected), then the object is not locked in
Staging
READ TABLE lt_crequest INDEX 1 INTO ls_crequest.
* ev_crequest = ls_crequest-usmd_crequest.
ls_message-TYPE = 'E'.
ls_message-ID = '/UGI4/ART_LOAD_MSG'.
ls_message-number = '012'.
ls_message-MESSAGE_V1 = im_creq_attr-matnr.
ls_message-message_v2 = ls_crequest-usmd_crequest.
INSERT ls_message INTO TABLE et_message.
exit.
ENDIF.
ENDIF.
endif.

READ TABLE ls_db_data-mara_tab INTO DATA(ls_mara) INDEX 1.


IF sy-subrc EQ 0.
CALL METHOD lo_api->mara_mandatory_checks
EXPORTING
is_mara = ls_mara " MDG BS MAT: Material
Master Basic Data Structure
is_creq_attr = im_creq_attr
IMPORTING
ev_error = DATA(lv_mand_check) " Boolean
Variable (X = True, - = False, Space = Unknown)
CHANGING
ct_message = et_message. " Error Messages
ENDIF.

IF lv_mand_check IS INITIAL.
lo_api->map(
EXPORTING
is_rfm_api = ls_db_data " Data Mat value
im_creq_attr = im_creq_attr " Change Request
Attributes
IMPORTING
et_message = DATA(lt_message) " Messages
eo_conv_api = DATA(lo_conv_api) " Governance
API: Single Chg. Req. Convenience Governance API
) ##NEEDED.
ENDIF.

lo_api->map_usmd_mess_to_bapiret(
EXPORTING
it_usmd_message = lt_message " Messages
CHANGING
ct_bapirettab = et_message " Table with BAPI
Return Information
).

ELSEIF im_creq_attr-mdc_process_template IS NOT INITIAL.


DATA lo_ar_2_consolidation TYPE REF TO
/ugi4/mdg_rfm_2_consolidation.
GET BADI lo_ar_2_consolidation.

CALL BADI lo_ar_2_consolidation->write


EXPORTING
is_rfm_api = ls_db_data " Unified
API Article Master Data Structure
iv_sender_business_sys = 'RF9_ULABHNFM9' " Key
Name of Business System
iv_bulk_message_id = im_creq_attr-bulk_message_id
" Unique identifier of a business document in a (technical) me
* iv_single_message_id = p_mat_to " Unique
identifier of a business document in a (technical) me
IMPORTING
et_return_messages = DATA(lt_messages). "
Table with BAPI Return Information

APPEND LINES OF lt_messages TO et_message.

CALL BADI lo_ar_2_consolidation->start_process


EXPORTING
iv_bulk_message_id = im_creq_attr-bulk_message_id
" Unique identifier of a business document in a (technical) me
iv_sender_business_sys = 'RF9_ULABHNFM9' "
Key Name of Business System
iv_create_process_template = im_creq_attr-mdc_process_template
" Create Process Template
* iv_change_process_template = 'UGI_RF_LOA' "
Change Process Template
IMPORTING
et_return_messages = lt_messages. "
Table with BAPI Return Information
APPEND LINES OF lt_messages TO et_message.

ELSE.
TRY.
CALL METHOD
('/UGIRMP/CL_MDG_RFM_MASS_UTIL')=>('PROCESS_EXT_RMP_CR')
EXPORTING
im_db_data = ls_db_data " Unified API
Article Master Data Structure
im_creq_attr = im_creq_attr " Change Request Attributes
IMPORTING
et_message = et_message. " Table with BAPI
Return Information

lo_api->map_usmd_mess_to_bapiret(
EXPORTING
it_usmd_message = lt_message "
Messages
CHANGING
ct_bapirettab = et_message " Table
with BAPI Return Information
).
CATCH cx_root INTO DATA(lo_cx_root) ##NO_HANDLER ##NEEDED.
ENDTRY.
ENDIF.
ENDMETHOD.

METHOD read.
DATA: lv_kzrfb TYPE kzrfb VALUE 'X', "Set Reset
Buffer to X, so as to follow stateless model.
lv_sperrmodus TYPE spera, "Lock type-> external
appl should lock the materials, cl_cmd_bs_mat_api no lock on read
lv_kzref TYPE t130f-kzref VALUE ' ',

lv_mara_key_initial_length TYPE i ##NEEDED,


* lt_mara_key TYPE tt_mara_key, "Keys for input
to array reads.
lt_maw1_key TYPE tt_maw1_key,
lt_mamt_key TYPE tt_mamt_key,
lt_mlea_key TYPE tt_mlea_key,
* lt_wlk2_key TYPE tt_wlk2_key,
* lt_makt_key TYPE tt_makt_key,
* lt_marm_key TYPE tt_marm_key,
lt_mean_key TYPE tt_mean_key,
lt_msta_key TYPE tt_msta_key ##NEEDED,
* lt_marc_key TYPE tt_marc_key,
* ls_marc_key type ty_marc_key,
* lt_mard_key TYPE tt_mard_key,
* ls_mard_key TYPE ty_mard_key,
* lt_mbew_key TYPE tt_mbew_key,
* ls_mbew_key TYPE ty_mbew_key,
* lt_mlgn_key TYPE tt_mlgn_key,
* ls_mlgn_key TYPE ty_mlgn_key,
* lt_mlgt_key TYPE tt_mlgt_key,
* ls_mlgt_key TYPE ty_mlgt_key,
* lt_mvke_key TYPE tt_mvke_key,
* ls_mvke_key TYPE ty_mvke_key,
* lt_moff_key TYPE TABLE OF tt_moff_key

ls_keys TYPE ty_keys,


ls_tvko TYPE tvko,
ls_product_neuflag TYPE ty_product_neuflag,
* ls_marm TYPE marm,
* ls_meinh TYPE smeinh,
lt_marc_md TYPE TABLE OF v_marc_md,
lt_mard_md TYPE TABLE OF v_mard_md,
lt_mbew_md TYPE TABLE OF v_mbew_md.
.

FIELD-SYMBOLS:
* <mt_mara_in> TYPE mara,
* <mt_marc_in> TYPE marc,
* <mt_mard_in> TYPE mard,
* <mt_mbew_in> TYPE mbew,
* <mt_mlgn_in> TYPE mlgn,
* <mt_mlgt_in> TYPE mlgt,
* <mt_mvke_in> TYPE mvke,
<fs_mara_keys> TYPE pre03,
<fs_marc_keys> TYPE pre01,
<fs_mvke_keys> TYPE pre10,
<fs_mt_product_neuflag> TYPE ty_product_neuflag.

ls_keys = is_keys.

*creation of input keys for MARA array read.


*
* LOOP at ms_tbl_in-t_mara ASSIGNING <mt_mara_in> WHERE matnr is NOT
INITIAL and matnr ne '0'.
* APPEND <mt_mara_in>-matnr TO lt_mara_key.
* ENDLOOP.

DESCRIBE TABLE ls_keys-mara_keys LINES lv_mara_key_initial_length.

CALL FUNCTION 'MARA_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
sperrmodus = lv_sperrmodus
TABLES
ipre03 = ls_keys-mara_keys
mara_tab = es_tbl_db-t_mara
EXCEPTIONS
enqueue_mode_changed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.

ENDIF.

LOOP AT is_keys-mara_keys ASSIGNING <fs_mara_keys>.


ls_product_neuflag-product = <fs_mara_keys>-matnr.
READ TABLE es_tbl_db-t_mara WITH KEY matnr = <fs_mara_keys>-matnr
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
CLEAR ls_product_neuflag-neuflag.
ELSE.
ls_product_neuflag-neuflag = abap_true.
ENDIF.
APPEND ls_product_neuflag TO mt_product_neuflag.
ENDLOOP.

IF es_tbl_db-t_mara IS INITIAL. "all products are new. no need of


further calling array reads.
* EXIT.
RETURN.
ENDIF.

* Generating Neuflag variable for further Array reads.


lt_maw1_key[] = ls_keys-mara_keys[].
** lt_makt_key[] = ls_keys-mara_keys[].
* lt_marm_key[] = ls_keys-mara_keys[].
lt_mean_key[] = ls_keys-mara_keys[].
lt_msta_key[] = ls_keys-mara_keys[].
lt_mamt_key[] = ls_keys-mara_keys[].
lt_mlea_key[] = ls_keys-mara_keys[].

DATA : is_not_material TYPE boolean.


LOOP AT es_tbl_db-t_mara ASSIGNING FIELD-SYMBOL(<fs_t_mara>).
IF <fs_t_mara>-attyp IS NOT INITIAL.
is_not_material = abap_true .
EXIT.
ENDIF.
ENDLOOP.

IF is_not_material EQ abap_true.
**** Access to table MAW1 *****************
CALL FUNCTION 'MAW1_ARRAY_READ'
EXPORTING
kzrfb = lv_kzrfb
TABLES
maw1_tab = es_tbl_db-t_maw1
ipre03 = lt_maw1_key.

DATA lt_mamt_tab TYPE TABLE OF mamt.

CALL FUNCTION 'MAMT_GENERIC_READ_WITH_MATNR'


EXPORTING
kzrfb = lv_kzrfb
matnr = <fs_mara_keys>-matnr
TABLES
mamt_tab = lt_mamt_tab
EXCEPTIONS
wrong_call = 1
not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LINES OF lt_mamt_tab TO es_tbl_db-t_mamt.
**** Access to table MAMT *****************
CALL FUNCTION 'MAMT_ARRAY_READ_MATNR_ALL'
EXPORTING
kzrfb = lv_kzrfb
neuflag = lv_kzref "JH/13.04.99/4.6A
TABLES
ipre03 = lt_mamt_key
EXCEPTIONS
enqueue_mode_changed = 1
OTHERS = 2 ##FM_SUBRC_OK.

**** Access to table MLEA ****************


DATA lt_mlea_tab TYPE TABLE OF mlea.
CALL FUNCTION 'MLEA_GENERIC_READ_WITH_MATNR'
EXPORTING
kzrfb = lv_kzrfb
matnr = <fs_mara_keys>-matnr
TABLES
mlea_tab = lt_mlea_tab
EXCEPTIONS
wrong_call = 1
not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LINES OF lt_mlea_tab TO es_tbl_db-t_mlea.
CALL FUNCTION 'MLEA_ARRAY_READ_MATNR_ALL'
EXPORTING
kzrfb = lv_kzrfb
neuflag = lv_kzref
TABLES
ipre03 = lt_mlea_key
EXCEPTIONS
OTHERS = 0.
****************** Access to table WLK2 *****************
CALL FUNCTION 'WLK2_ARRAY_READ'
EXPORTING
kzrfb = lv_kzrfb
neuflag = lv_kzref
TABLES
ipre23 = ls_keys-wlk2_keys
wlk2_tab = es_tbl_db-t_wlk2
EXCEPTIONS
OTHERS = 0.
ENDIF.

* CALL FUNCTION 'MAKT_ARRAY_READ'


* EXPORTING
* kzrfb = lv_kzrfb
** NEUFLAG = ' '
* TABLES
* ipre09 = ls_keys-makt_keys
* makt_tab = es_tbl_db-t_makt
* EXCEPTIONS
* enqueue_mode_changed = 1
* OTHERS = 2.
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
if ls_keys-mara_keys is NOT INITIAL.
select * from makt INTO TABLE es_tbl_db-t_makt FOR ALL ENTRIES IN
ls_keys-mara_keys where matnr = ls_keys-mara_keys-matnr.
endif.

CALL FUNCTION 'MARM_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
* NEUFLAG = ' '
TABLES
ipre11 = ls_keys-marm_keys
marm_tab = es_tbl_db-t_marm
EXCEPTIONS
enqueue_mode_changed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

* CALL FUNCTION 'MARM_ARRAY_READ_MATNR_ALL'


* EXPORTING
* kzrfb = lv_kzrfb
* TABLES
* ipre03 = lt_marm_key.

CALL FUNCTION 'MEAN_ARRAY_READ_MATNR_ALL'


EXPORTING
kzrfb = lv_kzrfb
TABLES
ipre03 = lt_mean_key.

DATA : lt_mean_tab TYPE mean_tab,


lt_mean_me_tab TYPE mat_ean.

LOOP AT is_keys-mara_keys ASSIGNING <fs_mara_keys>.


CALL FUNCTION 'MEAN_GENERIC_READ_WITH_MATNR'
EXPORTING
matnr = <fs_mara_keys>-matnr
TABLES
mean_tab = lt_mean_tab
mean_me_tab = lt_mean_me_tab
EXCEPTIONS
wrong_call = 1
not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LINES OF lt_mean_tab TO es_tbl_db-t_mean.
APPEND LINES OF lt_mean_me_tab TO et_mean_me_tab.
ENDLOOP.

* LOOP at ms_tbl_in-t_marc ASSIGNING <mt_marc_in> WHERE matnr is NOT


INITIAL and matnr ne '0'.
* ls_marc_key-matnr = <mt_marc_in>-matnr.
* ls_marc_key-werks = <mt_marc_in>-werks.
* append ls_marc_key to lt_marc_key.
* ENDLOOP.

CALL FUNCTION 'MARC_MD_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
sperrmodus = lv_sperrmodus
exception_on_lock = ' '
TABLES
ipre01 = ls_keys-marc_keys
marc_tab_md = lt_marc_md
EXCEPTIONS
enqueue_mode_changed = 1
lock_on_marc = 2
lock_system_error = 3
OTHERS = 4.
IF sy-subrc = 0.
MOVE-CORRESPONDING lt_marc_md TO es_tbl_db-t_marc.
ENDIF.

* read MPOP data


DATA(mpop_keys1) = is_keys-marc_keys.
DATA(mpop_keys2) = is_keys-mara_keys.

CALL FUNCTION 'MPOP_REFRESH'.

CALL FUNCTION 'MPOP_ARRAY_READ'


TABLES
it_marc = mpop_keys1
EXCEPTIONS
not_found = 1
wrong_call = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'MPOP_ARRAY_READ_MAT_ALL_BUFFER'
TABLES
ipre03 = mpop_keys2
mpop_tab = es_tbl_db-t_mpop.

* LOOP at ms_tbl_in-t_mard ASSIGNING <mt_mard_in> WHERE matnr is NOT


INITIAL and matnr ne '0'.
* ls_mard_key-matnr = <mt_mard_in>-matnr.
* ls_mard_key-werks = <mt_mard_in>-werks.
* ls_mard_key-lgort = <mt_mard_in>-lgort.
* append ls_mard_key to lt_mard_key.
* ENDLOOP.

CALL FUNCTION 'MARD_MD_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
TABLES
ipre08 = ls_keys-mard_keys
mard_tab_md = lt_mard_md
EXCEPTIONS
enqueue_mode_changed = 1
OTHERS = 2.
IF sy-subrc = 0.
MOVE-CORRESPONDING lt_mard_md TO es_tbl_db-t_mard.
ENDIF.

* LOOP at ms_tbl_in-t_mbew ASSIGNING <mt_mbew_in> WHERE matnr is NOT


INITIAL and matnr ne '0'.
* ls_mbew_key-matnr = <mt_mbew_in>-matnr.
* ls_mbew_key-bwkey = <mt_mbew_in>-bwkey.
* ls_mbew_key-bwtar = <mt_mbew_in>-bwtar.
* append ls_mbew_key to lt_mbew_key.
* ENDLOOP.

CALL FUNCTION 'MBEW_MD_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
sperrmodus = lv_sperrmodus
exception_on_lock = ' '
TABLES
ipre04 = ls_keys-mbew_keys
mbew_tab_md = lt_mbew_md
EXCEPTIONS
enqueue_mode_changed = 1
lock_on_mbew = 2
lock_system_error = 3
OTHERS = 4.
IF sy-subrc = 0.
MOVE-CORRESPONDING lt_mbew_md TO es_tbl_db-t_mbew.
ENDIF.

CALL FUNCTION 'MBEW_EXTEND_MD'


EXPORTING
kzrfb = lv_kzrfb
maxtz = ' '
xvper = 'X'
xvvpr = 'X'
xvjah = 'X'
xvvja = 'X'
* IMPORTING
* RMBEWH =
TABLES
mbew_tab_md = lt_mbew_md
* MBEW_EXT_TAB =
.

* This will be UNCOMMENTED, once the API is enhanced. DO NOT DELETE.


* CALL FUNCTION 'MFHM_REFRESH'.
*
* DATA(mfhm_keys) = is_keys-marc_keys.
* DATA ls_mfhm TYPE mfhm.
*
* LOOP AT mfhm_keys ASSIGNING FIELD-SYMBOL(<fs_mfhm_key>).
* CALL FUNCTION 'MFHM_SINGLE_READ'
* EXPORTING
* kzrfb = lv_kzrfb
* matnr = <fs_mfhm_key>-matnr
** MAXTZ = 0
* werks = <fs_mfhm_key>-werks
* IMPORTING
* wmfhm = ls_mfhm
** O_MFHM =
* EXCEPTIONS
* not_found = 1
* wrong_call = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
* APPEND ls_mfhm TO ES_tbl_db-t_mfhm.
* ENDLOOP.

* --------------------------------MLAN-----------------------------------
------------
CALL FUNCTION 'MLAN_REFRESH'.

* Code relevant for retail. ( Similarly for STEUMM)


* IF NOT FLG_RETAIL IS INITIAL "derzeit nur für Retail
* AND RMMG1-VKORG IS INITIAL AND RMMG1-VTWEG IS INITIAL.
*
* CALL FUNCTION 'STEUERTAB_IDENTIFY_DEFAULT'
* TABLES
* STEUERTAB = STEUERTAB
* EXCEPTIONS
* STEUERTAB_EMPTY = 02.
*
* ELSE.

DATA : lt_steuertab TYPE TABLE OF mg03steuer,


lt_steummtab TYPE TABLE OF mg03steumm,
ls_t_steuertab TYPE ty_steu,
ls_t_steummtab TYPE ty_steumm.

LOOP AT is_keys-mvke_keys ASSIGNING <fs_mvke_keys> WHERE matnr IS NOT


INITIAL.

CALL FUNCTION 'TVKO_SINGLE_READ'


EXPORTING
kzrfb = lv_kzrfb
vkorg = <fs_mvke_keys>-vkorg
IMPORTING
wtvko = ls_tvko
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CLEAR lt_steuertab.

CALL FUNCTION 'STEUERTAB_IDENTIFY'


EXPORTING
kzrfb = lv_kzrfb
vkorg = <fs_mvke_keys>-vkorg
bukrs_vkorg = ls_tvko-bukrs
vtweg = <fs_mvke_keys>-vtweg
TABLES
steuertab = lt_steuertab "ES_tbl_db-t_steuertab
EXCEPTIONS
vkorg_bukrs_not_found = 01
steuertab_empty = 02
OTHERS = 03 ##FM_SUBRC_OK.
* ENDIF.
* CASE SY-SUBRC.
* WHEN 01.
* IF FLG_RETAIL IS INITIAL. "keine Meldung für Retail
* MESSAGE E825 WITH RMMG1-VKORG RAISING VKORG_BUKRS_NOT_FOUND.
* ENDIF.
* WHEN 02.
** wie im alten Materialstamm kein Fehler
* WHEN 03.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
* RAISING INTERNAL_ERROR.
* ENDCASE.

READ TABLE mt_product_neuflag WITH KEY product = <fs_mvke_keys>-


matnr ASSIGNING <fs_mt_product_neuflag>.

CALL FUNCTION 'STEUERTAB_FILL'


EXPORTING
kzrfb = lv_kzrfb
matnr = <fs_mvke_keys>-matnr
vkorg = <fs_mvke_keys>-vkorg
vtweg = <fs_mvke_keys>-vtweg
neuflag = <fs_mt_product_neuflag>-neuflag
TABLES
steuertab = lt_steuertab
EXCEPTIONS
mlan_not_found = 01
steuertab_empty = 02
OTHERS = 02 ##FM_SUBRC_OK.

LOOP AT lt_steuertab ASSIGNING FIELD-SYMBOL(<fs_lt_steuertab>).


ls_t_steuertab-matnr = <fs_mvke_keys>-matnr.
MOVE-CORRESPONDING <fs_lt_steuertab> TO ls_t_steuertab ##ENH_OK.
APPEND ls_t_steuertab TO es_tbl_db-t_steuertab.
ENDLOOP.
ENDLOOP.
SORT es_tbl_db-t_steuertab BY matnr aland tatyp.
DELETE ADJACENT DUPLICATES FROM es_tbl_db-t_steuertab.

LOOP AT is_keys-marc_keys ASSIGNING <fs_marc_keys> WHERE matnr IS NOT


INITIAL.
CALL FUNCTION 'STEUMMTAB_IDENTIFY'
EXPORTING
kzrfb = lv_kzrfb
werks = <fs_marc_keys>-werks
TABLES
steummtab = lt_steummtab
EXCEPTIONS
wrong_call = 01
steummtab_empty = 02 ##FM_SUBRC_OK.

READ TABLE mt_product_neuflag WITH KEY product = <fs_marc_keys>-


matnr ASSIGNING <fs_mt_product_neuflag>.

CALL FUNCTION 'STEUMMTAB_FILL'


EXPORTING
kzrfb = lv_kzrfb
matnr = <fs_marc_keys>-matnr
werks = <fs_marc_keys>-werks
neuflag = <fs_mt_product_neuflag>-neuflag
TABLES
steummtab = lt_steummtab "es_tbl_db-t_steummtab
EXCEPTIONS
mlan_not_found = 01
steummtab_empty = 02
wrong_call = 02 ##FM_SUBRC_OK.

LOOP AT lt_steummtab ASSIGNING FIELD-SYMBOL(<fs_lt_steummtab>).


ls_t_steummtab-matnr = <fs_marc_keys>-matnr.
MOVE-CORRESPONDING <fs_lt_steummtab> TO ls_t_steummtab ##ENH_OK.
APPEND ls_t_steummtab TO es_tbl_db-t_steummtab.
ENDLOOP.

ENDLOOP.
SORT es_tbl_db-t_steummtab BY matnr aland taxim.
DELETE ADJACENT DUPLICATES FROM es_tbl_db-t_steummtab.

*** --------------------------------MLGN---------------------------------
--------------
*
* LOOP at ms_tbl_in-t_mlgn ASSIGNING <mt_mlgn_in> WHERE matnr is NOT
INITIAL and matnr ne '0'.
* ls_mlgn_key-matnr = <mt_mlgn_in>-matnr.
* ls_mlgn_key-lgnum = <mt_mlgn_in>-lgnum.
* append ls_mlgn_key to lt_mlgn_key.
* ENDLOOP.

CALL FUNCTION 'MLGN_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
sperrmodus = lv_sperrmodus
lhme = 'X'
TABLES
ipre12 = ls_keys-mlgn_keys
mlgn_tab = es_tbl_db-t_mlgn.

*LOOP at ms_tbl_in-t_mlgt ASSIGNING <mt_mlgt_in> WHERE matnr is NOT


INITIAL and matnr ne '0'.
* ls_mlgt_key-matnr = <mt_mlgt_in>-matnr.
* ls_mlgt_key-lgnum = <mt_mlgt_in>-lgnum.
* ls_mlgt_key-lgtyp = <mt_mlgt_in>-lgtyp.
* append ls_mlgt_key to lt_mlgt_key.
* ENDLOOP.

CALL FUNCTION 'MLGT_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
TABLES
ipre13 = ls_keys-mlgt_keys
mlgt_tab = es_tbl_db-t_mlgt.

CALL FUNCTION 'MVER_REFRESH'.

*LOOP at ms_tbl_in-t_mvke ASSIGNING <mt_mvke_in> WHERE matnr is NOT


INITIAL and matnr ne '0'.
* ls_mvke_key-matnr = <mt_mvke_in>-matnr.
* ls_mvke_key-vkorg = <mt_mvke_in>-vkorg.
* ls_mvke_key-vtweg = <mt_mvke_in>-vtweg.
* append ls_mvke_key to lt_mvke_key.
* ENDLOOP.

CALL FUNCTION 'MVKE_ARRAY_READ'


EXPORTING
kzrfb = lv_kzrfb
sperrmodus = lv_sperrmodus
TABLES
ipre10 = ls_keys-mvke_keys
mvke_tab = es_tbl_db-t_mvke
EXCEPTIONS
enqueue_mode_changed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.

ENDIF.

CALL FUNCTION 'MYMS_REFRESH'.

CALL FUNCTION 'LVTAB_REFRESH'.

* MPGD read
DATA(mpgd_keys) = is_keys-marc_keys.
CALL FUNCTION 'MPGD_ARRAY_READ'
EXPORTING
kzrfb = lv_kzrfb
TABLES
ipre01 = mpgd_keys
mpgd_tab = es_tbl_db-t_mpgd.

CALL FUNCTION 'MSTA_ARRAY_READ_MATNR_ALL'


EXPORTING
kzrfb = lv_kzrfb
TABLES
ipre03 = ls_keys-msta_keys
EXCEPTIONS
enqueue_mode_changed = 1
OTHERS = 2 ##FM_SUBRC_OK.
CALL METHOD me->read_all_variants_seasons
EXPORTING
it_mara_db = es_tbl_db-t_mara
it_seasons_keys_read = ls_keys-season_keys.

* IF kz_verw = x.
*** read all MOFFs to Materials which are being extended
*** read all MARCs and MVKEs to those materials which
*** a) are being created
*** b) have a MARC segment
* REFRESH ipre03_moff. REFRESH ipre03_msta.
* LOOP AT amara_ueb_t INTO amara_ueb WHERE tcode = 'MM01' OR tcode =
'MM11' "SDIMP ZJK I306463
* AND NOT matnr IS INITIAL
* AND matnr NE '0'.
* ipre03_moff-matnr = amara_ueb-matnr.
* APPEND ipre03_moff.
* READ TABLE amarc_ueb_t INTO amarc_ueb WITH KEY matnr =
amara_ueb-matnr. "SDIMP ZJK I306463
* IF sy-subrc IS INITIAL.
* APPEND ipre03_moff TO ipre03_msta."for MVKE/MARC
* ENDIF.
* ENDLOOP.
* CALL FUNCTION 'MOFF_ARRAY_READ_MATNR_ALL'
* EXPORTING
* kzrfb = lv_kzrfb
* neuflag = lv_neuflag
* TABLES
* ipre03 = lt_moff_key
* EXCEPTIONS
* enqueue_mode_changed = 1
* OTHERS = 2.
* ipre03_moff[] = ipre03_msta[].
* CALL FUNCTION 'MARC_ARRAY_READ_MATNR_ALL'
** EXPORTING
** KZRFB = ' '
** SPERRMODUS = ' '
** STD_SPERRMODUS = ' '
** EXCEPTION_ON_LOCK = ' '
* TABLES
* ipre03 = lt_moff_key
** MARC_TAB =
* EXCEPTIONS
* enqueue_mode_changed = 1
* lock_system_error = 2
* lock_on_marc = 3
* OTHERS = 4.
* CALL FUNCTION 'MVKE_ARRAY_READ_MATNR_ALL'
** EXPORTING
** KZRFB = ' '
** SPERRMODUS = ' '
** STD_SPERRMODUS = ' '
** EXCEPTION_ON_LOCK = ' '
* TABLES
* ipre03 = lt_msta_key
** MVKE_TAB =
* EXCEPTIONS
* enqueue_mode_changed = 1
* lock_system_error = 2
* lock_on_mvke = 3
* OTHERS = 4.

****************************** LONG
TEXTS*********************************
* IF IV_COMPLETE_PRODUCT EQ abap_true.
* LOOP AT is_keys-mara_keys ASSIGNING <fs_mara_keys>.
*
* DATA: ls_prd_text TYPE cmd_bs_mat_s_notes,
* ls_plant_text TYPE ty_plant_notes,
* ls_sales_text TYPE cmd_bs_mat_s_notes_sales,
* lt_read_text TYPE TABLE OF tline,
* ls_read_text TYPE tline,
* lv_string TYPE string,
* lt_stxl TYPE TABLE OF stxl,
* lv_tdname TYPE tdobname.
* CLEAR lt_stxl. REFRESH lt_stxl.
* CLEAR lv_tdname.
* CONCATENATE <fs_mara_keys>-matnr '' INTO lv_tdname RESPECTING
BLANKS.
* REPLACE SECTION OFFSET 40 OF lv_tdname WITH '%'.
* SELECT * FROM stxl INTO CORRESPONDING FIELDS OF TABLE lt_stxl
WHERE tdname LIKE lv_tdname.
* LOOP AT lt_stxl INTO DATA(ls_stxl).
* IF strlen( ls_stxl-tdname ) <= 40.
* ls_prd_text-matnr = <fs_mara_keys>-matnr.
* ls_prd_text-langu = ls_stxl-tdspras.
* ls_prd_text-tdid = ls_stxl-tdid.
* CALL FUNCTION 'READ_TEXT'
* EXPORTING
** client = SY-MANDT " Client
* id = ls_stxl-tdid " Text ID of text
to be read
* language = ls_stxl-tdspras " Language of
text to be read
* name = ls_stxl-tdname " Name of text
to be read
* object = 'MATERIAL' " Object of text to
be read
* TABLES
* lines = lt_read_text
* EXCEPTIONS
* id = 1
* language = 2
* name = 3
* not_found = 4
* object = 5
* reference_check = 6
* wrong_access_to_archive = 7
* OTHERS = 8.
* IF sy-subrc EQ 0.
* CLEAR lv_string.
* LOOP AT lt_read_text INTO ls_read_text.
* CONCATENATE lv_string ls_read_text-tdline INTO
lv_string.
* ENDLOOP.
* ls_prd_text-note = lv_string.
* ENDIF.
* INSERT ls_prd_text INTO TABLE ES_tbl_db-t_text.
* CLEAR ls_prd_text.
* ELSEIF strlen( ls_stxl-tdname ) > 40 AND strlen( ls_stxl-
tdname ) <= 45.
*
* ls_plant_text-matnr = <fs_mara_keys>-matnr.
* ls_plant_text-werks = substring( val = ls_stxl-tdname off =
41 len = 4 ).
* ls_plant_text-tdid = ls_stxl-tdid.
* ls_plant_text-langu = ls_stxl-tdspras.
* CALL FUNCTION 'READ_TEXT'
* EXPORTING
** client = SY-MANDT " Client
* id = ls_stxl-tdid " Text ID of text
to be read
* language = ls_stxl-tdspras " Language of
text to be read
* name = ls_stxl-tdname " Name of text
to be read
* object = 'MDTXT' " Object of text to be
read
* TABLES
* lines = lt_read_text
* EXCEPTIONS
* id = 1
* language = 2
* name = 3
* not_found = 4
* object = 5
* reference_check = 6
* wrong_access_to_archive = 7
* OTHERS = 8.
* IF sy-subrc EQ 0.
* CLEAR lv_string.
* LOOP AT lt_read_text INTO ls_read_text.
* CONCATENATE lv_string ls_read_text-tdline INTO
lv_string.
* ENDLOOP.
* ls_plant_text-note = lv_string.
* ENDIF.
* INSERT ls_plant_text INTO TABLE ES_tbl_db-t_plant_text.
* CLEAR ls_plant_text.
* ELSEIF strlen( ls_stxl-tdname ) > 45 AND strlen( ls_stxl-
tdname ) <= 47.
* ls_sales_text-matnr = <fs_mara_keys>-matnr.
* ls_sales_text-langu = ls_stxl-tdspras.
* ls_sales_text-tdid = ls_stxl-tdid.
* ls_sales_text-vkorg = substring( val = ls_stxl-tdname off =
40 len = 4 ).
* ls_sales_text-vtweg = substring( val = ls_stxl-tdname off =
44 len = 2 ).
* CALL FUNCTION 'READ_TEXT'
* EXPORTING
** client = SY-MANDT " Client
* id = ls_stxl-tdid " Text ID of text
to be read
* language = ls_stxl-tdspras " Language of
text to be read
* name = ls_stxl-tdname " Name of text
to be read
* object = 'MVKE' " Object of text to be
read
* TABLES
* lines = lt_read_text
* EXCEPTIONS
* id = 1
* language = 2
* name = 3
* not_found = 4
* object = 5
* reference_check = 6
* wrong_access_to_archive = 7
* OTHERS = 8.
* IF sy-subrc <> 0.
** message id sy-msgid type sy-msgty number sy-msgno
** with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ELSE.
* CLEAR lv_string.
* LOOP AT lt_read_text INTO ls_read_text.
* CONCATENATE lv_string ls_read_text-tdline INTO
lv_string.
* ENDLOOP.
* ls_sales_text-note = lv_string.
* ENDIF.
* INSERT ls_sales_text INTO TABLE ES_tbl_db-t_sales_text.
* CLEAR ls_sales_text.
* ENDIF.
* ENDLOOP.
* ENDLOOP.
* ENDIF.
**************************LONG TEXTS********************************

ENDMETHOD.
METHOD read_all_variants_seasons.

DATA : lt_matnr_season_db TYPE TABLE OF pre03,


lt_var_mara TYPE STANDARD TABLE OF mara,
ls_mara TYPE mara.

LOOP AT it_seasons_keys_read ASSIGNING FIELD-


SYMBOL(<fs_it_seasons_keys_read>).
READ TABLE mt_product_neuflag ASSIGNING FIELD-
SYMBOL(<fs_mt_product_neuflag>) WITH KEY product =
<fs_it_seasons_keys_read>-matnr.
IF sy-subrc = 0.
IF <fs_mt_product_neuflag>-neuflag IS INITIAL.
* Reading MARA table for article information
READ TABLE it_mara_db INTO ls_mara WITH KEY matnr =
<fs_it_seasons_keys_read>-matnr.

* For Generic article


IF <fs_it_seasons_keys_read>-attyp = '01' OR ls_mara-attyp =
'01'.
CALL FUNCTION 'LESEN_VARIANTEN_ZU_SA'
EXPORTING
sammelartikel = <fs_it_seasons_keys_read>-matnr
"headdata-material_long
TABLES
varianten = lt_var_mara
EXCEPTIONS
OTHERS = 0.

LOOP AT lt_var_mara ASSIGNING FIELD-SYMBOL(<ls_var_mara>).


APPEND <ls_var_mara>-matnr TO lt_matnr_season_db.
ENDLOOP.

SORT lt_matnr_season_db.
DELETE ADJACENT DUPLICATES FROM lt_matnr_season_db.
* generic article in front of variants
INSERT <fs_it_seasons_keys_read>-matnr INTO
lt_matnr_season_db INDEX 1.

* other than generic article , if it is variant.


ELSEIF ( <fs_it_seasons_keys_read>-attyp = '02' AND
<fs_it_seasons_keys_read>-satnr IS NOT INITIAL )
OR ( ls_mara-attyp = '02' AND ls_mara-satnr IS NOT INITIAL ).

INSERT <fs_it_seasons_keys_read>-satnr INTO


lt_matnr_season_db INDEX 1.
APPEND <fs_it_seasons_keys_read>-matnr TO lt_matnr_season_db.

ELSE.
IF <fs_it_seasons_keys_read>-attyp = '00' OR ls_mara-attyp =
'00' OR <fs_it_seasons_keys_read>-attyp = '10' OR ls_mara-attyp = '10' OR
<fs_it_seasons_keys_read>-attyp = '11' OR ls_mara-attyp =
'11' OR <fs_it_seasons_keys_read>-attyp = '12' OR ls_mara-attyp = '12'.
APPEND <fs_it_seasons_keys_read>-matnr TO
lt_matnr_season_db.
ENDIF.

ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
* DB Read
IF lt_matnr_season_db IS NOT INITIAL.
cl_rfm_article_season_data=>fetch_db_data( it_matnr =
lt_matnr_season_db ).
mt_seasons_db = cl_rfm_article_season_data=>mt_seasons_mat_db.
ENDIF.

** code for generic material/variant


* IF <fs_it_seasons_keys_read>-attyp = '01' OR ls_mara-attyp = '01'.
* IF <fs_mt_product_neuflag>-neuflag IS INITIAL."IF
mv_art_creation = abap_false.
** Retrieve existing variants
* CALL FUNCTION 'LESEN_VARIANTEN_ZU_SA'
* EXPORTING
* sammelartikel = <fs_it_seasons_keys_read>-matnr "headdata-
material_long
* TABLES
* varianten = lt_var_mara
* EXCEPTIONS
* OTHERS = 0.
*
* LOOP AT lt_var_mara ASSIGNING FIELD-SYMBOL(<ls_var_mara>).
* APPEND <ls_var_mara>-matnr TO lt_matnr_keys.
* ENDLOOP.
* ENDIF.
*** Collect the related new variants
** LOOP AT variantskeys ASSIGNING <ls_variantkey>
** WHERE variant_long IS NOT INITIAL.
** APPEND <ls_variantkey>-variant_long TO mt_matnr_keys.
** ENDLOOP.
*
* SORT lt_matnr_keys.
* DELETE ADJACENT DUPLICATES FROM lt_matnr_keys.
** By this insert maybe the strict sort order can be destroyed -> avoid
** any binary search reads
** generic article in front of variants
* INSERT <fs_it_seasons_keys_read>-matnr INTO lt_matnr_keys INDEX
1.
*
* IF lt_matnr_keys IS NOT INITIAL.
* APPEND LINES OF lt_matnr_keys TO lt_matnr_season_db.
* ENDIF.
** elseif ls_matnr_season_db-attyp eq '02'.
* ELSEIF ( <fs_it_seasons_keys_read>-attyp = '02' AND
<fs_it_seasons_keys_read>-satnr IS NOT INITIAL )
* OR ( ls_mara-attyp = '02' AND ls_mara-satnr IS NOT INITIAL ).
* "other than generic article , if it is variants.
* INSERT <fs_it_seasons_keys_read>-matnr INTO lt_matnr_keys INDEX
1.
* INSERT <fs_it_seasons_keys_read>-matnr INTO lt_matnr_season_db
INDEX 1.
*
* "---------------------------------------------------------------
-------"
* "-------------------Get All the material + variants in keys-----
-------"
* "----------------to fetch season data---------------------------
-------"
* IF <fs_it_seasons_keys_read>-satnr IS NOT INITIAL.
* lv_satnr = <fs_it_seasons_keys_read>-satnr.
* ELSEIF ls_mara-satnr IS NOT INITIAL.
* lv_satnr = ls_mara-satnr.
* ENDIF.
*
* IF <fs_it_seasons_keys_read>-satnr IS NOT INITIAL.
* IF <fs_mt_product_neuflag>-neuflag IS INITIAL."IF
mv_art_creation = abap_false.
*
** CALL FUNCTION 'LESEN_VARIANTEN_ZU_SA'
** EXPORTING
** sammelartikel = lv_satnr
** TABLES
** varianten = lt_var_mara_sea
** EXCEPTIONS
** OTHERS = 0.
**
**
** LOOP AT lt_var_mara_sea ASSIGNING FIELD-
SYMBOL(<ls_var_mara_sea>).
**
** READ TABLE lt_matnr_season_db WITH KEY
** matnr = <ls_var_mara_sea>-
matnr
** TRANSPORTING NO FIELDS.
** IF sy-subrc NE 0.
** APPEND <ls_var_mara_sea>-matnr TO lt_matnr_season_db.
** ENDIF.
**
** ENDLOOP.
*
* SORT lt_matnr_season_db BY matnr.
* DELETE ADJACENT DUPLICATES FROM lt_matnr_season_db COMPARING
matnr.
* INSERT <fs_it_seasons_keys_read>-satnr INTO
lt_matnr_season_db INDEX 1.
*
* ENDIF.
* ENDIF.
*
* ENDIF.
*
***Akash - check if this method is needed ? from cl_im_fsh_artmas_inbound
***CALL METHOD me->check_matnr_exists
*** EXPORTING
*** clientdata = clientdata
*** is_bapifshseasons = ls_bapiseasons
*** IMPORTING
*** ev_satnr = DATA(lv_satnr)
*** CHANGING
*** cs_return_message = cs_return_message.
*
* ENDLOOP.
*
** cl_rfm_article_season_data=>mt_matnr_keys = lt_matnr_keys.
** cl_rfm_article_season_data=>mt_matnr_sea_key = lt_matnr_season_db.
*
*
*
** DB Read
* IF lt_matnr_season_db IS NOT INITIAL.
* cl_rfm_article_season_data=>fetch_db_data( it_matnr =
lt_matnr_season_db ).
* ENDIF.
*
* ENDMETHOD.
ENDMETHOD.

METHOD read_values.

DATA : lt_mara_tab TYPE cmd_bs_mat_t_mara,


lt_mamt_tab TYPE cmd_prd_t_mamt_data,
lt_marm_tab TYPE cmd_bs_mat_t_marm,
lt_marc_tab TYPE cmd_bs_mat_t_marc,
lt_mpop_tab TYPE cmd_bs_mat_t_mpop,
ls_mpop_tab TYPE LINE OF cmd_bs_mat_t_mpop,
lt_mpop TYPE /ugi4/mdg_bs_art_t_mpop,
lt_mbew_tab TYPE cmd_bs_mat_t_mbew,
lt_wlk2_tab TYPE cmd_prd_t_wlk2_data,
lt_wrf_matgrp_sku TYPE cmd_prd_t_wrf_matgrp_sku_data,
lt_wlk1_tab TYPE wrf_wlk1_tty,
lt_maw1_tab TYPE cmd_prd_t_maw1_data,
ls_maw1_tab TYPE cmd_prd_s_maw1_data,
lt_makt_tab TYPE cmd_bs_mat_t_makt,
ls_makt_tab TYPE cmd_bs_mat_s_makt,
* ls_marm_tab TYPE cmd_bs_mat_s_marm,
ls_mara_tab TYPE cmd_bs_mat_s_mara,
lt_mvke_tab TYPE cmd_bs_mat_t_mvke,
* ls_mvke_tab TYPE LINE OF cmd_bs_mat_t_mvke,
lt_mean_tab TYPE cmd_bs_mat_t_mean,
lt_mlea_tab TYPE cmd_prd_t_mlea_data,
lt_tax_tab TYPE /ugi4/_art_t_tax,
ls_tax_tab TYPE LINE OF /ugi4/_art_t_tax,
lt_textile_comp TYPE wrf_textile_comp_tty,
it_bom TYPE STANDARD TABLE OF /ugi4/s_bom_item,
* ls_textile_comp TYPE LINE OF wrf_textile_comp_tty,
lt_textile_fibr TYPE wrf_textile_fibr_tty,
* ls_textile_fibr TYPE LINE OF wrf_textile_fibr_tty,
lt_bom_tab TYPE /ugi4/tt_ar_pp_bom,
lt_sesons_tab TYPE cmd_prd_t_fsh_seasons_mat_data,
lt_characval TYPE /ugi4/_t_ar_pp_characval,
ls_rfm_api TYPE /ugi4/rfm_data_db_mat.

DATA: it_value_assigned TYPE STANDARD TABLE OF api_vali,


* it_value_assigned_1 TYPE STANDARD TABLE OF api_vali,
it_value_assigned_2 TYPE STANDARD TABLE OF api_vali,
it_char TYPE STANDARD TABLE OF api_char,
ls_value_assigned TYPE api_vali,
lv_valcnt TYPE i,
ls_value TYPE /ugi4/_s_ar_pp_characval,
ls_char TYPE api_char.
DATA : p_mat_to TYPE matnr.
DATA : lv_class TYPE klasse_d.
p_mat_to = i_matnr.
SELECT SINGLE * FROM mara INTO CORRESPONDING FIELDS OF ls_mara_tab
WHERE matnr = i_matnr.
ls_mara_tab-matnr = p_mat_to.
ls_mara_tab-is_matnr_tmp = abap_true.
INSERT ls_mara_tab INTO TABLE lt_mara_tab.

SELECT SINGLE * FROM maw1 INTO CORRESPONDING FIELDS OF ls_maw1_tab


WHERE matnr = i_matnr.
ls_maw1_tab-matnr = p_mat_to.
*CLEAR ls_maw1_tab-wladg.
INSERT ls_maw1_tab INTO lt_maw1_tab INDEX 1.

SELECT SINGLE * FROM makt INTO CORRESPONDING FIELDS OF ls_makt_tab


WHERE matnr = i_matnr ##WARN_OK.
ls_makt_tab-matnr = p_mat_to.
INSERT ls_makt_tab INTO TABLE lt_makt_tab.

DATA : lt_marm TYPE TABLE OF marm.

SELECT * FROM marm INTO CORRESPONDING FIELDS OF TABLE lt_marm WHERE


matnr = i_matnr.
IF sy-subrc EQ 0.
LOOP AT lt_marm ASSIGNING FIELD-SYMBOL(<fs_marm>).
<fs_marm>-matnr = p_mat_to.
INSERT <fs_marm> INTO TABLE lt_marm_tab.
ENDLOOP.
ENDIF.

* SELECT * FROM mvke INTO CORRESPONDING FIELDS OF TABLE lt_mvke_tab


WHERE matnr = i_matnr.
* read mpop tab.

* * TAX Data.
DATA : lt_steur TYPE STANDARD TABLE OF mg03steuer.
CALL FUNCTION 'STEUERTAB_READ_RT'
EXPORTING
kzrfb = abap_true
matnr = i_matnr
TABLES
steuertab = lt_steur
EXCEPTIONS
wrong_call = 1
steuertab_empty = 2
OTHERS = 3.
IF sy-subrc = 0.
LOOP AT lt_steur INTO DATA(ls_steur).
MOVE-CORRESPONDING ls_steur TO ls_tax_tab ##ENH_OK.
ls_tax_tab-matnr = p_mat_to.
INSERT ls_tax_tab INTO TABLE lt_tax_tab.
* Implement suitable error handling here
ENDLOOP.
ENDIF.

*Mass read from MLGT


SELECT * FROM wrf_textile_comp APPENDING TABLE lt_textile_comp
WHERE matnr EQ i_matnr.

SELECT * FROM wrf_textile_fibr APPENDING TABLE lt_textile_fibr


WHERE matnr EQ i_matnr.

CALL FUNCTION '/UGI4/WST1_BOM_COMP_READ'


EXPORTING
i_matnr = i_matnr
TABLES
it_bom_items = it_bom
EXCEPTIONS
no_record = 1
OTHERS = 2.
IF sy-subrc <> 0. "#EC NEEDED
ENDIF.

DATA : ls_bom_api TYPE LINE OF /ugi4/tt_ar_pp_bom.


LOOP AT it_bom INTO DATA(ls_bom).
MOVE-CORRESPONDING ls_bom TO ls_bom_api ##ENH_OK.
ASSIGN COMPONENT 'MARA_BOM' OF STRUCTURE ls_bom_api TO FIELD-
SYMBOL(<fs_mara_bom>).
ASSIGN COMPONENT /ugi4/if_mdg_bs_art_c=>gc_mara OF STRUCTURE
ls_bom_api TO FIELD-SYMBOL(<fs_mara>).
ASSIGN COMPONENT 'MARA_DESC' OF STRUCTURE ls_bom_api TO FIELD-
SYMBOL(<fs_mara_desc>).
* MOVE ls_bom-matnr TO <fs_mara_bom>.
<fs_mara_bom> = ls_bom-matnr.
* MOVE p_mat_to TO <fs_mara>.
<fs_mara> = p_mat_to.
* MOVE lv_mara_desc TO <fs_mara_desc>.
INSERT ls_bom_api INTO TABLE lt_bom_tab.
ENDLOOP.

* malg.

DATA : lt_malg_tab TYPE malg_ueb_tt,


* ls_malg_tab TYPE malg,
lt_additionals TYPE TABLE OF wtaddi,
ls_additionals_tab TYPE LINE OF /ugi4/_art_t_additiona,
* ls_marm TYPE marm,
lt_additionals_tab TYPE /ugi4/rfm_wtaddi.

SELECT * FROM malg INTO CORRESPONDING FIELDS OF TABLE lt_malg_tab


WHERE matnr = i_matnr ##TOO_MANY_ITAB_FIELDS.

SELECT * FROM wtaddi INTO TABLE lt_additionals_tab WHERE matnr =


i_matnr.

LOOP AT lt_additionals INTO DATA(ls_additionals).


MOVE-CORRESPONDING ls_additionals TO ls_additionals_tab ##ENH_OK.
ASSIGN COMPONENT 'SEQUENCE' OF STRUCTURE ls_additionals_tab TO
FIELD-SYMBOL(<sequence>).
IF sy-subrc EQ 0.
<sequence> = ls_additionals-lfdnr.
ENDIF.
* INSERT ls_additionals_tab INTO TABLE lt_additionals_tab.
ENDLOOP.

SELECT * FROM marc INTO TABLE lt_marc_tab WHERE matnr = i_matnr.

SELECT * FROM mvke INTO TABLE lt_mvke_tab WHERE matnr = i_matnr.

CALL FUNCTION '/UGI4/MDG_BS_ART_DB_READ_MPOP' ##ENH_OK


EXPORTING
it_marc = lt_marc_tab ##ENH_OK
IMPORTING
et_mpop = lt_mpop.

LOOP AT lt_mpop INTO DATA(ls_mpop).


MOVE-CORRESPONDING ls_mpop TO ls_mpop_tab ##ENH_OK.
INSERT ls_mpop_tab INTO TABLE lt_mpop_tab.
ENDLOOP.

SELECT * FROM mbew INTO CORRESPONDING FIELDS OF TABLE lt_mbew_tab


WHERE matnr = i_matnr ##TOO_MANY_ITAB_FIELDS.
SELECT * FROM wlk1 INTO CORRESPONDING FIELDS OF TABLE lt_wlk1_tab
WHERE artnr = i_matnr.

SELECT * FROM wrf_matgrp_sku INTO CORRESPONDING FIELDS OF TABLE


lt_wrf_matgrp_sku WHERE matnr = i_matnr.

SELECT * FROM wlk2 INTO CORRESPONDING FIELDS OF TABLE lt_wlk2_tab


WHERE matnr = i_matnr.

DATA : lt_mlgn_tab TYPE cmd_bs_mat_t_mlgn.


DATA : lt_mlgt_tab TYPE cmd_bs_mat_t_mlgt.

DATA : lt_class_gen TYPE /ugi4/_art_t_clas_gen,


ls_class_gen TYPE LINE OF /ugi4/_art_t_clas_gen,
lt_char_prof TYPE /ugi4/tt_charp,
ls_char_prof TYPE LINE OF /ugi4/tt_charp,
lt_restrict TYPE /ugi4/cmd_rfm_t_restrtict,
* ls_restrict TYPE LINE OF /ugi4/cmd_rfm_t_restrtict,
lt_variants TYPE /ugi4/cmd_rfm_t_variants.
* ls_variants TYPE LINE OF /ugi4/cmd_rfm_t_variants.

SELECT * FROM mlgn INTO CORRESPONDING FIELDS OF TABLE lt_mlgn_tab


WHERE matnr = i_matnr.

SELECT * FROM mlgt INTO CORRESPONDING FIELDS OF TABLE lt_mlgt_tab


WHERE matnr = i_matnr.

ls_rfm_api-data-mara_tab = lt_mara_tab.
ls_rfm_api-data-makt_tab = lt_makt_tab.
ls_rfm_api-data-maw1_tab = lt_maw1_tab.
ls_rfm_api-data-marm_tab = lt_marm_tab.
ls_rfm_api-data-tax_tab = lt_tax_tab.
ls_rfm_api-data-textile_comp = lt_textile_comp.
ls_rfm_api-data-textile_fibr = lt_textile_fibr.
ls_rfm_api-data-bom_tab = lt_bom_tab.
ls_rfm_api-data-malg_tab = lt_malg_tab.
ls_rfm_api-data-additional_tab = lt_additionals_tab.
ls_rfm_api-data-marc_tab = lt_marc_tab.
ls_rfm_api-data-mvke_tab = lt_mvke_tab.
ls_rfm_api-data-mpop_tab = lt_mpop_tab.
ls_rfm_api-data-wlk1_tab = lt_wlk1_tab.
ls_rfm_api-data-mbew_tab = lt_mbew_tab.
ls_rfm_api-data-wrf_matgrp_sku_tab = lt_wrf_matgrp_sku.
ls_rfm_api-data-wlk2_tab = lt_wlk2_tab.
ls_rfm_api-data-mlgn_tab = lt_mlgn_tab.
ls_rfm_api-data-mlgt_tab = lt_mlgt_tab.

ls_rfm_api-data-variants_tab = lt_variants.
ls_rfm_api-data-restrict_tab = lt_restrict.
DATA(ls_class) =
/ugi4/mdg_bs_ecc_ar_services=>get_conf_class_new_gen( EXPORTING iv_satnr
= i_matnr ).
ls_class_gen-mara = i_matnr.
ls_class_gen-klart_var = ls_class-klart.
ls_class_gen-class_var = ls_class-class.
INSERT ls_class_gen INTO TABLE lt_class_gen.
ls_rfm_api-data-class_gen_tab = lt_class_gen.

SELECT * FROM mean INTO TABLE lt_mean_tab WHERE matnr = i_matnr.

SELECT * FROM mlea INTO TABLE lt_mlea_tab WHERE matnr = i_matnr.

DATA : lt_eina_tab TYPE TABLE OF eina,


lt_eine_tab TYPE TABLE OF eine.

SELECT * FROM eina INTO TABLE lt_eina_tab WHERE matnr = i_matnr.


IF sy-subrc EQ 0.
SELECT * FROM eine INTO TABLE lt_eine_tab FOR ALL ENTRIES IN
lt_eina_tab WHERE infnr = lt_eina_tab-infnr."#EC CI_NO_TRANSFORM
ENDIF.

SELECT * FROM mamt INTO TABLE lt_mamt_tab WHERE matnr = i_matnr.

SELECT * FROM fsh_seasons_mat INTO TABLE lt_sesons_tab WHERE matnr =


i_matnr.

ls_rfm_api-data-mean_tab = lt_mean_tab.
ls_rfm_api-data-mlea_tab = lt_mlea_tab.
ls_rfm_api-data-eina_tab = lt_eina_tab.
ls_rfm_api-data-eine_tab = lt_eine_tab.
ls_rfm_api-data-mamt_tab = lt_mamt_tab.

ls_rfm_api-data-fsh_seasons_mat_tab = lt_sesons_tab.

DATA : lo_class TYPE REF TO /ugi4/cl_ar_article_maint_api.


CREATE OBJECT lo_class.

CALL METHOD lo_class->map_to_api_structure ##NEEDED


EXPORTING
is_db_attr = ls_rfm_api-data
IMPORTING
es_db_attr = DATA(ls_frm_api_db).

CALL FUNCTION 'MATERIAL_READ_CLASSIFIC_RT'


EXPORTING
p_matnr = i_matnr
* KZ_MARA_READ = 'X'
* P_MARA =
* KZ_MAKT_READ = ' '
* P_LANGU = SY-LANGU
* KZ_VARI_READ = 'X'
* KZ_VALU_READ = 'X'
* KZ_KLTYP_READ = ' '
* KZ_VALU_ALLOWED = 'X'
* KZ_VALU_ASSIGNED = 'X'
* KZ_CHAR_VARI_EXT = 'X'
* KZ_INT_ART = ' '
kzrfb = abap_true
* MAXTZ = 0
* SPERRMODUS = ' '
* P_MEINH = ' '
IMPORTING
p_class = lv_class
* P_KLTYP =
* P_MARA =
* P_MAKT =
* P_CONF_KLART =
* P_CONF_CLASS =
TABLES
exp_char = it_char
exp_valu_assigned = it_value_assigned
exp_valu = it_value_assigned_2
EXCEPTIONS
wrong_call = 1
mara_not_exist = 2
no_class = 3
no_char = 4
no_valu_vari = 5
valu_not_allowed = 6
OTHERS = 7.
IF sy-subrc <> 0.
.
ENDIF.

IF lv_class NE ls_mara_tab-matkl.
IF lv_class IS NOT INITIAL.
ls_char_prof-matnr = p_mat_to .
ls_char_prof-charp = lv_class.
INSERT ls_char_prof INTO TABLE lt_char_prof.
ENDIF.
ENDIF.
IF it_value_assigned IS NOT INITIAL.
LOOP AT it_char INTO ls_char .
CLEAR lv_valcnt.
LOOP AT it_value_assigned INTO ls_value_assigned WHERE atinn =
ls_char-atinn.

CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'


EXPORTING
input = ls_value_assigned-atinn
IMPORTING
output = ls_value_assigned-atinn.

ls_value-mara = i_matnr .""lv_matnr.

ls_value-charid = ls_value_assigned-atinn.
ls_value-classtype = '026'. " Default Class.
* ls_value-valcnt = lv_valcnt.
IF ls_value_assigned-atzhl IS NOT INITIAL.
ls_value-valcnt = ls_value_assigned-atzhl.
ELSE.
lv_valcnt = lv_valcnt + 1.
ls_value-valcnt = lv_valcnt.
ENDIF.
ls_value-ataw1_chr = ls_value_assigned-ataw1.
ls_value-atawe_chr = ls_value_assigned-atawe.
ls_value-atcod_chr = ls_value_assigned-atcod.
ls_value-atflb_chr = ls_value_assigned-atflb.
ls_value-atflv_chr = ls_value_assigned-atflv.
ls_value-atwrt2 = ls_value_assigned-atwrt.
ls_value-atsrt_chr = ls_value_assigned-atsrt.
ls_value-atnam2_ch = ls_value_assigned-atnam.
* ls_value-atwrt_val = ls_valuation-value.
** MOVE-CORRESPONDING ls_value TO <fs_data>.
INSERT ls_value INTO TABLE lt_characval.
ENDLOOP.
ENDLOOP.
ENDIF.

ls_rfm_api-data-characval_tab = lt_characval.
ls_rfm_api-data-char_prof_tab = lt_char_prof.
DATA :ls_creq_attr TYPE /ugi4/creq_attr_api.

ls_creq_attr-cr_type = 'AR01'.
ls_creq_attr-creq_text = 'GDS_API'.
ls_creq_attr-due_date = '99991231'.
*ls_creq_attr-action = '00'.
ls_creq_attr-action = cl_usmd_crequest_action=>gc_draft_action-
submit.
ls_creq_attr-save_mode = 'B'.

et_data = ls_rfm_api-data.
es_creqdet = ls_creq_attr.

ENDMETHOD.

METHOD read_variants.
DATA : lt_variants TYPE /ugi4/cmd_rfm_t_variants.
DATA : lt_var_temp TYPE tt_var_struc,
lv_field TYPE ddobjname,
ls_var_temp TYPE ty_var_struc.
* DATA : lv_atinn TYPE atinn,
* lv_atnam TYPE atnam,
* lv_atwrt TYPE atwrt.

DATA : lv_count TYPE i,


lv_count_str TYPE string.
lt_variants = is_variants.
LOOP AT lt_variants INTO DATA(ls_variants).
ls_var_temp-matnr = ls_variants-matnr.
ls_var_temp-varnr = ls_variants-varnr.
DO 5 TIMES.
lv_count = lv_count + 1.
lv_count_str = lv_count.
CONCATENATE 'ATNAM' lv_count_str INTO lv_field.
ASSIGN COMPONENT lv_field OF STRUCTURE ls_variants TO FIELD-
SYMBOL(<lv_field>).
IF sy-subrc EQ 0 AND <lv_field> IS NOT INITIAL." AND
lt_bapie1ausprt_r IS INITIAL.
ls_var_temp-atnam = <lv_field>.

CONCATENATE 'ATWRT' lv_count_str INTO lv_field.


ASSIGN COMPONENT lv_field OF STRUCTURE ls_variants TO FIELD-
SYMBOL(<lv_field1>).
IF sy-subrc EQ 0 AND <lv_field1> IS NOT INITIAL." AND
lt_bapie1ausprt_r IS INITIAL.
ls_var_temp-atwrt = <lv_field1>.
ENDIF.

CONCATENATE 'ATINN' lv_count_str INTO lv_field.


ASSIGN COMPONENT lv_field OF STRUCTURE ls_variants TO FIELD-
SYMBOL(<lv_field2>).
IF sy-subrc EQ 0 AND <lv_field2> IS NOT INITIAL." AND
lt_bapie1ausprt_r IS INITIAL.
ls_var_temp-atinn = <lv_field2>.
ENDIF.
INSERT ls_var_temp INTO TABLE lt_var_temp.
ENDIF.
ENDDO.
ENDLOOP.

et_variants = lt_var_temp.

* LOOP AT lt_variants INTO DATA(ls_variants).


* DO 10 TIMES VARYING lv_atinn FROM ls_variants-atinn01 NEXT
ls_variants-atinn02
* VARYING lv_atnam FROM ls_variants-atnam01 NEXT
ls_variants-atnam02
* VARYING lv_atwrt FROM ls_variants-atwrt01 NEXT
ls_variants-atwrt02.
* IF lv_atinn IS NOT INITIAL AND lv_atnam IS NOT INITIAL AND
lv_atwrt IS NOT INITIAL.
* ls_var_temp-matnr = ls_variants-matnr.
* ls_var_temp-varnr = ls_variants-varnr.
* ls_var_temp-atinn = lv_atinn.
* ls_var_temp-atnam = lv_atnam.
* ls_var_temp-atwrt = lv_atwrt.
* INSERT ls_var_temp INTO TABLE lt_var_temp.
* CLEAR ls_var_temp.
* ENDIF.
* ENDDO.
* ENDLOOP.

ENDMETHOD.

METHOD write_entity_data.
DATA : lt_entity_data TYPE usmd_gov_api_ts_ent_data.
DATA(lt_entity_write) = it_entity_data.
READ TABLE lt_entity_write INTO DATA(ls_entity_data) WITH KEY entity
= 'MARA'.
IF sy-subrc EQ 0.
DELETE lt_entity_write WHERE entity = 'MARA'.
INSERT ls_entity_data INTO TABLE lt_entity_data.
CLEAR ls_entity_data.
TRY.
co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
co_conv_api->confirm_entity_data( ).
CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
CLEAR lt_entity_data.
CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
CLEAR lt_entity_data.
CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
DATA(lt_messages) = co_conv_api->get_messages( ).
APPEND LINES OF lt_messages TO et_message.
ENDTRY.
* REFRESH lt_entity_data.
CLEAR lt_entity_data.
ENDIF.

LOOP AT lt_entity_write INTO ls_entity_data.

INSERT ls_entity_data INTO TABLE lt_entity_data.


CLEAR ls_entity_data.
TRY.
co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
co_conv_api->confirm_entity_data( ).
CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
CLEAR lt_entity_data.
CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
CLEAR lt_entity_data.
CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
lt_messages = co_conv_api->get_messages( ).
APPEND LINES OF lt_messages TO et_message.
ENDTRY.
* REFRESH lt_entity_data.
CLEAR lt_entity_data.
ENDLOOP.

READ TABLE lt_entity_write INTO ls_entity_data WITH KEY entity =


'MEAN_GTIN'.
if sy-subrc eq 0.
INSERT ls_entity_data INTO TABLE lt_entity_data.
CLEAR ls_entity_data.
TRY.
co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
co_conv_api->confirm_entity_data( ).
CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
CLEAR lt_entity_data.
CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
CLEAR lt_entity_data.
CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
lt_messages = co_conv_api->get_messages( ).
APPEND LINES OF lt_messages TO et_message.
ENDTRY.
* REFRESH lt_entity_data.
CLEAR lt_entity_data.
endif.

ENDMETHOD.

METHOD add_message.
* *--------------------------------------------------------------------
*
* This message adds the last system message to the given message table.
* Pay attention: the fields sy-msgid, sy-msgty, sy-msgno, ... must be
* filled before this method is called, e.g. by a call of statement
* 'MESSAGE ... into lv_message' where lv_message is of type STRING.
*--------------------------------------------------------------------*
*---------------------------------------------------------------------*
* D A T A - D E C L A R A T I O N *
*---------------------------------------------------------------------*
DATA: ls_message LIKE LINE OF ct_message.

*---------------------------------------------------------------------*
* S O U R C E - C O D E *
*---------------------------------------------------------------------*
ls_message-id = sy-msgid.
ls_message-type = sy-msgty.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.

INSERT ls_message INTO TABLE ct_message.

ENDMETHOD.

METHOD calc_azsub.

*************************************************************************
****
* This method calculates the AZSUB field of UNITOFMSR recursively.
*************************************************************************
****

DATA: ls_unitofmsr TYPE /ugi4/_s_ar_pp_unitofmsr,


lt_unitofmsr TYPE /ugi4/t_ar_pp_unitofmsr.

lt_unitofmsr[] = it_unitofmsr[].
LOOP AT lt_unitofmsr INTO ls_unitofmsr.

IF ls_unitofmsr-qteunit EQ iv_mesub.
IF cv_azsub IS NOT INITIAL AND ls_unitofmsr-umrez IS NOT INITIAL
AND ls_unitofmsr-umren IS NOT INITIAL.
cv_azsub = cv_azsub / ( ls_unitofmsr-umrez / ls_unitofmsr-umren
).
DELETE lt_unitofmsr INDEX sy-tabix.

CALL METHOD calc_azsub


EXPORTING
it_unitofmsr = lt_unitofmsr
iv_mesub = ls_unitofmsr-mesub
CHANGING
cv_azsub = cv_azsub.
ENDIF.
ENDIF.

ENDLOOP.
RETURN.

ENDMETHOD.

METHOD care_code_convert_int2ext.
DATA: wa_message LIKE LINE OF et_message.
DATA: lv_region_text TYPE val_text ##NEEDED,
ls_care_types_t TYPE wrf_care_types_t,
lt_dd07v_tab TYPE TABLE OF dd07v,
ls_dd07v_tab TYPE dd07v.
CLEAR: ep_care_code_ext.

IF ip_care_type IS INITIAL
OR ip_region IS INITIAL
OR ip_care_code_int IS INITIAL.
wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 169.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.

ENDIF.

* Convert internal care code (2 CHARs) into external (normed, regional)


* care code (1 CHAR)
SELECT SINGLE care_code_region
FROM wrf_care_codes
INTO ep_care_code_ext
WHERE care_type = ip_care_type
AND region = ip_region
AND care_code = ip_care_code_int.

IF sy-subrc <> 0.

lv_region_text = ip_region.

CALL FUNCTION 'DDIF_DOMA_GET'


EXPORTING
name = 'WRF_COUNTRY_GROUP'
state = 'A'
langu = sy-langu
TABLES
dd07v_tab = lt_dd07v_tab
EXCEPTIONS
illegal_input = 1
OTHERS = 2.

IF sy-subrc = 0.
SORT lt_dd07v_tab BY domvalue_l.

READ TABLE lt_dd07v_tab WITH KEY domvalue_l = ip_region


INTO ls_dd07v_tab
BINARY SEARCH.
IF sy-subrc = 0.
lv_region_text = ls_dd07v_tab-ddtext.
ENDIF.
ENDIF.

SELECT SINGLE * FROM wrf_care_types_t


INTO ls_care_types_t
WHERE care_type = ip_care_type
AND spras = sy-langu.

IF sy-subrc <> 0.
ls_care_types_t-care_type_descr = ip_care_type.
ENDIF.

wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 170.
wa_message-msgty = 'E'.
wa_message-msgv1 = ip_care_code_int.
wa_message-msgv2 = ls_care_types_t-care_type_descr.

APPEND wa_message TO et_message.


CLEAR wa_message.

ENDIF.

ENDMETHOD.

METHOD care_code_convert_mara2ext.

DATA: lt_wrf_care_types TYPE STANDARD TABLE OF wrf_care_types.


DATA: ls_care_codes_int TYPE wrf_care_code_detail_sty.
DATA: ls_wrf_care_types TYPE wrf_care_types.
DATA: lv_offset TYPE i,
wa_message LIKE LINE OF et_message.

CLEAR: es_care_codes_ext.

* Read all care types


IF lt_wrf_care_types[] IS INITIAL.
SELECT * FROM wrf_care_types INTO TABLE lt_wrf_care_types.

SORT lt_wrf_care_types BY care_type.


ENDIF.

es_care_codes_ext-region = ip_region.

* Distribute the concatenated values from mara-care_code into the


* single care code fields
READ TABLE lt_wrf_care_types INTO ls_wrf_care_types
WITH KEY care_type = '1'
BINARY SEARCH.
IF sy-subrc = 0.
lv_offset = ls_wrf_care_types-index_pos.

IF lv_offset > 14.


wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 168.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.
ENDIF.

ls_care_codes_int-washcode = ip_mara_care_code+lv_offset(2).
ENDIF.
READ TABLE lt_wrf_care_types INTO ls_wrf_care_types
WITH KEY care_type = '2'
BINARY SEARCH.
IF sy-subrc = 0.
lv_offset = ls_wrf_care_types-index_pos.

IF lv_offset > 14.


wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 168.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.
ENDIF.

ls_care_codes_int-bleachcode = ip_mara_care_code+lv_offset(2).
ENDIF.

READ TABLE lt_wrf_care_types INTO ls_wrf_care_types


WITH KEY care_type = '3'
BINARY SEARCH.
IF sy-subrc = 0.
lv_offset = ls_wrf_care_types-index_pos.

IF lv_offset > 14.


wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 168.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.
ENDIF.

ls_care_codes_int-ironingcode = ip_mara_care_code+lv_offset(2).
ENDIF.

READ TABLE lt_wrf_care_types INTO ls_wrf_care_types


WITH KEY care_type = '4'
BINARY SEARCH.
IF sy-subrc = 0.
lv_offset = ls_wrf_care_types-index_pos.

IF lv_offset > 14.


wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 168.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.
ENDIF.

ls_care_codes_int-drycleancode = ip_mara_care_code+lv_offset(2).
ENDIF.

READ TABLE lt_wrf_care_types INTO ls_wrf_care_types


WITH KEY care_type = '5'
BINARY SEARCH.
IF sy-subrc = 0.
lv_offset = ls_wrf_care_types-index_pos.

IF lv_offset > 14.


wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 168.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.
ENDIF.

ls_care_codes_int-thumblecode = ip_mara_care_code+lv_offset(2).
ENDIF.

READ TABLE lt_wrf_care_types INTO ls_wrf_care_types


WITH KEY care_type = '6'
BINARY SEARCH.
IF sy-subrc = 0.
lv_offset = ls_wrf_care_types-index_pos.

IF lv_offset > 14.


wa_message-msgid = /ugi4/if_mdg_bs_art_c=>gc_message.
wa_message-msgno = 168.
wa_message-msgty = 'E'.
APPEND wa_message TO et_message.
CLEAR wa_message.
ENDIF.

ls_care_codes_int-wetcleancode = ip_mara_care_code+lv_offset(2).
ENDIF.

* Conversion of the internal care codes into the external care codes
IF ls_care_codes_int-washcode IS NOT INITIAL.
me->care_code_convert_int2ext(
EXPORTING
ip_care_type = '1'
ip_region = ip_region
ip_care_code_int = ls_care_codes_int-washcode
IMPORTING
ep_care_code_ext = es_care_codes_ext-washcode
CHANGING
et_message = et_message ).
ENDIF.

IF ls_care_codes_int-bleachcode IS NOT INITIAL.


me->care_code_convert_int2ext(
EXPORTING
ip_care_type = '2'
ip_region = ip_region
ip_care_code_int = ls_care_codes_int-bleachcode
IMPORTING
ep_care_code_ext = es_care_codes_ext-bleachcode
CHANGING
et_message = et_message ).
ENDIF.

IF ls_care_codes_int-ironingcode IS NOT INITIAL.


me->care_code_convert_int2ext(
EXPORTING
ip_care_type = '3'
ip_region = ip_region
ip_care_code_int = ls_care_codes_int-ironingcode
IMPORTING
ep_care_code_ext = es_care_codes_ext-ironingcode
CHANGING
et_message = et_message ).
ENDIF.

IF ls_care_codes_int-drycleancode IS NOT INITIAL.


me->care_code_convert_int2ext(
EXPORTING
ip_care_type = '4'
ip_region = ip_region
ip_care_code_int = ls_care_codes_int-drycleancode
IMPORTING
ep_care_code_ext = es_care_codes_ext-drycleancode
CHANGING
et_message = et_message ).
ENDIF.

IF ls_care_codes_int-thumblecode IS NOT INITIAL.


me->care_code_convert_int2ext(
EXPORTING
ip_care_type = '5'
ip_region = ip_region
ip_care_code_int = ls_care_codes_int-thumblecode
IMPORTING
ep_care_code_ext = es_care_codes_ext-thumblecode
CHANGING
et_message = et_message ).
ENDIF.

IF ls_care_codes_int-wetcleancode IS NOT INITIAL.


me->care_code_convert_int2ext(
EXPORTING
ip_care_type = '6'
ip_region = ip_region
ip_care_code_int = ls_care_codes_int-wetcleancode
IMPORTING
ep_care_code_ext = es_care_codes_ext-wetcleancode
CHANGING
et_message = et_message ).
ENDIF.

ENDMETHOD.
METHOD check_internal.
DATA: lv_matnr TYPE matnr,
ls_t134 TYPE t134,
lv_flag1(1) TYPE c,
ls_mara_read TYPE mara ##NEEDED,
lv_matnr_final TYPE matnr.

CONSTANTS:lc_matnr_nr TYPE inri-object VALUE 'MATERIALNR'.

READ TABLE is_mara_data INTO DATA(ls_mara) INDEX 1.


IF sy-subrc = 0.
gv_orignal_matnr = ls_mara-matnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = ls_mara-matnr
IMPORTING
output = lv_matnr
EXCEPTIONS ##FM_SUBRC_OK
length_error = 1
OTHERS = 2.

ls_mara-matnr = lv_matnr.

CALL FUNCTION 'MARA_SINGLE_READ'


EXPORTING
matnr = lv_matnr
IMPORTING
wmara = ls_mara_read
EXCEPTIONS
lock_on_material = 1
lock_system_error = 2
wrong_call = 3
not_found = 4
OTHERS = 5.
IF sy-subrc NE 0 .
CALL FUNCTION 'T134_SINGLE_READ'
EXPORTING
kzrfb = ' '
t134_mtart = ls_mara-mtart
IMPORTING
wt134 = ls_t134
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CALL FUNCTION 'NUMBER_CHECK'
EXPORTING
nr_range_nr = ls_t134-numke
number = lv_matnr
object = lc_matnr_nr
IMPORTING
returncode = lv_flag1
EXCEPTIONS ##FM_SUBRC_OK
interval_not_found = 01
number_range_not_extern = 02
object_not_found = 03.

IF lv_flag1 IS NOT INITIAL.


*** CALL FUNCTION 'BAPI_STDMATERIAL_GETINTNUMBER'
*** EXPORTING
*** material_type = ls_mara-mtart
*** required_numbers = 1
*** TABLES
*** material_number = lt_matnr_nr.
*** IF sy-subrc EQ 0.
*** READ TABLE lt_matnr_nr INTO ls_matnr_nr INDEX 1.
*** IF sy-subrc EQ 0.
*** lv_matnr_final = ls_matnr_nr-material.
**** mv_matnr_nr = ls_matnr_nr-material.
*** ENDIF.
*** ENDIF.
CLEAR lv_matnr.
IF io_crequest IS BOUND.
TRY.
io_crequest->get_entity_structure(
EXPORTING
iv_entity_name = 'MARA' " Entity
Type
iv_struct_type = io_crequest->gc_struct_key "
Type of Data Structure
* iv_edition = abap_false " Include edition in
entity structure?
IMPORTING
er_structure = DATA(lr_mara_key_str)
" Return Structure
* er_table = " Return Table
).
CATCH cx_usmd_gov_api. " CX_USMD_CORE_DYNAMIC_CHECK
clear lr_mara_key_str.
ENDTRY.
ASSIGN lr_mara_key_str->* TO FIELD-
SYMBOL(<fs_mara_key_str>).
io_crequest->create_entity_tmp_key(
EXPORTING
iv_entity = 'MARA'
IMPORTING
es_key = <fs_mara_key_str>
).
lv_matnr = <fs_mara_key_str>.
lv_matnr_final = lv_matnr.

ENDIF.
ELSE.
lv_matnr_final = ls_mara-matnr.
ENDIF.
ENDIF.
ELSE.
lv_matnr_final = ls_mara-matnr.
ENDIF.
ENDIF.

CLEAR gv_matnr_final.
gv_matnr_final = lv_matnr_final.

IF gv_matnr_final IS INITIAL.
gv_matnr_final = ls_mara-matnr.
ENDIF.

ENDMETHOD.

METHOD delete_entity_data.
DATA: lt_messages TYPE usmd_t_message.
TRY.
co_conv_api->delete_entity_data(
EXPORTING
it_entity_keys = it_entity_data " MDG:
Table Type for Table of Entities Structure
* iv_struct = gc_struct_key_attr " Type of Data Structure
).
CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
lt_messages = co_conv_api->get_messages( ).
CATCH cx_usmd_gov_api_entity_del. " Error While
Deleting an Entity
lt_messages = co_conv_api->get_messages( ).
CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
lt_messages = co_conv_api->get_messages( ).
* DATA(lt_messages) = co_conv_api->get_messages( ).
APPEND LINES OF lt_messages TO et_message.
ENDTRY.
ENDMETHOD.

METHOD fill_db_attr.
DATA:ls_mara TYPE cmd_bs_mat_s_mara,
ls_maw1 TYPE cmd_prd_s_maw1_data,
ls_makt TYPE cmd_bs_mat_s_makt,
ls_marm TYPE cmd_bs_mat_s_marm,
ls_mean TYPE cmd_bs_mat_s_mean,
ls_marc TYPE cmd_bs_mat_s_marc,
ls_mard TYPE cmd_bs_mat_s_mard,
ls_mbew TYPE cmd_bs_mat_s_mbew,
ls_mlgn TYPE cmd_bs_mat_s_mlgn,
ls_mlgt TYPE cmd_bs_mat_s_mlgt,
ls_mvke TYPE cmd_bs_mat_s_mvke,
ls_mlan_purchase TYPE cmd_bs_mat_s_steumm,
ls_mlan_sales TYPE cmd_bs_mat_s_steu,
ls_wlk2 TYPE cmd_prd_s_wlk2_data,
ls_mamt TYPE cmd_prd_s_mamt_data,
ls_mlea TYPE cmd_prd_s_mlea_data,
ls_fsh_seasons_mat TYPE cmd_prd_s_fsh_seasons_mat_data,
ls_keys TYPE ty_keys.

IF cs_db_attr-mara_tab IS NOT INITIAL.


ls_keys-mara_keys = CORRESPONDING #( cs_db_attr-mara_tab ).
ENDIF.

IF cs_db_attr-maw1_tab IS NOT INITIAL.


ls_keys-maw1_keys = CORRESPONDING #( cs_db_attr-maw1_tab ).
ENDIF.

IF cs_db_attr-makt_tab IS NOT INITIAL.


ls_keys-makt_keys = CORRESPONDING #( cs_db_attr-makt_tab ).
ENDIF.

IF cs_db_attr-marm_tab IS NOT INITIAL.


ls_keys-marm_keys = CORRESPONDING #( cs_db_attr-marm_tab ).
ENDIF.

IF cs_db_attr-mean_tab IS NOT INITIAL.


ls_keys-mean_keys = CORRESPONDING #( cs_db_attr-mean_tab ).
ENDIF.

IF cs_db_attr-marc_tab IS NOT INITIAL.


ls_keys-marc_keys = CORRESPONDING #( cs_db_attr-marc_tab ).
ENDIF.

IF cs_db_attr-mard_tab IS NOT INITIAL.


ls_keys-mard_keys = CORRESPONDING #( cs_db_attr-mard_tab ).
ENDIF.

IF cs_db_attr-mbew_tab IS NOT INITIAL.


ls_keys-mbew_keys = CORRESPONDING #( cs_db_attr-mbew_tab ).
ENDIF.

IF cs_db_attr-mlgn_tab IS NOT INITIAL.


ls_keys-mlgn_keys = CORRESPONDING #( cs_db_attr-mlgn_tab ).
ENDIF.

IF cs_db_attr-mlgt_tab IS NOT INITIAL.


ls_keys-mlgt_keys = CORRESPONDING #( cs_db_attr-mlgt_tab ).
ENDIF.

IF cs_db_attr-mvke_tab IS NOT INITIAL.


ls_keys-mvke_keys = CORRESPONDING #( cs_db_attr-mvke_tab ).
ENDIF.

* ls_keys-mlan_keys = CORRESPONDING #( lt_mlan ).

IF cs_db_attr-wlk2_tab IS NOT INITIAL.


ls_keys-wlk2_keys = CORRESPONDING #( cs_db_attr-wlk2_tab ).
ENDIF.

IF cs_db_attr-mamt_tab IS NOT INITIAL.


ls_keys-mamt_keys = CORRESPONDING #( cs_db_attr-mamt_tab ).
ENDIF.

IF cs_db_attr-mlea_tab IS NOT INITIAL.


ls_keys-mlea_keys = CORRESPONDING #( cs_db_attr-mlea_tab ).
ENDIF.

IF cs_db_attr-fsh_seasons_mat_tab IS NOT INITIAL.


ls_keys-season_keys = CORRESPONDING #( cs_db_attr-
fsh_seasons_mat_tab ).
ENDIF.

IF cs_db_attr-additional_tab IS NOT INITIAL.


ls_keys-wtaddi_keys = CORRESPONDING #( cs_db_attr-additional_tab ).
ENDIF.

IF ls_keys IS NOT INITIAL.


read(
EXPORTING
is_keys = ls_keys
IMPORTING
es_tbl_db = DATA(ls_tbl_db)
).
ENDIF.

*--------------------------------------------------------------------*
* MARA DB Mapping
IF ls_tbl_db-t_mara IS NOT INITIAL.
get_components(
EXPORTING
is_data = ls_mara
IMPORTING
et_components = DATA(lt_components)
).

* SORT ls_tbl_db-t_mara BY matnr.


LOOP AT cs_db_attr-mara_tab ASSIGNING FIELD-SYMBOL(<ls_mara_attr>).
LOOP AT lt_components ASSIGNING FIELD-SYMBOL(<ls_components>).
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mara_attr> TO FIELD-SYMBOL(<lv_attr_val>).
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mara_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mara_attr_x>) WITH KEY matnr = <ls_mara_attr>-matnr. ""BINARY
SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mara_attr_x> TO FIELD-SYMBOL(<lv_attr_val_x>).
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mara INTO DATA(ls_mara_db) WITH KEY
matnr = <ls_mara_attr>-matnr. ""BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mara_db
TO FIELD-SYMBOL(<lv_attr_db_val>).
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
* MAW1 mapping
IF ls_tbl_db-t_maw1 IS NOT INITIAL.
CLEAR lt_components.
get_components(
EXPORTING
is_data = ls_maw1
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_maw1 BY matnr.


* SORT cs_db_attr-maw1_x_tab BY matnr. " Not sorted table type

LOOP AT cs_db_attr-maw1_tab ASSIGNING FIELD-SYMBOL(<ls_maw1_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_maw1_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-maw1_x_tab ASSIGNING FIELD-
SYMBOL(<ls_maw1_attr_x>) WITH KEY matnr = <ls_maw1_attr>-matnr. ""BINARY
SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_maw1_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_maw1 INTO DATA(ls_maw1_db) WITH KEY
matnr = <ls_maw1_attr>-matnr. ""BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_maw1_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
* MAKT mapping
IF ls_tbl_db-t_makt IS NOT INITIAL.
CLEAR lt_components.
get_components(
EXPORTING
is_data = ls_makt
IMPORTING
et_components = lt_components
).
* SORT ls_tbl_db-t_makt BY matnr spras.
LOOP AT cs_db_attr-makt_tab ASSIGNING FIELD-SYMBOL(<ls_makt_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_makt_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-makt_x_tab ASSIGNING FIELD-
SYMBOL(<ls_makt_attr_x>) WITH KEY matnr = <ls_makt_attr>-matnr

spras = <ls_makt_attr>-spras ."" BINARY SEARCH.


CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_makt_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_makt INTO DATA(ls_makt_db) WITH KEY
matnr = <ls_makt_attr>-matnr

spras = <ls_makt_attr>-spras. ""BINARY SEARCH.


CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_makt_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.

LOOP AT ls_tbl_db-t_makt INTO ls_makt_db." WITH KEY matnr =


<ls_makt_attr>-matnr
""BINARY SEARCH.
READ TABLE cs_db_attr-makt_tab TRANSPORTING NO FIELDS WITH KEY
matnr = ls_makt_db-matnr

spras = ls_makt_db-spras.
IF sy-subrc NE 0.
INSERT ls_makt_db INTO TABLE cs_db_attr-makt_tab.
ENDIF.
ENDLOOP.

ENDIF.

*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_marm IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_marm
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_marm BY matnr meinh.


LOOP AT cs_db_attr-marm_tab ASSIGNING FIELD-SYMBOL(<ls_marm_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_marm_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-marm_x_tab ASSIGNING FIELD-
SYMBOL(<ls_marm_attr_x>) WITH KEY matnr = <ls_marm_attr>-matnr

meinh = <ls_marm_attr>-meinh. ""BINARY SEARCH.


CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_marm_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_marm INTO DATA(ls_marm_db) WITH KEY
matnr = <ls_marm_attr>-matnr

meinh = <ls_marm_attr>-meinh . "" BINARY SEARCH.


CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_marm_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
* MEAN Mapping
IF ls_tbl_db-t_mean IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mean
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mean BY matnr meinh lfnum.


LOOP AT cs_db_attr-mean_tab ASSIGNING FIELD-SYMBOL(<ls_mean_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mean_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mean_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mean_attr_x>) WITH KEY matnr = <ls_mean_attr>-matnr

meinh = <ls_mean_attr>-meinh

ean11 = <ls_mean_attr>-ean11. ""BINARY SEARCH.


CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mean_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mean INTO DATA(ls_mean_db) WITH KEY
matnr = <ls_mean_attr>-matnr

meinh = <ls_mean_attr>-meinh

ean11 = <ls_mean_attr>-ean11. ""BINARY SEARCH.


CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mean_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.

*--------------------------------------------------------------------*
IF ls_tbl_db-t_marc IS NOT INITIAL.
CLEAR lt_components.
get_components(
EXPORTING
is_data = ls_marc
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_marc BY matnr werks.


LOOP AT cs_db_attr-marc_tab ASSIGNING FIELD-SYMBOL(<ls_marc_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_marc_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-marc_x_tab ASSIGNING FIELD-
SYMBOL(<ls_marc_attr_x>) WITH KEY matnr = <ls_marc_attr>-matnr

werks = <ls_marc_attr>-werks

BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_marc_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_marc INTO DATA(ls_marc_db) WITH KEY
matnr = <ls_marc_attr>-matnr

werks = <ls_marc_attr>-werks

BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_marc_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*
IF ls_tbl_db-t_mard IS NOT INITIAL.
CLEAR lt_components.
get_components(
EXPORTING
is_data = ls_mard
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mard BY matnr werks lgort.

LOOP AT cs_db_attr-mard_tab ASSIGNING FIELD-SYMBOL(<ls_mard_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mard_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mard_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mard_attr_x>) WITH KEY matnr = <ls_mard_attr>-matnr

werks = <ls_mard_attr>-werks

lgort = <ls_mard_attr>-lgort.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mard_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mard INTO DATA(ls_mard_db) WITH KEY
matnr = <ls_mard_attr>-matnr

werks = <ls_mard_attr>-werks

lgort = <ls_mard_attr>-lgort.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mard_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mbew IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mbew
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mbew BY matnr bwkey bwtar.

LOOP AT cs_db_attr-mbew_tab ASSIGNING FIELD-SYMBOL(<ls_mbew_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mbew_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mbew_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mbew_attr_x>) WITH KEY matnr = <ls_mbew_attr>-matnr

bwkey = <ls_mbew_attr>-bwkey

bwtar = <ls_mbew_attr>-bwtar .
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mbew_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mbew INTO DATA(ls_mbew_db) WITH KEY
matnr = <ls_mbew_attr>-matnr

bwkey = <ls_mbew_attr>-bwkey

bwtar = <ls_mbew_attr>-bwtar.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mbew_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mlgn IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mlgn
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mlgn BY matnr lgnum.

LOOP AT cs_db_attr-mlgn_tab ASSIGNING FIELD-SYMBOL(<ls_mlgn_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlgn_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mlgn_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mlgn_attr_x>) WITH KEY matnr = <ls_mlgn_attr>-matnr

lgnum = <ls_mlgn_attr>-lgnum .
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlgn_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mlgn INTO DATA(ls_mlgn_db) WITH KEY
matnr = <ls_mlgn_attr>-matnr

lgnum = <ls_mlgn_attr>-lgnum.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mlgn_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mlgt IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mlgt
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mlgt BY matnr lgnum lgtyp.

LOOP AT cs_db_attr-mlgt_tab ASSIGNING FIELD-SYMBOL(<ls_mlgt_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlgt_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mlgt_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mlgt_attr_x>) WITH KEY matnr = <ls_mlgt_attr>-matnr

lgnum = <ls_mlgt_attr>-lgnum

lgtyp = <ls_mlgt_attr>-lgtyp.
"" BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlgt_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mlgt INTO DATA(ls_mlgt_db) WITH KEY
matnr = <ls_mlgt_attr>-matnr

lgnum = <ls_mlgt_attr>-lgnum

lgtyp = <ls_mlgt_attr>-lgtyp.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mlgt_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.

*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mvke IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mvke
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mvke BY matnr vkorg vtweg.


LOOP AT cs_db_attr-mvke_tab ASSIGNING FIELD-SYMBOL(<ls_mvke_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mvke_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mvke_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mvke_attr_x>) WITH KEY matnr = <ls_mvke_attr>-matnr

vkorg = <ls_mvke_attr>-vkorg

vtweg = <ls_mvke_attr>-vtweg.
"" BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mvke_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mvke INTO DATA(ls_mvke_db) WITH KEY
matnr = <ls_mvke_attr>-matnr

vkorg = <ls_mvke_attr>-vkorg

vtweg = <ls_mvke_attr>-vtweg.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mvke_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.

*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mlan IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mlan_purchase
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mlan BY matnr aland taxim.

LOOP AT cs_db_attr-mlan_purchase_tab ASSIGNING FIELD-


SYMBOL(<ls_mlan_purchase_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlan_purchase_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mlan_purchase_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mlan_purchase_attr_x>) WITH KEY matnr =
<ls_mlan_purchase_attr>-matnr

aland = <ls_mlan_purchase_attr>-aland.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlan_purchase_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mlan INTO DATA(ls_mlan_purchase_db) WITH
KEY matnr = <ls_mlan_purchase_attr>-matnr

aland = <ls_mlan_purchase_attr>-aland

taxim = <ls_mlan_purchase_attr>-taxim.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
ls_mlan_purchase_db TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.

CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mlan_sales
IMPORTING
et_components = lt_components
).

LOOP AT cs_db_attr-mlan_sales_tab ASSIGNING FIELD-


SYMBOL(<ls_mlan_sales_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlan_sales_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mlan_sales_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mlan_sales_attr_x>) WITH KEY matnr = <ls_mlan_sales_attr>-
matnr

aland = <ls_mlan_sales_attr>-aland.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlan_sales_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mlan INTO DATA(ls_mlan_sales_db) WITH
KEY matnr = <ls_mlan_sales_attr>-matnr

aland = <ls_mlan_sales_attr>-aland.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
ls_mlan_sales_db TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_wlk2 IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_wlk2
IMPORTING
et_components = lt_components
).

* SORT cs_db_attr-wlk2_x_tab BY matnr vkorg vtweg werks.


* SORT ls_tbl_db-t_wlk2 BY matnr vkorg vtweg werks.

LOOP AT cs_db_attr-wlk2_tab ASSIGNING FIELD-SYMBOL(<ls_wlk2_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_wlk2_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-wlk2_x_tab ASSIGNING FIELD-
SYMBOL(<ls_wlk2_attr_x>) WITH KEY matnr = <ls_wlk2_attr>-matnr

vkorg = <ls_wlk2_attr>-vkorg

vtweg = <ls_wlk2_attr>-vtweg

werks = <ls_wlk2_attr>-werks.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_wlk2_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_wlk2 INTO DATA(ls_wlk2_db) WITH KEY
matnr = <ls_wlk2_attr>-matnr

vkorg = <ls_wlk2_attr>-vkorg

vtweg = <ls_wlk2_attr>-vtweg

werks = <ls_wlk2_attr>-werks.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_wlk2_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mamt IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mamt
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mamt BY matnr spras meinh mtxid lfdnr.


* SORT cs_db_attr-mamt_x_tab BY matnr spras meinh mtxid lfdnr.

LOOP AT cs_db_attr-mamt_x_tab ASSIGNING FIELD-


SYMBOL(<ls_mamt_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mamt_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mamt_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mamt_attr_x>) WITH KEY matnr = <ls_mamt_attr>-matnr

spras = <ls_mamt_attr>-spras

meinh = <ls_mamt_attr>-meinh

mtxid = <ls_mamt_attr>-mtxid

lfdnr = <ls_mamt_attr>-lfdnr.
"" BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mamt_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mamt INTO DATA(ls_mamt_db) WITH KEY
matnr = <ls_mamt_attr>-matnr

spras = <ls_mamt_attr>-spras

meinh = <ls_mamt_attr>-meinh

mtxid = <ls_mamt_attr>-mtxid

lfdnr = <ls_mamt_attr>-lfdnr.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mamt_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.

*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_mlea IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_mlea
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_mlea BY matnr meinh lifnr lfnum.


* SORT cs_db_attr-mlea_x_tab BY matnr meinh lifnr lfnum.

LOOP AT cs_db_attr-mlea_tab ASSIGNING FIELD-SYMBOL(<ls_mlea_attr>).


LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlea_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-mlea_x_tab ASSIGNING FIELD-
SYMBOL(<ls_mlea_attr_x>) WITH KEY matnr = <ls_mlea_attr>-matnr

meinh = <ls_mlea_attr>-meinh

lifnr = <ls_mlea_attr>-lifnr
lfnum = <ls_mlea_attr>-lfnum .
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_mlea_attr_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_mlea INTO DATA(ls_mlea_db) WITH KEY
matnr = <ls_mlea_attr>-matnr

meinh = <ls_mlea_attr>-meinh

lifnr = <ls_mlea_attr>-lifnr

lfnum = <ls_mlea_attr>-lfnum .
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE ls_mlea_db
TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
IF ls_tbl_db-t_fsh_seasons IS NOT INITIAL.
CLEAR lt_components.

get_components(
EXPORTING
is_data = ls_fsh_seasons_mat
IMPORTING
et_components = lt_components
).

* SORT ls_tbl_db-t_fsh_seasons BY matnr fsh_sgt fsh_season


fsh_season_year fsh_collection fsh_theme.
* SORT cs_db_attr-fsh_seasons_mat_x_tab BY matnr fsh_sgt fsh_season
fsh_season_year fsh_collection fsh_theme.

LOOP AT cs_db_attr-fsh_seasons_mat_tab ASSIGNING FIELD-


SYMBOL(<ls_fsh_seasons_mat_attr>).
LOOP AT lt_components ASSIGNING <ls_components>.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_fsh_seasons_mat_attr> TO <lv_attr_val>.
CHECK <lv_attr_val> IS ASSIGNED.
READ TABLE cs_db_attr-fsh_seasons_mat_x_tab ASSIGNING FIELD-
SYMBOL(<ls_fsh_seasons_mat_x>) WITH KEY matnr =
<ls_fsh_seasons_mat_attr>-matnr
fsh_sgt = <ls_fsh_seasons_mat_attr>-fsh_sgt

fsh_season = <ls_fsh_seasons_mat_attr>-fsh_season

fsh_season_year = <ls_fsh_seasons_mat_attr>-fsh_season_year

fsh_collection = <ls_fsh_seasons_mat_attr>-fsh_collection

fsh_theme = <ls_fsh_seasons_mat_attr>-fsh_theme .
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
<ls_fsh_seasons_mat_x> TO <lv_attr_val_x>.
CHECK <lv_attr_val_x> IS ASSIGNED.
CHECK <lv_attr_val_x> = abap_false. "AND <lv_attr_val> IS
INITIAL.
READ TABLE ls_tbl_db-t_fsh_seasons INTO DATA(ls_fsh_seasons_db)
WITH KEY matnr = <ls_fsh_seasons_mat_attr>-matnr

fsh_sgt = <ls_fsh_seasons_mat_attr>-fsh_sgt

fsh_season = <ls_fsh_seasons_mat_attr>-fsh_season

fsh_season_year = <ls_fsh_seasons_mat_attr>-fsh_season_year

fsh_collection = <ls_fsh_seasons_mat_attr>-fsh_collection

fsh_theme = <ls_fsh_seasons_mat_attr>-fsh_theme.
*
BINARY SEARCH.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_components>-name OF STRUCTURE
ls_fsh_seasons_db TO <lv_attr_db_val>.
<lv_attr_val> = <lv_attr_db_val>.
ENDLOOP.
ENDLOOP.
ENDIF.
*--------------------------------------------------------------------*

ENDMETHOD.

METHOD find_cr_by_gtin.

DATA :" i_model TYPE usmd_model,


if_former_versions TYPE usmd_flg.
DATA : "lt_log_phys_name_new TYPE t_log_phys_name_type,
* ls_log_phys_name_new LIKE LINE OF lt_log_phys_name_new,
lt_log_phys_name TYPE
if_usmd_model_gen_adapter=>t_log_phys_name.
DATA:
lt_message TYPE usmd_t_message,
ls_log_phys_name TYPE
if_usmd_model_gen_adapter=>s_log_phys_name,
lo_model_gen_adapter TYPE REF TO if_usmd_model_gen_adapter,
lf_sid TYPE usmd_flg.

DATA: lt_range_name TYPE RANGE OF usmd1213-usmd_value.


DATA: ls_range_name LIKE LINE OF lt_range_name.
DATA : lr_mean_gtin TYPE REF TO data.
DATA : lr_mara_mapping TYPE REF TO data.

FIELD-SYMBOLS : <ft_mean_gtin> TYPE ANY TABLE.


FIELD-SYMBOLS: <ft_mara_mapping> TYPE ANY TABLE.

TYPES : BEGIN OF ty_mean_gtin,


mara TYPE usmd_tech_key,
ean11 TYPE ean11,
END OF ty_mean_gtin.

TYPES : BEGIN OF ty_mara_mapping,


mara TYPE usmd_tech_key,
armara TYPE /ugi4/matnr,
END OF ty_mara_mapping.

DATA : "lv_table_prop TYPE tabname16,


lv_table1 TYPE tabname16,
lv_table2 TYPE tabname16.

DATA : lt_mara_mapping TYPE TABLE OF ty_mara_mapping,


ls_mara_mapping TYPE ty_mara_mapping.
DATA : "ls_cr_details TYPE ty_cr_details,
lt_cr_details TYPE TABLE OF ty_cr_details.

DATA: lt_mean_gtin TYPE TABLE OF ty_mean_gtin,


ls_mean_gtin TYPE ty_mean_gtin.

CALL METHOD cl_usmd_adapter_provider=>get_model_generation_adapter


EXPORTING
i_usmd_model = 'AR'
IMPORTING
eo_model_gen_adapter = lo_model_gen_adapter
et_message = lt_message.

LOOP AT lt_message TRANSPORTING NO FIELDS


WHERE msgty CA 'AEX' ##NEEDED.
ENDLOOP.
IF sy-subrc IS INITIAL.
* Need to raise error Message.
et_messages = lt_message.
RETURN.
ENDIF.
CLEAR lt_message.
CALL METHOD lo_model_gen_adapter->get_generated_objects
EXPORTING
if_former_versions = if_former_versions
if_sid_tab = lf_sid
IMPORTING
et_message = lt_message
et_log_phys_name = lt_log_phys_name.

LOOP AT lt_message TRANSPORTING NO FIELDS


WHERE msgty CA 'AEX' ##NEEDED.
ENDLOOP.
IF sy-subrc IS INITIAL.
* Need to raise error Message.
et_messages = lt_message.
RETURN.
ENDIF.

READ TABLE lt_log_phys_name INTO ls_log_phys_name WITH KEY sub_kind =


'O' entity = 'MARA' entity_cont = 'MEAN_GTIN'.
CHECK sy-subrc EQ 0.
* DATA(lv_mean_gtin) = ls_log_phys_name-phys_name.
lv_table1 = ls_log_phys_name-phys_name.

CLEAR ls_log_phys_name.

READ TABLE lt_log_phys_name INTO ls_log_phys_name WITH KEY sub_kind =


'B' entity = 'MARA'.
IF sy-subrc EQ 0.
* DATA(lv_mapping_mara) = ls_log_phys_name-phys_name.
lv_table2 = ls_log_phys_name-phys_name.
ENDIF.
IF lv_table1 IS NOT INITIAL.
TRY.
CALL METHOD cl_abap_dyn_prg=>check_table_name_str
EXPORTING
val = lv_table1
packages = ' '
RECEIVING
val_str = lv_table1.

CATCH cx_abap_not_a_table .
RETURN.
CATCH cx_abap_not_in_package .
RETURN.
ENDTRY.
DATA(lv_mean_gtin) = lv_table1.
ENDIF.

IF lv_table2 IS NOT INITIAL.


TRY.
CALL METHOD cl_abap_dyn_prg=>check_table_name_str
EXPORTING
val = lv_table2
packages = ' '
RECEIVING
val_str = lv_table2.

CATCH cx_abap_not_a_table .
RETURN.
CATCH cx_abap_not_in_package .
RETURN.
ENDTRY.
DATA(lv_mapping_mara) = lv_table2.
ENDIF.

CREATE DATA lr_mean_gtin TYPE TABLE OF (lv_mean_gtin).


ASSIGN lr_mean_gtin->* TO <ft_mean_gtin>.

CREATE DATA lr_mara_mapping TYPE TABLE OF (lv_mapping_mara).


ASSIGN lr_mara_mapping->* TO <ft_mara_mapping>.

TRY.
SELECT usmdkarmara AS mara /1md/arean11m AS ean11 FROM
(lv_mean_gtin) INTO TABLE
lt_mean_gtin WHERE /1md/arean11m IN im_sel_range.
IF sy-subrc EQ 0.
IF NOT lt_mean_gtin IS INITIAL.
SELECT usmdkarmara AS mara /1md/armara AS armara FROM
(lv_mapping_mara) INTO TABLE lt_mara_mapping FOR ALL ENTRIES IN
lt_mean_gtin WHERE usmdkarmara = lt_mean_gtin-mara.
ENDIF.

LOOP AT lt_mean_gtin INTO ls_mean_gtin.


ls_range_name-low = ls_mean_gtin-mara.
ls_range_name-sign = 'I'.
ls_range_name-option = 'EQ'.
INSERT ls_range_name INTO TABLE lt_range_name.
ENDLOOP.

IF lt_range_name IS NOT INITIAL.


DATA : lv_value TYPE usmd_tech_key.
SELECT b~usmd_crequest, b~usmd_value ,c~usmd_creq_status, d~txtmi
FROM usmd1213 AS b
INNER JOIN usmd120c AS c ON c~usmd_crequest = b~usmd_crequest
INNER JOIN usmd130t AS d ON d~usmd_creq_status =
c~usmd_creq_status "#EC CI_BUFFJOIN
INTO CORRESPONDING FIELDS OF TABLE @lt_cr_details
##TOO_MANY_ITAB_FIELDS
WHERE b~usmd_value IN @lt_range_name AND d~langu = @sy-langu.
IF sy-subrc EQ 0.
LOOP AT lt_cr_details ASSIGNING FIELD-SYMBOL(<fs_cr_details>).
SHIFT <fs_cr_details>-usmd_value LEFT DELETING LEADING space.
lv_value = <fs_cr_details>-usmd_value.
READ TABLE lt_mara_mapping INTO ls_mara_mapping WITH KEY mara =
lv_value.
IF sy-subrc EQ 0.
<fs_cr_details>-armara = ls_mara_mapping-armara.
ENDIF.
READ TABLE lt_mean_gtin INTO ls_mean_gtin WITH KEY mara =
lv_value.
IF sy-subrc EQ 0.
<fs_cr_details>-ean11 = ls_mean_gtin-ean11.
ENDIF.
* WRITE :/ <fs_cr_details>-usmd_crequest,<fs_cr_details>-
armara,<fs_cr_details>-usmd_creq_status,<fs_cr_details>-txtmi.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.

CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER.

ENDTRY.

et_cr_details = lt_cr_details.

ENDMETHOD.

METHOD find_cr_by_idnlf.
TYPES : BEGIN OF ty_mean_gtin,
mara TYPE usmd_tech_key,
ean11 TYPE ean11,
lartn TYPE idnlf,
END OF ty_mean_gtin.

TYPES : BEGIN OF ty_mara_mapping,


mara TYPE usmd_tech_key,
armara TYPE /ugi4/matnr,
END OF ty_mara_mapping.

DATA: lt_mean_gtin TYPE TABLE OF ty_mean_gtin,


ls_mean_gtin TYPE ty_mean_gtin.

DATA : lt_mara_mapping TYPE TABLE OF ty_mara_mapping,


ls_mara_mapping TYPE ty_mara_mapping.

DATA : "ls_cr_details TYPE ty_cr_details,


lt_cr_details TYPE TABLE OF ty_cr_details.

DATA : "i_model TYPE usmd_model VALUE 'AR',


if_former_versions TYPE usmd_flg.

DATA :
* lt_log_phys_name_new TYPE
* t_log_phys_name_type,
* ls_log_phys_name_new LIKE LINE OF lt_log_phys_name_new,
lt_log_phys_name TYPE
if_usmd_model_gen_adapter=>t_log_phys_name.

DATA:
lt_message TYPE usmd_t_message,
ls_log_phys_name TYPE
if_usmd_model_gen_adapter=>s_log_phys_name,
lo_model_gen_adapter TYPE REF TO if_usmd_model_gen_adapter,
lf_sid TYPE usmd_flg.
DATA : "lv_table_prop TYPE tabname16,
lv_table1 TYPE tabname16,
lv_table2 TYPE tabname16.

DATA : lr_mean_gtin TYPE REF TO data.


DATA : lr_mara_mapping TYPE REF TO data.
FIELD-SYMBOLS : <ft_mean_gtin> TYPE ANY TABLE.
FIELD-SYMBOLS: <ft_mara_mapping> TYPE ANY TABLE.

DATA: lt_range_name TYPE RANGE OF usmd1213-usmd_value.


DATA: ls_range_name LIKE LINE OF lt_range_name.

CALL METHOD cl_usmd_adapter_provider=>get_model_generation_adapter


EXPORTING
i_usmd_model = 'AR'
IMPORTING
eo_model_gen_adapter = lo_model_gen_adapter
et_message = lt_message.

LOOP AT lt_message TRANSPORTING NO FIELDS


WHERE msgty CA 'AEX' ##NEEDED.
ENDLOOP.
IF sy-subrc IS INITIAL.
* Need to raise error Message.
et_messages = lt_message.
RETURN.
ENDIF.

CLEAR lt_message.
CALL METHOD lo_model_gen_adapter->get_generated_objects
EXPORTING
if_former_versions = if_former_versions
if_sid_tab = lf_sid
IMPORTING
et_message = lt_message
et_log_phys_name = lt_log_phys_name.

LOOP AT lt_message TRANSPORTING NO FIELDS


WHERE msgty CA 'AEX' ##NEEDED.
ENDLOOP.
IF sy-subrc IS INITIAL.
* Need to raise error Message.
et_messages = lt_message.
RETURN.
ENDIF.
* lv_table1 = ls_scope-rmp_table_sta.

READ TABLE lt_log_phys_name INTO ls_log_phys_name WITH KEY sub_kind =


'O' entity = 'MARA' entity_cont = 'MEAN_GTIN'.
CHECK sy-subrc EQ 0.
* DATA(lv_mean_gtin) = ls_log_phys_name-phys_name.
lv_table1 = ls_log_phys_name-phys_name.

CLEAR ls_log_phys_name.

READ TABLE lt_log_phys_name INTO ls_log_phys_name WITH KEY sub_kind =


'B' entity = 'MARA'.
IF sy-subrc EQ 0.
* DATA(lv_mapping_mara) = ls_log_phys_name-phys_name.
lv_table2 = ls_log_phys_name-phys_name.

ENDIF.

IF lv_table1 IS NOT INITIAL.


TRY.
CALL METHOD cl_abap_dyn_prg=>check_table_name_str
EXPORTING
val = lv_table1
packages = ' '
RECEIVING
val_str = lv_table1.

CATCH cx_abap_not_a_table .
RETURN.
CATCH cx_abap_not_in_package .
RETURN.
ENDTRY.
DATA(lv_mean_gtin) = lv_table1.
ENDIF.

IF lv_table2 IS NOT INITIAL.


TRY.
CALL METHOD cl_abap_dyn_prg=>check_table_name_str
EXPORTING
val = lv_table2
packages = ' '
RECEIVING
val_str = lv_table2.

CATCH cx_abap_not_a_table .
RETURN.
CATCH cx_abap_not_in_package .
RETURN.
ENDTRY.
DATA(lv_mapping_mara) = lv_table2.
ENDIF.
CREATE DATA lr_mean_gtin TYPE TABLE OF (lv_mean_gtin).
ASSIGN lr_mean_gtin->* TO <ft_mean_gtin>.

CREATE DATA lr_mara_mapping TYPE TABLE OF (lv_mapping_mara).


ASSIGN lr_mara_mapping->* TO <ft_mara_mapping>.

TRY.
SELECT usmdkarmara AS mara /1md/arean11m AS ean11 /1md/arlartn
AS idnlf FROM (lv_mean_gtin) INTO TABLE
lt_mean_gtin WHERE /1md/arlartn IN im_idnlf_sel.
IF sy-subrc EQ 0.
IF NOT lt_mean_gtin IS INITIAL.
SELECT usmdkarmara AS mara /1md/armara AS armara FROM
(lv_mapping_mara) INTO TABLE lt_mara_mapping FOR ALL ENTRIES IN
lt_mean_gtin WHERE usmdkarmara = lt_mean_gtin-mara.
ENDIF.

LOOP AT lt_mean_gtin INTO ls_mean_gtin.


ls_range_name-low = ls_mean_gtin-mara.
ls_range_name-sign = 'I'.
ls_range_name-option = 'EQ'.
INSERT ls_range_name INTO TABLE lt_range_name.
ENDLOOP.

DATA : lv_value TYPE usmd_tech_key.

SELECT b~usmd_crequest, b~usmd_value ,c~usmd_creq_status,


d~txtmi FROM usmd1213 AS b
INNER JOIN usmd120c AS c ON c~usmd_crequest =
b~usmd_crequest
INNER JOIN usmd130t AS d ON d~usmd_creq_status =
c~usmd_creq_status "#EC CI_BUFFJOIN
INTO CORRESPONDING FIELDS OF TABLE @lt_cr_details
##TOO_MANY_ITAB_FIELDS
WHERE b~usmd_value IN @lt_range_name AND d~langu = @sy-
langu.

IF sy-subrc EQ 0.
LOOP AT lt_cr_details ASSIGNING FIELD-
SYMBOL(<fs_cr_details>).
SHIFT <fs_cr_details>-usmd_value LEFT DELETING LEADING
space.
lv_value = <fs_cr_details>-usmd_value.
READ TABLE lt_mara_mapping INTO ls_mara_mapping WITH KEY
mara = lv_value.
IF sy-subrc EQ 0.
<fs_cr_details>-armara = ls_mara_mapping-armara.
ENDIF.
READ TABLE lt_mean_gtin INTO ls_mean_gtin WITH KEY mara =
lv_value.
IF sy-subrc EQ 0.
<fs_cr_details>-lartn = ls_mean_gtin-lartn.
ENDIF.
* WRITE :/ <fs_cr_details>-usmd_crequest,<fs_cr_details>-
armara,<fs_cr_details>-usmd_creq_status,<fs_cr_details>-txtmi.
ENDLOOP.
ENDIF.
ENDIF.
CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER.
ENDTRY.
et_cr_details = lt_cr_details.

ENDMETHOD.

METHOD find_cr_by_matnr.
TYPES:
t_log_phys_name_type TYPE STANDARD TABLE OF s_log_phys_name_type
WITH DEFAULT KEY ##NEEDED.

TYPES : BEGIN OF ty_mara_check,


mara TYPE usmd_tech_key,
matnr TYPE matnr,
END OF ty_mara_check.

TYPES : BEGIN OF ty_mara_mapping,


mara TYPE usmd_tech_key,
armara TYPE /ugi4/matnr,
END OF ty_mara_mapping.

DATA: lt_mara_check TYPE TABLE OF ty_mara_check,


ls_mara_check TYPE ty_mara_check.

DATA : "i_model TYPE usmd_model,


if_former_versions TYPE usmd_flg.

DATA : lt_mara_mapping TYPE TABLE OF ty_mara_mapping,


ls_mara_mapping TYPE ty_mara_mapping.
DATA : "ls_cr_details TYPE ty_cr_details,
lt_cr_details TYPE TABLE OF ty_cr_details.

DATA :
* lt_log_phys_name_new TYPE
* t_log_phys_name_type,
* ls_log_phys_name_new LIKE LINE OF lt_log_phys_name_new,
lt_log_phys_name TYPE
if_usmd_model_gen_adapter=>t_log_phys_name.

DATA:
lt_message TYPE usmd_t_message,
ls_log_phys_name TYPE
if_usmd_model_gen_adapter=>s_log_phys_name,

lo_model_gen_adapter TYPE REF TO if_usmd_model_gen_adapter,


lf_sid TYPE usmd_flg.

DATA : "lv_table_prop TYPE tabname16,


lv_table1 TYPE tabname16,
lv_table2 TYPE tabname16.

DATA : lr_mara_check TYPE REF TO data.


DATA : lr_mara_mapping TYPE REF TO data.
FIELD-SYMBOLS : <ft_mara_check> TYPE ANY TABLE.
FIELD-SYMBOLS: <ft_mara_mapping> TYPE ANY TABLE.

DATA: lt_range_name TYPE RANGE OF usmd1213-usmd_value.


DATA: ls_range_name LIKE LINE OF lt_range_name.

CALL METHOD cl_usmd_adapter_provider=>get_model_generation_adapter


EXPORTING
i_usmd_model = 'AR'
IMPORTING
eo_model_gen_adapter = lo_model_gen_adapter
et_message = lt_message.

LOOP AT lt_message TRANSPORTING NO FIELDS


WHERE msgty CA 'AEX' ##NEEDED.
ENDLOOP.
IF sy-subrc IS INITIAL.
* Need to raise error Message.
et_messages = lt_message.
RETURN.
ENDIF.

CLEAR lt_message.
CALL METHOD lo_model_gen_adapter->get_generated_objects
EXPORTING
if_former_versions = if_former_versions
if_sid_tab = lf_sid
IMPORTING
et_message = lt_message
et_log_phys_name = lt_log_phys_name.

LOOP AT lt_message TRANSPORTING NO FIELDS


WHERE msgty CA 'AEX' ##NEEDED.
ENDLOOP.
IF sy-subrc IS INITIAL.
* Need to raise error Message.
et_messages = lt_message.
RETURN.
ENDIF.
READ TABLE lt_log_phys_name INTO ls_log_phys_name WITH KEY sub_kind =
'C' entity = 'MARA'.
CHECK sy-subrc EQ 0.
* DATA(lv_mara_check) = ls_log_phys_name-phys_name.
lv_table1 = ls_log_phys_name-phys_name.
CLEAR ls_log_phys_name.

READ TABLE lt_log_phys_name INTO ls_log_phys_name WITH KEY sub_kind =


'B' entity = 'MARA'.
IF sy-subrc EQ 0.
* DATA(lv_mapping_mara) = ls_log_phys_name-phys_name.
lv_table2 = ls_log_phys_name-phys_name.
ENDIF.

IF lv_table1 IS NOT INITIAL.


TRY.
CALL METHOD cl_abap_dyn_prg=>check_table_name_str
EXPORTING
val = lv_table1
packages = ' '
RECEIVING
val_str = lv_table1.

CATCH cx_abap_not_a_table .
RETURN.
CATCH cx_abap_not_in_package .
RETURN.
ENDTRY.
DATA(lv_mara_check) = lv_table1.
ENDIF.

IF lv_table2 IS NOT INITIAL.


TRY.
CALL METHOD cl_abap_dyn_prg=>check_table_name_str
EXPORTING
val = lv_table2
packages = ' '
RECEIVING
val_str = lv_table2.

CATCH cx_abap_not_a_table .
RETURN.
CATCH cx_abap_not_in_package .
RETURN.
ENDTRY.
DATA(lv_mapping_mara) = lv_table2.
ENDIF.
CREATE DATA lr_mara_check TYPE TABLE OF (lv_mara_check).
ASSIGN lr_mara_check->* TO <ft_mara_check>.

CREATE DATA lr_mara_mapping TYPE TABLE OF (lv_mapping_mara).


ASSIGN lr_mara_mapping->* TO <ft_mara_mapping>.
TRY.
SELECT usmdkarmara AS mara /1md/armara AS matnr FROM
(lv_mara_check) INTO TABLE
lt_mara_check WHERE /1md/armara IN im_matnr_sel.
IF sy-subrc EQ 0.
IF NOT lt_mara_check IS INITIAL.
SELECT usmdkarmara AS mara /1md/armara AS armara FROM
(lv_mapping_mara) INTO TABLE lt_mara_mapping FOR ALL ENTRIES IN
lt_mara_check WHERE usmdkarmara = lt_mara_check-mara.
ENDIF.

LOOP AT lt_mara_check INTO ls_mara_check.


ls_range_name-low = ls_mara_check-mara.
ls_range_name-sign = 'I'.
ls_range_name-option = 'EQ'.
INSERT ls_range_name INTO TABLE lt_range_name.
ENDLOOP.

IF lt_range_name IS NOT INITIAL.


DATA : lv_value TYPE usmd_tech_key.
SELECT b~usmd_crequest, b~usmd_value, b~usmd_seqnr AS seqnr
,c~usmd_creq_status, d~txtmi FROM usmd1213 AS b
INNER JOIN usmd120c AS c ON c~usmd_crequest =
b~usmd_crequest
INNER JOIN usmd130t AS d ON d~usmd_creq_status =
c~usmd_creq_status "#EC CI_BUFFJOIN
INTO CORRESPONDING FIELDS OF TABLE @lt_cr_details
##TOO_MANY_ITAB_FIELDS
WHERE b~usmd_value IN @lt_range_name AND d~langu = @sy-
langu.
IF sy-subrc EQ 0.
SORT lt_cr_details BY usmd_value usmd_crequest DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_cr_details COMPARING
usmd_value seqnr.

LOOP AT lt_cr_details ASSIGNING FIELD-


SYMBOL(<fs_cr_details>).
SHIFT <fs_cr_details>-usmd_value LEFT DELETING LEADING
space.
lv_value = <fs_cr_details>-usmd_value.
READ TABLE lt_mara_mapping INTO ls_mara_mapping WITH KEY
mara = lv_value.
IF sy-subrc EQ 0.
<fs_cr_details>-armara = ls_mara_mapping-armara.
ENDIF.
* WRITE :/ <fs_cr_details>-usmd_crequest,<fs_cr_details>-
armara,<fs_cr_details>-usmd_creq_status,<fs_cr_details>-txtmi.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.

CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER.

ENDTRY.
ENDMETHOD.

METHOD generate_variants.
DATA: ls_matnr LIKE LINE OF it_matnr,
lv_var TYPE numc3,
* lt_mass_data TYPE /ugirmp/mass_tt,
lt_charval TYPE /ugi4/ar_tt_charval,
ls_charval LIKE LINE OF lt_charval,
lt_charval_tmp TYPE /ugi4/ar_tt_charval,
lt_charvalt TYPE /ugi4/ar_tt_charvalt,
lt_features TYPE /ugi4/merkmale_t,
ls_features LIKE LINE OF lt_features,
ls_charvalt LIKE LINE OF lt_charvalt,
ls_variant_stag TYPE LINE OF /ugi4/cmd_rfm_t_variants,
lt_charvalt_tmp LIKE lt_charvalt. "",
* ls_variant_stag TYPE /ugirmp/variant,
* lt_variants TYPE TABLE OF /ugirmp/variant,
* ls_mass_data_new LIKE LINE OF lt_mass_data,
* ls_mass_data_res LIKE LINE OF lt_mass_data,
* ls_matnr1 LIKE LINE OF it_matnr,
* ls_delta LIKE LINE OF
/ugirmp/cl_mdg_rfm_mass_access=>gt_delta_chg,
* ls_mass_data LIKE LINE OF lt_mass_data.

TYPES: BEGIN OF ty_variants_all,


var_comb TYPE string,
char_key TYPE string,
char_key_text TYPE string,
atinn1 TYPE atinn,
atinn2 TYPE atinn,
atinn3 TYPE atinn,
atinn4 TYPE atinn,
atinn5 TYPE atinn,
atinn6 TYPE atinn,
atinn7 TYPE atinn,
atinn8 TYPE atinn,
atinn9 TYPE atinn,
atwrt1 TYPE atwrt,
atwrt2 TYPE atwrt,
atwrt3 TYPE atwrt,
atwrt4 TYPE atwrt,
atwrt5 TYPE atwrt,
atwrt6 TYPE atwrt,
atwrt7 TYPE atwrt,
atwrt8 TYPE atwrt,
atwrt9 TYPE atwrt,
srtpo1 TYPE wrf_sortpos,
srtpo2 TYPE wrf_sortpos,
srtpo3 TYPE wrf_sortpos,
srtpo4 TYPE wrf_sortpos,
srtpo5 TYPE wrf_sortpos,
srtpo6 TYPE wrf_sortpos,
srtpo7 TYPE wrf_sortpos,
srtpo8 TYPE wrf_sortpos,
srtpo9 TYPE wrf_sortpos,
chk_box TYPE xfeld,
var_num TYPE satnr,
error_restr TYPE xfeld,
END OF ty_variants_all .

DATA:
it_temp TYPE STANDARD TABLE OF ty_variants_all,
it_temp1 TYPE STANDARD TABLE OF ty_variants_all,
it_temp_restr TYPE STANDARD TABLE OF ty_variants_all,
it_temp_restr1 TYPE STANDARD TABLE OF ty_variants_all,
wa_temp1 TYPE ty_variants_all,
wa_temp TYPE ty_variants_all,
lv_temp_var_comb TYPE string,

lv_temp_char_key TYPE string,


lv_temp_char_key_text TYPE string,
lv_counter TYPE c LENGTH 1 VALUE '1',
lv_char_num TYPE string.

DATA: lv_charp TYPE klasse_d.

FIELD-SYMBOLS: "<ft_data> TYPE STANDARD TABLE,


<ft_res_data> TYPE STANDARD TABLE,
* <ft_data_var> TYPE STANDARD TABLE,
<lv_matnr> TYPE any,
* <lv_attyp> TYPE any,
* <lv_charp> TYPE any,
<lv_class> TYPE any,
<lv_class_typ> TYPE any,
<lv_matkl> TYPE any,
<lv_char_val> TYPE any.
* <fs_data> TYPE any.

ASSIGN it_restrict TO <ft_res_data>.

LOOP AT it_matnr INTO ls_matnr.


ASSIGN COMPONENT 'MARA' OF STRUCTURE ls_matnr TO <lv_matnr>.
* REFRESH: it_temp.
CLEAR: it_temp.
ASSIGN COMPONENT 'CLASS_VAR' OF STRUCTURE ls_matnr TO <lv_class>.
ASSIGN COMPONENT 'KLART_VAR' OF STRUCTURE ls_matnr TO
<lv_class_typ>.
ASSIGN COMPONENT 'MATKL' OF STRUCTURE ls_matnr TO <lv_matkl>.
IF /ugi4/mdg_bs_ecc_ar_services=>is_new_generic_article_storage( )
EQ abap_true.
lv_charp = <lv_class>.
ENDIF.

CALL METHOD /ugi4/cl_ar_article_maint_api=>get_variant_char


EXPORTING
iv_charp = lv_charp
* iv_matkl = <lv_matkl>
iv_klart = <lv_class_typ>
iv_char_type = 'V'
IMPORTING
et_charval = lt_charval
et_charvalt = lt_charvalt
et_features = lt_features.

LOOP AT lt_features INTO ls_features.


lt_charvalt_tmp = lt_charvalt.
DELETE lt_charvalt_tmp WHERE atinn NE ls_features-imerk.
lt_charval_tmp = lt_charval.
DELETE lt_charval_tmp WHERE atinn NE ls_features-imerk.
* READ TABLE lt_charvalt_tmp INTO ls_charvalt INDEX lv_var

IF lt_charvalt_tmp IS NOT INITIAL.

IF it_temp IS INITIAL.

LOOP AT lt_charvalt_tmp INTO ls_charvalt WHERE spras = sy-


langu AND
atinn =
ls_features-imerk.

READ TABLE lt_charval_tmp INTO ls_charval WITH KEY atinn =


ls_charvalt-atinn

atwrt = ls_charvalt-atwrt.

IF <ft_res_data> IS ASSIGNED.
READ TABLE <ft_res_data> TRANSPORTING NO FIELDS WITH KEY
('MATNR') = <lv_matnr> ('ATWRT') = ls_charvalt-atwrt

('ATINN') = ls_charvalt-atinn.
IF sy-subrc EQ 0.
wa_temp-var_comb = ls_features-atnam.
wa_temp-char_key = ls_charvalt-atwrt.
wa_temp-char_key_text = ls_charvalt-atwtb.
wa_temp-atwrt1 = ls_charvalt-atwrt.""atwtb.
wa_temp-srtpo1 = ls_charval-srtpo.
wa_temp-atinn1 = ls_charval-atinn.
APPEND wa_temp TO it_temp.
APPEND wa_temp TO it_temp_restr.
* CLEAR wa_temp.
ELSE.
READ TABLE <ft_res_data> TRANSPORTING NO FIELDS WITH
KEY ('MATNR') = <lv_matnr> .
IF sy-subrc NE 0.
wa_temp-var_comb = ls_features-atnam.
wa_temp-char_key = ls_charvalt-atwrt.
wa_temp-char_key_text = ls_charvalt-atwtb.
wa_temp-atwrt1 = ls_charvalt-atwrt.""atwtb.
wa_temp-srtpo1 = ls_charval-srtpo.
wa_temp-atinn1 = ls_charval-atinn.

APPEND wa_temp TO it_temp.


ENDIF.
ENDIF.
ELSE.
wa_temp-var_comb = ls_features-atnam.
wa_temp-char_key = ls_charvalt-atwrt.
wa_temp-char_key_text = ls_charvalt-atwtb.
wa_temp-atwrt1 = ls_charvalt-atwrt.""atwtb.
wa_temp-srtpo1 = ls_charval-srtpo.
wa_temp-atinn1 = ls_charval-atinn.
APPEND wa_temp TO it_temp.
* CLEAR wa_temp.
* APPEND wa_temp TO it_temp_restr.
ENDIF.
ENDLOOP.
ELSE.
lv_counter = lv_counter + 1.
LOOP AT it_temp INTO wa_temp.
LOOP AT lt_charvalt_tmp INTO ls_charvalt WHERE spras = sy-
langu AND
atinn =
ls_features-imerk.
READ TABLE lt_charval_tmp INTO ls_charval WITH KEY atinn
= ls_charvalt-atinn

atwrt = ls_charvalt-atwrt.

CONCATENATE wa_temp-var_comb '/' ls_features-atnam INTO


lv_temp_var_comb.
* CONCATENATE wa_temp-char_key ls_mdgrfm_cfg-
charspliter ls_charvalt-atwrt INTO lv_temp_char_key.
* CONCATENATE wa_temp-char_key_text ls_mdgrfm_cfg-
charspliter ls_charvalt-atwtb INTO lv_temp_char_key_text.

UNASSIGN <lv_char_val>. CLEAR lv_char_num.


CONCATENATE 'ATWRT' lv_counter INTO lv_char_num.
ASSIGN COMPONENT lv_char_num OF STRUCTURE wa_temp TO
<lv_char_val>.
IF <lv_char_val> IS ASSIGNED.
<lv_char_val> = ls_charvalt-atwrt.""atwtb.
ENDIF.
UNASSIGN <lv_char_val>. CLEAR lv_char_num.
CONCATENATE 'SRTPO' lv_counter INTO lv_char_num.
ASSIGN COMPONENT lv_char_num OF STRUCTURE wa_temp TO
<lv_char_val>.
IF <lv_char_val> IS ASSIGNED.
<lv_char_val> = ls_charval-srtpo.
ENDIF.

UNASSIGN <lv_char_val>. CLEAR lv_char_num.


CONCATENATE 'ATINN' lv_counter INTO lv_char_num.
ASSIGN COMPONENT lv_char_num OF STRUCTURE wa_temp TO
<lv_char_val>.
IF <lv_char_val> IS ASSIGNED.
<lv_char_val> = ls_charval-atinn.
ENDIF.

IF <ft_res_data> IS ASSIGNED.
READ TABLE <ft_res_data> TRANSPORTING NO FIELDS WITH
KEY ('MATNR') = <lv_matnr> ('ATWRT') = ls_charval-atwrt

('ATINN') = ls_charval-atinn.
* if sy-subrc ne 0.
* READ TABLE <ft_res_data> TRANSPORTING NO FIELDS
WITH KEY ('MATNR') = <lv_matnr> ('ATINN') = ls_charval-atinn.
* endif.

IF sy-subrc EQ 0.
wa_temp1-char_key = wa_temp-char_key.
wa_temp-char_key = lv_temp_char_key.
wa_temp1-char_key_text = wa_temp-char_key_text.
wa_temp-char_key_text = lv_temp_char_key_text.
wa_temp1-var_comb = wa_temp-var_comb.
wa_temp-var_comb = lv_temp_var_comb.
APPEND wa_temp TO it_temp1.
* CLEAR wa_temp.
ELSE.

READ TABLE <ft_res_data> TRANSPORTING NO FIELDS WITH


KEY ('MATNR') = <lv_matnr> ('ATINN') = ls_charval-atinn.
IF sy-subrc NE 0.
wa_temp1-char_key = wa_temp-char_key.
wa_temp-char_key = lv_temp_char_key.
wa_temp1-char_key_text = wa_temp-char_key_text.
wa_temp-char_key_text = lv_temp_char_key_text.
wa_temp1-var_comb = wa_temp-var_comb.
wa_temp-var_comb = lv_temp_var_comb.
APPEND wa_temp TO it_temp1.
ELSE.
READ TABLE <ft_res_data> TRANSPORTING NO FIELDS
WITH KEY ('MATNR') = <lv_matnr> .
IF sy-subrc NE 0.
wa_temp1-char_key = wa_temp-char_key.
wa_temp-char_key = lv_temp_char_key.
wa_temp1-char_key_text = wa_temp-char_key_text.
wa_temp-char_key_text = lv_temp_char_key_text.
wa_temp1-var_comb = wa_temp-var_comb.
wa_temp-var_comb = lv_temp_var_comb.
APPEND wa_temp TO it_temp1.
ENDIF.
ENDIF.
ENDIF.
ELSE.
wa_temp1-char_key = wa_temp-char_key.
wa_temp-char_key = lv_temp_char_key.
wa_temp1-char_key_text = wa_temp-char_key_text.
wa_temp-char_key_text = lv_temp_char_key_text.
wa_temp1-var_comb = wa_temp-var_comb.
wa_temp-var_comb = lv_temp_var_comb.
APPEND wa_temp TO it_temp1.
* CLEAR wa_temp.
ENDIF.
wa_temp-char_key = wa_temp1-char_key.
wa_temp-char_key_text = wa_temp1-char_key_text.
wa_temp-var_comb = wa_temp1-var_comb.

ENDLOOP.

ENDLOOP.

CLEAR: wa_temp1.

LOOP AT it_temp_restr INTO wa_temp.

LOOP AT lt_charvalt_tmp INTO ls_charvalt WHERE spras = sy-


langu AND
atinn =
ls_features-imerk.

READ TABLE lt_charval_tmp INTO ls_charval WITH KEY atinn


= ls_charvalt-atinn

atwrt = ls_charvalt-atwrt.

* READ TABLE lt_restrictions TRANSPORTING NO FIELDS


WITH KEY atwrt_res = ls_charvalt-atwrt
*
atinn = ls_charvalt-atinn
*
restrictv = abap_on.
* IF sy-subrc NE 0.
* CONTINUE.
* ENDIF.

CONCATENATE wa_temp-var_comb '/' ls_features-atnam INTO


lv_temp_var_comb.
* CONCATENATE wa_temp-char_key ls_mdgrfm_cfg-
charspliter ls_charvalt-atwrt INTO lv_temp_char_key.
* CONCATENATE wa_temp-char_key_text ls_mdgrfm_cfg-
charspliter ls_charvalt-atwtb INTO lv_temp_char_key_text.

UNASSIGN <lv_char_val>. CLEAR lv_char_num.


CONCATENATE 'ATWRT' lv_counter INTO lv_char_num.
ASSIGN COMPONENT lv_char_num OF STRUCTURE wa_temp TO
<lv_char_val>.
IF <lv_char_val> IS ASSIGNED.
<lv_char_val> = ls_charvalt-atwrt. ""atwtb.
ENDIF.

UNASSIGN <lv_char_val>. CLEAR lv_char_num.


CONCATENATE 'SRTPO' lv_counter INTO lv_char_num.
ASSIGN COMPONENT lv_char_num OF STRUCTURE wa_temp TO
<lv_char_val>.
IF <lv_char_val> IS ASSIGNED.
<lv_char_val> = ls_charval-srtpo.
ENDIF.

UNASSIGN <lv_char_val>. CLEAR lv_char_num.


CONCATENATE 'ATINN' lv_counter INTO lv_char_num.
ASSIGN COMPONENT lv_char_num OF STRUCTURE wa_temp TO
<lv_char_val>.
IF <lv_char_val> IS ASSIGNED.
<lv_char_val> = ls_charval-atinn.
ENDIF.

IF <ft_res_data> IS ASSIGNED.
READ TABLE <ft_res_data> TRANSPORTING NO FIELDS WITH
KEY ('MATNR') = <lv_matnr> ('ATWRT') = ls_charvalt-atwrt

('ATINN') = ls_charvalt-atinn.
IF sy-subrc EQ 0.
wa_temp1-char_key = wa_temp-char_key.
wa_temp-char_key = lv_temp_char_key.
wa_temp1-char_key_text = wa_temp-char_key_text.
wa_temp-char_key_text = lv_temp_char_key_text.
wa_temp1-var_comb = wa_temp-var_comb.
wa_temp-var_comb = lv_temp_var_comb.
APPEND wa_temp TO it_temp_restr1.
* CLEAR wa_temp.
ENDIF.
ENDIF.
wa_temp-char_key = wa_temp1-char_key.
wa_temp-char_key_text = wa_temp1-char_key_text.
wa_temp-var_comb = wa_temp1-var_comb.

ENDLOOP.

ENDLOOP.

it_temp = it_temp1 .
it_temp_restr = it_temp_restr1.
* REFRESH: it_temp1, it_temp_restr1.
CLEAR : it_temp1, it_temp_restr1.
CLEAR: wa_temp1.

ENDIF.

ENDIF.
ENDLOOP.
DATA: lv_count TYPE i,
lv_field TYPE string,
lv_field1 TYPE string,
lv_count_str TYPE string.

FIELD-SYMBOLS: <lv_field> TYPE any,


<lv_field1> TYPE any.
* <fs_var_data> TYPE /ugirmp/variant ##NEEDED.

LOOP AT it_temp INTO wa_temp.


CLEAR lv_count.
lv_var = lv_var + 1.
ls_variant_stag-matnr = <lv_matnr>.
CONCATENATE <lv_matnr> lv_var INTO ls_variant_stag-varnr.
DO 9 TIMES.
lv_count = lv_count + 1.
lv_count_str = lv_count.
CONCATENATE 'ATNAM' lv_count_str INTO lv_field.
CONCATENATE 'ATINN' lv_count_str INTO lv_field1.
ASSIGN COMPONENT lv_field OF STRUCTURE ls_variant_stag TO
<lv_field>.
IF sy-subrc EQ 0.
ASSIGN COMPONENT lv_field1 OF STRUCTURE wa_temp TO
<lv_field1>.
IF sy-subrc EQ 0.
READ TABLE lt_features INTO ls_features WITH KEY imerk =
<lv_field1>.
IF sy-subrc EQ 0.
<lv_field> = ls_features-atnam.
ENDIF.
ENDIF.
ENDIF.

CONCATENATE 'ATINN' lv_count_str INTO lv_field.


ASSIGN COMPONENT lv_field OF STRUCTURE ls_variant_stag TO
<lv_field>.
IF sy-subrc EQ 0.
ASSIGN COMPONENT lv_field OF STRUCTURE wa_temp TO
<lv_field1>.
IF sy-subrc EQ 0.
<lv_field> = <lv_field1>.
ENDIF.
ENDIF.
CONCATENATE 'ATWRT' lv_count_str INTO lv_field.
ASSIGN COMPONENT lv_field OF STRUCTURE ls_variant_stag TO
<lv_field>.
IF sy-subrc EQ 0.
ASSIGN COMPONENT lv_field OF STRUCTURE wa_temp TO
<lv_field1>.
IF sy-subrc EQ 0.
<lv_field> = <lv_field1>.
ENDIF.
ENDIF.
ENDDO.

IF ls_matnr-select_all EQ abap_true.
ls_variant_stag-variant_create = abap_true.
ENDIF.
* ls_variant_stag-status = '~Icon/EditedItem'.
APPEND ls_variant_stag TO et_variants.
CLEAR ls_variant_stag.

* ls_matnr1 = ls_matnr.
* APPEND ls_matnr1 TO et_matnr.
ENDLOOP.

* REFRESH : it_temp, it_temp_restr, lt_charval_tmp, lt_charvalt,


lt_charval, lt_charvalt_tmp, lt_features, it_temp1, it_temp_restr1.
CLEAR : it_temp, it_temp_restr, lt_charval_tmp, lt_charvalt,
lt_charval, lt_charvalt_tmp, lt_features, it_temp1, it_temp_restr1.
CLEAR: lv_var, lv_count,lv_count_str,wa_temp.

lv_counter = '1'.
ENDLOOP.

ENDMETHOD.

METHOD get_components.
DATA:lo_stru_descr TYPE REF TO cl_abap_structdescr,
lo_tabl_descr TYPE REF TO cl_abap_tabledescr,
lo_ref_descr TYPE REF TO cl_abap_refdescr.

CLEAR: et_components.
DATA(lo_type_descr) = cl_abap_typedescr=>describe_by_data( is_data ).
IF lo_type_descr IS BOUND.
CASE lo_type_descr->kind.
WHEN cl_abap_typedescr=>kind_table.
lo_tabl_descr ?= lo_type_descr.
IF lo_tabl_descr IS BOUND.
lo_stru_descr ?= lo_tabl_descr->get_table_line_type( ).
ENDIF.
WHEN cl_abap_typedescr=>kind_struct.
lo_stru_descr ?= lo_type_descr.
WHEN cl_abap_typedescr=>kind_ref.
lo_ref_descr ?= lo_type_descr.
IF lo_ref_descr IS BOUND.
lo_stru_descr ?= lo_ref_descr->describe_by_data_ref( is_data
).
ENDIF.
WHEN OTHERS.
ASSERT 1 = 2.
ENDCASE.
et_components = lo_stru_descr->get_included_view( ).
ENDIF.
ENDMETHOD.

METHOD get_descr_struc.

* constitution of given structure


DATA:
lsr_data TYPE REF TO data.
FIELD-SYMBOLS:
<s_data> TYPE any.

DATA:
ls_descr_struc TYPE gty_s_descr_struc.

DATA:
lo_descr_struc TYPE REF TO cl_abap_structdescr,
lo_descr_table TYPE REF TO cl_abap_tabledescr.

DATA:
lt_component TYPE abap_component_tab.
"cl_abap_structdescr=>component_table.
FIELD-SYMBOLS:
<component> TYPE abap_componentdescr.

CHECK iv_name_struc IS NOT INITIAL.

CLEAR: lo_descr_struc, lt_component.


CREATE DATA lsr_data TYPE (iv_name_struc).
ASSIGN lsr_data->* TO <s_data>.
lo_descr_struc ?= cl_abap_typedescr=>describe_by_data( <s_data> ).
lt_component = lo_descr_struc->get_components( ).

TRY.

LOOP AT lt_component ASSIGNING <component>.


CLEAR ls_descr_struc.
ls_descr_struc-name_component = <component>-name.
IF <component>-type->type_kind =
cl_abap_typedescr=>typekind_table. "Table
lo_descr_table ?= <component>-type.
lo_descr_struc ?= lo_descr_table->get_table_line_type( ).
ls_descr_struc-name_line_type = lo_descr_struc-
>get_relative_name( ).
ls_descr_struc-is_table = abap_true.
IF iv_compdescr = abap_true.
ls_descr_struc-struc_components = lo_descr_struc-
>get_components( ).
ENDIF.
INSERT ls_descr_struc INTO TABLE cts_descr_struc.
ELSEIF <component>-type->type_kind =
cl_abap_typedescr=>typekind_struct1. "Flat structure
lo_descr_struc ?= <component>-type.
ls_descr_struc-name_line_type = lo_descr_struc-
>get_relative_name( ).
INSERT ls_descr_struc INTO TABLE cts_descr_struc.
ELSEIF <component>-type->type_kind =
cl_abap_typedescr=>typekind_struct2. "Deep structure
lo_descr_struc ?= <component>-type.
ls_descr_struc-name_line_type = lo_descr_struc-
>get_relative_name( ). ".... get structure name
CALL METHOD cl_mdg_bs_mat_services=>get_descr_struc
".... and explode
EXPORTING
iv_name_struc = ls_descr_struc-name_line_type
iv_compdescr = iv_compdescr
CHANGING
cts_descr_struc = cts_descr_struc.
ENDIF.
ENDLOOP.

CATCH cx_sy_move_cast_error.
ASSERT 1 = 0.
ENDTRY.

ENDMETHOD.

METHOD get_internal_number.
* * data declaration
DATA :
lx_usmd_gov_api TYPE REF TO cx_usmd_gov_api,
lr_key_struc TYPE REF TO data,
lr_key_table TYPE REF TO data ##NEEDED.
* p_lt_error TYPE usmd_t_message,
* p_lt_message TYPE usmd_t_message.
* Field- sybols
FIELD-SYMBOLS: <fs_mat_key_str> TYPE any,
* <fs_ext_int_mat> TYPE any,
<fs_int_mat> TYPE any.
CLEAR: ex_error, ex_int_matnr.
* check article is in internal or external range
CALL FUNCTION 'PRICAT_MATERIAL_NUMBER_CHECK'
EXPORTING
iv_matnr = im_matnr
iv_mtart = im_mtart
EXCEPTIONS
materialart_not_found = 1
no_internal_number_allowed = 2
number_not_correct = 3
OTHERS = 4.
IF sy-subrc <> 0 OR im_matnr_tmp IS NOT INITIAL.
TRY.
co_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = 'MARA'
iv_struct_type = co_conv_api->gc_struct_key
IMPORTING
er_structure = lr_key_struc " Return Structure
er_table = lr_key_table " Return Table
).
CATCH cx_usmd_gov_api INTO lx_usmd_gov_api.
et_message = lx_usmd_gov_api->mt_messages.
IF et_message IS NOT INITIAL.
ex_error = abap_true.
* EXIT.
RETURN.
ENDIF.
ENDTRY.

ASSIGN lr_key_struc->* TO <fs_mat_key_str>.


IF <fs_mat_key_str> IS ASSIGNED.
TRY.
co_conv_api->create_entity_tmp_key(
EXPORTING
iv_lock = abap_false
iv_entity = 'MARA' " Entity Type
IMPORTING
es_key = <fs_mat_key_str> " Entity Key
).
CATCH cx_usmd_gov_api INTO lx_usmd_gov_api.
et_message = lx_usmd_gov_api->mt_messages.
IF et_message IS NOT INITIAL.
ex_error = abap_true.
* EXIT.
RETURN.
ENDIF.
ENDTRY.
IF <fs_mat_key_str> IS NOT INITIAL.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <fs_mat_key_str> TO
<fs_int_mat>.
IF <fs_int_mat> IS ASSIGNED AND <fs_int_mat> IS NOT INITIAL.
ex_int_matnr = <fs_int_mat>.
ELSE.
ex_error = abap_true.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

if ex_int_matnr is INITIAL.
ex_int_matnr = IM_MATNR.
endif.
gv_matnr_final = ex_int_matnr.
ENDMETHOD.

METHOD get_variant_char.

DATA: it_classdata TYPE STANDARD TABLE OF classdata,


wa_classdata LIKE LINE OF it_classdata,
it_features TYPE STANDARD TABLE OF merkmale,
wa_features LIKE LINE OF it_features,
it_wrf_charval TYPE /ugi4/ar_tt_charval,
it_wrf_charvalt TYPE /ugi4/ar_tt_charvalt,
wa_wrf_charval LIKE LINE OF it_wrf_charval ##NEEDED,
wa_wrf_charvalt LIKE LINE OF it_wrf_charvalt ##NEEDED.

TYPES : BEGIN OF ty_ksml,


imerk TYPE ksml-imerk,
relev TYPE ksml-relev,
atnam TYPE cabn-atnam,
END OF ty_ksml.
DATA:
it_ksml TYPE STANDARD TABLE OF ty_ksml,
wa_ksml LIKE LINE OF it_ksml,
lv_clint TYPE clint.

DATA: lv_objek TYPE objnum.

DATA:
it_clint TYPE RANGE OF clint,
wa_clint LIKE LINE OF it_clint.

IF /ugi4/mdg_bs_ecc_ar_services=>is_new_generic_article_storage( ) EQ
abap_true AND ( iv_char_type EQ 'R' OR iv_char_type EQ 'V' ).
wa_classdata-class = iv_charp.

wa_classdata-klart = iv_klart.
wa_classdata-spras = sy-langu.
APPEND wa_classdata TO it_classdata.

CALL FUNCTION 'RFC_MERCHANDISE_CLASSES_READ'


TABLES
pi_classdata = it_classdata
po_features = it_features
EXCEPTIONS
no_classes = 1
OTHERS = 2 ##FM_SUBRC_OK.

ELSE.

IF iv_charp IS NOT INITIAL AND iv_klart NE '300'.

wa_classdata-class = iv_charp.
wa_classdata-klart = '026'.
wa_classdata-spras = sy-langu.
APPEND wa_classdata TO it_classdata.

CALL FUNCTION 'RFC_MERCHANDISE_CLASSES_READ'


TABLES
pi_classdata = it_classdata
po_features = it_features
EXCEPTIONS
no_classes = 1
OTHERS = 2 ##FM_SUBRC_OK.

ENDIF.

IF iv_matkl IS NOT INITIAL.

"logic to get all the CLINTS.

SELECT SINGLE clint "#EC CI_NOORDER


FROM klah "#EC CI_NOFIRST
INTO lv_clint
WHERE class = iv_matkl ##WARN_OK.

IF lv_clint IS NOT INITIAL.

WHILE lv_clint IS NOT INITIAL.


CLEAR: wa_clint.
* wa_clint-clint = lv_clint.
wa_clint-option = 'EQ'.
wa_clint-sign = 'I'.
wa_clint-low = lv_clint.
APPEND wa_clint TO it_clint.
lv_objek = lv_clint.
SELECT SINGLE clint FROM kssk "#EC CI_NOORDER
INTO lv_clint
WHERE objek = lv_objek ##WARN_OK.

IF sy-subrc <> 0.
CLEAR lv_clint.
ENDIF.
ENDWHILE.
ENDIF.
IF it_clint[] IS NOT INITIAL.

SELECT imerk relev atnam FROM ksml AS ks INNER JOIN cabn AS ca


ON ks~imerk = ca~atinn
INTO TABLE it_ksml

WHERE ks~clint IN it_clint.

ENDIF.

LOOP AT it_ksml INTO wa_ksml.

wa_features-imerk = wa_ksml-imerk.
wa_features-relev = wa_ksml-relev.
wa_features-atnam = wa_ksml-atnam.
APPEND wa_features TO it_features.

ENDLOOP.

ENDIF.

* DELETE it_features WHERE relev NE 2.

ENDIF.

SORT it_features ASCENDING BY imerk.


DELETE ADJACENT DUPLICATES FROM it_features COMPARING imerk.

LOOP AT it_features INTO wa_features .""WHERE relev = 2.

CLEAR: it_wrf_charval, it_wrf_charvalt, wa_wrf_charval,


wa_wrf_charvalt.

/ugi4/mdg_bs_ecc_ar_services=>get_charval_values_read_all(
EXPORTING atinn = wa_features-imerk

IMPORTING it_char_val = it_wrf_charval

it_char_valt = it_wrf_charvalt ).

APPEND LINES OF it_wrf_charval TO et_charval.


APPEND LINES OF it_wrf_charvalt TO et_charvalt.

"Let's try read from the Restrict Entity. Maybe is a FREE


Characteristic.

* LOOP AT lt_restrictions INTO ls_restrictions WHERE atinn =


wa_features-imerk."" AND restrictv = abap_true.
*
* READ TABLE it_wrf_charval TRANSPORTING NO FIELDS WITH KEY atinn
= ls_restrictions-atinn
* atwrt
= ls_restrictions-atwrt_res.
* IF sy-subrc NE 0.
*
* MOVE-CORRESPONDING ls_restrictions TO wa_wrf_charval.
* MOVE ls_restrictions-atwrt_res TO wa_wrf_charval-atwrt.
* APPEND wa_wrf_charval TO it_wrf_charval.
* MOVE-CORRESPONDING ls_restrictions TO wa_wrf_charvalt.
* MOVE ls_restrictions-atwrt_res TO wa_wrf_charvalt-atwrt.
* wa_wrf_charvalt-atwtb = wa_wrf_charvalt-atwrt.
* wa_wrf_charvalt-spras = sy-langu.
* APPEND wa_wrf_charvalt TO it_wrf_charvalt.
* ENDIF.
*
* ENDLOOP.
ENDLOOP.

et_features = it_features.

ENDMETHOD.

METHOD map.
DATA : lo_conv_api TYPE REF TO
if_usmd_conv_som_gov_api,
lo_conv_api_rfm TYPE REF TO
/ugi4/cl_usmd_conv_som_gov_api,
lt_message TYPE usmd_t_message,
lx_usmd_conv_som_gov_api TYPE REF TO
cx_usmd_conv_som_gov_api,
lx_usmd_app_context_cons_error TYPE REF TO
cx_usmd_app_context_cons_error ##NEEDED,
lx_usmd_gov_api TYPE REF TO cx_usmd_gov_api,
it_t001w TYPE STANDARD TABLE OF t001w,
"#EC NEEDED
lt_messages TYPE usmd_t_message ##NEEDED,
lx_usmd_gov_api_core_error TYPE REF TO
cx_usmd_gov_api_core_error.
DATA : lt_mdg_entities TYPE usmd_gov_api_ts_ent_data,
lt_mdg_entities_makt TYPE usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS: <ls_entity_struc> TYPE /ugi4/mdg_bs_ar_s_enty_str,


<lt_model_data> TYPE SORTED TABLE ##NEEDED,
<lt_model_del> TYPE SORTED TABLE ##NEEDED,
<lt_model_data_save> TYPE SORTED TABLE ##NEEDED.

DATA : lt_entity_keys TYPE usmd_gov_api_ts_ent_tabl.


DATA : ls_entity_keys TYPE usmd_gov_api_s_ent_tabl.
DATA : lt_entity_del TYPE
usmd_gov_api_ts_ent_tabl.
DATA:lt_entity_struc TYPE /ugi4/mdg_bs_ar_t_enty_str.
DATA(lt_entity_struc_makt) = lt_entity_struc.

* for custom entity badi definitions.

DATA : lo_handler TYPE REF TO /ugi4/mdg_rfm_ext_api_sta.


TYPES: BEGIN OF ty_s_attr_key,
entity TYPE usmd_entity,
attr_key TYPE mdg_bs_mat_t_smt_field,
END OF ty_s_attr_key,
ty_t_attr_key TYPE SORTED TABLE OF ty_s_attr_key WITH UNIQUE
KEY entity.

DATA: mt_attr_key TYPE ty_t_attr_key,


ls_attr_key TYPE ty_s_attr_key.
IF lt_entity_struc IS NOT INITIAL.
DELETE lt_entity_struc_makt WHERE entity NE 'MARA'.
ENDIF.

/ugi4/cl_mdg_bs_article_acces=>gv_upload_x =
/ugi4/if_mdg_bs_art_c=>gc_x.
/ugi4/cl_mdg_fl_article=>gv_dtimport = /ugi4/if_mdg_bs_art_c=>gc_x.
/ugi4/cl_mdg_bs_article_acces=>gv_called_from_dtimport =
/ugi4/if_mdg_bs_art_c=>gc_x.

IF lo_conv_api IS NOT BOUND.


TRY.
CALL METHOD cl_usmd_conv_som_gov_api=>get_instance
EXPORTING
iv_model_name = gc_data_model
iv_classname = '/UGI4/CL_USMD_CONV_SOM_GOV_API'
RECEIVING
ro_so_gov_api = lo_conv_api.
CATCH cx_usmd_conv_som_gov_api INTO lx_usmd_conv_som_gov_api.
lt_message = lx_usmd_conv_som_gov_api->mt_messages.
IF lt_message IS NOT INITIAL.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDIF.
CATCH cx_usmd_app_context_cons_error INTO
lx_usmd_app_context_cons_error ##NO_HANDLER.
CATCH cx_usmd_gov_api INTO lx_usmd_gov_api.
lt_message = lx_usmd_gov_api->mt_messages.
IF lt_message IS NOT INITIAL.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
* EXIT.
RETURN.
ENDIF.
ENDTRY.
ENDIF.

CHECK lo_conv_api IS BOUND.

lo_conv_api->refresh_buffers( ).
IF im_creq_attr-crequest_id IS NOT INITIAL.
TRY.
lo_conv_api->set_environment(
EXPORTING
iv_crequest_id = im_creq_attr-crequest_id
" Change Request
iv_crequest_type = im_creq_attr-cr_type "
Type of Change Request

).
CATCH cx_usmd_conv_som_gov_api_env INTO DATA(lo_conv_error). "
Consistency Error While Setting the Environment Variable
lt_message = lo_conv_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDTRY.
ELSE.
TRY.
lo_conv_api->set_environment(
EXPORTING
iv_crequest_type = im_creq_attr-cr_type
iv_create_crequest = abap_true ).
CATCH cx_usmd_conv_som_gov_api_env INTO lo_conv_error. "
Consistency Error While Setting the Environment Variable
lt_message = lo_conv_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDTRY.
ENDIF.
READ TABLE et_message TRANSPORTING NO FIELDS WITH KEY msgty = 'E'.
IF sy-subrc EQ 0.
RETURN.
ENDIF.

TRY.
lo_conv_api->enqueue_crequest( EXPORTING iv_lock_mode = 'E' ).
CATCH cx_usmd_gov_api_core_error INTO DATA(lo_usmd_api_error)
##NEEDED. " CX_USMD_CORE_DYNAMIC_CHECK
lt_message = lo_conv_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
CATCH cx_usmd_gov_api INTO lx_usmd_gov_api. " General
Processing Error GOV_API
lt_message = lo_conv_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDTRY.

* set Crequest Attributes .


TRY.
lo_conv_api->set_crequest_attributes(
EXPORTING
iv_crequest_text = im_creq_attr-creq_text
iv_priority = im_creq_attr-priority
iv_due_date = im_creq_attr-due_date
iv_reason = im_creq_attr-reason
).
CATCH cx_usmd_gov_api_core_error INTO lo_usmd_api_error. "
CX_USMD_CORE_DYNAMIC_CHECK
lt_message = lo_conv_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
CATCH cx_usmd_gov_api INTO lx_usmd_gov_api. " General
Processing Error GOV_API
lt_message = lo_conv_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDTRY.

IF im_creq_attr-crequest_id IS NOT INITIAL.


CALL METHOD cl_usmd_crequest_api=>get_instance
EXPORTING
iv_crequest = im_creq_attr-crequest_id
iv_model_name = 'AR'
IMPORTING
re_inst_crequest_api = DATA(lo_crequest).
IF lo_crequest IS BOUND.
lo_crequest->read_crequest(
IMPORTING
es_crequest = DATA(ls_crequest) " Change
Request
).

IF ls_crequest-usmd_creq_status = '00' OR ls_crequest-


usmd_creq_status = '01' OR ls_crequest-usmd_creq_status = '02' OR

ls_crequest-usmd_creq_status = '03'. "#EC CI_SORTSEQ


DATA(lv_crequest_exist) = abap_true ##NEEDED.
ENDIF.

lo_crequest->read_objectlist(
EXPORTING
iv_entity_type = 'MARA' " Entity Type
IMPORTING
et_entity = DATA(lt_entity_table) "
ChangeRequest Entity TableType
* et_message = " Messages
).
READ TABLE lt_entity_table INTO DATA(ls_entity_table) INDEX 1
##NEEDED.
IF sy-subrc EQ 0.
gv_matnr_final = ls_entity_table-usmd_value.
ENDIF.
ENDIF.
ENDIF.

* TRY.
* lo_conv_api->set_crequest_attributes(
* EXPORTING
* iv_crequest_text = 'GDS_API'
** iv_priority =
* iv_due_date = '99991231'
** iv_reason =
** iv_reason_rejected =
* ).
* CATCH cx_usmd_gov_api_core_error INTO lx_usmd_gov_api_core_error.
" General Processing Error (CX_USMD_CORE_DYNAMIC_CHECK)
* lt_message = lx_usmd_gov_api_core_error->mt_messages.
* IF lt_message IS NOT INITIAL.
* APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
* EXIT.
* ENDIF.
* CATCH cx_usmd_gov_api INTO lx_usmd_gov_api. " General
Processing Error GOV_API
* lt_message = lx_usmd_gov_api->mt_messages.
* ENDTRY.

*" To get the Valid CR Types


* CALL FUNCTION '/UGI4/FETCH_CR_TYPES'
* EXPORTING
* iv_usmd_entity_main = lc_main_entity
* iv_language = sy-langu
* IMPORTING
* et_creq_types = lt_creq_types
* EXCEPTIONS
* raise_error = 1
* OTHERS = 2.
*" If there is no CR Types exist in the system then should exit with an
error message.

/ugi4/cl_mdg_bs_art_smt=>get_enties_struc( EXPORTING iv_model = 'AR'


IMPORTING et_entity_struc = lt_entity_struc ).
IF mt_attr_key IS INITIAL.
LOOP AT lt_entity_struc ASSIGNING <ls_entity_struc>.
ls_attr_key-entity = <ls_entity_struc>-entity.
/ugi4/cl_mdg_bs_art_smt=>find_prop_entity( EXPORTING
iv_respect_switch = abap_true iv_entity = <ls_entity_struc>-entity
IMPORTING et_attr_key
= ls_attr_key-attr_key ).
INSERT ls_attr_key INTO TABLE mt_attr_key.
ENDLOOP.
ENDIF.

gt_entity_struc = lt_entity_struc.

*/UGI4/RFM_S_DBSTRUC_IN
DATA : ls_rfm_data TYPE /ugi4/rfm_s_dbstruc_in.
ls_rfm_data = is_rfm_api.

CALL METHOD map_to_api_structure


EXPORTING
is_db_attr = ls_rfm_data " Unified API Article
Master Data Structure
IMPORTING
es_db_attr = ls_rfm_data. " Unified API Article
Master Data Structure

IF ls_rfm_data-marc_tab IS NOT INITIAL.


DATA(it_marctab) = ls_rfm_data-marc_tab.
DELETE ADJACENT DUPLICATES FROM it_marctab COMPARING werks.
SELECT * FROM t001w INTO TABLE it_t001w
FOR ALL ENTRIES IN it_marctab
WHERE werks = it_marctab-werks.
ENDIF.

DATA : lr_table_key TYPE REF TO data,


lr_struc_key TYPE REF TO data.

FIELD-SYMBOLS : <lt_table_key> TYPE ANY TABLE,


<ls_struc_key> TYPE any.

lo_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = 'MARA'
iv_struct_type = lo_conv_api->gc_struct_key
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN : lr_struc_key->* TO <ls_struc_key>,


lr_table_key->* TO <lt_table_key>.

READ TABLE ls_rfm_data-mara_tab INTO DATA(ls_mara) INDEX 1.


if sy-subrc EQ 0.
* convert to input format to get the active data
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = ls_mara-matnr
IMPORTING
output = ls_mara-matnr
EXCEPTIONS ##FM_SUBRC_OK
length_error = 1
OTHERS = 2.
else.
gv_matnr_final = im_creq_attr-matnr.
gv_matnr_is_new = abap_false.
endif.

IF im_creq_attr-crequest_id IS INITIAL and im_creq_attr-matnr is


INITIAL.
SELECT SINGLE @abap_true
FROM mara
INTO @DATA(exists)
WHERE matnr EQ @ls_mara-matnr.
IF exists EQ abap_false.
ASSIGN COMPONENT 'MANDT' OF STRUCTURE ls_mara TO FIELD-
SYMBOL(<ls_hdr_clt>).
IF <ls_hdr_clt> IS ASSIGNED.
<ls_hdr_clt> = sy-mandt.
ENDIF.
* fill default values.
IF ls_mara-datab IS INITIAL.
ls_mara-datab = sy-datum.
ENDIF.
IF im_creq_attr-crequest_id IS INITIAL.

ls_mara-mbrsh = '1'.
me->get_internal_number(
EXPORTING
im_matnr = ls_mara-matnr " Material
Number
im_mtart = ls_mara-mtart " Material
type
im_matnr_tmp = ls_mara-is_matnr_tmp "
Boolean Variable (X = True, - = False, Space = Unknown)
IMPORTING
ex_error = DATA(lv_error) " Boolean
Variable (X = True, - = False, Space = Unknown)
ex_int_matnr = DATA(lv_matnr_int) " Material
Number
et_message = lt_message " Messages
CHANGING
co_conv_api = lo_conv_api
) ##NEEDED.

IF lv_error IS NOT INITIAL AND lt_message IS NOT INITIAL.


APPEND LINES OF lt_message TO et_message.
ENDIF.
ELSE.

ENDIF.

ELSE.
gv_matnr_final = ls_mara-matnr.
gv_matnr_is_new = abap_false.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_struc_key> TO FIELD-


SYMBOL(<fs_key>).
IF sy-subrc EQ 0.
<fs_key> = gv_matnr_final.
INSERT <ls_struc_key> INTO TABLE <lt_table_key>.
CLEAR : <ls_struc_key>.
ENDIF.
IF <lt_table_key> IS ASSIGNED AND <lt_table_key> IS NOT INITIAL.
ls_entity_keys-entity = 'MARA'.
GET REFERENCE OF <lt_table_key> INTO ls_entity_keys-tabl.
APPEND ls_entity_keys TO lt_entity_keys.
CLEAR : ls_entity_keys.

* REFRESH : lt_message.
CLEAR: lt_message.
TRY.

lo_conv_api->enqueue_entity(
EXPORTING
it_entity_keys = lt_entity_keys

).
CATCH cx_usmd_gov_api_core_error INTO
DATA(lx_core_error). " CX_USMD_CORE_DYNAMIC_CHECK
lt_message = lx_core_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
CATCH BEFORE UNWIND cx_usmd_gov_api_entity_lock INTO
DATA(lx_lock). " Error while blocking an entity
lt_message = lx_lock->mt_messages.
APPEND LINES OF lt_message TO et_message.
CATCH cx_usmd_gov_api INTO DATA(lx_gov_api).
" General Processing Error GOV_API
lt_message = lx_gov_api->mt_messages.
APPEND LINES OF lt_message TO et_message.

ENDTRY.
ENDIF.

READ TABLE et_message TRANSPORTING NO FIELDS WITH KEY msgty = 'E'.


IF sy-subrc EQ 0.
RETURN.
ENDIF.
* Instantiate the badi definition.
TRY.
GET BADI lo_handler.
CATCH cx_badi_not_implemented INTO DATA(lx_badi_not_implemented)
##NEEDED ##NO_HANDLER.
ENDTRY.

LOOP AT lt_entity_struc ASSIGNING <ls_entity_struc>.


CASE <ls_entity_struc>-entity.
WHEN 'CLASS_GEN' OR 'CHAR_PROF'.
me->map_class_gen_stag( EXPORTING iv_entity =
<ls_entity_struc>-entity
iv_target_struc = <ls_entity_struc>-
structure
is_api_data = ls_rfm_data
io_conv_api = lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities
ct_entity_del = lt_entity_del
).

WHEN 'CHARACVAL'.
me->map_characval_stag( EXPORTING iv_entity =
<ls_entity_struc>-entity
iv_target_struc = <ls_entity_struc>-
structure
is_api_data = ls_rfm_data
io_conv_api = lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities
ct_entity_del = lt_entity_del ).

WHEN 'MARA' OR 'MAW1' OR 'MLANPURCH'


OR 'TAX'
OR 'MLGN' OR 'MLGT' OR 'MVKE' OR 'WLK2' OR 'MALG' OR 'MARD' OR
'MAMT'.

IF <ls_entity_struc>-is_txt-boole IS INITIAL.

me->map_model_2_sta( EXPORTING iv_entity = <ls_entity_struc>-


entity
iv_target_struc =
<ls_entity_struc>-structure
is_api_data = ls_rfm_data
is_text = <ls_entity_struc>-
is_txt-boole
io_conv_api = lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities
ct_entity_del = lt_entity_del
).

ELSE.
me->map_makt_stag( EXPORTING iv_entity = <ls_entity_struc>-
entity
iv_target_struc =
<ls_entity_struc>-structure
is_api_data = ls_rfm_data
is_text = <ls_entity_struc>-
is_txt-boole
io_conv_api = lo_conv_api

IMPORTING et_message = lt_messages


CHANGING
ct_entity_data = lt_mdg_entities_makt

ct_entity_del = lt_entity_del
).
ENDIF.
WHEN 'MEAN_GTIN'.
me->map_mean_gtin( EXPORTING iv_entity = <ls_entity_struc>-
entity
iv_target_struc =
<ls_entity_struc>-structure
is_api_data =
ls_rfm_data
io_conv_api =
lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities
ct_entity_del = lt_entity_del
).
WHEN 'BASIDTEXT' OR 'MVKETEXT' OR 'INSPETEXT' OR 'PIR_NOTE' OR
'BPORDTEXT' OR 'PORD_TEXT' .
me->map_text_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity
is_api_data = ls_rfm_data
io_conv_api = lo_conv_api
CHANGING
ct_entity_data = lt_mdg_entities
).

**
WHEN 'BOM' OR 'ASSORT' OR 'ARTHIER' OR 'DRADBASIC' OR 'DRADTXT'
OR 'VALUATION' OR 'CLASSASGN'.
me->map_nosmt_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity
is_api_data = ls_rfm_data
io_conv_api = lo_conv_api
CHANGING
ct_entity_data =
lt_mdg_entities
ct_entity_del =
lt_entity_del ).
WHEN 'VARIANTS'.
me->map_variants_stag(
EXPORTING iv_entity = <ls_entity_struc>-entity
is_api_data = ls_rfm_data
io_conv_api = lo_conv_api
CHANGING ct_entity_data =
lt_mdg_entities
ct_entity_del = lt_entity_del ).

WHEN 'RESTRICT'.
me->map_restrict_stag( EXPORTING
iv_entity = <ls_entity_struc>-entity
is_api_source = ls_rfm_data
io_conv_api = lo_conv_api
CHANGING
ct_entity_data = lt_mdg_entities
ct_entity_del = lt_entity_del ).

WHEN 'MPOP_DC' OR 'MPOP_ST'.


me->map_mpop_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity
iv_target_struc =
<ls_entity_struc>-structure
is_api_data = ls_rfm_data
it_t001w = it_t001w
io_conv_api = lo_conv_api
IMPORTING et_message = lt_messages
CHANGING ct_entity_data =
lt_mdg_entities
ct_entity_del =
lt_entity_del
).
WHEN 'MARCDC' OR 'MARCST'
OR 'MBEW_DC' OR 'MBEW_ST'.
me->map_dcst_tab_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity
iv_target_struc =
<ls_entity_struc>-structure
is_api_data =
ls_rfm_data
it_t001w = it_t001w
io_conv_api =
lo_conv_api
IMPORTING et_message = lt_messages
CHANGING ct_entity_data =
lt_mdg_entities
ct_entity_del = lt_entity_del
).
**
WHEN 'SEASON' OR 'SGTMARM' OR 'SGTMLGT' OR 'SGTMLGN' OR 'SGTMVKE'
OR 'SGTMRP'
OR 'SGTMRPGN' OR 'SGTMADKA' OR 'SGTEIN' OR 'WRF_FOLUP'.
me->map_fms_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity
is_api_data =
ls_rfm_data
io_conv_api =
lo_conv_api
CHANGING ct_entity_data =
lt_mdg_entities
ct_entity_del = lt_entity_del
).
**
WHEN 'ADDITIONA' OR 'PURCHINFO' OR 'PURCHEINA'.
me->map_tab_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity
is_api_data =
ls_rfm_data
io_conv_api =
lo_conv_api
CHANGING ct_entity_data =
lt_mdg_entities
ct_entity_del = lt_entity_del
).
WHEN 'UNITOFMSR'.
me->map_unitofmsr_2sta( EXPORTING iv_entity =
<ls_entity_struc>-entity

iv_target_struc = <ls_entity_struc>-structure

is_marm_data = ls_rfm_data-marm_tab

is_mara_data = ls_rfm_data-mara_tab

is_maw1_data = ls_rfm_data-maw1_tab

io_conv_api = lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities

ct_entity_del = lt_entity_del
).
WHEN 'TEXTCOMP' OR 'TEXTFIBR'.
me->map_textfibr_comp( EXPORTING iv_entity = <ls_entity_struc>-
entity

iv_target_struc = <ls_entity_struc>-structure

is_api_data = ls_rfm_data

io_conv_api = lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities

ct_entity_del = lt_entity_del
).
WHEN 'IMAGEURL'.
me->map_art_img_2sta( EXPORTING iv_entity = <ls_entity_struc>-
entity

iv_target_struc = <ls_entity_struc>-structure

is_api_data = ls_rfm_data

io_conv_api = lo_conv_api
IMPORTING
et_message = lt_messages
CHANGING
ct_entity_data = lt_mdg_entities

ct_entity_del = lt_entity_del
).

WHEN OTHERS.
IF lo_handler IS BOUND.
TRY.
CALL BADI lo_handler->map_2_stag
EXPORTING
iv_entity = <ls_entity_struc>-entity
iv_target_struc = <ls_entity_struc>-structure
is_api_data = ls_rfm_data
IMPORTING
et_message = lt_messages
CHANGING
co_conv_api = lo_conv_api
ct_entity_data = lt_mdg_entities
ct_entity_data_del = lt_entity_del.
" MDG: Table Type for Table of Entities Structure
CATCH cx_root INTO DATA(lx_root) ##NEEDED.
CLEAR lt_messages.
ENDTRY.
ENDIF.
ENDCASE.
ENDLOOP.

*write entity map data.


CALL METHOD write_entity_data
EXPORTING
it_entity_data = lt_mdg_entities " MDG: Entity
Type with Data and Attributes (Table)
IMPORTING
et_message = lt_messages " Messages
CHANGING
co_conv_api = lo_conv_api. " Governance API:
Single Chg. Req. Convenience Governance API

IF lt_messages IS NOT INITIAL.


APPEND LINES OF lt_message TO et_message.
CLEAR lt_messages.
ENDIF.

CALL METHOD write_entity_data


EXPORTING
it_entity_data = lt_mdg_entities_makt " MDG:
Entity Type with Data and Attributes (Table)
IMPORTING
et_message = lt_messages " Messages
CHANGING
co_conv_api = lo_conv_api. " Governance API:
Single Chg. Req. Convenience Governance API

IF lt_messages IS NOT INITIAL.


APPEND LINES OF lt_message TO et_message.
CLEAR lt_messages.
ENDIF.
IF lt_entity_del IS NOT INITIAL.
CALL METHOD delete_entity_data
EXPORTING
it_entity_data = lt_entity_del
IMPORTING
et_message = lt_messages
CHANGING
co_conv_api = lo_conv_api.
IF lt_messages IS NOT INITIAL.
APPEND LINES OF lt_message TO et_message.
CLEAR lt_messages.
ENDIF.
ENDIF.
* check data.
lo_conv_api_rfm ?= lo_conv_api.
IF im_creq_attr-save_mode EQ 'A' OR im_creq_attr-save_mode EQ 'C' OR
im_creq_attr-save_mode EQ 'D'.
TRY.
lo_conv_api_rfm->check( ).
CATCH cx_usmd_gov_api_core_error INTO lx_usmd_gov_api_core_error.
" CX_USMD_CORE_DYNAMIC_CHECK
lt_message = lx_usmd_gov_api_core_error->mt_messages.
ENDTRY.
ENDIF.

READ TABLE lt_message TRANSPORTING NO FIELDS WITH KEY msgty = 'E'.


IF sy-subrc EQ 0.
IF im_creq_attr-save_mode EQ 'A' OR im_creq_attr-save_mode EQ 'C'.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDIF.
ELSE.
ENDIF.

IF im_creq_attr-save_mode = 'B' OR im_creq_attr-save_mode = 'C' OR


im_creq_attr-save_mode = 'D'.
IF im_creq_attr-save_mode = 'C'.
READ TABLE et_message TRANSPORTING NO FIELDS WITH KEY msgty =
'E'.
IF sy-subrc EQ 0.
lo_conv_api_rfm->dequeue_entity_all( ).
lo_conv_api_rfm->dequeue_crequest( ).
RETURN.
ENDIF.
ENDIF.

READ TABLE et_message TRANSPORTING NO FIELDS WITH KEY msgty = 'E'.


IF sy-subrc NE 0.
IF im_creq_attr-save_mode = 'C' OR im_creq_attr-save_mode = 'D'.
lo_conv_api_rfm->set_action( iv_crequest_action = im_creq_attr-
action ).
ENDIF.
ENDIF.

* save mdg Change Request API


IF im_creq_attr-save_mode = 'D'.
lo_conv_api_rfm->set_successfully_checked( iv_mode = abap_true ).
ENDIF.

TRY.
lo_conv_api_rfm->save(
if_include_check_in_save_only = abap_false
).
lt_message = lo_conv_api_rfm->get_messages( ).
APPEND LINES OF lt_message TO et_message.
CATCH cx_usmd_gov_api_core_error INTO lx_usmd_gov_api_core_error.
" CX_USMD_CORE_DYNAMIC_CHECK
lt_message = lx_usmd_gov_api_core_error->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
CATCH cx_usmd_gov_api INTO lx_usmd_gov_api.
lt_message = lx_usmd_gov_api->mt_messages.
APPEND LINES OF lt_message TO et_message.
* REFRESH lt_message.
CLEAR lt_message.
ENDTRY.
ENDIF.

lo_conv_api_rfm->dequeue_entity_all( ).
lo_conv_api_rfm->dequeue_crequest( ).

COMMIT WORK.
ENDMETHOD.

METHOD map_2_db_api ##NEEDED.

* DATA ls_mara TYPE cmd_bs_mat_s_mara.


** DATA : lt_mara_tab TYPE TABLE OF cmd_bs_mat_s_mara.
* DATA ls_mara_x TYPE cmd_bs_mat_s_mara_x.
*
* DATA lt_makt TYPE cmd_bs_mat_t_makt.
* DATA lt_makt_x TYPE cmd_bs_mat_t_makt_x.
* DATA lt_maw1 TYPE cmd_prd_t_maw1_data.
* DATA lt_maw1_x TYPE cmd_prd_t_maw1_data.
* DATA lt_mlan1 TYPE cmd_bs_mat_t_steumm.
* DATA lt_marm TYPE cmd_bs_mat_t_steumm_x.
* DATA lt_marm_x TYPE cmd_bs_mat_t_marm_x.
* DATA lt_mean TYPE cmd_bs_mat_t_mean.
* DATA lt_mean_x TYPE cmd_bs_mat_t_mean_x.
* DATA lt_marc TYPE cmd_bs_mat_t_marc.
* DATA lt_marc_x TYPE cmd_bs_mat_t_marc_x.
* DATA lt_mlgn TYPE cmd_bs_mat_t_mlgn.
* DATA lt_mlgn_x TYPE cmd_bs_mat_t_mlgn_x.
* DATA lt_mlgt TYPE cmd_bs_mat_t_mlgt.
* DATA lt_mlgt_x TYPE cmd_bs_mat_t_mlgt_x.
* DATA lt_mard TYPE cmd_bs_mat_t_mard.
* DATA lt_mard_x TYPE cmd_bs_mat_t_mard_x.
* DATA lt_mbew TYPE cmd_bs_mat_t_mbew.
* DATA lt_mbew_x TYPE cmd_bs_mat_t_mbew_x.
* DATA lt_mvke TYPE cmd_bs_mat_t_mvke.
* DATA lt_malg TYPE /ugi4/_art_t_malg.
* DATA lt_wlk2 TYPE cmd_prd_t_wlk2_data.
* DATA lt_mbew1 TYPE cmd_bs_mat_t_mbew.
** DATA lt_sgt_marm TYPE sgt_t_marm.
** DATA lt_sgt_madka TYPE sgt_t_madka.
** DATA lt_sgt_mlgn TYPE sgt_t_mlgn.
** DATA lt_sgt_mvke TYPE sgt_t_mvke.
** DATA lt_sgt_mrp TYPE sgt_tt_mrp.
** DATA lt_sgt_mlgt TYPE sgt_t_mlgt.
* DATA lt_seasons TYPE fsh_tt_season_article .
* DATA lt_additionals TYPE /ugi4/_art_t_additiona.
* DATA lt_folup TYPE wrf_folup_typ_a_tty .
* DATA lt_textile_comp TYPE wrf_textile_comp_tty .
* DATA lt_textile_fibr TYPE wrf_textile_fibr_tty .
* DATA lt_hier TYPE cmd_prd_t_wrf_matgrp_sku_data.
* DATA lt_eina TYPE mmpr_eina.
* DATA lt_mvke_x TYPE cmd_bs_mat_t_mvke_x.
* DATA lt_mlan_purchase TYPE cmd_bs_mat_t_steumm.
* DATA lt_mlan_purchase_x TYPE cmd_bs_mat_t_steumm_x.
* DATA lt_mlan_sales TYPE cmd_bs_mat_t_steu.
* DATA lt_mlan_sales_x TYPE cmd_bs_mat_t_steu_x.
* DATA lt_mpgd TYPE cmd_bs_mat_t_mpgd.
* DATA lt_mpgd_x TYPE cmd_bs_mat_t_mpgd_x.
* DATA lt_mpop TYPE cmd_bs_mat_t_mpop.
* DATA lt_mpop_x TYPE cmd_bs_mat_t_mpop_x.
* DATA lt_notes TYPE cmd_bs_mat_t_notes.
* DATA lt_mamt TYPE mamt_tty.
* DATA lt_notes_lines TYPE cmd_bs_mat_t_notes_lines.
* DATA lt_notes_ins TYPE cmd_bs_mat_t_notes_lines.
* DATA lt_notes_lines_ins TYPE cmd_bs_mat_t_notes_lines.
** DATA lt_notes_x TYPE /ugi4/cmd_bs_rfm_t_notes_x.
* DATA lt_notes_plant TYPE cmd_bs_mat_t_notes_plant.
* DATA lt_notes_plant_lines TYPE cmd_bs_mat_t_notes_lines.
* DATA lt_notes_plant_x TYPE cmd_bs_mat_t_notes_plant_lines.
* DATA lt_notes_sales TYPE cmd_bs_mat_t_notes_sales.
* DATA lt_notes_sales_lines TYPE cmd_bs_mat_t_notes_sales_lines.
* DATA lt_notes_sales_x TYPE cmd_bs_mat_t_notes_sales_x.
* DATA lt_bom TYPE /ugi4/tt_ar_pp_bom.
** DATA lt_mapr TYPE /ugi4/mdc_tt_mapr_prc.
** DATA lt_prop TYPE /ugi4/mdc_tt_prop_prc.
** DATA lt_wlk1 TYPE /ugi4/mdc_tt_wlk1_prc.
* DATA lt_qmat TYPE cmd_bs_mat_t_qmat.
* DATA lt_qmat_x TYPE cmd_bs_mat_t_qmat_x.
* DATA lt_mdma TYPE cmd_bs_mat_t_mdma.
* DATA lt_mdma_x TYPE cmd_bs_mat_t_mdma_x.
* DATA lt_mkal TYPE cmd_bs_mat_t_mkal.
* DATA lt_mkal_x TYPE cmd_bs_mat_t_mkal_x.
* DATA lt_ckmlhd TYPE cmd_bs_mat_t_mla_ckmlhd.
* DATA lt_ckmlhd_x TYPE cmd_bs_mat_t_mla_ckmlhd_x.
* DATA lt_ckmlcr TYPE cmd_bs_mat_t_mla_ckmlcr.
* DATA lt_ckmlcr_x TYPE cmd_bs_mat_t_mla_ckmlcr_x.
* DATA lt_ckmlpr TYPE cmd_bs_mat_t_mla_ckmlpr.
* DATA lt_ckmlpr_x TYPE cmd_bs_mat_t_mla_ckmlpr_x.
* DATA lt_drad TYPE cmd_bs_drad_t_drad_db.
* DATA lt_drad_notes TYPE cmd_bs_drad_t_note_db.
* DATA lt_valuation TYPE mdm_clf_ts_valuation.
* DATA lt_classasgn TYPE mdm_clf_ts_classasgn.

*DATA : ls_data LIKE LINE OF mt_rfm_db_mat.


*
*
* LOOP AT im_creq_attr INTO DATA(ls_creq_attr).
** mara_tab.
* DATA(lt_mara_tab) = VALUE cmd_bs_mat_t_mara( FOR mara IN im_data-
mara_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mara ) ).
*
* DATA(lt_mara_x_tab) = VALUE cmd_bs_mat_t_mara_x( FOR mara_x_tab IN
im_data-mara_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mara_x_tab ) ).
*
** makt_tab.
* DATA(lt_makt_tab) = VALUE cmd_bs_mat_t_makt( FOR makt IN
im_data-makt_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( makt ) ).
*
* DATA(lt_makt_x_tab) = VALUE cmd_bs_mat_t_makt_x( FOR makt_x_tab
IN im_data-makt_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( makt_x_tab ) ).
** MAW1_tab.
*
* DATA(lt_maw1_tab) = VALUE cmd_prd_t_maw1_data( FOR maw1 IN
im_data-maw1_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( maw1 ) ).
*
* DATA(lt_maw1_x_tab) = VALUE cmd_prd_t_maw1_data_x( FOR
maw1_x_tab IN im_data-maw1_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( maw1_x_tab ) ).
** tax Need to write code.
**--------------------------------------------------------------------*
*
*
*
**--------------------------------------------------------------------*
** MARC .
* DATA(lt_marc_tab) = VALUE cmd_bs_mat_t_marc( FOR marc IN
im_data-marc_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( marc ) ).
*
* DATA(lt_marc_x_tab) = VALUE cmd_bs_mat_t_marc_x( FOR marc_x_tab
IN im_data-marc_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( marc_x_tab ) ).
** MARM : UOM .
*
* DATA(lt_marm_tab) = VALUE cmd_bs_mat_t_marm( FOR marm IN
im_data-marm_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( marm ) ).
*
* DATA(lt_marm_x_tab) = VALUE cmd_bs_mat_t_marm_x( FOR marm_x_tab
IN im_data-marm_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( marm_x_tab ) ).
*
** MEAN.
* DATA(lt_mean_tab) = VALUE cmd_bs_mat_t_mean( FOR mean IN
im_data-mean_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mean ) ).
*
* DATA(lt_mean_x_tab) = VALUE cmd_bs_mat_t_mean_x( FOR mean_x_tab
IN im_data-mean_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mean_x_tab ) ).
*
** MLEA .
* DATA(lt_mlea_tab) = VALUE cmd_prd_t_mlea_data( FOR mlea IN
im_data-mlea_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mlea ) ).
*
* DATA(lt_mlea_x_tab) = VALUE cmd_prd_t_mlea_data_x( FOR
mlea_x_tab IN im_data-mlea_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mlea_x_tab ) ).
**MAPR .
*
**MLGN .
* DATA(lt_mlgn_tab) = VALUE cmd_bs_mat_t_mlgn( FOR mlgn IN
im_data-mlgn_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mlgn ) ).
*
* DATA(lt_mlgn_x_tab) = VALUE cmd_bs_mat_t_mlgn_x( FOR mlgn_x_tab
IN im_data-mlgn_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mlgn_x_tab ) ).
**MLGT
* DATA(lt_mlgt_tab) = VALUE cmd_bs_mat_t_mlgt( FOR mlgt IN
im_data-mlgt_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mlgt ) ).
* DATA(lt_mlgt_x_tab) = VALUE cmd_bs_mat_t_mlgt_x( FOR mlgt_x_tab
IN im_data-mlgt_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mlgt_x_tab ) ).
*
** MPOP .
* DATA(lt_mpop_tab) = VALUE cmd_bs_mat_t_mpop( FOR mpop IN
im_data-mpop_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mpop ) ).
* DATA(lt_mpop_x_tab) = VALUE cmd_bs_mat_t_mpop_x( FOR mpop_x_tab
IN im_data-mpop_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mpop_x_tab ) ).
*
*
**MVKE
* DATA(lt_mvke_tab) = VALUE cmd_bs_mat_t_mvke( FOR mvke IN
im_data-mvke_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mvke ) ).
* DATA(lt_mvke_x_tab) = VALUE cmd_bs_mat_t_mvke_x( FOR mvke_x_tab
IN im_data-mvke_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mvke_x_tab ) ).
*
**MALG Layout modeles.
** DATA(lt_malg_tab) = VALUE /ugi4/_art_t_malg( FOR malg IN
im_data-malg_tab
** WHERE ( matnr = ls_creq_attr-matnr ) ( malg ) ).
*
** MBEW_tab.
* DATA(lt_mbew_tab) = VALUE cmd_bs_mat_t_mbew( FOR mbew IN
im_data-mbew_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mbew ) ).
*
** MBEW_tab.
* DATA(lt_mbew_x_tab) = VALUE cmd_bs_mat_t_mbew_x( FOR
mbew_x_tab IN im_data-mbew_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( mbew_x_tab ) ).
*
**WLK2.
* DATA(lt_wlk2_tab) = VALUE cmd_prd_t_wlk2_data( FOR wlk2 IN
im_data-wlk2_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( wlk2 ) ).
*
* DATA(lt_wlk2_x_tab) = VALUE cmd_prd_t_wlk2_data_x( FOR
wlk2_x_tab IN im_data-wlk2_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( wlk2_x_tab ) ).
*
**SGT MARM .
* DATA(lt_sgt_marm) = VALUE sgt_t_marm( FOR sgt_marm IN im_data-
sgt_marm
* WHERE ( matnr = ls_creq_attr-matnr ) ( sgt_marm ) ).
**SGT_MADKA.
*
* DATA(lt_sgt_madka) = VALUE sgt_t_madka( FOR sgt_madka IN
im_data-sgt_madka
* WHERE ( matnr = ls_creq_attr-matnr ) ( sgt_madka ) ).
*
**SGT_MLGN.
* DATA(lt_sgt_mlgn) = VALUE sgt_t_mlgn( FOR sgt_mlgn IN im_data-
sgt_mlgn
* WHERE ( matnr = ls_creq_attr-matnr ) ( sgt_mlgn ) ).
**SGT_MVKE.
* DATA(lt_sgt_mvke) = VALUE sgt_t_mvke( FOR sgt_mvke IN im_data-
sgt_mvke
* WHERE ( matnr = ls_creq_attr-matnr ) ( sgt_mvke ) ).
*
**SGT_MLGT.
* DATA(lt_sgt_mlgt) = VALUE sgt_t_mlgt( FOR sgt_mlgt IN im_data-
sgt_mlgt
* WHERE ( matnr = ls_creq_attr-matnr ) ( sgt_mlgt ) ).
** *SGT_Mrp.
*
* DATA(lt_sgt_mrp) = VALUE sgt_tt_mrp( FOR sgt_mrp IN im_data-
sgt_mrp
* WHERE ( matnr = ls_creq_attr-matnr ) ( sgt_mrp ) ).
*
** *FSH_seasons.
* DATA(lt_fsh_seasons_tab) = VALUE
cmd_prd_t_fsh_seasons_mat_data( FOR fsh_seasons_mat_tab IN im_data-
fsh_seasons_mat_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( fsh_seasons_mat_tab ) ).
*
* DATA(lt_fsh_seasons_x_tab) = VALUE
cmd_prd_t_fsh_seasons_mat_datx( FOR fsh_seasons_mat_x_tab IN im_data-
fsh_seasons_mat_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( fsh_seasons_mat_x_tab )
).
**additionals
* DATA(lt_additional_tab) = VALUE /UGI4/RFM_WTADDI( FOR
additional_tab IN im_data-additional_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( additional_tab ) ).
**substition.
* DATA(lt_folup_tab) = VALUE wrf_folup_typ_a_tty( FOR folup IN
im_data-folup
* WHERE ( original_art_nr = ls_creq_attr-matnr ) ( folup ) ).
*
** textile compostion .
* DATA(lt_textile_comp_tab) = VALUE wrf_textile_comp_tty( FOR
textile_comp IN im_data-textile_comp
* WHERE ( matnr = ls_creq_attr-matnr ) ( textile_comp ) ).
*
** textile Fiber code.
*
* DATA(lt_textile_fibr_tab) = VALUE wrf_textile_fibr_tty( FOR
textile_fibr IN im_data-textile_fibr
* WHERE ( matnr = ls_creq_attr-matnr ) ( textile_fibr ) ).
*
** article Hierarchy.
* DATA(lt_wrf_matgrp_sku_tab) = VALUE
cmd_prd_t_wrf_matgrp_sku_data( FOR wrf_matgrp_sku_tab IN im_data-
wrf_matgrp_sku_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( wrf_matgrp_sku_tab )
).
*
* DATA(lt_wrf_matgrp_sku_x_tab) = VALUE
cmd_prd_t_wrf_matgrp_sku_datax(
* FOR wrf_matgrp_sku_x_tab IN im_data-wrf_matgrp_sku_x_tab
* WHERE ( matnr = ls_creq_attr-matnr ) ( wrf_matgrp_sku_x_tab )
).
**BOM_TAB :
*
*DATA(lt_bom_tab) = VALUE /ugi4/tt_ar_pp_bom( FOR bom_tab IN im_data-
bom_tab
* WHERE ( mara = ls_creq_attr-matnr ) ( bom_tab ) ).
*
** DMS.
* DATA(lt_drad_tab) = VALUE cmd_bs_drad_t_drad_db(
* FOR drad_tab IN im_data-drad_tab
* WHERE ( objky = ls_creq_attr-matnr ) ( drad_tab ) )."#EC
CI_SORTSEQ
*
** DMS long text .
* DATA(lt_drad_x_tab) = VALUE cmd_prd_t_drad_data_x(
* FOR drad_x_tab IN im_data-drad_x_tab
* WHERE ( objky = ls_creq_attr-matnr ) ( drad_x_tab ) ).
*
** DMS Notes tab.
*
* DATA(lt_drad_notes_tab) = VALUE cmd_bs_drad_t_note_db(
* FOR drad_notes_tab IN im_data-drad_notes_tab
* WHERE ( objky = ls_creq_attr-matnr ) ( drad_notes_tab ) )."#EC
CI_SORTSEQ
*
*DATA(lt_drad_notes_x_tab) = VALUE cmd_prd_t_drad_notes_data_x(
* FOR drad_notes_x_tab IN im_data-drad_notes_x_tab
* WHERE ( objky = ls_creq_attr-matnr ) ( drad_notes_x_tab ) ).
*
*ls_data-matnr = ls_creq_attr-matnr.
*ls_data-cr_type = ls_creq_attr-cr_type.
*
*ls_data-data-mara_tab = lt_mara_tab.
*ls_data-data-mara_x_tab = lt_mara_x_tab.
*ls_data-data-makt_tab = lt_makt_tab.
*ls_data-data-makt_x_tab = lt_makt_x_tab.
*ls_data-data-marc_tab = lt_marc_tab.
*ls_data-data-marc_x_tab = lt_marc_x_tab.
**ls_data-data-mard_tab = lt_mard_tab.
**ls_data-data-mard_x_tab = lt_mard_x_tab.
*ls_data-data-marm_tab = lt_marm_tab.
*ls_data-data-marm_x_tab = lt_marm_x_tab.
*
*ls_data-data-mean_tab = lt_mean_tab.
*ls_data-data-mean_x_tab = lt_mean_x_tab.
*
*ls_data-data-mbew_tab = lt_mbew_tab.
*ls_data-data-mbew_x_tab = lt_mbew_x_tab.
*
*ls_data-data-mlgn_tab = lt_mlgn_tab.
*ls_data-data-mlgn_x_tab = lt_mlgn_x_tab.
*
*ls_data-data-mlgt_tab = lt_mlgt_tab.
*ls_data-data-mlgt_x_tab = lt_mlgt_x_tab.
*
*ls_data-data-mlgn_tab = lt_mlgn_tab.
*ls_data-data-mlgn_x_tab = lt_mlgn_x_tab.
*
*ls_data-data-mlgt_tab = lt_mlgt_tab.
*ls_data-data-mlgt_x_tab = lt_mlgt_x_tab.
*
*ls_data-data-mpop_tab = lt_mpop_tab.
*ls_data-data-mpop_x_tab = lt_mpop_x_tab.
*
*ls_data-data-mvke_tab = lt_mvke_tab.
*ls_data-data-mvke_x_tab = lt_mvke_x_tab.
*
*ls_data-data-additional_tab = lt_additional_tab.
*ls_data-data-bom_tab = lt_bom_tab.
**ls_data-data-malg_tab = lt_malg_tab.
*ls_data-data-wlk2_tab = lt_wlk2_tab.
*ls_data-data-wlk2_x_tab = lt_wlk2_x_tab.
*ls_data-data-maw1_tab = lt_maw1_tab.
*ls_data-data-maw1_x_tab = lt_maw1_x_tab.
*ls_data-data-mlea_x_tab = lt_mlea_x_tab.
*ls_data-data-mlea_tab = lt_mlea_tab.
*ls_data-data-fsh_seasons_mat_tab = lt_fsh_seasons_tab.
*ls_data-data-fsh_seasons_mat_x_tab = lt_fsh_seasons_x_tab.
*ls_data-data-wrf_matgrp_sku_tab = lt_wrf_matgrp_sku_tab.
*ls_data-data-wrf_matgrp_sku_x_tab = lt_wrf_matgrp_sku_x_tab.
*ls_data-data-drad_tab = lt_drad_tab.
*ls_data-data-drad_x_tab = lt_drad_x_tab.
*ls_data-data-drad_notes_tab = lt_drad_notes_tab.
*ls_data-data-drad_notes_x_tab = lt_drad_notes_x_tab.
*ls_data-data-sgt_mlgn = lt_sgt_mlgn.
*ls_data-data-sgt_marm = lt_sgt_marm.
*ls_data-data-sgt_madka = lt_sgt_madka.
*ls_data-data-sgt_mvke = lt_sgt_mvke.
*ls_data-data-sgt_mlgt = lt_sgt_mlgt.
*ls_data-data-sgt_mrp = lt_sgt_mrp.
*ls_data-data-textile_comp = lt_textile_comp_tab.
*ls_data-data-textile_fibr = lt_textile_fibr_tab.
*ls_data-data-folup = lt_folup_tab.
*
**ls_data-data-MAMT_TAB = lt_mamt
**ls_Data-data-listing_tab = lt_list
*
*
*
*ENDLOOP.

ENDMETHOD.

METHOD map_art_img_2sta.
DATA : lrt_data TYPE REF TO data,
lrs_data TYPE REF TO data,
lt_art_img TYPE /ugi4/_t_img_url_api,
* lsr_model_del TYPE REF TO data,
* lt_art_img_t type /ugi4/art_img,
ls_entity TYPE usmd_gov_api_s_ent_tabl,
lt_art_img_d TYPE TABLE OF /ugi4/art_img,
ls_art_img_d TYPE /ugi4/art_img.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE,


<lt_api_source> TYPE ANY TABLE,
<ls_model_data> TYPE any.
* <ls_model_del> TYPE any.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

DATA : lr_struc_url_key TYPE REF TO data,


lr_table_url_key TYPE REF TO data.

FIELD-SYMBOLS : <lt_key> TYPE ANY TABLE,


<ls_key> TYPE any.
io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key
IMPORTING
er_structure = lr_struc_url_key
er_table = lr_table_url_key
).

ASSIGN lr_struc_url_key->* TO <ls_key>.


ASSIGN lr_table_url_key->* TO <lt_key>.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

READ TABLE gt_entity_struc INTO DATA(ls_entity_struc) WITH KEY entity


= iv_entity.
CREATE DATA lrt_data TYPE SORTED TABLE OF (ls_entity_struc-structure)
WITH UNIQUE DEFAULT KEY.
ASSIGN lrt_data->* TO <lt_data>.
CREATE DATA lrs_data LIKE LINE OF <lt_data>.
ASSIGN lrs_data->* TO <ls_model_data>.
IF iv_entity = 'IMAGEURL'.
DATA(lv_tabname) = 'ART_IMG'.
ENDIF.

ASSIGN COMPONENT lv_tabname OF STRUCTURE is_api_data TO


<lt_api_source>.
CHECK sy-subrc EQ 0.
lt_art_img = CORRESPONDING #( <lt_api_source> ).

IF lt_art_img IS NOT INITIAL.


SELECT matnr, img_seq, img_guid
FROM /ugi4/art_img
FOR ALL ENTRIES IN @lt_art_img
WHERE matnr = @lt_art_img-matnr
AND img_seq = @lt_art_img-img_seq
INTO TABLE @DATA(lt_art_img_temp).
IF sy-subrc NE 0.
CLEAR lt_art_img_temp.
ENDIF.
ENDIF.

LOOP AT lt_art_img ASSIGNING FIELD-SYMBOL(<fs_art_img>) WHERE del_ind


EQ space.
TRY.
DATA(lv_uuid) = cl_system_uuid=>create_uuid_x16_static( ).
cl_system_uuid=>convert_uuid_x16_static(
EXPORTING
uuid = lv_uuid " UUID
IMPORTING
uuid_c22 = DATA(lv_uuid22) " UUID
).
CATCH cx_uuid_error. " Error Class for UUID Processing Errors
CLEAR : lv_uuid, lv_uuid22.
ENDTRY.
IF lv_uuid22 IS NOT INITIAL.
* MOVE lv_uuid22 TO <fs_art_img>-img_guid.
<fs_art_img>-img_guid = lv_uuid22.
ENDIF.
ENDLOOP.

LOOP AT lt_art_img ASSIGNING FIELD-SYMBOL(<fs_class_api>).


ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<ls_mara>).
IF <ls_mara> IS ASSIGNED.
* <ls_mara> = <fs_class_api>-matnr.
<ls_mara> = gv_matnr_final.
ENDIF.

ASSIGN COMPONENT 'SEQUENCE' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<ls_sequence>).
IF <ls_sequence> IS ASSIGNED.
<ls_sequence> = <fs_class_api>-img_seq.
ENDIF.

ASSIGN COMPONENT 'IMG_GUID' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<ls_img_guid>).
READ TABLE lt_art_img_temp INTO DATA(ls_art_img_temp) WITH KEY
matnr = <fs_class_api>-matnr

img_seq = <fs_class_api>-img_seq.
IF sy-subrc NE 0.
IF <ls_img_guid> IS ASSIGNED.
<ls_img_guid> = <fs_class_api>-img_guid.
ENDIF.
ELSE.
IF <ls_img_guid> IS ASSIGNED.
<ls_img_guid> = ls_art_img_temp-img_guid.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'IMG_URL' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<ls_img_url>).
IF <ls_img_url> IS ASSIGNED.
<ls_img_url> = <fs_class_api>-img_url.
ENDIF.

INSERT <ls_model_data> INTO TABLE <lt_data>.


ENDLOOP.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.
ENDIF.

READ TABLE lt_art_img WITH KEY del_ind = abap_true TRANSPORTING NO


FIELDS .
IF sy-subrc EQ 0.

LOOP AT lt_art_img INTO DATA(ls_art_img) WHERE del_ind =


abap_true.
ls_art_img_d-matnr = ls_art_img-matnr.
ls_art_img_d-img_seq = ls_art_img-img_seq.
APPEND ls_art_img_d TO lt_art_img_d.
CLEAR ls_art_img_d.
ENDLOOP.

IF lt_art_img_d IS NOT INITIAL.


SELECT matnr, img_seq, img_guid, img_url
##SELECT_FAE_WITH_LOB[IMG_URL]
FROM /ugi4/art_img
FOR ALL ENTRIES IN @lt_art_img_d
WHERE matnr = @lt_art_img_d-matnr
AND img_seq = @lt_art_img_d-img_seq
INTO TABLE @DATA(lt_art_img_t).
IF sy-subrc NE 0.
CLEAR lt_art_img_t.
ENDIF.
ENDIF.

LOOP AT lt_art_img INTO ls_art_img WHERE del_ind = abap_true.


READ TABLE lt_art_img_t INTO DATA(ls_art_img_t) WITH KEY matnr
= ls_art_img-matnr
img_seq =
ls_art_img-img_seq.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_art_img TO <ls_key>.
ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_key> TO <ls_mara>.
IF <ls_mara> IS ASSIGNED.
<ls_mara> = ls_art_img_t-matnr.
ENDIF.
INSERT <ls_key> INTO TABLE <lt_key>.
CLEAR <ls_key>.
* INSERT <ls_model_del> INTO TABLE ct_entity_del.
ENDIF.
ENDLOOP.
ENDIF.
IF <lt_key> IS ASSIGNED AND <lt_key> IS NOT INITIAL.
ls_entity-entity = iv_entity.
GET REFERENCE OF <lt_key> INTO ls_entity-tabl.
* INSERT ls_entity INTO TABLE lt_entity.
INSERT ls_entity INTO TABLE ct_entity_del.
ENDIF.

ENDMETHOD.
METHOD map_characval_stag.

DATA : lrt_data TYPE REF TO data,


lrs_data TYPE REF TO data.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE,


<lt_api_source> TYPE ANY TABLE,
<ls_model_data> TYPE any.

READ TABLE gt_entity_struc INTO DATA(ls_entity_struc) WITH KEY entity


= iv_entity.
CREATE DATA lrt_data TYPE SORTED TABLE OF (ls_entity_struc-structure)
WITH UNIQUE DEFAULT KEY.
ASSIGN lrt_data->* TO <lt_data>.
CREATE DATA lrs_data LIKE LINE OF <lt_data>.
ASSIGN lrs_data->* TO <ls_model_data>.

ASSIGN COMPONENT 'CHARACVAL_TAB' OF STRUCTURE is_api_data TO


<lt_api_source>.

LOOP AT <lt_api_source> ASSIGNING FIELD-SYMBOL(<ls_mara_conf>).

MOVE-CORRESPONDING <ls_mara_conf> TO <ls_model_data>.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.

INSERT <ls_model_data> INTO TABLE <lt_data>.


ENDLOOP.

CHECK <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.

* INSERT ls_entity_data INTO TABLE lt_entity_data.

*
* TRY.
* co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.

ENDMETHOD.

METHOD map_class_gen_stag.

DATA : lrt_data TYPE REF TO data,


lrs_data TYPE REF TO data.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.

FIELD-SYMBOLS : <lt_data> TYPE ANY TABLE,


<lt_api_source> TYPE ANY TABLE,
<ls_model_data> TYPE any.

READ TABLE gt_entity_struc INTO DATA(ls_entity_struc) WITH KEY entity


= iv_entity.
CREATE DATA lrt_data TYPE SORTED TABLE OF (ls_entity_struc-structure)
WITH UNIQUE DEFAULT KEY.
ASSIGN lrt_data->* TO <lt_data>.
CREATE DATA lrs_data LIKE LINE OF <lt_data>.
ASSIGN lrs_data->* TO <ls_model_data>.

IF iv_entity = 'CLASS_GEN'.
DATA(lv_tabname) = 'CLASS_GEN_TAB'.
ELSEIF iv_entity = 'CHAR_PROF'.
lv_tabname = 'CHAR_PROF_TAB'.
ENDIF.

ASSIGN COMPONENT lv_tabname OF STRUCTURE is_api_data TO


<lt_api_source>.

LOOP AT <lt_api_source> ASSIGNING FIELD-SYMBOL(<ls_mara_conf>).

ASSIGN COMPONENT 'CLASS_VAR' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_class>).
ASSIGN COMPONENT 'KLART_VAR' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_klart>).

ASSIGN COMPONENT 'CHARP' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_charp>).
ASSIGN COMPONENT 'CHARP_DUM' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_charpd>).
IF <lfs_class> IS ASSIGNED.
ASSIGN COMPONENT 'CLASS_VAR' OF STRUCTURE <ls_mara_conf> TO
FIELD-SYMBOL(<fs_class_var>).
IF sy-subrc EQ 0.
<lfs_class> = <fs_class_var>.
ENDIF.
IF <lfs_klart> IS ASSIGNED.
ASSIGN COMPONENT 'KLART_VAR' OF STRUCTURE <ls_mara_conf> TO
FIELD-SYMBOL(<fs_klart_var>).
IF sy-subrc EQ 0.
<lfs_klart> = <fs_klart_var>.
ENDIF.
* <lfs_klart> = ls_mara_conf-klart.
ENDIF.
ENDIF.

*For entity CHAR_PROF


IF <lfs_charp> IS ASSIGNED.
ASSIGN COMPONENT 'CHARP' OF STRUCTURE <ls_mara_conf> TO FIELD-
SYMBOL(<fs_charp>).
IF sy-subrc EQ 0.
<lfs_charp> = <fs_charp>.
ENDIF.
IF <lfs_charpd> IS ASSIGNED.
<lfs_charpd> = <fs_charp>.
ENDIF.
ENDIF.

ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-


SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDLOOP.

CHECK <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.

* INSERT ls_entity_data INTO TABLE lt_entity_data.

INSERT ls_entity_data INTO TABLE ct_entity_data.

* TRY.
* co_conv_api->write_entity_data( it_entity_data = lt_entity_data
).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.

ENDMETHOD.
METHOD map_dcst_tab_2sta.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
ls_api_data TYPE /ugi4/rfm_s_dbstruc_in.
FIELD-SYMBOLS : <fs_target> TYPE any,
<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<lt_data> TYPE ANY TABLE,
<ls_api_source> TYPE any,
<ls_model_data> TYPE any.

CHECK is_api_data IS NOT INITIAL.

ls_api_data = is_api_data.

IF ( iv_entity = 'MARCDC' ) OR ( iv_entity = 'MARCST').


DATA(lv_tabname) = 'MARC_TAB'.
ELSEIF ( iv_entity = 'MBEW_DC' ) OR ( iv_entity = 'MBEW_ST').
lv_tabname = 'MBEW_TAB'.
ELSEIF ( iv_entity = 'MPOP_DC' ) OR ( iv_entity = 'MPOP_ST').
lv_tabname = 'MPOP_TAB'.
ENDIF.

DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,


ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data.
DATA : lr_struc_key TYPE REF TO data,
lr_table_key TYPE REF TO data.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

CALL METHOD /ugi4/cl_mdg_bs_article_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.
TRANSLATE lv_source TO UPPER CASE.

ASSIGN COMPONENT lv_tabname OF STRUCTURE ls_api_data TO


<lt_api_source>.
IF <lt_api_source> IS ASSIGNED.

IF iv_entity EQ 'MARCST' OR iv_entity EQ 'MARCDC'


OR iv_entity EQ 'MPOP_DC' OR iv_entity EQ 'MPOP_ST'.
LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.
IF <ls_api_source> IS ASSIGNED .
* ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_mara>).
* IF <lfs_mara> IS ASSIGNED.
* <lfs_mara> = gv_matnr_final.
* ENDIF.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_werks>).
IF <lfs_werks> IS ASSIGNED.
READ TABLE it_t001w TRANSPORTING NO FIELDS WITH KEY werks =
<lfs_werks>

vlfkz = 'A'.
IF sy-subrc = 0 AND ( iv_entity EQ 'MARCST' OR iv_entity EQ
'MPOP_ST' ).
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
DATA(lv_new) = abap_true.
ENDIF.

READ TABLE it_t001w TRANSPORTING NO FIELDS WITH KEY werks =


<lfs_werks>

vlfkz = 'B'.
IF sy-subrc = 0 AND ( iv_entity EQ 'MARCDC' OR iv_entity EQ
'MPOP_DC' ).
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
lv_new = abap_true.
ENDIF.

IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED AND


lv_new IS NOT INITIAL.
/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO
FIELD-SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
INSERT <ls_model_data> INTO TABLE <lt_data>.
ENDIF.
CLEAR lv_new.
ENDIF.
ENDIF.
* ENDIF.
ENDLOOP.
ENDIF.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


INSERT <ls_model_data> INTO TABLE <lt_data>.
ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
insert ls_entity_Data into TABLE ct_entity_data .
* INSERT ls_entity_data INTO TABLE lt_entity_data.
*
* TRY.
* io_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
ENDIF.

IF iv_entity EQ 'MBEW_ST' OR iv_entity EQ 'MBEW_DC' .


LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.
IF <ls_api_source> IS ASSIGNED .
ASSIGN COMPONENT 'BWKEY' OF STRUCTURE <ls_api_source> TO
FIELD-SYMBOL(<lfs_bwkey>).
IF <lfs_bwkey> IS ASSIGNED.

READ TABLE it_t001w TRANSPORTING NO FIELDS WITH KEY bwkey =


<lfs_bwkey>

vlfkz = 'A'.
IF sy-subrc = 0 AND iv_entity EQ 'MBEW_ST' .
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
lv_new = abap_true.
ENDIF.

READ TABLE it_t001w TRANSPORTING NO FIELDS WITH KEY werks =


<lfs_bwkey>

vlfkz = 'B'.
IF sy-subrc = 0 AND iv_entity EQ 'MBEW_DC'.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
lv_new = abap_true.
ENDIF.
IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED AND
lv_new IS NOT INITIAL.
/ugi4/cl_mdg_bs_article_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target> ).

ASSIGN COMPONENT 'BWKEY' OF STRUCTURE <fs_target> TO


FIELD-SYMBOL(<fs_bwkey>).
IF sy-subrc EQ 0.
<fs_bwkey> = <lfs_bwkey>.
ENDIF.

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO
<lfs_mara>.
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
CLEAR lv_new.

INSERT <ls_model_data> INTO TABLE <lt_data>.


ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


INSERT <ls_model_data> INTO TABLE <lt_data>.
ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.
* INSERT ls_entity_data INTO TABLE lt_entity_data.
INSERT ls_entity_data INTO TABLE ct_entity_data.

* TRY.
* co_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.

* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
ENDIF.
ENDMETHOD.

METHOD map_fms_2sta.
DATA: lr_source TYPE REF TO data,
lr_target TYPE REF TO data,
lt_message TYPE usmd_t_message,
lv_tab TYPE name_komp.

FIELD-SYMBOLS: <ls_model_data> TYPE any,


<fs_target> TYPE any,
<lt_data> TYPE ANY TABLE,
<fs_source> TYPE any,
<lt_api_source> TYPE ANY TABLE,
<ls_api_source> TYPE any.

IF iv_entity = 'SEASON'.
lv_tab = 'FSH_SEASONS_MAT_TAB'.
ELSEIF iv_entity = 'SGTMARM'.
lv_tab = 'SGT_MARM'.
ELSEIF iv_entity = 'SGTMLGT'.
lv_tab = 'SGT_MLGT'.
ELSEIF iv_entity = 'SGTMLGN'.
lv_tab = 'SGT_MLGN'.
ELSEIF iv_entity = 'SGTMVKE'.
lv_tab = 'SGT_MVKE'.
ELSEIF iv_entity = 'SGTMRP'.
lv_tab = 'SGT_MRP'.
ELSEIF iv_entity = 'SGTMRPGN'.
lv_tab = 'SGT_MRP_GN'.
ELSEIF iv_entity = 'SGTMADKA'.
lv_tab = 'SGT_MADKA'.
ELSEIF iv_entity = 'SGTEIN'.
lv_tab = 'EINSGT'.
ELSEIF iv_entity = 'WRF_FOLUP'.
lv_tab = 'FOLUP'.
ENDIF.

CHECK is_api_data IS NOT INITIAL.


DATA(ls_data) = is_api_data .

* Model Structure
DATA : "lt_entity_data TYPE usmd_gov_api_ts_ent_data,
ls_entity_data TYPE LINE OF usmd_gov_api_ts_ent_data ##NEEDED.

DATA : lr_struc_key TYPE REF TO data,


lr_table_key TYPE REF TO data.

io_conv_api->get_entity_structure(
EXPORTING
iv_entity_name = iv_entity
iv_struct_type = io_conv_api->gc_struct_key_attr
IMPORTING
er_structure = lr_struc_key
er_table = lr_table_key
).

ASSIGN lr_table_key->* TO <lt_data>.


ASSIGN lr_struc_key->* TO <ls_model_data>.

CALL METHOD /ugi4/cl_mdg_bs_ar_fms_acces=>get_structures(


EXPORTING
i_entity = iv_entity
IMPORTING
ev_source = DATA(lv_source)
ev_target = DATA(lv_target) ).

CREATE DATA lr_source TYPE (lv_source).


ASSIGN lr_source->* TO <fs_source>.

CREATE DATA lr_target TYPE (lv_target).


ASSIGN lr_target->* TO <fs_target>.

ASSIGN COMPONENT lv_tab OF STRUCTURE ls_data TO <lt_api_source>.

IF <lt_api_source> IS ASSIGNED.

LOOP AT <lt_api_source> ASSIGNING <ls_api_source>.


IF <fs_source> IS ASSIGNED AND <fs_target> IS ASSIGNED.
MOVE-CORRESPONDING <ls_api_source> TO <fs_source>.
/ugi4/cl_mdg_bs_ar_fms_acces=>smt_mapping_2sta(
EXPORTING
i_entity = iv_entity
is_source = <fs_source>
IMPORTING
es_target = <fs_target>
CHANGING et_message = lt_message ).

MOVE-CORRESPONDING <fs_target> TO <ls_model_data>.


ASSIGN COMPONENT 'MARA' OF STRUCTURE <ls_model_data> TO FIELD-
SYMBOL(<lfs_mara>).
IF <lfs_mara> IS ASSIGNED.
<lfs_mara> = gv_matnr_final.
ENDIF.
ENDIF.

INSERT <ls_model_data> INTO TABLE <lt_data>.


ENDLOOP.
ENDIF.

IF <lt_data> IS ASSIGNED AND <lt_data> IS NOT INITIAL.


ls_entity_data-entity = iv_entity.
GET REFERENCE OF <lt_data> INTO ls_entity_data-entity_data.

* INSERT ls_entity_data INTO TABLE lt_entity_data.


INSERT ls_entity_data INTO TABLE ct_entity_data.

* TRY.
* co_conv_api->write_entity_data( it_entity_data =
lt_entity_data ).
* CATCH cx_usmd_gov_api_core_error. "
CX_USMD_CORE_DYNAMIC_CHECK
* CATCH BEFORE UNWIND cx_usmd_gov_api_entity_write. " RESUMABLE
Error While Writing an Entity
* CATCH cx_usmd_gov_api. " General
Processing Error GOV_API
* ENDTRY.
* CLEAR : lt_entity_data,ls_entity_data,<lt_data>.
ENDIF.

ENDMETHOD.
ENDCLASS.

You might also like