



摘 要:基于座位管理系統的Web Service接口,采用SOAP方案實現了座位信息的查詢頁面,并通過Ajax實現座位信息的實時更新。
關鍵詞:座位管理系統;Web Service;SOAP;Ajax
中圖分類號:TP315 文獻標志碼:A 文章編號:1673-8454(2013)15-0049-03
一、座位系統的現實意義
信息共享空間、自習室座位資源已成為考量高校圖書館服務的核心指標。臨近期末,讀者對座位資源的需求更為突出。部分高校圖書館針對座位緊張、占座現象嚴重,開發了自習室管理系統。[1]商業化的座位管理系統針對座位這一獨特資源進行了數據庫優化、流程簡化,并提供了應用接口供個性化二次開發。目前已有不少高校圖書館采用了此套座位管理系統。
安裝座位管理系統后,讀者在座位系統終端機上刷校園卡選號,點擊屏幕,在空座分布圖上選擇座位,打印座位號條即可憑號入座。憑條上印有座位號、校園學生卡卡號和進館時間等信息,離開時需要刷卡釋放座位。如果中途有事要離開座位,也需要重新刷卡,在系統中選擇暫離,座位將自動保留一段時間,如果超時系統將釋放座位,以便其他讀者選擇。每學年期末是座位緊張高峰期,從目前廈大圖書館使用情況來看,引進此套座位管理系統后,座位利用率有了很大的提升。
但是,此套座位管理系統安裝于我館內部網,無法由外部Web訪問,亦無法遠程查詢目前座位狀況。期末座位緊張時段,學生經常到館后才發現無位可選,提供通過Web查詢實時座位狀況的功能是對此套座位管理系統的有效改進,能極大地滿足學生使用需求,提升系統可用性。
二、座位系統Web Service介紹
座位管理系統提供了便于與其它應用系統互操作和個性化定制的Web Service,該Web Service使用SOAP代碼實現。[2] SOAP(Simple Object Access Protocol,簡單對象訪問協議)是一種輕量的、簡單的、基于XML的遠程訪問協議,可以與現有的多種傳輸層或應用層協議結合使用,如TCP、HTTP、SMTP等。SOAP廣泛使用的是基于HTTP和XML協議的實現(SOAP=RPC+HTTP+XML),也就是大家常提的Web Service使用的通信協議。一個SOAP方法可以簡單地看成遵循SOAP編碼規則的HTTP請求和響應。
座位管理系統Web Service目前提供六個接口,分別實現閱覽室狀態查詢、座位使用狀態查詢、讀者當前狀態查詢、讀者進出狀態查詢、讀者違規記錄查詢、違規黑名單記錄查詢六項功能。這里就本文需要使用的閱覽室狀態查詢和座位使用狀態查詢予以詳細介紹,其它接口不予贅述。
閱覽室狀態查詢接口 ReadingRoomState(ReadingRoomNo)
參數說明:
返回XML文檔說明:
<!—Status 閱覽室狀態(開放/關閉) -->
座位使用狀態查詢 SeatUsedInfo(ReadingRoomNo)
參數說明:
返回XML文檔說明:
<!--區域名稱 No 編號;-->
<!--UsedSum 使用數;AllSum 總數;LeaveSum 暫時離開數-->
三、座位信息Web查詢頁面的實現
座位信息Web查詢頁面需要提供的信息有:
(1)圖書館總座位數,總使用座位數;
(2)各閱覽室狀態;
(3)各閱覽室總座位數,總使用座位數。
因為閱覽室的狀態和座位使用情況是不斷變化的,因此在設計座位信息的Web查詢頁面時,必須要考慮如何能夠在Web頁面上顯示出實時的情況,因此就需要使用Ajax技術,讓Web頁面在不進行手動刷新時自動獲取當前座位信息,并顯示在Web頁面上。
為方便Ajax程序調用,在座位管理系統Web Service的基礎上,再設計一個二次封裝接口。該接口負責從數據庫提取獲得閱覽室記錄號,通過Web Service提交調用請求,解析Web Service返回結果,計算圖書館總座位數、總使用座位數。
流程如圖1所示:
座位管理系統提供的Web Service需要通過閱覽室記錄號提交調用請求返回查詢結果。調用座位系統Web Service的ASP代碼如下:[3]
function RoomInfo(readingroomno)
dim xmlReadingRoomState, xmlSeatUsedInfo, UsedSum, AllSum, freeSeat
dim soapClient, xmlReader
set soapClient = Server.CreateObject(\"MSSOAP.SoapClient30\")
Set xmlReader = Server.CreateObject(\"MSXML2.DomDocument\")
’調用閱覽室名稱和閱覽室狀態
soapClient.ClientProperty(\"ServerHTTPRequest\") = true
call soapClient.mssoapinit(\"http://localhost/WebService/SMS_DataQueryInterface.asmx?WSDL\")
xmlReadingRoomState = soapClient.ReadingRoomState(readingroomno)
xmlReader.loadXML(xmlReadingRoomState)
ReadingRoomState = xmlReader.documentElement.selectNodes(\"Status\")(0).text
RoomName = xmlReader.documentElement.selectNodes(\"RoomName\")(0).text
’調用閱覽室座位信息(已用座位、總座位數、暫離座位數)
xmlSeatUsedInfo = soapClient.SeatUsedInfo(readingroomno)
xmlReader.loadXML(xmlSeatUsedInfo)
UsedSum = xmlReader.documentElement.selectNodes(\"Seat/@UsedSum\")(0).text
AllSum = xmlReader.documentElement.selectNodes(\"Seat/@AllSum\")(0).text
freeSeat = xmlReader.documentElement.selectNodes(\"Seat/@freeSeat\")(0).text
LeaveSum= xmlReader.documentElement.selectNodes(\"Seat/@leaveSum\")(0).text
set soapClient = nothing
set xmlReader = nothing
’返回閱覽室信息
RoomInfo = Array(RoomName, AllSum, ReadingRoomState, freeSeat, UsedSum, leaveSum )
end function
封裝二次接口,返回圖書館總座位信息及各閱覽室座位信息:
’從數據庫讀取圖書館閱覽室記錄號,調用接口讀取各閱覽室信息
roomNo = \"000\"rs(\"ReadingRoomNo\")
’取閱覽室相關數據到數組roomInfos
roomInfos(i) = roomInfo(roomNo)
’計算總座位數、已占座位數
for i=0 to k-1
totalSeat = totalSeat + roomInfos(i)(1)
totalTakenSeat = totalTakenSeat + roomInfos(i)(4)
’定義一個二維數組(全部:已占:暫離:狀態)
redim seatInfo_ary(k, 3)
seatInfo_ary(0,0) = totalSeat
seatInfo_ary(0,1) = totalTakenSeat
’searInfo_ary(0,2) = 0
j = 0
for i=0 to k-1
seatInfo_ary(i+1, 0) = roomInfos(j)(1) ’總座位數
seatInfo_ary(i+1, 1) = roomInfos(j)(4) ’已占座位數
seatInfo_ary(i+1, 2) = roomInfos(j)(5) ’剩余座位數
seatInfo_ary(i+1, 3) = roomInfos(j)(2) ’閱覽室狀態
j=j+1
next
’二次封裝接口返回值
response.write \"
for i=0 to k
response.write \"
next
response.write \"\"
而后使用Ajax調用二次封裝接口數據,在查詢頁面顯示實時信息:
function xmuseat() {
$.ajax({
type: \"POST\",
url: \"seatinfo.asp\",
}).done(function( result ) {
k = $(result).find(\"takenseat\").length;
for (i=0; i takenseat = $(result).find(\"takenseat\").eq(i).text(); readingroomstate = $(result).find(\"readingroomstate\").eq(i).text(); $('#st'+i).text(takenseat); allseat = $(result).find(\"allseat\").eq(i).text(); if (readingroomstate = \"開放\"){ $('#roomstate'+i).removeClass().addClass(\"rb open\"); }else if (readingroomstate = \"關閉\") { $('#roomstate'+i).removeClass().addClass(\"rb close\"); } if (takenseat/allseat > 0.85) { $('#roomstate'+i).removeClass().addClass(\"rb full\"); } } }); } $(document).ready(function(){ //定時執行,自動加載ajax程序 setInterval(xmuseat, 10000); }); 為了使座位信息頁面更加直觀,在座位系統查詢頁面上使用色塊圖代表閱覽室,通過顏色區別閱覽室座位數使用情況。通過Ajax動態調用實時座位數,判斷已用座位與總座位數之比來確定色塊使用的CSS類,并動態更新頁面上的相關信息。最終查詢頁面如圖2所示: 四、結束語 座位管理系統除了提供閱覽室相關信息的Web Service接口外,還提供讀者相關信息的接口。為了讓讀者更加便利地查看自己的選座信息、違規信息等數據,筆者下一步計劃在圖書館自動化系統“我的圖書館”中,通過座位管理系統的Web Service整合讀者個人座位記錄查詢和違規記錄查詢。? 參考文獻: [1]孫發,吳代莉,曾為眾.圖書館自習室管理系統的設計與實現[J].現代圖書情報技術, 2010(5):93-98. [2]Web服務編程,REST與SOAP[EB/OL]. http://www.ibm.com/developerworks/cn/webservices/0907_rest_ soap/. [3]使用Asp(vbs)來讀取XML數據島[EB/OL]. http://www.cnblogs.com/hanwater/articles/1405083.html. (編輯:王天鵬)