06-01-2007 3:02 PM
First the code:
type-pools ABAP.
DATA: l_exceptionsTable TYPE ABAP_FUNC_EXCPBIND_TAB,
L_ParameterTypeStruct TYPE REF TO cl_abap_structdescr,
L_ParameterTypeTable TYPE REF TO cl_abap_structdescr,
L_ParameterType TYPE REF TO cl_abap_typedescr,
L_ParameterTypeElem TYPE REF TO cl_abap_elemdescr,
L_ParameterTab TYPE STANDARD TABLE OF REF TO cl_abap_structdescr
,
L_parametersTable TYPE ABAP_FUNC_PARMBIND_TAB,
L_wa_parametersTable TYPE ABAP_FUNC_PARMBIND,
L_CompTab TYPE cl_abap_structdescr=>component_table,
L_CompTabInc TYPE ABAP_COMPONENT_VIEW_TAB ,
L_Component TYPE CHAR30,
L_Data_Index TYPE I,
l_flag_as_include TYPE C.
DATA: dref TYPE REF TO DATA.
FIELD-SYMBOLS: <l_parametersTable> TYPE LINE OF ZPARAMDATA_TAB,
<L_Struct_Components> TYPE abap_componentdescr,
<L_Struct_Components2> TYPE abap_simple_componentdescr,
<fs> TYPE standard table,
<fs1> TYPE ANY,
<l_datafield> TYPE ZDATAFIELDS.
***********************************************************************
Parameters
***********************************************************************
LOOP AT att_PARAMETERSTABLE ASSIGNING <l_parametersTable>.
L_ParameterType ?= cl_abap_typedescr=>describe_by_name(
<l_parametersTable>-dbfield ).
IF L_ParameterType->KIND = 'S'.
Cast to struct
IF <l_parametersTable>-kind <> abap_func_tables.
L_ParameterTypeStruct ?= L_ParameterType.
CREATE DATA dref TYPE HANDLE L_ParameterTypeStruct.
ASSIGN dref->* TO <fs> CASTING TYPE HANDLE L_ParameterTypeStruct.
IF L_ParameterTypeStruct->HAS_INCLUDE = abap_true.
L_CompTabInc = L_ParameterTypeStruct->get_included_view( ).
l_flag_as_include = abap_true.
ELSE.
L_CompTab = L_ParameterTypeStruct->get_components( ).
ENDIF.
Cast to table
ELSE.
L_ParameterTypeTable ?= L_ParameterType.
CREATE DATA dref TYPE HANDLE L_ParameterTypeTable.
ASSIGN dref->* TO <fs> CASTING TYPE HANDLE L_ParameterTypeTable.
IF L_ParameterTypeTable->HAS_INCLUDE = abap_true.
L_CompTabInc = L_ParameterTypeTable->get_included_view( ).
ELSE.
L_CompTab = L_ParameterTypeTable->get_components( ).
l_flag_as_include = abap_true.
ENDIF.
ENDIF.
IF l_flag_as_include = abap_true.
LOOP AT L_CompTabInc ASSIGNING <L_Struct_Components2>.
L_Component = <L_Struct_Components2>-name.
Because <FS> is only known at runtime is needed to assign to
another field Symbol
Assign component L_Component of structure <FS> to <FS1>.
Read field data from excel hashed internal table
READ TABLE att_datafields ASSIGNING <l_datafield> WITH KEY
STRUCT = <l_parametersTable>-dbfield FIELD =
<L_Struct_Components2>-name FIELDTYPE = 'STRUCT'.
Assign data to the strucure
READ TABLE <l_datafield>-FIELDVALUES INDEX L_Data_Index INTO <FS1>
.
CLEAR <l_datafield>-FIELDVALUES.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT L_CompTab ASSIGNING <L_Struct_Components>.
L_Component = <L_Struct_Components>-name.
Because <FS> is only known at runtime is needed to assign to
another field Symbol
Assign component L_Component of structure <FS> to <FS1>.
Read field data from excel hashed internal table
READ TABLE att_datafields ASSIGNING <l_datafield> WITH KEY
STRUCT = <l_parametersTable>-dbfield FIELD =
<L_Struct_Components>-name FIELDTYPE = 'STRUCT'.
Assign data to the strucure
READ TABLE <l_datafield>-FIELDVALUES INDEX L_Data_Index INTO <FS1>
.
CLEAR <l_datafield>-FIELDVALUES.
CLEAR l_flag_as_include.
ENDLOOP.
ENDIF.
Assign reference in the parameters table
<l_parametersTable>-value = dref.
ELSE.
TRATAAARR CAMPOS SIMPLES
L_ParameterTypeElem ?= L_ParameterType.
CREATE DATA dref TYPE HANDLE L_ParameterTypeElem.
ASSIGN dref->* TO <fs1> CASTING TYPE HANDLE L_ParameterTypeElem.
READ TABLE att_datafields ASSIGNING <l_datafield> WITH KEY
STRUCT = <l_parametersTable>-dbfield FIELD =
<L_Struct_Components>-name FIELDTYPE = 'FIELD'.
<L_Struct_Components>-Type->ABSOLUTE_NAME+6 FIELDTYPE = 'FIELD'.
READ TABLE <l_datafield>-FIELDVALUES INDEX L_Data_Index INTO <fs1>
.
<l_parametersTable>-value = dref.
CLEAR <l_datafield>-FIELDVALUES.
ENDIF.
L_wa_parametersTable-value = <l_parametersTable>-value.
L_wa_parametersTable-tables_wa = <l_parametersTable>-tables_wa.
L_wa_parametersTable-kind = <l_parametersTable>-kind.
L_wa_parametersTable-name = <l_parametersTable>-name.
INSERT L_wa_parametersTable INTO TABLE l_parametersTable.
clear L_wa_parametersTable.
clear L_ParameterTypeStruct.
clear L_ParameterTypeTable.
ENDLOOP.
call function att_bapi_name
PARAMETER-TABLE
l_parametersTable
EXCEPTION-TABLE
l_exceptionsTable.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
EXPORTING
WAIT =
IMPORTING
RETURN =
I'm using bapi BAPI_MATERIAL_SAVEDATA to test and the error happen with table EXTENSIONIN.
The error says that types are incompatible, EXTENSIONIN. is with "u" type and should be "h" type.
How can I correct the code to overcome this problem ?
06-01-2007 3:21 PM