Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347851
  • 博文数量: 25
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 367
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-28 13:22
个人简介

生命在于折腾

文章分类

全部博文(25)

文章存档

2015年(1)

2011年(3)

2010年(4)

2009年(17)

我的朋友

分类: 敏捷开发

2009-07-13 14:40:09

在系统中,我们经常可以看到EDI方式的输出,与打印输出类似。下面我们基于文章"IDOC实例,Outbound IDOC"的基础上,简单讲解这种方式的IDOC输出。
 
1,创建一个function:Y_IDOC_PO_SEND.
这是我们的Outbound Funtion Module,用来创建IDOC的内容。同样的,该函数的接口都是标准的。
下面将要介绍的tcode WE41中可以查看系统已有的同类函数,可以参照设置我们的函数接口。然后写入如下代码:
 
  DATA: ls_pohead TYPE ypohead,
        ls_poitem TYPE ypoitem,
        ls_ekko TYPE ekko,
        lt_ekpo TYPE TABLE OF ekpo WITH HEADER LINE.
 
* control_record_out
  CLEAR control_record_out.
  MOVE control_record_in TO control_record_out.
* control_record_out-mestyp = 'YPO'. "Message Type
* control_record_out-idoctp = 'YPOIDOC'. "IDOC Type
  control_record_out-direct = '1'.
  control_record_out-serial = sy-datum.
  control_record_out-serial+8 = sy-uzeit.
 
* Read from ekko/ekpo
  CLEAR ls_ekko.
  SELECT SINGLE *
    INTO ls_ekko
    FROM ekko
    WHERE ebeln = object-objky(10) "采购单号
    AND   loekz = space.
  IF sy-subrc <> 0.
    RAISE error_message_received.
  ENDIF.
  REFRESH lt_ekpo.
  SELECT *
    INTO TABLE lt_ekpo
    FROM ekpo
    WHERE ebeln = ls_ekko-ebeln
    AND   loekz = space.
 
* INT_EDIDD
  CLEAR int_edidd.
  int_edidd-docnum = control_record_out-docnum.
  int_edidd-segnam = 'YPOHEAD'."结点名称
  int_edidd-dtint2 = 0.
  CLEAR ls_pohead.
  ls_pohead-ebeln = ls_ekko-ebeln.
  ls_pohead-bukrs = ls_ekko-bukrs.
  ls_pohead-bedat = ls_ekko-bedat.
  int_edidd-sdata = ls_pohead. "结点内容
  APPEND int_edidd.
  LOOP AT lt_ekpo.
    CLEAR int_edidd.
    int_edidd-docnum = control_record_out-docnum.
    int_edidd-segnam = 'YPOITEM'.
    int_edidd-dtint2 = 0.
    CLEAR ls_poitem.
    ls_poitem-ebeln = lt_ekpo-ebeln.
    ls_poitem-ebelp = lt_ekpo-ebelp.
    ls_poitem-matnr = lt_ekpo-matnr.
    ls_poitem-menge = lt_ekpo-menge.
    ls_poitem-meins = lt_ekpo-meins.
    int_edidd-sdata = ls_poitem.
    APPEND int_edidd.
  ENDLOOP.
 
2,WE41, 创建Outbound Process Code
进入编辑状态后,选择“添加新条目”按钮,创建YPOSEND,对应于新建的Y_IDOC_PO_SEND。
选中下面的Process with ALE Service,代表创建Outbound IDOC后自动发送给接收方。
 
3,NACE/NACO,创建我们的输出类型
创建一个EDI类型的输出,Program填写RSNASTED,Form Routine填写EDI_PROCESSING。
当然我们也可以在这里找一个已有的EDI输出类型做测试,比如Application EF下的XX01。
 
4,WE20设置Partner Profile.
前两篇文章中,我们并没有要求填写Partner function,不过这次必须填写了。
Partner function是从属于partner type下面的,这个逻辑关系在表TPAR中体现。
假设我们选中partner type=LS,Partner function=LS。其维护与之前的类似,点击加号添加一个Outbound Parameter,步骤与之前类似,不过必须记得在Message Control中添加一行,Application=EF,Message Type=XX01,Process code为YPOSEND。这里EF和XX01与上面NACO中的定义对应。
 
5,发送IDOC
事实上,我们已经定义完毕了,可以维护某采购订单的输出类型来发送IDOC了。
为了大家能更好的理解,我们来模仿这个输出过程。创建新程序,写入:
 
TABLES: nast.
DATA: rcode TYPE i.

CLEAR nast.
nast-kappl = 'EF'.
nast-objky = '4014000182'. "采购单号
nast-kschl = 'XX01'.
nast-parnr = 'I02LS'. "Partner number
nast-parvw = 'LS'. "Partner function
PERFORM edi_processing(rsnasted) USING rcode 'X'.
IF rcode IS INITIAL.
  COMMIT WORK. "发送IDOC到接收方
ENDIF.
 
上面的方法并不会在NAST留下输出记录。如果您希望能在NAST中留下一条记录,则应该这样:
TABLES: nast.
DATA: rcode TYPE i.

CLEAR nast.
nast-kappl = 'EF'.
nast-objky = '4014000182'.
nast-kschl = 'XX01'.
nast-parnr = 'I02LS'.
nast-parvw = 'LS'.
nast-spras = sy-langu.
nast-erdat = sy-datum.
nast-eruhr = sy-uzeit.
nast-nacha = '6'. "EDI
nast-anzal = 0.
nast-usnam = sy-uname.
PERFORM einzelnachricht(rsnast00) USING rcode.
IF rcode IS INITIAL.
  COMMIT WORK. "发送IDOC到接收方
ENDIF.
 
下面这种方式同样可用于触发其他方式的输出类型,比如打印输出。
 
阅读(9929) | 评论(14) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-04-09 09:57:51

请斑竹帮忙看看 EDI:合伙人参数文件外向处理代码无效 消息号 E0335 诊断 不能找到有以下关键值的伙伴参数文件(出站): /I02LS/LS/LS/EF/NEU// 这包括表 EDP12 的关键字字段: -RCVPRN 接收者合作伙伴编号 -RCVPRT 接收者合作伙伴类型 -RCVPFC 接收者合作伙伴功能 -KAPPL 消息条件的应用程序 -KSCHL 消息 -AENDE 更改消息标志 步骤 请检查处理代码分配的伙伴参数文件(出站): 执行功能

chinaunix网友2010-04-09 09:44:07

我这里也出现这个错误: 为合作伙伴 I02LS 维护电子数据交换连接数据 消息号 VN032 诊断 系统不能定位合作伙伴I02LS的 EDI 合作伙伴协议(向外)。 系统响应 不能使用带有此合作伙伴的传输媒介 'EDI'。 步骤 为合作伙伴I02LS维护 EDI 合作伙伴协议。确保为输出控制创建输入并为出站参数创建输入。 我确认在WE20维护了。

chinaunix网友2010-02-25 11:05:24

hi, 我照着做了一遍, 运行触发程序时出错如下: EDI: Partner profile outbound process code not available 我检查了WE41的设置, 也尝试重建Outbound Process Code, 错误依旧. 关于out type , 我的ECC6的IDES确实没有XX01, 所以我新建了一个. 前两篇虽然也有些问题, 但总算都过来了,这里卡住了,还请博主指教.

chinaunix网友2010-01-05 10:11:10

"3,NACE/NACO,创建输出类型", 是新建"XX01"么,怎么找不到啊, 兄弟能不能写具体一点?

chinaunix网友2009-09-23 10:48:15

真的很不错!! 我正在找这部分的资料呢,实例资料很好,谢谢!!!