IDOC练习过程Word格式文档下载.docx
- 文档编号:6524346
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:26
- 大小:1.54MB
IDOC练习过程Word格式文档下载.docx
《IDOC练习过程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《IDOC练习过程Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
在出现的页面中,只需要填写描述和rfc目的地即可.
3.设置伙伴参数,事务码we20
在设置伙伴参数前,需要先为目标对象定义一个逻辑系统名,路径如下
在其中,我们增加一条记录
定义完成后,我们使用we20进入如下界面
我们选择逻辑系统(LS),
然后,在outboundparamtrs中,增加一个参数,
保存后,我们在发送端的所有工作完成,这表示我们可以通过我们的配置,使用程序创建一条idoc.以下是程序.
REPORTZTEST_IDOC.
DATA:
BEGINOFF_IDOC_HEADER.
INCLUDESTRUCTUREEDIDC.
ENDOFF_IDOC_HEADER.
BEGINOFT_IDOC_DATAOCCURS10.
INCLUDESTRUCTUREEDIDD.
ENDOFT_IDOC_DATA.
BEGINOFT_IDOC_COMM_CONTROLOCCURS10.
ENDOFT_IDOC_COMM_CONTROL.
start-of-selection.
F_IDOC_HEADER-MESTYP='
ZBOBO'
.
F_IDOC_HEADER-IDOCTP='
F_IDOC_HEADER-RCVPRN='
IDOC800R'
F_IDOC_HEADER-RCVPRT='
LS'
T_IDOC_DATA-SEGNAM='
Z1BOBO'
T_IDOC_DATA-SDATA='
ABCD'
“在sdata中赋值中需要注意的是,如果在这个段中,存在超过一个的字段,则需要将所有字段按照固定长度串在一起赋值.
APPENDT_IDOC_DATA.
CALLFUNCTION'
MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL=F_IDOC_HEADER
TABLES
COMMUNICATION_IDOC_CONTROL=T_IDOC_COMM_CONTROL
MASTER_IDOC_DATA=T_IDOC_DATA
EXCEPTIONS
ERROR_IN_IDOC_CONTROL=1
ERROR_WRITING_IDOC_STATUS=2
ERROR_IN_IDOC_DATA=3
SENDING_LOGICAL_SYSTEM_UNKNOWN=4
OTHERS=5
.
IFSY-SUBRC=0.
COMMITWORK.
ENDIF.
执行该程序后,使用we02应该就可以看到一条成功的出站信息.
同时,由于IDOC800R指向的是本集团,因此,我们还能看到一条错误的入站信息。
如下图最后两条
至此,出站部分已经测试完成。
我们可以看到,事实上,IDOC的出站方式很简单,即通过函数MASTER_IDOC_DISTRIBUTE,将对应消息类型发送到指定的目的地,根据该目的地所对应的端口,找到实际的目标地址。
入站的相关处理
入站,其实就是SAP系统接收到相应的IDOC后,进行的一系列操作。
那么,系统进行操作的步骤为:
首先,根据合作伙伴编号,确定消息来源,在上图中,我们双击最后一条记录,即可看到入站idoc的详细资料,如下图
我们从上图可以发现,合作伙伴编号为T90CLNT090,这里,我们需要解释一下,为什么我们在发送端没有进行任何关于T90CLNT090的设置,就会出现该伙伴编号。
这是因为T90CLNT090这个编号是当前集团的逻辑系统号,我们可以通过事务码SCC4查看得到。
同时,如果我们如果希望接收方出现的伙伴编号不是默认的集团逻辑系统号,我们可以在发送函数设置中,设置
F_IDOC_HEADER-SNDPRN='
XXXXXXXX'
F_IDOC_HEADER-SNDPRT='
XX'
即可。
SNDPRN是发送方的合作伙伴编号,SNDPRT是合作伙伴类型。
在得到合作伙伴编号后,系统会根据该合作伙伴编号所对应的入站消息类型与当前IDOC的消息类型进行匹配。
如图,系统发现T90CLNT090可以处理两种入站类型,分别为ORDERS和ZBOBO。
当前IDOC的消息类型为ZBOBO,则我们进入ZBOBO,双击ZBOBO所在行
我们可以发现,在该消息类型中,系统只配置了执行代码。
事实上,系统找到该消息类型后,执行对应的执行代码来处理该IDOC。
执行完毕后,该IDOC的入站操作即结束。
然后,我们开始讲解如何进行入站的相关配置。
入站的配置分为三部分,一是合作伙伴的确定,二是消息类型,三是执行代码。
其中,消息类型的处理与出站的配置方法相同,而且,由于本测试是同一集团完成,就不再重复说明。
我们先来说明执行代码的处理。
1.创建处理函数。
首先,我们需要创建一个函数,用于处理对应的IDOC信息,该函数的参数必须与系统完全一致,见下图列表
函数名没所谓。
FUNCTIONZCHN_BOBO_IDOC_IN.
*"
----------------------------------------------------------------------
LocalInterface:
IMPORTING
REFERENCE(INPUT_METHOD)TYPEBDWFAP_PAR-INPUTMETHD
REFERENCE(MASS_PROCESSING)TYPEBDWFAP_PAR-MASS_PROC
REFERENCE(NO_APPLICATION_LOG)TYPESY-DATAROPTIONAL
REFERENCE(MASSSAVEINFOS)TYPEMASSSAVINFOPTIONAL
REFERENCE(WORKFLOW_RESULT)TYPEBDWF_PARAM-RESULT
REFERENCE(APPLICATION_VARIABLE)TYPEBDWF_PARAM-APPL_VAR
REFERENCE(IN_UPDATE_TASK)TYPEBDWFAP_PAR-UPDATETASK
REFERENCE(CALL_TRANSACTION_DONE)TYPEBDWFAP_PAR-CALLTRANS
IDOC_CONTRLSTRUCTUREEDIDC
IDOC_DATASTRUCTUREEDIDD
IDOC_STATUSSTRUCTUREBDIDOCSTAT
RETURN_VARIABLESSTRUCTUREBDWFRETVAR
SERIALIZATION_INFOSTRUCTUREBDI_SER
*tables:
ZBOBO1.
*data:
s_zbobo1typezbobo1,
*t_zbobo1typezbobo1occurs0withheaderline.
*
*deletefromzbobo1.
*loopatIDOC_DATA.
*s_zbobo1-matnr='
material'
*s_zbobo1-cputm=sy-UZEIT.
*appends_zbobo1tot_zbobo1.
**insertintozbobo1valueszbobo1.
*endloop.
*s_zbobo1-matnr='
last'
*s_zbobo1-werks='
0100'
*s_zbobo1-cputm=sy-uzeit.
*appends_zbobo1tot_zbobo1.
**insertintozbobo1valueszbobo1.
*loopatidoc_contrl.
*s_zbobo1-matnr=idoc_contrl-DOCNUM.
*insertzbobo1fromtablet_zbobo1.
*commitwork.
loopatidoc_contrl.
clearIDOC_STATUS.
IDOC_STATUS-DOCNUM=idoc_contrl-DOCNUM.
idoc_status-STATUS='
53'
*MESSAGES010(UPS)WITHis_apihdr-upsnam
*INTOtext.
IDOC_STATUS-MSGTY='
S'
IDOC_STATUS-MSGID='
UPS'
IDOC_STATUS-MSGNO='
010'
*wa_status-MSGV1=sy-msgv1.
appendidoc_status.
endloop.
ENDFUNCTION.
该函数的作用,只是将入站的IDOC的状态设置为处理完成。
如果你有兴趣,也可以设置些表,将一些信息写入表中。
2.将函数与消息类型进行关联,事务码WE57
该步骤的作用为向系统显式的表明,该函数可以处理哪些类型的消息类型
3.设置入站函数特性。
事务码BD51
老实说,该步骤的作用我也不是很理解,只不过参考文档上写了,我就照做,回头试下,不用的话,会有什么效果。
4.定义执行代码,事务码WE42
终于到了要紧的一步,该步骤的作用为将该函数设置为一个执行代码,供入站时进行配置
在配置完后,这个地方似乎还可以配置该执行代码可以兼容的消息类型,不理解这个地方的消息类型与函数配置的地方冲突的话会怎么处理。
到此,执行代码定义完成。
我们接下来定义伙伴信息。
伙伴信息的定义方式与出站类似,只是出站的伙伴信息的消息类型配置在出站列表中,入站配置在入站列表中,如下图
该合作伙伴可以处理两种消息类型。
具体到内部,如ZBOBO,
我们可以看到该消息类型所对应的执行代码。
定义完全后,我们使用bd87,在入站错误列表中选中一条错误信息
然后点击执行。
我们可以发现,该信息被成功处理。
到这里,我们手动创建IDOC,然后发送,接收,并使用自己的函数进行处理就做完了。
由于我们是使用同一client进行测试,因此,没有安全信息问题,如果测试的是在不同的client或者服务器上,在接收方需要使用事务码BD64进行发布,具体的大家自己看下应该就了解了。
做完测试后,我们会考虑到另外一个问题,就是貌似IDOC其实也没什么特别的功能,跟远程callrfc函数区别不大。
我个人感觉也是类似,只是IDOC在配置上增加了很多的内容,包括错误处理,包括不同的目的地(比如支持文件,http等),还有,就是系统对IDOC有很多封装好的执行代码和消息类型,这些东西,如果我们自己写,就会很花时间,但如果直接调用系统的功能,就很方便了。
我们下面进行一个配置,功能是在采购订单创建时,自动生成一条IDOC并发出。
整个的执行逻辑是这样,我们首先需要为采购订单定义一个Message,这个MESSAGE与IDOC的消息类型没有联系,就是在采购订单创建时,我们点击消息按钮,在里边的消息
如上图中的ZNEU.
然后,在消息的执行代码中,写入我们发送IDOC的代码,在订单保存时,该IDOC就会被创建并发送。
(事实逻辑跟我们做自动打印差不多)
配置步骤如下:
1.创建一个消息,路径为SPRO->
MaterialManagement->
Purchasing->
Message->
OutputControl->
MessageTypes->
DefineMessageTypesForPurchaseOrder
我们复制一个标准信息类型NEU,定义为ZNEU
我们选择ZNEU,点击左边的ProcessingRoutines,我们可以看到该信息类型针对不同业务类型时的执行程序,我们需要使用的是EDI类型。
我们发现,针对EDI类型时,系统会调用程序RSNASTED中的子程序EDI_PROCESSING。
这个是系统默认的IDOC的生成程序,如果我们需要自己创建IDOC,则可以编写自己的程序将其替换,或者使用其本身默认程序。
相同的菜单,选择Fine-TunedControl:
PurchaseOrder
将ZNEU加入其中
2.将该消息类型分配给消息确认过程,路径为
SPRO->
MessageDeterminationSchemas->
DefineMessageSchemaforPurchaseOrder
先选择MaintainMessageDeterminationSchema:
我们从RMBEF1拷贝到RMBEF3,在controldata中将zneu加入
保存后,在AssignSchematoPurchaseOrder步骤中,将其分配给采购订单,如下图
到这步,我们已经将配置工作完成,
然后,我们到前台,将该消息类型分配给不同的采购订单类型。
事务码MN05
我们将该消息类型分配给采购订单类型NB,同时,确定该消息类型为EDI(6),输出时间为马上输出(4)
然后,我们需要将供应商创建为一个合作伙伴(WE20)
设置出站消息类型为ORDERS。
设置完毕后。
我们创建一条与该供应商相关的采购订单,保存前,我们点击MESSAGE,我们可以看到ZNEU在列表中出现
保存后,使用we02,应该可以看到一条成功的出站信息和一条错误的入站信息,入站信息错误,是因为我们没有针对该消息类型进行入站配置。
到这儿,我们可以大致了解到一些使用系统标准IDOC的方法。
因为很多标准功能(如采购订单,销售订单等),都提供了消息处理机制。
我们需要做的,就是通过该消息处理机制,将我们需要的消息类型配置上去,使系统自动带出该消息,并在订单保存时执行该消息对应的代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IDOC 练习 过程