源代码
1主函数部分,根据接口传入的标识,判断
FUNCTION ZZSD_CUSTOMER_CREATE.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_RLTGR) TYPE BU_RLGROUP DEFAULT 'ZCUST'
*" VALUE(I_BU_GROUP) TYPE BU_GROUP DEFAULT 'Z001'
*" EXPORTING
*" VALUE(E_CODE) TYPE MSGTY
*" VALUE(E_MSG) TYPE MSGTXT
*" TABLES
*" T_INPUT STRUCTURE ZSSD0040
*" T_OUTPUT STRUCTURE ZSSD0041
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_RLTGR) TYPE BU_RLGROUP DEFAULT 'ZCUST'
*" VALUE(I_BU_GROUP) TYPE BU_GROUP DEFAULT 'Z001'
*" EXPORTING
*" VALUE(E_CODE) TYPE MSGTY
*" VALUE(E_MSG) TYPE MSGTXT
*" TABLES
*" T_INPUT STRUCTURE ZSSD0040
*" T_OUTPUT STRUCTURE ZSSD0041
" PROGRAMMED BY HANDYY 20181108 创建和修改日志记录同步到自建表ZTSD0041中
*"----------------------------------------------------------------------
MACRO_SAVE_LOG_BEFORE_PROC. "日志保存——保存函数名称
MACRO_SAVE_LOG_AFTER_PROC 'IN'. "日志保存——输入参数
DATA:S_INPUT TYPE ZSSD0040,
T_IN TYPE STANDARD TABLE OF ZSSD0040.
DATA: E_RTYPE TYPE MSGTY,
E_RTMSG TYPE MSGTXT.
LOOP AT T_INPUT INTO S_INPUT.
APPEND S_INPUT TO T_IN.
CASE S_INPUT-ZUDID.
WHEN 'A'.
"创建客户主数据(基本视图,公司视图,销售视图)
PERFORM FRM_CUSTOMER_CREATGE TABLES T_IN
T_OUTPUT
USING I_RLTGR
I_BU_GROUP
CHANGING E_CODE
E_MSG.
CLEAR T_IN[].
WHEN 'C'.
"创建客户主数据(公司视图,销售视图)
PERFORM FRM_CUSTOMER_CREATGE2 TABLES T_IN
T_OUTPUT
USING I_RLTGR
I_BU_GROUP
CHANGING E_CODE
E_MSG.
CLEAR T_IN[].
WHEN 'B'.
"修改客户主数据(修改账期【付款条件】字段)
PERFORM FRM_CUSTOMER_CHANGE TABLES T_IN
T_OUTPUT
USING I_RLTGR
I_BU_GROUP
CHANGING E_CODE
E_MSG.
CLEAR T_IN[].
WHEN OTHERS.
E_CODE = 'E'.
E_MSG = '您输入的标识错误,请重新输入'.
CLEAR T_IN[].
ENDCASE.
CLEAR S_INPUT.
ENDLOOP.
E_RTYPE = E_CODE.
E_RTMSG = E_MSG.
MACRO_SAVE_LOG_AFTER_PROC 'OUT'. "日志保存——输出参数
ENDFUNCTION.
2.客户主数据的创建(全部视图)
*----------------------------------------------------------------------*
***INCLUDE LZSDI001F03. PROGRAMMED BY HANDYY 20181108
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_CUSTOMER_CREATGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CUSTOMER_CREATGE TABLES PT_IN STRUCTURE ZSSD0040
PT_OUTPUT STRUCTURE ZSSD0041
USING PV_RLTGR
PV_BU_GROUP
CHANGING PV_CODE
PV_MSG.
TYPES:BEGIN OF TY_KNA1,
NAME1 TYPE KNA1-NAME1,
KUNNR TYPE KNA1-KUNNR,
END OF TY_KNA1.
DATA: LT_KNA1 TYPE STANDARD TABLE OF TY_KNA1,
LT_KUNNR TYPE STANDARD TABLE OF TY_KNA1,
LS_KUNNR TYPE TY_KNA1.
DATA: LS_OUTPUT TYPE ZSSD0041,
LT_RECORD TYPE STANDARD TABLE OF ZTSD0041, "同步日志到自建表
LS_RECORD TYPE ZTSD0041.
DATA : LT_PARTNERGUID_LIST TYPE BU_PARTNER_GUID_T,
LS_PARTNERGUID_LIST LIKE LINE OF LT_PARTNERGUID_LIST.
DATA : LT_CUSTOMER_LIST TYPE CVIS_CUST_LINK_T,
LS_CUSTOMER_LIST TYPE CVI_CUST_LINK.
DATA : LS_DATA TYPE CVIS_EI_EXTERN,
LT_DATA TYPE CVIS_EI_EXTERN_T,
LT_RETURN TYPE BAPIRETM,
LS_RETURN TYPE BAPIRETI,
LS_MSG TYPE BAPIRETC.
DATA : LS_PARTNER TYPE BUS_EI_EXTERN,
LS_CUSTOMER TYPE CMDS_EI_EXTERN.
DATA : LS_HEADER TYPE CMDS_EI_HEADER,
LS_CENTRAL_DATA TYPE CMDS_EI_CENTRAL_DATA,
LS_COMPANY_DATA TYPE CMDS_EI_CMD_COMPANY,
LS_SALES_DATA TYPE CMDS_EI_CMD_SALES.
DATA : LT_ROLES TYPE BUS_EI_BUPA_ROLES_T,
LS_ROLES TYPE BUS_EI_BUPA_ROLES,
LT_IDENT_NUMBERS TYPE BUS_EI_BUPA_IDENTIFICATION_T,
LS_IDENT_NUMBERS TYPE BUS_EI_BUPA_IDENTIFICATION,
LT_ADDRESSES TYPE BUS_EI_BUPA_ADDRESS_T,
LS_ADDRESSES TYPE BUS_EI_BUPA_ADDRESS,
LT_PHONE TYPE BUS_EI_BUPA_TELEPHONE_T,
LS_PHONE TYPE BUS_EI_BUPA_TELEPHONE,
LT_FAX TYPE BUS_EI_BUPA_FAX_T,
LS_FAX TYPE BUS_EI_BUPA_FAX,
LT_SMTP TYPE BUS_EI_BUPA_SMTP_T,
LS_SMTP TYPE BUS_EI_BUPA_SMTP,
LS_REMARKS TYPE BUS_EI_BUPA_COMREM,
LT_REMARKS TYPE BUS_EI_BUPA_COMREM_T,
LT_COMPANY TYPE CMDS_EI_COMPANY_T,
LS_COMPANY TYPE CMDS_EI_COMPANY,
LT_SALES TYPE CMDS_EI_SALES_T,
LS_SALES TYPE CMDS_EI_SALES,
LT_FUNCTIONS TYPE CMDS_EI_FUNCTIONS_T,
LS_FUNCTIONS TYPE CMDS_EI_FUNCTIONS,
LS_CENTRAL TYPE CMDS_EI_CMD_CENTRAL,
LT_TAX_IND TYPE CMDS_EI_TAX_IND_T,
LS_TAX_IND TYPE CMDS_EI_TAX_IND.
FIELD-SYMBOLS: <FS_DATA> TYPE ZSSD0040.
DATA : LV_BPARTNERGUID TYPE BU_PARTNER_GUID_BAPI.
LOOP AT PT_IN ASSIGNING <FS_DATA>. "创建时需要获取唯一标识ID
TRY .
LV_BPARTNERGUID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_X16( ).
CATCH CX_UUID_ERROR.
"返回消息
ENDTRY.
IF <FS_DATA>-NAME1 IS INITIAL. "不输入公司名称会导致后面的公司代码视图和销售你视图扩充失败,故此处创建时需要校验名称不为空
PV_CODE = 'E'.
PV_MSG = '请输入公司名称'.
ELSE.
SELECT
NAME1
INTO TABLE LT_KNA1
FROM KNA1
WHERE NAME1 = <FS_DATA>-NAME1.
IF SY-SUBRC <> 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户编号加前导零
EXPORTING
INPUT = <FS_DATA>-KUNNR
IMPORTING
OUTPUT = <FS_DATA>-KUNNR.
LS_PARTNER-HEADER-OBJECT_TASK = 'I'. "I插入 U更新 M修改 D删除 C当前状态
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID. "唯一标识
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = 2. "业务伙伴类别
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING = PV_BU_GROUP. "业务伙伴分组
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1 = <FS_DATA>-NAME1. " 名称1
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME2 = <FS_DATA>-NAME2. " 名称2
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME3 = <FS_DATA>-NAME3. " 名称3
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME4 = <FS_DATA>-NAME4. " 名称4
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM1 = <FS_DATA>-SORTL. " 搜索项
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-TITLE_KEY = <FS_DATA>-ANRED. " 称谓
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME1 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME2 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME3 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME4 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM1 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-TITLE_KEY = ABAP_TRUE.
"必须扩充业务伙伴角色分组下的全部业务伙伴角色才能扩充出该业务伙伴角色分组
CLEAR:LS_ROLES,LT_ROLES.
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'FLCU00'. "业务伙伴角色
* LS_ROLES-DATA-ROLECATEGORY = 'FLCU00'. "业务伙伴角色类别
APPEND LS_ROLES TO LT_ROLES.
CLEAR:LS_ROLES.
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'FLCU01'. "业务伙伴角色
* LS_ROLES-DATA-ROLECATEGORY = 'FLCU01'. "业务伙伴角色类别
APPEND LS_ROLES TO LT_ROLES.
LS_PARTNER-CENTRAL_DATA-ROLE-ROLES = LT_ROLES.
CLEAR:LS_ADDRESSES,LT_ADDRESSES.
LS_ADDRESSES-TASK = 'I'. "I插入 U更新 M修改 D删除 C当前状态
LS_ADDRESSES-DATA-POSTAL-DATA-PO_CTRYISO = <FS_DATA>-LAND1. " 国家代码
LS_ADDRESSES-DATA-POSTAL-DATA-CITY = <FS_DATA>-ORT01. "城市
LS_ADDRESSES-DATA-POSTAL-DATA-REGION = <FS_DATA>-REGIO. " 地区代码
LS_ADDRESSES-DATA-POSTAL-DATA-C_O_NAME = <FS_DATA>-NAME1_LXR. " 联系人姓名
LS_ADDRESSES-DATA-POSTAL-DATA-STREET = <FS_DATA>-STRAS. " 街道
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = <FS_DATA>-LIFNR
IMPORTING
OUTPUT = LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD1.
* LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD1 = <FS_DATA>-LIFNR. "邮政编码
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL1 = <FS_DATA>-STR_SUPPL1. " 街道2
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL2 = <FS_DATA>-STR_SUPPL2. " 街道3
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL3 = <FS_DATA>-STR_SUPPL3. " 街道4
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
INPUT = <FS_DATA>-SPRAS
IMPORTING
OUTPUT = LS_ADDRESSES-DATA-POSTAL-DATA-LANGU
EXCEPTIONS
UNKNOWN_LANGUAGE = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
* LS_ADDRESSES-DATA-POSTAL-DATA-LANGU = <FS_DATA>-SPRAS. "语言
LS_ADDRESSES-DATA-POSTAL-DATAX-PO_CTRYISO = ABAP_TRUE. " 国家代码
LS_ADDRESSES-DATA-POSTAL-DATAX-CITY = ABAP_TRUE. "城市
LS_ADDRESSES-DATA-POSTAL-DATAX-REGION = ABAP_TRUE. " 地区代码
LS_ADDRESSES-DATA-POSTAL-DATAX-C_O_NAME = ABAP_TRUE. " 代收人
LS_ADDRESSES-DATA-POSTAL-DATAX-POSTL_COD1 = ABAP_TRUE. " 邮政编码
LS_ADDRESSES-DATA-POSTAL-DATAX-STREET = ABAP_TRUE. " 街道
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL1 = ABAP_TRUE. " 街道2
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL2 = ABAP_TRUE. " 街道3
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL3 = ABAP_TRUE. " 街道4
LS_ADDRESSES-DATA-POSTAL-DATAX-LANGU = ABAP_TRUE. "语言
CLEAR:LS_PHONE,LT_PHONE.
LS_PHONE-CONTACT-TASK = 'I'. "I插入 U更新 M修改 D删除 C当前状态
LS_PHONE-CONTACT-DATA-TELEPHONE = <FS_DATA>-TELF1. "电话
LS_PHONE-CONTACT-DATAX-TELEPHONE = ABAP_TRUE.
APPEND LS_PHONE TO LT_PHONE.
CLEAR:LS_PHONE.
LS_PHONE-CONTACT-TASK = 'I'. "I插入 U更新 M修改 D删除 C当前状态
LS_PHONE-CONTACT-DATA-TELEPHONE = <FS_DATA>-TELF2. "手机
LS_PHONE-CONTACT-DATA-R_3_USER = '3'. "3表示移动电话
LS_PHONE-CONTACT-DATAX-TELEPHONE = ABAP_TRUE.
LS_PHONE-CONTACT-DATAX-R_3_USER = ABAP_TRUE.
APPEND LS_PHONE TO LT_PHONE.
LS_ADDRESSES-DATA-COMMUNICATION-PHONE-PHONE = LT_PHONE.
CLEAR:LS_FAX,LT_FAX.
LS_FAX-CONTACT-TASK = 'I'. "I插入 U更新 M修改 D删除 C当前状态
LS_FAX-CONTACT-DATA-FAX = <