1. 为客户自定义凭证创建一个新的Business Object type,T-Code:SWO1
2. 建立客户自定义凭证和SAP标准凭证的关系。
具体做法:在数据表ASHGETS中添加一条记录用于指定一个FM,这个FM将用来建立MyDoc与PO的关系。
解释:在读取凭证流列表中的每一条凭证时,所有在数据表ASHGETS中指定的FM都将被依次执行用以建立所有凭证之间的关系。每一个FM被执行后,都会将跟当前凭证相邻的凭证输出到参数T_RELATIONS中,T_RELATIONS中的新凭证将会进入下一次循环,重复前面的过程,直到没有新的凭证被读取到。
3. 显示客户自定义凭证的详细信息。
具体做法:在数据表ASHMETHODS中添加一条记录用于指定显示MyDoc详细信息的FM和显示凭证描述的FM,并把它分派给步骤1中创建的Business Object Type
4. SE37,创建步骤2,3中指定的FM,并且完成代码。
5. 显示凭证流,T-Code:ALO1。在凭证流一览列表中将能够看到客户的自定义凭证。
举例:
在这个例子中,我们有一个客户自定义的凭证,存储在自定义的数据表ZGOSTEST02中,这个凭证将和采购订单关联,数据表ZGOSTEST02中的字段REFKEY将用来存放采购订单号。下面的步骤将会演示如何实现这个例子。
1.新建一个Business Object type叫ZMYDOC,它将对应于我们自定义的凭证。
2. 数据表ZGOSTEST02,用来存放这个自定义凭证的数据。表结构如下:
在我们的这个例子中,字段REFKEY将用来存放PO号。
我们将在这张表中添加一条记录,MYDOC的值为0001000000,REFTYPE为”BUS2012”,REFKEY为PO号:4500018249
注意:针对不同的Object type,用于生成Object key值的规则是不同的。比如对于PO,它就是PO号本身;而对于发票,它的值就是发票号加上财务年度。
3.数据表ZGOSTEST01,用来存放这个自定义凭证和PO的关系。表结构如下:
字段ORIG_OBJKEY用来存放PO号。
在这张表中,我们将把PO:4500018249和MYDOC: 0001000000关联起来。
4.在数据表ASHGETS中添加一条记录,对应FM: Z_DRB_MYDOC_GET,FM的参数可以参照数据表中其他的FM,这个数据表中所有的FM的参数都应该是一样的。代码如下:
DATA: ls_borident TYPE borident.**BUS2012: Business Object type of PO
**ZMYDOC: Business Object type of our own document
CASE i_borident-objtype.
WHEN ‘ZMYDOC’.
SELECT SINGLE reftype refkey FROM zgostest02
INTO (ls_borident-objtype, ls_borident-objkey)
WHERE mydoc = i_borident-objkey.
IF sy-subrc is INITIAL.
* Only PO is cared in this example
IF ls_borident-objtype = ‘BUS2012′.
APPEND ls_borident TO t_relations.
ENDIF.
ENDIF.
WHEN ‘BUS2012′.
SELECT SINGLE mydoc FROM zgostest01 INTO ls_borident-objkey
WHERE orig_objtyp = i_borident-objtype
AND orig_objkey = i_borident-objkey.
IF sy-subrc is INITIAL.
ls_borident-objtype = ‘ZMYDOC’.
APPEND ls_borident TO t_relations.
ENDIF.
WHEN OTHERS.
* do nothing
ENDCASE.
5.在数据表ASHMETHODS中添加一条记录,内容如下:
字段 |
内容 |
Object Type: |
ZMYDOC |
Function Module (DISPLAY) |
Z_DISPLAY_MYDOC |
Function Module (TYPETEXT) |
Z_MYDOC_TEXT_GET |
FM Z_DISPLAY_MYDOC:用于处理凭证在凭证流浏览器中被用户选中时的后续操作,例如,显示凭证明细等等。
FM Z_MYDOC_TEXT_GET:用于得到浏览器中的凭证描述。代码如下:
e_text = ‘Customized document attached to PO’.
6.进入T-Code ALO1,请参照下面的截屏。
按F8
双击到下一屏, 此时在数据表ASHGETS中指定的FM:Z_DRB_MYDOC_GET将会被调用,并且建立起如下图的凭证流关系。
在双击上面被选中的那一行时,数据表ASHMETHODS中指定的FM Z_DISPLAY_MYDOC将会被调用,以处理后续的自定义的操作。