- 日志
- 好友
- 卖家信用

- 买家信用

- 注册时间
- 2004-9-30
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
x
本帖最后由 阿佩 于 2009-7-24 17:46 编辑
规则
1,首先在本帖子报名。
2,在本版任何一个地方都可以发自己的照片一张,背影除外。
3,可以限时删除,不过至少保留2分钟!----从发帖时间和编辑时间可以看出来。
4,只能把照片以发帖和回复帖子形式发出来,不可以编辑以前的帖子
下午3点开始试运行。
大家踊跃参加啊。
获胜的人在本帖子贴出来自己发照片的那个连接。
为了操作方便,直接在本贴内奖励经验值
*&---------------------------------------------------------------------*
*& Report Y_IT1_UPLOAD
*&
*&---------------------------------------------------------------------*
*& アドオンテーブルアップロードプログラム
*&
*&---------------------------------------------------------------------*
REPORT ybuta_zar0002 NO STANDARD PAGE HEADING.
* Table fields information type
TYPES:
t_tabinfo TYPE STANDARD TABLE OF rpy_fiel.
DATA:
itab_data TYPE stringtab, "Input File data
r_itab_table TYPE REF TO data, "Table data pointer
itab_tabinfo TYPE t_tabinfo, "Table fields information
v_tab TYPE c, "Tab
v_subrc TYPE i,
v_input_count TYPE i,
v_exectype TYPE c LENGTH 1.
FIELD-SYMBOLS:
TYPE STANDARD TABLE.
*Input Screen
PARAMETERS:
* password
p_pwd(12) TYPE c LOWER CASE,
* table name
p_table TYPE rsrd1-tbma_val,
* input file name
p_ufile TYPE char128 LOWER CASE.
SELECTION-SCREEN:
**file type
BEGIN OF BLOCK block1 WITH FRAME TITLE text-020,
BEGIN OF LINE,
COMMENT 1(18) text-003 FOR FIELD rb_pc.
PARAMETERS:
rb_pc RADIOBUTTON GROUP f01
USER-COMMAND zfile.
SELECTION-SCREEN:
COMMENT 33(18) text-002 FOR FIELD rb_host.
PARAMETERS:
rb_host RADIOBUTTON GROUP f01.
SELECTION-SCREEN:
END OF LINE,
END OF BLOCK block1.
SELECTION-SCREEN:
**update type
BEGIN OF BLOCK block2 WITH FRAME TITLE text-004,
BEGIN OF LINE,
COMMENT 1(18) text-005 FOR FIELD r_upset1.
PARAMETERS:
r_upset1 RADIOBUTTON GROUP f02. "overwrite
SELECTION-SCREEN:
COMMENT 33(18) text-019 FOR FIELD r_upset4.
PARAMETERS:
r_upset4 RADIOBUTTON GROUP f02. "Delete
SELECTION-SCREEN:
COMMENT 65(18) text-021 FOR FIELD r_upset5.
PARAMETERS:
r_upset5 RADIOBUTTON GROUP f02.
SELECTION-SCREEN:
END OF LINE,
END OF BLOCK block2.
**File Type
SELECTION-SCREEN:
BEGIN OF BLOCK block3 WITH FRAME TITLE text-007,
BEGIN OF LINE,
COMMENT 1(18) text-008 FOR FIELD p_notcm1.
PARAMETERS:
p_notcm1 RADIOBUTTON GROUP f03. "no separator
SELECTION-SCREEN:
COMMENT 33(18) text-009 FOR FIELD p_notcm2.
PARAMETERS:
p_notcm2 RADIOBUTTON GROUP f03. "separator comma
SELECTION-SCREEN:
END OF LINE,
BEGIN OF LINE,
COMMENT 1(18) text-011 FOR FIELD p_notcm3.
PARAMETERS:
p_notcm3 RADIOBUTTON GROUP f03 DEFAULT 'X'. "separator tab
SELECTION-SCREEN:
END OF LINE,
BEGIN OF LINE,
END OF LINE,
BEGIN OF LINE,
COMMENT 1(18) text-018 FOR FIELD p_whead.
PARAMETERS:
p_whead AS CHECKBOX.
SELECTION-SCREEN:
END OF LINE,
END OF BLOCK block3.
**Auto fields
SELECTION-SCREEN:
BEGIN OF BLOCK block4 WITH FRAME TITLE text-012,
BEGIN OF LINE,
COMMENT 1(24) text-013 FOR FIELD p_date.
PARAMETERS:
p_date AS CHECKBOX. "date to sy-datum
SELECTION-SCREEN:
COMMENT 33(24) text-014 FOR FIELD p_time.
PARAMETERS:
p_time AS CHECKBOX. "time to sy-uzeit
SELECTION-SCREEN:
END OF LINE,
BEGIN OF LINE,
COMMENT 1(24) text-015 FOR FIELD p_name.
PARAMETERS:
p_name AS CHECKBOX. "name to sy-uname
SELECTION-SCREEN:
END OF LINE,
END OF BLOCK block4.
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'P_PWD'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ufile.
* File name input help
IF rb_pc = 'X'.
PERFORM fm_get_filename_pc
CHANGING
p_ufile.
ELSE.
PERFORM fm_get_filename
CHANGING
p_ufile.
ENDIF.
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
IF sy-ucomm 'ZFILE'.
PERFORM check_pwd
CHANGING
p_pwd.
PERFORM check_tablename
USING
p_table.
IF rb_pc = 'X'.
PERFORM check_filename
USING
p_ufile.
ELSE.
* PERFORM check_filename_host
* USING
* p_ufile.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* From PC
IF rb_pc = 'X'.
* Upload file data
PERFORM fm_uploadpc
USING
p_ufile
CHANGING
itab_data.
* From Host
ELSE.
PERFORM fm_uploadhost
USING
p_ufile
CHANGING
itab_data.
ENDIF.
* Delete header
IF p_whead = 'X'.
DELETE itab_data INDEX 1.
ENDIF.
* Empty data
IF itab_data IS INITIAL
AND sy-batch 'X'.
MESSAGE s000(0k) WITH text-m12
DISPLAY LIKE 'E'.
RETURN.
ENDIF.
* Auto set field
IF p_notcm1 IS INITIAL.
IF p_date = 'X'.
REPLACE ALL OCCURRENCES OF '&date&'
IN TABLE itab_data WITH sy-datum
IN CHARACTER MODE
IGNORING CASE.
ENDIF.
IF p_time = 'X'.
REPLACE ALL OCCURRENCES OF '&time&'
IN TABLE itab_data WITH sy-uzeit
IN CHARACTER MODE
IGNORING CASE.
ENDIF.
IF p_name = 'X'.
REPLACE ALL OCCURRENCES OF '&name&'
IN TABLE itab_data WITH sy-uname
IN CHARACTER MODE
IGNORING CASE.
ENDIF.
ENDIF.
* Get table fields information
PERFORM get_tableinfo
USING
p_table
CHANGING
itab_tabinfo.
CREATE DATA:
r_itab_table TYPE STANDARD TABLE OF (p_table).
ASSIGN:
r_itab_table->* TO .
* Split to each field
IF p_notcm1 = 'X'.
* No separator
PERFORM set_dbdata_fixedlen
USING
p_table
itab_tabinfo
itab_data
CHANGING
.
ELSEIF p_notcm2 = 'X'.
* comma separator
PERFORM set_dbdata
USING
p_table
','
itab_tabinfo
itab_data
CHANGING
.
ELSE.
* tab separator
v_tab = cl_abap_char_utilities=>horizontal_tab.
PERFORM set_dbdata
USING
p_table
v_tab
itab_tabinfo
itab_data
CHANGING
.
ENDIF.
v_input_count = LINES( itab_data ).
FREE itab_data.
PERFORM check_duplicates
USING
itab_tabinfo
CHANGING
v_subrc.
IF v_subrc IS NOT INITIAL.
MESSAGE s000(0k) WITH text-m01
DISPLAY LIKE 'E'.
RETURN.
ENDIF.
* DB Process
CASE 'X'.
WHEN r_upset1.
* Modify
PERFORM modify_table
USING
p_table
CHANGING
v_subrc.
v_exectype = 'M'.
WHEN r_upset4.
* Delete
PERFORM delete_tabledata
USING
p_table
CHANGING
v_subrc.
v_exectype = 'D'.
WHEN r_upset5.
PERFORM del_and_ins_data
USING
p_table
CHANGING
v_subrc.
v_exectype = 'U'.
ENDCASE.
IF sy-batch = 'X'.
IF v_subrc IS INITIAL.
COMMIT WORK.
MESSAGE text-m20 TYPE 'S'.
ELSE.
MESSAGE text-m21 TYPE 'S'.
ENDIF.
ELSE.
IF v_subrc IS INITIAL.
WRITE: / text-m20.
ELSE.
WRITE: / text-m21.
ENDIF.
* Log Table
PERFORM insert_resultdata
USING
v_subrc
p_table
v_exectype
v_input_count.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FM_GET_FILENAM
*&---------------------------------------------------------------------*
* Get PC file name
*----------------------------------------------------------------------*
* U_TABLENAME DB Table name
* U_TABLENAME DB table name
* --> U_TABLEDATA DB data
* P_V_EXECTYPE text
* -->P_V_INS_COUNT text
* -->P_V_DLT_COUNT text
*----------------------------------------------------------------------*
FORM insert_resultdata
USING
u_subrc TYPE sysubrc
u_tablename TYPE c
u_exectype TYPE c
u_input_count TYPE i.
DATA:
l_str_result TYPE ybuta_t0001.
*----------------------------------------------------------------------*
CLEAR: l_str_result.
l_str_result-username = sy-uname.
l_str_result-execdate = sy-datum.
l_str_result-exectime = sy-uzeit.
l_str_result-exectype = u_exectype.
l_str_result-tablename = u_tablename.
IF u_subrc IS INITIAL.
l_str_result-rec_count = u_input_count.
l_str_result-exec_status = 'S'.
ELSE.
l_str_result-exec_status = 'E'.
ENDIF.
INSERT ybuta_t0001 FROM l_str_result.
IF sy-subrc = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
IF sy-batch = 'X'.
MESSAGE text-m22 TYPE 'S'.
MESSAGE text-m16 TYPE 'S'.
ELSE.
WRITE: / text-m22,
/ text-m16.
ENDIF.
ENDIF.
ENDFORM. " insert_resultdata
*&---------------------------------------------------------------------*
*& Form check_duplicates
*&---------------------------------------------------------------------*
* CHECK RECORDS WITH THE SAME PRIMARY KEY
*----------------------------------------------------------------------*
* --> U_ITAB_TABINFO text
* P_ITAB_TABINFO text
* -->P_P_TABLE text
* -->P_ITAB_TABLE text
* -->P_V_INPUT_COUNT text
* U_TABLENAME TABLENAME
*----------------------------------------------------------------------*
FORM check_tablename
USING
u_tablename TYPE c.
DATA:
l_tabname TYPE tabname.
*----------------------------------------------------------------------*
IF u_tablename IS INITIAL.
SET CURSOR FIELD 'P_TABLE'.
MESSAGE text-m26 TYPE 'E'.
ENDIF.
*check table existence
SELECT SINGLE tabname
FROM dd02l
INTO l_tabname
WHERE tabname = u_tablename
AND as4local = 'A'
AND as4vers = 0
AND tabclass = 'TRANSP'.
IF sy-subrc 0.
SET CURSOR FIELD 'P_TABLE'.
MESSAGE e000(0k)
WITH text-m09 u_tablename text-m10.
ENDIF.
*Add-on table check
IF NOT ( u_tablename(1) = 'Z'
OR u_tablename(1) = 'Y' ).
SET CURSOR FIELD 'P_TABLE'.
MESSAGE e000(0k)
WITH text-m09 u_tablename text-m11.
ENDIF.
ENDFORM. " check_tablename
*&---------------------------------------------------------------------*
*& Form fm_uploadhost
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_UFILE text
* get_text( ).
MESSAGE l_errtext TYPE 'E'.
ENDTRY.
ENDFORM. " fm_uploadhost
*&---------------------------------------------------------------------*
*& Form check_filename_host
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_UFILE text
*----------------------------------------------------------------------*
FORM check_filename_host
USING
u_ufile TYPE c.
DATA:
l_r_root TYPE REF TO cx_root,
l_errtext TYPE string.
*----------------------------------------------------------------------*
IF u_ufile IS INITIAL.
SET CURSOR FIELD 'P_UFILE'.
MESSAGE text-m24 TYPE 'E'.
ENDIF.
TRY.
OPEN DATASET u_ufile FOR INPUT
IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc 0.
SET CURSOR FIELD 'P_UFILE'.
MESSAGE text-m23 TYPE 'E'.
ENDIF.
CLOSE DATASET u_ufile.
CATCH cx_root INTO l_r_root.
l_errtext = l_r_root->get_text( ).
MESSAGE l_errtext TYPE 'E'.
ENDTRY.
ENDFORM. " check_filename_host
*&---------------------------------------------------------------------*
*& Form fm_get_filename_pc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* file_open_dialog
* EXPORTING
* window_title =
* default_extension =
* default_filename =
* file_filter =
* with_encoding =
* initial_directory =
* multiselection =
CHANGING
file_table = l_filetab
rc = l_rc
* user_action =
* file_encoding =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 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.
READ TABLE l_filetab INTO l_str_file
INDEX 1.
c_ufile = l_str_file-filename.
ENDFORM. " fm_get_filename_pc
*&---------------------------------------------------------------------*
*& Form del_and_ins_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_TABLE text
* -->P_ text
* |
|