Sie sind auf Seite 1von 63

SRM 增强总结

目录
1.POWL 程序对应 Feeder Class 查找方法 ...................................... 2

2.供应商预选界面 变更查询条件/新增查询条件 增强 ................. 4

3.供应商预选界面 变更显示列表数据显示/新增字段 增强 ......... 7

4.显示潜在供应商页面 重置调查问卷地址 增强 ........................ 15

5.创建潜在供应商页面增强 ........................................................... 18

6.策略采购-战略货源-回应和中标界面 增强 .............................. 26

7.策略采购-战略货源 RFx 界面字段 增强 ................................... 46

8.采购订单 BSP 页面 字段增强 .................................................... 50


1.POWL 程序对应 Feeder Class 查找方法

.在页面上右键—技术帮助

.进入下一页面 找到 applid

.使用事务代码 powl_typer 根据 applid 获取 Powl Type


.使用事务代码 powl_type 根据 Powl Type 获取对应的 Feeder Class
2.供应商预选界面 变更查询条件/新增查询条件 增强

.增强位置

类:/SAPSRM/CL_CLL_POWLT_BUPA_PSUP

方法: SET_MT_SELCRITERIA
.效果

.源码
ENHANCEMENT 1 ZEH002_CHANGE_CATTXT. "active version
*删除原数据
DELETE mt_selcriteria WHERE selname EQ /sapsrm/if_cll_powl_c
=>gc_bupa_selcrit_category_id.

*新增参数
* CATEGORY_ID (Category ID) (Select option, no Interval, Multi
select)
CLEAR ls_selcrit.
ls_selcrit-
selname = /sapsrm/if_cll_powl_c=>gc_bupa_selcrit_ca
tegory_id.
ls_selcrit-
kind = /sapsrm/if_cll_powl_c=>gc_select_option.
ls_selcrit-
selopt_type = /sapsrm/if_cll_powl_c=>gc_selop_multisel.
ls_selcrit-
ref_table = /sapsrm/if_cll_powl_c=>gc_bupa_searchstru
cture_r.
ls_selcrit-
ref_field = /sapsrm/if_cll_powl_c=>gc_bupa_search_cr_
category_psp.
ls_selcrit-crittext = 'Product Category'(037).
ls_selcrit-tooltip = 'Product Category'(037).
ls_selcrit-allow_admin_change = abap_true.
ls_selcrit-quicksearch_crit = abap_true.

APPEND ls_selcrit TO mt_selcriteria.

IF sy-langu = '1'.
CLEAR ls_selcrit.
ls_selcrit-selname = 'MATERIAL_TYPE'.
ls_selcrit-
kind = /sapsrm/if_cll_powl_c=>gc_select_option.
ls_selcrit-
selopt_type = /sapsrm/if_cll_powl_c=>gc_selop_multisel.
ls_selcrit-
ref_table = /sapsrm/if_cll_powl_c=>gc_bupa_searchstru
cture_r.
ls_selcrit-ref_field = 'MATERIAL_TYPE'.
ls_selcrit-crittext = '物料类别'.
ls_selcrit-tooltip = '物料类别'.
ls_selcrit-allow_admin_change = abap_true.
ls_selcrit-quicksearch_crit = abap_true.
ls_selcrit-OVS_HANDLER_NAME = 'ZCL_OVS_CATEGORY'.

APPEND ls_selcrit TO mt_selcriteria.


else.
CLEAR ls_selcrit.
ls_selcrit-selname = 'MATERIAL_TYPE'.
ls_selcrit-
kind = /sapsrm/if_cll_powl_c=>gc_select_option.
ls_selcrit-
selopt_type = /sapsrm/if_cll_powl_c=>gc_selop_multisel.
ls_selcrit-
ref_table = /sapsrm/if_cll_powl_c=>gc_bupa_searchstru
cture_r.
ls_selcrit-ref_field = 'MATERIAL_TYPE'.
ls_selcrit-crittext = 'Commodity Category'.
ls_selcrit-tooltip = 'Commodity Category'.
ls_selcrit-allow_admin_change = abap_true.
ls_selcrit-quicksearch_crit = abap_true.
ls_selcrit-OVS_HANDLER_NAME = 'ZCL_OVS_CATEGORY'.

APPEND ls_selcrit TO mt_selcriteria.


ENDIF.
ENDENHANCEMENT.

3.供应商预选界面 变更显示列表数据显示/新增字段 增强

.增强位置

变更列表数据&字段赋值

类:/SAPSRM/CL_CLL_POWLT_BUPA_PSUP

方法:EXECUTE_SEARCH

方法中位置

.增强结构

查询条件结构:/SAPSRM/S_SEARCH_FIELDS_BUPA
显示结果列表结构:/SAPSRM/S_POWL_RESULT_PSUP

.效果

.源码
ENHANCEMENT 1 ZEH_SUPPLIER_SET_VALUE. "active version
*SET VALUE
TYPES:BEGIN OF ty_data,
land1 TYPE t005u-land1,
BLAND TYPE t005u-BLAND,
LANDX50 TYPE t005t-LANDX50,
BEZEI TYPE t005u-BEZEI,

END OF ty_data.

types: begin of ty_cat,


partner type bu_partner,
zcomcat type char80,
end of ty_cat.

DATA:lw_ROS_BP_PC_SURVEY type ROS_BP_PC_SURVEY.


DATA:lt_ROS_BP_PC_SURVEY type table of ROS_BP_PC_SURVEY.
FIELD-SYMBOLS:<fs_results> type ANY.
FIELD-SYMBOLS:<fs_field> type ANY.
FIELD-SYMBOLS:<fs_field1> type ANY.
DATA:lv_domname type dd07l-domname.
DATA:lv_ddtext type ddtext.
DATA:lv_domvalue type string.

DATA:lt_country TYPE STANDARD TABLE OF t005t,


ls_country TYPE
t005t.
DATA:lt_data TYPE STANDARD TABLE OF ty_data,
ls_data TYPE ty_d
ata.
DATA:es_result LIKE LINE OF et_search_result_bupa.

data: lt_ztcommcode type table of ZTCOMMCODE,


ls_ztcommcode type ZTCOMMCODE,
lt_ztcommcode1 type table of ZTCOMMCODE,
ls_ztcommcode1 type ZTCOMMCODE,
lt_sel_mt type /SAPSRM/PDO_SRCH_RGT_CATEGORID,
ls_cat type ty_cat,
lt_cat type table of ty_cat.

field-symbols: <fs_ztcommcode> type ZTCOMMCODE.


lt_sel_mt = ms_search_criteria-MATERIAL_TYPE_RGT.

IF lt_sel_mt is not initial.


select *
from ZTCOMMCODE
into table lt_ztcommcode
where ZCOMCAT in lt_sel_mt.
ENDIF.

select *
from ZTCOMMCODE
into table lt_ztcommcode1
for all entries in et_search_result_bupa
where partner = et_search_result_bupa-partner.

sort lt_ztcommcode1 by partner.


delete adjacent duplicates from lt_ztcommcode1 comparing pa
rtner ZCOMCAT.
LOOP AT lt_ztcommcode1 assigning <fs_ztcommcode>.
at new partner.
clear ls_cat.
ls_cat-partner = <fs_ztcommcode>-partner.
endat.
IF ls_cat-ZCOMCAT is initial.
ls_cat-ZCOMCAT = <fs_ztcommcode>-ZCOMCAT.
else.
concatenate ls_cat-ZCOMCAT ',' <fs_ztcommcode>-
ZCOMCAT into ls_cat-ZCOMCAT.
ENDIF.
at end of partner.
append ls_cat to lt_cat.
endat.
ENDLOOP.

SELECT *
INTO TABLE lt_country
FROM t005t
FOR ALL ENTRIES IN et_search_result_bupa
WHERE t005t~land1 = et_search_result_bupa-country
AND t005t~spras = sy-langu.

SELECT t005t~land1
t005u~bland
t005t~LANDX50
t005u~BEZEI
INTO TABLE lt_data
FROM t005t
INNER JOIN t005u on t005t~land1 = t005u~land1 AND t005t~spr
as = t005u~SPRAS
FOR ALL ENTRIES IN et_search_result_bupa[]
WHERE t005t~land1 = et_search_result_bupa-country
AND t005u~bland = et_search_result_bupa-region
AND t005t~spras = sy-langu.

select * into table lt_ROS_BP_PC_SURVEY


from ROS_BP_PC_SURVEY
for all entries in et_search_result_bupa
where partner_guid eq et_search_result_bupa-PARTNER_GUID.
LOOP AT et_search_result_bupa INTO es_result .

READ TABLE lt_country INTO ls_country WITH KEY land1 =


es_result-country.
if sy-subrc = 0.
es_result-LANDX50 = ls_country-LANDX50.

READ TABLE lt_data INTO ls_data WITH KEY land1 = es_r


esult-country BLAND = es_result-region..
IF sy-subrc = 0..
es_result-BEZEI = ls_data-BEZEI.
ENDIF.

