ABP开发框架前后开发系列——(6)ABP基本界面处理和省级城市行政区域管理模块开发
浏览:649 次

最近,没有关于更新ABP框架的文章。我一直在研究和包装相关接口。最后,我已经结束了,继续整理我的开发经验。上次,我在文章中介绍了字典模块的管理,以及对所有记录的定期访问、对条件查询记录的访问以及创建、更新和删除这些接口的实现。本章继续深入介绍ABP框架在实际项目中的使用。本章随机排列ABP基本界面,并显示已完成的省级城市行政区管理模块的内容。
1.ABP通用处理接口
根据ABP框架默认提供的一些接口,我们可以在服务器端封装相关的Web API接口(由于动态API的便利性,实际上只需要完成ApplicationService层)。在上一节中,我们介绍了获取条件查询记录、创建、更新和删除这些接口以及扩展自己的自定义业务接口的实现和处理。下面是字典模块的接口关系。
形象
字典管理界面列出字典类型,并以页面形式显示字典类型下的字典数据。页面显示使用页面控件进行显示。
形象
添加或编辑表单的界面如下
形象
或批量字典数据输入
形象
这个精确或模糊的查询是在app服务层中定义的。在app服务层接口类中,重写CreateFilteredQuery可以设置GetAll的查询规则,重写ApplySorting可以指定列表的排序顺序。
形象
2、ABP通用查询界面细化
上述内容概要基本上实现了传统数据的分页查询。我们可以看到,对于字典数据,分页查询条件是在DictDataPagedDto中定义的,这是我们定义的分页条件,如下面的代码所示。
///<摘要>
///用于基于条件的分页查询
///摘要>
公共类DictDataagedDto:PagedResultRequestDto
{
///<摘要>
///字典类型ID
///摘要>
公共虚拟字符串DictType_ID{get;set;}
///<摘要>
///类型名称
///摘要>
公共虚拟字符串名称{get;set;}

///<摘要>
///指定值
///摘要>
公共虚拟字符串值{get;set;}
///<摘要>
///备注
///摘要>
公共虚拟字符串备注{get;set;}
}
对于这个类文件,我们通常将相关的业务模块放在一个文件中。例如,与字典数据相关的DTO被放置在DictDataDto文件中以便于管理,如下所示。
以上是字典模块的基本介绍。事实上,当我们开发业务模块并输入数据时,我们需要采取判断步骤,例如不允许重复名称。创建新记录和更新现有记录需要进行必要的判断,以确保数据的有效性和不可重复性。
例如,对于省管理界面,我们无法运行以重复输入省的名称,因此我们需要在输入或更新数据时进行必要的存在判断。
形象
上述处理是如何实现的。
主界面实现代码如下所示。
if(字符串.IsNullOrEmpty(ID))
{
//判断存在条件
var countDto=new ProvidePagedDto(){ProvideName=this.txtProvide.Text};
bool isExist=等待ProvinceApiCaller.Instance。计数(countDto)>0
if(isExist)
{
消息DxUtil。显示提示(“省份名称已存在,请选择其他名称”);
this.txtProvince.Focus();
回来
}
其他的

{
//创建新记录
tempInfo=等待ProvinceApiCaller.Instance.Create(tempInfo);
}
}
其他的
{
//判断存在条件,排除该记录同名的情况
var countDto=新省份PagedDto(){ProvinceName=this.xtProvince.Text,ExcludeId=ID ToInt64()};
bool isExist=等待ProvinceApiCaller.Instance。计数(countDto)>0
if(isExist)
{
消息DxUtil。显示提示(“省份名称已存在,请选择其他名称”);
this.txtProvince.Focus();
回来
}
其他的
{
//更新记录
tempInfo=等待ProvinceApiCaller.Instance.Update(tempInfo);
}
}
已保存进程数据(this.btnOK,new EventArgs());
这DialogResult=System.Windows.Forms.DialogResult.OK;
我们发现这里添加了一个Count函数来判断传入的条件是先前的分页请求条件。
bool isExist=等待ProvinceApiCaller.Instance。计数(countDto)>0
让我们看看app服务层的接口实现,如下所示。

///<摘要>
///获取指定的数量