twitter users and discord users are the same species adapted to different environments
seen from Türkiye
seen from United States
seen from China

seen from Australia
seen from Germany

seen from United States
seen from United States
seen from Yemen
seen from United States

seen from United States
seen from United States

seen from United States
seen from United States
seen from United States
seen from Argentina

seen from Malaysia
seen from United States
seen from China
seen from United States
seen from Canada
twitter users and discord users are the same species adapted to different environments
SAP CALL WEB SERVICES - 代码篇2
上代码: 使用e-cology开发人员自已开发的WEB SERVICES中的方法 - ErpWorkflowService->DO_WORKFLOW_REQUEST
有点乱,稍做步骤说明:
YFU_SD_SO2OA
将字段属性及字段值放入内表(分为主表和明细表(支持多个明细表))
将第1步结果动态创建内表并创建记录
将内表转为XML
CALL 方法传递参考
检查返回结果
YFU_SD_FHZL2OA(此方法相对简单一些)
将值存入内表
将内表转为XML
CALL 方法传递参考
检查返回结果
示例包含技术:
动态创建内表并创建记录
根据内表生成XML
解悉XML
CALL web service
YFU_SD_SO2OA
function YFU_SD_SO2OA. *"---------------------------------------------------------------------- *"*"局部接口: *" IMPORTING *" VALUE(VBELN) TYPE VBELN DEFAULT '2010000318' *" EXPORTING *" VALUE(OARE) LIKE YFU_NODE_DATA STRUCTURE YFU_NODE_DATA *" TABLES *" RE STRUCTURE BAPIRET2 *"---------------------------------------------------------------------- *抛OA data: LT_VALUE like standard table of YFU_SAP2OA_VALUE with header line, LS_VBAK type VBAK, LS_VBKD type VBKD, LT_VBAP like standard table of VBAP with header line, TEMP type P decimals 2,KNUMV type VBAK-KNUMV, WORKFLOW_ID type CHAR03,REQUEST_ID type CHAR05,CREATOR_ID type CHAR08, FLAG type STRING,TXT type STRING,STR_VBELN type TDOBNAME,AUART type STRING, L_TXT like standard table of TLINE with header line. select single * from VBAK into LS_VBAK where VBELN eq VBELN. if SY-SUBRC eq 0. case LS_VBAK-AUART. when 'ZOR1'. WORKFLOW_ID = 41.AUART = '大货销售订单'. when 'ZOR2'. WORKFLOW_ID = 41.AUART = '大货-CKD/SKD销售订单'. when 'ZOR3'. WORKFLOW_ID = 42.AUART = '试产订单'. when 'ZOR4'. WORKFLOW_ID = 41.AUART = '大货-备库订单'. when 'ZOR5'. WORKFLOW_ID = 43.AUART = '收费备料销售订单'. when 'ZFD1'. WORKFLOW_ID = 43.AUART = '免费备料销售订单'. when 'ZOR6'. WORKFLOW_ID = 44.AUART = '收费样机销售订单'. when 'ZFD2'. WORKFLOW_ID = 44.AUART = '免费样机销售订单'. when 'ZOR7'. "-零星销售订单 WORKFLOW_ID = 0. when 'ZRE1'. "-退货订单 WORKFLOW_ID = 0. when 'ZSV1'. "-服务订单 WORKFLOW_ID = 0. when others. endcase. check WORKFLOW_ID gt 0. IF LS_VBAK-ZZOANO is NOT INITIAL. REQUEST_ID = LS_VBAK-ZZOANO+14. ENDIF. concatenate LS_VBAK-AUART AUART into AUART separated by SPACE. STR_VBELN = VBELN. define REAR_TXT. TXT = ''. CALL FUNCTION 'READ_TEXT'"Save_Text EXPORTING ID = &1 LANGUAGE = &2 NAME = &3 OBJECT = &4 TABLES LINES = L_TXT 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 EQ 0. LOOP AT L_TXT. CONCATENATE TXT L_TXT-TDLINE INTO TXT. ENDLOOP. ENDIF. end-of-definition. IF LS_VBAK-ZZYWY is INITIAL. CREATOR_ID = 'B100060'. MESSAGE '测试时先默认使用帐号B100060,正式上线请在业务员栏位中输入业务员OA帐号' TYPE 'I'. ELSE. CREATOR_ID = LS_VBAK-ZZYWY. ENDIF. * WORKFLOW_ID = '44'. * REQUEST_ID = ''. FLAG = 'VA01'. * CREATOR_ID = LS_VBAK-ZZYWY. select * from YFU_SAP2OA_VALUE client specified into table LT_VALUE where FLAG eq FLAG. sort LT_VALUE by FIELD_POS. select single * from VBKD into LS_VBKD where VBELN eq VBELN. KNUMV = LS_VBAK-KNUMV. loop at LT_VALUE where DETAILTABLE eq 'MAIN'. case LT_VALUE-FIELD_NAME. when 'SQR'."申请人 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZYWY. when 'SQRSSBM'."申请人所属部门 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZYWY. when 'SQRSSFB'."申请人所属分部 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZYWY. when 'LCBH'."流程编号 concatenate 'OA' VBELN into LT_VALUE-FIELD_VALUE separated by '-'. when 'XGFJ'."相关附件---X when 'XGWD'."相关文档---X when 'XGLC'."相关流程---X when 'DDLX'."订单类型 LT_VALUE-FIELD_VALUE = AUART. when 'XDBH'."下单编号 LT_VALUE-FIELD_VALUE = VBELN. when 'XDRQ'."下单日期 LT_VALUE-FIELD_VALUE = LS_VBAK-ERDAT . when 'BMBH'."部门编号---X concatenate LS_VBAK-VKORG LS_VBAK-VTWEG LS_VBAK-SPART into LT_VALUE-FIELD_VALUE separated by ' - '."描述 when 'YWY'."业务员 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZYWY. when 'KHDH'."客户单号---X when 'KH'."客户 LT_VALUE-FIELD_VALUE = LS_VBAK-KUNNR. when 'SB'."商标 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZSB. when 'XSGJ'."销售国家 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZXSGJ. when 'GSXH'."公司型号 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZGSXH. when 'KHXH'."客户型号 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZKHXH. when 'HDMD'."货代名称 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZHDMC. when 'MFBJ'."免费备机(≤1% LT_VALUE-FIELD_VALUE = LS_VBAK-ZZMFBJ. when 'MFBJ2'."免费备件(≤1% LT_VALUE-FIELD_VALUE = LS_VBAK-ZZMFBJ2. when 'TPBJ'."特批备件 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZTPBJ. when 'TPBJ2'."特批备机 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZTPBJ2. when 'FFBJ'."付费备件 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZFFBJ. when 'TPBJBJ'."特批备机+备件 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZTPBJ3. when 'JYF'."验货方 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZYHF. when 'AQLZ'."AQL值 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZAQL. when 'ZYJBZFS'."装运及包装方式 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZZYFS. when 'ZYYJQD'."是否有《重要元件清单》(见附件) LT_VALUE-FIELD_VALUE = LS_VBAK-ZZYJQD. when 'KHTSYQ'."客户特殊要求 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZKHTSYQ. when 'FKTJ'."付款条件 LT_VALUE-FIELD_VALUE = LS_VBKD-ZTERM . when 'LCNO'."LC NO LT_VALUE-FIELD_VALUE = LS_VBAK-ZZLCNO. when 'ZDJF'."最低降幅 LT_VALUE-FIELD_VALUE = '?' . when 'DJBL'."订金比率 data INT type P decimals 0. INT = LS_VBAK-ZZDJBL * 100 . LT_VALUE-FIELD_VALUE = INT. condense LT_VALUE-FIELD_VALUE. concatenate LT_VALUE-FIELD_VALUE(2) '%' into LT_VALUE-FIELD_VALUE. when 'BZ'."币种 data:WAERK type FCURR_CURR,LAMOUNT type WERTV. WAERK = LS_VBAK-WAERK. call function 'YFU_TOCURR_GET' exporting FOREIGN_CURRENCY = WAERK LOCAL_CURRENCY = 'RMB' importing LOCAL_AMOUNT = LAMOUNT. TXT = LAMOUNT. concatenate WAERK LAMOUNT into LT_VALUE-FIELD_VALUE separated by ' /'. when 'SZ'."税种 - 转明细表 when 'JGSM'."价格说明 LT_VALUE-FIELD_VALUE = LS_VBAK-ZZJGSM. when 'QTBZ'."其他备注 REAR_TXT 'Z003' '1' STR_VBELN 'VBBK'. LT_VALUE-FIELD_VALUE = TXT . when 'FXED'."风险额度 data:LV_SUM type OBLIG_F02L,LV_CMWAE type WAERS. call function 'CREDIT_EXPOSURE' exporting KKBER = '1000' KUNNR = LS_VBAK-KUNNR DATE_CREDIT_EXPOSURE = '99991231' importing SUM_OPENS = LV_SUM CMWAE = LV_CMWAE. LT_VALUE-FIELD_VALUE = LV_SUM. condense LT_VALUE-FIELD_VALUE. concatenate LT_VALUE-FIELD_VALUE LV_CMWAE into LT_VALUE-FIELD_VALUE separated by SPACE. when 'YSYE'."应收余额 data: BUKRS type VKBUK,AC_BALANCE type BAPI3007_9. select single BUKRS from TVKO into BUKRS where VKORG = LS_VBAK-VKORG. call function 'BAPI_AR_ACC_GETCURRENTBALANCE' exporting COMPANYCODE = BUKRS CUSTOMER = LS_VBAK-KUNNR importing ACTUAL_BALANCE = AC_BALANCE. if SY-SUBRC eq 0. LT_VALUE-FIELD_VALUE = AC_BALANCE-TOTAL_BAL. condense: LT_VALUE-FIELD_VALUE. concatenate LT_VALUE-FIELD_VALUE AC_BALANCE-CURRENCY into LT_VALUE-FIELD_VALUE separated by SPACE. endif. when 'FKXGWJ'."风控相关文件---X when 'GGSFJ'."规格书附件---X when 'GSSCZSL'."公司生产总数量---X when 'TZSBZ'."通知书备注 REAR_TXT 'Z001' '1' STR_VBELN 'VBBK'. LT_VALUE-FIELD_VALUE = TXT . when 'HXSAPZT'."回写SAP状态---X when 'CWXX'."错误信息---X when 'GSMC'."公司名称---X when 'SDF'."送达方 select single KUNNR from VBPA into LS_VBAK-KUNNR where VBELN eq VBELN and PARVW eq 'SH'. LT_VALUE-FIELD_VALUE = LS_VBAK-KUNNR. when 'QQJHRQ'."请求交货日期 LT_VALUE-FIELD_VALUE = LS_VBAK-VDATU . when 'XSDDH'."销售订单号 LT_VALUE-FIELD_VALUE = VBELN . when 'CJRQ'."创建日期 LT_VALUE-FIELD_VALUE = LS_VBAK-ERDAT . when 'FXQD'."分销渠道 concatenate LS_VBAK-VKORG LS_VBAK-VTWEG LS_VBAK-SPART into LT_VALUE-FIELD_VALUE separated by ' - '."描述 when 'KHCGDDBH'."客户采购订单编号 LT_VALUE-FIELD_VALUE = LS_VBKD-BSTKD. when 'SDF2'."售达方 select single KUNNR from VBPA into LS_VBAK-KUNNR where VBELN eq VBELN and PARVW eq 'SH'. LT_VALUE-FIELD_VALUE = LS_VBAK-KUNNR. when 'ZTBZ2'."其他备注二 REAR_TXT 'Z004' '1' STR_VBELN 'VBBK'. LT_VALUE-FIELD_VALUE = TXT . when 'TJLXJE'."条件类型/金额 LT_VALUE-FIELD_VALUE = '不需显示'. when others. endcase. modify LT_VALUE. endloop. data N type I. select * from VBAP into table LT_VBAP where VBELN eq VBELN. describe table LT_VBAP lines N. "汇率统计 - VBAP-STCUR do N times. read table LT_VBAP index SY-INDEX. loop at LT_VALUE where DETAILTABLE cp '*_DT1' and FIELD_ROW eq 1. case LT_VALUE-FIELD_NAME. when 'PH'."品号 when 'PMGG'."品名 when 'MXINDEX'."明细index data NN type I. NN = LT_VBAP-POSNR. LT_VALUE-FIELD_VALUE = NN . when 'WL'."物料 LT_VALUE-FIELD_VALUE = LT_VBAP-MATNR . when 'WLMS'."物料描述 LT_VALUE-FIELD_VALUE = LT_VBAP-ARKTX. when 'LB'."类别 LT_VALUE-FIELD_VALUE = LT_VBAP-PSTYV. when 'DDSLZPSL'."订单数量 LT_VALUE-FIELD_VALUE = LT_VBAP-KWMENG. when 'DJ'."单价 LT_VALUE-FIELD_VALUE = LT_VBAP-NETPR."KPEIN-条件定价单位 KMEIN-条件单位 when 'SE'."税额 * select single KBETR from KONV into TEMP where KNUMV eq KNUMV and KPOSN eq LT_VBAP-POSNR and KSCHL eq 'MWST' . * TEMP = TEMP / LT_VBAP-NETPR . LT_VALUE-FIELD_VALUE = LT_VBAP-MWSBP. when 'JE'."金额 LT_VALUE-FIELD_VALUE = LT_VBAP-NETWR. when 'YJHQ'."预交货期 data DATE type D. select single EDATU into DATE from VBEP where VBELN eq VBELN and POSNR eq LT_VBAP-POSNR. LT_VALUE-FIELD_VALUE = DATE. when 'DJJF'."定价降幅 LT_VALUE-FIELD_VALUE = 0 . when 'BZ'."备注 LT_VALUE-FIELD_VALUE = '?' . when others. endcase. if SY-INDEX eq 1. modify LT_VALUE. else. LT_VALUE-FIELD_ROW = SY-INDEX. append LT_VALUE. endif. endloop. enddo. call function 'YFU_SAP2OA' exporting WORKFLOW_ID = WORKFLOW_ID REQUEST_ID = REQUEST_ID REQUEST_NAME = 'TEST REQUEST' REQUEST_LEVEL = '重要' NEXT = 'X' CREATOR_ID = CREATOR_ID MESSAGE = '自动触发' FLAG = FLAG importing OARE = OARE tables FIELDS = LT_VALUE[]. *WORKFLOW_ID 41大货 42-试产 43-备料 44-样机 if OARE-SUCCESS eq 'true'. * 回写OA流程号 concatenate 'OA' VBELN OARE-REQUESTID into TXT separated by '-'. update VBAK set ZZOANO = TXT ZZFLOW = 'Y' where VBELN = VBELN. * 修改SO状态 call function 'YFU_SD_XSDD_CHANGE' exporting VBELN = VBELN LOCK = 'Y' tables RETURN = RE. RE-TYPE = 'S'. concatenate VBELN ':成功触发流程:' OARE-REQUESTID into RE-MESSAGE. else. RE-TYPE = 'E'. concatenate VBELN ':' OARE-MSG OARE-EXCEPTIONMSG into RE-MESSAGE. endif. else. RE-TYPE = 'E'. concatenate VBELN ':销售订单号有误,请检查后重试!' into RE-MESSAGE. endif. append RE. endfunction.
YFU_SD_FHZL2OA
function YFU_SD_FHZL2OA. *"---------------------------------------------------------------------- *"*"局部接口: *" IMPORTING *" VALUE(VBELN) TYPE VBELN_VA DEFAULT 'Z110000102' *" EXPORTING *" VALUE(OARE) LIKE YFU_NODE_DATA STRUCTURE YFU_NODE_DATA *" TABLES *" RE STRUCTURE BAPIRET2 *"---------------------------------------------------------------------- define CHECKSW. IF &1 EQ 'X'. &1 = '1'. ELSE. &1 = '0'. ENDIF. end-of-definition. define LISTSW. IF &1 EQ 9. &1 = '0'. ENDIF. end-of-definition. define UNITSW. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' EXPORTING INPUT = &1 * LANGUAGE = SY-LANGU IMPORTING * LONG_TEXT = OUTPUT = &1 * SHORT_TEXT = EXCEPTIONS UNIT_NOT_FOUND = 1 OTHERS = 2. IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. end-of-definition. data:LIPS like standard table of ZLIPS with header line, VBELN2 type VBELN_VA,AUART type AUART, WORKFLOW_ID type CHAR03,REQUEST_ID type CHAR05,CREATOR_ID type CHAR08,FLAG type STRING. select * from ZLIPS into table LIPS where VBELN2 eq VBELN. read table LIPS index 1.VBELN2 = LIPS-VBELN. select single AUART from VBAK into AUART where VBELN eq VBELN2. if SY-SUBRC eq 0. case AUART. when 'ZOR1'. WORKFLOW_ID = 45.AUART = '大货销售订单'. when 'ZOR2'. WORKFLOW_ID = 45.AUART = '大货-CKD/SKD销售订单'. when 'ZOR3'. WORKFLOW_ID = 46.AUART = '试产订单'. when 'ZOR4'. WORKFLOW_ID = 45.AUART = '大货-备库订单'. when 'ZOR5'. WORKFLOW_ID = 47.AUART = '收费备料销售订单'. when 'ZFD1'. WORKFLOW_ID = 47.AUART = '免费备料销售订单'. when 'ZOR6'. WORKFLOW_ID = 62.AUART = '收费样机销售订单'. when 'ZFD2'. WORKFLOW_ID = 62.AUART = '免费样机销售订单'. when 'ZOR7'. "-零星销售订单 WORKFLOW_ID = 0. when 'ZRE1'. "-退货订单 WORKFLOW_ID = 0. when 'ZSV1'. "-服务订单 WORKFLOW_ID = 0. when others. endcase. check WORKFLOW_ID gt 0. FLAG = 'ZVL01'. loop at LIPS. UNITSW LIPS-VRKME. modify LIPS. endloop. export LIPS to memory id 'DT1'. *抛OA data: begin of LIKP occurs 0. include type ZLIKP as ZLIKP. data: FXED type STRING, YSYE type STRING, LCBH type STRING. data end of LIKP. select single * from ZLIKP into corresponding fields of LIKP where VBELN2 eq VBELN. IF LIKP-ZZOANO is NOT INITIAL. REQUEST_ID = LIKP-ZZOANO+14. ENDIF. CREATOR_ID = LIKP-ZZYWY."'B100080'. WORKFLOW_ID = '62'. REQUEST_ID = ''. CHECKSW:LIKP-ZLSCD,LIKP-ZLSCD2,LIKP-ZLSCD3,LIKP-ZCDZ."CHECK Box LISTSW:LIKP-ZHDFS,LIKP-ZZYFS,LIKP-ZBZFS,LIKP-ZBOAT2. "LIST Box "流程编号 concatenate 'OA' VBELN into LIKP-LCBH separated by '-'. "风险额度 data:LV_SUM type OBLIG_F02L,LV_CMWAE type WAERS. call function 'CREDIT_EXPOSURE' exporting KKBER = '1000' KUNNR = LIKP-KUNNR DATE_CREDIT_EXPOSURE = '99991231' importing SUM_OPENS = LV_SUM CMWAE = LV_CMWAE. LIKP-FXED = LV_SUM. condense LIKP-FXED. concatenate LIKP-FXED LV_CMWAE into LIKP-FXED separated by SPACE. "应收余额 data: BUKRS type VKBUK,AC_BALANCE type BAPI3007_9. select single BUKRS from TVKO into BUKRS where VKORG = LIKP-VKORG. call function 'BAPI_AR_ACC_GETCURRENTBALANCE' exporting COMPANYCODE = BUKRS CUSTOMER = LIKP-KUNNR importing ACTUAL_BALANCE = AC_BALANCE. if SY-SUBRC eq 0. LIKP-YSYE = AC_BALANCE-TOTAL_BAL. condense: LIKP-YSYE. concatenate LIKP-YSYE AC_BALANCE-CURRENCY into LIKP-YSYE separated by SPACE. endif. append LIKP. export LIKP to memory id 'MAIN'. call function 'YFU_SAP2OA' exporting WORKFLOW_ID = WORKFLOW_ID REQUEST_ID = REQUEST_ID REQUEST_NAME = 'TEST REQUEST' REQUEST_LEVEL = '重要' NEXT = 'X' CREATOR_ID = CREATOR_ID MESSAGE = '自动触发' FLAG = FLAG importing OARE = OARE. if OARE-SUCCESS eq 'true'. * 回写OA流程号 data TXT type STRING. concatenate 'OA' VBELN OARE-REQUESTID into TXT separated by '-'. update ZLIKP set ZZOANO = TXT ZZFLOW = 'Y' where VBELN2 eq VBELN. *修改发货指令状态 call function 'YFU_SD_FHZL_CHANGE' exporting FHZLH = VBELN SIGN = '1' * AUDIT = tables RETURN = RE. RE-TYPE = 'S'. concatenate VBELN ':成功触发流程:' OARE-REQUESTID into RE-MESSAGE. else. RE-TYPE = 'E'. concatenate VBELN ':' OARE-MSG into RE-MESSAGE. endif. else. RE-TYPE = 'E'. concatenate VBELN ':发货指令号有误,请检查后重试!' into RE-MESSAGE. endif. append RE. endfunction.
YFU_SAP2OA
*PARSE_XML data:L_DOC type ref to IF_IXML_DOCUMENT, RE type YFU_NODE_DATA. function YFU_SAP2OA. *"---------------------------------------------------------------------- *"*"局部接口: *" IMPORTING *" REFERENCE(WORKFLOW_ID) TYPE CHAR03 DEFAULT '41' *" REFERENCE(REQUEST_ID) TYPE CHAR05 DEFAULT '' *" REFERENCE(REQUEST_NAME) TYPE CHAR128 DEFAULT 'TEST REQUEST' *" REFERENCE(REQUEST_LEVEL) TYPE CHAR04 DEFAULT '重要' *" REFERENCE(NEXT) TYPE CHAR01 DEFAULT 'X' *" REFERENCE(CREATOR_ID) TYPE CHAR08 DEFAULT 'A16106' *" REFERENCE(MESSAGE) TYPE CHAR128 DEFAULT '自动触发' *" REFERENCE(FLAG) TYPE STRING DEFAULT 'VA01' *" EXPORTING *" REFERENCE(OARE) LIKE YFU_NODE_DATA STRUCTURE YFU_NODE_DATA *" TABLES *" FIELDS STRUCTURE YFU_SAP2OA_VALUE OPTIONAL *" RAISING *" CX_AI_SYSTEM_FAULT *" CX_AI_APPLICATION_FAULT *"---------------------------------------------------------------------- type-pools: SLIS. *==================================================ITAB2XML--001 *&————2nd step: create the XML types: begin of XML_LINE, DATA(256) type X, end of XML_LINE. data: L_IXML type ref to IF_IXML, L_ENCODING type ref to IF_IXML_ENCODING, L_COMMENT type ref to IF_IXML_COMMENT, L_ROOT type ref to IF_IXML_ELEMENT, L_RVAL type I, L_OSTREAM type ref to IF_IXML_OSTREAM, L_FACTORY type ref to IF_IXML_STREAM_FACTORY, XML_TABLE type table of XML_LINE, XML_SIZE type I. **create the IXML instance class CL_IXML definition load. L_IXML = CL_IXML=>CREATE( ). **set the Encoding call method L_IXML->CREATE_ENCODING exporting BYTE_ORDER = 0 CHARACTER_SET = 'UTF-8' receiving RVAL = L_ENCODING. **create XML Documnet call method L_IXML->CREATE_DOCUMENT receiving RVAL = L_DOC. call method L_DOC->SET_ENCODING exporting ENCODING = L_ENCODING. **Create the 1st XML node call method L_DOC->CREATE_SIMPLE_ELEMENT exporting NAME = 'root' PARENT = L_DOC receiving RVAL = L_ROOT. **Create attribute of 1st XML node call method L_ROOT->SET_ATTRIBUTE exporting NAME = FLAG VALUE = 'sample' receiving RVAL = L_RVAL. **Create one Comment call method L_DOC->CREATE_COMMENT exporting COMMENT = 'SAP TO OA' receiving RVAL = L_COMMENT. **Create child node to the 1st Root Node call method L_ROOT->APPEND_CHILD exporting NEW_CHILD = L_COMMENT receiving RVAL = L_RVAL. *==================================================TABLE_CREATE if FLAG ne 'ZVL01'. field-symbols: type standard table, " 内表结构 type standard table, " 内表结构 type standard table, " 内表结构 type standard table, " 内表结构 , " 表头 . " 项 data: DY_TABLE type ref to DATA, DY_LINE type ref to DATA, " 行 XFC type LVC_S_FCAT, " 列结构 IFC type LVC_T_FCAT, " 列内表 TXT(254) type C. sort FIELDS[] by FIELD_POS. ******************'MAIN' loop at FIELDS where DETAILTABLE eq 'MAIN'. clear XFC. XFC-FIELDNAME = FIELDS-FIELD_NAME. XFC-DATATYPE = FIELDS-FIELD_TYPE. XFC-INTLEN = FIELDS-FIELD_LEN. append XFC to IFC. endloop. check IFC is not initial. call method CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE exporting IT_FIELDCATALOG = IFC importing EP_TABLE = DY_TABLE. assign DY_TABLE->* to . assign DY_TABLE->* to . create data DY_LINE like line of . assign DY_LINE->* to . clear: XFC, IFC. loop at FIELDS where DETAILTABLE eq 'MAIN'. assign component FIELDS-FIELD_NAME of structure to . condense FIELDS-FIELD_VALUE. = FIELDS-FIELD_VALUE. endloop. append to . perform FILL_XML tables using 'data' 'main' L_ROOT."Call Method of Filling data to XML node * export to memory id 'MAIN'. * FREE MEMORY ID 'MAIN'. ******************'DT1' loop at FIELDS where DETAILTABLE cp '*_DT1' and FIELD_ROW eq 1. clear XFC. XFC-FIELDNAME = FIELDS-FIELD_NAME. XFC-DATATYPE = FIELDS-FIELD_TYPE. XFC-INTLEN = FIELDS-FIELD_LEN. append XFC to IFC. endloop. if IFC is not initial. call method CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE exporting IT_FIELDCATALOG = IFC importing EP_TABLE = DY_TABLE. assign DY_TABLE->* to . assign DY_TABLE->* to . create data DY_LINE like line of . assign DY_LINE->* to . clear: XFC, IFC. sort FIELDS by DETAILTABLE FIELD_ROW FIELD_POS. data IDX type N value '1'. loop at FIELDS where DETAILTABLE cp '*_DT1'. if FIELDS-FIELD_ROW ne IDX. IDX = FIELDS-FIELD_ROW. append to . endif. assign component FIELDS-FIELD_NAME of structure to . condense FIELDS-FIELD_VALUE. = FIELDS-FIELD_VALUE. endloop. append to . perform FILL_XML tables using 'data' 'detailtable1' L_ROOT."Call Method of Filling data to XML node endif. ******************'DT2' loop at FIELDS where DETAILTABLE cp '*_DT2' and FIELD_ROW eq 1. clear XFC. XFC-FIELDNAME = FIELDS-FIELD_NAME. XFC-DATATYPE = 'CHAR'. XFC-INTLEN = FIELDS-FIELD_LEN. append XFC to IFC. endloop. if IFC is not initial. call method CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE exporting IT_FIELDCATALOG = IFC importing EP_TABLE = DY_TABLE. assign DY_TABLE->* to . assign DY_TABLE->* to . create data DY_LINE like line of . assign DY_LINE->* to . clear: XFC, IFC. IDX = 1. loop at FIELDS where DETAILTABLE cp '*_DT2'. if FIELDS-FIELD_ROW ne IDX. IDX = FIELDS-FIELD_ROW. append to . endif. assign component FIELDS-FIELD_NAME of structure to . condense FIELDS-FIELD_VALUE. = FIELDS-FIELD_VALUE. endloop. append to . perform FILL_XML tables using 'data' 'detailtable2' L_ROOT."Call Method of Filling data to XML node endif. else. data: begin of LIKP occurs 0. include type ZLIKP as ZLIKP. data: FXED type STRING, YSYE type STRING, LCBH type STRING. data end of LIKP. data:LIPS like standard table of ZLIPS with header line. import LIKP from memory id 'MAIN'. perform FILL_XML tables LIKP using 'data' 'main' L_ROOT."Call Method of Filling data to XML node free memory id 'MAIN'. import LIPS from memory id 'DT1'. perform FILL_XML tables LIPS using 'data' 'detailtable1' L_ROOT."Call Method of Filling data to XML node free memory id 'DT1'. endif. *==================================================ITAB2XML--002 **Call XML Stream Factory call method L_IXML->CREATE_STREAM_FACTORY receiving RVAL = L_FACTORY. **change the XML data to table call method L_FACTORY->CREATE_OSTREAM_ITABLE exporting TABLE = XML_TABLE receiving RVAL = L_OSTREAM. call method L_DOC->RENDER exporting OSTREAM = L_OSTREAM RECURSIVE = 'X'. call method L_OSTREAM->GET_NUM_WRITTEN_RAW receiving RVAL = XML_SIZE. data LS_TMP_STRING type STRING. call function 'SCMS_BINARY_TO_STRING' exporting INPUT_LENGTH = XML_SIZE importing TEXT_BUFFER = LS_TMP_STRING * OUTPUT_LENGTH = tables BINARY_TAB = XML_TABLE exceptions FAILED = 1 others = 2. if SY-SUBRC <> 0. "error endif. *==================================================Call Web Services data: WS type ref to YOA_CO_ERP_WORKFLOW_SERVICE_PO, EXP type YOA_DO_WORKFLOW_REQUEST_REQUES, IMP type YOA_DO_WORKFLOW_REQUEST_RESPON, UID type STRING,TEMP(72),XML type STRING. create object WS. EXP-IN0 = WORKFLOW_ID. "流程ID EXP-IN1 = REQUEST_ID."请求ID,为空创建,否则赋值 EXP-IN2 = REQUEST_NAME."流程标题 EXP-IN3 = REQUEST_LEVEL."紧急程度=正常、重要、紧急 EXP-IN4 = NEXT."自动转下个节点=true,false EXP-IN5 = LS_TMP_STRING. EXP-IN6 = CREATOR_ID."下个节点操作人 EXP-IN7 = MESSAGE."审批意见 try. call method WS->DO_WORKFLOW_REQUEST exporting DO_WORKFLOW_REQUEST_REQUEST = EXP importing DO_WORKFLOW_REQUEST_RESPONSE = IMP. *==================================================PARSE XML * MIME object data: REF_MIME_API type ref to IF_MR_API, LS_XSTRING type XSTRING, * LS_TMP_STRING type STRING, LW_NUMBER type I, LT_CNTBIN type SDOKCNTBINS. * XML proxy class data: * L_IXML type ref to IF_IXML, L_STREAMFACTORY type ref to IF_IXML_STREAM_FACTORY, L_ISTREAM type ref to IF_IXML_ISTREAM, L_DOCUMENT type ref to IF_IXML_DOCUMENT, L_XMLNODE type ref to IF_IXML_NODE, L_PARSER type ref to IF_IXML_PARSER. LS_TMP_STRING = IMP-OUT. L_IXML = CL_IXML=>CREATE( ). ** Creating a stream factory L_STREAMFACTORY = L_IXML->CREATE_STREAM_FACTORY( ). if LS_TMP_STRING is not initial . L_ISTREAM = L_STREAMFACTORY->CREATE_ISTREAM_CSTRING( STRING = LS_TMP_STRING ). endif. check L_ISTREAM is bound. ** Creating a document L_DOCUMENT = L_IXML->CREATE_DOCUMENT( ). ** Create a Parser L_PARSER = L_IXML->CREATE_PARSER( STREAM_FACTORY = L_STREAMFACTORY ISTREAM = L_ISTREAM DOCUMENT = L_DOCUMENT ). if L_PARSER->PARSE( ) ne 0. if L_PARSER->NUM_ERRORS( ) ne 0. ** Parse XML string failed write:/ 'Parse XML failed!'. leave to list-processing. endif. endif. call method L_ISTREAM->CLOSE( ). clear L_ISTREAM. ** XML node L_XMLNODE ?= L_DOCUMENT. *3. Parse XML string using the XML Proxy class perform PARSE_XML using L_XMLNODE. "last record catch CX_AI_SYSTEM_FAULT . RE-SUCCESS = 'false'. RE-MSG = '连接OA失败(网络原因),请确认OA是否可以正常访问!'. catch CX_AI_APPLICATION_FAULT . RE-SUCCESS = 'false'. RE-MSG = '连接OA失败(程序原因),请联系管理员处理!'. endtry. *==================================================Return Info OARE = RE. endfunction. *==================================================Form fill_xml(填充) form FILL_XML tables INTAB using NODE1NAME type STRING NODE2NAME type STRING L_PARENT type ref to IF_IXML_ELEMENT. types: begin of TYP_COMP , LENGTH type I , DECIMALS type I, TYPE_KIND type C, NAME(30) type C, end of TYP_COMP. data:LS_COMP type TYP_COMP , LT_COMP type table of TYP_COMP. * data L_DOC type ref to IF_IXML_DOCUMENT. data DESCR_REF type ref to CL_ABAP_STRUCTDESCR. field-symbols: type ABAP_COMPDESCR , , type ANY . data: N type I , STR type STRING , TEXT1 type STRING, ITEMNAME type STRING , L_NODE type ref to IF_IXML_ELEMENT, L_ITEM type ref to IF_IXML_ELEMENT, L_ELEMENT type ref to IF_IXML_ELEMENT. DESCR_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( INTAB ). loop at DESCR_REF->COMPONENTS assigning . move-corresponding to LS_COMP. translate LS_COMP-NAME to lower case. append LS_COMP to LT_COMP. endloop. * create the element of the incoming element try . call method L_DOC->CREATE_SIMPLE_ELEMENT exporting NAME = NODE1NAME PARENT = L_PARENT receiving RVAL = L_NODE. catch CX_SY_REF_IS_INITIAL. break-point. endtry. * record the number of the fields of this structure describe table LT_COMP lines N. * every record will be one element to XML loop at INTAB assigning . **add the element to the 2nd level call method L_DOC->CREATE_SIMPLE_ELEMENT exporting NAME = NODE2NAME PARENT = L_NODE receiving RVAL = L_ITEM. do N times. assign component SY-INDEX of structure to . STR = . read table LT_COMP into LS_COMP index SY-INDEX. if LS_COMP-TYPE_KIND = 'I' or LS_COMP-TYPE_KIND = 'P' or LS_COMP-TYPE_KIND = 'F'. search STR for '-'. if SY-SUBRC = 0 and SY-FDPOS <> 0. split STR at '-' into STR TEXT1. condense STR. concatenate '-' STR into STR. else. condense STR. endif. elseif LS_COMP-TYPE_KIND = 'D'. define DATESW. CONCATENATE &1(4) &1+4(2) &1+6(2) INTO &1 SEPARATED BY '-'. end-of-definition. DATESW STR. * SHIFT str LEFT DELETING LEADING '0' . endif. ITEMNAME = LS_COMP-NAME . call method L_DOC->CREATE_SIMPLE_ELEMENT exporting NAME = ITEMNAME PARENT = L_ITEM VALUE = STR receiving RVAL = L_ELEMENT. enddo. endloop. endform. "fill_xml *==================================================Form PARSE_XML(递归) form PARSE_XML using IO_XMLNODE type ref to IF_IXML_NODE. data: LW_NODENAM type STRING, LW_NODE type ref to IF_IXML_NODE. case IO_XMLNODE->GET_TYPE( ). when IF_IXML_NODE=>CO_NODE_ELEMENT. LW_NODENAM = IO_XMLNODE->GET_NAME( ). case LW_NODENAM. when 'ResultInfo'. * if RE is not initial. * append RE. * endif. * clear RE. when 'success'. RE-SUCCESS = IO_XMLNODE->GET_VALUE( ). when 'workflowId'. RE-WORKFLOWID = IO_XMLNODE->GET_VALUE( ). when 'workflowCode'. RE-WORKFLOWCODE = IO_XMLNODE->GET_VALUE( ). when 'requestId'. RE-REQUESTID = IO_XMLNODE->GET_VALUE( ). when 'requestHandleMode'. RE-REQUESTHANDLEMODE = IO_XMLNODE->GET_VALUE( ). when 'executeHandleMode'. RE-EXECUTEHANDLEMODE = IO_XMLNODE->GET_VALUE( ). when 'msg'. RE-MSG = IO_XMLNODE->GET_VALUE( ). when 'exceptionMsg'. RE-EXCEPTIONMSG = IO_XMLNODE->GET_VALUE( ). endcase. endcase. * recursion method LW_NODE = IO_XMLNODE->GET_FIRST_CHILD( ). while not LW_NODE is initial. perform PARSE_XML using LW_NODE . LW_NODE = LW_NODE->GET_NEXT( ). endwhile. endform. " PARSE_XML
SAP CALL WEB SERVICES - 代码篇1
话不多说,直接上代码: 使用e-cology自带的WEB SERVICES中的方法 - WorkflowService->DO_CREATE_WORKFLOW_REQUEST
function YFU_SAP2OA2. *"-------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(WORKFLOW_ID) TYPE CHAR03 DEFAULT '41' *" REFERENCE(WORKFLOW_TYPE_ID) TYPE CHAR03 DEFAULT '22' *" REFERENCE(CREATOR_ID) TYPE CHAR03 DEFAULT '43' *" REFERENCE(MESSAGE_TYPE) TYPE CHAR03 DEFAULT '1' *" REFERENCE(REQUEST_LEVEL) TYPE CHAR03 DEFAULT '1' *" REFERENCE(REQUEST_NAME) TYPE CHAR0256 DEFAULT 'TEST REQUEST' *" TABLES *" FIELDS STRUCTURE YFU_SAP2OA_VALUE *" RETURN STRUCTURE BAPIRET2 *"-------------------------------------------------------------------- data: WS type ref to YFU_CO_WORKFLOW_SERVICE_PORT_T, EXP type YFU_DO_CREATE_WORKFLOW_REQUES1,"YFU_SUBMIT_WORKFLOW_REQUEST_R1," IN0 type YFU_WORKFLOW_REQUEST_INFO, WORKFLOW_BASE_INFO type YFU_WORKFLOW_BASE_INFO, WORKFLOW_MAIN_TABLE_INFO type YFU_WORKFLOW_MAIN_TABLE_INFO,"主表 REQUEST_RECORDS type YFU_ARRAY_OF_WORKFLOW_REQUEST,"记录S WORKFLOW_REQUEST_TABLE_RECORD type YFU_WORKFLOW_REQUEST_TABLE_REC,"记录行 LT_WRTR type table of YFU_WORKFLOW_REQUEST_TABLE_REC,"记录表 WORKFLOW_REQUEST_TABLE_FIELDS type YFU_ARRAY_OF_WORKFLOW_REQUEST1,"字段S WORKFLOW_REQUEST_TABLE_FIELD type YFU_WORKFLOW_REQUEST_TABLE_FIE,"字段行 LT_WRTF type table of YFU_WORKFLOW_REQUEST_TABLE_FIE,"字段表 WORKFLOW_DETAIL_TABLE_INFOS type YFU_ARRAY_OF_WORKFLOW_DETAIL_T,"明细表 WORKFLOW_DETAIL_TABLE_INFO type YFU_WORKFLOW_DETAIL_TABLE_INFO, LT_WDTI type table of YFU_WORKFLOW_DETAIL_TABLE_INFO,"多明细表 IMP type YFU_DO_CREATE_WORKFLOW_REQUEST,"YFU_SUBMIT_WORKFLOW_REQUEST_RE," * LT_VALUE like standard table of YFU_SAP2OA_VALUE, WA_FIELDS like line of FIELDS. create object WS. * 主字段 loop at FIELDS into WA_FIELDS where DETAILTABLE eq 'MAIN'. WORKFLOW_REQUEST_TABLE_FIELD-FIELD_NAME = WA_FIELDS-FIELD_NAME. WORKFLOW_REQUEST_TABLE_FIELD-VIEW = 'X'. WORKFLOW_REQUEST_TABLE_FIELD-EDIT = 'X'. WORKFLOW_REQUEST_TABLE_FIELD-FIELD_VALUE = WA_FIELDS-FIELD_VALUE. append WORKFLOW_REQUEST_TABLE_FIELD to LT_WRTF. endloop. "字段S WORKFLOW_REQUEST_TABLE_FIELDS-WORKFLOW_REQUEST_TABLE_FIELD = LT_WRTF. "记录 WORKFLOW_REQUEST_TABLE_RECORD-RECORD_ORDER = 1. WORKFLOW_REQUEST_TABLE_RECORD-WORKFLOW_REQUEST_TABLE_FIELDS = WORKFLOW_REQUEST_TABLE_FIELDS. append WORKFLOW_REQUEST_TABLE_RECORD to LT_WRTR. "记录S REQUEST_RECORDS-WORKFLOW_REQUEST_TABLE_RECORD = LT_WRTR. "主表 "WORKFLOW_MAIN_TABLE_INFO-TABLE_DBNAME = ''. WORKFLOW_MAIN_TABLE_INFO-REQUEST_RECORDS = REQUEST_RECORDS. clear LT_WRTF. clear LT_WRTR. * 多明细表 sort FIELDS by DETAILTABLE. * 明细字段 loop at FIELDS into WA_FIELDS where DETAILTABLE ne 'MAIN'. WORKFLOW_REQUEST_TABLE_FIELD-FIELD_NAME = WA_FIELDS-FIELD_NAME. WORKFLOW_REQUEST_TABLE_FIELD-VIEW = 'X'. WORKFLOW_REQUEST_TABLE_FIELD-EDIT = 'X'. WORKFLOW_REQUEST_TABLE_FIELD-FIELD_VALUE = WA_FIELDS-FIELD_VALUE. append WORKFLOW_REQUEST_TABLE_FIELD to LT_WRTF. at end of DETAILTABLE. "字段S WORKFLOW_REQUEST_TABLE_FIELDS-WORKFLOW_REQUEST_TABLE_FIELD = LT_WRTF. "记录 WORKFLOW_REQUEST_TABLE_RECORD-RECORD_ORDER = 1. WORKFLOW_REQUEST_TABLE_RECORD-WORKFLOW_REQUEST_TABLE_FIELDS = WORKFLOW_REQUEST_TABLE_FIELDS. append WORKFLOW_REQUEST_TABLE_RECORD to LT_WRTR. "记录S REQUEST_RECORDS-WORKFLOW_REQUEST_TABLE_RECORD = LT_WRTR. WORKFLOW_DETAIL_TABLE_INFO-TABLE_TITLE = WA_FIELDS-DETAILTABLE."'明细表1'. WORKFLOW_DETAIL_TABLE_INFO-WORKFLOW_REQUEST_TABLE_RECORDS = REQUEST_RECORDS. append WORKFLOW_DETAIL_TABLE_INFO to LT_WDTI. WORKFLOW_DETAIL_TABLE_INFOS-WORKFLOW_DETAIL_TABLE_INFO = LT_WDTI. clear LT_WRTF. clear LT_WRTR. endat. endloop. "流程信息 WORKFLOW_BASE_INFO-WORKFLOW_ID = WORKFLOW_ID. "WORKFLOW_BASE_INFO-WORKFLOW_NAME = 'web'. WORKFLOW_BASE_INFO-WORKFLOW_TYPE_ID = WORKFLOW_TYPE_ID. "基础信息 IN0-CREATOR_ID = CREATOR_ID. IN0-MESSAGE_TYPE = MESSAGE_TYPE. IN0-REQUEST_LEVEL = REQUEST_LEVEL. IN0-REQUEST_NAME = REQUEST_NAME. IN0-WORKFLOW_BASE_INFO = WORKFLOW_BASE_INFO. IN0-WORKFLOW_MAIN_TABLE_INFO = WORKFLOW_MAIN_TABLE_INFO. IN0-WORKFLOW_DETAIL_TABLE_INFOS = WORKFLOW_DETAIL_TABLE_INFOS. EXP-IN0 = IN0. EXP-IN1 = CREATOR_ID. * EXP-IN2 = 41."CREATOR_ID * EXP-IN3 = '审批意见'."审批意见 * EXP-IN4 = IN0." try. call method WS->DO_CREATE_WORKFLOW_REQUEST exporting DO_CREATE_WORKFLOW_REQUEST_REQ = EXP importing DO_CREATE_WORKFLOW_REQUEST_RES = IMP. * call method WS->SUBMIT_WORKFLOW_REQUEST * exporting * SUBMIT_WORKFLOW_REQUEST_REQUES = EXP * importing * SUBMIT_WORKFLOW_REQUEST_RESPON = IMP. *返回值 *String:新流程的requestid if IMP-OUT gt 0. RETURN-TYPE = 'S'. concatenate 'OA:成功触发流程 - Requestid:' IMP-OUT into RETURN-MESSAGE. append RETURN. else. RETURN-TYPE = 'E'. case IMP-OUT . when '-1'.RETURN-MESSAGE = 'OA:创建流程失败'. when '-2'.RETURN-MESSAGE = 'OA:用户没有流程创建权限'. when '-3'.RETURN-MESSAGE = 'OA:创建流程基本信息失败'. when '-4'.RETURN-MESSAGE = 'OA:保存表单主表信息失败'. when '-5'.RETURN-MESSAGE = 'OA:更新紧急程度失败'. when '-6'.RETURN-MESSAGE = 'OA:流程操作者失败'. when '-7'.RETURN-MESSAGE = 'OA:流转至下一节点失败'. when '-8'.RETURN-MESSAGE = 'OA:节点附加操作失败'. when others.RETURN-MESSAGE = 'OA:未成功触发流程,请检查数据'. endcase. endif. catch CX_AI_SYSTEM_FAULT . RETURN-TYPE = 'E'. RETURN-MESSAGE = 'OA:Error:Communication Error - 通讯错误'. append RETURN. catch CX_AI_APPLICATION_FAULT . RETURN-TYPE = 'E'. RETURN-MESSAGE = 'OA:Error:Application Error - 应用程序错误'. append RETURN. endtry. endfunction.
SAP CALL WEB SERVICES - 连接篇
近期一个新项目,需要从SAP主动触发OA的审批流,期间遇到一些问题,在这总结、分享一下:
版本:
* SAP - EHP6 FOR SAP ERP 6.0 * OA - 泛微 e-cology 7.0 2. OA 端WEB SERVERS: 泛微OA的WEB SERVERS发布在下面地址,直接输入地址查看: * http://[IP]//services * 以下示例使用:WorkflowService [wsdl] 3. SAP SE80 创建企业服务 * 进入需要的包,在目录树上单击右键,依次选择:
创建(Create) - 企业服务(Enterprise Service) - Service Consumer - external WSDL - URL - 输入WSDL的地址(eg:http://192.168.3.177//services/WorkflowService?wsdl) - 输入包(Package)、传输号(Request/Task)(如不用传输可勾选本地对象(Local Object))、和类名称的前缀(Prefix) - 点击完成(Complete) 激活自动生成的类:YFU_CO_WORKFLOW_SERVICE_PORT_T * 在这步有可能会遇到下面问题,导致创建失败: 错误的值:目标命名(Namespace)空间必须是...,这个需要将OA端将WSDL中的Namespace行删除 错误的值:未知类型参考...(Incorrect value: Unknown Type Referencens1:ArrayOfDocInfo),这个是因为OA端WEB SERVICES使用了SAP不支持的数据类型,也只能由OA端进行相应修改 4. SAP SM59 配置RFC连接 * 点击创建打开页面: * RFC 目标(RFC Destination) = 'OA' [可输入任意字符,文本] * 连接类型(Connection Type) = 'G' [到外部服务器的 HTTP 连接 - HTTP Connection] * 描述 1(Description 1) = 'test' [可输入任意字符,文本] * 目标主机(Target Host) = '192.168.3.177' [OA服务的连接地址或网址] * 服务编号(Service No.) = '80' [OA服务的端口号,再次感叹SAP的中文翻译] * 连接测试(如果连通则会显示连接数据信息,否则,请检查服务器是否可以连接此IP或输入是否有误) * 保存 5. SAP SOAMANAGER 配置代理 如果不能打开此TCODE,请检查是否有在HOSTS中增加DNS指向或寻找Basis帮助: 192.168.70.6 sapdev.mtc.com.cn * 进入SOA管理页面,点击WEB 服务配置 * 进入SOA管理页面,点击WEB 服务配置 * 搜索依据 选择 消费者代理,搜索模式 输入 YFU_CO_WORKFLOW_SERVICE_PORT_T,点击执行 * 选中搜索到的行项目,点击Apply Selection * 在下面带出的详细信息中,选择配置,点击创建 * 输入逻辑端口名称、勾选逻辑端口为缺省、输入描述、输入WSDL 访问的 URL,其他为默认或按需求输入,点击应用设置 * 点击保存 6. 如果你顺序到了这一步,那么恭喜你,连接WEB SERVERS的准备工作至此结束 后面将会贴出ABAP调用WEB SERVICES的代码供各位客官参考,敬请期待