当前位置: 首页 > news >正文

建网站合同我是做网站的 哪里有单接

建网站合同,我是做网站的 哪里有单接,网站备案的作用,网站建设 环保 图片文章目录 原理实现应用测试 之前我们实现了Employee#xff0c;Alarm管理模块以及通用查询应用层。 Employee的集合查询业务#xff0c;是通过重写CreateFilteredQueryAsync方法#xff0c;来实现按组织架构查询的过滤条件。 我们将这段逻辑代码提取到通用查询应用层中Alarm管理模块以及通用查询应用层。 Employee的集合查询业务是通过重写CreateFilteredQueryAsync方法来实现按组织架构查询的过滤条件。 我们将这段逻辑代码提取到通用查询应用层中便可实现在任何业务的按组织架构查询。 原理 查询依据 在Abp中组织架构和用户是通过中间表AbpUserOrganizationUnits实现多对多的关系。模型如下图所示 查询目标业务对象HealthAlarm关联了业务用户HealthClient因业务用户与鉴权用户IdentityUser共享同一个Id因此可以通过查询组织架构关联的User查询到业务对象。 通过LINQ查询 EmployeeAppService中CreateFilteredQueryAsync方法组织架构的过滤条件代码如下 var organizationUnitUsers await organizationUnitAppService.GetOrganizationUnitUsersAsync(new GetOrganizationUnitUsersInput() {Id input.OrganizationUnitId.Value }); if (organizationUnitUsers.Count() 0) {var ids organizationUnitUsers.Select(c c.Id);query query.Where(t ids.Contains(t.Id)); } else {query query.Where(c false); }通过反射和动态Lambda表达式查询 CreateFilteredQueryAsync是通过业务用户的IRepository获取实体的IQueryable 然后通过query.Where()实现了按组织架构的过滤条件。 IQueryable是一泛型类接口泛型参数是实体类。要想在任意实体实现Where的过滤条件我们使用动态拼接语言集成查询 (LINQ) 的方式实现通用查询接口有关LINQ表达式请阅读 LINQ 教程和有关 Lambda 表达式的文章。 实现 定义按组织架构查询过滤器IOrganizationOrientedFilter接口查询实体列表Dto若实现该接口将筛选指定 OrganizationUnitId 下的用户关联的实体。 public interface IOrganizationOrientedFilter {Guid? OrganizationUnitId { get; set; } }重写CreateFilteredQueryAsync方法代码如下 protected override async TaskIQueryableTEntity CreateFilteredQueryAsync(TGetListInput input) {var query await ReadOnlyRepository.GetQueryableAsync();query await ApplyOrganizationOrientedFiltered(query,input);return query; }对于OrganizationUnit服务其依赖关系在应用层查找指定组织架构的用户将在CurdAppServiceBase的子类实现。创建一个抽象方法GetUserIdsByOrganizationAsync protected abstract TaskIEnumerableGuid GetUserIdsByOrganizationAsync(Guid organizationUnitId)创建应用过滤条件方法ApplyOrganizationOrientedFiltered在此实现拼接LINQ表达式代码如下 protected virtual async TaskIQueryableTEntity ApplyOrganizationOrientedFiltered(IQueryableTEntity query, TGetListInput input) {if (input is IOrganizationOrientedFilter HasPropertyTEntity(UserId)){var property typeof(TEntity).GetProperty(UserId);var filteredInput input as IOrganizationOrientedFilter;if (filteredInput ! null filteredInput.OrganizationUnitId.HasValue){var ids await GetUserIdsByOrganizationAsync(filteredInput.OrganizationUnitId.Value);Expression originalExpression null;var parameter Expression.Parameter(typeof(TEntity), p);foreach (var id in ids){var keyConstantExpression Expression.Constant(id, typeof(Guid));var propertyAccess Expression.MakeMemberAccess(parameter, property);var expressionSegment Expression.Equal(propertyAccess, keyConstantExpression);if (originalExpression null){originalExpression expressionSegment;}else{originalExpression Expression.Or(originalExpression, expressionSegment);}}var equalExpression originalExpression ! null ?Expression.LambdaFuncTEntity, bool(originalExpression, parameter): p false;query query.Where(equalExpression);}}return query; }请注意可应用过滤的条件为 input需实现IOrganizationOrientedFilter接口实体必须包含UserId字段 否则将原封不动返回IQueryable对象。 应用 在上一章Alarm管理模块中我们已经写好了AlarmAppService我们需要为其实现GetUserIdsByOrganizationAsync方法。改造AlarmAppService代码如下 public class AlarmAppService : ExtendedCurdAppServiceBaseMatoapp.Health.Alarm.Alarm, AlarmDto, AlarmDto, AlarmBriefDto, long, GetAllAlarmInput, GetAllAlarmInput, CreateAlarmInput, UpdateAlarmInput, IAlarmAppService {private readonly IOrganizationUnitAppService organizationUnitAppService;public AlarmAppService(IOrganizationUnitAppService organizationUnitAppService,IRepositoryMatoapp.Health.Alarm.Alarm, long basicInventoryRepository) : base(basicInventoryRepository){this.organizationUnitAppService organizationUnitAppService;}protected override async TaskIEnumerableGuid GetUserIdsByOrganizationAsync(Guid organizationUnitId){var organizationUnitUsers await organizationUnitAppService.GetOrganizationUnitUsersAsync(new GetOrganizationUnitUsersInput(){Id organizationUnitId});var ids organizationUnitUsers.Select(c c.Id);return ids;} }在GetAllAlarmInput中实现IOrganizationOrientedFilter接口代码如下 public class GetAllAlarmInput : PagedAndSortedResultRequestDto, IOrganizationOrientedFilter {public Guid? OrganizationUnitId { get; set; }... } 测试 创建一些组织架构命名“群组” 在不同“群组”下创建一些客户Client 在告警管理页面中创建一些告警并将这些告警分配给不同的客户 在客户管理中通过选择不同的组织架构查询当前“群组”下的客户告警
http://www.pierceye.com/news/402137/

