Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

DYNAMIC DDIC TABLE

Former Member
0 Likes
1,130

Good Day Folks .. I know one of you has the answer.

I'm a newbie so any constructive comments on my methods would be appreciatted. My firm is beginning the transition to SAP. I've been tasked with the creation of a method to create tables dynamically, utilizing common tools eg. Excel. I've written an RFC which generates and runs the following report. My issue is that even though the code appears to function, the entry in DDIC appears to be an active structure, not a table. Now I realize I could furthur code to build one, but I believe this code should and that I've failed to pass the proper parameters to the FM's called by this report. Unfortunately documentation is a bit scant for this newbie and my German is quite weak ... THOUGHT's ??? THANKS !!!!


REPORT Z_BLD_STRUC_BCUSER.

TYPES: BEGIN OF mySTRUC,
	COURSE_CODE(5) TYPE C,
	COURSE_MOD TYPE I ,
	QUES(100) TYPE C,
	C_ANS1(3) TYPE C,
	C_ANS2(12) TYPE C,
	C_ANS3(1) TYPE C,
	C_ANS4(1) TYPE C,
	W_ANS1(15) TYPE C,
	W_ANS2(7) TYPE C,
	W_ANS3(1) TYPE C,
	W_ANS4(1) TYPE C,
	ANS_WEIGHT TYPE F,
	PROMPT_WRONG(29) TYPE C,
	PROMPT_RIGHT(12) TYPE C,
END OF mySTRUC.

FIELD-SYMBOLS:
<theStruc> TYPE ANY,
<theField> TYPE ANY.

DATA: ROWDATA1 TYPE CHAR1024.
DATA: DELIM1 TYPE CHAR1.
DATA: FIELD_NAMES1 TYPE CHAR1024.
DATA: DATA_TYPE1 TYPE CHAR1024.
DATA: COL_WIDTH1 TYPE CHAR1024.
DATA: COLS1 TYPE INTEGER.
DATA: TABLINE TYPE myStruc.
DATA: F_DAT TYPE CHAR1024.
DATA: F_NAME1 TYPE CHAR30.
DATA: F_TYPE TYPE CHAR2.
DATA: F_TYPE2 TYPE CHAR10.
DATA: F_WIDTH TYPE CHAR4.
DATA: TMP TYPE CHAR10.
DATA: TABNAME TYPE CHAR30.
DATA: TABDEF TYPE DD02V.
DATA: TABDEF2 TYPE DD09L.
DATA: TABFIELDS TYPE TABLE OF DD03P WITH HEADER LINE.
DATA: CNTR TYPE INTEGER.
DATA: USER1 TYPE CHAR30.
DATA: ZDB14 TYPE STANDARD TABLE OF mySTRUC WITH HEADER LINE.

IMPORT ROWDATA1 FROM MEMORY ID'BCUSERA'.
IMPORT DELIM1 FROM MEMORY ID'BCUSERB'.
IMPORT COLS1 FROM MEMORY ID'BCUSERC'.
IMPORT FIELD_NAMES1 FROM MEMORY ID'BCUSERD'.
IMPORT TABNAME FROM MEMORY ID'BCUSERE'.
IMPORT USER1 FROM MEMORY ID'BCUSERF'.
IMPORT DATA_TYPE1 FROM MEMORY ID'BCUSERG'.
IMPORT COL_WIDTH1 FROM MEMORY ID'BCUSERH'.

ASSIGN TABLINE TO <theStruc>.
TABDEF-TABNAME = TABNAME.
TABDEF2-TABNAME = TABNAME.
TABDEF-TABCLASS ='INTTAB'.
TABDEF-DDLANGUAGE = sy-langu.
TABDEF-LANGDEP = sy-langu.
TABDEF-DDTEXT ='DYNAMIC TABLE CREATED VIA RFC'.

