pb11+webservice开发分布式三层应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pb+webservice开发分布式三层应用
(演示或测试例程代码:WebserviceExample.rar)
一、 WEBSERVICE服务端的开发
1、新建立一个workspace工作区
先择FILE菜单下的NEW,选择标签页‘Workspace’新建一个工作区。
点击后出现下图
在文件名处输入工作区的名称,假设我们的工作区名为webserver,单击保存按钮。这样工作区就建立成功了。
2、建立一个.net web service 应用点击FILE菜单下的NEW
选中.net web service 点击ok按钮
点击next按钮
点击next按钮
这里我们不修改pbl库名,当然你可以按你的意思修改库名,点击next 按钮。一直点Next按钮直到出现
这里需要注意一点,如果你当前的IIS端口,不是默认的80 ,假设是7000的话,那么在localhost后面要加上“:7000” ,。再点击一次next直到finish按钮。
3、连接数据库(建立测试环境所用文件CreateENV.sql)
我们先来建立一个数据库的连接以为后期的webservice服务提供一个连接。
打开系统生成的n_webservice对像
在其constructor里面写上
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=localdbora8;UID=scott;PWD=tiger',PBCatalogOwner='scott'"
我是拷贝的
这里你可以修改成你的数据库连接参数。
数据库连接建立完成后,我们再建立一个uf_retrieve的方法用来提取数据库数据
long ll_row,ll_returnrow
string ls_oldsql,ls_newsql,ls_err_a,ls_error
int i,LI_WHERE
datastore ds1
ds1 = create datastore
connect using sqlca;
if SQLCA.SQLCode <> 0 then
p_ref_returnerr="连接数据库出错,请检查数据库连接参数。SQLCA.sqlcode=" & + string(sqlca.sqlcode) + "~r~n"+string(sqlca.DBParm) + "~r~n"+string(sqlca.sqlerrtext) return -1////创建数据窗口出错
end if
if len(p_dw_syntax) < 100 then
ds1.dataobject=trim(p_dw_syntax)
//// 我的想法是通过可以传递datawindow名称,而不是几K的Datawindow语法
//// 来减轻网络通讯量(考虑到通用性,此想法可免了)
// if NOT IsV alid(d_emp) then
// disconnect using sqlca;
p_ref_returnerr="服务端加载数据窗口出错! '"+trim(p_dw_syntax)+"'不存在?" // return -1////创建数据窗口出错
// end if
else
if ds1.create(p_dw_syntax,ls_error)<>1 then
disconnect using sqlca;
p_ref_returnerr="服务端重建数据窗口出错! "+ls_error
return -1////创建数据窗口出错
end if
end if
int li_a
li_a=ds1.settransobject(sqlca)
if li_a<>1 then
disconnect using sqlca;
p_ref_returnerr="服务端设置数据存储事务出错!"
return -1///设置对像事物出错
end if
ls_oldsql=ds1.getsqlselect()
if trim(ls_oldsql)='' or isnull(trim(ls_oldsql)) then
disconnect using sqlca;
p_ref_returnerr="传入的数据窗口对像sql语法为空!"
return -1 //取新窗口语法出错
end if
ls_newsql=ls_oldsql //先赋值
LI_WHERE = pos(UPPER(ls_oldsql),'WHERE',1)
IF trim(p_where_clause) <>'' then
IF LI_WHERE = 0 THEN
ls_newsql=ls_oldsql +' '+ p_where_clause
ELSE
ls_newsql=mid(ls_oldsql,1,LI_WHERE - 1 ) +' '+ p_where_clause END IF
END IF
if trim(ls_newsql)='' or isnull(trim(ls_newsql)) then
disconnect using sqlca;
p_ref_returnerr="连结后的sql语法为空!请检查传入的数据窗口对像sql语法。"
return -1 //取新窗口语法出错
end if
if Match ( ls_newsql, '"' ) then
disconnect using sqlca;
p_ref_returnerr="重组后的sql语法出错,数据窗口语法不能包含双引号!"+ls_newsql return -1//设置新窗口语法出错
elseif not Match ( upper(ls_newsql), "WHERE" ) then
disconnect using sqlca;
p_ref_returnerr="重组后的sql语法出错,数据窗口必须包含一个where条件"