文章类型

原创将Abp默认事件总线改造为分布式事件总线

将Abp默认事件总线改造为分布式事件总线
定义NotificationEventData,用于传递自定义事件。set;set;set;set;在消费者端,定义一个事件处理器,用于处理自定义事件。在生产者端,触发自定义事件。运行程序,可以看到消费者端打印出了自定义事件。

原创[学习笔记]批量迁移数据库文件

[学习笔记]批量迁移数据库文件
更多移动用户数据库内容请查看官方文档 https://learn.microsoft.com/zh-cn/sql/relational-databases/databases/move-user-databases。注意,从 SQL Server 2008 R2 (10.50.x) 开始,全文目录已集成到数据库中,而不是存储在文件系统中。因此如果你的数据库是SQL Server 2008 R2(10.50.x) 之前的版本,你需要分别迁移数据库文件和日志文件。首先复制数据库文件到新的磁盘位置,比如。

原创[学习笔记]在CentOS7中用Docker方式安装Jenkins

[学习笔记]在CentOS7中用Docker方式安装Jenkins
Docker in Docker (以下简称 DinD)可以在 Container 中直接运行一个 Docker Daemon ,然后使用 Container 中的 Docker CLI 工具操作容器。容器内的Docker Daemon对外提供服务,每个运行中的容器,都是一个进程,这个进程都托管在Docker Daemon中,镜像和容器都在一个隔离的环境。Jenkins在构建时,需要一个独立的Docker环境用于打包镜像。网桥允许连接到同一网桥网络的容器进行通信,创建一个名为jenkins的网桥网络。

原创将ECharts图表插入到Word文档中

将ECharts图表插入到Word文档中
首先指定一个option,在官方示例 https://echarts.apache.org/examples/zh/index.html 中,随意找一个柱状图的sample,复制option对象内容到新创建的option.json文件中。echarts-convert在github上有众多版本,echarts-convert的代码来源于这里:https://github.com/wadezhan/billfeller.github.io/issues/85。将下载好的可执行文件解压放置在项目根目录下的。

原创DocTemplateTool - 可根据模板生成word或pdf文件的工具

DocTemplateTool - 可根据模板生成word或pdf文件的工具
你是否经常遇到这样的场景:产品运营有着大量的报告需求,或者给客户领导展现每周的运营报告?这些文档类的任务可以交给运营同事,他们负责文档排版和样式,你作为开发人员你只需要提供数据源,和一个映射表,告诉制作文档的人哪些字段可供使用。这样一来分工明确,减少了很多不必要的沟通成本。

原创[学习笔记]TypeScript查缺补漏(一):类

[学习笔记]TypeScript查缺补漏(一):类
private在编译后JavaScript中没有影响,仅对TypeScript编译器有影响,而使用#符号声明的私有属性在JavaScript中会被编译为常规的私有属性。Getter/Setter可以在不改变属性的访问权限的情况下,对属性的值进行更精细的控制。装饰器是使用 @ 符号来标识的特殊类型的函数,可以用来扩展类或方法的行为。尽管箭头函数是在对象的方法中定义的,但是它不会捕获到调用该方法的对象作为自己的this上下文。在箭头函数中,this不指向调用该函数的对象,而是指向定义该箭头函数时的上下文。

