开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev 快速开发产品管理示例程序

原创 2012年03月27日 14:42:39

在上一篇文章中,介绍了搭建RapidWebDev的运行环境和一些配置项,并且演示了将自己的业务模块添加到系统中。当然,上一张中的那个Product还算不上是个业务模块,所以本章我准备对其进行扩充。同时给大家展示下如果通过RapidWebDev实现一个完整的业务功能。

 

首先,我们按照以往的思路,先将上一章中的t_product进行一定的扩展,如下图:

 

在这里,我增加了一张T_PRODUCT_CATEGORY表,用于存放产品分类信息,分类为树型结构,另外增加了一个T_WAREHOUSE表,用于存放仓库信信息,然后在T_PRODUCT增加了相应的外键和一些扩展字段。有了数据表,就开始分别对分类和仓库建了对应的管理代码(CRUD, UI等),然后在产品页面对其调用。为了节约篇幅,这里就不贴这些代码了,反正是一大堆。

 

在RapidWebDev中,类似于分类,仓库信息这种数据量不是很大的表,完全可以使用HierarchyDate和ConcreteData所替代。使用RapidWebDev,我们只需要将保留T_PRODUCT表,然后在sitemap.config中加入产品分类和仓库信息的配置信息,就可以实现上述的功能,在需求简单的情况下,连代码编写都省下了。

<ItemText="业务模块">

      <ItemText="产品管理"PageUrl="~/ProductManagement/DynamicPage.svc"Value="Everyone" />

      <ItemText="产品分类管理"PageUrl="~/HierarchyDataManagement/DynamicPage.svc?HierarchyType=产品分类"Value="ProductGategoryManagement" />

      <ItemText="仓库管理"PageUrl="~/ConcreteDataManagement/DynamicPage.svc?ConcreteDataType=仓库"Value="DepotManagement" />

</Item>

先来张贴图,这样更能说明问题,O(∩_∩)O

 

这里的一些文字信息的中文定义有些不尽人意,如果有好的建议,大家可以留言。英文版里面是Profile,中文版叫简介感觉很别扭。先将就了吧,反正在资源文件里面,可以自己动手改。^_^

 

分类信息和仓库信息已经有了,接下来该是产品管理了,这下需要自己编码了,不过也不是很多了。由于我在写本文的时候,RapidWebDev 1.4.2刚好发布,所以我就直接在code发布的编译版上面做demo了,一些上一章中的代码文件可以直接copy过来,然后做一定的修改。

 

STEP1. 将我们需要的数据表添加到数据库中

create table T_PRODUCT (

   Id                     uniqueidentifier     not null default newid(),

   ApplicationId        uniqueidentifier     not null,

   CategoryId           uniqueidentifier     null,

   WarehouseId          uniqueidentifier     null,

   Name                  nvarchar(50)         not null,

   Model                 nvarchar(16)         null,

   Description          nvarchar(100)        null,

   CreatedBy             uniqueidentifier     not null,

   CreatedDate           datetime             not null default getdate(),

   LastUpdatedBy        uniqueidentifier     not null,

   LastUpdatedDate      datetime             not null default getdate(),

   constraint PK_T_PRODUCT primary key (Id)

)

 

STEP2. 在Product项目中添加一个Linq2SQL文件,命名为Product.dbml,将T_PRODUCT拖到LINQ的设计器里面,并将其重命名为Product.

 

STEP3. 为Product项目添加必要的引用,比如:BaoJianSoft.Common, Spring.Core等(如上图)

 

STEP4. 将上一章中的ProductManagement添加到Product项目,并为调整为像下面这样。(高亮部分为改动的代码)

public override QueryResults Query(QueryParameter parameter)

{

    LinqPredicate predicate = parameter.Expressions.Compile();

 

    string sortingExpression = null;

    if (parameter.SortExpression != null)

        sortingExpression = parameter.SortExpression.Compile();

    if (Kit.IsEmpty(sortingExpression))

        sortingExpression = "LastUpdatedDate ASC";

    using (ProductDataContext ctx = DataContextFactory.Create<ProductDataContext>())

    {

        int recordCount;

        var q = ctx.Products.AsQueryable();

        if (!Kit.IsEmpty(predicate.Expression))

            q = q.Where(predicate.Expression, predicate.Parameters);

 

        q = q.OrderBy(sortingExpression);

        recordCount = q.Count();

 

        var products = q.Skip(parameter.PageIndex * parameter.PageSize).Take(parameter.PageSize).ToList();

        return new QueryResults(q.Count(), products);

    }

}

这里需要注意的是ProductDataContext ctx = DataContextFactory.Create<ProductDataContext>(),这里通过RapidWebDev的DataContextFactory创建一个LINQ CONTEXT,所以需要在web.config将ProductDataContext添加到dataContexxt中,如下代码:

<dataContext>

                   <settings>

                            <settingname="MembershipDataContext"type="BaoJianSoft.Platform.Linq.MembershipDataContext, BaoJianSoft.Platform"connectionString="Global" />

                            <settingname="ExtensionModelDataContext"type="BaoJianSoft.ExtensionModel.Linq.ExtensionModelDataContext, BaoJianSoft.ExtensionModel"connectionString="Global" />

      <settingname="ProductDataContext"type="Product.ProductDataContext, Product"connectionString="Global" />

                   </settings>

         </dataContext>

 

STEP 5.  重写ProductManagement类的Detete方法,为系统添加删除功能:

public override void Delete(string entityId)

{

    Kit.NotNull(entityId, "entityId");

    Guid productId = new Guid(entityId);

    using (ProductDataContext ctx = DataContextFactory.Create<ProductDataContext>())

    {

        Product product = ctx.Products.FirstOrDefault(d => d.Id == productId);

        if (product == null) return;

        ctx.Products.DeleteOnSubmit(product);

        ctx.SubmitChanges();

    }

}

SETUP6. 这里,我们得先将上一章中的ProductManagement.dp.xml文件copy到当前解决方案的web\Spring\DynamicPage\Product\目录下。然后我们在这个文件里面进行扩展,实现一个完整产品模块。

 

首先,先为查询面板增加产品的规格型号和产品分类两个条件:

<QueryPanelHeaderText="产品管理">

  <TextBoxFieldName="Name"Label="产品名称: " />

  <TextBoxFieldName="Model"Label="规格型号:" />

  <ComboBoxFieldName="CategoryId"Label="产品分类:"Editable="true"

                   MinChars="2"FieldValueType="System.Guid"ForceSelection="true">

    <DynamicDataSourceUrl="/Services/HierarchyService.svc/json/FindByKeyword?limit=999"Method="GET"TextField="Name"ValueField="Id"QueryParam="q">

      <ParamName="hierarchyType"Value="产品分类" />

    </DynamicDataSource>

  </ComboBox>

</QueryPanel>

然后,我们给GridView增加几个显示column

<Fields>

        <FieldFieldName="Name"HeaderText="产品名称"Width="280" />

        <FieldFieldName="Model"HeaderText="规格型号" />

        <FieldFieldName="CategoryId"HeaderText="所属分类" >

          <Transform-CallbackType="Product.ShowCategoryById, Product"/>

        </Field>

        <FieldFieldName="WarehouseId"HeaderText="存放仓库" >

          <Transform-CallbackType="Product.ShowWarehouseById, Product"/>

        </Field>

        <FieldFieldName="CreatedDate"HeaderText="创建日期"/>

        <FieldFieldName="LastUpdatedDate"HeaderText="最后修改日期" />

      </Fields>

请注意这里的两个Transform-Callback,它能让我们能按照自己的意愿来显示列表中的值,我们只需要实现IGridViewFieldValueTransformCallback接口的Format方法,并将实现类指定在这里就可以了。在这里我只是简单的将分类和仓库的名称显示在列表中,代码如下:

if (Kit.IsEmpty(fieldValue))

    return string.Empty;

 

Guid id = new Guid(fieldValue.ToString());

HierarchyDataObject categoryObj = hierarchyApi.GetHierarchyData(id);

return categoryObj.Name;

ShowCategoryById

if(Kit.IsEmpty(fieldValue))

    return string.Empty;

 

Guid id = new Guid(fieldValue.ToString());

ConcreteDataObject warehouseObj = concreteDataApi.GetById(id);

return warehouseObj.Name;

ShowWarehouseById

 

STEP7. 实现编辑页面

在ProductManagement.dp.xml配置文件中,增加DetailPanel配置节