WHILE COLS1 > 0.
	CNTR = CNTR + 1.
	SPLIT ROWDATA1 AT DELIM1 INTO F_DAT ROWDATA1.
	SPLIT FIELD_NAMES1 AT DELIM1 INTO F_NAME1 FIELD_NAMES1.
	SPLIT DATA_TYPE1 AT DELIM1 INTO F_TYPE DATA_TYPE1.
	SPLIT COL_WIDTH1 AT DELIM1 INTO F_WIDTH COL_WIDTH1.
	ASSIGN COMPONENT F_NAME1 OF STRUCTURE <theStruc> to <theField>.
	<theField> = F_DAT.
	CASE F_TYPE.
		WHEN 'C'.
			CONCATENATE'CHAR'F_WIDTH into TMP.
			F_TYPE2 = TMP.
		WHEN'I'.
			F_TYPE2 ='INTEGER'.
		WHEN'D'.
			F_TYPE2 ='DATE'.
		WHEN'T'.
			F_TYPE2 ='TIME'.
		WHEN'F'.
			F_TYPE2 ='FLOAT'.
	ENDCASE.
	CLEAR TABFIELDS.
	TABFIELDS-TABNAME = TABNAME.
	TABFIELDS-FIELDNAME = F_NAME1.
	TABFIELDS-ROLLNAME = F_TYPE2.
	TABFIELDS-POSITION = CNTR.
	TABFIELDS-DATATYPE = F_TYPE.
	TABFIELDS-LENG = F_WIDTH.
	APPEND TABFIELDS.
	COLS1 = COLS1 - 1.
ENDWHILE.
APPEND TABLINE TO ZDB14 .
COMMIT WORK.

1 ACCEPTED SOLUTION
Read only

uwe_schieferstein
Active Contributor
0 Likes
940

Hello David

As I understand your task is to create Z-tables dynamically. If so there should be only a single line of coding that has to be changed:

...
TABDEF2-TABNAME = TABNAME.
"  TABDEF-TABCLASS ='INTTAB'.  " structure
TABDEF-TABCLASS ='TRANSP'  " transparent table. 
...

The different table types are defined as fixed values of domain <b>TABCLASS</b>:

TRANSP	Transparent table
INTTAB	Structure
CLUSTER	Cluster table
POOL	Pooled table
VIEW	General view structure
APPEND	Append structure

Regards

Uwe

4 REPLIES 4
Read only

Former Member
0 Likes
940

Opps .. didn't include the entire report ..

[code]

REPORT Z_BLD_STRUC_BCUSER.

TYPES: BEGIN OF mySTRUC,

COURSE_CODE(5) TYPE C,

COURSE_MOD TYPE I ,

QUES(100) TYPE C,

C_ANS1(3) TYPE C,

C_ANS2(12) TYPE C,

C_ANS3(1) TYPE C,

C_ANS4(1) TYPE C,

W_ANS1(15) TYPE C,

W_ANS2(7) TYPE C,

W_ANS3(1) TYPE C,

W_ANS4(1) TYPE C,

ANS_WEIGHT TYPE F,

PROMPT_WRONG(29) TYPE C,

PROMPT_RIGHT(12) TYPE C,

END OF mySTRUC.

FIELD-SYMBOLS:

<theStruc> TYPE ANY,

<theField> TYPE ANY.

DATA: ROWDATA1 TYPE CHAR1024.

DATA: DELIM1 TYPE CHAR1.

DATA: FIELD_NAMES1 TYPE CHAR1024.

DATA: DATA_TYPE1 TYPE CHAR1024.

DATA: COL_WIDTH1 TYPE CHAR1024.

DATA: COLS1 TYPE INTEGER.

DATA: TABLINE TYPE myStruc.

DATA: F_DAT TYPE CHAR1024.

DATA: F_NAME1 TYPE CHAR30.

DATA: F_TYPE TYPE CHAR2.

DATA: F_TYPE2 TYPE CHAR10.

DATA: F_WIDTH TYPE CHAR4.

DATA: TMP TYPE CHAR10.

DATA: TABNAME TYPE CHAR30.

DATA: TABDEF TYPE DD02V.

DATA: TABDEF2 TYPE DD09L.

DATA: TABFIELDS TYPE TABLE OF DD03P WITH HEADER LINE.

DATA: CNTR TYPE INTEGER.

DATA: USER1 TYPE CHAR30.

DATA: ZDB14 TYPE STANDARD TABLE OF mySTRUC WITH HEADER LINE.

IMPORT ROWDATA1 FROM MEMORY ID'BCUSERA'.

IMPORT DELIM1 FROM MEMORY ID'BCUSERB'.

IMPORT COLS1 FROM MEMORY ID'BCUSERC'.

IMPORT FIELD_NAMES1 FROM MEMORY ID'BCUSERD'.

IMPORT TABNAME FROM MEMORY ID'BCUSERE'.

IMPORT USER1 FROM MEMORY ID'BCUSERF'.