原创[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发

[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发
每个BlazorWebView控件包含根组件(RootComponent)定义,ComponentType是在应用程序启动时加载页面时的类型,该类型需要继承自Microsoft.AspNetCore.Components.IComponent,由于我们的导航是由MAUI处理的,因此我们不需要使用Blazor路由,直接使用Razor组件。开发应用需要一个独立的host项目。中引入,还有一种是使用并置的js文件,这种方式是所谓的"CodeBehind",因为更利于组织代码,这里我们使用并置的js文件。

原创[MAUI]实现动态拖拽排序网格

[MAUI]实现动态拖拽排序网格
拖拽控件悬停在当前控件上方时,将IsBeingDraggedOver设置为true,通知当前控件正在有拖拽控件悬停在其上方,同时在服务列表中寻找当前正在被拖拽的服务,将DropPlaceHolderItem设置为当前控件。当以比较快的速度,拖拽Tile经过较多的位置时,后面的Tile会短暂地替代原先的位置,导致拖拽中的Tile不在期望的Tile上方,而拖拽中的Tile与错误的Tile产生了交叠从而触发DraggedOver事件,导致错乱。其是在松开手指之后才向列表提交条目位置变更的命令。

原创[MAUI]在.NET MAUI中实现可拖拽排序列表

[MAUI]在.NET MAUI中实现可拖拽排序列表
NET MAUI 中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件。在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中,列表中显示不同大小的磁贴(Tile)并且可以拖拽排序。使用.NET MAU实现跨平台支持,本项目可运行于Android、iOS平台。

原创利用Abp过滤器实现业务数据“回收站”功能

利用Abp过滤器实现业务数据“回收站”功能
利用这个原理,可以将“软删除”行为认为是放入了“回收站”,而将“恢复”行为认为是从“回收站”中取出。将记录硬删除的行为认为是“永久删除”, 将全部已“软删除”的记录硬删除,则是“清空回收站”在DbContext中,重写CreateFilterExpression方法,当启用了“仅查看软删除”过滤器时,自动过滤软删除的实体。在删除记录时,通过调用仓储的Delete()方法,将记录放入“回收站”中。回收站是当用户删除一条记录时,不是直接从数据库中删除,而是将其放入“回收站”,以便用户可以在需要时恢复数据。

原创怎样优雅地增删查改(八):按用户关系查询

怎样优雅地增删查改(八):按用户关系查询
查询目标业务对象HealthAlarm关联了业务用户HealthClient,因业务用户与鉴权用户IdentityUser共享同一个Id,因此可以通过查询用户关系关联的User,查询到业务对象。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。

原创怎样优雅地增删查改(七):按用户查询

怎样优雅地增删查改(七):按用户查询
若指定 UserId 为 Guid.Empty,则使用当前登录用户的 UserId。查询实体列表Dto若实现该接口,将筛选指定 UserId 下的关联的实体。ICurrentUser是Abp的一个服务,用于获取当前登录用户的信息。打开客户详情页面,点击“告警”标签页,可以看到该客户下的告警列表。告警创建完成后,进入客户管理,在右侧客户列表中点击“查看详情”在告警管理页面中,创建一些告警,并将这些告警分配给不同的客户。在不同“群组”下创建一些客户(Client)创建一些组织架构,命名“群组”

原创怎样优雅地增删查改(六):按任意字段关键字查询

怎样优雅地增删查改(六):按任意字段关键字查询
定义按任意字段关键字查询过滤器(IKeywordOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定的目标字段(TargetFields)包含指定的关键字(Keyword)的实体。对于每一个TargetField,需要在实体中找到对应字段(属性)。若找到,则为此实体字段创建条件筛选的表达式,然后将这些表达式通过Or连接起来,最终返回一个包含多段关键字筛选的Lambda表达式。可以看到将筛选出标题包含关键字“3”的告警。在筛选中输入关键字“3”,点击查询。无需在应用层中更改代码,

原创怎样优雅地增删查改(五):按组织架构查询

怎样优雅地增删查改(五):按组织架构查询
要想在任意实体实现Where的过滤条件,我们使用动态拼接语言集成查询 (LINQ) 的方式实现通用查询接口,有关LINQ表达式,请阅读。定义按组织架构查询过滤器(IOrganizationOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定 OrganizationUnitId 下的用户关联的实体。Employee的集合查询业务,是通过重写CreateFilteredQueryAsync方法,来实现按组织架构查询的过滤条件。创建一些组织架构,命名“群组”

原创怎样优雅地增删查改(四):创建通用查询基类

怎样优雅地增删查改(四):创建通用查询基类
上一章我们实现了Employee管理模块,Employee的增删改查是通过其应用服务类,继承自Abp.Application.Services.CrudAppService实现的。在开发业务模块时,我们可以先使用简单的方式提供Curd服务,随着UI复杂度增加,逐步的使用更加复杂的Curd服务。为了更好的代码重用,我们对泛型参数进行扩展,使用CurdAppServiceBase的类可根据实际业务需求选择泛型参数。Brief是一种简化的查询实体集合的方法,其返回的Dto不包含导航属性,以减少数据传输量。

原创怎样优雅地增删查改(三):业务用户的增删查改

怎样优雅地增删查改(三):业务用户的增删查改
区别于身份管理模块(Identity模块)的鉴权用户IdentityUser,业务用户(BusinessUser)是围绕业务系统中“用户”这一定义的领域模型。这些业务用户继承自HealthUser,HealthUser是业务用户的基类,包含了业务用户的基本信息,如姓名,性别,出生日期,身份证号等。以Client为例,ClientLookupService是业务用户的查询服务,其基类UserLookupService定义了关联用户的查询接口,包括按ID查询,按用户名查询,按组织架构查询,按户关系查询等。