OOLV显示BAPI和BDC和打印内表.docx
- 文档编号:8843303
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:11
- 大小:134.72KB
OOLV显示BAPI和BDC和打印内表.docx
《OOLV显示BAPI和BDC和打印内表.docx》由会员分享,可在线阅读,更多相关《OOLV显示BAPI和BDC和打印内表.docx(11页珍藏版)》请在冰豆网上搜索。
OOLV显示BAPI和BDC和打印内表
使用BAPI,BDC批量创建用户
首先是创建一个状态:
代码
首先声明读取excel数据的变量等
DATA:
BEGIN OF IEXCEL OCCURS 0.
INCLUDE STRUCTURE ALSMEX_TABLINE."此表是excel系统表,3个字段,行列值
DATA:
END OF IEXCEL.
DATA:
LW_FILE TYPE RLGRAP-FILENAME,
RC TYPE I,
LT_TABLE TYPE FILETABLE,
LW_TABLE TYPE FILE_TABLE.
"3个字段,也是excel里显示的3列
DATA:
BEGIN OF WA_USERS OCCURS 0,
USERNAME(12) TYPE C,
PASSWORD(40) TYPE C,
LASTNAME(40) TYPE C,
TAG,
END OF WA_USERS.
DATA IT_USERS LIKE TABLE OF WA_USERS WITH HEADER LINE.
PARAMETERS FILE TYPE LOCALFILE OBLIGATORY.
程序:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE.
PERFORM PRM_FILE."选择文件路径
START-OF-SELECTION.
PERFORM FRM_EXCEL."点击执行,赋值
CALL SCREEN 100."跳转主屏幕
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE.
*-------------------------------------------------------------------*
FORM PRM_FILE .
"选择文件路径
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '选择文件'
FILE_FILTER = 'XLS 模板文件|*.XLSX'
INITIAL_DIRECTORY = 'D:
\'
CHANGING
FILE_TABLE = LT_TABLE "把导入的excel表赋给FILE_TABLE
RC = RC
EXCEPTIONS
CNTL_ERROR = 1
FILE_OPEN_DIALOG_FAILED = 2
ERROR_NO_GUI = 3.
CALL METHOD CL_GUI_CFW=>FLUSH
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2.
READ TABLE LT_TABLE INTO LW_TABLE INDEX 1.
IF SY-SUBRC EQ 0.
FILE = LW_TABLE-FILENAME.
ENDIF.
ENDFORM.
*-------------------------------------------------------------------*
FORM FRM_EXCEL.
"点击执行,赋值
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = FILE
I_BEGIN_COL = 1"开始和结束的行列
I_BEGIN_ROW = 1"
I_END_COL = 7"
I_END_ROW = 100"
TABLES
INTERN = IEXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
WRITE:
/ '读入文件错误!
',FILE.
ELSE.
"一般下面是才是我们关心的问题,循环excel,excel有3列,下面是IEXCEL-COL一列一列的读取,ATENDOFROW当读取一行(3列)后,赋给内表一行
LOOP AT IEXCEL.
CASE IEXCEL-COL.
WHEN 1.
IT_USERS-USERNAME = IEXCEL-VALUE(20).
WHEN 2.
IT_USERS-PASSWORD = IEXCEL-VALUE(20).
WHEN 3.
IT_USERS-LASTNAME = IEXCEL-VALUE(20).
ENDCASE.
AT END OF ROW."ATENDOF也就是一行结束后赋值
APPEND IT_USERS."当读取一行(3列)后,赋给内表一行
ENDAT.
ENDLOOP.
ENDIF.
ENDFORM.
*&--------------------------点击按钮执行事件-------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BAPI'.
PERFORM Z_BAPI.
WHEN 'BDC'.
PERFORM Z_BDC.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'PRINT'.
PERFORM Z_SMARTFORMS.
ENDCASE.
ENDMODULE.
BAPI
**BAPI变量
DATA:
l_bapipwd LIKE bapipwd. "密码
DATA:
l_address LIKE bapiaddr3. "lastname 姓氏
DATA:
l_username LIKE BAPIBNAME. "用户名
DATA:
l_logondata LIKE bapilogond. "日期
"此处的return在下面调到他的自带MESSAGE,(提示信息 )
DATA:
l_return LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
* DATA:
l_return1 LIKE TABLE OF L_RETURN.如果用系统表里的结构就可以用这句,而不用下面自己声明结构,不过一般必要的自己写结构
DATA:
BEGIN OF WA_MSSAGE,
USERNAME TYPE BAPIBNAME-BAPIBNAME,"用户名
UTYPE TYPE MESSAGE-MSGTY, "消息类型
MSGTX TYPE MESSAGE-MSGTX, "消息文本
FLAGS TYPE C LENGTH 10,"消息灯颜色
END OF WA_MSSAGE.
DATA IT_MSSAGE LIKE TABLE OF WA_MSSAGE WITH HEADER LINE.
FORM Z_BAPI .
LOOP AT IT_USERS WHERE TAG = 'X'.
* 把前面读取excel的数据赋给这3个字段
l_username = IT_USERS-USERNAME.
l_bapipwd = IT_USERS-PASSWORD.
l_address-LASTNAME = IT_USERS-LASTNAME. "address是一个系统结构,而我只需要LASTNAME字段,所以-lastname
CALL FUNCTION 'BAPI_USER_CREATE'
EXPORTING
username = l_username
password = l_bapipwd
address = l_address
LOGONDATA = l_logondata
TABLES
return = l_return.
LOOP AT L_RETURN.
IT_MSSAGE-USERNAME = l_username.
IT_MSSAGE-UTYPE = L_RETURN-TYPE. "l-return是一张消息表
IT_MSSAGE-MSGTX = L_RETURN-MESSAGE.
APPEND IT_MSSAGE.
ENDLOOP.
* 如果是弹出消息提示,就是下面这串代码,因为我们要用lv来显示消息信息,所以这段代码此处无用
APPEND L_RETURN TO IT_MSSAGE.
** LOOP AT l_return.
** "如果成功则调用i005(ZBAPI),否则调用自带的消息文本.
** MESSAGE i005(ZBAPI) WITH l_return-MESSAGE.
** ENDLOOP.
ENDLOOP.
ENDFORM.
*定义窗口定制控制,定义ALV对象
DATA:
WA_CONTAINER TYPE SCRFNAME VALUE 'LV', "LV是屏幕上画出来的LV的名字
ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA:
GS_FIELDCAT TYPE LVC_S_FCAT,
GT_FIELDCAT TYPE LVC_T_FCAT.
**------------------ PBO 屏幕输出前执行-----------------------*
MODULE STATUS_0100 OUTPUT.
*如果窗口还没有创建ALV对象则创建它
IF WA_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT WA_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = WA_CONTAINER. "屏幕上LV名字,在声明中已给初始值
CREATE OBJECT ALV_GRID
EXPORTING
I_PARENT = WA_CUSTOM_CONTAINER.
PERFORM FRM_FIELDCAT. "调用自定义LV显示列表
ENDIF.
CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = IT_MSSAGE[]
IT_FIELDCATALOG = GT_FIELDCAT. "
CLEAR IT_MSSAGE[].
ENDMODULE.
*-----------------------------自定义LV显示---------------------*
FORM FRM_FIELDCAT .
GS_FIELDCAT-COL_POS = 1.
GS_FIELDCAT-FIELDNAME = 'USERNAME'.
GS_FIELDCAT-OUTPUTLEN = 24.
GS_FIELDCAT-COLTEXT = '用户'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
GS_FIELDCAT-COL_POS = 2.
GS_FIELDCAT-FIELDNAME = 'UTYPE'.
GS_FIELDCAT-OUTPUTLEN = 20.
GS_FIELDCAT-COLTEXT = '消息类型'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
GS_FIELDCAT-COL_POS = 3.
GS_FIELDCAT-FIELDNAME = 'MSGTX'.
GS_FIELDCAT-OUTPUTLEN = 80.
GS_FIELDCAT-COLTEXT = '消息'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
GS_FIELDCAT-COL_POS = 4.
GS_FIELDCAT-FIELDNAME = 'FLAGS'.
GS_FIELDCAT-OUTPUTLEN = 10.
GS_FIELDCAT-COLTEXT = '备注'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
ENDFORM.
BDC
*BDC批量
FORM Z_BDC .
LOOP AT IT_USERS.
IF IT_USERS-TAG EQ 'X'.
CLEAR:
IT_BDCDATA,IT_BDCDATA[].
perform bdc_dynpro using 'SAPLSUU5' '0050'.
perform bdc_field using 'BDC_CURSOR'
'USR02-BNAME'.
perform bdc_field using 'BDC_OKCODE'
'=CREA'.
perform bdc_field using 'USR02-BNAME'
IT_USERS-USERNAME.
perform bdc_dynpro using 'SAPLSUU5' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=UPD'.
perform bdc_field using 'BDC_CURSOR'
'ADDR3_DATA-NAME_LAST'.
perform bdc_field using 'ADDR3_DATA-NAME_LAST'
IT_USERS-LASTNAME.
* perform bdc_field using 'ADDR3_DATA-LANGU_P'
* record-LANGU_P_003.
" perform bdc_field using 'ADDR3_DATA-DEFLT_COMM'
" 'zh'.
perform bdc_dynpro using 'SAPLSUU5' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=UPD'.
perform bdc_field using 'BDC_CURSOR'
'G_PASSWORD2'.
perform bdc_field using 'USLOGOND-USTYP'
''.
perform bdc_field using 'G_PASSWORD1'
IT_USERS-PASSWORD.
perform bdc_field using 'G_PASSWORD2'
IT_USERS-PASSWORD.
perform bdc_transaction using 'SU01'.
PERFORM FRM_MESSAGE. "放IF里,代表只有选中才会赋值
ENDIF.
ENDLOOP.
ENDFORM.
*---------------------Start new screen ----------------------------
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROGRAM. "BDC模块库
IT_BDCDATA-DYNPRO = DYNPRO. "BDC屏幕号码
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM.
*-------------------------Insert field ----------------------------
FORM BDC_FIELD USING FNAM FVAL.
DATA NODATA.
IF FVAL <> NODATA.
CLEAR IT_BDCDATA. "IT_IT_BDCDATA系统结构
IT_BDCDATA-FNAM = FNAM. "FNAM字段名
IT_BDCDATA-FVAL = FVAL. "字段值
APPEND IT_BDCDATA. "
ENDIF.
ENDFORM.
FORM BDC_TRANSACTION USING tcode.
REFRESH messtab.
CALL TRANSACTION tcode USING IT_BDCDATA
MODE 'N' "如果是'N',则代表点击按钮时直接保存,不然会跳su01界面去
UPDATE 'S'
MESSAGES INTO messtab.
ENDFORM.
*&------------------ Form FRM_MESSAGE------------------------------
FORM FRM_MESSAGE .
DATA L_MSTRING(248).
INCLUDE . "导入灯包
TABLES T100.
LOOP AT messtab.
SELECT SINGLE * FROM T100 WHERE SPRSL = messtab-MSGSPRA
AND ARBGB = messtab-MSGID
AND MSGNR = messtab-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH messtab-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH messtab-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH messtab-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH messtab-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH messtab-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH messtab-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH messta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OOLV 显示 BAPI BDC 打印