ENDIF.

* 更改调查表状态
read table lt_ros_bp_pc_survey into lw_ROS_BP_PC_SURVEY
with key partner_guid = es_result-partner_guid.
IF sy-subrc = 0.
"获取域文本
lv_domname = '/SAPSRM/SUCO_QSTN_STATUS'.
lv_domvalue = lw_ROS_BP_PC_SURVEY-EMAIL_STATUS.

"获取文本
CALL METHOD y_cl_wd_tool=>get_domvalues
EXPORTING
iv_domname = lv_domname
iv_domvalue = lv_domvalue
iv_langu = sy-langu
RECEIVING
rv_ddtext = lv_ddtext.
lw_ROS_BP_PC_SURVEY-EMAIL_STATUS = lv_ddtext.

es_result-qstatus_text = lw_ROS_BP_PC_SURVEY-
EMAIL_STATUS.
ENDIF.

read table lt_cat into ls_cat with key partner = es_resu


lt-partner.
IF sy-subrc = 0.
es_result-ZCOMCAT = ls_cat-ZCOMCAT.
ENDIF.

IF lt_ztcommcode is not initial.


read table lt_ztcommcode into ls_ztcommcode with key
PARTNER = es_result-partner.
IF sy-subrc <> 0.
delete et_search_result_bupa.
else.
MODIFY et_search_result_bupa FROM es_result transpo
rting LANDX50 BEZEI QSTATUS_TEXT ZCOMCAT.
ENDIF.
elseif lt_sel_mt is not initial.
delete et_search_result_bupa.
ENDIF.

IF lt_sel_mt is initial.
MODIFY et_search_result_bupa FROM es_result transporti
ng LANDX50 BEZEI QSTATUS_TEXT ZCOMCAT.
ENDIF.

ENDLOOP.

ENDENHANCEMENT.

.新增字段 增强位置

类 :

/SAPSRM/CL_CLL_POWLT_BUPA_PSUP->/SAPSRM/CL_CLL_POWL_BO_BUPA->

/SAPSRM/CL_CLL_POWL_BASE

方法: IF_POWL_FEEDER~GET_FIELD_CATALOG

.效果

.源码
ENHANCEMENT 1 ZEH055_RFXS_ADD_FIELDS. "active version
*报价界面新增字段
DATA:lw_fieldcat_rfx TYPE powl_fieldcat_sty.

"DM/IDM
lw_fieldcat_rfx-colid = 'ZZDMIDM'.
lw_fieldcat_rfx-colpos = 3.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

"E-Office PR
lw_fieldcat_rfx-colid = 'ZZEOFPR'.
lw_fieldcat_rfx-colpos = 3.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

"Status
lw_fieldcat_rfx-colid = 'ZAPRSTATUS'.
lw_fieldcat_rfx-colpos = 4.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

"ERFQFORM ID
lw_fieldcat_rfx-colid = 'EFORMID'.
lw_fieldcat_rfx-colpos = 4.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

IF c_fieldcat <> mt_fieldcat.


c_fieldcat = mt_fieldcat.
e_fieldcat_changed = abap_true.
ENDIF.

ENDENHANCEMENT.
ENHANCEMENT 2 ZEH_SUPPLIER. "active version
* add field
DATA:lw_fieldcat TYPE powl_fieldcat_sty.
CLEAR lw_fieldcat.
lw_fieldcat-colid = 'LANDX50'.
lw_fieldcat-COLPOS = 7.
lw_fieldcat-display_type = 'TV'.
lw_fieldcat-col_visible = 'X'.
lw_fieldcat-allow_filter = 'X'.
lw_fieldcat-allow_sort = 'X'.
lw_fieldcat-enabled = 'X'.
INSERT lw_fieldcat INTO TABLE mt_fieldcat .

lw_fieldcat-colid = 'BEZEI'.
lw_fieldcat-COLPOS = 9.
lw_fieldcat-display_type = 'TV'.
lw_fieldcat-col_visible = 'X'.
lw_fieldcat-allow_filter = 'X'.
lw_fieldcat-allow_sort = 'X'.
lw_fieldcat-enabled = 'X'.
INSERT lw_fieldcat INTO TABLE mt_fieldcat .

lw_fieldcat-colid = 'ZCOMCAT'.
lw_fieldcat-COLPOS = 5.
lw_fieldcat-display_type = 'TV'.
lw_fieldcat-col_visible = 'X'.
lw_fieldcat-allow_filter = 'X'.
lw_fieldcat-allow_sort = 'X'.
lw_fieldcat-enabled = 'X'.

INSERT lw_fieldcat INTO TABLE mt_fieldcat.

IF c_fieldcat <> mt_fieldcat.


c_fieldcat = mt_fieldcat.
e_fieldcat_changed = abap_true.
ENDIF.

ENDENHANCEMENT.
4.显示潜在供应商页面 重置调查问卷地址 增强

.增强位置

类:/SAPSRM/CL_SUCO_QSTNR_HELPER

方法:QSTNR_URL_GET

.效果

.源码
ENHANCEMENT 1 ZEH002_LINK_TO_QUEST. "active version
DATA:lv_vurl TYPE string,
lv_client TYPE sy-mandt,
lv_vlangu TYPE string,
lv_partner_guid TYPE string,
gv_url TYPE char1024,
lv_app_name TYPE string,
lv_in_protocol TYPE string,
lv_wd_url TYPE string,
lv_wd_url1 TYPE string,
lt_tihttpnvp TYPE tihttpnvp,
lw_tihttpnvp LIKE LINE OF lt_tihttpnvp.

DATA:lt_supplier_guids TYPE bu_partner_guid_t,


ls_partner_guid TYPE bu_partner_guid,
lt_set_status_info TYPE /sapsrm/if_pdo_do_bp_potsup_st
=>tt_set_status_info,
ls_set_status_info TYPE /sapsrm/if_pdo_do_bp_potsup_st
=>ty_set_status_info,
lw_pa_guid TYPE ros_bp_pc_survey,
lw_but000 TYPE but000,
lv_status TYPE j_status,
ls_httpurlloc TYPE httpurlloc,
lv_host TYPE string,
lv_port TYPE string.

*获取潜在供应商状态
"获取 Partner_GUID
CLEAR:lw_pa_guid-partner_guid.
SELECT SINGLE partner_guid INTO lw_pa_guid-partner_guid
FROM ros_bp_pc_survey
WHERE RECIPIENT_GUID EQ iv_publishing_guid.

"获取 Partner
CLEAR:lw_but000-partner.
SELECT SINGLE partner INTO lw_but000-partner
FROM but000
WHERE partner_guid EQ lw_pa_guid-partner_guid.

APPEND lw_pa_guid-partner_guid TO lt_supplier_guids.


CLEAR:lw_pa_guid-partner_guid.

CALL METHOD /sapsrm/cl_pdo_do_ps_stat_help=>get_active_sta


tus
EXPORTING
it_supplier_guid = lt_supplier_guids
IMPORTING
et_set_status_info = lt_set_status_info.

CLEAR:lv_status,ls_set_status_info.
READ TABLE lt_set_status_info into ls_set_status_info INDE
X 1.
IF sy-subrc eq 0.
lv_status = ls_set_status_info-status_id.
ENDIF.

"获取 Protocol/IP/Port
CLEAR:ls_httpurlloc.
SELECT SINGLE *
INTO ls_httpurlloc
FROM httpurlloc.

*设定参数值
lv_app_name = 'YRSR_APP_SUP_REG'.
lv_in_protocol = ls_httpurlloc-protocol.
lv_host = ls_httpurlloc-host.
lv_port = ls_httpurlloc-port.

IF sy-langu EQ '1'.
lv_vlangu = 'ZH'.
ENDIF.
IF sy-langu EQ 'E'.
lv_vlangu = 'EN'.
ENDIF.

"Client
lw_tihttpnvp-name = 'sap-client'.
lw_tihttpnvp-value = sy-mandt.
APPEND lw_tihttpnvp TO lt_tihttpnvp.
CLEAR lw_tihttpnvp.

"Language
lw_tihttpnvp-name = 'sap-language'.
lw_tihttpnvp-value = lv_langu.
APPEND lw_tihttpnvp TO lt_tihttpnvp.
CLEAR lw_tihttpnvp.

"Config
lw_tihttpnvp-name = 'sap-wd-configId'.
lw_tihttpnvp-value = 'ZSRM002'.
APPEND lw_tihttpnvp TO lt_tihttpnvp.
CLEAR lw_tihttpnvp.

"PARTNER_GUID
lw_tihttpnvp-name = 'PARTNER_GUID'.
lw_tihttpnvp-value = iv_publishing_guid.
APPEND lw_tihttpnvp TO lt_tihttpnvp.
CLEAR lw_tihttpnvp.

"User
lw_tihttpnvp-name = 'PI_USRID'.
lw_tihttpnvp-value = sy-uname.
APPEND lw_tihttpnvp TO lt_tihttpnvp.
CLEAR lw_tihttpnvp.

