読み込んでいます...

这两天一直在寻找Windows Mobile 6.5 Widget如何进行数据访问,前面的一篇文章我说了可以使用XML作为数据交换进行远程的数据存储,当然Widget只是轻量级的东西,如果做的很复杂的话就不好了,所以今天这里我就说一下如何使用AJAX4,ADO.NET Data Service和Entity Framework进行数据访问,我估计大家看这个都会觉得有点头晕,没错,我头也晕,今天和国外的一个WM MVP讨论了一下这个事情,觉得这个让一个本来轻量的Widget变得更加复杂了,如果是XML的话,会简单很多,但是速度我很难保证。。

好了,话不多说,和朋友讨论之后就把他的文章直接翻译过来,当然,如果你有条件的话本地制作也是可以的,因为我本身没有Entiry Framework并且也安装不了,不过我运行了代码之后是完全可以运行的,所以说理论上没有任何问题。最后题外一下,微软发布东西可真够勤奋的,弄的我们开发人员很累,而且这些东西还不是最好用的。这里提醒一下,这里所用的几个技术现在还都是Preview版本,以后有什么更改我可不敢保证。

我们首先需要创建一个项目,我们可以使用VS进行项目的创建并删除掉Web.config和Default.aspx,因为这些是不需要的,然后我们可以创建一个基本的WM 6.5 Widget结构,如果你现在还不会,可以看看这篇文章,基础的讲解Windows Mobile 6.5 Widget的组成结构,OK,现在如果我们创建好了结构之后,就是创建数据了。

现在我们创建一个Entity Data Model以便和数据进行互动,选择添加新项,然后选择【ADO.NET Entity Data Model】,然后这里我们给他命名为AdventureWorksModel.edmx。通过Entity Data Model向导,特别是数据库连接,当创建完成后,选择Produce和ProductCategory两张表,其他的我们可以不用管,如果选择好了之后我们就可以看到下图了。

当我们做完了之后我们就要创建一个ADO.NET Data Service模板,这里我们创建一个名为AdventureWorksData.svc的模板。当我们做完了之后我们就要创建一个ADO.NET Data Service模板,这里我们创建一个名为AdventureWorksData.svc的模板。一旦项目被添加上去了我们就可以从中间获取我们想要的数据,下面代码中间红色部分就是用于更新AdventureWorksLTEntities数据模型的。

public class AdventureWorksData : DataService<AdventureWorksLTEntities>
{
  
// This method is called only once to initialize service-wide policies.
   public static void InitializeService(IDataServiceConfiguration config)
   {

      config.SetEntitySetAccessRule("*", EntitySetRights.All);
   }
}

搞定之后我们就需要在我们的项目中添加AJAX4了,我们可以直接下载AJAX4并放到我们的项目路径钟,因为AJAX是文件,所以我们可以下载的AJAX4是可以看到源代码的。:),我们可以放到如下图所示的地方。

 

然后我们的插件页面就是一个很简单的页面,注意前面我也写过,Windows Mobile 6.5是不能够支持ASP.NET页面的,如果真的要让我们的插件能够在ASP.NET下面运行就相当于在移动设备上安装一个ASP.NET服务器。。。所以我们的插件只能够包含HTML,CSS和JavaScript。我们可以直接创建一个HTML进行插件的内容编写。

OK,我们可以开始编写HTML了,我们的这个页面并没有任何一点的JS代码因为我们的JS代码全部包含在AJAX4库中了。示例代码如下所示。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>AdventureWorks – Products</title>
<style type="text/css">
    .sys-template
{display: none;}
    .rowSelected  
{background-color: yellow;}
</style>
<script src="MicrosoftAjax/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="MicrosoftAjax/MicrosoftAjaxTemplates.debug.js" type="text/javascript"></script>
<script src="MicrosoftAjax/MicrosoftAjaxAdoNet.debug.js" type="text/javascript"></script>

</head>
<body xmlns:sys="BLOCKED SCRIPTSys"
  xmlns:dataview
