处理代码
*&---------------------------------------------------------------------*
*& Report ZMMMD001
*&
*&---------------------------------------------------------------------*
*&采购申请传送至SRM:SAP->SRM
*&---------------------------------------------------------------------*
REPORT ZMMMD001.
INCLUDE ZFRM_REPORT_REGISTER.
TABLES:EBAN.
TYPE-POOLS : SLIS.
DATA: BEGIN OF IT_RESULT OCCURS 0,
LINE(200), " TYPE BP_TEXT,
END OF IT_RESULT.
DATA: IT_INBOUND LIKE IT_RESULT OCCURS 0 WITH HEADER LINE.
DATA: W_FTP_ERROR.
DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: I_EVENTS TYPE SLIS_T_EVENT.
DATA: I_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: G_VARIANT LIKE DISVARIANT.
DATA: L_LS_EVENT TYPE SLIS_ALV_EVENT,
L_TITLE TYPE LVC_TITLE,
L_WINDOW_TITLEBAR LIKE SY-TITLE,
LS_HYPE TYPE LVC_S_HYPE,
GT_HYPETAB TYPE LVC_T_HYPE,
P_CHAR,
I_HEADER TYPE SLIS_T_LISTHEADER. "Itab forlistheade..
DATA: GS_SORT TYPE SLIS_SORTINFO_ALV,
GT_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA: WA_H(60) TYPE C,
WA_S(60) TYPE C,
WA_I(60) TYPE C.
DATA: WA_LINE TYPE SLIS_LISTHEADER.
DATA: WFLD1(150) TYPE C,
WROOT LIKE WFLD1,
WFLD3 LIKE WFLD1.
DATA LV_NET TYPE BAPICURR_D.
DEFINE ADD_FIELD.
i_fieldcat-fieldname = &1.
i_fieldcat-tabname = &2.
i_fieldcat-outputlen = &3.
i_fieldcat-seltext_l = &4.
i_fieldcat-EDIT = &5.
i_fieldcat-CHECKBOX = &6.
IF i_fieldcat-fieldname = 'SEL'.
i_fieldcat-ICON = 'X'.
ENDIF.
* i_fieldcat-no_zero = &5.
* i_fieldcat-do_sum = &6. "汇总字段
* i_fieldcat-hotspot = p_char. "该语句在该程式可以省略不写,若需报表点击某一栏位跳入到另一个界面,该语句必写
append i_fieldcat.
END-OF-DEFINITION.
DATA: W_FTP_HDL TYPE I,
W_FTP_HOST(64) TYPE C ,
W_FTP_USER(30) TYPE C ,
W_FTP_PWD(30) TYPE C ,
W_FTP_KEY TYPE I VALUE 26101957,
W_FTP_SLEN TYPE I,
W_FTP_DEST TYPE RFCDES-RFCDEST, "VALUE 'SAPFTP',
W_FTP_CMD(120).
DEFINE DISPLAY_DATA.
refresh i_events.
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = i_events.
* l_ls_event-name = 'TOP-OF-PAGE'.
* l_ls_event-form = 'TOP_OF_PAGE'.
* append l_ls_event to i_events.
i_layout-zebra = 'X'.
i_layout-window_titlebar = l_window_titlebar.
i_layout-colwidth_optimize = 'X'.
i_layout-group_change_edit = 'X'.
i_layout-f2code = &2.
* i_layout1-no_zero = 'X'.
** Header
wa_line-typ = 'H'.
wa_line-info = &4.
append wa_line to i_header.
wa_line-typ = 'S'.
wa_line-info = &5.
append wa_line to i_header.
*** Header
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS' "使用工具条
i_callback_user_command = 'USER_COMMAND' "使用工具条命令
i_save = 'X'
is_variant = g_variant
i_grid_title = &3
it_hyperlink = gt_hypetab
"i_callback_top_of_page = 'TOP_OF_PAGE'
* it_events = i_events
it_fieldcat = i_fieldcat[]
it_sort = gt_sort[]
is_layout = i_layout
tables
t_outtab = &1
exceptions
program_error = 1
others = 2.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = I_HEADER.
ENDFORM. "COMMENTARY_WRITE
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_BSART FOR EBAN-BSART , "采购申请凭证类型
S_BANFN FOR EBAN-BANFN,
S_LFDAT FOR EBAN-LFDAT,
S_MATKL FOR EBAN-MATKL, "物料组
S_MATNR FOR EBAN-MATNR,
S_DATE FOR EBAN-ERDAT.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS: S_EKGRP FOR EBAN-EKGRP,
S_WERKS FOR EBAN-WERKS.
SELECTION-SCREEN END OF BLOCK B2.
DATA:BEGIN OF GT_LIST OCCURS 0,
SEL TYPE C,
APPLICANT LIKE ADRP-NAME_TEXT,
DEPT_NAME TYPE STRING,
BSART LIKE T161T-BATXT,
HEAD_COMMENTS TYPE STRING,
SOUR_FROM(3) TYPE C,
PROJ_CODE TYPE STRING,
PROJ_NAME TYPE STRING,
PROJ_START_DATE TYPE STRING,
PROJ_END_DATE TYPE STRING,
PROJ_INTRO TYPE STRING,
BANFN LIKE EBAN-BANFN,
BUKRS LIKE T001K-BUKRS,
BNFPO LIKE EBAN-BNFPO,
WERKS LIKE EBAN-WERKS,
MATNR LIKE EBAN-MATNR,
MAKTX LIKE EBAN-TXZ01,
EQUIP_ID TYPE STRING,
EQUIP_NAME TYPE STRING,
EQUIP_CARD TYPE STRING,
MATKL LIKE EBAN-MATKL,
MENGE LIKE EBAN-MENGE,
MEINS LIKE EBAN-MEINS,
BUDGET LIKE EBAN-PREIS,
WAERS LIKE EBAN-WAERS,
PEINH LIKE EBAN-PEINH,
LFDAT LIKE EBAN-LFDAT,
EKGRP LIKE EBAN-EKGRP,
RFQ_CODE LIKE T024-TELFX,
BID_METHOD TYPE STRING,
LINE_COMMENTS TYPE STRING,
END OF GT_LIST.
DATA:BEGIN OF T_HEAD OCCURS 0,
* BANFN LIKE EBAN-BANFN,
BANFN TYPE STRING,
APPLICANT LIKE ADRP-NAME_TEXT,
DEPT_NAME TYPE STRING,
BSART LIKE T161T-BATXT,
EKORG TYPE T024E-EKORG,"采购组织
HEAD_COMMENTS TYPE STRING, "头备注
PROJ_CODE TYPE STRING, "项目编码
PROJ_NAME TYPE STRING, "项目名称
PROJ_START_DATE TYPE DATUM,
PROJ_END_DATE TYPE DATUM,
PROJ_INTRO TYPE STRING,
SOUR_FROM(3) TYPE C, "资料来源
END OF T_HEAD.
DATA:T_HEAD2 LIKE T_HEAD OCCURS 0.
DATA:BEGIN OF T_ITEM OCCURS 0,
* BANFN LIKE EBAN-BANFN,"采购申请
BANFN TYPE STRING,"采购申请
BNFPO LIKE EBAN-BNFPO,"采购申请行项目
WERKS LIKE EBAN-WERKS,"工厂
MATNR LIKE EBAN-MATNR,"物料编号
MAKTX LIKE EBAN-TXZ01,"物料描述
MATKL LIKE EBAN-MATKL,"物料组
MENGE LIKE EBAN-MENGE,"数量
MEINS LIKE EBAN-MEINS,"单位
BUDGET LIKE EBAN-PREIS,"预算
WAERS LIKE EBAN-WAERS,"币别
LFDAT LIKE EBAN-LFDAT,"日期
EKGRP LIKE EBAN-EKGRP,"采购组
RFQ_CODE LIKE T024-TELFX,"申请人
BID_METHOD TYPE STRING,"OPEN
LINE_COMMENTS TYPE STRING,"行备注
BUKRS LIKE T001K-BUKRS,
EQUIP_ID TYPE STRING,"设备ID
EQUIP_NAME TYPE STRING,"设备名称
PEINH LIKE EBAN-PEINH,"价格单位
EQUIP_CARD TYPE ANLA-ANLN1,": "在建工程编号"
END OF T_ITEM.
DATA:T_ITEM2 LIKE T_ITEM OCCURS 0.
DATA:BEGIN OF T_ITEMA OCCURS 0,
BANFN LIKE EBAN-BANFN ,
BNFPO LIKE EBAN-BNFPO ,
FILE_NAME TYPE STRING,
FILE_ADDRESS TYPE STRING,
END OF T_ITEMA.
DATA:BEGIN OF LT_EBAN OCCURS 0,
BANFN LIKE EBAN-BANFN ,"" 采购申请
BNFPO LIKE EBAN-BNFPO ,"" 行号
BSART LIKE EBAN-BSART ,"" 采购申请凭证类型
LOEKZ LIKE EBAN-LOEKZ ,"" 采购凭证中的删除标识
ERDAT LIKE EBAN-ERDAT ,"" 更改日期
ERNAM LIKE EBAN-ERNAM ,"" 创建对象的人员名称
EKGRP LIKE EBAN-EKGRP ,"" 采购组
TXZ01 LIKE EBAN-TXZ01 ,"" 短文本
MATNR LIKE EBAN-MATNR ,"" 物料号
WERKS LIKE EBAN-WERKS ,"" 工厂
MATKL LIKE EBAN-MATKL ,"" 物料组
MENGE LIKE EBAN-MENGE ,"" 采购申请数量
MEINS LIKE EBAN-MEINS ,"" 采购申请计量单位
LFDAT LIKE EBAN-LFDAT ,"" 项目交货日期
PREIS LIKE EBAN-PREIS ,"" 采购申请中的价格
PEINH LIKE EBAN-PEINH ,"" 价格单位
WAERS LIKE EBAN-WAERS ,"" 货币码,
BEDNR LIKE EBAN-BEDNR, "需求跟踪号,需求部门
END OF LT_EBAN.
DATA:BEGIN OF LT_ERNAM OCCURS 0,
BNAME LIKE USR21-BNAME,
PERSNUMBER LIKE USR21-PERSNUMBER,
NAME_TEXT LIKE ADRP-NAME_TEXT,
END OF LT_ERNAM.
DATA:BEGIN OF LT_T161T OCCURS 0,
BSART LIKE T161T-BSART,
BATXT LIKE T161T-BATXT,
END OF LT_T161T.
DATA:BEGIN OF LT_T001K OCCURS 0,
BWKEY LIKE T001K-BWKEY,
BUKRS LIKE T001K-BUKRS,
END OF LT_T001K.
DATA:BEGIN OF LT_T024 OCCURS 0,
EKGRP LIKE T024-EKGRP,
TELFX LIKE T024-TELFX,
END OF LT_T024.
DATA:GS_LIST LIKE GT_LIST.
DATA: TEXT1(50).
DATA: BEGIN OF ITB_S18 OCCURS 0.
INCLUDE STRUCTURE THEAD.
DATA: END OF ITB_S18.
DATA: BEGIN OF FLINES OCCURS 0.
INCLUDE STRUCTURE TLINE.
DATA: END OF FLINES.
DATA: EBELNKP(15).
START-OF-SELECTION.
PERFORM SAVE_REPORT_REGISTER.
PERFORM GET_DATA.
IF SY-BATCH = 'X'.
ELSE.
PERFORM DISPALY_ALV_DATA.
ENDIF.
END-OF-SELECTION.
FORM GET_DATA.
REFRESH:GT_LIST,LT_EBAN,T_HEAD,T_ITEM.
IF S_DATE IS INITIAL.
S_DATE-LOW = SY-DATUM - 1.
S_DATE-SIGN = 'I'.
S_DATE-OPTION = 'EQ'.
APPEND S_DATE.
ENDIF.
SELECT BANFN "" 采购申请
BNFPO "" 行号
BSART "" 采购申请凭证类型
LOEKZ "" 采购凭证中的删除标识
ERDAT "" 更改日期
ERNAM "" 创建对象的人员名称
EKGRP "" 采购组
TXZ01 "" 短文本
MATNR "" 物料号
WERKS "" 工厂
MATKL "" 物料组
MENGE "" 采购申请数量
MEINS "" 采购申请计量单位
LFDAT "" 项目交货日期
PREIS "" 采购申请中的价格
PEINH "" 价格单位
WAERS "" 货币码
BEDNR ""需求跟踪号,需求部门
INTO CORRESPONDING FIELDS OF TABLE LT_EBAN
FROM EBAN
WHERE BSART IN S_BSART
AND BANFN IN S_BANFN
AND LFDAT IN S_LFDAT
AND MATKL IN S_MATKL
AND MATNR IN S_MATNR
AND EKGRP IN S_EKGRP
AND WERKS IN S_WERKS
AND ERNAM NOT IN ('GVOINTERFACE' , 'ZOA_RFC' )
AND FRGKZ = 'E'
AND ERDAT IN S_DATE.
IF LT_EBAN[] IS NOT INITIAL.
SELECT USR21~BNAME
USR21~PERSNUMBER
ADRP~NAME_TEXT
INTO CORRESPONDING FIELDS OF TABLE LT_ERNAM
FROM USR21
INNER JOIN ADRP
ON USR21~PERSNUMBER = ADRP~PERSNUMBER
FOR ALL ENTRIES IN LT_EBAN
WHERE USR21~BNAME = LT_EBAN-ERNAM.
SELECT BSART BATXT
INTO CORRESPONDING FIELDS OF TABLE LT_T161T
FROM T161T
WHERE SPRAS = '1'.
SELECT BWKEY BUKRS
INTO CORRESPONDING FIELDS OF TABLE LT_T001K
FROM T001K.
SELECT EKGRP TELFX
INTO CORRESPONDING FIELDS OF TABLE LT_T024
FROM T024.
ENDIF.
SORT LT_EBAN BY BANFN.
DATA:GC1 TYPE STRING."EBAN-BANFN.
DATA:GC2 TYPE STRING."EBAN-ERNAM.
DATA:GC3 TYPE STRING."EBAN-BEDNR.
DATA:GC4 TYPE STRING."EBAN-BSART.
DATA:GC5 TYPE STRING."EBAN-BNFPO.
LOOP AT LT_EBAN.
GC1 = LT_EBAN-BANFN.
GC2 = LT_EBAN-ERNAM.
GC3 = LT_EBAN-BEDNR.
GC4 = LT_EBAN-BSART.
GC5 = LT_EBAN-BNFPO.
AT NEW BANFN.
T_HEAD-BANFN = LT_EBAN-BANFN.
READ TABLE LT_ERNAM WITH KEY BNAME = GC2.
IF SY-SUBRC EQ 0.
T_HEAD-APPLICANT = LT_ERNAM-NAME_TEXT.
ELSE.
T_HEAD-APPLICANT = GC2.
ENDIF.
T_HEAD-DEPT_NAME = GC3." '需求部门名称'.
READ TABLE LT_T161T WITH KEY BSART = GC4.
IF SY-SUBRC EQ 0.
T_HEAD-BSART = LT_T161T-BATXT."采购申请类型描述
ENDIF.
T_HEAD-EKORG = ''."采购组织
"抬头备注、文本
SELECT * FROM STXL
INTO CORRESPONDING FIELDS OF TABLE ITB_S18
WHERE TDOBJECT = 'EBANH'
AND TDNAME = GC1.
CLEAR TEXT1.
LOOP AT ITB_S18.
CLEAR TEXT1.
PERFORM FRM_READ_TEXT USING 'B01' ITB_S18-TDNAME 'EBANH'
CHANGING TEXT1 .
ENDLOOP.
T_HEAD-HEAD_COMMENTS = ''. "TEXT1." '头备注'.抬头文本不传值
"T_HEAD-PROJ_CODE = '项目编号'.
SELECT SINGLE AUFNR INTO T_HEAD-PROJ_CODE FROM EBKN WHERE BANFN
= GC1.
SELECT SINGLE KTEXT IDAT1 IDAT2 INTO ( T_HEAD-PROJ_NAME,
T_HEAD-PROJ_START_DATE,T_HEAD-PROJ_END_DATE ) FROM COAS WHERE AUFNR
= T_HEAD-PROJ_CODE.
IF T_HEAD-PROJ_END_DATE = '00000000'.
T_HEAD-PROJ_END_DATE = ''.
ENDIF.
IF T_HEAD-PROJ_START_DATE = '00000000'.
T_HEAD-PROJ_START_DATE = ''.
ENDIF.
T_HEAD-SOUR_FROM = 'SAP'.
APPEND T_HEAD.
ENDAT.
MOVE-CORRESPONDING LT_EBAN TO T_ITEM.
"公司别
READ TABLE LT_T001K WITH KEY BWKEY = LT_EBAN-WERKS.
IF SY-SUBRC EQ 0.
T_ITEM-BUKRS = LT_T001K-BUKRS.
ENDIF.
READ TABLE LT_T024 WITH KEY EKGRP = LT_EBAN-EKGRP.
IF SY-SUBRC EQ 0.
T_ITEM-RFQ_CODE = LT_T024-TELFX .
ENDIF.
IF LT_EBAN-LOEKZ = 'X'.
T_ITEM-MENGE = ''.
T_ITEM-BUDGET = ''.
T_ITEM-PEINH = ''.
ELSE.
DATA:GC_PREIS TYPE BAPICURR_D.
GC_PREIS = LT_EBAN-PREIS.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = LT_EBAN-WAERS
AMOUNT_INTERNAL = GC_PREIS
IMPORTING
AMOUNT_EXTERNAL = GC_PREIS.
LT_EBAN-PREIS = GC_PREIS.
T_ITEM-WAERS = LT_EBAN-WAERS.
T_ITEM-BUDGET = LT_EBAN-PREIS.
ENDIF.
"物料描述
T_ITEM-MAKTX = LT_EBAN-TXZ01.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = LT_EBAN-MEINS
LANGUAGE = '1'
IMPORTING
OUTPUT = T_ITEM-MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
"物料号
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
INPUT = LT_EBAN-MATNR
IMPORTING
OUTPUT = LT_EBAN-MATNR.
T_ITEM-MATNR = LT_EBAN-MATNR.
"行备注
CONCATENATE GC1 GC5 INTO GC1.
SELECT * FROM STXL
INTO CORRESPONDING FIELDS OF TABLE ITB_S18
WHERE TDOBJECT = 'EBAN'
AND TDNAME = GC1.
CLEAR TEXT1.
LOOP AT ITB_S18.
CLEAR TEXT1.
PERFORM FRM_READ_TEXT USING 'B01' ITB_S18-TDNAME 'EBAN'
CHANGING TEXT1 .
ENDLOOP.
T_ITEM-LINE_COMMENTS = ''."TEXT1.行项目备注不传
APPEND T_ITEM .
CLEAR: LT_EBAN, T_HEAD,T_ITEM.
CLEAR:GC1,GC2,GC3,GC4,GC5.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM T_HEAD COMPARING ALL FIELDS.
IF LT_EBAN[] IS NOT INITIAL.
LOOP AT T_ITEM.
MOVE-CORRESPONDING T_ITEM TO GT_LIST.
READ TABLE T_HEAD WITH KEY BANFN = T_ITEM-BANFN.
IF SY-SUBRC EQ 0.
GT_LIST-APPLICANT = T_HEAD-APPLICANT.
GT_LIST-BSART = T_HEAD-BSART.
GT_LIST-SOUR_FROM = T_HEAD-SOUR_FROM .
GT_LIST-DEPT_NAME = T_HEAD-DEPT_NAME.
GT_LIST-HEAD_COMMENTS = T_HEAD-HEAD_COMMENTS.
GT_LIST-PROJ_CODE = T_HEAD-PROJ_CODE.
GT_LIST-PROJ_NAME = T_HEAD-PROJ_NAME.
GT_LIST-PROJ_START_DATE = T_HEAD-PROJ_START_DATE.
GT_LIST-PROJ_END_DATE = T_HEAD-PROJ_END_DATE.
ENDIF.
APPEND GT_LIST.
CLEAR:GT_LIST,T_ITEM,T_HEAD.
ENDLOOP.
ELSE.
MESSAGE'未发现符合条件的数据,请查证后重新输入条件'
TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
IF SY-BATCH = 'X'.
PERFORM DATA_TO_SRM.
ENDIF.
ENDFORM.
FORM FRM_READ_TEXT USING FID FNAME FOBJECT CHANGING TEXT1 .
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = FID
LANGUAGE = SY-LANGU
NAME = FNAME
OBJECT = FOBJECT
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
LINES = FLINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
ENDIF.
LOOP AT FLINES.
CONCATENATE TEXT1 FLINES-TDLINE INTO TEXT1 .
ENDLOOP.
ENDFORM.
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD .
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = G_GRID.
* CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
CALL METHOD G_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'.
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
CASE R_UCOMM.
WHEN 'ZSEND'.
DELETE GT_LIST WHERE SEL IS INITIAL.
PERFORM DATA_TO_SRM.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DATA_TO_SRM .
* CHECK GT_LIST IS NOT INITIAL. 20190917
IF GT_LIST[] IS INITIAL.
MESSAGE '无数据' TYPE 'I'.
ENDIF.
SORT GT_LIST BY BANFN BNFPO.
SORT T_ITEM BY BANFN BNFPO.
SORT T_HEAD BY BANFN.
DATA:CL_ESB TYPE REF TO ZSRMCO_VXG_195_SRM_PRSYN_SERVI,
"ABAP NAME
CL_ESB_INPUT TYPE ZSRMVXG_195_SRM_PRSYN_SERVICE1, "INPUT
CL_ESB_OUTPUT TYPE ZSRMVXG_195_SRM_PRSYN_SERVICE. "OUTPUT
"异常收集参数
DATA: G_SYS_EXCEPTION TYPE REF TO CX_AI_SYSTEM_FAULT,
G_APP_EXCEPTION TYPE REF TO CX_AI_APPLICATION_FAULT,
L_RESULT TYPE STRING,
XML_STRING_INPUT TYPE STRING.
DATA:GT_RETURN TYPE TABLE OF BAPIRET2,
GS_RETURN TYPE BAPIRET2.
DATA:GO_JSON TYPE REF TO CL_SXML_STRING_WRITER.
DATA:GO_JSON_HEAD TYPE REF TO CL_SXML_STRING_WRITER.
DATA:GV_JSON_HEAD TYPE STRING.
DATA:GV_JSON_HEAD_ESB TYPE STRING.
DATA:GV_LENGTH_HEAD TYPE I.
DATA:GO_JSON_ITEM TYPE REF TO CL_SXML_STRING_WRITER.
DATA:GV_JSON_ITEM TYPE STRING.
DATA:GV_JSON_ITEM_ESB TYPE STRING.
DATA:GV_LENGTH_ITEM TYPE I.
DATA:GV_JSON_ESB TYPE STRING.
DATA:GV_TITLE_LGORT TYPE STRING.
DATA:LV_OUTPUT_STR_UTF16 TYPE XSTRING.
DATA:LV_OUTPUT_STR_UTF8 TYPE STRING.
DATA:LS_HEAD TYPE ZOSB_HEAD.
DATA:LS_ERROR TYPE ZOSB_RETURN.
TYPES:BEGIN OF TY_RETURN,
RETURN TYPE STRING,
END OF TY_RETURN.
DATA:LS_RETURN TYPE TY_RETURN.
TYPES:BEGIN OF TY_LINE,
DATAINFO TYPE STRING,
END OF TY_LINE.
DATA:LS_LGORT TYPE TY_LINE."库位
CLEAR:LS_HEAD,LS_LGORT.
CALL FUNCTION 'ZMM_GETBIZTRANSACTIONID_SRM'
EXPORTING
I_MODULE = 'MM'
I_INTERFACE = 'XSD'
IMPORTING
E_BIZTRANSACTIONID = LS_HEAD-BIZTRANSACTIONID.
DESCRIBE TABLE GT_LIST LINES LS_HEAD-COUNT .
LS_HEAD-ACCOUNT = 'userSAP'.
LS_HEAD-PASSWORD = 'P@ss0rd'.
LS_HEAD-CONSUMER = 'SAP'.
*JSON格式转换
"GV_TITLE_LGORT = '['.""TYPE":"RATE","iary":'.
TRANSLATE GV_TITLE_LGORT TO UPPER CASE.
"清空数据
CLEAR: GO_JSON,GV_JSON_HEAD,GV_JSON_ITEM.
CLEAR:GV_JSON_HEAD_ESB,GV_JSON_ITEM_ESB.
CLEAR:GV_LENGTH_HEAD.
CLEAR: LV_OUTPUT_STR_UTF16.
DATA:GN_LINE TYPE NUMC3.
DATA:GN_LINE_ALL TYPE NUMC3.
GN_LINE_ALL = LINES( T_HEAD ).
GN_LINE = 0.
DATA:TEXT1 TYPE STRING.
LOOP AT T_HEAD.
LOOP AT T_ITEM WHERE BANFN = T_HEAD-BANFN.
CLEAR TEXT1.
CONCATENATE T_ITEM-BUKRS '-' T_ITEM-BANFN INTO T_ITEM-BANFN.
MODIFY T_ITEM.
CLEAR TEXT1.
MOVE:T_ITEM-BUKRS TO TEXT1.
MODIFY T_ITEM.
ENDLOOP.
CONCATENATE TEXT1 '-' T_HEAD-BANFN INTO T_HEAD-BANFN.
MODIFY T_HEAD.
ENDLOOP.
LOOP AT T_HEAD.
GN_LINE = GN_LINE + 1.
APPEND T_HEAD TO T_HEAD2[].
GO_JSON_HEAD = CL_SXML_STRING_WRITER=>CREATE( IF_SXML=>CO_XT_JSON ).
CALL TRANSFORMATION ID
SOURCE
DATA = T_HEAD2[]
RESULT XML
GO_JSON_HEAD.
GV_JSON_HEAD = CL_ABAP_CODEPAGE=>CONVERT_FROM(
GO_JSON_HEAD->GET_OUTPUT( ) ).
LOOP AT T_ITEM WHERE BANFN = T_HEAD-BANFN."+0(10).
APPEND T_ITEM TO T_ITEM2[].
ENDLOOP.
GO_JSON_ITEM = CL_SXML_STRING_WRITER=>CREATE( IF_SXML=>CO_XT_JSON ).
CALL TRANSFORMATION ID
SOURCE
DATA = T_ITEM2[]
RESULT XML
GO_JSON_ITEM.
GV_JSON_ITEM = CL_ABAP_CODEPAGE=>CONVERT_FROM(
GO_JSON_ITEM->GET_OUTPUT( ) ).
IF GN_LINE = 1.
GV_LENGTH_HEAD = STRLEN( GV_JSON_HEAD ).
GV_LENGTH_HEAD = GV_LENGTH_HEAD - 11.
GV_JSON_HEAD_ESB = GV_JSON_HEAD+8(GV_LENGTH_HEAD).
ELSE.
GV_LENGTH_HEAD = STRLEN( GV_JSON_HEAD ).
GV_LENGTH_HEAD = GV_LENGTH_HEAD - 12.
GV_JSON_HEAD_ESB = GV_JSON_HEAD+9(GV_LENGTH_HEAD).
ENDIF.
GV_LENGTH_ITEM = STRLEN( GV_JSON_ITEM ).
GV_LENGTH_ITEM = GV_LENGTH_ITEM - 9.
GV_JSON_ITEM_ESB = GV_JSON_ITEM+8(GV_LENGTH_ITEM).
CONCATENATE GV_JSON_ESB GV_TITLE_LGORT
GV_JSON_HEAD_ESB
',"PUR_LINES": ' GV_JSON_ITEM_ESB " ']'
INTO GV_JSON_ESB .
IF GN_LINE < GN_LINE_ALL.
CONCATENATE GV_JSON_ESB '},'
INTO GV_JSON_ESB .
ENDIF.
CLEAR:GV_LENGTH_HEAD,GV_JSON_HEAD_ESB,GV_LENGTH_ITEM,
GV_JSON_ITEM_ESB.
CLEAR:T_HEAD.
REFRESH:T_HEAD2,T_ITEM2.
ENDLOOP.
CLEAR:GN_LINE,GN_LINE_ALL.
*出来的格式是:
*{"DATA":实际数据}
*转换下即可
CONCATENATE GV_JSON_ESB '}]' INTO GV_JSON_ESB .
LS_LGORT-DATAINFO = GV_JSON_ESB.
*XML转换
CALL TRANSFORMATION ZMM_O_SAPTOSRM
SOURCE HEAD = LS_HEAD
ITEM = LS_LGORT
RESULT XML LV_OUTPUT_STR_UTF16.
" 之所以要有这个转换,是因为UTF16的格式java端那边解析不了
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
IM_XSTRING = LV_OUTPUT_STR_UTF16
IM_ENCODING = 'UTF-8'
IMPORTING
EX_STRING = LV_OUTPUT_STR_UTF8.
TRY.
CREATE OBJECT CL_ESB
EXPORTING
LOGICAL_PORT_NAME = 'xsd'.
CL_ESB_INPUT-DATA = LV_OUTPUT_STR_UTF8.
CALL METHOD CL_ESB->VXG_195_SRM_PRSYN_SERVICE
EXPORTING
INPUT = CL_ESB_INPUT
IMPORTING
OUTPUT = CL_ESB_OUTPUT.
IF CL_ESB_OUTPUT-SIGN = 'E' AND CL_ESB_OUTPUT-MESSAGE <> ''.
CALL TRANSFORMATION ZMM_RETURN_ESB
SOURCE XML CL_ESB_OUTPUT-MESSAGE
RESULT
HEAD = LS_ERROR
ITEM = LS_RETURN.
GS_RETURN-TYPE = LS_ERROR-ERRORCODE.
GS_RETURN-MESSAGE = LS_RETURN-RETURN.
APPEND GS_RETURN TO GT_RETURN.
CLEAR GS_RETURN.
ENDIF.
CATCH CX_AI_APPLICATION_FAULT INTO G_APP_EXCEPTION.
IF G_APP_EXCEPTION IS NOT INITIAL.
CALL METHOD G_APP_EXCEPTION->GET_TEXT
RECEIVING
RESULT = GS_RETURN-MESSAGE.
GS_RETURN-TYPE = 'E'.
APPEND GS_RETURN TO GT_RETURN.
CLEAR GS_RETURN.
ENDIF.
*END WXB
CATCH CX_AI_SYSTEM_FAULT INTO G_SYS_EXCEPTION.
IF G_SYS_EXCEPTION IS NOT INITIAL.
CALL METHOD G_SYS_EXCEPTION->GET_TEXT
RECEIVING
RESULT = GS_RETURN-MESSAGE.
GS_RETURN-TYPE = 'E'.
APPEND GS_RETURN TO GT_RETURN.
CLEAR GS_RETURN.
ENDIF.
ENDTRY.
IF CL_ESB_OUTPUT-SIGN = 'S'.
CONCATENATE CL_ESB_OUTPUT-SIGN SPACE CL_ESB_OUTPUT-MESSAGE SPACE
'传输成功' INTO CL_ESB_OUTPUT-MESSAGE.
ELSE.
CONCATENATE CL_ESB_OUTPUT-SIGN SPACE CL_ESB_OUTPUT-MESSAGE SPACE
'传输失败' INTO CL_ESB_OUTPUT-MESSAGE.
ENDIF.
MESSAGE CL_ESB_OUTPUT-MESSAGE TYPE 'I'.
IF SY-BATCH <> 'X'.
PERFORM GET_DATA.
ENDIF.
ENDFORM. " FS
FORM DISPALY_ALV_DATA .
DATA:V_TEXT TYPE STRING.
DATA:V_TEXT1 TYPE STRING.
DATA:V_TEXT2 TYPE STRING,
V_TEXT3 TYPE STRING.
ADD_FIELD:
'SEL' 'GT_LIST' '' 'SEL' 'X' 'X' ,
'APPLICANT' 'GT_LIST' '' '完整的人员名称' '' '' ,
'DEPT_NAME' 'GT_LIST' '' '需求部门名称' '' '',
'BSART' 'GT_LIST' '' '采购申请凭证类型' '' '',
'HEAD_COMMENTS' 'GT_LIST' '' '头备注' '' '',
'SOUR_FROM' 'GT_LIST' '' '资料来源' '' '',
'PROJ_CODE' 'GT_LIST' '' '项目编码' '' '',
'PROJ_NAME' 'GT_LIST' '' '项目名称' '' '',
'PROJ_START_DATE' 'GT_LIST' '' '项目开始时间' '' '',
'PROJ_END_DATE' 'GT_LIST' '' '项目结束时间' '' '',
'PROJ_INTRO' 'GT_LIST' '' '项目概况介绍' '' '',
'BANFN' 'GT_LIST' '' '采购申请编号' '' '',
'BUKRS' 'GT_LIST' '' '公司代码' '' '',
'BNFPO' 'GT_LIST' '' '采购申请的项目编号' '' '',
'WERKS' 'GT_LIST' '' '工厂' '' '',
'MATNR' 'GT_LIST' '' '物料编码' '' '',
'MAKTX' 'GT_LIST' '' '短文本' '' '',
'EQUIP_ID' 'GT_LIST' '' '设备ID' '' '',
'EQUIP_NAME' 'GT_LIST' '' '设备名称' '' '',
'EQUIP_CARD' 'GT_LIST' '' '在建工程编号' '' '',
'MATKL' 'GT_LIST' '' '物料组' '' '',
'MENGE' 'GT_LIST' '' '数量' '' '',
'MEINS' 'GT_LIST' '' '单位' '' '',
'BUDGET' 'GT_LIST' '' '采购申请中的价格' '' '',
'WAERS' 'GT_LIST' '' '货币码' '' '',
'PEINH' 'GT_LIST' '' '价格单位' '' '',
'LFDAT' 'GT_LIST' '' '项目交货日期' '' '',
'EKGRP' 'GT_LIST' '' '采购组' '' '',
'RFQ_CODE' 'GT_LIST' '' '采购(购买者)组的传真号' '' '',
'BID_METHOD' 'GT_LIST' '' 'OPEN' '' '',
'LINE_COMMENTS' 'GT_LIST' '' '行备注' '' ''.
DISPLAY_DATA GT_LIST '' '' V_TEXT1 V_TEXT.
ENDFORM. " DISPALY_ALV_DATA
SAP-PR同步到SRM(JOB)
最新推荐文章于 2024-06-22 15:10:18 发布