"Status
lw_tihttpnvp-name = 'PI_STATUS'.
lw_tihttpnvp-value = lv_status.
APPEND lw_tihttpnvp TO lt_tihttpnvp.
CLEAR lw_tihttpnvp.

"重新生成 URL
CALL METHOD cl_wd_utilities=>construct_wd_url
EXPORTING
application_name = lv_app_name
in_host = lv_host
in_port = lv_port
in_protocol = lv_in_protocol
in_parameters = lt_tihttpnvp
IMPORTING
out_absolute_url = lv_wd_url.

IF sy-subrc = 0.
ev_qstnr_url = lv_wd_url.
ELSE.
RAISE error_get_url.
ENDIF.
ENDENHANCEMENT.

5.创建潜在供应商页面增强

.a.通讯部分:电话号码、传真号码长度限定和有效性限定

.b.一般公司信息&复制公司数据部分:语言限定

.c.产品类别限定

增强位置:

类:/SAPSRM/CL_PDO_AO_BP_POT_SUPPL
方法: CHECK_MANDATORY_FIELDS

.源码
*$*$-Start: (1)-----------------------------------------------
----------------------------------$*$*
ENHANCEMENT 1 ZEH001_CHECK_FIX_TEL. "active version
*校验 FAX&TEL No 只允许输入 24 位(数字/-)
data:ls_pdo_tel2 TYPE /sapsrm/s_pdo_bp_tel_no,
ls_message2 TYPE bbp_pds_messages,
lt_messages2 TYPE bbpt_pd_messages,
lt_pdo_tel2 TYPE STANDARD TABLE OF /sapsrm/s_
pdo_bp_tel_no,
lt_pdo_fax2 TYPE /sapsrm/t_pdo_bp_fax_no,
ls_pdo_fax2 LIKE LINE OF lt_pdo_fax2,
mo_pdo_bp_addr_list2 TYPE REF TO /sapsrm/if_pdo_mo_bp_
addr_list,
mo_pdo_cont_pers2 TYPE REF TO /sapsrm/if_pdo_mo_bp_
cont_pers,
lv_fax TYPE string,
lv_tel TYPE string.

CLEAR:lv_fax,lv_tel,lt_messages2.

*1.校验通讯信息中 FAX、TEL No.


me->/sapsrm/if_pdo_ao_bp_bis_base~get_addr_list_mo(
IMPORTING eo_addr_list_mo = mo_pd
o_bp_addr_list2
CHANGING co_message_handler = co_messag
e_handler ).

IF mo_pdo_bp_addr_list2 IS NOT INITIAL.


mo_pdo_bp_addr_list2->/sapsrm/if_pdo_do_bp_addr_det~ge
t_tel_numbers(
IMPORTING et_tel_numbers
= lt_pdo_tel2
CHANGING co_message_handler = co_m
essage_handler ).

READ TABLE lt_pdo_tel2 WITH KEY std_no = abap_true INT


O ls_pdo_tel2.
IF ls_pdo_tel2-telephone IS NOT INITIAL.
lv_tel = ls_pdo_tel2-telephone.

IF strlen( lv_tel ) GT 24.


ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 127.
ls_message2-field_name = 'TELEPHONE'.
ls_message2-set_guid = ls_pdo_tel2-guid .
ls_message2-set_type = 'BT'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.

IF lv_tel CO '0123456789-'.
ELSE.
ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 131.
ls_message2-field_name = 'TELEPHONE'.
ls_message2-set_guid = ls_pdo_tel2-guid .
ls_message2-set_type = 'BT'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.
ENDIF.

mo_pdo_bp_addr_list2->/sapsrm/if_pdo_do_bp_addr_det~ge
t_fax_numbers(
IMPORTING et_fax_numbers
= lt_pdo_fax2
CHANGING co_message_handler = co
_message_handler ).

READ TABLE lt_pdo_fax2 WITH KEY std_no = abap_true


INTO ls_pdo_fax2.

IF ls_pdo_fax2-fax IS NOT INITIAL.


lv_fax = ls_pdo_fax2-fax.

IF strlen( lv_fax ) GT 24.


ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 128.
ls_message2-field_name = 'FAX'.
ls_message2-set_guid = ls_pdo_fax2-guid .
ls_message2-set_type = 'BTCP'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.

IF lv_fax CO '0123456789-'.
ELSE.
ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 134.
ls_message2-field_name = 'FAX'.
ls_message2-set_guid = ls_pdo_fax2-guid .
ls_message2-set_type = 'BA'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.
ENDIF.
ENDIF.

*2.校验联系人信息中的 Fax/TEL No.


CLEAR:lt_pdo_tel2,ls_pdo_tel2,lt_pdo_fax2,ls_pdo_fax2,lv_t
el,lv_fax.

me->/sapsrm/if_pdo_ao_bp_bis_base~get_cont_pers_mo(
IMPORTING eo_cont_pers_mo = mo_pdo_cont_pers2
CHANGING co_message_handler = co_message_handler ).

mo_pdo_cont_pers2->get_tel_numbers( IMPORTING et_tel_num


bers = lt_pdo_tel2
CHANGING co_message_handle
r = co_message_handler ).
READ TABLE lt_pdo_tel2 INTO ls_pdo_tel2 INDEX 1.
IF sy-subrc eq 0.
lv_tel = ls_pdo_tel2-telephone.

IF strlen( lv_tel ) GT 24.


ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 129.
ls_message2-field_name = 'TELEPHONE'.
ls_message2-set_guid = ls_pdo_tel2-guid .
ls_message2-set_type = 'BTCP'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.

IF lv_tel CO '0123456789-'.
ELSE.
ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 132.
ls_message2-field_name = 'TELEPHONE'.
ls_message2-set_guid = ls_pdo_tel2-guid .
ls_message2-set_type = 'BTCP'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.
ENDIF.

mo_pdo_cont_pers2->get_fax_numbers( IMPORTING et_fax_num


bers = lt_pdo_fax2
CHANGING co_message_handle
r = co_message_handler ).

READ TABLE lt_pdo_fax2 INTO ls_pdo_fax2 INDEX 1.


IF sy-subrc eq 0.
lv_fax = ls_pdo_fax2-fax.

IF strlen( lv_fax ) GT 24.


ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 130.
ls_message2-field_name = 'FAX'.
ls_message2-set_guid = ls_pdo_fax2-guid .
ls_message2-set_type = 'BA'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.
IF lv_fax CO '0123456789-'.
ELSE.
ls_message2-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message2-msgid = 'ZSRM'.
ls_message2-msgno = 135.
ls_message2-field_name = 'FAX'.
ls_message2-set_guid = ls_pdo_fax2-guid .
ls_message2-set_type = 'BTCP'.
APPEND ls_message2 TO lt_messages2.
CLEAR:ls_message2.
ENDIF.
ENDIF.

*3.提示消息
IF lt_messages2 is not INITIAL.
/sapsrm/cl_pdo_msg=>/sapsrm/if_pdo_msg_provider~add_mess
age_static(
EXPORTING
it_messages = lt_messages2
CHANGING
co_message_handler = co_message_handler ).
ENDIF.

ENDENHANCEMENT.
ENHANCEMENT 1 ZEH001_CHECK_LANGU. "active version
*自注册界面只支持中文或者英文 即 ZH/EN 1/E
DATA:mo_pdo_cont_pers1 TYPE REF TO /sapsrm/if_pdo_mo_bp_co
nt_pers,
ls_pdo_cnp1 TYPE /sapsrm/s_pdo_bp_cp_basic_data,
lt_messages1 TYPE bbpt_pd_messages,
ls_message1 TYPE bbp_pds_messages.

me->/sapsrm/if_pdo_ao_bp_bis_base~get_cont_pers_mo(
IMPORTING eo_cont_pers_mo = mo_pdo_cont_pers1
CHANGING co_message_handler = co_message_handler ).

"get data
mo_pdo_cont_pers1->get_basic_data( IMPORTING es_basic_da
ta = ls_pdo_cnp1
CHANGING co_message_handler
= co_message_handler ).

IF ls_pdo_cnp1-partnerlanguage NE '1' and ls_pdo_cnp1-


partnerlanguage NE 'E' and ls_pdo_cnp1-
partnerlanguage is not INITIAL.
ls_message1-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message1-msgid = 'ZSRM'."'/SAPSRM/PDO_MO_BP'.
ls_message1-msgno = 100."016.
ls_message1-field_name = 'PARTNERLANGUAGE'.
ls_message1-set_guid = ls_pdo_cnp1-guid.
ls_message1-set_type = 'BCPB'.
APPEND ls_message1 TO lt_messages1.
ENDIF.

IF lt_messages1 is not INITIAL.


/sapsrm/cl_pdo_msg=>/sapsrm/if_pdo_msg_provider~add_mess
age_static(
EXPORTING
it_messages = lt_messages1
CHANGING
co_message_handler = co_message_handler ).
ENDIF.

ENDENHANCEMENT.
ENHANCEMENT 1 ZEH002_CHECK_CATEGORY. "active version