="BLOCKED SCRIPTSys.UI.DataView"
  xmlns:datacontext
="BLOCKED SCRIPTSys.Data.AdoNetDataContext"
  sys:activate
="*">
<table
    
sys:attach="datacontext"
    datacontext:sys-key
="dataContext"
    datacontext:serviceuri
="http://192.168.0.102:18886/AdventureWorksData.svc"
    
>
<thead>
    
<tr>
        
<th>Select Category</th>
    
</tr>
</thead>
<tbody
    
id="dvCategories"
    class
="sys-template"
    sys:attach
="dataview"
    dataview:sys-key
="categoriesKey"
    dataview:dataprovider
="{{ dataContext }}"
    dataview:autofetch
="true"
    dataview:selecteditemclass
="rowSelected"
    dataview:fetchoperation
="ProductCategories"
    dataview:fetchparameters
="{{ {$expand: ‘Products’} }}"
    
>
    
<tr sys:command="select">
        
<td>{{ Name }}</td>
    
</tr>
</tbody>
</table>
<table>
<thead>
    
<tr>
        
<th>Name</th>
    
</tr>
</thead>
<tbody
    
class="sys-template"
    sys:attach
="dataview"
    dataview:sys-key
="moviesKey"      
    dataview:data
="{binding selectedData.Products, source={{categoriesKey}} }">  
    
<tr>
        
<td>{binding Name}</td>
    
</tr>
</tbody>
</table>
</body>
</html>

上面是一个ADO.NET Data Service模板,这个模板通过AJAX4和我们的Service进行连接,编写完成后我们就可以编写config文件了,示例代码如下所示。

<?xml version="1.0" encoding="utf-8" ?>
<widget xmlns="http://www.w3.org/ns/widgets"
        id
="http://www.builttoroam.com/ProductWidget"
        version
="1.0">
  
<name>AdventureWorks Product Widget</name>
  
<description>
    Basic product widget based on ajax 4
  
</description>
  
<author href="http://www.jguoer.com"
            email
="soundbbg@live.cn">
    Guo Jing and Nick Randolph @ Built To Roam :)
  
</author>
  
<content src="Products.htm" type="text/html"/>
  
<access network="true"/>
  
<icon src="BTRLogo.png" />
  
<license>
    here is the license
  
</license>
</widget>

我们编写完成后就需要打包我们的程序了,打包直接用zip然后修改后缀为wgt即可,然后我们就可以放在我们的设备中用了。然后可以在设备中打开我们的项目,这里我偷懒,还是叫JQuery,可以看到他是不会更新并覆盖原来的程序的。

我们可以看到我们的程序已经正确运行了。

不过我觉得,这样做真的很复杂,开发复杂不说(其实本来HTML和CSS就能够很简单的),然后还需要远程服务,还需要是.NET 3.5 SP1,这在国内的,从主机上是很不好找的,然后在host这方面,也不是很好办,毕竟国内这方面的东西不是很多,对新事物的接受能力也没有国外强。在这里感谢国外有人MVP的指导,在和他探讨中了解了更多关于Widget方面的开发。原文如此。

  1. 诡异的西红柿 @

    [q]在VS中用ADO.NET Data Service模板还得安装sqlserver,
    MS的东西真是对机器的各项指标需求很高啊。
    得安装一堆一堆的IDE、SDK、tools…[/q]
    对啊,兼容性还不怎么样,比如我的电脑就装不了Entity Framework,原因是先装了.NET 3.5 SP1而没装VS 08 SP1。。

  2. SJ @

    在VS中用ADO.NET Data Service模板还得安装sqlserver,
    MS的东西真是对机器的各项指标需求很高啊。
    得安装一堆一堆的IDE、SDK、tools…

  3. 置顶的更新,文章汇总 : GuoJing's Blog | 用心对待每一行代码 @

    [...] Windows Mobile 6.5 Widget – 通过AJAX4,ADO.NET绑定数据 [...]

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »