信息系统开发平台OpenExpressApp - 内置支持的模块类型

  信息系统组成层次可以按照下图所示层次进行划分:系统-子系统-主模块-辅助模块/对象。在OEA中的模块就是组合系统一个较为独立的功能块,例如入库单为主模块,选择产品为主模块的辅助模块。本篇主要讲解OEA对模块的内置支持。

OEA中模块目前支持模块类型主要有以下几种:

    public enum ModuleType
    {
         List,     
// 列表类窗体,例如材料字典
        Bill,       // 单据类窗体,例如入库单
        Query,   // 查询类窗体,例如项目查询
        Popup,  // 弹出类二级窗体 ,例如选择产品
    }

系统对每类模块都实现了一个模板Templete,每个模块模板其实就是每类模块的一个具体实现单元,代码位置如下:

下面我将单独对每个模块进行简单的介绍。

列表模块 List

描述

列表模块是处理字典类对象的管理模块,包含基本的添加、删除、刷新和保存等功能。

界面

这类模块相对来处理的业务比较简单,界面样式就是一个工具条和一个列表控件。

代码片段

    [Serializable]
    [Table]
    [DefaultObject(Catalog 
= "基础字典"ModuleType=ModuleType.List), Label("单位转换系数")]
    
public class UnitFactor : GBusinessBase<UnitFactor>
    {}
说明

保存是将本地修改的多条记录进行批量保存。

列表模块 泊靠样式

说明

泊靠列表样式列表是泊靠在主模块周围的一个列表模块,双击时可以辅助主模块添加数据

界面

在主模块下方显示,双击列表可以给附加View视图控件添加一条记录,点击【选择】时可以一次添加多条记录

代码片段

    [Command("SelectBQItem", ToolbarType = ToolbarType.Child, TargetObjectType = typeof(PBSBQItem), Label = "选择清单", ToolTip = "选择清单")]
    
public class SelectBQItemCommand : WPFListViewCommand
    {
        public override void Execute(ListObjectView view)
        {
            
if (!view.PadDict.ContainsKey(typeof(BQItem)))
            {
                ListForm pad 
= OpenApplication.CreateViewListPad(view, typeof(BQItem)) as ListForm;
                Dictionary
<stringstring> propertyMaps = new Dictionary<stringstring>();
                propertyMaps.Add(
"Name""Name");
                propertyMaps.Add(
"Code""Code");
                propertyMaps.Add(
"Unit""Unit");
                propertyMaps.Add(
"BqDbId""BqDbId");
                pad.View.AttachBehavior(
new SelectViewBehavior(view, propertyMaps));
            }

        }
    }

单据模块 Bill

描述

单据模块是管理软件中最常用模块之一,例如入库单等就是单据类中很典型的模块。

界面

界面样式一般为左边单据列表,点击列表后在右边显示详细信息。详细信息上部分为主表信息,下面为子表信息,子表信息又可以嵌套子表信息。

代码片段

    [Serializable]
    [Table]
    [DefaultObject(Catalog 
= "模板管理"), Label("合同模板")]  // DefaultObject默认为Bill样式
    public class ContractSubjectType : GBusinessBase<ContractSubjectType>
    {}
说明

  单据实行单条记录保存,首先从服务器获取列表,然后点击左边列表某一记录后获取当条记录的所有信息,在右边更改后点击保存只保存当条信息。当记录更改,并切换左边列表选择项时,系统自动执行保存修改的记录。

查询模块 Query

描述

查询模块也是管理软件中最常用模块之一,主要用来对系统单据模块中产生的数据进行查找分析。

界面

左边为查询面板,可以为查询面板或者导航面板,或者两者都有。如果有查询面板,则需要点击【查询】按钮触发获取数据,如果为导航面板,则点击导航控件时触发获取数据。一个查询模块可以查询一个或者多个内容。