<DetailPanelHeaderText="产品详细信息"ShowMessageAfterSavedSuccessfully="false">

      <Type>Product.ProductDetailPanel, Product</Type>

      <SkinPath>~/Templates/Product/ProductDetail.ascx</SkinPath>

      <SaveButton />

      <CancelButton />

</DetailPanel>

这里的Type里面指定了在详细页面中的业务逻辑,这里指定的类必须实现IDetailPanelPage接口或者继承于DetailPanelPage类。ProductDetailPanel类稍微长一点,这里就不贴代码了,只对里面的几个DetailPanelPage重要方法简单介绍一下。

1.       Create方法,这个方法在新增数据到数据库时调用

2.       Update方法,这个方法在修改数据时调用

3.       Reset方法,这个方法在点击新增并继续按钮时调用

4.       LoadWriteableEntity方法,这个方法在点击列表中的修改按钮时调用

5.       LoadReadOnlyEntity方法,这个方法在点击列表中的查看按钮时调用,如果使用是系统的标准控件,此方法可以不用实现

 

最后,这DetailPanelPage类的子类中需要使用服务器端控件只需要向定义个和服务器端控件类型和名字相同的变量,然后为其指定[Binding]特性即可。如下:

[Binding]

protected TextBox TextBoxName;

 

SkinPath里面指定的是详细页面的模板,这个是标准的ASP.NET代码,就没有什么好说的了。

 

好了,这次就到这里了,最后来个完成图和代码下载[/Files/AlexHe/RapidWebDev.Product.rar]

 

 

 

相关文章推荐

【开源.NET】 分享一个前后端分离的轻量级内容管理框架(第二篇前后端交互数据结构分析)

这是 CMS 框架系列文章的第二篇,第一篇开源了该框架的代码和简要介绍了框架的目的、作用和思想,这篇主要解析如何把sql 转成标准 xml 配置文件和把前端post的增删改数据规范成方便后台解析的结构...

ERP系统中的BI应用案例之一

商业智能的一大重要应用是在数据量庞大而嘈杂的制造业中,可以说,制造业是非常需要商业智能的行业。因此,本期我们就将目光转向制造业,讨论一下商业智能在ERP业务中的应用。在文中,我们以一家鞋服制造企业为例...

开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev 入门

Rapid Web快速入门 系统需求 RapidWebDev需要的系统环境如下:  .NET Framework 3.5 SP1  ASP.NET MVC 1.0 ...

开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev

RapidWebDev开源框架是什么? RapidWebDev开发框架是一个完全开源的企业应用快速开发框架,它提供了在.Net中经常会用到的组件和服务,包括常用组件、业务平台、扩展模型和快速Web四...

开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev 基于XML配置的UI介绍

在前面几篇文章中我介绍了RaidWebDev的概况,然后通过过Product模块演示了如何使用RapidWebDev框架快速的开发一个业务功能。从本章开始,我将重点介绍RapidWebDev的XML可...

开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev 介绍

RapidWebDev(http://rapidwebdev.codeplex.com/)是一个完全开源的企业应用快速开发框架,它致力于是通过整合和创新对生产率和质量进行提高。现阶段,它整合了开发中需...

ASP.NET MVC 企业级实战 —— 创建用户权限管理示例程序(一)

网上有很多讨论ASP.NET MVC,也有讨论Jquery插件的,同时把两者结合起来做项目开发的却是比较少。 ASP.NET MVC是比较优秀的后台框架,而前台采用JQuery插件会做出比较漂亮...

敏捷开发产品管理系列之八:基于业务设计技术架构(兼谈12306性能问题)

本文是敏捷开发产品管理系列的第八篇。(专栏目录)在产品开发中,常常遇到产品性能问题,这些性能问题会很大程度上影响到产品的架构。但解决这些性能问题,切莫认为只是技术人员的事情,产品经理和产品总监也要参与...

敏捷开发产品管理系列之五:预估会议

本文是敏捷开发产品管理系列的第五篇。(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理)粗估会议是一个...

敏捷开发产品管理系列之一:序言及设立迭代目标

本文是敏捷开发产品管理系列的第一篇。(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理)序言之前的“敏...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev 快速开发产品管理示例程序
举报原因:
原因补充:

(最多只允许输入30个字)