相关文章:

  • 南昌县住房和城乡建设局网站外海网站如何做网站的推广
  • 重庆网站推广报价wordpress全景图
  • 做那个的网站谁有建立什么指标体系和评价程序规范
  • 新旧网站对比全国建设厅网站
  • 有经验的番禺网站建设做球服的网站有哪些
  • 临泉建设网站互联网行业都有哪些工作
  • 甘肃省嘉峪关建设局网站做游戏交易网站
  • 校园网站做自己的广告惠州网络问政平台官网
  • 网站建设使用的什么和国外做贸易用什么网站
  • 苏州自助建站模板宁波seo快速优化
  • 做网站的可行性分析网络推广渠道公司
  • 企业网站优化兴田德润优惠汕头网络营销推广该怎么做
  • 安徽省住房和建设厅网站企业网站建设硬件
  • 网站怎样运营网站文章收录
  • 怎么制作微网站wordpress 自动安装
  • 建设软件网站七台河新闻直播
  • 深圳 公司网站设计网站建设得花多少钱
  • 社交型网站首页面设计分析宁夏电建网站
  • 网站开发需要掌握的知识中国建设网官方网站
  • 制作网站素材网页设计代码步骤
  • 做微信头图的网站网页编程语言有哪几种
  • 医生工作室网站建设男女激烈做羞羞事网站网站韩剧
  • 网站里面网友点评怎么做网站开发需要资质吗
  • gta 买房网站建设中软件下载免费大全网站
  • 中国移动网站专门拍短视频的公司
  • 网站制作网站建设报价南通优化网站怎么收费
  • 网站的连接二维码怎么做wordpress.org账号
  • 优秀的网站有哪些内容wordpress重新安装删除哪个文件
  • 网站建设与发布需要什么手机端开发app
  • 无锡做网站无锡网站设计2345网址导航手机上网导航下载