admin 管理员组

文章数量: 887019


2024年3月1日发(作者:toadstool怎么读)

webservice服务器端会提供wsdl接口文档,pb里面用web service proxy wizard从wsdl生成对象,再调用即可(注意把c:program filessybasesharedpowerbuilder下面的加入target),代码样例:

SoapConnection lsc_conn

soapservice lproxy_obj

String ls_proxy_name = "soapservice "//生成的代理对象名称

String ls_url = "localhost:8080/axis/services/SoapService "//web service url

//

lsc_conn = Create SoapConnection

lsc_ions( "SoapLog=~ "~ " ")

int li_ret, i

li_ret = lsc_instance( lproxy_obj, ls_proxy_name, ls_url)

If li_ret <> 0 Then

MessageBox( "错误 ", "调用失败,错误号码: " + String(li_ret))

Return

End If

tns1__requestcontent lst_request

lst_1 = 5

lst_2 = "test "

tns1__returnresult lst_result

lst_result = lproxy_ult(lst_request)

MessageBox(String(lst_), "code: " + lst_ + "~nmessage:

" + &

lst_e + "~ndesc: " + lst_ )

注意pb调用webservice只能返回简单的int string类型,复杂的结构会出错

怎么样在pb9里面调用WebService

pb9也出来了,速度够快的,大概看了一下,与pb8比较,增加的功能不多,主要是WebService,Xml和Ejb.我就感受了一下pb9的WebService功能,与大家共享。

我们用一个实例来说明:

新建应用,这些步骤与pb8一致的。然后建立一个WebService Proxy Wizard,下一步会提示你输入WSDL文件,点击浏览选择,假设是C:inetpubwwwroot的文件。点击下一步,会自动出现WSDL文件中的Service.点击下一步,系统默认选择ServiceSoap,紧接着输入proxy name(代理对象名),输入test_ws.后面的几项按默认即可。

完成后是编译代理对象的界面。会出现:

Web Service Generator Project Status

Deployment PBL: E:programpbwebservicew_

Clear PBL on build: No

Confirm overwrites: No

WSDL Location: file://E:

Services selected :

Service Service1:

Service1Soap

可以在属性中设置,也可以不用去管。点击编译的绿色图标,好了,一个代理对象生成了。

在左边的treeview中可以看到如:test_wsservice1soap的东西。

点击加号的图标,在function中可以看到里面的我们定义的show(string yourname) returns

string.

好了最重要的一步已经完成了,我们来测试一下:

建一个windows,添加一个文本框和按钮控件。

在cb_事件写入:

SoapConnection conn

Test_wsservice1soap test_ws

long rVal

//string str_endpoint

//str_endpoint = "localhost/webserver/?WSDL"

conn = create SoapConnection

rVal = Instance(test_ws, "test_wsservice1soap")

sle_ = test_("你的参与是我们最大的支持")

destroy conn

好了,保存,会提示SoapConnection未定义。

增加到库列表中。在pb安装目录下

SharedPowerBuilder。增加后左边treeview会出现soapconnection,SOAP server

soapexception 两个对象.

运行,点击按钮,文本框中出现欢迎你的参与是我们最大的支持

注意的是:文件在服务器上是可以运行的,否则不会出现东西的。

添加和引用webservice

作者:feique123 2009-10-10 15:06 星期六 晴

1、 在pb安装目录下 SharedPowerBuilder。在pb的tree中的target属性中添加。增加后左边treeview会出现soapconnection,SOAP server soapexception 两个对象.。

2、在一个按钮的click事件中写的如下例子。

SoapConnection conn

Test_wsservicesoap test_ws

long rVal

conn = create SoapConnection

rVal = Instance(test_ws, "test_wsservicesoap")

sle_ =string(test_("select * from t_user", "t_user"))

destroy conn

注:test_ws为代理对象名

3、要想在pb中用webservice必须要建一个webservice,其引用的wsdl文件,应该是pb所在机器上访问到的wsdl文件,也就是所能访问的webservice服务。

