為Visual FoxPro開發者建立移動解決方案
作者:Cathi Gero(Prenia公司 prenia.com)
翻譯:張洪舉(
http://www.vfptop.com
) Microsoft Visual FoxPro MVP
日期:2003年5月
應用于:
Microsoft? Visual Studio? .NET 2003
Microsoft? Visual FoxPro? 8.0
目錄
概述
挑戰
解決方案
ASP.NET Mobile控件如何工作
ASP.NET Mobile控件
操縱數據
擴展你的Visual FoxPro應用程序
結論
概述
無線和移動解決方案已成為了許多公司的一個重要焦點。作為一個Visual FoxPro開發者,你可以擴展你的現存應用程序來公開信息,呈現在這些移動設備上。為移動設備建立應用程序等同于如何為臺式機書寫應用程序,開發者在今天建立臺式機應用程序的時候,他們使用服務器開發或客戶端開發來建立桌面體驗。因此,你具有一個從服務器端投影的用戶接口或運行在客戶端的用戶接口,客戶端可以是一個瀏覽器或多格式客戶程序。
Compact Framework是客戶端版本,就象一個運行在臺式機上的Visual FoxPro應用程序。Compact Framework允許以控件形式的多格式客戶程序開發,這些控件運行在移動設備上。你可以得到與操作系統上有用資源的集成,不管是在應用程序里面使用電話直接呼叫的能力或與Pocket PC有用資源集成,例如SQL Server CE和Pocket Outlook;你也可以書寫脫機工作的應用程序,因為代碼實際上是位于移動設備上。
ASP.NET Mobile控件,以前叫做Mobile Internet Toolkit(MMIT),是Visual Studio .NET 2002的一個附加程序,與Visual Studio .NET 2003開發環境集成后被包含在一個PocketPC仿真工具中。ASP.NET Mobile控件允許開發者建立Web頁和內容,其目標是各種類型的移動設備,包括移動電話、PDA(個人數字助理,即掌上電腦)和頁導航。ASP.NET Mobile控件不僅僅是集成在Visual Studio .NET 2003中,它們也充任著對核心ASP.NET開發工具的擴展。該白皮書關注如何為服務器使用ASP.NET Mobile控件建立移動解決方案,并以使用Visual FoxPro進行應用程序書寫為基礎。
挑戰
Visual FoxPro開發者剛開始建立一個移動Web站點面臨許多新增的復雜性,許多Visual FoxPro開發者已經進行了有關屏幕分辨率、cookies和其它問題的討論。
當在你涉及的移動世界中看到數量眾多的設備時,你面對的范圍從兩行只支持文本的移動電話到豐富格式的Pocket PC,然后到RIM Blackberry設備和日本的DoKoMo設備,你涉及整個新的大批問題和新的標記語言。例如,Pocket PC支持HTML,美國和歐洲的移動電話主要支持WML或Wireless標記語言,以及日本的DoKoMo電話支持CHTML或Compact HTML。此外,如果所有各種各樣的標記語言還不夠,你還具有不同的屏幕尺寸分辨率并要為不同屏幕尺寸標記頁數,以及各種標記語言的瀏覽器工具,尤其WML是難以置信地多變化。因此,開發者應當找到一種方法來對每個支持WML的瀏覽器編碼,確保站點工作在所有設備上。
解決方案
ASP.NET Mobile控件允許你建立另一個表示層來公開Visual FoxPro應用程序信息(見圖1),為臺式機建立一個表示層和為移動設備建立另一個表示層。這一偉大的事情是你在對這兩個表示層一直使用相同的中間層商業邏輯,ASP.NET Mobile控件控制你需要建立移動設備表示層,它們也被集成到Visual Studio .NET集成開發環境中,所以你得到了同樣的拖放操作環境(見圖2)。因為設計器是Visual Studio .NET的一部分,你具有你對標準ASP.NET Web應用程序的完全調試能力。你可以使用任何在Visual Studio .NET中可用的程序語言來建立無線應用程序。
ASP.NET Mobile控件也支持內置標記頁數,這是自動分組數據的能力,其依賴于設備的性能。你可以使用在ASP.NET Mobile控件中的內置分頁屬性,或者可以定義自定義標記頁數。例如,如果一個WAP電話僅支持5行數據顯示,ASP.NET Mobile控件自動建立next 和back 選項,所以用戶可以更加容易地移動整個數據集合。
步驟:
1.Web客戶端請求Web頁。
2.該請求在Internet上傳播并被IIS接受到。
3.該請求然后被.NET Framework處理。
4.所請求Web頁由ASP.NET完成。
5.ASP.NET Mobile控件處理任何移動設備請求。
6.Web頁然后返回到客戶端。
ASP.NET Mobile控件在運行時計算設備性能。對于每個放置在移動頁面上的控件,有一個相應的適配器來呈現適合于該設備的標記。 因此,你在頁面上以控件的形式設計功能事項,然后在請求進來時,適配器被選擇來顯示請求設備的功能(見圖4)。例如,在一個多格式設備上的日歷可以以表格布局的方式顯示,并通過從表格選擇事項來為選擇日期提供一個美觀的豐富格式體驗;或在一個小型移動電話上,通過改變顯示來選擇月,然后從該月選擇星期。所有你做的這些是操作移動日歷,將其放置在頁面上,運行時刻的響應建立在移動設備能夠處理什么的基礎上。
圖4 ASP.NET Mobile控件為各種設備自動生成不同的輸出
設備仿真程序
設備仿真程序為移動Web應用程序第一階段測試提供了一個經濟和可行的方法。你可以從你的臺式PC上測試一個移動Web應用程序,驗證基本的界面和感覺、站點導航、核心功能和使用仿真程序來自Web站點的你期望的內容。一個通用PocketPC仿真程序包含在Visual Studio .NET 2003中。可以用于ASP.NET Mobile控件的附加仿真程序列表,請訪問"
http://support.microsoft.com/default.aspx?scid=KB;en-us;320977"Microsoft
Knowledge Base article 320977
ASP.NET Mobile控件
有許多控件可以用于開發Mobile應用程序,表1顯示了一個所有控件的列表以及它們如何與Web Forms和Visual FoxPro控件關聯。
表1 對Web Forms、移動Web Forms和Visual FoxPro控件的比較
容器控件
容器控件是其他控件的父級,其為開發者提供了一種容易的方法來在頁面上組織控件組。對于移動應用程序可用的兩個容器控件是Form和Panel,你需要在頁面上具有Form控件來為其它移動Web Forms控件工作,因為沒有一個由其它控件提供的功能在<mobile:Form>標記集合之外是可用的。Panel控件也是一個容器控件,但是,該控件也必須被嵌套在一個Form控件中。
Form控件可以包含許多開發者想使用的控件,但是,要牢記不同設備的顯示限制。運行時刻把每個Form作為一個獨立單元,并同時不發送更多Form到客戶端。在Web Form中,你傳輸不同的Web頁, 在移動Web Forms中,你傳輸不同的Form。所有Form被包含在一個Web頁中,要傳輸其它Form,設置屬性ActiveForm 為要傳輸Form的名稱:
ActiveForm = Form2
Panel控件提供了一個容器,與Visual FoxPro中的Container控件類似,其可以用于分組多個控件。這樣做,可以使用一個單個控件來顯示、隱藏、允許或禁止一個控件集合,也可以應用格式到Panel上,其由子控件繼承。Panel 控件的其他應用是其可以為動態建立控件充當一個占位符。
文本顯示控件
Label、TextBox和TextView控件可以被用于客戶端顯示文本。
Label控件僅用于客戶端顯示文本,文本是只讀的,并且控件不提供屬性或事件進行配置。
TextBox控件提供在客戶端的單行數據輸入,可以用于顯示或收集文本或通過隱藏字符來充當一個密碼數據輸入。
TreeView控件僅限于ASP.NET Mobile控件,其為多行文本顯示來呈現大量的文本,其也為黑體、斜體、分頁符、段落和錨定支持標記標簽設置。此外,TreeView控件支持標記頁數。
列表和選擇控件
列表和選擇ASP.NET Mobile控件包括List、SelectionList和ObjectList控件,使用這些控件,客戶端可以從一組選項中進行選擇和在表格中顯示信息。移動設備在內存、屏幕尺寸和數據輸入能力上很有限,其需要一個很長的時間來輸入你的姓名和聯系信息到移動電話瀏覽器或PDA中,因此,幫助用戶從建立的項目中選擇并限制輸入的總量是非常重要的,使用List和SelectionList控件在提供這些功能方面十分有用。
List控件可以被用于為用戶顯示一個短的選項列表,它可以顯示一個靜態列表或是一個交互列表。靜態列表被用于用戶只能查看的列表項目,不能選擇;使用交互列表,用戶可以進行選擇和導航用戶界面,項目可以以數字或項目符號修飾,并且該控件支持標記頁數。
<mobile:List id="lstProduce" runat="server" Decoration="Bulleted"> <Item Value="1" Text="Apple"> </Item> <Item Value="3" Text="Banana"> </Item> </mobile:List>SelectionList控件用于提供一個短的選項列表,該控件不支持標記頁數,所以它不能一次顯示超過一頁的信息,SelectionList控件支持多次選擇選項并可以被作為一個列表框、多選擇列表框、組合框、單選按鈕或選擇框來顯示。<mobile:SelectionList id="slstProduce" runat="server" SelectType="Radio"> <Item Value="1" Text="Onion"> </Item> <Item Value="2" Text="Celery"></Item> </mobile:SelectionList> ObjectList控件和在Web Form中DataGrid以及Visual FoxPro中的Grid控件類似,該控件可以被用于顯示多個字段,它應當與一個數據源關聯并可以把多個命令和控件中的每個對象關聯起來。該控件的示例顯示見圖5。<mobile:ObjectList id="objlstProduce" runat="server" LabelField="ProductName" DataMember="Products" DataSource="<%# Products1 %>"></mobile:ObjectList>圖5 ObjectList控件的示例輸出
表2顯示了一個列表和選擇控件之間的比較。傳輸控件
ASP.NET Mobile 控件提供了幾個用于傳輸或導航的控件:PhoneCall控件、Link控件和Command控件,PhoneCall控件僅用于ASP.NET Mobile控件并為自動呼叫生成標記和顯示電話號碼,可以使用該控件開發一個表單來列出各個姓名,用戶可以使用電話設備自動撥叫指定的號碼。
Link控件提供了一個基于文本的超級鏈接到移動頁面上的其他表單或任何URL,通過設置SoftkeyLabel屬性,該控件也支持SoftKey—用于一些移動電話上作為一個額外導航鍵(見圖6)。
<mobile:Link id="lnkfrmResults" runat="server" NavigateUrl="#frmResults">Go to Results</mobile:Link>圖6 移動電話上的SoftKeys
The Command控件與Visual FoxPro中的CommandButton類似,并被看作是一個比Link控件更具靈活性的控件。 Command控件基于設備的性能而以不同的形式顯示,對于移動電話,其通常以一個基于文本的標簽顯示并與Link控件相似,但是,在更多功能的PDA上,其以HTML顯示,該控件也支持SoftKeys。
<mobile:Command id="cmdSelectProduct" runat="server" softkeylabel="Next">Select Product</mobile:Command> 圖像顯示控件
Image控件和AdRotator控件是由ASP.NET Mobile控件提供的圖像顯示控件,Image控件用于把圖像嵌入到移動頁面并建立導航能力,如果圖像在請求的設備上不支持,則顯示替代文本。
<mobile:Image id="imgPic" runat="server" ImageUrl= "winpro.gif" NavigateUrl="http://www.microsoft.com" AlternateText="Windows 2000"></mobile:Image> AdRotator控件在一個Web表單上顯示廣告標題,每次表單加載或刷新時,顯示的廣告隨機改變,該控件使用一個XML文件來檢索內容進行顯示。
Calendar控件
Calendar控件是一個豐富格式類,可以在搜集或跟蹤基于日期的數據時使用。該控件自身顯示的差異依賴于所用的設備(見圖7),有許多可設置屬性來控制日歷如何顯示。
圖7 Calendar控件顯示差異依賴于設備的類型
驗證控件
ASP.NET Mobile控件提供了在移動頁面上可以用于驗證數據的各種控件,這些控件自動驗證給他們分配的控件的數據。如果數據沒有通過驗證,控件顯示一個自定義錯誤信息給客戶端。一個這些控件的列表以及在何時使用每個控件見表3。
表3 移動頁面可用的所有驗證控件列表
名稱功能
CompareValidator 比較兩個值
CustomValidator 提供自定義驗證
RangeValidator 驗證一個范圍
RegularExpressionValidator 驗證一個表達式
RequiredFieldValidator驗證請求數據
ValidationSummary 顯示一個驗證摘要
操縱數據
數據訪問是任何應用程序的一個至關重要部分,有很少一些Visual FoxPro應用程序不要求使用數據。移動應用程序也應當訪問動態數據,.NET Framework包含了一個數據訪問命名空間和類的集合,叫做ADO.NET。ASP.NET使用ADO.NET來執行它的數據處理,ADO.NET被特定地設計使用OLE DB或XML進行最佳化數據訪問。對象模型(見圖8)和ADO類似,并由一個Connection對象(提供連接到一個數據源)和一個Command對象(在數據庫上執行命令來返回或修改數據、運行存儲過程,等等)構成,此外,你可以使用ADO.NET作為一個強壯的、分層的、斷開連接的數據存儲器進行脫機數據工作,使用中心斷開連接對象、數據集合來進行排序、搜索、過濾、保存掛起修改和導航整個分層數據。在設計移動應用程序時,你可以使用兩種不同的途徑訪問數據:使用Visual FoxPro OLE DB provider來直接訪問表或移動應用程序調用一個Visual FoxPro COM 對象來檢索數據并返回XML。
圖8 ADO.NET對象模型
為直接數據訪問使用Visual FoxPro OLE DB Provider
開發者可以使用Visual FoxPro OLE DB provider來直接訪問表并綁定到控件上,數據可以在一個移動頁面中被顯示和修改,OLE DB provider執行一個COM接口集合,該集合允許訪問在標準行/列格式中的數據。OLE DB provider支持Visual FoxPro數據庫事件,你可以調用存儲過程(以及要求的參數)、訪問觸發器、規則和在數據庫容器中的默認值。在Visual FoxPro 8.0中,OLE DB provider被增強來為ADO.NET提供更大的兼容性。下列代碼示例顯示了如何從一個客戶的Visual FoxPro表檢索記錄并在一個List控件中顯示結果。
Dim connStr As String = "Provider=VFPOLEDB.1;Data Source=" & _ "C:\SAMPLES\DATA\TESTDATA.DBC" Dim strSQL As String = "SELECT * FROM Customer" Dim oda As New OleDbDataAdapter(strSQL, connStr) Dim ds As New DataSet() oda.Fill(ds, "CustomerInfo") 'Assign DataSet to List control lstCountry.DataTextField = "Country" lstCountry.DataValueField = "Country" lstCountry.DataSource = ds lstCountry.DataBind() 使用ADO.NET SQL Client Data Provider,同樣的功能可以用于訪問SQL Server數據(版本7.0和后期版本),提供的程序執行和OLE DB provider同樣的基類,下面前面示例使用SQL Server數據的代碼。Dim connStr As String = "Data Source=(local);" & _ "Initial Catalog=Northwind;" & _ "Integrated Security=SSPI;" & _ "Persist Security Info=False" Dim strSQL As String = "SELECT * FROM Customers" Dim oda As New SqlDataAdapter(strSQL, connStr) Dim ds As New DataSet() oda.Fill(ds, "CustomerInfo") 'Assign DataSet to List control lstCountry.DataTextField = "Country" lstCountry.DataValueField = "Country" lstCountry.DataSource = ds lstCountry.DataBind() 為數據訪問使用Visual FoxPro COM對象
Visual FoxPro是一個建立基于數據訪問和字符串處理的中間層組件的強大工具,它為開發者提供創建基于組件的應用程序的能力。Visual FoxPro 8.0為在COM對象里操縱數據時的更強大控制引入了新增功能。
Visual FoxPro 8.0提供對XML支持的增強—特別是增進了與Visual Studio .NET數據集合和diffgrams的兼容性。XMLAdapter類支持分層XML格式,這改進了Visual FoxPro從.NET生成并寫入到.NET數據集合進行內部操作的能力。Visual FoxPro 8.0 可以讀取和寫入到分層XML并轉換為獨立的本地臨時表,在XML是分層但是不代表一個關聯表集合時,它使用一個表表示一個多表SQL Join 命令的結果,只有一個Visual FoxPro臨時表被建立。* VFP示例XMLAdpater 代碼 && 建立XMLAdapter oXMLAdapter = NEWOBJECT("XMLAdapter") && 設置XML類型為Diffgram oXMLAdapter.IsDiffgram = .T. && 以schema信息添加一個臨時表 oXMLAdapter.AddTableSchema(customers) oXMLAdapter.AddTableSchema(orders) && 將表導出到分層XML oXMLAdapter.ToXML("cXML") Return cXML 下面是一個寫入到Visual Basic .NET 的代碼示例,其顯示了如何調用Visual FoxPro COM對象。' VB .NET調用VFP COM對象示例代碼 ' 調用VFP COM對象 Dim oCustomer As New Customer() ' 調用COM對象的方法來讀取數據 Dim cXML As String cXML = oCustomer.GetData() ' 讀取XML到數據集合 Dim ds As New DataSet() ds.ReadXml(New StringReader(cXML)) 擴展你的Visual FoxPro應用程序
在Visual FoxPro開發者使用ASP.NET Mobile控件時,他們可以利用現存應用程序來延伸到新用戶。信息可以從應用程序中被取出并顯示在移動設備上,使不能訪問信息的用戶能夠檢索數據。例如,銷售經理在路上需要他每個商店的銷售數字,在這種情況下,他可以使用一個允許訪問Internet的移動電話或Pocket PC來訪問一個ASP.NET移動Web站點,則站點傳送銷售信息到他的移動設備上。經理控制著什么時候訪問銷售數字,他不依靠某人從總部通過一個傳真機或電話來為其提供信息。Visual FoxPro信息可以通過使用OLE DB provider直接數據訪問或使用COM商業對象來檢索。通過使用ASP.NET Mobile控件,你可以給予用戶無論在何時何地得到其想要信息的能力,除非你沒有運行Visual FoxPro應用程序。結論作為移動設計技術和高速無線網絡的可用性在增加,客戶對基于移動的內容和功能來擴展Visual FoxPro應用程序的要求也在增加。因此,你可以利用ASP.NET Mobile控件的能力。通過可靠的移動Web應用程序來提供信息給客戶。ASP.NET Mobile控件提供了一個基礎結構來給開發者建立強壯的應用程序,控件與當前系統的外觀和感覺融合,它們有巨大的潛力來影響人們處理信息的方式和信息被訪問、使用的環境。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
