SAP中实现分布式的一个机制就是ALE/IDoc,而在具体一点就是change point。
Change point是用来分发主数据的。主要有两种实现方式,一种是直接方式,另外一种是通过SMD tool(shared data master tool)来实现。
我们先来讲一下直接方式。所谓的直接方式,就是运行一个为一个主数据专门的Repoort程序,填入相关参数,就可以对此主数据进行分发。
一般这样的报表的名字是这样的:RBDSE***,***是message type的前三位,比如物料主数据MATMAS,它的程序就是RBDSEMAT。
这些程序的逻辑都是固定的,其中总有一个名字形如:MASTERIDOC_CREATE_REQ_*****的Function,*****是message type,接上个例子,就是MATMAS。这个程序就是执行change point和生成IDoc的主要Function。
CALL FUNCTION 'MASTERIDOC_CREATE_REQ_MATMAS'
这个Function中有几点大家要注意的:
1. DATA: C_MSGFN_R LIKE BDIMARAKEY-MSGFN VALUE '005'.
生成的IDoc中MSGFN字段都是’005’
2. CALL FUNCTION 'MASTERIDOC_CREATE_MATMAS
上面的Function中 CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
就是把IDoc传到ALE,进行分发。
3. 最后才是提交和解锁
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_ALL'.
CALL FUNCTION 'DEQUEUE_ALL'.
Q:INBOUND的处理是通过调用一个开发人员写的FUNTION MODULE Z*去处理的,那么OUTBOUNDOUTBOUND到底是怎么触发的呢? 是我们自己写函数还是系统自动生成的呢?比如自己建的一个ZSEGMENT,ZMESS,ZIDOC, 我们是如何告诉系统什么时候应该去记录数据并且将它DISTRIBUTE出去呢? 这个函数 MASTER_IDOC_DISTRIBUTE 是系统自动去调用吗 ? 还是也是嵌在一个Z*的函数里 由REPORT去触发呢?
A:Inbound不一定直接去调用function moudle的,有一种bapi形式的是需要通过BDBG去生成bapi的。系统有现成的程序去动态调用。而且触发Inbound function方式有立即和后台两种。至于Outbound,也有自动和手动之分,一些change point等就会自动分发,message type control的那些也是可以设成自动,而另外一些,需要跑独立的程序去触发。这些你可以到Tools->ALE下找找。还有要提一下,记录数据是写数据表,生成idoc是生成idoc,一般是先写数据表,然后再根据数据表中的内容生成idoc。
至于ALE/IDoc还涉及很多东西,我blog上只是写了一点点,所以如果要深入地学习,还要有实际的业务来做。
至于ALE/IDoc还涉及很多东西,我blog上只是写了一点点,所以如果要深入地学习,还要有实际的业务来做。