金蝶EASV81WebService开发指南.docx
- 文档编号:29534043
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:34
- 大小:437.04KB
金蝶EASV81WebService开发指南.docx
《金蝶EASV81WebService开发指南.docx》由会员分享,可在线阅读,更多相关《金蝶EASV81WebService开发指南.docx(34页珍藏版)》请在冰豆网上搜索。
金蝶EASV81WebService开发指南
Webservice开发指南
版权声明
本书著作权属于金蝶软件(中国)有限公司所有,在未经本公司许可的情况下,任何单位或个人不得以任何方式对本书的部分或全部内容擅自进行增删,改编,节录,翻译,翻印,改写。
金蝶软件(中国)有限公司
2015年8月
BOSWebService
1.1.BOSWebService原理
Webservice主要由SOAP,WSDL,以及UDDI等几块技术组成,以XML格式进行数据的传输。
是建立可互操作的分布式应用程序的新平台
Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力。
使各个异构系统之间实现无缝交互。
在本质上是要为应用程序之间提供数据通讯的标准,为企业应用之间动态地提供大颗粒度的服务,并不适合于非常精细的基于会话的方法调
用以及复杂的事务(transaction)处理之中。
1.2.发布WebService的约束
在BOSStudio中发布webService时,只能发布Entity和Façade两种元数据类型成WebService服务端的代码。
由于Entity或Façade函数参数和返回值可能包含很多复杂的业务类型,在发布时会生成许多辅助类,一些复杂类型在其他异构系统中生成webService客户端时不能很好的
支持,因此建议在建立webService功能时,最好使用Façade,并且提供简单类型的输入和返回参数。
1.3.BOSWebService发布
1.3.1.发布流程
先建立需要发布的Façade,建立粗粒度的业务方法,业务方法尽可能提供简单数据类型的数据参数和返回参数。
1.3.2.发布WebService
运行BOSStudio,打开“包分类”视图,在其中选中要发布WebService的实体或Façade对象(可同时选中多个),点击鼠标右键,在弹出菜单中选择“发布WebService”,将弹出“发布WebService”向导:
选择实体或Façade对象下要发布的方法,手工输入或者点击“浏览”按钮来指定发布生成代码存放的目录,可以同时勾中“追加到配置文件”。
这样BOSStudio将会根据选中的对象和要发布的方法生成WebService代码和wsdl描述
1.3.3.编辑WebService配置文件
在“包分类”视图中,选择要编辑其配置文件的解决方案,点击工具栏上的“编辑WebService配置文件”按钮
,将会弹出配置文件编辑向导
在其间,可以增加或删除要发布的对象(方法),选择好要发布的对象(方法)后,点击“完成”按钮,即可完成对配置文件的编辑。
配置文件位于解决方案的根目录下。
1.4.BOSWebService部署
1.4.1.部署发布文件
发布成功以后,在临时目录里会生成一个wsdd文件和一个目录,例如:
D:
\webtest\AcctCussentCheckFacade.wsdd
D:
\webtest\com\kingdee\eas\fi\gl\app\webservice\WSAcctCussentCheckFacadeSrvProxy.java
WSAcctCussentCheckFacadeSrvProxy.java文件拷贝到解决方案src目录中,注意包名和路径一致;
AcctCussentCheckFacade.wsdd处理方法如下:
找到解决方案的runtime\server\deploy\eas.ear目录,用解压缩软件打开web.war,进入WEB-INF目录
把AcctCussentCheckFacade.wsdd添加进去;
把AcctCussentCheckFacade.wsdd文件里的service节点内容添加到server-config.wsdd文件。
操作方法建议:
提取server-config.wsdd文件到临时目录,用编辑工具打开,再打开AcctCussentCheckFacade.wsdd,拷贝service节点内容粘贴到server-config.wsdd文件,注意XML格式一致;保存server-config.wsdd文件并拷回到web.war压缩包里。
1.4.2.测试是否正确
上面的步骤操作完成后,快测已经可以看到新建的WebService。
通过浏览器输入服务的地址,访问服务是否正确
如输入:
http:
//server-ip:
port/ormrpc/services
BOS快测启动的默认端口为56898
1.4.3.部署到正式服务器
1、在BIM中部署代码和元数据;
2、把解决方案下改好的runtime\server\deploy\eas.ear\web.war文件拷贝到EAS服务器的server\deploy\eas.ear目录中,
3.将生成的WebService的java代码编译为class,放在EAS服务器的eas\server\deploy\eas.ear\web.war\WEB-INF\class下,把发布的wsdd文件中服务部分拷贝到server-config.wsdd中。
4.重启EAS服务器
1.4.4.Web工程目录及文件截图
1.5.客户端代码
1.5.1.获取wsdl服务描述文件
WebService已经成功部署到应用服务器上(本文以Apusic为例进行说明),客户端可以通过浏览器访问到已部署的WebService。
要构建相关的客户端,就要获取已经部署的WebService的相应的WSDL文件,用鼠标右键点击蓝色的部分“(wsdl)”,选取“目标另存为”菜单,这时将出现选择保存文件位置的对话框,在文件名处将文件的后缀名由xml改为wsdl,将wsdl文件保存至本地。
1.5.2.下载工具
通过www.eclipse.org下载eclipse(下载j2ee版本)或通过命令行来生成
java-Djava.ext.dirs=liborg.apache.axis.wsdl.WSDL2Java
其中lib是axis包目录生成客户端代码。
1.5.3.建立一个新工程
例如建立一个工程名为GenerateWSClient的Java工程:
将获取到的WSDL文件拷贝到工程的根目录下
用鼠标右键点击要生成客户端的WSDL文件,选取菜单“WebServices”-“GenerateClient”
将会弹出生成客户端向导
如图,使用默认值,点击“Next>”,进入下一步:
依然使用默认值,点击“Next>”,进入下一步:
依然使用默认值,点击“Finish”,即可生成相应的客户端工程(是一个Web工程)
1.5.4.使用java客户端
新生成的工程中有一个JavaSource目录,我们要使用的java代码就位于这个目录,例如上图中的WSLoginProxy.java。
以下是一个使用Java客户端的例子:
importjava.rmi.RemoteException;
importcom.kingdee.WSLoginProxy;//此为发布的代码
importcom.client.WSContext;
publicclassLoginTest{
publicstaticvoidmain(String[]args){
try{
WSLoginProxyproxy=newWSLoginProxy();
/**
*webservice客户端登陆
*userName用户名
*password密码
*slnNameeas
*dcName数据中心,对应的是dataCenter中数据中心id
*language语言L2简体
*dbType数据库类型0:
sqlServer1:
db22:
oracle
*authPattern验证方式默认"BaseDB";其他认证方式KEY可从easAuthPatterns.xml中获取
*/
WSContextctx=proxy.login("用户","","eas","数据中心id","L2",0);
//成功登录后打印sessionId
System.out.println(ctx.getSessionId());
//调用凭证业务webservice方法importVoucher(凭证引入),请看1.55节
}
catch(RemoteExceptione){
e.printStackTrace();
}
}
}
1.5.5.importVoucher(凭证引入
1、凭证引入接口,两个接口方法都可用,且用法一致
2、凭证webService接口生成客户端,可参考EASLogin方法
3、凭证引入参数:
importVoucher(wsvoucher[],intisVerify,intisCashflow)
●传参数第1个:
WSWSVoucher[]普通对象数组,见构造EAS凭证字段以及含义说明
●传参数第2个:
isverify
0不核销,暂存
1核销,暂存
2不核销,提交
3核销,提交
●传参数第3个:
isImpCashflow
是否引入现金流量0不引入1引入
4、凭证引入代码调用说明
5、返回值String[][]
是一个长度为凭证数,宽度是5的字符串数据
宽度的定义:
外部系统凭证号,凭证字,会计年度,会计期间,处理信息,异常信息,金蝶凭证号
1.6.BOSwebservice安全性
1.6.1.BOSwebservice安全性概述
BOSwebservice安全有两种模式,启用安全性和不启用安全性,默认配置是不启用安全性。
1.6.2.不启用安全性
在不启用安全性,则访问业务webservice前,先成功调用EASLogin登陆的webservice服务,则系统将记住相关登陆信息,下次调用业务方法是,直接从服务器中获取相关登陆信息。
如果多次调用EASLoginwebservice服务,则以最后一次为准。
1.6.3.启用安全性
在启用安全性后,每次WEBSERVICE访问,必须带上相关的SessionID信息,如下红字部分。
系统将根据SOAP头中的SessionID信息,获取相关的上下文信息。
Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"xmlns: SOAP-ENC="http: //schemas.xmlsoap.org/soap/encoding/"xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance"xmlns: xsd="http: //www.w3.org/2001/XMLSchema"xmlns: m0="http: //com.kingdee.eas.base.btp.app.BTPManager/isPropOwner/parameter/promote"> Header> SessionIdxmlns: ns1="">ada894c0-8223-41dc-b816-61eb67dc38bd SessionId> Header> Body> isPropOwnerxmlns: m="http: //com.kingdee.eas.base.btp.app.BTPManager/Service"> bosTypeString>BF76D8D1 bosTypeString> propName>id propName> isPropOwner> Body>
Envelope>
1.6.4.如何安全性启用
一、修改eas\Server\eas\server\profiles\server1\config\webservice.propetties文件
isRomoteLocate=false
isRomoteUserCheck=true
二、修改eas\Server\eas\server\deploy\eas.ear\web.war压缩文件中
WEB-INF目录下server-config.wsdd文件
...
"java: org.apache.axis.handlers.SimpleAuthenticationHandler"/> com.kingdee.bos.webservice.LoginHandler"/> ... ... 1.7.EASLogin登陆webservice说明 1.7.1.EASLogin接口说明 EASLogin中有两个方法 方法一、 publicWSContextlogin( StringuserName, Stringpassword, StringslnName, StringdcName, Stringlanguage, intdbType)throwsAxisFault 方法二、publicWSContextlogin( StringuserName, Stringpassword, StringslnName, StringdcName, Stringlanguage, intdbType, StringauthPattern)throwsAxisFault 参数说明: userName: 登陆用户名 password: 登陆密码 slnName: 解决方案名称(通常为eas) dcName: 数据中心number language: L1(英文)、L2(中文简体)、L3(中文繁体) dbType: 数据中心数据库类型 0(MSSQLServer)、1(DB2UDB)、2(Oracle) (历史遗留参数) authPattern: EAS的验证方式,在方法一种默然为BaseDB 1.7.2.EASLogin异常说明 在BOS6.2版本中,EASLogin登陆出错将会返回 失败返回报文 SOAP协议中soapenv: Fault标签的相关说明 供识别故障的代码 可供人阅读的有关故障的说明 有关是谁引发故障的信息 存留涉及Body元素的应用程序专用错误信息 1.7.3.EASLogin和前面版本的差别 EASLogin在BOS6.2之前,登陆失败后,返回WSContext对象,当WSContext.sessionId是为null或空时,表明登陆失败,失败的具体日志信息在服务器日志中可以查看。 BOS6.2修改为当登陆失败,将返回Fault报文(通常客户端引擎代码会用异常方式表示),Fault中将包含具体的错误信息。 同时服务器日志中也会打印出错误日志。 1.8.webservice异常查看 webservice调用错误,将可以在EAS相应的系统日志中查看到相应的信息。 如$EASHOME//server/profiles/server1/logs/apusic.log.0 有的异常信息也会通过SOAP返回到客户端。 可参考返回SOAP的faultstring元素中的错误详细信息。 2.WebService客户端开发指南 2.1.前提条件 WebService已经成功部署到应用服务器上(本文以Apusic为例进行说明),客户端可以通过浏览器访问到已部署的WebService,例如通过以下地址访问到已部署的WebService: http: //localhost: 6888/easws/services 2.2.获取WSDL文件 如上图所示,应用服务器已经部署了相关的WebService。 要构建相关的客户端,就要获取已经部署的WebService的相应的WSDL文件,用鼠标右键点击蓝色的部分“(wsdl)”,选取“目标另存为”菜单,这时将出现选择保存文件位置的对话框,在文件名处将文件的后缀名由xml改为wsdl,将wsdl文件保存至本地。 2.3.生成客户端 2.3.1.生成Java客户端 下面将以使用Eclipse3.1来生成java客户端为例进行说明。 Eclipse3.1可以到www.eclipse.org免费下载。 运行后,要为Eclipse配置至少一个相应的应用服务器,例如Tomcat5.5。 2.3.2.建立一个新工程 例如建立一个工程名为GenerateWSClient的Java工程: 2.3.3.将获取到的WSDL文件拷贝到工程的根目录下: 2.3.4.生成客户端 用鼠标右键点击要生成客户端的WSDL文件,选取菜单“WebServices”-“GenerateClient” 将会弹出生成客户端向导: 如图,使用默认值,点击“Next>”,进入下一步: 依然使用默认值,点击“Next>”,进入下一步: 依然使用默认值,点击“Finish”,即可生成相应的客户端工程(是一个Web工程)。 2.4.使用java客户端 新生成的工程中有一个JavaSource目录,我们要使用的java代码就位于这个目录,例如上图中的WSLoginProxy.java。 以下是一个使用Java客户端的例子: importjava.rmi.RemoteException; import_111._19._168._192.easwebservice.services.easlogin.WSLoginProxy; importclient.WSContext; publicclassLoginTest{ /** *@paramargs */ publicstaticvoidmain(String[]args){ try{ WSLoginProxyproxy=newWSLoginProxy(); WSContextctx=proxy.login("fanfan","","eas","eas50","l2",0); System.out.println(ctx.getSessionId()); } catch(RemoteExceptione){ e.printStackTrace(); } } } 所调用的方法中的参数可以从WebService提供者处获得。 2.5.生成C#客户端 在此,以MicrosoftVisualStudio.Net2003为例说明如何生成C#客户端。 用户在正确安装完MicrosoftVisualStudio.Net2003后,需要设置一个环境变量Path=C: \ProgramFiles\MicrosoftVisualStudio.NET2003\SDK\v1.1\Bin,其中C: \ProgramFiles\MicrosoftVisualStudio.NET2003是MicrosoftVisualStudio.NET2003的安装路径。 2.5.1.使用命令行 运行“cmd”,打开命令行窗口,并进入WSDL文件所在目录(在此为C: \wsdl目录): 2.5.2.运行命令生成客户端 运行命令wsdlXXX.wsdl(XXX为wsdl文件的文件名),即可生成C#的WebService客户端代码: 输入途中命令,按回车键,即可自动生成C#客户端代码: 如上图所示,生成了一个文件WSLoginService.cs,这就是我们所需要的客户断代码 2.5.3.使用客户端代码 运行MicrosoftVisualStudio.NET2003,建立一个工程,将刚刚生成的WSLoginService.cs文件拷贝到工程的根目录,手工为该代码配置合适的命名空间: 这时就可以调用该客户端代码了。 例如以下代码: usingSystem; namespaceConsoleApplication1 { /// ///SummarydescriptionforClass1. /// classClass1 { /// ///Themainentrypointfortheapplication. /// [STAThread] staticvoidMain(string[]args) { WSLoginServiceproxy=newWSLoginService(); WSContextctx=proxy.login("fanfan","","eas","eas50","l2",0); Console.WriteLine(ctx.sessionId); Console.ReadLine(); } } } 所调用的方法中的参数可以从WebService提供者处获得。 3.webserviceFAQ 3.1.在EAS上如何发布一个webservice? 请看《BOS开发指南_WebService》文档 3.2.如何调用一个webservice? 请看《BOS开发指南_WebService客户端开发》文档 3.3.有哪些工具能够简单的测试webservice? 可采用xmlspy软件。 在SOAPCreatenewSOAPrequest选择wsdl文件,点击OK选择测试的方法在返回的SOAP报文中,输入相应的参数信息 在SOAPSendrequesttoserver xmlspy将访问服务,并列出返回的SOAP报文。 3.4.EASLogin服务登陆如何判断失败 在BOS6.2之前,EASLogin服务返回WSContext,当WSContext.sessio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 金蝶 EASV81WebService 开发 指南