ABAP外调WebService过程的介绍
ABAP调用外部WebService
作者:SAP 天元
在登录及安全标签上可以设置用于登录访问对应 Web 服务的用户名跟密码,这里我们不做 设置,具体信息如下所示:
点击 按钮测试连接是否成功,如果成功则返回信息如下图所示:
ABAP 调用外部 WebService
作者:SAP 天元
创建逻辑端口
输入事务代码 LPCONFIG 来创建逻辑端口,点击 示: 新建逻辑端口,相关输入信息如下图所
ABAP 调用外部 WebService
作者:SAP 天元
因为当前 WebService 提供了两个类 (Web 服务代码中带有用户可访问的 Public 方法的类) , 我们选择 TempConvertSoap:
ABAP 调用外部 WebService
连接类型选择 G(HTTPConnectiontoExternalServ),输入主机名 (域名 或 IP 都可以)及端口号 80(这里叫 Service No.,其实是第三方系统提供的 HTTP 服务的端 口号,一般默认是 80,具体看情况):
ABAP 调用外部 WebService
作者:SAP 天元
然保存
并激活
:
在系统中会自动生成一个 ZW3C_CO_TEMP_CONVERT_SOAP 的类及其对应使用的数据类 型,如下图所示:
ABAP 调用外部 WebService
作者:SAP 天元
创建 RFC 目的
用事务代码 SM59 进入 RFC 连接配置,如下图所示:
输入相关描述及在状态管理打勾:
在调用参数中选择 HTTPDestination,然后选择刚创建的 RFC 目的 W3SCHOOLS,在路 径中输入 WebService 后缀/webservices/tempconvert.asmx(RFC 目的 W3SCHOOLS 表 示 , 然 后 结 合 后 缀 组 合 成 结 果 为 http://www.
ABAP 调用web service
ABAP 调用外部webservice调用外部1.Create web service consumer – SE80右键Enterprise Services -> Service ConsumerExternal WSDL –> URL是web service的WSDL描述,选择package,制定prefix 点击finish.2.系统会自动生成所有相关的object,method,proxy class,激活之后真正创建3.创建logical portt-code SOAMANAGER通过search 的方法找对自己的proxy , Search By 要选对类型找到自己的proxy 之后,点击configurations –> Create 来创建对应的logical Port在生成的logical Port 里 Transport Settings 里可以看到对应的Computer Name of Access URL会变成对应的IP 地址地址,,这里建议改成Server Name 以避免以避免系统系统IP 发生发生变化变化变化之后之后之后还需要调整还需要调整配置配置。
4. 调用 proxy class 对应的方法这里需要这里需要注意的是注意的是proxy class 对应 method 的output 中很多都是深层次结构中很多都是深层次结构,,有些字段还是表类型的段还是表类型的,,在访问其中的字段是需要注意每一层级在访问其中的字段是需要注意每一层级。
5. 在Webservice 中如果有日期类型的数据字段,在生成在生成proxy class 的时候的时候,,ABAP 默认的类型类型是选择是选择XSDDATETIME_Z DEC 15, 在调用的时候在调用的时候可能可能可能会会报以下exception:CX_AI_SYSTEM_DEFAULT ;通过调用CX_AI_SYSTEM_DEFAULT->get_text 会发现真正的异常是CX_SY_CONVERSION_NO_DATE_TIME , 意思意思是说是说是说日期数据日期数据日期数据不能转换成对应的不能转换成对应的不能转换成对应的格式格式格式,,其原因是ABAP 里没有对应的数据类型里没有对应的数据类型匹配匹配web service 里定义定义的元素类型的元素类型Date Time ;取得的数据如下: 2010-01-19T21:21:11解决解决方法是把数据类型修改为方法是把数据类型修改为XSDDATETIME_ISO之后再调用,成功显示。
ABAP外调WebService过程介绍
ABAP外调WebService过程介绍第一章proxy(代理)的生成首先通过se80进入到我们要创建proxy(代理)的package (包)。
以我的zhr_password_change程序为例,该程序的目的是帮助用户修改密码,所以进入的是ZHR包。
进入ZHR包后,右键选择Create -> Enterprise Service / Web Service -> Proxy Object,弹出如下选择框:由于我们是外调Web Service,所以选择Service Consumer选项,并点击继续。
随后出现下面的选择界面:这个选择界面中,如果我们自己的机器就是服务器,那么可以选择Local File,然后给出WSDL文件所在地。
不过一般情况下,我们是通过URL/HTTP访问WSDL文件的。
这里,我得到的WSDL文件地址为:http://10.3.11.123/jfids/ChangePwService?wsdl我们需要先确认这个链接的有效性,可以在浏览器中打开这个链接,如果链接有效,则我们可以看到对应的xml代码:将有效的URL地址输入,点击继续,如图:接下来要选择package(包)和prefix(前缀),package即proxy(代理)所在的包,prefix即代理各种属性(比如名称)、包含数据类型(比如输入数据类型、输出数据类型)等的前缀,主要用于与系统变量进行区分。
我这里选择的包是ZHR、前缀为ZCMIS_。
输入包名、前缀后选择继续,此时会出现确认信息:完成后,会看到workbench request,设置请求号和描述:然后我们会发现package(包)里出现了Enterprise Service选项,里面包含了代理类及其用到的数据类型。
我们需要保存并激活Enterprise Service选项:External View和Internal View分别展示了从被调用方和调用方看到的类的属性,我们可以看到原函数名称以及它在ABAP代码中的名称:Used Object选项会列出新生成的proxy类型以及其需要的数据类型(也就是前面指的输入数据类型、输出数据类型):我们可以通过双击proxy类型,察看这个类包含的属性和方法。
SAP访问外部WebService操作、配置手册
SAP访问外部WebService操作、配置手册●准备一个可以正常访问的WebService地址,包括服务声明本手册示例WebService的服务声明地址:http://192.168.104.26/WebServiceTest/TestService.asmx?WSDL它里边有一个Add方法,传入两个参数,返回两个参数之和。
在本地IIS中可以测试这个方法点击调用,可以返回结果字符串,如下图出现此结果,则说明WebService没有问题。
●为WebService配置RFC终点和代理对象打开RFC终点维护界面(事务码:SM59),显示下图界面点击创建按钮,创建一个RFC终点输入名称、描述、目标系统地址和端口,点保存。
打开对象导航器(事务码:SE80),如下图,右键,依次是Create->Enterprise Service/Web Service->Proxy Object创建代理对象选择URL/HTTP Destination,点确定按钮,如下图输入WebService服务声明地址,点确定输入Package和前缀,点确定,如下图点击激活按钮,代理对象创建成功。
为代理对象配置逻辑端口事务码(LPCONFIG),输入之前创建好的代理类名称和逻辑端口,点击新建按钮,如下图输入描述,然后进入调用参数选项卡,选择HTTP目标选项,输入之前的RFC目标,路径前缀输入IP地址之后至?之前部分,点击保存按钮,并激活。
ABAP使用代理对象示例代码:REPORT ZCALL_WS_TEST.DATA: TESTSERVICE TYPE REF TO ZTESTCO_TEST_SERVICE_SOAP,ADD_IN TYPE ZTESTADD_SOAP_IN,ADD_OUT TYPE ZTESTADD_SOAP_OUT.PARAMETERS: A TYPE I,B TYPE I.START-OF-SELECTION.CREATE OBJECT TESTSERVICE.ADD_IN-X = A.ADD_IN-Y = B.CALL METHOD TESTSERVICE->ADD EXPORTINGINPUT = ADD_INIMPORTINGOUTPUT = ADD_OUT.WRITE: / A,'+',B,'=',ADD_OUT-ADD_RESULT. 运行结果:点击执行按钮:。
ABAP调用外部系统WS
ABAP调用外部系统WS 创建代理类对象事务码:SE80选择SERVICE CONSUMER,点击继续选择URL/HTTP DESTINATION,点击继续输入WEB SERVICE的地址,点击继续输入开发包,前缀(任意输入,如已用,会提示错误),请求号,点击继续点击COMPLETE完成创建CLIENT PROXIES下为刚刚建立的代理类服务,DATA TYPES下为调用WS参数对应方法所需的类型。
配置G类型连接事务码:SM59CONNECTION TYPE选择G类型分别输入描述,TARGET HOST(调用WS的IP地址),PATH PREFIX(WS地址除IP后的部分)创建完成后,点击CONNECTION TEXT测试连接是否可用,如可用,出现以下画面:创建逻辑端口事务码:LPCONFIG输入刚才创建的代理类,再输入一个逻辑端口名,点击创建按钮:选中DEFAULT PORT,将此端口作为默认端口(这样可以通过ABAP现成方法根据代理类找到默认端口,而不用记这个端口名)在CALL PARAMETERS页中,在HTTP DESTINATION中输入刚刚创建的G类型连接名:在OPERATION页中,输入SOAP Action(在WS文件中可以找到):点击保存完成创建。
编写ABAP代码REPORT zr_znt07.lc_proxy TYPE srt_lp_proxyclass VALUE 'ZNT_CO_COMPLEX_OBJECT_SERVICE'.DATA:lo_proxy TYPE REF TO znt_co_complex_object_service,lo_input TYPE znt_in,lo_output TYPE znt_out,lo_excpt TYPE REF TO cx_ai_system_fault,lv_port_name TYPE srt_lp_name.*根据代理类名找到默认端口CALL METHOD cl_srt_lp_maintenance=>get_default_port_by_proxy EXPORTINGproxyclass = lc_proxyRECEIVINGlp_name = lv_port_name.*创建代理类对象TRY.CREATE OBJECT lo_proxyEXPORTINGlogical_port_name = lv_port_name.CATCH cx_ai_system_fault .WRITE: 'SYSTEM FAULT!'.EXIT.ENDTRY.*调用代理类下需要调用的方法,参数类型按生成的类型定义TRY.CALL METHOD lo_proxy->get_user_info_listEXPORTINGinput =lo_inputIMPORTINGoutput = lo_output.CATCH cx_ai_system_fault INTO lo_excpt.WRITE:/ 'SYSTEM FAULT OCCURED:',lo_excpt->code,lo_excpt->errortext.EXIT.CATCH cx_ai_application_fault.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDTRY.。
abap+webservice_new
测试环境:window xp sp3 英文版SAP server SAP ECC 6.0SAP GUI 710本机内网IP:192.168.0.197 ,SAP Server IP:192.168.0.164第一步,在myeclipse中新建一个Web Service Project,取名为SayHello,,默认采用的就是JAX-WS,不用改,直接点finish完成。
第二步,建立一个java class,名为HelloBody。
其内容为public class HelloBody {public String SayHelloTo(String name){return "hello: "+name;}}第三步,创建web service。
选择向导中Web Service下的Web ServiceNext,在对话框中选择从Java Class创建wsdl。
Next,会让我们选择class。
我们就选择刚才的HelloBody即可。
这个对话框会让你填写java class 及将要生成的Delegate class的名字。
这里java Class是实际完成功能的类,而delegate class 是包装java class成Web Service的类,所有请求都由其接收并解析,然后由java class完成功能,然后由Delegate将结果返回。
还有要注意的是,下面让你填写WSDL的自定义信息,我们先选择Generate WSDL in Project,这样就会自动生成一个WSDL了。
然后填入服务网址http://localhost:8080/,接着是Service name,这个不用修改,自动就是HelloBodyService,我们修改一下Service port,默认是HelloBodyPort,这实在不好,其实这个服务端口就是服务地址的后面部分,比如如果是默认的,那么调用的时候就是http://localhost:8080/SayHello/HelloBodyPort,,网址上出现这样的写法是不是很别扭。
WebService服务调用方法介绍
WebService服务调用方法介绍WebService是一种基于网络的互操作技术,可通过简单对象访问协议 (SOAP) 来实现不同平台和编程语言之间的通信。
WebService服务调用方法是指通过客户端应用程序与后端WebService进行通信,实现数据传输和功能调用的过程。
下面将详细介绍WebService服务调用方法。
1. 了解WebService服务:在使用WebService服务之前,首先需要了解所需要调用的WebService服务的接口、方法以及参数。
通常,WebService会提供一个WSDL(Web Services Description Language)文件,其中定义了WebService的接口和方法信息。
通过WSDL文件,客户端可以获取到所有WebService接口的详细描述和相关信息。
2. 创建客户端应用程序:为了调用WebService服务,需要创建一个客户端应用程序。
这可以是一个使用特定编程语言编写的应用程序,如Java、C#等。
在客户端应用程序中,需要导入和使用与WebService相关的库和类,以便在应用程序中调用WebService服务。
3. 创建服务代理:客户端应用程序需要创建一个用于与WebService 服务进行通信的代理。
代理是客户端应用程序与WebService服务之间的中间层,它用于封装与WebService的通信细节,并提供一种方便的方式来调用WebService服务的方法。
根据不同编程语言和框架的要求,可以通过使用类似“wsimport”或“svcutil”等工具来生成代理类。
4. 调用WebService服务方法:通过创建的代理类,客户端应用程序可以直接调用WebService服务的方法。
在调用方法之前,需要根据WebService服务的接口定义传递正确的参数。
参数的传递通常是通过创建请求对象并为其设置相应的属性来完成的。
请求对象将包含需要传输给WebService服务的数据。
webservice执行原理和步骤
Web服务(Web Service)是一种基于Web的应用程序接口(API),它使用标准的HTTP协议进行通信,通过网络提供服务和交换数据。
Web服务的执行原理和步骤如下:1. 定义服务接口:首先,需要定义Web服务的接口,即确定服务提供的功能和方法。
这可以使用一种称为WSDL(Web Services Description Language)的XML语言来描述。
2. 发布服务:将定义好的服务接口发布到网络上,使其他应用程序可以访问。
这可以通过将WSDL文件部署到Web服务器上来实现。
3. 发现服务:其他应用程序可以通过查找和发现机制来找到已发布的Web服务。
这可以通过使用UDDI(Universal Description, Discovery, and Integration)注册表或其他服务目录来实现。
4. 绑定服务:一旦找到了所需的Web服务,应用程序需要与之建立连接。
这可以通过使用SOAP(Simple Object Access Protocol)协议来实现,SOAP是一种基于XML的协议,用于在网络上交换结构化的信息。
5. 调用服务:应用程序可以通过发送SOAP消息来调用Web 服务的方法。
SOAP消息包含了调用的方法名和参数,以及其他必要的信息。
6. 处理请求:Web服务接收到SOAP消息后,会解析消息并执行相应的方法。
方法的执行可能涉及到访问数据库、处理数据、调用其他服务等操作。
7. 返回结果:一旦方法执行完成,Web服务会将结果封装成SOAP消息并返回给调用方。
调用方可以解析SOAP消息并获取返回的结果。
8. 解绑服务:当不再需要使用Web服务时,应用程序可以断开与服务的连接。
这可以通过关闭连接或释放资源来实现。
总结起来,Web服务的执行原理和步骤包括定义服务接口、发布服务、发现服务、绑定服务、调用服务、处理请求、返回结果和解绑服务。
通过这些步骤,应用程序可以与Web服务进行通信并获取所需的功能和数据。
BAPI创建及发布&web service 的发布及abap调用
BAPI创建及发布&web service 的发布及ABAP调用一、BAPI 的创建BAPI 为特殊的Function Module,即可以远程调用的。
1.1创建一个Function Group创建一个Function Group后应该马上激活,需要养成这个良好的习惯1.2创建一个Function Module 属于该Function Group在Function Module 的attribute 里面选择第二个 remote-enable moduleBAPI 的接口皆为pass by value (值传递)BAPI 必须含有 return接口,否则BAPI 无法发布。
1.3在BAPI里面简单的写几行代码,完成将inputchar 赋值给outputchar 并返回return 信息,编写完成后保存激活。
这样一个简单的BAPI 就创建完成。
二、BAPI 的发布TCODE SWO1 创建BAPI接口对象选择属性,点击实用程序API 方法add方法这部输入BAPI 名字后,会有可能提示错误信息,或者警告信息,不用理会继续点击对勾,进行下一步就会进入到下一个界面点击前进按钮(画圈部分)一直下一步,最后方法里面就添加进来了。
当方法添加进来后,我们需要点击Program 来编写一下,使之没有语法错误编写对象类型为以实现状态释放BAPI修改BAPI接口实现状态为已实现更改版本为已释放生产对象接口到此,BAPI 的发布就已经完成了,我们可以通过TCODE BAPI 来查看我们发布的BAPI接口,名字应该是ZBAPI_DEMO三、Web service (BAPI)的发布选择创建一个web service这里我们可以看到发布web service 有4种组件,就是说这4种都可以发布成webservice,这里我们就只使用BAPI作为发布组件选择BAPI选择客户服务一直下一步创建完成这样一个Web service 创建完成,我们还需要对其进行配置TCODE WSCONFIG 可以创建发布的配置,点击创建保存即可。
ABAP调用外部WEB SERVICE
EXPORTING
request = p_client->request
uri
= '/axis/HelloWorld.jws'
.
CALL METHOD p_client->request->set_header_field
EXPORTING
name = '~server_protocol'
VALUE = 'HTTP/1.0'
REPORT ZTEST_WS6.
DATA:p_client TYPE REF TO IF_HTTP_CLIENT. DATA:p_data TYPE string. parameters:p_ch type string OBLIGATORY. CALL METHOD cl_http_client=>CREATE_BY_DESTINATION EXPORTING
此处得到的数据为xml数据可以使用系统中的transformation来处理23调用界面
ABAP 调用外部 WEB SERVICE
Author:SAP 三毛 MSN: abaptiner@ 一. ABAP 调用 WEB SERVICE 1. ECC 系统通过系统中的 PROXY OBJECT 调用 WEB SERVICE 注意:这个方案只能在 ECC 系统中实施. 1.1 准备条件 WEB SERVICE: WSDL 地址: http://10.136.240.174:8083/axis/HelloWorld.jws?wsdl 服务地址: http://10.136.240.174:8083/axis/HelloWorld.jws 1.2 配置 REMOTE DESTINATION 事务码:SM59
调用第三方webservice接口的流程
调用第三方webservice接口的流程调用第三方webservice接口是一种常见的,在不同平台和语言环境下,由不同的开发人员往来的行为。
目前,API提供方已经开发了各种语言的SDK或者封装好的API,方便使用者进行开发。
以下是调用第三方webservice接口的流程:1. 了解webservice接口的基本信息webservice接口的基本信息一般包括调用地址、接口方法、参数、数据格式等。
在使用webservice接口前,需要对这些基本信息进行了解。
2. 判断是否需要注册API密钥有些API需要注册API密钥,以获得调用授权,如果需要则应进行相关操作。
3. 选择开发语言和SDK由于不同的开发者可能有不同的开发语言和环境,需要选择相应的API开发语言和SDK。
一些API的供应商会提供针对特定语言的SDK。
4. 进行API文档阅读和熟悉操作流程API文档是使用API的前提条件,因此需要进行充分的阅读,了解API的依赖关系、返回结果、参数类型等。
掌握API文档后,需要根据文档中提供的操作流程进行开发。
5. 创建API调用对象使用SDK中提供的类库,创建API调用对象。
这意味着您可以使用一些通用的方法来建立API的请求并进行响应处理。
6. 请求API数据使用API调用对象向API接口发送请求,其中包含所有必要的参数信息。
在请求的同时,还应注意与API密钥的验证和身份认证等相关信息。
7. 处理API响应数据API调用对象接收并响应API返回的数据。
开发人员应根据API文档中提供的规范,对API返回数据进行适当的解析和处理。
8. 进行错误处理在API响应时,可能会出现各种错误,例如参数不正确、系统繁忙等。
开发者需要根据API文档中提供的错误码进行判断和处理。
9. 结束API调用最后,开发者需要调用API调用对象中的结束API方法以释放资源并结束API调用。
在以上流程中,开发者还需要不断地优化API调用的性能,提高数据获取的效率。
SAP webservice
一、调试
1.Webservice调试srt_util,添加调用service账号
2.有效负载跟踪查看service调用,传输的数据
二、调用外部service
1.企业服务→服务消费者,创建WSDL地址,URL,输入地址,前缀为Z,完成后激活
2.soamanager,在消费者代理中查找,配置穿件,端口名为LP01,缺省勾上,输入URL地址
3.创建se38程序
Data:lo_sms_info TYPE REF TO zco_sms_info_send_port_type(Proxy Name). 输入输出参数为ABAP Name Ref
DATA: ls_input TYPE zsend_info_request,
ls_output TYPE zsend_info_response.
模式,abap对象模式确定,输入调用服务名称及方法名,(在se80双击服务名称可现实其中包含的方法,选中方法点击参数也可显示其中参数类型)
三、发布webservice
1.创建函数代码块
2.实用程序→更多实用程序→创建Web服务→来自函数模块(组)
服务定义ZWS_XXX,勾选Map Name,
,选择NO为无验证。
webservice远程调用详解
webservice是跨编程语言和跨平台的远程调用技术。
常见的远程调用技术还有RMI,因为webservice跨平台和跨编程语言,因此应用更广泛,但性能略低。
远程调用:一台计算机a上的一个程序可以调用另一台计算机b上的一个对象的方法。
关于Java webService框架,主要有AXIS、XFire、CXF,还有Java自带的JAX-WS(必须JDK6以上环境)。
SOAP:是在分布式的环境中交换信息的简单协议,以XML作为数据传送的方式。
SOAP=RPC+HTTP+XMLSOAP RPC的工作原理:类似于web的请求/响应方式,不同之处在于web客户和web服务器之间传输的是HTML数据。
在SOAP RPC模式中,SOAP客户(程序)和SOAP服务之间传输的是符合SOAP规范的XML数据。
(XML中说明调用远程服务对象的哪个方法、传递的参数是什么,以及服务对象的返回结果是什么。
)WSDL:webservice客户端要调用一个webservice服务,首先要知道这个服务的地址在哪,以及这个服务有什么方法可以调用。
因此webservice服务端首先要通过一个WSDL文件来说明有什么服务可以对外调用,服务是什么,有哪些方法,方法接受的参数是什么,返回值是什么。
WSDL文件保存在服务端,可以通过url地址访问到。
客户端要调用一个webservice服务之前,要知道该服务的WSDL文件的地址。
webservice服务提供者可以通过两种方式暴露它的WSDL文件地址:a、注册到UDDI服务器,以便被人查找;b、直接告诉客户端调用者;要访问一个远程的webservice,有两种方法:a、通过SOAP协议;b、通过REST的方式;1、AXIS是apache软件组织对SOAP规范的实现。
SOAP客户程序——>AXIS API—RPC请求—>AXIS web应用(SOAP服务),此web应用可以放在Tomcat容器中。
调用webservice 方法
调用webservice 方法随着信息技术的发展,越来越多的企业开始采用服务化架构,将自身的业务逐渐转化为Web服务的形式,以便于其他应用程序进行调用。
我们常常使用的webservice,就是一种基于XML、SOAP、WSDL协议的服务化架构,它提供了一种标准化的接口方式,用于不同平台之间的交互操作。
而调用webservice方法,则是这种交互操作的实现方式之一。
在使用webservice进行方法调用时,我们需要首先获取到需要调用的webservice的WSDL文件。
通过WSDL文件,我们可以获知webservice包含哪些方法、参数类型、返回值类型等相关信息。
接着,我们可以根据WSDL文件,生成对应的客户端代码,并通过客户端代码来进行方法调用。
在调用方法时,我们通常需要指定相应的输入参数,并对返回值进行处理。
当然,在实际的调用过程中,我们还需要考虑webservice的安全性、性能优化、错误处理等方面的问题。
如何保证webservice的安全性,防止恶意访问和攻击?如何优化webservice的性能,提高响应速度和稳定性?如何处理webservice调用异常,确保调用方能够及时处理错误信息?这些问题都需要我们在实践中实现和解决。
总的来说,调用webservice方法已经成为了企业应用开发中不可或缺的一部分。
通过webservice的服务化架构,我们可以方便地进行应用程序之间的交互操作,并实现各种数据的传输和共享。
因此,如果你是一名内容创作者,理解webservice调用的原理和方式,将对你的工作有着重要的意义。
WEB Service的调用过程
WEB Service的调用过程(相关知识点)客户端:取得服务端的服务描述文件WSDL,解析该文件的内容,了解服务端的服务信息,以及调用方式。
根据需要,生成恰当的SOAP请求消息(指定调用的方法,已经调用的参数),发往服务端。
等待服务端返回的SOAP回应消息,解析得到返回值。
服务端:生成服务描述文件,以供客户端获取。
接收客户端发来的SOAP请求消息,解析其中的方法调用和参数格式。
根据WSDL和WSML的描述,调用相应的COM对象来完成指定功能,并把返回值放入SOAP回应消息返回给用户。
高层接口使用高层接口,不需要知道SOAP和XML的任何信息,就可以生成和使用一个WebService。
Soap Toolkit 2.0通过提供两个COM对象――SoapClient和SoapServer,来完成这些功能。
在客户端,只需要生成一个SoapClient实例,并用WSDL作为参数来调用其中的mssoapinit 方法。
SoapClient对象会自动解析WSDL文件,并在内部生成所有Web Service的方法和参数信息。
之后,你就可以像调用IDispatch接口里的方法一样,调用里面所有的方法。
在VB或是脚本语言里,你甚至可以直接在SoapClient对象名后面直接加上.方法(参数…)进行调用。
低层接口要使用低层接口,你必须对SOAP和XML有所了解。
你可以对SOAP的处理过程进行控制,特别是要做特殊处理的时候。
在客户端,首先要创建一个HttpConnector对象,负责HTTP 连接。
设定Connector的一些头部信息,比如EndPoinURL和SoapAction等。
如果网络连接需要使用代理服务器,那也要在这里设定相关的信息。
接着创建SoapSerializer对象,用于生成Soap消息。
按照WSDL里定义,把所有参数按顺序序列化,得到一个完整的SOAP请求消息。
该Soap消息,作为Payload通过HttpConnector被发送到服务端。
webservice调用具体方法
webservice调用具体方法摘要:1.什么是WebService2.如何调用WebService的具体方法3.调用过程中可能遇到的问题及解决方法4.实战案例分享正文:WebService,即网络服务,是一种跨平台的、基于XML(可扩展标记语言)的分布式计算技术。
它使得应用程序之间可以通过互联网进行通信,实现数据的交换和共享。
在实际开发中,调用WebService的具体方法如下:1.首先,确定你需要调用的WebService的地址和协议。
通常,WebService的地址是以WSDL(Web服务描述语言)文件形式提供的。
你可以通过WSDL文件查看WebService提供的接口和方法。
2.根据WSDL文件,生成客户端代码。
这可以通过使用诸如Apache CXF、JAX-WS等开源库来实现。
这些库会根据WSDL文件自动生成客户端代码,包括调用WebService的方法和处理响应的代码。
3.在生成的客户端代码中,找到调用WebService的具体方法。
这个方法通常是一个带有HTTP请求头的Web方法,如POST、GET等。
在方法中,传入所需的参数,这些参数通常包括在WSDL文件中定义的输入参数。
4.发送HTTP请求,并将响应结果解析为JSON、XML等格式。
这一步可以通过使用如Jackson、Gson等库来实现。
5.处理响应结果,并根据需要进行相应的业务逻辑处理。
在调用WebService的过程中,可能会遇到以下问题:1.网络问题:由于WebService通常跨网络调用,因此可能会遇到网络不稳定、延迟等问题。
为了解决这个问题,可以考虑使用重试策略、增加超时设置等方法。
2.服务异常:WebService可能会因为各种原因抛出异常,如参数不合法、服务器故障等。
为了解决这个问题,可以实现异常处理机制,如使用try-catch语句捕获异常,并根据需要进行日志记录、通知等操作。
3.身份验证和授权问题:为了避免unauthorized access,WebService 通常需要进行身份验证和授权。
sap调用外围系统webService
需要搭建 IIS 服务器 本实例以 Windows Server 2008 为例子
15 / 32
安装 IIS 管理工具->服务器管理器
配置:角色->添加角色 配置 internet 信息服务(IIs)管理器
新建“WebSite” 在应用程序池中选择对应 WebService 的 NetFramework 的版本
进入如下设置
27 / 32
这个逻辑端口:ZXPROXY_SOA
也是后面程序:
* create an instance of proxy class
create object lo_proxy
exporting
logical_port_name = 'ZXPROXY_SOA'."SOAMANAGER
如果没有问题将进入如下界面
输入参数调试
14 / 32
单击调用可以测试这个 WebService 【说明】 WebService 的方法 SAPkunnr 就是 WebService 的方法 WebService 地址 http://localhost:2848/MyWebService.asmx WebService 解析描述 http://localhost:2848/MyWebService.asmx?wsdl (此解析也是后面 SAP 调用的描述语言地址) 如下图
7 / 32
2.点击 SqlExpress 的协议,我们要启动所有状态。
3.选择 TCP/IP,点击右键,选择属性,我们修改连接数据库的端口地址,非常 重要
8 / 32
4.修改三处,第一你查看下跳出来的对话框,里面有好多 TCP/IP 的端口。我们 要找的是三处。
ABAP调用WEB SERVICE
ABAP调用WEB SERVICE浙江益和电力科技信息有限公司张建波abaptiner@ABAP调用WEB SERVICE WEB SERVICE概述WEB SERVICE概述WEB SERVICE相关术语如何在ECC系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICEABAP调用WEB SERVICE WEB SERVICE概述WEB SERVICE概述WEB SERVICE相关术语如何在ECC系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICEWEB SERVICE概述建立可互操作的分布式应用程序的新平台。
一个WEB SERVICE就是一个APPLICATION,它向外界暴露一个能够通过WEB进行调用的API.它建立在HTTP协议之上,将数据组织成XML格式的SOAP消息在应用程序间传递。
WEB SERVICE基于国际工业标准的XML构建,具有开放性和平台无关性。
任何硬件平台,任何语言编写的程序都可以访问。
WEB SERVICE相关术语¾XML:eXtensible Markup Language¾SOAP:Simple Object Access Protocol¾WSDL:Web Services Description LanguageABAP调用WEB SERVICE WEB SERVICE概述WEB SERVICE概述准备条件如何在ECC系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICE准备条件供调用的S C,WEB SERVICE,例如:http://10.147.250.59:8080/WebApplication1/Test1WSDL文件或地址,例如:http://10.147.250.59:8080/WebApplication1/Test1?wsdl SOAP及XML相关资料ABAP调用WEB SERVICE WEB SERVICE概述WEB SERVICE概述WEB SERVICE相关术语如何在ECC系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICE如何在R3系统中调用WEB SERVICE如何在ECC系统中调用WEB SERVICE在ECC系统中,我们通过PROXY OBJECT来代理某个WEB SERVICE,然后调用这个代理对象来实现对WEB SERVICE的调用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章proxy(代理)的生成首先通过se80进入到我们要创建proxy(代理)的package(包)。
以我的zhr_password_change程序为例,该程序的目的是帮助用户修改密码,所以进入的是ZHR包。
进入ZHR包后,右键选择Create -> Enterprise Service / Web Service -> Proxy Object,弹出如下选择框:由于我们是外调Web Service,所以选择Service Consumer选项,并点击继续。
随后出现下面的选择界面:这个选择界面中,如果我们自己的机器就是服务器,那么可以选择Local File,然后给出WSDL文件所在地。
不过一般情况下,我们是通过URL/HTTP访问WSDL文件的。
这里,我得到的WSDL文件地址为:http://10.3.11.123/jfids/ChangePwService?wsdl我们需要先确认这个链接的有效性,可以在浏览器中打开这个链接,如果链接有效,则我们可以看到对应的xml 代码:将有效的URL地址输入,点击继续,如图:接下来要选择package(包)和prefix(前缀),package即proxy(代理)所在的包,prefix即代理各种属性(比如名称)、包含数据类型(比如输入数据类型、输出数据类型)等的前缀,主要用于与系统变量进行区分。
我这里选择的包是ZHR、前缀为ZCMIS_。
输入包名、前缀后选择继续,此时会出现确认信息:完成后,会看到workbench request,设置请求号和描述:然后我们会发现package(包)里出现了Enterprise Service选项,里面包含了代理类及其用到的数据类型。
我们需要保存并激活Enterprise Service选项:External View和Internal View分别展示了从被调用方和调用方看到的类的属性,我们可以看到原函数名称以及它在ABAP代码中的名称:Used Object选项会列出新生成的proxy类型以及其需要的数据类型(也就是前面指的输入数据类型、输出数据类型):我们可以通过双击proxy类型,察看这个类包含的属性和方法。
这里,我们可以看到ZCMIS_CO_CHANGE_PW_SERVICE包含了一个构造函数和一个SET_PW_DATA方法:双击任意方法,就可以看到它的代码。
这里,我双击了构造函数(CONSTRUCTOR),可看到该构造函数需要文件名和逻辑端口号,以后的内容我们将介绍逻辑端口号的配置和使用:同样,我们在Used Objects中除了察看ZCMIS_CO_CHANGE_PW_SERVICE的属性和方法之外,还可以察看其输入、输出数据的细节,以输入数据为例,双击ZCMIS_SET_PW_DATA:可以看到,ZCMIS_SET_PW_DATA是一个结构,包含了CONTROLLER、ARG0、ARG1、ARG2四个元素。
其中CONTROLLER用于控制其它元素的格式,另外三个元素则来源于外部的Web Service。
此处它们对应的是userID、oldPassword、newPassword三个数值。
CONTROLLER是PRXCTRLTAB类型,即一个由PRXCTRL类型的数据组成的表格。
PRXCTRL类型叫做输入格式控制,包含两个字段:FIELD和VALUE。
其中,FIELD对应着被控制的字段名称,VALUE通过不同值控制对应字段的输入格式(通常为1),罗列如下:1 Initial Value 初始化,比如数字为0,日期为0000-00-00等2 xsi:nil="true" xml节点元素可为空3 Hide 隐藏第二章设置逻辑端口上一章我们在察看ZCMIS_CO_CHANGE_PW_SERVICE类的CONSTRUCTOR(构造函数)的时候,看到有个参数叫做逻辑端口,逻辑端口可以用于软件之间的数据交互,也可用于连接物理端口(比如打印机)。
下面我们将配置ZCMIS_CO_CHANGE_PW_SERVICE需要的逻辑端口。
使用事务代码lpconfig可以进入管理逻辑端口的界面:输入代理类名称,逻辑端口名称(这个可以自己命名,比如我们的逻辑端口用HTTP协议、80端口连接CMIS系统,所以逻辑端口名称就为CMIS_HTTP80)。
如果该类没有缺省端口,需要选中缺省端口,这样才能在构造函数没有指明端口的情况下会将缺省端口作为逻辑端口。
选择中间的创建,进入编辑界面。
在描述一栏,我们可以给出中文的信息,比如“员工自助修改密码”。
运行时间一栏,我们需要选择Web服务基础结构。
然后在调用参数一栏,我们需要给出URL地址,即前面提到的http://10.3.11.123/jfids/ChangePwService?wsdl:保存设置,会出现customizing request,设置请求号与描述:激活设置,即完成了逻辑端口配置。
第三章调用Web Service的代码介绍这里依然将以员工自助密码修改的功能为例,我为这个功能编写的ABAP代码名为:ZHR_PASSWORD_CHANGE。
代码内容如下(需要重点关注的部分,我将以加粗字体进行介绍):*&---------------------------------------------------------------------**& Report ZHR_PASSWORD_CHANGE*&*&---------------------------------------------------------------------**& 本程序用于员工PORTAL密码修改*& 该界面获取用户输入的旧密码、新密码信息后,通过调用WebService对这些数据进行*& 处理,完成更新密码的工作*& WebService对应类型为ZLP01CO_CHANGE_PW_SERVICE:*& 输入为结构ZLP01GET_STRING,含三个字段:*& arg0:用户ID*& arg1:旧密码*& arg2:新密码*& 输出为结构ZLP01GET_STRING_RESPONSE,含一个字段:*& return:计算结果,'success'为成功,'fail'为失败*& 更多详情请参看其他注释*&---------------------------------------------------------------------**&---------------------------------------------------------------------**& 变量定义部分*&---------------------------------------------------------------------*REPORT ZHR_PASSWORD_CHANGE.DATA: ok_code TYPE sy-ucomm, "用户操作userid TYPE sy-uname. "用户IDDATA: pre_password_str(24) TYPE c, "对应0100屏幕第一行文本框new_password_str1(24) TYPE c, "对应0100屏幕第二行文本框new_password_str2(24) TYPE c. "对应0100屏幕第三行文本框DATA: webservice_proxy "WebService代理对象TYPE REF TO ZCMIS_CO_CHANGE_PW_SERVICE,"WebService代理类型webservice_input TYPE ZCMIS_SET_PW_DATA, "输入参数包,包含了三个参数 webservice_output TYPE ZCMIS_SET_PW_DATA_RESPONSE, "返回值包,包含了返回值 wa_input LIKE prxctrl. "输入格式控制DATA: webservice_sys_error TYPE REF TO cx_ai_system_fault, "系统错误webservice_app_error TYPE REF TO cx_ai_application_fault."应用错误DATA: new_password_length TYPE i, "新密码长度digit_count TYPE i. "新密码包含数字的位数我们在se80中利用外部链接http://10.3.11.123/jfids/ChangePwService?wsdl 定义好了ZCMIS_CO_CHANGE_PW_SERVICE类,这里的webservice_proxy即该类的对象。
在第一章中,我们知道这个类的SET_PW_DATA方法的输入数据类型为ZCMIS_SET_PW_DATA(含有CONTROLLER、ARG0、ARG1、ARG2四个字段)、返回数据类型为ZCMIS_SET_PW_DATA_RESPONSE(含有CONTROLLER、RETURN两个字段),所以这里需要专门定义webservice_input、webservice_output作为输入、输出的对象。
wa_input类型为prxctrl(参见第一章的内容),CONTROLLER字段就是通过一组prxctrl数据来对各个字段进行输入控制的。
*&---------------------------------------------------------------------**& 模块定义部分*& status_0100:屏幕运行前,设置工具栏、标题*& user_command_0100:屏幕运行后,根据用户命令进行操作*&---------------------------------------------------------------------*MODULE status_0100 OUTPUT.SET PF-STATUS 'STATUS_0100'. "设置工具栏SET TITLEBAR 'TITLE_0100'. "设置标题ENDMODULE.MODULE user_command_0100 INPUT.CASE sy-ucomm.WHEN 'PERFORM'. "执行PERFORM read_text.PERFORM compare_newpassword.WHEN 'EXIT'. "退出LEAVE PROGRAM.ENDCASE.ENDMODULE.*&---------------------------------------------------------------------* *& 宏定义部分*&---------------------------------------------------------------------* DEFINE popup.CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'EXPORTINGTITEL = &1 "对话框主标题DIAGNOSETEXT1 = &2 "抬头TEXTLINE1 = &3. "正文END-OF-DEFINITION.*&---------------------------------------------------------------------* *& 函数定义部分*& read_text:读取需要的数据*& compare_newpassword:比较两次输入的新密码,不同则重新输入,相同则继续执行*& check_digit:检查新输入的密码有多少数字,用于检查密码复杂度*& execute:执行外部WebService的get_string函数*& reset:出现错误则清空输入栏以便重新输入*&---------------------------------------------------------------------*FORM read_text.userid = sy-uname. "读取登陆用户pre_password_str = pre_password_str. "读取用户输入的旧密码new_password_str1 = new_password_str1."读取用户输入的新密码new_password_str2 = new_password_str2."读取再次输入的新密码new_password_length = strlen( new_password_str1 ).digit_count = 0.ENDFORM.FORM compare_newpassword.IF new_password_str1 = new_password_str2.IF new_password_length > 5.PERFORM check_digit.IF digit_count = new_password_length ORdigit_count = 0.popup '提示' '无效操作' '新密码必须包含字母和数字,请重新输入'.ELSE."将三个参数转换为函数设定的structurewa_input-field = 'ARG0'.wa_input-value = '1'.APPEND wa_input TO webservice_input-controller.wa_input-field = 'ARG1'.wa_input-value = '1'.APPEND wa_input TO webservice_input-controller.wa_input-field = 'ARG2'.wa_input-value = '1'.APPEND wa_input TO webservice_input-controller.CLEAR wa_input.webservice_input-arg0 = userid.webservice_input-arg1 = pre_password_str.webservice_input-arg2 = new_password_str1."执行get_StringPERFORM execute.ENDIF.ELSE.popup '提示' '无效操作' '密码长度不能小于6位,请重新输入'.PERFORM reset.ENDIF.ELSE.popup '提示' '无效操作' '两次输入新密码必须相同,请重新输入'.PERFORM reset.ENDIF.ENDFORM.在第一章中我们知道输入数据除CONTROLLER外,真正输送到Web Service一端的是ARG0、ARG1、ARG2三个字段,这里,我们通过wa_input对三个字段分别进行输入控制的设置,并将设置存放进CONTROLLER字段。