Powerbuilder調用Webservice的兩種方法

文檔轉自:http://baijiahao.baidu.com/s?id=1570870755451373&wfr=spider&for=pc

提起Powerbuiler這個工具來,現在還能知道的人還真不多。先簡單解釋一下吧,以下是從百度百科上複製下來的一段文字

PowerBuilder美國Sybase公司研製的一種新型、快速開發工具,是客戶機/服務器結構下,基於Windows3.x、Windows95和WindowsNT的一個集成化開發工具。它包含一個直觀的圖形界面和可擴展的面向對象的編程語言PowerScript,提供與當前流行的大型數據庫的接口,並通過ODBC與單機數據庫相連。

當然了這也已經老黃曆了,從當年的人見人愛(當然了也沒那麼誇張),到現在的賣藝又賣身(Sybase賣身給了SAP,現在SAP又把Powerbuiilder給了正陽--APPEON).這玩意兒現在也就還剩下醫療行業這一塊根據地了,沒辦法現在流行BS應用,而這恰恰是Powerbuilder的短板。

好了囉嗦了這麼多,下面開始進入正題。本人是混醫療圈的,對於一家醫院來說要上系統的話,什麼his lis pacs ris等等,就是產品線再全的公司有時候也一定能一家就搞定所有系統,所以總會遇到多個系統之間進行數據交互的時候,按照現在的行情,首選自然是Webservice。以下就是Powerbuilder調用其他系統接口常用的兩種方法。

方法一(這也是Powerbuilder推薦的方法)

1.在Powerbuilder上點擊File->New->Project->Web Service Proxy Wizard

2.如下圖所示,填上Webservice的地址點Next

3.下圖直接點Next

4.同樣,下圖繼續Next

5.下圖紅框圈起來的地方填上前綴(不填也行)

6.下圖直接Next

7.選擇保存代理的pbl

8.下圖是上面所做選擇的最終結果,需要修改的話直接Back回去修改,否則還是直接Next

9.上面結束以後,菜單Design->Deploy Project,然後將Webservice的方法生成到本地(紅框中圈起來的部分)

10.下圖是調用Webservice的結果(以http://www.webxml.com.cn上查詢手機號歸屬地的Webservice爲例)

11.以下是具體的實現代碼

String ls_phone,retmsg,ls_area

testmobilecodewssoap webTest

String ls_webTest = 'testmobilecodewssoap'

String ls_url = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl'

soapconnection conn

conn = Create soapconnection

ls_phone = Trim(sle_1.Text)//手機號

Try

conn.CreateInstance(webTest,ls_webTest,ls_url)

Catch(soapexception re1)

retmsg = "調用失敗1,錯誤號碼:" + re1.getmessage()

Catch(runtimeerror re2)

retmsg = "調用失敗2,錯誤號碼:" + re2.getmessage()

End Try

MessageBox("提示",retmsg)

Return

ls_area = webTest.getmobilecodeinfo(ls_phone,'')

Catch(runtimeerror re3)

retmsg = "調用失敗3,錯誤號碼:" + re3.getmessage()

Destroy(conn)

mle_1.Text = ls_area

方法二:

上面的方法一是使用Powerbuilder推薦的生成代理的方式來調用。但對於這麼一個”歷史悠久”的工具來說,由於歷史原因不是每家都是用的是最新的版本。首先來說上面的方法是從9.0開始支持的,從10以後開始逐漸加強(截止到現在最新版本是12.6).9.0對Webservice的支持並不怎麼好,而恰恰目前用的比較多的就是9.0這個版本。在與其他系統交互數據時如果使用方法一的話基本上就得拼人品碰運氣了。呵呵,所以下面介紹另外一種方法

首先使用第三方工具抓取Webservice的格式(本例使用soapUI來抓取)

1.菜單File->New soapUI Project,輸入Webservice

2.下圖就是抓取的結果

數據格式如下:問號就是要輸入的參數

?

?

2.下圖就是實現方法(代碼如下)

string ls_xml,result,ls_phone,as_approve=''

Long ll_length,li_create,li_return

ls_phone = trim(sle_1.text)

ls_xml= ''

ls_xml+=''

'

'

'

'+ls_phone+'

ls_xml+=''

OLEObject http

http = Create OLEObject

li_create = http.ConnectToNewObject( "Msxml2.XMLHTTP.6.0")

If li_create <> 0 Then

li_create = http.ConnectToNewObject( "Msxml2.XMLHTTP.3.0")

End If

ll_length = Len(ls_xml)

http.Open("POST",ls_url,True)

http.setRequestHeader("Content-Type","text/xml;charset=UTF-8")

http.setRequestHeader("Content-Length",String(ll_length))

http.setRequestHeader("Authorization","auth="+as_approve)

http.Send(ls_xml)

Do While http.readyState <> 4 //查詢狀態,延時

Yield()

Loop

result = http.responseText

http.DisconnectObject()

Destroy http

mle_1.Text = Mid(result,Pos(result,'')+25,Pos(result,'') - Pos(result,'') - 25)

以上就是Powerbuilder調用Webservice的兩種方法,其實還有其他方法,這裏就不再寫了。如果您使用的是10以上版本,推薦使用方法一,如果是10以下的話,還是用方法二吧。

最後順帶提一句,對於使用.Net的人來說很喜歡使用WCF來搞這個,但是WCF搞出來的東西雖然很像Webservice,但還是有區別的,而且使用上面兩種方法也是都調用不成功的,要想解決,可以使用微軟的SoapToolkit來處理。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章