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