IMPORT DATA_TYPE1 FROM MEMORY ID'BCUSERG'.

IMPORT COL_WIDTH1 FROM MEMORY ID'BCUSERH'.

ASSIGN TABLINE TO <theStruc>.

TABDEF-TABNAME = TABNAME.

TABDEF2-TABNAME = TABNAME.

TABDEF-TABCLASS ='INTTAB'.

TABDEF-DDLANGUAGE = sy-langu.

TABDEF-LANGDEP = sy-langu.

TABDEF-DDTEXT ='DYNAMIC TABLE CREATED VIA RFC'.

WHILE COLS1 > 0.

CNTR = CNTR + 1.

SPLIT ROWDATA1 AT DELIM1 INTO F_DAT ROWDATA1.

SPLIT FIELD_NAMES1 AT DELIM1 INTO F_NAME1 FIELD_NAMES1.

SPLIT DATA_TYPE1 AT DELIM1 INTO F_TYPE DATA_TYPE1.

SPLIT COL_WIDTH1 AT DELIM1 INTO F_WIDTH COL_WIDTH1.

ASSIGN COMPONENT F_NAME1 OF STRUCTURE <theStruc> to <theField>.

<theField> = F_DAT.

CASE F_TYPE.

WHEN 'C'.

CONCATENATE'CHAR'F_WIDTH into TMP.

F_TYPE2 = TMP.

WHEN'I'.

F_TYPE2 ='INTEGER'.

WHEN'D'.

F_TYPE2 ='DATE'.

WHEN'T'.

F_TYPE2 ='TIME'.

WHEN'F'.

F_TYPE2 ='FLOAT'.

ENDCASE.

CLEAR TABFIELDS.

TABFIELDS-TABNAME = TABNAME.

TABFIELDS-FIELDNAME = F_NAME1.

TABFIELDS-ROLLNAME = F_TYPE2.

TABFIELDS-POSITION = CNTR.

TABFIELDS-DATATYPE = F_TYPE.

TABFIELDS-LENG = F_WIDTH.

APPEND TABFIELDS.

COLS1 = COLS1 - 1.

ENDWHILE.

APPEND TABLINE TO ZDB14 .

COMMIT WORK.

CALL FUNCTION 'DDIF_TABL_PUT'

EXPORTING NAME = 'ZDB14'

DD02V_WA = TABDEF

TABLES DD03P_TAB = TABFIELDS

EXCEPTIONS

TABL_NOT_FOUND = 1

NAME_INCONSISTENT = 2

TABL_INCONSISTENT = 3

PUT_FAILURE = 4

PUT_REFUSED = 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.

ELSE.

COMMIT WORK.

ENDIF.

CALL FUNCTION 'DDIF_TABL_ACTIVATE'

EXPORTING NAME = 'ZDB14'

EXCEPTIONS

NOT_FOUND = 1

PUT_FAILURE = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

ELSE.

COMMIT WORK.

ENDIF.

CALL FUNCTION 'TR_TADIR_INTERFACE'

EXPORTING WI_TADIR_OBJ_NAME = 'ZDB14'

WI_TADIR_OBJECT ='TABL'

WI_TADIR_PGMID ='R3TR'

WI_TADIR_AUTHOR ='BCUSER'

WI_TADIR_DEVCLASS ='$TMP'.

IF SY-SUBRC <> 0.

ELSE.

COMMIT WORK.

ENDIF.

[/code]

Read only

0 Likes
940

Your table class seems wrong...

TABDEF-TABCLASS = 'TRANSP'.  " << for trnspent table

Regards,

Naimesh Patel

Read only

uwe_schieferstein
Active Contributor
0 Likes
941

Hello David

As I understand your task is to create Z-tables dynamically. If so there should be only a single line of coding that has to be changed:

...
TABDEF2-TABNAME = TABNAME.
"  TABDEF-TABCLASS ='INTTAB'.  " structure
TABDEF-TABCLASS ='TRANSP'  " transparent table. 
...

The different table types are defined as fixed values of domain <b>TABCLASS</b>:

TRANSP	Transparent table
INTTAB	Structure
CLUSTER	Cluster table
POOL	Pooled table
VIEW	General view structure
APPEND	Append structure

Regards

Uwe

Read only

Former Member
0 Likes
940

THANKS FOLKS !!! ..

I'll burn THAT one into memory .... Sooooo MUCH to learn !!!!