朋友推荐的,于是就转到这里来啦~~~还不错,对于生产机和开发机Query不一致的情况很有效,特别是开发机被改的面目全非的说。。。
两个 function,非常重要:
RSZ_X_COMPONENT_GET
RSZ_X_COMPONENT_SET
*&---------------------------------------------------------------------*
*& Report YUPG_QUERY_COPY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT YUPG_QUERY_COPY.
TABLES:RSZCOMPDIR,
RFCDISPLAY,
RSZELTTXT. "Texts of reporting component elements
DATA: C_T_ELTDIR LIKE RSZ_X_ELTDIR OCCURS 0 WITH HEADER LINE.
DATA: C_T_ELTPROP LIKE RSZ_X_ELTPROP OCCURS 0 WITH HEADER LINE.
DATA: C_T_ELTPRIO LIKE RSZ_X_ELTPRIO OCCURS 0 WITH HEADER LINE.
DATA: C_T_ELTATTR LIKE RSZ_X_ELTATTR OCCURS 0 WITH HEADER LINE.
DATA: C_T_ELTXREF LIKE RSZ_X_ELTXREF OCCURS 0 WITH HEADER LINE.
DATA: C_T_COMPDIR LIKE RSZ_X_COMPDIR OCCURS 0 WITH HEADER LINE.
DATA: C_T_COMPIC LIKE RSZ_X_COMPIC OCCURS 0 WITH HEADER LINE.
DATA: C_T_SELECT LIKE RSZ_X_SELECT OCCURS 0 WITH HEADER LINE.
DATA: C_T_RANGE LIKE RSZ_X_RANGE OCCURS 0 WITH HEADER LINE.
DATA: C_T_CALC LIKE RSZ_X_CALC OCCURS 0 WITH HEADER LINE.
DATA: C_T_CELL LIKE RSZ_X_CEL OCCURS 0 WITH HEADER LINE.
DATA: C_T_VAR LIKE RSZ_X_VAR OCCURS 0 WITH HEADER LINE.
DATA: C_T_UID_SERVER LIKE RSZ_X_UID_SERVER OCCURS 0 WITH HEADER LINE.
DATA: C_T_ELTTXT LIKE RSZELTTXT OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF LT_RE_UID OCCURS 0,
O_UID LIKE RSZ_X_ELTDIR-ELTUID,
O_TNAME LIKE RSZ_X_COMPDIR-COMPID,
N_UID LIKE RSZ_X_ELTDIR-ELTUID,
N_TNAME LIKE RSZ_X_COMPDIR-COMPID,
END OF LT_RE_UID.
DATA: E_SUBRC LIKE SY-SUBRC.
SELECTION-SCREEN BEGIN OF BLOCK FILE WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_COMPID FOR RSZCOMPDIR-COMPID DEFAULT 'Z_RPT_COPY_QUERY'.
PARAMETERS :P_DESTIN LIKE RFCDISPLAY-RFCDEST OBLIGATORY DEFAULT 'BWP_30B_UNIX'.
PARAMETERS :DC_FILE LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK FILE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR DC_FILE.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_PATH = ''
MASK = ',*.*,*.*.'
MODE = 'O'
IMPORTING
FILENAME = DC_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 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.
START-OF-SELECTION.
PERFORM UPLOAD_MAPPING.
LOOP AT S_COMPID.
PERFORM GET_QUERY_FROM_30B..
IF E_SUBRC EQ 0.
PERFORM GLOBE_UID_REPLACE.
PERFORM SET_QUERY_TO_35B.
ENDIF.
ENDLOOP.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form UPLOAD_MAPPING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM UPLOAD_MAPPING.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
* CODEPAGE = ' '
FILENAME = DC_FILE
FILETYPE = 'DAT'
* HEADLEN = ' '
* LINE_EXIT = ' '
* TRUNCLEN = ' '
* USER_FORM = ' '
* USER_PROG = ' '
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = LT_RE_UID
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "UPLOAD_MAPPING
*&---------------------------------------------------------------------*
*& Form GET_QUERY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_QUERY_FROM_30B.
CALL FUNCTION 'RSZ_X_COMPONENT_GET'
DESTINATION P_DESTIN
EXPORTING
* I_GENUNIID =
I_COMPID = S_COMPID-LOW
* I_COMPUID =
I_OBJVERS = 'A'
* I_WITH_TEMPLATES = ' '
* I_BY_INFOCUBE =
I_TEMPLATE_TYPE = 'NIL'
* I_VARIABLE_TYPES =
* I_VARIABLE_INFOOBJECT =
I_LANGUAGE = SY-LANGU
* I_USE_BUFFER =
IMPORTING
* E_COMPUID =
E_SUBRC = E_SUBRC
TABLES
C_T_ELTDIR = C_T_ELTDIR
C_T_ELTPROP = C_T_ELTPROP
C_T_ELTPRIO = C_T_ELTPRIO
C_T_ELTATTR = C_T_ELTATTR
C_T_ELTXREF = C_T_ELTXREF
C_T_COMPDIR = C_T_COMPDIR
C_T_COMPIC = C_T_COMPIC
C_T_SELECT = C_T_SELECT
C_T_RANGE = C_T_RANGE
C_T_CALC = C_T_CALC
C_T_CELL = C_T_CELL
C_T_VAR = C_T_VAR
C_T_UID_SERVER = C_T_UID_SERVER
C_T_ELTTXT = C_T_ELTTXT
.
BREAK-POINT.
ENDFORM. "GET_QUERY
*&---------------------------------------------------------------------*
*& Form GLOBE_UID_REPLACE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GLOBE_UID_REPLACE.
LOOP AT C_T_ELTDIR.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTDIR-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTDIR-ELTUID.
MODIFY C_T_ELTDIR.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTPROP.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTPROP-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTPROP-ELTUID.
MODIFY C_T_ELTPROP.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTPROP.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTPROP-HIENM.
MOVE LT_RE_UID-N_UID TO C_T_ELTPROP-HIENM.
MODIFY C_T_ELTPROP.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTPRIO.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTPRIO-COMPUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTPRIO-COMPUID.
MODIFY C_T_ELTPRIO.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTPRIO.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTPRIO-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTPRIO-ELTUID.
MODIFY C_T_ELTPRIO.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTATTR.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTATTR-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTATTR-ELTUID.
MODIFY C_T_ELTATTR.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTXREF.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTXREF-SELTUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTXREF-SELTUID.
MODIFY C_T_ELTXREF.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTXREF.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_ELTXREF-TELTUID.
MOVE LT_RE_UID-N_UID TO C_T_ELTXREF-TELTUID.
MODIFY C_T_ELTXREF.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_COMPDIR.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_COMPDIR-COMPUID.
MOVE LT_RE_UID-N_UID TO C_T_COMPDIR-COMPUID.
MODIFY C_T_COMPDIR.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_COMPIC.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_COMPIC-COMPUID.
MOVE LT_RE_UID-N_UID TO C_T_COMPIC-COMPUID.
MODIFY C_T_COMPIC.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_SELECT.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_SELECT-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_SELECT-ELTUID.
MODIFY C_T_SELECT.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_RANGE.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_RANGE-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_RANGE-ELTUID.
MODIFY C_T_RANGE.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_RANGE.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_RANGE-LOW.
MOVE LT_RE_UID-N_UID TO C_T_RANGE-LOW.
MODIFY C_T_RANGE.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_CALC.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_CALC-ELTUID.
MOVE LT_RE_UID-N_UID TO C_T_CALC-ELTUID.
MODIFY C_T_CALC.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_CALC.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_CALC-OPER1.
MOVE LT_RE_UID-N_UID TO C_T_CALC-OPER1.
MODIFY C_T_CALC.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_CALC.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_CALC-OPER2.
MOVE LT_RE_UID-N_UID TO C_T_CALC-OPER2.
MODIFY C_T_CALC.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_VAR.
LOOP AT LT_RE_UID WHERE O_UID EQ C_T_VAR-VARUNIID.
MOVE LT_RE_UID-N_UID TO C_T_VAR-VARUNIID.
MODIFY C_T_VAR.
ENDLOOP.
ENDLOOP.
LOOP AT C_T_ELTDIR.
SELECT SINGLE TXTLG INTO C_T_ELTDIR-TXTLG
FROM RSZELTTXT
WHERE ELTUID EQ C_T_ELTDIR-ELTUID
AND OBJVERS EQ 'A'
AND LANGU EQ 'E'.
MODIFY C_T_ELTDIR.
ENDLOOP.
LOOP AT C_T_COMPDIR.
LOOP AT LT_RE_UID WHERE O_TNAME EQ C_T_COMPDIR-COMPID.
MOVE LT_RE_UID-N_TNAME TO C_T_COMPDIR-COMPID.
MODIFY C_T_COMPDIR.
ENDLOOP.
ENDLOOP.
ENDFORM. "GLOBE_UID_REPLACE
*&---------------------------------------------------------------------*
*& Form SET_QUERY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SET_QUERY_TO_35B.
CALL FUNCTION 'RSZ_X_COMPONENT_SET'
EXPORTING
I_COMPUID = '123'
I_OBJVERS = 'A'
I_COPY_MODE = 'X'
* I_ROLE =
* I_NODE =
I_LANGUAGE = SY-LANGU
IMPORTING
* E_GENUNIID =
E_SUBRC = E_SUBRC
TABLES
C_T_ELTDIR = C_T_ELTDIR
C_T_ELTPROP = C_T_ELTPROP
C_T_ELTPRIO = C_T_ELTPRIO
C_T_ELTATTR = C_T_ELTATTR
C_T_ELTXREF = C_T_ELTXREF
C_T_COMPDIR = C_T_COMPDIR
C_T_COMPIC = C_T_COMPIC
C_T_SELECT = C_T_SELECT
C_T_RANGE = C_T_RANGE
C_T_CALC = C_T_CALC
C_T_CELL = C_T_CELL
C_T_VAR = C_T_VAR
C_T_UID_SERVER = C_T_UID_SERVER
C_T_ELTTXT = C_T_ELTTXT
.
IF E_SUBRC NE 0.
WRITE : 'ERROR:',
E_SUBRC.
ELSE.
WRITE : 'SUCCESSFUL!'.
ENDIF.
ENDFORM. "SET_QUERY