**校验 提供的产品类型 只能选择一种类型


DATA:lt_buff_prod_cats TYPE /sapsrm/t_pdo_bp_prod_cat.
DATA:lt_messages_p TYPE bbpt_pd_messages,
ls_message_p TYPE bbp_pds_messages.

CALL METHOD mo_buffer->get_product_categories


CHANGING
ct_prod_cat_info = lt_buff_prod_cats.

IF lt_buff_prod_cats is INITIAL.
CLEAR ls_message_p.
ls_message_p-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message_p-msgid = 'ZSRM'."'/SAPSRM/PDO_MO_BP'.
ls_message_p-msgno = 066.
ls_message_p-field_name = 'PROD_CATEGORY_TEXT'.
* ls_message_p-set_guid = ls_pdo_bp_company_data-guid .
ls_message_p-set_type = 'BCPB'.
APPEND ls_message_p TO lt_messages_p.
elseif lines( lt_buff_prod_cats ) gt 1.
CLEAR ls_message_p.
ls_message_p-
msgty = /sapsrm/if_pdo_constants_gen_c=>gc_msgty_e.
ls_message_p-msgid = 'ZSRM'."'/SAPSRM/PDO_MO_BP'.
ls_message_p-msgno = 065.
ls_message_p-field_name = 'PROD_CATEGORY_TEXT'.
* ls_message_p-set_guid = ls_pdo_bp_company_data-guid .
ls_message_p-set_type = 'BCPB'.
APPEND ls_message_p TO lt_messages_p.
ENDIF.

IF lt_messages_p is not INITIAL.


ev_error_exists = abap_true.

/sapsrm/cl_pdo_msg=>/sapsrm/if_pdo_msg_provider~add_mess
age_static(
EXPORTING
it_messages = lt_messages_p
CHANGING
co_message_handler = co_message_handler ).
ENDIF.

ENDENHANCEMENT.

在该方法的最后位置设置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""$"$\SE:(2) Class /SAPSRM/CL_PDO
_AO_BP_POT_SUPPL, Method CHECK_MANDATORY_FIELDS, End

A
*$*$-Start: (2)-----------------------------------------------
----------------------------------$*$*
ENHANCEMENT 2 ZEH001_CHECK_FIX_TEL. "active version
*校验 Fax/Tel No 设置标识
IF lt_messages2 is not INITIAL.
ev_error_exists = abap_true.
ENDIF.
ENDENHANCEMENT.
ENHANCEMENT 2 ZEH001_CHECK_LANGU. "active version
*设置标识
IF lt_messages1 is not INITIAL.
ev_error_exists = abap_true.
ENDIF.

ENDENHANCEMENT.
ENHANCEMENT 2 ZEH002_CHECK_CATEGORY. "active version
**校验 提供的产品类型 只能选择一种类型
CALL METHOD mo_buffer->get_product_categories
CHANGING
ct_prod_cat_info = lt_buff_prod_cats.

IF lines( lt_buff_prod_cats ) ne 1.
ev_error_exists = abap_true.
ENDIF.
ENDENHANCEMENT.
*$*$-End: (2)-----------------------------------------------
----------------------------------$*$*

6.策略采购-战略货源-回应和中标界面 增强

.a.界面按钮增强

.b.界面字段增强

.增强位置:

a 项目的说明

.在界面上右键—技术帮助
.组件选项卡

.获取组件名称和配置 ID

.se80 进入相应组件
.在此配置中增强按钮即可
.增强效果显示

.按钮事件响应

位置:类:/SAPSRM/CL_CH_WD_MAP_IDENT_BEV

方法:/SAPSRM/IF_CLL_IDENT_MAPPER~HANDLE_EVENT

.源码

该方法最前面
*$*$-Start: (1)----------------------------------------------
-----------------------------------$*$*
ENHANCEMENT 4 ZEH055_RFQ_APPROVAL. "active version
*EDIT 操作后 若报错 则页面为 DISPLAY 模式
DATA:lo_ident_mapper1 TYPE REF TO /sapsrm/if_cll_dofm_bev_h_id,
lo_pdo1 TYPE REF TO /sapsrm/if_pdo_ao_bev,
ls_pdo_bev_h_id1 TYPE /sapsrm/s_pdo_bev_h_id,
lx_pdo_abort1 TYPE REF TO /sapsrm/cx_pdo_abor
t,
lx_pdo_no_authorizatio1 TYPE REF TO /sapsrm/cx_pdo_no_a
uthorizatio,
lv_aprstatus1 TYPE ZAPPSTATUS,
ls_mesg1 TYPE /sapsrm/s_ch_wd_messages,
lt_bid_item type table of BBP_PDS_BID_ITEM_D,
ls_bid_item type BBP_PDS_BID_ITEM_D,
lt_bid_header_rel type table of BBP_PDS_HREL,
ls_bid_header_rel type BBP_PDS_HREL,
lt_quot_status type table of BBP_PDS_STATUS,
ls_quot_status type BBP_PDS_STATUS,
lv_matnr type xfeld,
ls_rfx_header type BBP_PDS_BID_HEADER_D,
lv_accept type i,
ls_status type ztstatus,
lv_erfqstatus type char20,
lv_stat_eformid type char40.

mo_ao_mapper ?= mo_task_container->get_aom_bev( ).

TRY.
lo_pdo1 ?= mo_pdo_xo.
* Get bid comparison data from PDO
CALL METHOD lo_pdo1->get_header_id
IMPORTING
es_pdo_bev_h_id = ls_pdo_bev_h_id1
CHANGING
co_message_handler = mo_pdo_message_consumer.
CATCH /sapsrm/cx_pdo_no_authorizatio INTO lx_pdo_no_author
izatio1.
mo_cll_message_handler->add_exception( io_pdo_error_exce
ption = lx_pdo_no_authorizatio1 ).
CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort1.
mo_cll_message_handler->set_abort( io_pdo_abort_exceptio
n = lx_pdo_abort1 ).
ENDTRY.
IF io_event->mv_event_id eq cl_fpm_event=>gc_event_refresh.
clear ls_status.
SELECT SINGLE *
INTO ls_status
FROM ztstatus
WHERE guid EQ ls_pdo_bev_h_id1-guid.

IF ls_status-eformid is not initial and ls_status-


aprstatus ne 'IMPORT'.
lv_stat_eformid = ls_status-eformid.
clear lv_erfqstatus.
call function 'ZFM_REFRESH_STATUS'
exporting
IV_PID = 'X'
iv_formno = lv_stat_eformid
IMPORTING
EV_STATUS = lv_erfqstatus
* ES_MESSAGE =
* EXCEPTIONS
* SYSTEM_FAILURE FAILURE = 2
* OTHERS = 3
.
if sy-subrc <> 0.
* COMMUNICATION_
* Implement suitable error handling here
endif.

IF lv_erfqstatus is not initial.


translate lv_erfqstatus to upper case.
update ztstatus set APRSTATUS = lv_erfqstatus where gu
id = ls_pdo_bev_h_id1-guid.
ENDIF.
ENDIF.
ENDIF.

IF io_event->mv_event_id EQ /sapsrm/if_cll_mapper_c=>gc_even
t_award.
CLEAR:lv_aprstatus1.
SELECT SINGLE aprstatus
INTO lv_aprstatus1
FROM ztstatus
WHERE guid EQ ls_pdo_bev_h_id1-guid.
"审批中 不能再次修改
IF lv_aprstatus1 EQ 'RUNNING'.
ls_mesg1-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg1-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg1-msgno = '120'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg1.
RETURN.
ENDIF.

"审批完成 不能再次修改
IF lv_aprstatus1 EQ 'COMPLETED'.
ls_mesg1-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg1-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg1-msgno = '121'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg1.
RETURN.
ENDIF.

"已导入 ERP 主数据 不能再次修改


IF lv_aprstatus1 EQ 'IMPORT'.
ls_mesg1-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg1-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg1-msgno = '151'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg1.
RETURN.
ENDIF.

"已提交 MRO 审批
IF lv_aprstatus1 eq 'MROING'.
ls_mesg1-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg1-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg1-msgno = '154'.
IF sy-langu = '1'.
ls_mesg1-MSGV1 = '已导入 MRO,不能再次修改'.
else.
ls_mesg1-
MSGV1 = 'You can not award again when MRO Imported'.
ENDIF.
CALL METHOD mo_cll_message_handler->add_message
EXPORTING
is_message = ls_mesg1.
RETURN.
ENDIF.

endif.
ENDENHANCEMENT.

