为Visual FoxPro开发者建立移动解决方案

时间:2022-01-28 13:21:50

为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中可用的程序语言来建立无线应用程序。

为Visual FoxPro开发者建立移动解决方案 图1   ASP.NET Mobile控件利用ASP.NET使开发者能够建立目标是多个移动设备的移动Web应用程序和站点 为Visual FoxPro开发者建立移动解决方案 图2   为更易于使用,ASP.NET Mobile控件被集成到Visual Studio .NET开发环境中
ASP.NET Mobile控件也支持内置标记页数,这是自动分组数据的能力,其依赖于设备的性能。你可以使用在ASP.NET Mobile控件中的内置分页属性,或者可以定义自定义标记页数。例如,如果一个WAP电话仅支持5行数据显示,ASP.NET Mobile控件自动建立next 和back 选项,所以用户可以更加容易地移动整个数据集合。
ASP.NET Mobile控件如何工作 ASP.NET Mobile控件是一个对ASP.NET的扩展,ASP.NET Mobile控件建立在.NET Framework和ASP.NET之上,该控件实际上继承自ASP.NET Web Forms控件(见图3)。 为Visual FoxPro开发者建立移动解决方案 图3  ASP.NET Mobile控件继承自ASP.NET Web Forms控件
步骤:
1. Web客户端请求Web页。
2. 该请求在Internet上传播并被IIS接受到。
3. 该请求然后被.NET Framework处理。
4. 所请求Web页由ASP.NET完成。
5. ASP.NET Mobile控件处理任何移动设备请求。
6. Web页然后返回到客户端。
ASP.NET Mobile控件在运行时计算设备性能。对于每个放置在移动页面上的控件,有一个相应的适配器来呈现适合于该设备的标记。 因此,你在页面上以控件的形式设计功能事项,然后在请求进来时,适配器被选择来显示请求设备的功能(见图4)。例如,在一个多格式设备上的日历可以以表格布局的方式显示,并通过从表格选择事项来为选择日期提供一个美观的丰富格式体验;或在一个小型移动电话上,通过改变显示来选择月,然后从该月选择星期。所有你做的这些是操作移动日历,将其放置在页面上,运行时刻的响应建立在移动设备能够处理什么的基础上。
为Visual FoxPro开发者建立移动解决方案

图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控件的比较

为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>
为Visual FoxPro开发者建立移动解决方案
图5   ObjectList控件的示例输出
表2显示了一个列表和选择控件之间的比较。
为Visual FoxPro开发者建立移动解决方案
传输控件
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>
为Visual FoxPro开发者建立移动解决方案
图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),有许多可设置属性来控制日历如何显示。
为Visual FoxPro开发者建立移动解决方案图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。
为Visual FoxPro开发者建立移动解决方案图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控件提供了一个基础结构来给开发者建立强壮的应用程序,控件与当前系统的外观和感觉融合,它们有巨大的潜力来影响人们处理信息的方式和信息被访问、使用的环境。