How to load multiple target tables simultaneously in single interface?
I have a requirement where I have to load data into two target tables in single interface simultaneously. Reason is to populate parent-child relationship on target side as it is coming from the source side.
For eg: I have 2 headers and 10 corresponding lines in source. Now I want load 2 headers into T1 and 10 lines into T2 simultaneously.
Eg. SOURCE_TABLE
HeaderId HeaderDesc LineId LineDesc
1 AAA 10 QQQ
1 AAA 20 WWW
2 BBB 30 ZZZ
2 BBB 10 XXX
TARGET_TABLES:
TARGET_HEADER
HeaderId HeaderDesc
1 AAA
2 BBB
TARGET_LINE
HeaderId LineId LineDesc
1 10 QQQ
1 20 WWW
2 30 ZZZ
2 10 XXX
I would appreciate if anyone can provide solution in this scenario.
Thanks in advance.
Giri
Edited by: user10993896 on Apr 13, 2009 2:56 PM
Edited by: GiriM on Apr 14, 2009 10:47 AM
Hi Giri,
Let me try to build an example... If I misunderstood your requirement please, let me know!
1) Source table Tab_S
create table Tab_S as (cs1 number, cs2 varchar2(10))
2) Table Parent (P)
create table Tab_P as (cp1 number, cp2 varchar2(10))
3) Table Child (C)
create table Tab_C as (cc1 number, cc2 varchar2(10), cp1 number)
4) Function F$_Tab_C (create it in a ODI procedure)
4.1 - step 1
Create or Replace
Function F$_Tab_C (p_cp2 varchar2, p_cc1 number,p_cc2 varchar2, cp_cp1 number) return varchar2 as
begin
insert into Tab_C (cc1, cc2, cp1)
values (p_cc1, p_cc2, p_cp1);
return p_cp2;
end;
associate this step to an procedure option like "Create_Function"
4.2 - step 1
Drop Function F$_Tab_C
associate this step to an procedure option like "Drop_Function"
4.3 - Step 2
Disable the FK constraint and parent and child
associate this step to an procedure option like "Disable_Constraint"
4.4 - Step 3
Enable the FK constraint
associate this step to an procedure option like "Enable_Constraint"
5) ODI interface:
Source: Tab_S
Target: Tab_P
Mapping:
cp1 ---> cs1
cp2 ---> F$_Tab_C(cs2, 123, 'abc', cp1)
6) ODI Package with all flow:
6.1 - Drag and drop the procedure and put the options:
"Create_Function" yes
"Disable_Constraint" yes
"Drop_Function" no
"Enable_Constraint" no
6.2 - Drag and drop the interface
6.3 - Drag and drop the procedure (again) and put the options:
"Create_Function" no
"Disable_Constraint" no
"Drop_Function" yes (optional, can let as NO if you wish)
"Enable_Constraint" yes
These are the necessary steps.... Maybe there is some syntax error because I build all in a notepad and do not compiled it in the DB. It is just to show you the general idea.
Maybe you can be a little afraid about disable the FK but it is OK because you can guarantee the relationship by logic (funcion).
The only point is that you must be the only one working at the target tables during the process.
Make any sense in your case?
Similar Messages
-
ODI Multi Target tables insert using single interface
Hi
I am facing an issue in ODI with multiple target tables insert.
I have a source table in Sybase ASE and want to insert the data in two different target tables which are in Sybase IQ.
Any suggestion would be appreciated !
Thanks in advance.
Best Regards
Sanchit AggarwalHave you tried using IKM Oracle Multi Table Insert?
-
How to show multiple dynamic tables on a single screen?
right now im displaying alv for singlr attribute of dimension.
eg for dimension PRODUCT attribute PROFITCENTER im displaying in alv when user executes it.
but the requirement is that multiple attributes can be there so multiple tables is to be displayed on a single screen.
User basically wants to see data of all attributes. if there are 10 attributes hee wants to see 10 tables as every attribute has a different table.
what i have achieved is below in snapshots. only one attribute table PRODUCT im able to display. since i believe multiple headers cant be displyed in alv so even if i display multiple dynamically populated tables on a single screen then it will be fine.
i have also ADDED my code below: ZMDREPORT
this report is for SAP BPC.
*& Report ZMDREPORT
REPORT zmdreport.
TABLES /1cpmb/bfrdp3rp.
DATA: gw_datatbl TYPE tabname,
gw_datatbl1 TYPE tabname,
gw_descrptbl TYPE tabname,
gw_attribute TYPE tabname.
DATA:
BEGIN OF gw_attr,
appset_id TYPE uja_dim_attr-appset_id,
dimension TYPE uja_dim_attr-dimension,
tech_name TYPE uja_dim_attr-tech_name,
attribute_name TYPE uja_dim_attr-attribute_name,
caption TYPE uja_dim_attr-caption,
END OF gw_attr,
gt_attr LIKE TABLE OF gw_attr.
DATA: gt_slis_fcat1 TYPE slis_t_fieldcat_alv,
gw_slis_fcat1 LIKE LINE OF gt_slis_fcat1.
DATA : gt_except TYPE TABLE OF zbpcbt007,
gw_except LIKE LINE OF gt_except,
gt_except_t TYPE TABLE OF zbpcbt007,
gt_attrib TYPE TABLE OF tabname,
gw_attrib LIKE LINE OF gt_attrib.
DATA: gr_r_ref TYPE REF TO data.
DATA:BEGIN OF gw_mdr,
appset_id TYPE uj_appset_id,
dimension TYPE uj_dim_name,
reasoncd TYPE zmdreason,
refdimension TYPE uj_dim_name,
attrib TYPE uj_attr_name,
END OF gw_mdr,
gt_mdr1 LIKE TABLE OF gw_mdr,
gt_mdr2 LIKE TABLE OF gw_mdr,
gt_mdtable1 TYPE zbpctt_attr,
gt_mdtable2 TYPE zbpctt_attr,
gw_mdtable2 LIKE LINE OF gt_mdtable2,
gt_mdtable3 TYPE zbpctt_attr,
gt_mdtable4 TYPE zbpctt_attr,
gw_mdtable4 LIKE LINE OF gt_mdtable4,
BEGIN OF gw_finalattr,
dim(32) TYPE c,
END OF gw_finalattr,
gt_finalattr LIKE TABLE OF gw_finalattr,
gt_tab1 LIKE TABLE OF gw_finalattr,
gw_tab1 LIKE LINE OF gt_tab1,
gt_tab2 LIKE TABLE OF gw_finalattr,
gw_tab2 LIKE LINE OF gt_tab2.
FIELD-SYMBOLS: <gfs_tab1> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <gfs_tab2> TYPE STANDARD TABLE,
<gfs_tab3> TYPE STANDARD TABLE,
<gfs_tab4> TYPE STANDARD TABLE.
FIELD-SYMBOLS:<gfs_attr> TYPE any,
<gfs_field3> TYPE any,
<gfs_field4> TYPE any.
DATA: gw_sortcond TYPE string.
FIELD-SYMBOLS: <gfs_t_final> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <gfs_final> TYPE any.
FIELD-SYMBOLS: <gfs_data> TYPE any .
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_env TYPE uja_dimension-appset_id OBLIGATORY.
PARAMETERS: p_dim TYPE uja_dimension-dimension OBLIGATORY.
SELECT-OPTIONS: s_member FOR /1cpmb/bfrdp3rp-mbr_name .
PARAMETERS: p_hir TYPE /1cpmb/bfrdp3rp-/cpmb/hir.
PARAMETERS:p_attr TYPE uj_attr_name MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_radio1 RADIOBUTTON GROUP g1 USER-COMMAND abc DEFAULT 'X',
p_radio2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_reason TYPE zbpcbt007-reasoncd MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b3.
*********************************************************************alv
DATA :gt_fcat TYPE lvc_t_fcat.
DATA: gw_ok_code TYPE sy-ucomm,
gw_okcode TYPE sy-ucomm.
DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
gw_g_container TYPE scrfname VALUE 'CC1',
go_grid1 TYPE REF TO cl_gui_alv_grid.
DATA:BEGIN OF gw_table,
dimension TYPE uja_dimension-dimension,
END OF gw_table,
gt_tab LIKE TABLE OF gw_table ,
BEGIN OF gw_member,
mbr_name TYPE uj_dim_member,
END OF gw_member ,
gt_member LIKE TABLE OF gw_member,
BEGIN OF gw_hir ,
hir TYPE /1cpmb/bfrdp3rp-/cpmb/hir,
END OF gw_hir,
gt_hir LIKE TABLE OF gw_hir.
DATA:gt_slis_fcat2 TYPE slis_t_fieldcat_alv,
gw_slis_fcat2 LIKE LINE OF gt_slis_fcat2 .
DATA: lr_data TYPE REF TO data.
DATA :gt_fcat1 TYPE lvc_t_fcat,
gt_fcat2 TYPE lvc_t_fcat,
gt_fcat3 TYPE lvc_t_fcat,
gt_fcat2_t TYPE lvc_t_fcat,
gw_fcat LIKE LINE OF gt_fcat2,
gw_fcat3 LIKE LINE OF gt_fcat3.
DATA: gt_fcat3_t LIKE gt_fcat3.
DATA: gw_desc TYPE uj_desc.
DATA : gw_string TYPE string,
gw_str TYPE string.
DATA: gw_len TYPE string,
BEGIN OF gw_refdim,
dimension TYPE uja_dimension-dimension,
END OF gw_refdim,
gt_refdim LIKE TABLE OF gw_refdim,
gt_refdim_t LIKE TABLE OF gw_refdim,
BEGIN OF gw_refdata,
data_table TYPE tabname,
desc_table TYPE tabname,
END OF gw_refdata,
gt_refdata LIKE TABLE OF gw_refdata,
BEGIN OF gw_techattr,
tech_name TYPE uja_dim_attr-tech_name,
END OF gw_techattr,
gt_techattr LIKE TABLE OF gw_techattr,
gw_cond TYPE string.
DATA:gw_hircond TYPE string.
DATA: gt_dynpread TYPE TABLE OF dynpread,
gw_dynpread LIKE LINE OF gt_dynpread,
gw_dynpread2 LIKE LINE OF gt_dynpread,
gw_dim TYPE string,
gw_env TYPE string.
FIELD-SYMBOLS: <gfs_w_tab1> TYPE any,
<gfs_w_tab2> TYPE any,
<gfs_w_tab3> TYPE any,
<gfs_field> TYPE any,
<gfs_field2> TYPE any,
<gfs_field_final> TYPE any,
<gfs_s_fcat> TYPE lvc_s_fcat,
<gfs_s_fcat2> TYPE lvc_s_fcat,
<gfs_s_fcat3> TYPE lvc_s_fcat
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dim.
REFRESH gt_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
READ TABLE gt_dynpread INTO gw_dynpread INDEX 1.
IF sy-subrc EQ 0.
TRY .
REFRESH gt_tab.
SELECT dimension
FROM uja_dimension CLIENT SPECIFIED
INTO TABLE gt_tab
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_dynpread-fieldvalue.
IF sy-subrc EQ 0.
SORT gt_tab BY dimension.
DELETE ADJACENT DUPLICATES FROM gt_tab COMPARING dimension.
IF gt_tab IS NOT INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "#EC CI_SUBRC
EXPORTING
* DDIC_STRUCTURE = ''
retfield = 'DIMENSION'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_DIM'(004)
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* display = ''
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_tab
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc NE 0.
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_member-low.
REFRESH gt_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
gw_dynpread-fieldname = 'P_DIM'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
SORT gt_dynpread BY fieldname.
DELETE ADJACENT DUPLICATES FROM gt_dynpread COMPARING fieldname.
IF gt_dynpread IS NOT INITIAL.
LOOP AT gt_dynpread INTO gw_dynpread.
IF gw_dynpread-fieldname EQ 'P_ENV'.
gw_env = gw_dynpread-fieldvalue.
ELSEIF gw_dynpread-fieldname EQ 'P_DIM'.
gw_dim = gw_dynpread-fieldvalue.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CLEAR: gw_datatbl1, gt_member.
SELECT SINGLE data_table
INTO (gw_datatbl1)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_env
AND dimension EQ gw_dim.
IF sy-subrc EQ 0.
TRY .
REFRESH gt_member.
SELECT mbr_name
INTO TABLE gt_member
FROM (gw_datatbl1) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt .
IF sy-subrc EQ 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MBR_NAME'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_MEMBER'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
callback_program = sy-repid
callback_form = 'F4CALLBACK'
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_member
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_member-high.
REFRESH gt_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
gw_dynpread-fieldname = 'P_DIM'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
SORT gt_dynpread BY fieldname.
DELETE ADJACENT DUPLICATES FROM gt_dynpread COMPARING fieldname.
IF gt_dynpread IS NOT INITIAL.
LOOP AT gt_dynpread INTO gw_dynpread.
IF gw_dynpread-fieldname EQ 'P_ENV'.
gw_env = gw_dynpread-fieldvalue.
ELSEIF gw_dynpread-fieldname EQ 'P_DIM'.
gw_dim = gw_dynpread-fieldvalue.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CLEAR: gw_datatbl1.
SELECT SINGLE data_table
INTO (gw_datatbl1)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_env
AND dimension EQ gw_dim.
IF sy-subrc EQ 0.
TRY .
REFRESH gt_member.
SELECT mbr_name
INTO TABLE gt_member
FROM (gw_datatbl1) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt.
IF sy-subrc EQ 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MBR_NAME'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_MEMBER'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
callback_program = sy-repid
callback_form = 'F4CALLBACK'
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_member
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*& Form F4CALLBACK
* text
* -->RECORD_TAB text
* -->SHLP text
* -->CALLCONTROL text
FORM f4callback TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol TYPE ddshf4ctrl.
callcontrol-no_maxdisp = ''.
ENDFORM. "F4CALLBACK
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_hir.
REFRESH gt_dynpread.
CLEAR gw_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
gw_dynpread-fieldname = 'P_DIM'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
SORT gt_dynpread BY fieldname.
DELETE ADJACENT DUPLICATES FROM gt_dynpread COMPARING fieldname.
LOOP AT gt_dynpread INTO gw_dynpread.
IF gw_dynpread-fieldname EQ 'P_ENV'.
gw_env = gw_dynpread-fieldvalue.
ELSEIF gw_dynpread-fieldname EQ 'P_DIM'.
gw_dim = gw_dynpread-fieldvalue.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CLEAR: gw_datatbl1.
SELECT SINGLE data_table
INTO (gw_datatbl1)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_env
AND dimension EQ gw_dim.
IF sy-subrc EQ 0.
REFRESH gt_member.
TRY .
SELECT /cpmb/hir
INTO TABLE gt_hir
FROM (gw_datatbl1) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt.
IF sy-subrc EQ 0.
SORT gt_hir BY hir.
DELETE ADJACENT DUPLICATES FROM gt_hir COMPARING hir.
IF gt_hir IS NOT INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = '/CPMB/HIR'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_HIR'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_hir
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
* CLASS lcl_main DEFINITION
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
create_alv1,
create_alv2,
create_alv3,
create_fieldcatalog,
create_dynamicalv,
merge_tables,
show_alv1
ENDCLASS. "lcl_main DEFINITION
* CLASS lcl_main IMPLEMENTATION
CLASS lcl_main IMPLEMENTATION.
METHOD create_fieldcatalog.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' "#EC CI_SUBRC
EXPORTING
i_structure_name = gw_datatbl
CHANGING
ct_fieldcat = gt_fcat1
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' "#EC CI_SUBRC
EXPORTING
i_structure_name = gw_descrptbl
CHANGING
ct_fieldcat = gt_fcat2
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD. "create_fieldcatalog
METHOD create_dynamicalv.
* DATA: lr_data TYPE REF TO data.
CLEAR lr_data.
CALL METHOD cl_alv_table_create=>create_dynamic_table
"#EC CI_SUBRC
EXPORTING
* i_style_table =
it_fieldcatalog = gt_fcat2
* i_length_in_byte =
IMPORTING
ep_table = lr_data
* e_style_fname =
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMETHOD. "create_dynamicalv
METHOD merge_tables.
SORT gt_fcat2 BY col_pos.
ASSIGN lr_data->* TO <gfs_t_final>.
LOOP AT <gfs_tab1> ASSIGNING <gfs_w_tab1>.
APPEND INITIAL LINE TO <gfs_t_final> ASSIGNING <gfs_final>.
LOOP AT gt_fcat2 ASSIGNING <gfs_s_fcat>. "#EC CI_NESTED
ASSIGN COMPONENT <gfs_s_fcat>-fieldname OF STRUCTURE
<gfs_w_tab1> TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
ASSIGN COMPONENT <gfs_s_fcat>-fieldname OF STRUCTURE
<gfs_final> TO <gfs_field_final>.
IF sy-subrc EQ 0 AND <gfs_field_final> IS ASSIGNED.
<gfs_field_final> = <gfs_field>.
ENDIF.
*** Creating dynamic where clause for the key fields
IF <gfs_s_fcat>-key = 'X'.
READ TABLE gt_fcat2_t ASSIGNING <gfs_s_fcat2>
WITH KEY
key = abap_true
fieldname = <gfs_s_fcat>-fieldname.
IF sy-subrc EQ 0.
IF gw_string IS INITIAL.
*Putting value into quotes
CONCATENATE `'` <gfs_field> `'` INTO gw_str.
*Concatenating first field into string
CONCATENATE <gfs_s_fcat>-fieldname '=' gw_str
INTO gw_string SEPARATED BY space.
CLEAR gw_str.
ELSE.
*Concatenating rest all key fields
CONCATENATE `'` <gfs_field> `'` INTO gw_str.
CONCATENATE gw_string 'AND' <gfs_s_fcat>-fieldname
'=' gw_str INTO gw_string SEPARATED BY space.
CLEAR gw_str.
ENDIF.
ENDIF.
*** End of Creation
ENDIF.
ENDIF.
ENDLOOP.
IF NOT gw_string IS INITIAL.
*Concatenating sy-langu (-> always present)
CONCATENATE gw_string 'AND LANGU = SY-LANGU'
INTO gw_string SEPARATED BY space.
ENDIF.
*** Filling Description field based on dynamically created where clause
LOOP AT <gfs_tab2> ASSIGNING <gfs_w_tab2> WHERE (gw_string).
"#EC CI_NESTED
ASSIGN COMPONENT 'TXTLG' OF STRUCTURE <gfs_w_tab2>
TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
ASSIGN COMPONENT 'TXTLG' OF STRUCTURE <gfs_final>
TO <gfs_field_final>.
IF sy-subrc EQ 0 AND <gfs_field_final> IS ASSIGNED.
<gfs_field_final> = <gfs_field>.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR gw_string.
ENDLOOP.
ENDMETHOD. "merge_tables
METHOD create_alv3.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_datatbl).
ASSIGN gr_r_ref->* TO <gfs_tab1>.
SELECT *
INTO TABLE <gfs_tab1>
FROM (gw_datatbl) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND mbr_name IN s_member
AND /cpmb/calc EQ 'N'.
IF sy-subrc EQ 0.
IF p_hir IS NOT INITIAL.
CLEAR gw_hircond.
CONCATENATE '/CPMB/HIR' 'NE' 'P_HIR' INTO gw_hircond
SEPARATED BY space.
DELETE <gfs_tab1> WHERE (gw_hircond).
ENDIF.
CLEAR: gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_descrptbl).
ASSIGN gr_r_ref->* TO <gfs_tab2>.
SELECT *
FROM (gw_descrptbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab2>
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
READ TABLE gt_refdata INTO gw_refdata INDEX 1.
IF sy-subrc EQ 0.
CLEAR gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_refdata-data_table).
ASSIGN gr_r_ref->* TO <gfs_tab3>.
SELECT *
INTO TABLE <gfs_tab3>
FROM (gw_refdata-data_table) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND /cpmb/calc EQ 'N'.
IF sy-subrc EQ 0.
CLEAR gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_refdata-desc_table).
ASSIGN gr_r_ref->* TO <gfs_tab4>.
SELECT *
INTO TABLE <gfs_tab4>
FROM (gw_refdata-desc_table) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
lcl_main=>create_fieldcatalog( ).
gt_fcat2_t[] = gt_fcat2[].
DELETE gt_fcat2 WHERE fieldname NE 'TXTLG'.
APPEND LINES OF gt_fcat1 TO gt_fcat2.
gw_len = lines( gt_fcat2 ).
gw_len = gw_len + 1.
gw_fcat-fieldname = 'TXTLG1'.
gw_fcat-reptext = 'Attribute Description'.
gw_fcat-col_pos = gw_len.
gw_fcat-outputlen = 60.
APPEND gw_fcat TO gt_fcat2.
SORT gt_fcat2 BY fieldname.
READ TABLE gt_techattr INTO gw_techattr INDEX 1.
LOOP AT gt_fcat2 INTO gw_fcat.
READ TABLE gt_attr INTO gw_attr
WITH KEY tech_name = gw_fcat-fieldname.
IF sy-subrc EQ 0.
gw_fcat-reptext = gw_attr-caption.
ENDIF.
IF gw_fcat-fieldname = 'TXTLG'.
gw_fcat-outputlen = 60.
ENDIF.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING
outputlen reptext .
IF gw_fcat-fieldname NE 'MBR_NAME'
AND gw_fcat-fieldname NE 'TXTLG'
AND gw_fcat-fieldname NE 'TXTLG1'
AND gw_fcat-fieldname NE gw_techattr-tech_name."gw_attrib.
gw_fcat-no_out = 'X'.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING no_out.
ENDIF.
ENDLOOP.
lcl_main=>create_dynamicalv( ).
lcl_main=>merge_tables( ).
CLEAR gw_cond.
READ TABLE gt_techattr INTO gw_techattr INDEX 1.
* CONCATENATE 'MBR_NAME =' '<Gfs_field>' INTO Gw_cond
* SEPARATED BY space.
TRANSLATE gw_techattr-tech_name TO UPPER CASE.
CONCATENATE `'` gw_techattr-tech_name `'`
'=' '<Gfs_field>' INTO gw_cond
SEPARATED BY space.
CHECK NOT <gfs_t_final> IS INITIAL.
SORT <gfs_t_final> BY (gw_techattr-tech_name).
LOOP AT <gfs_tab3> ASSIGNING <gfs_w_tab3>.
ASSIGN COMPONENT 'MBR_NAME' OF STRUCTURE <gfs_w_tab3>
TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
DELETE <gfs_t_final> WHERE (gw_cond).
ENDIF.
IF <gfs_t_final> IS INITIAL.
EXIT.
ENDIF.
ENDLOOP.
*adding attribute description
DATA gw_cond1 TYPE string.
DATA gw_cond2 TYPE string.
CLEAR gw_cond1.
CONCATENATE `'` gw_techattr-tech_name `'` 'eq' '<gfs_field>'
INTO gw_cond1 SEPARATED BY space.
CLEAR gw_cond2.
CONCATENATE 'TXTLG1' 'eq' 'SPACE'
INTO gw_cond2 SEPARATED BY space.
CLEAR gw_cond.
CONCATENATE 'TXTLG' 'NE' 'SPACE' INTO gw_cond SEPARATED BY
space.
gw_sortcond = 'TXTLG'.
SORT <gfs_tab4> BY (gw_sortcond).
LOOP AT <gfs_t_final> ASSIGNING <gfs_final> WHERE
(gw_cond2).
ASSIGN COMPONENT gw_techattr-tech_name OF STRUCTURE
<gfs_final> TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
ASSIGN COMPONENT 'TXTLG1' OF STRUCTURE
<gfs_final> TO <gfs_field4>.
IF sy-subrc EQ 0 AND <gfs_field4> IS ASSIGNED.
LOOP AT <gfs_tab4> ASSIGNING <gfs_attr>
WHERE (gw_cond).
ASSIGN COMPONENT 2 OF STRUCTURE <gfs_attr> TO
<gfs_field2>.
IF sy-subrc EQ 0 AND <gfs_field2> IS ASSIGNED.
ASSIGN COMPONENT 5 OF STRUCTURE <gfs_attr>
TO <gfs_field3>.
IF sy-subrc EQ 0 AND <gfs_field3> IS ASSIGNED.
IF <gfs_field> EQ <gfs_field2>.
<gfs_field4> = <gfs_field3>.
MODIFY <gfs_t_final> FROM <gfs_final>
TRANSPORTING ('TXTLG1') WHERE (gw_cond1).
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
* LOOP AT <gfs_tab4> ASSIGNING <gfs_attr> WHERE (gw_cond) .
* ASSIGN COMPONENT 2 OF STRUCTURE <gfs_attr> TO
* <gfs_field2>.
* IF sy-subrc EQ 0 AND <gfs_field2> IS ASSIGNED.
* ASSIGN COMPONENT 5 OF STRUCTURE <gfs_attr> TO
* <gfs_field3>.
* IF sy-subrc EQ 0 AND <gfs_field3> IS ASSIGNED.
* LOOP AT <gfs_t_final> ASSIGNING <gfs_final>
* WHERE (gw_cond2).
* ASSIGN COMPONENT gw_techattr-tech_name OF STRUCTURE
* <gfs_final> TO <gfs_field>.
* IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
* ASSIGN COMPONENT 'TXTLG1' OF STRUCTURE <gfs_final>
* TO <gfs_field4>.
* IF sy-subrc EQ 0 AND <gfs_field4> IS ASSIGNED.
* IF <gfs_field> EQ <gfs_field2>.
* <gfs_field4> = <gfs_field3>.
* MODIFY <gfs_t_final> FROM <gfs_final>
* TRANSPORTING ('TXTLG1') WHERE (gw_cond1).
* EXIT.
* ENDIF.
* ENDIF.
* ENDIF.
* ENDLOOP.
* ENDIF.
* ENDIF.
* ENDLOOP.
IF <gfs_t_final> IS NOT INITIAL.
CALL SCREEN 9000.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "create_alv3
METHOD create_alv2.
READ TABLE gt_techattr INTO gw_techattr INDEX 1.
CONCATENATE gw_techattr-tech_name 'EQ' 'space' INTO gw_cond
SEPARATED
BY
space.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_datatbl).
ASSIGN gr_r_ref->* TO <gfs_tab1>.
SELECT *
INTO TABLE <gfs_tab1>
FROM (gw_datatbl) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND mbr_name IN s_member
AND /cpmb/calc EQ 'N'
AND (gw_cond).
IF sy-subrc EQ 0.
IF p_hir IS NOT INITIAL.
CLEAR gw_hircond.
CONCATENATE '/CPMB/HIR' 'NE' 'P_HIR' INTO gw_hircond
SEPARATED BY space.
DELETE <gfs_tab1> WHERE (gw_hircond).
ENDIF.
CLEAR: gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_descrptbl).
ASSIGN gr_r_ref->* TO <gfs_tab2>.
SELECT *
FROM (gw_descrptbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab2>
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
lcl_main=>create_fieldcatalog( ).
gt_fcat2_t[] = gt_fcat2[].
DELETE gt_fcat2 WHERE fieldname NE 'TXTLG'.
APPEND LINES OF gt_fcat1 TO gt_fcat2.
SORT gt_fcat2 BY fieldname.
LOOP AT gt_fcat2 INTO gw_fcat.
READ TABLE gt_attr INTO gw_attr WITH KEY
tech_name = gw_fcat-fieldname.
IF sy-subrc EQ 0.
gw_fcat-reptext = gw_attr-caption.
ENDIF.
IF gw_fcat-fieldname = 'TXTLG'.
gw_fcat-outputlen = 60.
ENDIF.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING outputlen reptext.
* READ TABLE gt_attrib INTO gw_attrib INDEX 1.
* IF sy-subrc EQ 0.
IF gw_fcat-fieldname NE 'MBR_NAME'
AND gw_fcat-fieldname NE 'TXTLG'
AND gw_fcat-fieldname NE gw_techattr-tech_name."gw_attrib.
gw_fcat-no_out = 'X'.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING no_out.
ENDIF.
* ENDIF.
ENDLOOP.
lcl_main=>create_dynamicalv( ).
lcl_main=>merge_tables( ).
CHECK NOT <gfs_t_final> IS INITIAL.
SORT <gfs_t_final> BY ('MBR_NAME').
CALL SCREEN 9000.
ENDIF.
ENDIF.
ENDMETHOD. "create_alv2
METHOD create_alv1.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_datatbl).
ASSIGN gr_r_ref->* TO <gfs_tab1>.
SELECT *
FROM (gw_datatbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab1>
WHERE mandt EQ sy-mandt
AND mbr_name IN s_member.
IF sy-subrc EQ 0.
IF p_hir IS NOT INITIAL.
CLEAR gw_hircond.
CONCATENATE '/CPMB/HIR' 'NE' 'P_HIR'
INTO gw_hircond SEPARATED BY
space.
DELETE <gfs_tab1> WHERE (gw_hircond).
ENDIF.
CLEAR: gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_descrptbl).
ASSIGN gr_r_ref->* TO <gfs_tab2>.
SELECT *
FROM (gw_descrptbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab2>
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
lcl_main=>create_fieldcatalog( ).
SORT gt_fcat2 BY col_pos fieldname.
gt_fcat2_t[] = gt_fcat2[].
DELETE gt_fcat2 WHERE fieldname NE 'TXTLG'.
APPEND LINES OF gt_fcat1 TO gt_fcat2.
SORT gt_fcat2 BY fieldname.
SORT gt_attr BY tech_name.
LOOP AT gt_fcat2 INTO gw_fcat .
IF gw_fcat-reptext IS INITIAL.
READ TABLE gt_attr INTO gw_attr
WITH KEY tech_name = gw_fcat-fieldname BINARY SEARCH.
IF sy-subrc EQ 0.
gw_fcat-reptext = gw_attr-caption.
ELSE.
gw_fcat-reptext = gw_fcat-fieldname.
ENDIF.
ENDIF.
IF gw_fcat-fieldname EQ 'OBJVERS'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ 'ROWFLAG'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ 'MBR_NAME'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ '/CPMB/CALC'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ 'TXTLG'.
gw_fcat-outputlen = 70.
ELSEIF gw_fcat-fieldname EQ '/CPMB/HIR'.
gw_fcat-outputlen = 20.
ENDIF.
MODIFY gt_fcat2 FROM gw_fcat
TRANSPORTING reptext no_out outputlen.
ENDLOOP.
lcl_main=>create_dynamicalv( ).
lcl_main=>merge_tables( ).
CHECK NOT <gfs_t_final> IS INITIAL.
* SORT <gfs_t_final> BY ('TXTLG').
CALL SCREEN 9000.
ENDIF.
ENDIF.
ENDMETHOD. "show_alv1
METHOD show_alv1.
IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
* parent =
container_name = gw_g_container
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid1
EXPORTING
* i_shellstyle = 0
* i_lifetime =
i_parent = go_custom_container
* i_appl_events = 'X'
* i_parentdbg =
* i_applogparent =
* i_graphicsparent =
* i_name =
* i_fcat_complete = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD go_grid1->set_table_for_first_display "#EC CI_SUBRC
* EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save = 'X'
** i_default = 'X'
* is_layout =
** is_print =
** it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = <gfs_t_final>
it_fieldcatalog = gt_fcat2
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDMETHOD. "SHOW_alv1
ENDCLASS. "lcl_main IMPLEMENTATION
AT SELECTION-SCREEN OUTPUT.
IF p_radio1 EQ 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'M1'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
* IF screen-group1 = 'M'.
* screen-active = 0.
* MODIFY SCREEN.
* ENDIF.
ENDLOOP.
ENDIF.
* IF p_radio2 EQ 'X'.
* LOOP AT SCREEN.
* IF p_reason EQ 30.
* IF screen-group1 = 'M2'.
* screen-active = 0.
* MODIFY SCREEN.
* ENDIF.
* ENDIF.
* ENDLOOP.
* ENDIF.
START-OF-SELECTION.
IF p_radio1 EQ 'X'.
SELECT SINGLE data_table desc_table
INTO (gw_datatbl , gw_descrptbl)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
SELECT appset_id dimension tech_name attribute_name caption
INTO TABLE gt_attr
FROM uja_dim_attr CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
lcl_main=>create_alv1( ).
ENDIF.
ENDIF.
ELSE.
IF p_reason NE 30.
SELECT *
INTO TABLE gt_except
FROM zbpcbt007 CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND reasoncd EQ p_reason.
IF sy-subrc EQ 0.
SELECT SINGLE data_table desc_table
INTO (gw_datatbl,gw_descrptbl)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
SELECT appset_id dimension tech_name attribute_name caption
INTO TABLE gt_attr
FROM uja_dim_attr CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
gt_except_t[] = gt_except[].
SORT gt_except_t.
DELETE ADJACENT DUPLICATES FROM gt_except_t.
IF gt_except_t IS NOT INITIAL.
SELECT tech_name
INTO TABLE gt_techattr
FROM uja_dim_attr CLIENT SPECIFIED
FOR ALL ENTRIES IN gt_except_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND attribute_name EQ gt_except_t-attrib.
IF sy-subrc EQ 0.
lcl_main=>create_alv2( ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSEIF p_reason EQ 30.
SELECT SINGLE data_table desc_table
INTO (gw_datatbl,gw_descrptbl)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
* gt_except_t[] = gt_except[].
* SORT gt_except_t BY attrib.
* DELETE ADJACENT DUPLICATES FROM gt_except_t COMPARING attrib.
* IF gt_except_t IS NOT INITIAL.
SELECT refdimension
INTO TABLE gt_refdim
FROM zbpcbt009 CLIENT SPECIFIED
* FOR ALL ENTRIES IN gt_except_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND attrib EQ p_attr."gt_except_t-attrib.
IF sy-subrc EQ 0.
gt_refdim_t[] = gt_refdim[].
SORT gt_refdim_t BY dimension.
DELETE ADJACENT DUPLICATES FROM gt_refdim_t COMPARING
dimension.
IF gt_refdim_t IS NOT INITIAL.
SELECT data_table desc_table
INTO TABLE gt_refdata
FROM uja_dimension CLIENT SPECIFIED
FOR ALL ENTRIES IN gt_refdim_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ gt_refdim_t-dimension.
IF sy-subrc EQ 0.
SELECT appset_id dimension tech_name attribute_name
caption
INTO TABLE gt_attr
FROM uja_dim_attr CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
SELECT tech_name
INTO TABLE gt_techattr
FROM uja_dim_attr CLIENT SPECIFIED
* FOR ALL ENTRIES IN gt_except_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND attribute_name EQ p_attr."gt_except_t-attrib.
IF sy-subrc EQ 0.
REFRESH: gt_refdim_t.",gt_except_t.
lcl_main=>create_alv3( ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* ENDIF.
* ENDIF.
ENDIF.
ENDIF.
*& Module SHOW_ALV1 OUTPUT
*&-------Yes you can, although you need to do it slightly differently, depending on what your 'original' form is doing.
You end up having to do two things:
1. In your second tabular form, you need to explicitly identify the relevant form fields using calls to the relevant APEX_ITEM functions - as well as this, you need to 'manually' specify the array number in the arguments for the function call, ensuring it doesn't overlap with your original form. Normally, this aspect is done for you.
2. Create your own custom CRUD processes, referencing the above elements. There are a few threads floating around the forum relating to how to deal with this. Do a search for "APEX_APPLICATION.G_F" or "HTMLDB_APPLICATION.G_F" for pointers.
Happy hunting! -
How to handle multiple database tables in a single UIX page?
Hi,
I am new to UIX & BC4J. I have to handle data from four different tables in the database. The scenario is as follows:
The tables are
1. user
fields are: userid number, name varchar2
2. business
fields are: businessId number, name varchar2
3. service
fields are: serviceId number, serviceName varchar2
4. userBusiness
userid,businessid (both are foreign keys) & form complex primary keys.
and userid,businessid, serviceId are primary keys.
Now my problem is: to create a webpage where
1. The userid is available in the httpSession Variable as string.
2. according to the userId stored in the session variable I have to retrieve the business names and show them in a choice i.e., pull down box.
3. I have to show the services provided by the business for the business name selected in the combo box.
Could anyone Please help me solve this problem? Could you please give me hints? I have truncated the other fields in the tables.
Thanking you,
Velpandian .SAt the moment, you can't do it declaratively. You have to do it in an event handler. Assuming you have the userid setup as a query parameter in the view object, something like this should get you started:
public EventResult handleEvent(
BajaContext context, Page page, PageEvent event) throws Throwable
HttpSession session = context.getServletRequest().getSession(true);
ViewObject view = ServletBindingUtils.getViewObject(context);
String userid = session.getAttribute("userid");
view.setWhereClauseParam(0, userid);
view.executeQuery(); -
How to load multiple (2 or more) target tables simultaneously?
Hi,
I have a requirement where I have to load 2 target tables simultaneously. Reason same primary key value has to be loaded at both the targets.
For eg:
Source table:
col1, col2, col3, col4, col5.... col20
Target 1:
T1C1=unique value from seq1
T1C2=col1
T1C3=col2
T1C9=col8
Target 2:
T2C1=same value as inserted above from seq1
T2C2=col9
T2C3=col10
T2C4=col11
T2C13=col20
Any response is highly appreciated.
Thanks for your time in advance.
-- CHikkHi, please, call me Cezar! :D
OK, that is a overview guide, are you confident to go thru KM customizing? If not, let me know.
1) For achieve that I figured out to use the UD's (UD1..UD5) fields from interface
2) Create 2 news option at IKM like: TABLE_UD1 and TABLE_UD2
3) change the KM code (C$ and I$) for generate code for each column group (UD1 and UD2 update and insert code). The I$ must have all columns.
4) at Interface level you will drag and drop both target tables at source, right-click on each one and add it to the target as temp table.
5) drop the targets from source area
6) for each group of columns from Target1 and target2 check the columns as UD1 and UD2 respectively and the sequence must be checked as UD1 and UD2 because it is common to the both target table.
7) add the real sources and create all mapping.
8) now just go to the Flow table and put the correspondent table name at each option. You should use an ODI API to get the right schema when change the context to production.
I just describe the general architecture once the technical implementation needs KM customize knowledge.
Make any sense and/or help you?
Be free to contact me at my email (see profile). -
To load multiple records in multiple target tables
I have to read multiple records as a set from a single source flat file and load into different target tables.
I have to read 3 records as a set and load into 3 different target tables and read another 3 records as a set and load into previous 3 target tables and it goes on
till all the records from the flat file are loaded.
The structure of the file is as follows:
Header Record
Line Record
Distribution Record
Header Record
Line Record
Distribution Record
Read Header Record and load into target table A
Read Line Record and load into target table B
Read Distribution Record and load into target table C
--- repeat the same steps till all records are read and loaded into target tables.
I would appreciate if anyone can suggest the best approach of designing interface/package and error conditions to handle ?
Thanks,
RamHi,
in this case you must create datastore under a 'Flat file' model
Create for example 3 datastore with the same ressource (file) but change defintion of column
Generaly on the first column, define the 'pattern' for each specific format 'variable code'
You must create 3 interfaces and load your target (databse table for example)
Regards
Stephane -
How to join multiple source tables and do lookup?
I have a requirement to load a target table by joining 4 source tables. Also I have to do a lookup on a domain table to transform codes and check for nulls. What will be the best approach to load the target table?
Is it possible to do it in one interface or do I need to build multiple interfaces to achive this?
My source and target database both are oracle and I am planing to use Oracle Incremental Update Merge.
Thank youYou are in the right direction by creating one interface for this transformation.
You will need to drag drop 4 source tables + the lookup table on the Sources window of Interface and then make appropriate joins.
Also, check for NULLS in the transformation. Depends what you want to do with the NULLS. If you want to ignore them, use a filter.
If you want them to error out, use a constraint.
If you want to convert them, use NVL
Start with Oracle Incremental Update and once successful, use Oracle Incremental Update MERGE. -
How to put multiple targets in ODI
Hi All,
Can i know how to put multiple targets in Oracle Data Inegrator.
Thanks in Advance!!You can have one target per interface. There are some KMs in ODI 11g to generate Oracle multi target insert statements or Teradata comparable ones. You could also hide additional inserts under the hood in a KM if it is a common design pattern.
Cheers
David -
How to combine multiple Unmanaged Solution to one single Managed solution
Hi,
How to combine multiple Unmanaged Solution to one single Managed solution.?
There were some other third party developer have kept things lik ein UAT there are 2 release solution and both are Managed Solution.
And in Production the changes are only deployed for release 1 and for the release 2 changes deployment needs to be done.
But when i import that second release Managed Solution from UAT to Production then i got number of elements missing but i have checked they are already there in Soolution.
I did some R&D on this but not much helpful.
I thought i require to convert Unmanaged Solution of Production environment to Managed first for first release and then needs to import Managed solution of UAT to Production for second release.
Is this the right way to overcome form this situation?
Any help and response would be really appreciated.
Thanks.
If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"Hi,
You can prepare unmanaged solution by adding all the components from the default solution,which are there in the managed solution, If Customizatiable entity is true in the managed solution. -
How java support multiple inheritance by the use of interface.
As per my understanding, Interface is just having the signatures of the methods not the implementation.
So How java support multiple inheritance by the use of interface?
Answer 1: we can institate interface reference by its implemented
class.
����� interface inf...
����� class aa implements inf..
����� class bb implements inf....
Now, inf i = new aa();
inf i = new bb();
Answer 2: We can extends as many interface as we want in the
single
interface.
i.e. interface infFirst....
interface infSecond....
interface infThird....
Now ,
interface ingMulti extends infFrist, infThird...
By above two answers its not prity clear as per the multiple inheritance in C or C++.
i.e.
class first{
method abc();....}
class second{
method bbc()......}
class multi::first::second{
we can call to abc();.....as well as bbc();
-Please give your important suggstion on the same.(Hope I explain it well.)
-JeffThe keyword implement is used only for interfaces not
for abstract class. If i am wrong correct me.I believe your right, but I will double check.
As for the multiple inheritence think about the following code:
class Animal {
// Animal generic stuff in this class
interface Eat {
// Generic stuff that models eating behavior
interface Runs {
// generic methods that model running behavior
public class Horse extends Animal implements Eat, Runs {
// Stuff specific to a horse
}The Animal class is generic but has stuff in it common to all animals.
The Eat interface models behavior that is generic to eating, all living things have to eat something to survive. Herbavore are different from carnivores.
The Runs interface models generic behavior to running, such as speed. A cheeta definately runs faster than a human.
This brings us to the Horse class. It extends the Animal class because it "is-a" animal, and it implements the eat and runs interface because they are behaviors a horse has.
I hope that helps.
Extending an abstract class is the same as extending a regular class with the exception you MUST override all abstract methods in the abstract class. Thats not too difficult but I believe when designing classes, designing an abstract can be more diffecult than modeling the base class, and generic behaviors in interfaces. JMO.
JJ -
How to include multiple image components into a single custom component???
How to include multiple image components into a single custom component???
Hi Marcel,
an ABAP transaction can only run or at least be started on one single system. A portal transaction can be assigned using a URL. This doesn't need any logical component.
Regards
Andreas -
How do I write into multiple target tables in DIFFERENT schemas?
It is easy to have a mapping that writes into 2 or more tables it's results. I now need that all these tables are in different schemas!
When I create a 2nd warehouse target with a 2nd location and configure this location to be a different schema on the database, validation tells me, that everything is okay.
When I generate it, there are several warnings, when I execute it, it doesn't work :( It complains that it cannot find <something>.
I'm sorry, I don't have the error-message at hand :(
I've you got an idea, how I could have different schemas for my tables, please let me know!Art,
Could it be that the target schema into which you install the runtime components does not have privileges on the tables in the other schemas? You have to have at least the right privileges (INSERT, UPDATE, DELETE) on the target tables in the other schemas in order for this to work. However, then there should be no reason, assuming your tables are in different modules related to different locations.
Thanks,
Mark. -
Loading to target table from multiple source table
Hi forum,
I have some doubts regarding selecting data by joining 2 or 3 tables and populate the target table in same schema(ora 10g).The way i need to load is first extract the data and do some some transformations(like derive new value based on existing column value ,eg: arithmetic operations) and then load data to target table in same schema...
GIve me a suggestion to do the same in best possible way..since the entire activity to be finished in 3 hrs and volume in each table is 377 million , 122 million and 120 million.
Thanks ,
Aneesh AIt is Rob who spend his freetime in answering you - not "bob".
> Can u explain me the time-lines for the mentioned volume...?
You mean "you" and not "u"? This is not a MXIT forum where IM SPEAK is the norm.
As for time-lines.. it is silly to expect anyone to give you estimated run times when the hardware platform, types of disks, o/s configuration, Oracle configuration, average loads and so on are unknown.
What Rob showed you is the most optimal way to write SQL to transform data from one or more source tables and insert these results into a destination table - using direct path inserts and parallel query. The only faster method would be a CTAS - Create Table As Select as oppose to an Insert Table with select. -
How to load multiple flat files
Hi,
I am new to ODI 10, I have one requirement where I need load flat files containing the folder size11GB.
I want to load them all in a single instances with using of single data server, single physical schema and single logical schema.
How can we do this.
Also to execute this in package what steps and precautions do we need to follow.
ThxIs the data in your files the same format?
If so, simply follow one of the many guides to looping around files that use a common structure to load them, you can do this in parallel if you want.
http://odiexperts.com/multiple-files-single-interface/
or
http://www.odigurus.com/2011/05/multiple-files-single-target-table.html -
Multiple flat file in and multiple target tables
Hi,
How can we have multiple flat file into multiple targets.
I am trying to load data from multiple flat files into respective tables. But it gives error like
VLD-2411: Cannot handle two file structures
Make sure that only one file structure is used in a SQL*Loader map
Can anyone help.
Regards
Rakesh KumarI donot thing in one mapping you can take multiple sqlloader file.
If want to load data form multiple file use External table.
Maybe you are looking for
-
Itunes constantly copying a backup of my database
I have setup my Itunes to access the database and music folders from an external network drive. This works and there is no problem with that. It is only because my Itunes is setup this way that I have been able to spot what Itunes is doing. *Itunes a
-
OBIA Specs - Data Config and Dashboards
I am looking for details on what comes with Oracle BI 11g pre-built content for Financials, Sales, Warehouse, and Inventory. Specifically, I would like to know what is included in the data mart and dashboards. Where can I find this detailed informa
-
Complete box? drawing lines
Hello, I want to allow a user to draw lines on a canvas and then know when all the points make up an area that is a box. How can this be done? What checks would I need to do everytime a line is drawn?
-
Requisition created in project contract getting approved in project only
Created requisition in projects. Item was service item. After creation requisition is getting approved it should be incomplete and should go in hierarchy when import requisition is RUN. Kindly help. 9999
-
Partition: Yes or No?
I just got a new 13" MB Pro with Lion installed. The drive has 750 GB. The drive on my old MB failed, without any warning. ( Grumble, grumble.) I am wondering whether drive partitioning is a good idea keeping applications on one and data, especially