该方法末尾
ENHANCEMENT 1 ZEH055_RFQ_APPROVAL. "active version
*数据对象声明
DATA:ls_bid_header TYPE BBP_PDS_BID_HEADER_D,
ls_return TYPE ZTSUP_RETURN,
lt_back_item TYPE TABLE OF ZSEOFFICE_PR_BACK,
lt_message TYPE table of ZSECCMESSAGE,
ls_message type zseccmessage,
ls_url TYPE FPM_S_LAUNCH_URL,
lv_guid TYPE CRMT_OBJECT_GUID,
lt_params TYPE APB_LPD_T_PARAMS,
ls_params TYPE APB_LPD_S_PARAMS,
lv_url TYPE STRING,
ls_constant TYPE ZTAB_CONSTANT,
lt_ztresponse type table of ztresponse,
ls_ztresponse TYPE ZTRESPONSE,
ls_ztstatus TYPE ztstatus,
lv_aprstatus TYPE ZAPPSTATUS,
lt_zteofficeurl TYPE TABLE OF zteofficeurl,
ls_zteofficeurl TYPE zteofficeurl,
lt_BBP_PDS_HREL type table of BBP_PDS_HREL,
ls_BBP_PDS_HREL type BBP_PDS_HREL,
lt_BBP_PDS_STATUS type table of BBP_PDS_STATUS,
ls_BBP_PDS_STATUS type BBP_PDS_STATUS.
data: lt_enq type table of seqg3.

CASE io_event->mv_event_id.
"SRM055 报价审批接口 :Submit to E-office
WHEN 'E_OFFICE'.
"首先校验是否处于流程审批中
CLEAR:lv_aprstatus.
SELECT SINGLE aprstatus
INTO lv_aprstatus
FROM ztstatus
where guid EQ ls_pdo_bev_h_id-guid.

"审批中 不能再次提交
IF lv_aprstatus EQ 'RUNNING'.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '120'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

"审批完成 不能再次提交
IF lv_aprstatus EQ 'COMPLETED'.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '121'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

"已导入 ERP 主数据 不能再次提交


IF lv_aprstatus EQ 'IMPORT'.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '151'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

"SRM020 比 价 后 增 强 : E-office 数 据 校 验 若 : GUID 为 空 提 示 消


息:Allocation and Fix not maintained
CLEAR:lt_ztresponse.
SELECT *
INTO table lt_ztresponse
FROM ztresponse
WHERE guid EQ ls_pdo_bev_h_id-guid.

read table lt_ztresponse into ls_ztresponse with key zz


fix = 'X'.
IF sy-subrc <> 0.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '069'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

IF ls_pdo_bev_h_id-zzeofpr is not INITIAL.


ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '103'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

"GUID
lv_guid = ls_pdo_bev_h_id-guid.

"加锁
CALL FUNCTION 'ENQUEUE_EZTSTATUS'
EXPORTING
mode_ztstatus = 'E'
client = sy-mandt
guid = lv_guid.

"解锁
CALL FUNCTION 'DEQUEUE_EZTSTATUS'
EXPORTING
mode_ztstatus = 'E'
client = sy-mandt
guid = lv_guid.

"获取 BDID/IP&Port/Page
CLEAR:ls_constant.
SELECT SINGLE value1 value2 value3
INTO (ls_constant-value1,ls_constant-
value2,ls_constant-value3)
FROM ztab_constant
WHERE mainkey EQ 'ZSRM001'
AND seckey EQ 'ERFQ'.

"拼接 URL | URL = IP + PAGE + PARAMETER


CONCATENATE ls_constant-value2 ls_constant-
value3 into lv_url SEPARATED BY '/'.

"设置参数
ls_params-key = 'GUID'.
ls_params-value = lv_guid.
APPEND ls_params to lt_params.
CLEAR ls_params.

ls_params-key = 'BDID'.
ls_params-value = ls_constant-value1.
APPEND ls_params to lt_params.
CLEAR ls_params.
" 弹 出 E-Office 界
面 "URL:'http://10.0.2.25:8888/WFForm/RFQApplication/Index.aspx
?BDID=4CF310F636194639BCF0928AD3EFD656'.
ls_url-parameter = lt_params.
ls_url-url = lv_url.
CALL METHOD y_cl_wd_tool=>navigate_externalurl
EXPORTING
is_url_fields = ls_url.

lo_ident_mapper->action_refresh( ).

"SRM024 更新 ECC 信息记录 :Submit to ECC 并提示消息


WHEN 'ST_ECC'.
"1.首先是否已导入 ERP 主数据
CLEAR:lv_aprstatus.
SELECT SINGLE aprstatus
INTO lv_aprstatus
FROM ztstatus
WHERE guid EQ ls_pdo_bev_h_id-guid
AND aprstatus EQ 'IMPORT'.

IF sy-subrc EQ 0.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '146'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

"2.其次校验是否处于流程审批中
CLEAR:lv_aprstatus.
SELECT SINGLE aprstatus
INTO lv_aprstatus
FROM ztstatus
WHERE guid EQ ls_pdo_bev_h_id-guid
AND aprstatus EQ 'COMPLETED'.

IF sy-subrc NE 0.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '123'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

IF ls_pdo_bev_h_id-zzeofpr is not initial.


ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '103'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.

clear lt_message.
call function 'ZFM_UPDATE_ECCINFO'
exporting
i_object_id = lv_object_id
tables
etmessage = lt_message.

lo_ident_mapper->action_refresh( ).
"消息提示
IF lt_message is not INITIAL.
LOOP AT lt_message into ls_message.
ls_mesg-msgty = ls_message-type.
ls_mesg-
msgid = y_cl_wd_shared_data=>gc_s_msg_class-zsrm.
ls_mesg-msgno = '002'.
ls_mesg-msgv1 = ls_message-message.
ls_mesg-msgv2 = ls_message-message+50(50).

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
ENDLOOP.
ENDIF.

"SRM025 IDM 物料更新 E-office MRO 价格


WHEN 'OPEN_EOFFICE'.
IF ls_pdo_bev_h_id-zzdmidm EQ '2'. "IDM
"获取 URL 链接
CLEAR:ls_zteofficeurl.
SELECT SINGLE * INTO ls_zteofficeurl
FROM ZTEOFFICEURL
WHERE guid EQ ls_pdo_bev_h_id-guid.

IF ls_zteofficeurl is initial.
ls_mesg1-
msgty = y_cl_wd_shared_data=>gc_s_msg_type-type_e.
ls_mesg1-
msgid = y_cl_wd_shared_data=>gc_s_msg_class-zsrm.
ls_mesg1-msgno = '154'.
IF sy-langu = '1'.
ls_mesg1-MSGV1 = '此 RFx 不允许打开 PR'.
else.
ls_mesg1-MSGV1 = 'You can not open e-office PR'.
ENDIF.
CALL METHOD mo_cll_message_handler->add_message
EXPORTING
is_message = ls_mesg1.
RETURN.
ENDIF.

CLEAR:ls_ztresponse.
SELECT SINGLE *
INTO ls_ztresponse
FROM ztresponse
WHERE guid EQ ls_pdo_bev_h_id-guid
and zzreason ne space.

"打开相关的 E-Office 界面
IF ls_ztresponse is not INITIAL and ls_zteofficeurl i
s not initial.
CLEAR:ls_url.
ls_url-url = ls_zteofficeurl-zzeprurl.
CALL METHOD y_cl_wd_tool=>navigate_externalurl
EXPORTING
is_url_fields = ls_url.

IF lv_trans_mode = 'EDIT'.
CALL METHOD lo_ident_mapper->confirm_change( lv_tr
ans_mode ).
lo_ident_mapper->change( ).
ENDIF.
ELSE.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '102'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.
ELSE.
ls_mesg-msgty = y_cl_wd_shared_data=>gc_s_msg_type-
type_e.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '078'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
RETURN.
ENDIF.
*取消比价界面授标状态
when 'CAAWARD'.
CLEAR:lv_aprstatus.
SELECT SINGLE aprstatus
INTO lv_aprstatus
FROM ztstatus
where guid EQ ls_pdo_bev_h_id-guid.

clear lt_enq.
call function 'ENQUE_READ'
exporting
gclient = sy-mandt
gname = 'RSTABLE'
garg = 'ZTRESPONSE*'
guname = sy-uname
* IMPORTING
* NUMBER =
* SUBRC =
tables
enq = lt_enq.

IF lt_enq is not initial.


IF sy-langu = '1'.
ls_mesg-msgty = 'E'.
ls_mesg-
msgid = y_cl_wd_shared_data=>gc_s_msg_class-zsrm.
ls_mesg-msgno = '154'.
ls_mesg-msgv1 = '请先关闭 Allocation and fix 页面'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
return.
else.
ls_mesg-msgty = 'S'.
ls_mesg-
msgid = y_cl_wd_shared_data=>gc_s_msg_class-zsrm.
ls_mesg-msgno = '154'.
ls_mesg-msgv1 = 'Please close Allocation and fix'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
return.
ENDIF.
ENDIF.

IF lv_aprstatus = '' or lv_aprstatus = 'CANCELLED' or lv_