PBDOM操作XML文档轻松入门(Easy XML with PowerBuilder Document Object Model)

(作者:Terry Voth、JohnStrano)

(根据/sb_content/1027266/XML_PB_ 翻译整理)

本文对PBDOM技术进行相关介绍,但并不涉及XML的基础知识,建议阅读者对下述相关术语有一定了解:Document(文档), DTD(文档类型定义), schema(大纲),Element(元素), attribute(属性), processing instruction(处理命令), entity(实体)。

本文主要包括以下内容:

1、为什么要使用PBDOM以及怎样创建PBDOM

2、PBDOM主要用于那些地方

3、如何使用PBDOM编程

4、PBDOM和其他XML解析(parser)技术的比较

一、什么是DOM

◆文档对象模型(Document Object Model)

1、作为一项W3C规范,XML DOM存在目的是为不同类型的应用程序提供一个标准的编程接口,它被设计可以跨平台、跨语言使用。

2、我们可以利用XML DOM创建XML文档并操纵其结构,增加、修改、删除元素。

3、程序中调用XML解析器载入XML文档到内存中。当文档被载入后,可以通过进入DOM检索和操作相关信息。

4、DOM 保存了XML文档树,文档(document)元素位于整棵树的最顶层。该元素可以有一到多个子节点来保存树的结构。

可以参阅以下网站:/dom/ 来了解更多的关于XML Document

Object Model的内容。

二、什么时候应该使用DOM工具

◆当你需要做下列事情的时候,你应该想到XML DOM的

1、在一个或者多个XML文档之间移动元素

2、创建新的元素并且在XML文档的任意位置插入

3、操作元素并重新插入其到XML文档其他位置

4、导入内嵌数据结构

& . pb9中,数据窗口现在可以通过XML导出内嵌数据结构(nested data structures).

三、什么是PBDOM

◆PowerBuilder 文档结构模型(PowerBuilder Document Object Model)

1、PBDOM是通过PBNI扩展出来的,用于操作XML数据,并针对PowerScript作了优化

2、在程序中模型是通过DOM的抽象来表示XML数据。(A programming model to represent

XML data –an abstraction of DOM)

3、底层是对Apache Xerces/C++的封装。

四、PBDOM的设计目标

1、简单易用(Be straightforward for PowerBuilder programmers)

2、可以利用PowerScript的强大语言能力(如对象、方法重载、数据等)

3、在可能的情况下,隐藏了XML底层的复杂实现(Hide the complexities of XML wherever

possible)

4、原有的DOM在pb下使用不够直观(DOM is unintuitive to a PowerBuilder programmer)

五、使用PBDOM初步

◆PBDOM设置

1、添加(%SYBASE%SharedPowerBuilder)到工程的pbl列表中

2、%SYBASE%SharedPowerBuilder应该在系统路径或者应用程序的路径中(也就是pbdom要使用此路径下的, 、xerces_2_1_文件,同样,当程序发布时候也需要)

六、PBDOM类的使用

◆如图所示,反映了PBDOM类的组成和继承关系,可以看到,几乎所有的PBDOM类都继承自PBDOM_Object(除了PBDOM_Builder和PBDOM_Exception)

1、PBDOM_Document

◆构建PBDOM举例

1.1 直接构建(XML documents can be created from scratch)

PBDOM_Document doc

PBDOM_Element rootdoc = CREATE PBDOM_Document

root = CREATE PBDOM_Element

e( "root" )

t( "this is the root" )

tent( root )

1.2 从文件、字符串、DataStore中载入

PBDOM_Builder builder

doc = romString( "bar" )

