Created by Jerry Wang, last modified on Jul 25, 2014
使用如下的report读取指定product的distribution chain信息:
DATA:
ls_product TYPE comt_product,
lt_read_settype_id TYPE comt_frgtype_id_tab,
ls_product_old_data TYPE comt_product_maintain_api,
lt_set_old_data TYPE comt_product_maintain_api_sett,
lt_org_type TYPE comt_pr_org_type_list_tab.
ls_product-product_guid = '00163EA720001EE28EA88D619832B285'.
ls_product-product_type = '01'.
APPEND 'CRMM_PR_SALESH' TO lt_read_settype_id.
APPEND 'CRMM_PR_SALESH' TO lt_read_settype_id.
APPEND '01' TO lt_org_type.
CALL FUNCTION 'COM_PRODUCT_GETDETAIL_INTERNAL'
EXPORTING
is_product = ls_product
iv_read_db_values = 'X'
it_req_settypes = lt_read_settype_id
it_org_types = lt_org_type
IMPORTING
es_product = ls_product_old_data
et_set = lt_set_old_data.
READ TABLE lt_set_old_data ASSIGNING FIELD-SYMBOL(<result1>) INDEX 1.
READ TABLE lt_set_old_data ASSIGNING FIELD-SYMBOL(<result2>) INDEX 2.
执行report,会观察到由于输入参数IT_REQ_SETTYPES里我们传入了两条相同的setype ID,因此最后function module返回两个resultset,格式如下:
每条result set的DATA column包含的数据格式如下:
两个resultset里具有完全相同的distribution chain信息:
通过debug function module内部代码可以发现,用于存储resultset的internal table都是通过CREATE_DATA语句在heap里动态创建的:
line 92执行完之后,
IT_REQ_SETTYPES里面的一个settype id对应的resultset就已经append在输出参数ET_SET里了:
如果客户的organization model非常庞大,则IT_REQ_SETTYPES里出现duplicate request的settype id可能会导致巨大的内存消耗,例如incident 2014 627848。 因此在call该function module之前务必将所有duplicate key删除。