事务码KO01
BAPI_INTERNALORDER_CREATE
但是这个BAPI的参数很少,需要增强extensionin参数。
1.增强BAPI结构BAPI_TE_AUFK
2.传入参数,直接上代码
*-BAPI
DATA:l_subrc TYPE sy-subrc,
l_aufnr TYPE bapi2075_2-order.
DATA:ls_imaster_data TYPE bapi2075_7,
ls_emasterdata TYPE bapi2075_2,
ls_testrun TYPE testrun.
DATA:it_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
lt_extensionin TYPE TABLE OF bapiparex,
ls_extensionin TYPE bapiparex.
*-局部
DATA:lv_ext_ord_no TYPE aufex,
lv_msg TYPE char255.
DATA:ls_fidm016_ds TYPE zlesfidm016_ds,
li_fidm016_ds TYPE TABLE OF zlesfidm016_ds.
DATA:lv_ivpro_length TYPE dd03l-leng. "长度
FIELD-SYMBOLS:<lfs_out> TYPE ty_out.
*-为了程序速度(先抽取ivpro长度)
PERFORM frm_ivpro_length CHANGING lv_ivpro_length.
*-取选中行数
LOOP AT gt_out ASSIGNING <lfs_out> WHERE sel = 'X'
AND aufnr = ''.
CLEAR:lv_ext_ord_no,lv_msg,ls_fidm016_ds.
CLEAR:ls_imaster_data,ls_emasterdata,l_aufnr.
CLEAR:ls_return,it_return,ls_extensionin,lt_extensionin.
*---默认字段
ls_imaster_data-co_area = 'CGA'. "控制范围
ls_imaster_data-order_type = 'Z003'. "订单类型
ls_imaster_data-comp_code = 'B116'. "公司代码
ls_imaster_data-requ_comp_code = 'B116'. "成本代码申请
*---传入字段
CONCATENATE <lfs_out>-asqbh <lfs_out>-pledge_name
INTO ls_imaster_data-order_name SEPARATED BY '_'. "描述
CONDENSE ls_imaster_data-order_name.
lv_ext_ord_no = <lfs_out>-asqbh.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_ext_ord_no
IMPORTING
output = lv_ext_ord_no.
ls_imaster_data-ext_ord_no = lv_ext_ord_no. "外部订单号
* ls_imaster_data-COMP_CODE = ts_head-aufnr. "对象类
*--增强字段赋值
PERFORM frm_extensionin_ivpro USING <lfs_out>-ivpro lv_ivpro_length
CHANGING lt_extensionin.
CALL FUNCTION 'BAPI_INTERNALORDER_CREATE'
EXPORTING
i_master_data = ls_imaster_data
IMPORTING
e_master_data = ls_emasterdata
orderid = l_aufnr
TABLES
return = it_return
extensionin = lt_extensionin.
READ TABLE it_return INTO ls_return
WITH KEY type = 'S' id = 'KO' number = '107'.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_IVPRO_LENGTH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_ivpro_length CHANGING pc_ivpro_length TYPE dd03l-leng.
DATA:l_position LIKE dd03l-position. "表格中区域的位置
DATA:lt_length TYPE TABLE OF ty_length,
ls_length TYPE ty_length.
*-找出在结构BAPI_TE_AUFK中字段IVPRO的位置
SELECT SINGLE position INTO l_position
FROM dd03l
WHERE tabname EQ 'BAPI_TE_AUFK'
AND fieldname EQ 'IVPRO'
AND as4local EQ 'A'.
IF sy-subrc EQ 0.
"计算在结构BAPI_TE_AUFK中字段ZZTYPE(订单细分类型)前面的字段长度总和
SELECT fieldname leng
INTO CORRESPONDING FIELDS OF TABLE lt_length
FROM dd03l
WHERE tabname EQ 'BAPI_TE_AUFK'
AND position LT l_position.
LOOP AT lt_length INTO ls_length.
pc_ivpro_length = pc_ivpro_length + ls_length-leng.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXTENSIONIN_IVPRO
*&---------------------------------------------------------------------*
* 增强字段(投资概况-IVPRO)
*----------------------------------------------------------------------*
FORM frm_extensionin_ivpro USING pu_ivpro TYPE im_profil
pu_ivpro_length TYPE dd03l-leng
CHANGING pc_extensionin TYPE ty_t_extensionin.
DATA:lv_ivpro TYPE im_profil. "投资尺度参数文件
DATA:ls_extensionin TYPE bapiparex.
lv_ivpro = pu_ivpro.
"分配字段值到ivpro字段中
IF pu_ivpro_length <= 240.
ls_extensionin-valuepart1+pu_ivpro_length(6) = lv_ivpro.
ELSEIF pu_ivpro_length > 240 AND pu_ivpro_length <= 480.
pu_ivpro_length = pu_ivpro_length - 240 - 1.
ls_extensionin-valuepart2+pu_ivpro_length(6) = lv_ivpro.
ELSEIF pu_ivpro_length > 480 AND pu_ivpro_length <= 720.
pu_ivpro_length = pu_ivpro_length - 480 - 1.
ls_extensionin-valuepart3+pu_ivpro_length(6) = lv_ivpro.
ELSEIF pu_ivpro_length > 720 AND pu_ivpro_length <= 960.
pu_ivpro_length = pu_ivpro_length - 720 - 1.
ls_extensionin-valuepart4+pu_ivpro_length(6) = lv_ivpro.
ENDIF.
ls_extensionin-structure = 'BAPI_TE_AUFK'.
APPEND ls_extensionin TO pc_extensionin.
CLEAR:ls_extensionin.
ENDFORM.