aprstatus = 'AWARD'.
IF lv_bo_type = 'BUS2200'.
clear ls_bid_header.
call function 'BBP_PD_BID_GETDETAIL'
EXPORTING
I_GUID = ls_pdo_bev_h
_id-guid
importing
E_HEADER = ls_bid_heade
r
TABLES
E_HEADER_REL = lt_BBP_PDS_H
REL
.
LOOP AT lt_BBP_PDS_HREL into ls_BBP_PDS_HREL.
call function 'BBP_PD_QUOT_GETDETAIL'
EXPORTING
I_GUID = ls_BBP_PDS_
HREL-guid_b
TABLES
E_STATUS = lt_BBP_PDS_
STATUS
.

read table lt_BBP_PDS_STATUS into ls_BBP_PDS_STATUS


with key stat = 'I1014'.
IF sy-subrc = 0.
update crm_jest set inact = 'X' where stat = ls_B
BP_PDS_STATUS-stat and objnr = ls_BBP_PDS_STATUS-P_GUID.
IF sy-subrc = 0.
delete from ZTRESPONSE where guid = ls_bid_head
er-guid.
update ztstatus set APRSTATUS = '' where guid =
ls_bid_header-guid.
IF sy-langu = '1'.

lo_ident_mapper->action_refresh( ).

ls_mesg-msgty = 'S'.
ls_mesg-
msgid = y_cl_wd_shared_data=>gc_s_msg_class-zsrm.
ls_mesg-msgno = '154'.
ls_mesg-msgv1 = '授标已取消'.

CALL METHOD mo_cll_message_handler->add_messa


ge
EXPORTING
is_message = ls_mesg.

else.
lo_ident_mapper->action_refresh( ).

ls_mesg-msgty = 'S'.
ls_mesg-
msgid = y_cl_wd_shared_data=>gc_s_msg_class-zsrm.
ls_mesg-msgno = '154'.
ls_mesg-msgv1 = 'Award Canceled'.

CALL METHOD mo_cll_message_handler->add_messa


ge
EXPORTING
is_message = ls_mesg.

ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
else.

IF sy-langu = '1'.
ls_mesg-msgty = 'E'.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '154'.
ls_mesg-msgv1 = '无法取消授标'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
else.
ls_mesg-msgty = 'E'.
ls_mesg-msgid = y_cl_wd_shared_data=>gc_s_msg_class-
zsrm.
ls_mesg-msgno = '154'.
ls_mesg-msgv1 = 'Can not cancel award'.

CALL METHOD mo_cll_message_handler->add_message


EXPORTING
is_message = ls_mesg.
endif.
ENDIF.

ENDCASE.

ENDENHANCEMENT.
b 项目的说明

效果显示

增强位置:

类:/SAPSRM/CL_CH_WD_MAP_IDENT_BEV

方法:设置字段:INIT_IDR_FIELDS

字段赋值:/SAPSRM/IF_CLL_IDENT_MAPPER~GET_FIELD_DATA

源码:

b1 新增字段
ENHANCEMENT 2 ZEH055_RFQ_APPROVAL. "active version
*新增 E-Office Approval Status
CONSTANTS:
lc_eoapp_status TYPE string VALUE 'APRSTATUS',
lv_descr_en TYPE string VALUE 'Follow-on Status',
lv_descr_zh TYPE string VALUE '后续状态',
lc_eformid TYPE string VALUE 'EFORMID',
lv_iddescr TYPE string VALUE 'eRFQ FORM ID'.

IF lv_bo_type EQ /sapsrm/if_pdo_obj_types_c=>gc_pdo_biddingd
oc.
ls_idr_field-field_name = lc_eoapp_status.
IF sy-langu EQ 'E'.
ls_idr_field-field_label = lv_descr_en.
ls_idr_field-field_tooltip = lv_descr_en.
ls_idr_field-field_label_tooltip = lv_descr_en.
ELSEIF sy-langu EQ '1'.
ls_idr_field-field_label = lv_descr_zh.
ls_idr_field-field_tooltip = lv_descr_zh.
ls_idr_field-field_label_tooltip = lv_descr_zh.
ENDIF.

ls_idr_field-is_metadata_handled = abap_false.
APPEND ls_idr_field TO mt_idr_fields.
CLEAR:ls_idr_field.

ls_idr_field-field_name = lc_eformid.
ls_idr_field-field_label = lv_iddescr.
ls_idr_field-field_tooltip = lv_iddescr.
ls_idr_field-field_label_tooltip = lv_iddescr.
ls_idr_field-is_metadata_handled = abap_false.
APPEND ls_idr_field TO mt_idr_fields.
CLEAR:ls_idr_field.
ENDIF.

ENDENHANCEMENT.

b2.字段赋值
ENHANCEMENT 3 ZEH055_RFQ_APPROVAL. "active version
*给 E-Office Approval Status 赋值
DATA:ls_ztatus TYPE ztstatus,
lv_domname TYPE dd07l-domname VALUE 'ZDAPPSTATUS',
lv_domvalue TYPE string,
lv_ddtext TYPE ddtext.

"获取状态
CLEAR:ls_ztatus.
SELECT SINGLE * INTO ls_ztatus
FROM ztstatus
WHERE guid EQ ls_cll_bev_h_id-guid.

IF lv_bo_type EQ /sapsrm/if_pdo_obj_types_c=>gc_pdo_biddingd
oc.

"获取文本
IF ls_ztatus-aprstatus IS NOT INITIAL.
CLEAR:lv_domvalue,lv_ddtext.
lv_domvalue = ls_ztatus-aprstatus.
CALL METHOD y_cl_wd_tool=>get_domvalues
EXPORTING
iv_domname = lv_domname
iv_domvalue = lv_domvalue
iv_langu = sy-langu
RECEIVING
rv_ddtext = lv_ddtext.

ls_cll_bev_h_id-aprstatus = lv_ddtext.
ELSE.
ls_cll_bev_h_id-aprstatus = ls_ztatus-aprstatus.
ENDIF.
ls_cll_bev_h_id-eformid = ls_ztatus-eformid.
ENDIF.

ms_cll_bev_h_id = ls_cll_bev_h_id.
GET REFERENCE OF ms_cll_bev_h_id INTO rr_field_data.
ENDENHANCEMENT.

7.策略采购-战略货源 RFx 界面字段 增强

位置:

类&方法:

新增字段位置

/SAPSRM/CL_CLL_POWLT_RFQ-->

/SAPSRM/CL_CLL_POWL_BASE:IF_POWL_FEEDER~GET_FIELD_CATALOG

赋值位置

/SAPSRM/CL_CLL_POWL_BO_RFQEXECUTE_SEARCH
新增字段结构: /SAPSRM/S_POWL_RESULT_BID

/SAPSRM/S_SEARCH_RESULT_BID

.效果

.源码

新增字段
ENHANCEMENT 1 ZEH055_RFXS_ADD_FIELDS. "active version
*报价界面新增字段
DATA:lw_fieldcat_rfx TYPE powl_fieldcat_sty.

"DM/IDM
lw_fieldcat_rfx-colid = 'ZZDMIDM'.
lw_fieldcat_rfx-colpos = 3.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

"E-Office PR
lw_fieldcat_rfx-colid = 'ZZEOFPR'.
lw_fieldcat_rfx-colpos = 3.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

"Status
lw_fieldcat_rfx-colid = 'ZAPRSTATUS'.
lw_fieldcat_rfx-colpos = 4.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

"ERFQFORM ID
lw_fieldcat_rfx-colid = 'EFORMID'.
lw_fieldcat_rfx-colpos = 4.
lw_fieldcat_rfx-display_type = 'TV'.
lw_fieldcat_rfx-col_visible = 'X'.
lw_fieldcat_rfx-allow_filter = 'X'.
lw_fieldcat_rfx-allow_sort = 'X'.
lw_fieldcat_rfx-enabled = 'X'.
INSERT lw_fieldcat_rfx INTO TABLE mt_fieldcat.
CLEAR:lw_fieldcat_rfx.

IF c_fieldcat <> mt_fieldcat.


c_fieldcat = mt_fieldcat.
e_fieldcat_changed = abap_true.
ENDIF.

ENDENHANCEMENT.

.字段赋值
ENHANCEMENT 1 ZEH055_RFXS_ADD_FIELDS2. "active version
*获取新增字段的值
types: begin of ty_status,
lv_stat TYPE ZAPPSTATUS,
lv_EFORMID type ZEFORMID,
end of ty_status.

DATA:ls_header TYPE BBP_PDHSC,


lv_domname TYPE dd07l-domname,
lv_domvalue TYPE string,
lv_ddtext TYPE ddtext,
ls_status1 type ty_status.

select single *
from bbp_pdhsc
into ls_header
where guid = iv_line_guid.

"赋值 DM/IDM & E-office PR


IF ls_header-zzdmidm is not INITIAL.
CLEAR:lv_domvalue,lv_ddtext,lv_domname.
lv_domvalue = ls_header-zzdmidm.
lv_domname = 'ZZDMIDM'.
CALL METHOD y_cl_wd_tool=>get_domvalues
EXPORTING
iv_domname = lv_domname
iv_domvalue = lv_domvalue
iv_langu = sy-langu
RECEIVING
rv_ddtext = lv_ddtext.
es_search_result_line-zzdmidm = lv_ddtext.
ELSE.
es_search_result_line-zzdmidm = ls_header-zzdmidm.
ENDIF.

