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.









