您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > pb11+webservice开发分布式三层应用3
pb11+webservice开发分布式三层应用一、WEBSERVICE服务端的开发1、新建立一个workspace工作区先择FILE菜单下的NEW,新建一个工作区。点击后出现下图在文件名处输入工作区的名称,假设我们的工作区名为webserver,单击保存按钮。这样工作区就建立成功了。2、建立一个.netwebservice应用点击FILE菜单下的NEW选中.netwebservice点击ok按钮点击next按钮点击next按钮这里我们不修改pbl库名,当然你可以按你的意思修改库名,点击next按钮。一直点next按钮直到出现这里需要注意一点,如果你当前的IIS端口,不是默认的80,那么在localhost后面要加上“:81”,假设你的端口号是81的话。再点击一次next直到finish按钮。3、连接数据库我们先来建立一个数据库的连接以为后期的webservice服务提供一个连接。打开系统生成的n_webservice对像在里面写上//ProfileEASDemoDBV110SQLCA.DBMS=ODBCSQLCA.AutoCommit=FalseSQLCA.DBParm=ConnectString='DSN=EASDemoDBV110;UID=dba;PWD=sql'我是拷贝了,安装PB11默认的安装的ASA数据库,这里你可以修改成你的数据库连接参数。数据库建立完成后,我们再建立一个ue_retrieve的方法用来提取数据库数据1、在N_webservice对像里创建立一个名为DS1的数据存储datastore2、在DS1的dberror里面写上ls_err_a=sqlerrtext////////注意:将ls_err_a定义为一个实例变量,如果你看不清楚出入参定义可以将本图片另存放大就可以看到了。//////////////////////////////////////////////////////////////////////////////用于取单一的数据窗口blob值////////将数据窗口检索到blob,并将blob返到客户端////////guoac////////入参ls_syntax--传入一个字符串的数据窗口对像语法用于重构数窗////入参ls_sql传入一个条件字符串,用于附加where条件//////出参dwo_blob传出一个存储数据窗口对像的blob////////dwo_blob回传参数//////////////////////////////////////////////////////////////////////////////longll_row,ll_returnrowstringls_returnmodiystringls_oldsql,ls_newsql,ls_errorstringcsainti,LI_WHEREconnect;ifSQLCA.SQLCode0thenas_returnerr=连接数据库出错,请检查数据库连接参数。+string(sqlca.sqlerrtext)return-1////创建数据窗口出错endififds1.create(as_syntax,ls_error)1thendisconnectusingsqlca;as_returnerr=服务端重建数据窗口出错!+ls_errorreturn-1////创建数据窗口出错endifintli_ali_a=ds1.settransobject(sqlca)ifli_a1thendisconnectusingsqlca;as_returnerr=服务端设置数据存储事务出错!return-1///设置对像事物出错endifls_oldsql=ds1.getsqlselect()iftrim(ls_oldsql)=''orisnull(trim(ls_oldsql))thendisconnectusingsqlca;as_returnerr=传入的数据窗口对像sql语法为空!return-1//取新窗口语法出错endifLI_WHERE=pos(UPPER(ls_oldsql),'WHERE',1)IFLI_WHERE=0THENls_oldsql=ls_oldsql+WHERE1=1ENDIFls_newsql=ls_oldsql+''+as_sqliftrim(ls_newsql)=''orisnull(trim(ls_newsql))thendisconnectusingsqlca;as_returnerr=连结后的sql语法为空!请检查传入的数据窗口对像sql语法。return-1//取新窗口语法出错endififMatch(ls_newsql,'')thendisconnectusingsqlca;as_returnerr=重组后的sql语法出错,数据窗口语法不能包含双引号!+ls_newsqlreturn-1//设置新窗口语法出错elseifnotMatch(upper(ls_newsql),WHERE)thendisconnectusingsqlca;as_returnerr=重组后的sql语法出错,数据窗口必须包含一个where条件+ls_newsqlreturn-1//设置新窗口语法出错endififds1.modify('DataWindow.Table.Select='+ls_newsql+'')thendisconnectusingsqlca;as_returnerr=重组后的sql语法出错,请检查数据窗口对像SQL语法。+ls_newsqlreturn-1//设置新窗口语法出错endifll_row=ds1.retrieve()ifll_row0orisnull(ll_row)thendisconnectusingsqlca;as_returnerr=数据检索出错!+ls_err_a+ls_newsqlreturn-1//服务端检索数据出错endififds1.modify('DataWindow.Table.Select='+ls_oldsql+'')thendisconnectusingsqlca;as_returnerr=还原旧数据窗口语法出错,请检查数据窗口对像语法是否含有双引号。+ls_oldsqlreturn-1//还原旧数据窗口语法出错endifll_returnrow=ds1.getfullstate(dwo_blob)ifll_returnrow0orisnull(ll_returnrow)thendisconnectusingsqlca;as_returnerr=服务端进行blob时,获取数据行出错!return-1//封装到blob变量时出错endifdisconnectusingsqlca;destroyds1;as_returnerr=数据检索成功!//destroyn_webservicereturnll_returnrow3、把服务端发布到IIS服务打开我们的P_webservice_webservice编译object。点击编译,pb11会自动将webservice发布到我们原来定义的IIS服务器上发布的时候要注意一点就是在objects选项卡上,必须先中我们上面的函数(或者叫方法),librarylist选项卡上要选上我们的pbl库文件。点击第一辆小车deployproject其它就交给pb自已去完成了。4、编译完成后run一下我们的webservice看看是否发布成功,出现上图并能看到我们定义的函数(我总是喜欢叫它们方法),webservice就算是发布成功了。这样我们就完成了一个服务端检索方法。下一节我们接着继续讲解如何用客户端检索数据。二、客户端调用webservice1、建立一个PB应用点击确定后点击finish完成2、给工程附加pbsoapclient110.pbd这个文件通常在pb11的安装目录里,可以通过搜索找到它,然后将这个文件拷贝到我们新建应用的目录下,并附加到工程里面来。3、为应用添加一个webserviceproxy函数添加完成后在工程里面添加一个窗口,我们来实验一下我们前面的工作注意:应用程序要与webservice通讯都要通过webserviceproxy来完成,所以我们首先要建立一个proxyOk后这里的wsdlfilename如果你记不住就打开webservice端,工程文件的object项上面去找然后一直下一步到下图写上一个proxyname我写的是myproxy一直到下一步完成。打开我们刚才定义的代理,并编译,顺利的话会看到库文件中添加了很多结构,这些我们都不用管,接着做我们后面的工作就好。4、新建一个customclass5、给新建立的对像添加一个函数这个函数就是代替二层开发模式下的retrieve函数的,这里你可以将这个函数多次重载以方便前台开发人员调用,目前这个函数支持给窗口添加where条件,检索并返回错误或成功的信息。以及返回检索到的行数。还是不太明白的可以加我的QQ:47570471,我的文笔从上幼儿园开始就不是强项,估计说得也不是太明白,不过欢迎大家QQ骚扰。总之就是重载到前端开发人员分不出是在开发二层还是三层就算ok了,见下图:为对像添加二个实例变量SoapConnectioni_connmyproxyn_webservicesoappb_soap////myproxyn_webservicesoap这个名称如果你前面建立代理的时候用的是myproxy那应该就是这个,如果不是就去找你生成的代理对像名称。Constructor事件里面写上i_conn=createSoapConnection//i_conn.setsoaplogfile(mis.log)i_conn.createinstance(pb_soap,myproxyn_webservicesoap)destructor事件里面写上destroypb_soap;destroyi_conn;对像到这里建立完成。1、给应用添加一个全局变量soapservermis注意:soapserver为上面定义的对像的名称。在窗口的open事件里面上mis=createsoapserver2、做一个数据窗口(这个不用说了吧)3、把数据窗口拖到我们的测试窗体4、拖一个commandbutton里面写上:mis.retrieve(dw_1)//////如果数据检索到数据窗口了,那么我们本次的实验就算成功了。下一节我们接着讲单数据窗口及多数据窗口的update以及存储过程的调用及oracle序列的通用方法………Guoacqq:47570471三、三层结构的更新1、webservice端方法新建立一个函数intli_change=0stringls_error=connect;ifSQLCA.SQLCode0thenas_err_return=连接数据库出错,请检查数据库连接参数。return-1////创建数据窗口出错endififds1.create(as_syntax,ls_error)1thendisconnectusingsqlca;as_err_return=服务端重建数据窗口出错,请检查您传入的数据窗口对像!+ls_errorreturn-1endififds1.settransobject(sqlca)1thendisconnectusingsqlca;as_err_return=服务端设置数据存储事务出错!+ls_err_areturn-1endifli_change=ds1.SetChanges(dwo_object)ifli_change=1thenifds1.Update()=1thencommitusingsqlca;disconnectusingsqlca;as_err_return=数据更新成功!return1elseas_err_return=ls_err_arollbac
本文标题:pb11+webservice开发分布式三层应用3
链接地址:https://www.777doc.com/doc-3385115 .html