"E-Office PR
es_search_result_line-zzeofpr = ls_header-zzeofpr.

"Status
CLEAR:ls_status1.
SELECT SINGLE APRSTATUS as lv_stat eformid as lv_EFORMID
INTO ls_status1
FROM ztstatus
WHERE guid EQ iv_line_guid.

IF ls_status1-lv_stat IS NOT INITIAL.


CLEAR:lv_domvalue,lv_ddtext,lv_domname.
lv_domvalue = ls_status1-lv_stat.
lv_domname = 'ZDAPPSTATUS'.
CALL METHOD y_cl_wd_tool=>get_domvalues
EXPORTING
iv_domname = lv_domname
iv_domvalue = lv_domvalue
iv_langu = sy-langu
RECEIVING
rv_ddtext = lv_ddtext.

es_search_result_line-zaprstatus = lv_ddtext.
ELSE.
es_search_result_line-zaprstatus = ls_status1-lv_stat.
ENDIF.

"E-Office Form ID
IF ls_status1-lv_eformid is not initial.
es_search_result_line-eformid = ls_status1-lv_eformid.
ENDIF.

ENDENHANCEMENT.

8.采购订单 BSP 页面 字段增强

.增强后效果
.增强实施过程

Se80->BSP Application:SRMSUS->Controller->Order 之下
. detail_view.sub 对应类 CL_SUS_C_ORDER_DETAIL_VIEW

方法:DO_REQUEST

增强位置
源码:(末尾添加)
ENHANCEMENT 1 ZEH042_ADD_RETPO. "active version
*显示采购订单界面 项目概览中新增退货项目字段
DATA:lw_tabdef LIKE LINE OF ct_tabdef,
ls_tabdef LIKE LINE OF ct_tabdef,
ls_tabdef1 LIKE LINE OF ct_tabdef,
lt_tabdef TYPE BBP_T_SUS_TABDEF,
lv_row TYPE BBP_SUS_POS_IN_ROW.

IF <lf_po_header_d> IS ASSIGNED.
*判断是否已经新增字段 RETPO
READ TABLE ct_tabdef TRANSPORTING NO FIELDS WITH KEY columnna
me = 'RETPO'.
IF sy-subrc EQ 0.
"判断是否已经新增字段 ELIKZ
READ TABLE ct_tabdef TRANSPORTING NO FIELDS WITH KEY colum
nname = 'ELIKZ'.
IF sy-subrc EQ 0.
RETURN.
ENDIF.
ELSE.
*获取最大 pos_in_row
CLEAR:lt_tabdef,lv_row.
lt_tabdef = ct_tabdef.
SORT lt_tabdef BY pos_in_row DESCENDING.
READ TABLE lt_tabdef INTO ls_tabdef1 INDEX 1.
IF sy-subrc EQ 0.
lv_row = ls_tabdef1-pos_in_row.
CLEAR:ls_tabdef1.
ENDIF.

*复制一行 重新赋值
READ TABLE ct_tabdef INTO ls_tabdef INDEX 1.
IF sy-subrc EQ 0.
lw_tabdef = ls_tabdef.
CLEAR:ls_tabdef.
ENDIF.

lw_tabdef-columnname = 'RETPO'.
lw_tabdef-action_id = space.
lw_tabdef-col_type = 'TEXTVIEW'.
lw_tabdef-pos_in_row = lv_row + 1.
lw_tabdef-pos_in_col = '1'.
lw_tabdef-otr_alias = 'ZSRM/ZRETPO'.
APPEND lw_tabdef to ct_tabdef.
CLEAR:lw_tabdef.
ENDIF.

*新增字段 ELIKZ
READ TABLE ct_tabdef TRANSPORTING NO FIELDS WITH KEY columnnam
e = 'ELIKZ'.
IF sy-subrc EQ 0.
RETURN.
ELSE.
*获取最大 pos_in_row
CLEAR:lt_tabdef,lv_row.
lt_tabdef = ct_tabdef.
SORT lt_tabdef BY pos_in_row DESCENDING.
READ TABLE lt_tabdef INTO ls_tabdef1 INDEX 1.
IF sy-subrc EQ 0.
lv_row = ls_tabdef1-pos_in_row.
CLEAR:ls_tabdef1.
ENDIF.

*复制一行 重新赋值
READ TABLE ct_tabdef INTO ls_tabdef INDEX 1.
IF sy-subrc EQ 0.
lw_tabdef = ls_tabdef.
CLEAR:ls_tabdef.
ENDIF.

lw_tabdef-columnname = 'ELIKZ'.
lw_tabdef-action_id = space.
lw_tabdef-col_type = 'TEXTVIEW'.
lw_tabdef-pos_in_row = lv_row + 1.
lw_tabdef-pos_in_col = '1'.
lw_tabdef-otr_alias = 'ZSRM/ELIKZ'.
APPEND lw_tabdef to ct_tabdef.
CLEAR:lw_tabdef.
ENDIF.
ENDIF.

ENDENHANCEMENT.

字段赋值

类:cl_sus_m_order_detail

方法:PREPARE_ITEMS_FOR_UI

源码:
*$*$-Start: (1)-----------------------------------------------
----------------------------------$*$*
ENHANCEMENT 2 ZEH042_ADD_RETPO. "active version
*给新增的字段 RETPO 赋值
TYPES:BEGIN OF ty_retpo,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
retpo TYPE zeretpo,
elikz type zeelikz,
END OF ty_retpo.

DATA:lv_rfcdest TYPE rfcdest,


it_retpo TYPE TABLE OF ty_retpo,
et_retpo TYPE TABLE OF ty_retpo,
is_retpo TYPE ty_retpo,
es_retpo TYPE ty_retpo,
lw_items_po TYPE bbp_pds_suspo_ui_item_d,
lv_ebeln TYPE ebeln,
lv_ebelp TYPE ebelp.

*构建 RFC 传输参数


LOOP AT me->pt_items_po INTO lw_items_po.
is_retpo-ebeln = lw_items_po-src_object_id.
is_retpo-ebelp = lw_items_po-src_itm_id.
APPEND is_retpo to it_retpo.
CLEAR:is_retpo,lw_items_po.
ENDLOOP.

*获取 RFC Destination


CLEAR:lv_rfcdest.
CALL FUNCTION 'ZFM_GET_RFCDEST'
EXPORTING
iv_systype = 'ERP'
IMPORTING
ev_rfcdest = lv_rfcdest.

*根据 PO&Items 从 ERP 获取对应的 RETPO


CALL FUNCTION 'ZFM_GET_RETPO' DESTINATION lv_rfcdest
TABLES
IT_RETPO = it_retpo
ET_RETPO = et_retpo.

*设定新增字段 RETPO/ELIKZ 的值
LOOP AT me->pt_items_po ASSIGNING <lf_item_po>.
CLEAR:lv_ebeln,lv_ebelp.
lv_ebeln = <lf_item_po>-src_object_id.
lv_ebelp = <lf_item_po>-src_itm_id.

READ TABLE et_retpo INTO es_retpo WITH KEY ebeln = lv_ebeln


ebelp = lv_ebelp.
IF sy-subrc EQ 0.
<lf_item_po>-retpo = es_retpo-retpo.
<lf_item_po>-elikz = es_retpo-elikz.
ENDIF.
CLEAR:es_retpo.
ENDLOOP.

ENDENHANCEMENT.

. detail_edit.sub 对应类 CL_SUS_C_ORDER_DETAIL_EDIT


方法:DO_REQUEST
增强位置:
源码(末尾添加)
*$*$-Start: (1)-----------------------------------------------
----------------------------------$*$*
ENHANCEMENT 1 ZEH042_ADD_RETPCO. "active version
*显示采购订单界面 项目概览中新增退货项目字段/收货已完成字段
DATA:lw_tabdef LIKE LINE OF ct_tabdef,
ls_tabdef LIKE LINE OF ct_tabdef,
ls_tabdef1 LIKE LINE OF ct_tabdef,
lt_tabdef TYPE BBP_T_SUS_TABDEF,
lv_row TYPE BBP_SUS_POS_IN_ROW.

IF iv_price_field_name EQ 'TOTAL_VALUE'.
RETURN.
ELSE.
*获取最大 pos_in_row
CLEAR:lt_tabdef,lv_row.
lt_tabdef = ct_tabdef.
SORT lt_tabdef BY pos_in_row DESCENDING.
READ TABLE lt_tabdef INTO ls_tabdef1 INDEX 1.
IF sy-subrc EQ 0.
lv_row = ls_tabdef1-pos_in_row.
CLEAR:ls_tabdef1.
ENDIF.

