鐘秋亭
(鞍山師范學院 圖書館,遼寧 鞍山 114007)
網(wǎng)絡(luò)技術(shù)改變了交流方式,以溝通交流為基礎(chǔ)的圖書館信息咨詢服務(wù)建立了形式多樣的服務(wù)系統(tǒng),有外購的專門系統(tǒng)型,有借助免費工具的網(wǎng)絡(luò)平臺型.本文所研究設(shè)計的基于網(wǎng)頁交流形式的服務(wù)系統(tǒng),搭建了信息交流溝通平臺,彰顯了圖書館的專業(yè)信息咨詢服務(wù)特色.
本文利用ASP.NET的CallBack機制和改進的WebPart控制組和DataSource控件等技術(shù)實現(xiàn)實時互動的信息咨詢服務(wù)系統(tǒng),解決了頁面不斷刷新加載而造成的頁面閃爍、停滯等問題,為信息咨詢服務(wù)提供了順暢交流的系統(tǒng)平臺[1-4].
ASP.NET的Postback和Callback均可以實現(xiàn)對服務(wù)器請求頁面信息的功能,Postback對服務(wù)器請求保存上一次的請求頁面狀態(tài),而客戶端與服務(wù)端的交互默認依然是整頁面提交,加重了網(wǎng)絡(luò)數(shù)據(jù)傳輸負擔,加大了服務(wù)器的工作壓力,而且用戶還需要付出時間等待最終處理結(jié)果[2].
ASP.NET在2.0版增加了Callback機制,實現(xiàn)了通過客戶端系統(tǒng)網(wǎng)頁腳本向服務(wù)器端傳遞相應(yīng)的信息數(shù)據(jù),服務(wù)器端以接收到的數(shù)據(jù)進行查詢和處理,最后將結(jié)果回傳到客戶端進行顯示.ASP.NET提供了實現(xiàn)無刷新回調(diào)接口IcallbackEventHandler,該接口分別定義了RaiseCallbackEvent和GetCallbackResult.通過它們實現(xiàn)接受客戶端傳遞的信息數(shù)據(jù),再將所得到的結(jié)果傳回給客戶端的系統(tǒng)頁面.Callback減輕了數(shù)據(jù)傳輸負擔,緩解了服務(wù)端的工作壓力,并且具有異步性[3].
這個咨詢服務(wù)系統(tǒng)的主頁僅在一個頁面通過WebPart和菜單組合機制來實現(xiàn)各項功能,其整體效果如圖1所示.
圖1是信息咨詢系統(tǒng)所有功能全部顯示的頁面,每部分功能均采用WebPart機制,用戶可以根據(jù)喜好而取舍任何一個WebPart,或進行位置的改變.
其中“在線咨詢”和“交流信息”兩個WebPart就是利用CallBack機制,通過自動讀取傳輸數(shù)據(jù)實現(xiàn)的互動交流功能.而“信息公告”和“待辦事務(wù)”這些功能是通過非常方便的ASP.NET信息訪問機制DataSource完成的.
圖1 功能顯示頁面
除了主頁,獨立的頁面還有登錄機制的Login頁面,其它的子功能采用WebPart方式整合在系統(tǒng)中,整個系統(tǒng)的各項規(guī)劃設(shè)計如圖2所示.
圖2 系統(tǒng)規(guī)劃設(shè)計圖
咨詢系統(tǒng)中的每個功能的WebPart都有自己的文件夾,其中大多都有兩個文件,如圖2中信息公告文件夾中的兩個文件.其中的.ascx文件是功能的WebPart,被存放在主頁中,另一個文件是實現(xiàn)各個WebPart的數(shù)據(jù)添加、整理等功能.
本文設(shè)計的系統(tǒng)中每一個WebPart的子功能,都采用數(shù)據(jù)庫處理機制,這些機制使用的是Oracle數(shù)據(jù)庫,在Oracle數(shù)據(jù)庫管理工具P/L SQL Developer中創(chuàng)建4個表,分別為待辦事務(wù)、交流信息、信息公告、在線咨詢.
在Web.config文件中找到節(jié)點,在這個節(jié)點中添加代碼,用于定義Oracle數(shù)據(jù)庫的名稱,以及所需要的用戶名和密碼,具體如下:
在項目App_Code下建一個類,命名為DB.cs,該類主要用于創(chuàng)建數(shù)據(jù)的連接和操作Oracle數(shù)據(jù)庫.編寫代碼如下:
using System;
using System.Data;
...
using System.Data.SqlClient;
using System.Data.OracleClient;
...
OracleConnection con=DB.GetCon();
con.Open();
OracleCommand cmd=new OracleCommand(P_str_cmdtxt,con); ...
在這個DB.cs類頁面前端拖一個GridView控件,然后在后臺查詢表中記錄,把記錄綁定到GridView中.后臺部分代碼如下:
using System;
using System.Collections.Generic;
...
protected void Page_Load(object sender,EventArgse)
{string sql="select*from WARE_RETAIL_PART";
//string tab name="WARE_RETAIL_PART";
DataSet ds=DB.getDataSet(sql);
GridView1.DataSource=ds.Tables[0].DefaultView;
GridView1.DataBind();
...
以此實現(xiàn)網(wǎng)頁各表單選項對數(shù)據(jù)庫的訪問,向服務(wù)器提交數(shù)據(jù)請求獲取數(shù)據(jù)表中的信息并顯示在系統(tǒng)頁面相應(yīng)欄目中.
信息咨詢系統(tǒng)的使用,首先是登錄機制,涉及幾個WebPart功能的使用權(quán)限問題,未登錄的訪客只能看到信息公告.在主頁上端有一個用戶狀態(tài)字段,顯示當前用戶名和登錄狀態(tài),通過登錄機制,跳轉(zhuǎn)入系統(tǒng)主頁面,并還原WebPart的設(shè)置初始值,它是通過控制主頁面上的WebPartManager而實現(xiàn),其中關(guān)鍵代碼如下:
Ctype(Me.page.FindControl("WebPartManager1"),WebPartManager).DisplayMode = WebPartManager.BrowseDisplayMode
把用戶的WebPart個性化還原初始值,通過如下代碼實現(xiàn):
CType(Me.Page.FindControl("WebPartManager1"),WebPartManager).Personalization.ResetPersonalizationState()
由于此用戶數(shù)據(jù)來自圖書館讀者數(shù)據(jù)庫,只需在Login控制的Authenticate中添加如下程序:
Protected Sub Login1_Authenticate(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
HandlesLogin1.Authenticated=Membership.ValidateUser(Login1.UserName,Login1.Password)
上面程序中,Login控件本身不處理身份驗證,此功能由“Membership類”來完成,Membership用“ValidateVser方法”判斷賬號密碼是否正確,確定是否為數(shù)據(jù)庫中的用戶,最終完成登錄.
在不換頁面的前提下實現(xiàn)這個功能,要建立一個發(fā)送信息的機制,一個隨時檢查是否有用戶信息的Listener(監(jiān)聽)控件,以及一個存儲信息的數(shù)據(jù)結(jié)構(gòu).
2.2.1 發(fā)送信息機制 這是一個WebPart類型,設(shè)置了查詢對方是否收到信息的功能,頁面上設(shè)置了兩個按鈕分別對應(yīng)“發(fā)送信息”和“顯示發(fā)送信息記錄”兩個View控件,具體樣式如圖3所示.
圖3 發(fā)送信息樣式圖
在圖3頁面中的“內(nèi)容”中輸入所傳遞的信息,然后點擊“發(fā)送”按鈕,便將信息發(fā)送了出去,所謂的“發(fā)送”實際是把此信息存入數(shù)據(jù)庫,發(fā)送信息功能的實現(xiàn)代碼如下:
For i As Integer = 0 To Me.CheckBoxList1.Items.Count-1
If Me.CheckBoxList1.Items(i).Selected = True Then
緊接著的下面代碼為關(guān)鍵部分,調(diào)用EIP.Message.SendRtMsg發(fā)送信息:
If EIP.Message.SendRtMsg(My.User.Name,Me.CheckBoxList1.Items(i).Text,Me.TextBox1.Text) <= 0 Then
上面的EIP.Message.SendRtMsg存儲信息到數(shù)據(jù)庫中,此功能實現(xiàn)的代碼如下:
db.InsertCommand = "insert into 即時信息 (發(fā)信息者,收信息者,發(fā)送時間,信息內(nèi)容) values (?,?,?,?)"
db.InsertParameters.Clear()
db.InsertParameters.Add("發(fā)信息者",發(fā)信息者)
db.InsertParameters.Add("收信息者",收信息者)
db.InsertParameters.Add("發(fā)送時間")My.StudyHost20.Clock.GetNowByYYYYMMDDHHMMSS)
db.InsertParameters.Add("信息內(nèi)容",信息內(nèi)容)
Return db.Insert()
利用DataSource控件把數(shù)據(jù)存儲到數(shù)據(jù)庫,主頁上的CallBack獲取到用戶端傳入的數(shù)據(jù),通過EIP.Message.GetRtMsgForMe控件獲取數(shù)據(jù)庫中該用戶未讀的信息組成字符串,由RetData返回給用戶端的程序函數(shù),并顯示在用戶的頁面上,此結(jié)果如圖4所示.
2.2.2 即時互動咨詢交流的實現(xiàn)機制 在線咨詢可以實現(xiàn)多人同時交流,包括邀約和互動交流兩個功能.
(1)邀約
即時邀約功能,方便用戶申請咨詢邀約和信息服務(wù)者約請用戶參加交流.網(wǎng)頁上即時出現(xiàn)約請信息,用戶或服務(wù)者進行相應(yīng)回應(yīng),同時也能看到咨詢窗口的最新實時交流信息,免去了換頁面的麻煩,該模塊見圖1中的交流信息,從邀請人員窗口中選中邀約對象,提交邀約信息,這部分操作的主要代碼如下:
Shared Sub invite(ByVal Who As String,ByVal UserID As String,Optional ByVal time As String = "")
EIP.Message.SendRtMsg(UserID,Who,UserID & "邀請您參加在線咨詢,歡迎加入!")
End Sub
這時,對方一端則出現(xiàn)如圖5的顯示.
圖4 頁面顯示圖
圖5 邀約顯示圖
圖6 在線咨詢顯示圖
2.2.3 互動交流的在線咨詢服務(wù) 在線咨詢服務(wù)主要包括在線咨詢的WebPart和在線咨詢的數(shù)據(jù)表,每位成員的每次發(fā)言,會自動存儲到數(shù)據(jù)庫中,頁面上的CallBack即時地從數(shù)據(jù)庫中讀取最近幾條發(fā)言記錄顯示在頁面上,成為在線咨詢中的內(nèi)容,如圖6所示.
用戶在內(nèi)容中輸入信息,點擊“發(fā)言”按鈕,則生成一個CallBack操作,將內(nèi)容和發(fā)言者等數(shù)據(jù)一起傳給服務(wù)器端,并存儲到數(shù)據(jù)庫中,用戶端功能實現(xiàn)的部分代碼為:
Dim SentMsgScript As String =Me.ClientScript.GetCallbackEventReference(Me,"document.all." & Me.txb_msg.ClientID & ".value+'," & My.User.Name & "'","receivedData","document.all." & Me.Panel1.ClientID)
Me.btn_Send.Attributes("onclick") = SentMsgScript
服務(wù)器端接收數(shù)據(jù)并存儲到數(shù)據(jù)庫中的代碼主要如下:
If eventArgument <> ""
Then Dim buf()As String = Split(eventArgument,",")
EIP.OnlineAdvice.InsertMessage(1,buf(0),buf(1))
End If
對數(shù)據(jù)庫的訪問操作,是通過DataSource類實現(xiàn)的.程序用SQL語法,“InsertMessage()”函數(shù)把發(fā)言信息存儲到在線咨詢數(shù)據(jù)表,“GetMessage()”函數(shù)把在線咨詢數(shù)據(jù)表中的信息,組成HTML代碼發(fā)送給用戶端.其實現(xiàn)代碼主要部分如下:
Shared Sub InsertMessage(ByVal OnlineAdviceNO As String,ByVal Message As String,ByVal UserID As String)
...
Shared Function GetMessage(ByVal OnlineAdviceNO As String,ByVal LastN As Integer)
Dim db As New SysDB
If LastN <= 0 Then LastN = 15
如此不需換頁操作,便實現(xiàn)了在一個頁面上進行發(fā)言的同時也能看到其他用戶與館員在線咨詢的交流信息.
網(wǎng)絡(luò)改變生活,也改變交流的方式,更加方便、快捷的交流渠道促進了信息知識快速流動的發(fā)展,提高了知識的價值轉(zhuǎn)化[5].信息咨詢服務(wù)的專業(yè)化和便捷化是時代的需求,“工欲善其事必先利其器”,良好的交流工具既有利于通信溝通,也提高了工作效率[6].隨著讀者對于圖書館信息咨詢服務(wù)要求的日益增加,為讀者提供個性化的信息咨詢服務(wù)成為圖書館提高自身核心競爭力的途徑之一[7].基于ASP.NET網(wǎng)絡(luò)技術(shù)設(shè)計的信息咨詢服務(wù)系統(tǒng),以頁面簡潔、交流方便、數(shù)據(jù)傳輸快捷的特點,將會提升圖書館信息咨詢服務(wù)的質(zhì)量和效率,也充分體現(xiàn)了圖書館服務(wù)的專業(yè)化特色.