代码片段

    [Serializable]
    [DefaultObject(Catalog 
= "指标管理"ModuleType = ModuleType.Query), Label("技术经济指标")]
    [NavigateQueryType(
typeof(ProjectIndicatorNavigateCriteria), Header = "选择项目PBS")]
    [NotAllowEdit, NotAllowNew, NotAllowRemove]
    
public class ProjectIndicatorQueryObject: BaseQueryObject
    {
        
protected override void AddBusinessObjects()
        {
            AddBusinessObject(
typeof(ProjectPBSProperty));
            AddBusinessObject(
typeof(ContractProperty), ViewType.DetailView);
            AddBusinessObject(
typeof(ProjectCostIndicator));
            AddBusinessObject(
typeof(ProjectIndicatorEntity));
            AddBusinessObject(
typeof(ProjectIndicatorMeasure));
            AddBusinessObject(
typeof(ProjectIndicatorResource));
            AddBusinessObject(
typeof(ProjectIndicatorResourceIsCentral));
            AddBusinessObject(
typeof(ProjectIndicatorRatio));
            AddBusinessObject(
typeof(ProjectIndicatorOther));

        }
    }
   [Serializable]
    [BusinessObject, Label(
"工程属性")]
    [NotAllowEdit, NotAllowNew, NotAllowRemove]
    
public partial class ProjectPBSProperty : GBusinessBase<ProjectPBSProperty>
    {}
说明

如果同时查询多个独立的内容时,要求每个内容的查询面板一样。查询后,每个内容单独页签显示,每个页签显示可以为列表样式和详细信息样式,默认为列表样式。

弹出模块 Popup

描述

弹出模块一般为辅助主模块完成功能,如选择类功能。

界面

界面分为上下两部分,上面为列表控件,下面为工具条,工具条一般有【确定】和【取消】按钮。

代码片段

    [Command("SelectPBSCommand", ToolbarType = ToolbarType.Child, TargetObjectType = typeof(ProjectPBS), Label = "选择PBS", ToolTip = "选择PBS")]
    
public class SelectPBSCommand : WPFListViewCommand
    {
        public override void Execute(ListObjectView view)
        {
            var form 
=OpenApplication.CreatePopupForm(typeof(PBS), (view.Parent.Data as GIX4.Library.Project).PBSTypeId);
            
bool? result = GApplication.ShowDialog(form, new DialogOptions()    //弹出弹出窗体
            {
                AllowResize 
= true,
                DialogTitle 
= "选择PBS",
                DialogSize 
= new Size(800600)
            },
                
nullnew string[] { CommandNames.SelectAll }
            );

            
if (result == true)
            {...
}
        }
    }

说明

支持多选

创建模块OpenApplication

OpenApplication是支持用户创建模块的类,其中包含多个静态方法。

    public class OpenApplication
    {
        public static object CreateModuleForm(BusinessObjectInfo boInfo)
        {
            Debug.Assert(boInfo.IsDefaultObject, 
"只有默认对象才允许调用CreateModuleForm");
            
//根据类型通过模板生成UI
            object f = null;
            
switch (boInfo.DefaultObjectAttribute.ModuleType)
            {
                
case ModuleType.List:
                    f 
= new ListForm(boInfo.BOType);
                    
break;
                
case ModuleType.Query:
                    f 
= new QueryForm(boInfo.BOType);
                    
break;
                
default:
                    f 
= new ListDetailForm(boInfo.BOType);
                    
break;
            }
            
return f;
        }

   //根据类型通过模板生成UI
        public static object CreateListForm(Type boType, params Object[] getListParam)
        {
            return new ListForm(boType, getListParam);
        }

        //根据类型通过模板生成UI
        public static object CreatePopupForm(Type boType, params Object[] getListParam)
        {
            return new PopupForm(boType, getListParam);
        }

        
public static object CreateApplicationListPad(Type boType, params Object[] getListParam)
        {...
}

 

更多内容: 开源信息系统开发平台之OpenExpressApp框架.pdf

posted on 2009-11-12 14:34  周 金根  阅读(2097)  评论(6编辑  收藏

导航