*复制一行 重新赋值
READ TABLE ct_tabdef INTO ls_tabdef INDEX 1.
IF sy-subrc EQ 0.
lw_tabdef = ls_tabdef.
CLEAR:ls_tabdef.
ENDIF.
lw_tabdef-columnname = 'RETPO'.
lw_tabdef-action_id = space.
lw_tabdef-col_type = 'TEXTVIEW'.
lw_tabdef-pos_in_row = lv_row + 1.
lw_tabdef-pos_in_col = '1'.
lw_tabdef-otr_alias = 'ZSRM/ZRETPO'.
APPEND lw_tabdef to ct_tabdef.

lw_tabdef-columnname = 'ELIKZ'.
lw_tabdef-action_id = space.
lw_tabdef-col_type = 'TEXTVIEW'.
lw_tabdef-pos_in_row = lv_row + 2.
lw_tabdef-pos_in_col = '1'.
lw_tabdef-otr_alias = 'ZSRM/ELIKZ'.
APPEND lw_tabdef to ct_tabdef.
CLEAR:lw_tabdef.

ENDIF.
ENDENHANCEMENT.

字段赋值
cl_sus_m_order_resp_detail->PREPARE_ITEMS_FOR_UI
源码:
ENHANCEMENT 1 ZEH042_SET_RETPCO_DATA. "active version
*给新增的字段 RETPO/ELIKZ 赋值
TYPES:BEGIN OF ty_retpo,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
retpo TYPE zeretpo,
elikz TYPE zeelikz,
END OF ty_retpo.

DATA:lv_rfcdest TYPE rfcdest,


it_retpo TYPE TABLE OF ty_retpo,
et_retpo TYPE TABLE OF ty_retpo,
is_retpo TYPE ty_retpo,
es_retpo TYPE ty_retpo,
lw_items_pco TYPE bbp_pds_suspco_ui_item_d,
lv_ebeln TYPE ebeln,
lv_ebelp TYPE ebelp.

*构建 RFC 传输参数


IF <ls_header_pco> IS ASSIGNED.
LOOP AT me->pt_items_pco INTO lw_items_pco.
is_retpo-ebeln = <ls_header_pco>-src_object_id.
is_retpo-ebelp = lw_items_pco-number_ext.
APPEND is_retpo to it_retpo.
CLEAR:is_retpo,lw_items_pco.
ENDLOOP.

*获取 RFC Destination


CLEAR:lv_rfcdest.
CALL FUNCTION 'ZFM_GET_RFCDEST'
EXPORTING
iv_systype = 'ERP'
IMPORTING
ev_rfcdest = lv_rfcdest.

*根据 PO&Items 从 ERP 获取对应的 RETPO


CALL FUNCTION 'ZFM_GET_RETPO' DESTINATION lv_rfcdest
TABLES
IT_RETPO = it_retpo
ET_RETPO = et_retpo.

*设定新增字段 RETPO 的值
LOOP AT me->pt_items_pco ASSIGNING <lf_item_pco>.
CLEAR:lv_ebeln,lv_ebelp.
lv_ebeln = <ls_header_pco>-src_object_id.
lv_ebelp = <lf_item_pco>-number_ext.

READ TABLE et_retpo INTO es_retpo WITH KEY ebeln = lv_ebel


n
ebelp = lv_ebel
p.
IF sy-subrc EQ 0.
<lf_item_pco>-retpo = es_retpo-retpo.
<lf_item_pco>-elikz = es_retpo-elikz.
ENDIF.
CLEAR:es_retpo.
ENDLOOP.
ENDIF.

ENDENHANCEMENT.

.item_view.sub 对应类 CL_SUS_C_ORDER_ITEM_VIEW

在 类
cl_sus_m_order_detail->IF_SUS_DOCUMENT_DETAIL~POPULATE_ITEM_DE
TAIL 中赋值
源码:
ENHANCEMENT 3 ZEH042_ADD_RETPO. "active version
*点击具体的行项目 查看具体行项目信息时 设定 RETPO/ELIKZ 值
data:lw_pt_item_po type BBP_PDS_SUSPO_UI_ITEM_D.

FIELD-SYMBOLS:<lf_item_po> type BBP_PDS_SUSPO_UI_ITEM_D.

*给新增的字段 RETPO 赋值
TYPES:BEGIN OF ty_retpo,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
retpo TYPE zeretpo,
elikz TYPE zeelikz,
END OF ty_retpo.

DATA:lv_rfcdest TYPE rfcdest,


it_retpo TYPE TABLE OF ty_retpo,
et_retpo TYPE TABLE OF ty_retpo,
is_retpo TYPE ty_retpo,
es_retpo TYPE ty_retpo,
lw_item_po TYPE bbp_pds_suspo_ui_item_d,
lv_ebeln TYPE ebeln,
lv_ebelp TYPE ebelp.

*构建 RFC 传输参数


LOOP AT me->pt_item_po INTO lw_item_po.
is_retpo-ebeln = lw_item_po-src_object_id.
is_retpo-ebelp = lw_item_po-src_itm_id.
APPEND is_retpo to it_retpo.
CLEAR:is_retpo,lw_item_po.
ENDLOOP.

*获取 RFC Destination


CLEAR:lv_rfcdest.
CALL FUNCTION 'ZFM_GET_RFCDEST'
EXPORTING
iv_systype = 'ERP'
IMPORTING
ev_rfcdest = lv_rfcdest.

*根据 PO&Items 从 ERP 获取对应的 RETPO


CALL FUNCTION 'ZFM_GET_RETPO' DESTINATION lv_rfcdest
TABLES
IT_RETPO = it_retpo
ET_RETPO = et_retpo.

LOOP AT me->pt_item_po ASSIGNING <lf_item_po>.


CLEAR:lv_ebeln,lv_ebelp.
lv_ebeln = <lf_item_po>-src_object_id.
lv_ebelp = <lf_item_po>-src_itm_id.

READ TABLE et_retpo INTO es_retpo WITH KEY ebeln = lv_ebeln


ebelp = lv_ebelp.
IF sy-subrc EQ 0.
<lf_item_po>-retpo = es_retpo-retpo.
<lf_item_po>-elikz = es_retpo-elikz.
ENDIF.
CLEAR:es_retpo.
ENDLOOP.

ENDENHANCEMENT.

.item_edit.sub 对应类 CL_SUS_C_ORDER_ITEM_EDIT

赋值位置:
cl_sus_m_order_resp_detail->IF_SUS_DOCUMENT_DETAIL~POPULATE_IT
EM_DETAIL

源码:
ENHANCEMENT 2 ZEH042_SET_RETPCO_DATA. "active version
*修改状态下 进入某个具体的行项目时 进行设定 RETPO/ELIKZ 的值
*给新增的字段 RETPO 赋值
TYPES:BEGIN OF ty_retpo,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
retpo TYPE zeretpo,
elikz TYPE zeelikz,
END OF ty_retpo.

DATA:lv_rfcdest TYPE rfcdest,


it_retpo TYPE TABLE OF ty_retpo,
et_retpo TYPE TABLE OF ty_retpo,
is_retpo TYPE ty_retpo,
es_retpo TYPE ty_retpo,
lw_item_pco TYPE bbp_pds_suspco_ui_item_d,
lv_ebeln TYPE ebeln,
lv_ebelp TYPE ebelp.

DATA:ls_header_pco TYPE bbp_pds_suspco_ui_header_d.

FIELD-SYMBOLS:<lf_item_pco> TYPE bbp_pds_suspco_ui_item_d.

*构建 RFC 传输参数


IF <ls_item_pco> IS ASSIGNED.
READ TABLE me->pt_header_pco into ls_header_pco index 1.

LOOP AT me->pt_item_pco INTO lw_item_pco.


is_retpo-ebeln = ls_header_pco-src_object_id.
is_retpo-ebelp = lw_item_pco-number_ext.
APPEND is_retpo to it_retpo.
CLEAR:is_retpo,lw_item_pco.
ENDLOOP.

*获取 RFC Destination


CLEAR:lv_rfcdest.
CALL FUNCTION 'ZFM_GET_RFCDEST'
EXPORTING
iv_systype = 'ERP'
IMPORTING
ev_rfcdest = lv_rfcdest.

*根据 PO&Items 从 ERP 获取对应的 RETPO


CALL FUNCTION 'ZFM_GET_RETPO' DESTINATION lv_rfcdest
TABLES
IT_RETPO = it_retpo
ET_RETPO = et_retpo.

*设定新增字段 RETPO 的值
LOOP AT me->pt_item_pco ASSIGNING <lf_item_pco>.
CLEAR:lv_ebeln,lv_ebelp.
lv_ebeln = ls_header_pco-src_object_id.
lv_ebelp = <lf_item_pco>-number_ext.

READ TABLE et_retpo INTO es_retpo WITH KEY ebeln = lv_ebel


n
ebelp = lv_ebelp.
IF sy-subrc EQ 0.
<lf_item_pco>-retpo = es_retpo-retpo.
<lf_item_pco>-elikz = es_retpo-elikz.
ENDIF.
CLEAR:es_retpo.
ENDLOOP.
ENDIF.

ENDENHANCEMENT.

Das könnte Ihnen auch gefallen