doc = romFile( "c:"

doc = romDataStore( l_ds)

2、PBDOM_Element

2.1 遍历元素

PBDOM_Element root, children[], first

// Get the root element of the document

root = tElement()

// Get an array of all child elements

ldElements( children )

// Get only elements with a given name

ldElements( "name", children )

// Get the first element with a given name

first = ldElement( "name" )

注意:

上例中得到的元素数组是联动的!(The element array is live!) 即:

◆ 修改数组中的元素,同样会作用到父文档

◆ 返回的数组是有界的(Once the array is returned, it is now bounded)

◆ 在数组中增加新元素时,需要一个SetContent()方法调用

2.2 移动元素

// PBDOM_Document docOne,docTwo

PBDOM_Element movable

movable = CREATE PBDOM_Element

e( "movable" )

tent( movable ) // add

() // remove

tent( movable ) // add again

注意:

1、只要是从PBDOM_Object继承的对象,都可以调用Detach()方法(如Comments、ProcessingInstructions、Elements (and their content)等等)

2、PBDOM元素对象不是永久的捆绑在它的父文档上的(PBDOM elements aren't permanently

tied to their parent document)

2.3 符合规格(Always well-formed)

PBDOM_Element构造器以及setter方法会检查元素是否符合规格:

e( "Spaces are illegal" )

AddContent()方法也会从以下几个方面进行检查:

◆ 结构---树中没有循环(Structure –no loops in any tree)

◆ 只有一个根节点元素(One and only one root element)

◆ 相容的命名空间(Consistent namespaces)

3、PBDOM_Attribute

3.1 操作元素属性

◆ 元素可以有多个属性

// Get an attribute

ls_width = ributeValue( "width" ) // or

ls_width = ribute ( "width" ).GetText()

// Attributes can be typed

li_border = ribute( "width" ).GetIntValue()

// Set an attribute

ribute( "cellspacing", "0" )

// Remove an attribute

Attribute( "cellspacing" )

// Remove all attributes

PBDOM_Attribute empty[]

ributes( empty ) // the PowerScript way

4、PBDOM_Text

4.1 操作元素文本内容

cool demo

// the text is directly available –returns

// "~r~ncool demo~r~n"

ls_desc= t()

// two convenience methods

ls_desc= tTrim()// returns "cool demo"

ls_desc = tNormalize()// returns "cool demo"

// text can be changed directly

t( "a new description" )

5、PBDOM_Object

5.1 操作有混合内容的元素

cool demo

PBDOM_Object content[]

tent( content )

FOR i = 1 TO UpperBound( content )

CHOOSE content[i].GetObjectClassString()

CASE "pbdom_comment"

// ...

CASE "pbdom_processinginstruction"

// ...

END CHOOSE

NEXT

6、PBDOM_ProcessingInstruction

6.1 使用处理命令(Processing instructions)

{------target------} {----------------data---------------}

// Get target (e.g., "xsl-stylesheet")

ls_target = get()

// Get data (e.g., 'type="text/xsl"href=""')

ls_data = t()

// Get individual values as attributes

String names[]

es( names )

FOR i = 1 TO UpperBound( names )

MessageBox( names[i], ue( names[i] )

NEXT

7、PBDOM and 命名空间(Namespaces)

......

String ls_element

PBDOM_Element template

// get element name and namespace –return "xsl:template"

template = ldElement( "template" )

ls_element= espacePrefix() +":"+ e()

// get element by name and namespace

template = ldElement( "template", "xsl", "/1999/XSL/Transform")

七、PBDOM vs. the Competition

◆Apache Xerces/COM

Xerces 是现在PBDOM底层使用的XML解析器,但对PowerBuiler用户来说使用不直观。(Xerces is the [current] underlying XML parser for PBDOM, but is less intuitive)

◆MSXML

.无法在UNIX等操作系统上使用(No deployment to UNIX possible)

.同样对PowerBuiler用户来说使用不够直观(Less Intuitive)

.COM collections vs. PB arrays (pb用户当然会优先选择使用数组来处理数据)

◆Others

Expat–a C DLL (使用时需要声明外部函数…使用不够广泛)


本文标签: 元素 文档 使用 对象 操作