惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security Archives - TechRepublic
MongoDB | Blog
MongoDB | Blog
量子位
博客园 - 叶小钗
罗磊的独立博客
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
MyScale Blog
MyScale Blog
GbyAI
GbyAI
Help Net Security
Help Net Security
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
Hacker News - Newest:
Hacker News - Newest: "LLM"
Latest news
Latest news
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
S
Schneier on Security
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
S
Securelist
博客园 - Franky
Application and Cybersecurity Blog
Application and Cybersecurity Blog
A
About on SuperTechFans
N
News and Events Feed by Topic
AI
AI
T
Tenable Blog
N
News | PayPal Newsroom
C
Cybersecurity and Infrastructure Security Agency CISA
V
V2EX - 技术
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
L
LINUX DO - 热门话题
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google Online Security Blog
Google Online Security Blog
S
Security Affairs
Webroot Blog
Webroot Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 三生石上(FineUI控件)
C
Comments on: Blog
G
GRAHAM CLULEY

博客园 - levin

如何读取内存的数据?(转) ECC 6.0 安装之后的配置(转) 网络分析中数据包结构的定义 网络管理之数据包的解释与结构分析(转) SAP BDC 技术的分类(转) Delphi中建议使用的语句 Delphi面向对象编程的20条规则 Delphi取整函数 ECC 6.0 New GL Functionality and General FAQ - levin Delphi中的容器类 SAP BDC批量导入数据(转) - levin - 博客园 Master data-Customer 如何快速从BSEG读取数据(转) Rules for Better SQL Programming 刷新ALV定位到当前记录行 - levin - 博客园 双击ALV调用事务代码并传入参数 如何查找系统屏幕参数 一些常用的系统变量(SYST) ABAP内表(internal table)有关的系统变量 ABAP字符串比较操作中空格的影响
BDC教程(转) - levin - 博客园
levin · 2009-08-06 · via 博客园 - levin

以下以MM01为例介绍一下如何编写BDC程序
首先运行T-code SHDB
录屏是比较简单的,按你需要的步骤做就可以了,最后可以得到一张BDC表如下所示:
370)this.width=370">
点击后退,再点PROGRAM系统就会自动生成程序了,但是系统生成的程序经常不能满足我们的要求。
根据这张表我们就可以写程序了。程序基本上可以分为四个部分:
1、 写BDC表
由于写表时有许多程序是重复的操作,可以先写两个子程序,分别用来保存DYNPRO和FIELD信息,这个在系统生成的标准程序里面都有:
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata1.
bdcdata1-program = program.
bdcdata1-dynpro = dynpro.
bdcdata1-dynbegin = 'X'.
APPEND bdcdata1.
ENDFORM.
FORM bdc_field USING fnam fval.
CLEAR bdcdata1.
bdcdata1-fnam = fnam.
bdcdata1-fval = fval.
APPEND bdcdata1.
ENDFORM.
把这两个子程序放在INCLUDE里面,然后再写个填表的子程序,BDC_SUBSCR的内容不用写:
FORM append_mm01 USING arg LIKE wa.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RMMG1-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RMMG1-MATNR' arg-MATNR.
PERFORM bdc_field USING 'RMMG1-MBRSH' arg-MBRSH.
PERFORM bdc_field USING 'RMMG1-MTART' arg-MTART.
*开始新的画面
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(02)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)' 'X'.
*开始新的画面事件
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MAKT-MAKTX'.
PERFORM bdc_field USING 'MAKT-MAKTX' arg-MAKTX.
PERFORM bdc_field USING 'MARA-MEINS' arg-MEINS.
PERFORM bdc_field USING 'MARA-MTPOS_MARA' arg-MTPOS_MARA.
CALL TRANSACTION'MM01' USING bdcdata1 MODE 'N' MESSAGES INTO msgtab.
ENDFORM.

2、 定义所需的数据结构
TABLES : sscrfields, "sscrfields是一个structure,
"不知道为什么可以这样用
T100. "存放消息的表

DATA :
BEGIN OF wa, "定义导入的数据的结构
MATNR TYPE RMMG1-MATNR,
MBRSH TYPE RMMG1-MBRSH,
MTART TYPE RMMG1-MTART,
MAKTX TYPE MAKT-MAKTX,
MEINS TYPE MARA-MEINS,
MTPOS_MARA TYPE MARA-MTPOS_MARA,
END OF wa,
line(1000) TYPE c, "存放excel文件的一行
itab2 LIKE TABLE OF line WITH HEADER LINE, "存放excel文件的内表
itab1 LIKE TABLE OF wa WITH HEADER LINE, "定义导入数据的内表
bdcdata1 LIKE BDCDATA OCCURS 0 WITH HEADER LINE,"定义BDC内表
msgtab LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,"定义消息内表
L_MSTRING(480). "消息字符串

3、 写SELECTION-SCREEN,做好上传文件界面
SELECTION-SCREEN:
BEGIN OF BLOCK b1 WITH FRAME NO INTERVALS,
BEGIN OF LINE,
COMMENT (7) text1.
PARAMETERS file1 LIKE RLGRAP-FILENAME VISIBLE LENGTH 20.
SELECTION-SCREEN:
PUSHBUTTON 32(10) btn1 USER-COMMAND cli1,
END OF LINE,
END OF BLOCK b1.
屏幕事件的监听:
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'CLI1'.
CALL FUNCTION 'WS_FILENAME_GET'"打开文件对话框
IMPORTING
FILENAME = file1
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4.
ENDCASE.

INITIALIZATION.
text1 = '上传文件:'.
btn1 = '浏览…'.

4、 对上传的excel文件进行处理,并输出系统消息
START-OF-SELECTION.
CALL FUNCTION 'WS_UPLOAD'"上传文件
EXPORTING
FILENAME = file1
TABLES
DATA_TAB = itab2
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.

LOOP AT itab2.
SPLIT itab2 AT ',' INTO wa-MATNR wa-MBRSH wa-MTART wa-MAKTX wa-MEINS wa-MTPOS_MARA.
wa-MTPOS_MARA.
APPEND wa TO itab1.
ENDLOOP.

LOOP AT itab1 INTO wa.
PERFORM append_mm01 USING wa.
CLEAR bdcdata1[]. "清空BDCDATA的所有数据
ENDLOOP.

输出系统消息
WRITE : / '消息类型', 20 '消息内容'.
LOOP AT msgtab.
SELECT SINGLE * FROM T100 WHERE SPRSL = msgtab-MSGSPRA
AND ARBGB = msgtab-MSGID
AND MSGNR = msgtab-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH msgtab-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH msgtab-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH msgtab-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH msgtab-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH msgtab-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH msgtab-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH msgtab-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH msgtab-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
WRITE: / msgtab-MSGTYP, 20 L_MSTRING.
ELSE.
WRITE: / msgtab.
ENDIF.
ENDLOOP.

测试csv文件
zchen11,C,WERB,bdc1,CM,NORM
zchen12,C,WERB,bdc2,CM,NORM
zchen13,C,WERB,bdc3,CM,NORM

posted on 2009-08-06 18:22  levin  阅读(615)  评论()    收藏  举报