信息系统开发平台OpenExpressApp - 内置支持的模块类型
信息系统组成层次可以按照下图所示层次进行划分:系统-子系统-主模块-辅助模块/对象。在OEA中的模块就是组合系统一个较为独立的功能块,例如入库单为主模块,选择产品为主模块的辅助模块。本篇主要讲解OEA对模块的内置支持。
OEA中模块目前支持模块类型主要有以下几种:
{
List, // 列表类窗体,例如材料字典
Bill, // 单据类窗体,例如入库单
Query, // 查询类窗体,例如项目查询
Popup, // 弹出类二级窗体 ,例如选择产品
}
系统对每类模块都实现了一个模板Templete,每个模块模板其实就是每类模块的一个具体实现单元,代码位置如下:
下面我将单独对每个模块进行简单的介绍。
列表模块 List
描述
列表模块是处理字典类对象的管理模块,包含基本的添加、删除、刷新和保存等功能。
界面
这类模块相对来处理的业务比较简单,界面样式就是一个工具条和一个列表控件。
代码片段
[Table]
[DefaultObject(Catalog = "基础字典", ModuleType=ModuleType.List), Label("单位转换系数")]
public class UnitFactor : GBusinessBase<UnitFactor>
{}
保存是将本地修改的多条记录进行批量保存。
列表模块 泊靠样式
说明
泊靠列表样式列表是泊靠在主模块周围的一个列表模块,双击时可以辅助主模块添加数据
界面
在主模块下方显示,双击列表可以给附加View视图控件添加一条记录,点击【选择】时可以一次添加多条记录
代码片段
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<string, string> propertyMaps = new Dictionary<string, string>();
propertyMaps.Add("Name", "Name");
propertyMaps.Add("Code", "Code");
propertyMaps.Add("Unit", "Unit");
propertyMaps.Add("BqDbId", "BqDbId");
pad.View.AttachBehavior(new SelectViewBehavior(view, propertyMaps));
}
}
}
单据模块 Bill
描述
单据模块是管理软件中最常用模块之一,例如入库单等就是单据类中很典型的模块。
界面
界面样式一般为左边单据列表,点击列表后在右边显示详细信息。详细信息上部分为主表信息,下面为子表信息,子表信息又可以嵌套子表信息。
代码片段
[Table]
[DefaultObject(Catalog = "模板管理"), Label("合同模板")] // DefaultObject默认为Bill样式
public class ContractSubjectType : GBusinessBase<ContractSubjectType>
{}
单据实行单条记录保存,首先从服务器获取列表,然后点击左边列表某一记录后获取当条记录的所有信息,在右边更改后点击保存只保存当条信息。当记录更改,并切换左边列表选择项时,系统自动执行保存修改的记录。
查询模块 Query
描述
查询模块也是管理软件中最常用模块之一,主要用来对系统单据模块中产生的数据进行查找分析。
界面
左边为查询面板,可以为查询面板或者导航面板,或者两者都有。如果有查询面板,则需要点击【查询】按钮触发获取数据,如果为导航面板,则点击导航控件时触发获取数据。一个查询模块可以查询一个或者多个内容。
代码片段
[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));
}
}
[BusinessObject, Label("工程属性")]
[NotAllowEdit, NotAllowNew, NotAllowRemove]
public partial class ProjectPBSProperty : GBusinessBase<ProjectPBSProperty>
{}
如果同时查询多个独立的内容时,要求每个内容的查询面板一样。查询后,每个内容单独页签显示,每个页签显示可以为列表样式和详细信息样式,默认为列表样式。
弹出模块 Popup
描述
弹出模块一般为辅助主模块完成功能,如选择类功能。
界面
界面分为上下两部分,上面为列表控件,下面为工具条,工具条一般有【确定】和【取消】按钮。
代码片段
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(800, 600)
},
null, new string[] { CommandNames.SelectAll }
);
if (result == true)
{...}
}
}
说明
支持多选
创建模块OpenApplication
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)
{...}