diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md new file mode 100644 index 0000000000..0f97391eb8 --- /dev/null +++ b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md @@ -0,0 +1,247 @@ +# ABP框架 v2.7.0已经发布! + +**ABP框架**和**ABP商业版** v2.7已经发布.我们没有为2.4,2.5和2.6发布博客文章,所以这篇文章也将涵盖这几个版本中**新增内容**和过去的2个月里**我们完成了什么**. + +## 关于发布周期与开发 + +之前说过我们已经开始**每两个星期**发布一个新的次要功能版本,一般在星期四.我们的目标是尽快提供新功能. + +在过去的7-8周里, 我们在**1,300+次提交**中完成和合并了数百个issue和pull request, 这只是ABP框架的库.每日提交的次数不断增加: + +![github-contribution-graph](github-contribution-graph.png) + +ABP.IO平台正在快速增长,我们从社区获取的贡献越来越多. + +## ABP框架有哪些新增内容? + +### 对象扩展系统(Object Extending System) + +在过去的几个版本中,我们主要集中在以NuGet/NPM包使用现有模块时, 提供扩展的方法, + +对象扩展系统允许模块开发者创建可扩展的模块并允许应用开发者更容易地定制和扩展. + +例如,你可以这样为Identity模块的User实体添加两个扩展属性: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdate(options => + { + options.AddOrUpdateProperty("SocialSecurityNumber"); + options.AddOrUpdateProperty("IsSuperUser"); + } + ); +```` + +也很容易为这些属性定义验证规则: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.Attributes.Add(new RequiredAttribute()); + options.Attributes.Add( + new StringLengthAttribute(32) { + MinimumLength = 6 + } + ); + }); +```` + +你甚至可以编写自定义代码来验证属性.它会自动适用于应用服务, 控制器或页面的参数对象. + +实体的扩展属性通常存储在数据库表的一个单独的JSON格式的字段中,但是你也可以轻松地使用EF Core映射配置该属性为一个表字段: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.MapEfCore(b => b.HasMaxLength(32)); + } + ); +```` + +请参见有关该系统的详细信息[对象扩展文档](https://docs.abp.io/en/abp/latest/Object-Extensions). + +也可参见[自定义现有模块](https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Guide)指南,以了解所有可能的自定义选项. + +### 文本模板包 + +[Volo.Abp.TextTemplating](https://www.nuget.org/packages/Volo.Abp.TextTemplating)是v2.7.0中新加入的包.此前,[Volo.Abp.Emailing](https://www.nuget.org/packages/Volo.Abp.Emailing)包也有类似的功能,但它的功能是有限的,实验性质的并且和发送邮件紧密耦合在一起. + +新文本模板包允许你定义基于文本的模板, 可以很容易地本地化和重用.你可以定义布局模板并且与其它模板共享. + +目前,我们正在使用它发送邮件.一个需要发送邮件的模块通常定义了一个模板.如: + +````xml +

{{L "PasswordReset"}}

+ +

{{L "PasswordResetInfoInEmail"}}

+ + +```` + +这是一个典型的密码重置邮件模板. + +* 模板系统是基于开源的[Scriban库](https://github.com/lunet-io/scriban).因此,它支持if条件,循环等等. +* `model`用于将数据传递到模板(就像ASP.NET Core MVC). +* `L`是一个特殊函数用于本地化给定的字符串. + +为所有邮件使用相同的布局是一个典型应用.所以,你可以定义一个布局模板.这是框架自带的标准的布局: + +````xml + + + + + + + {{content}} + + +```` + +布局中应该有一个`{{content}}`区域用来呈现子内容(就像MVC中的`RenderBody()`). + +最终应用程序可以很容易地通过覆盖模板内容来自定义它. + +每当你需要渲染模板时,提供模板名称和model来使用`ITemplateRenderer`服务.详情请参见[文本模板文档](https://docs.abp.io/en/abp/latest/Text-Templating).我们甚至还为ABP商业版创建了UI(请参见下面的相关章节). + +### 订阅异常 + +ABP框架的[异常处理系统](https://docs.abp.io/en/abp/latest/Exception-Handling)会自动处理异常并且为客户端返回相应的结果.在某些情况下,你可能希望每当异常发生时有一个回调.通过这种方式,例如,你可以发送邮件或采取基于异常的任何动作. + +只需要在你的应用程序中创建一个从`ExceptionSubscriber`派生的类: + +````csharp +public class MyExceptionSubscriber : ExceptionSubscriber +{ + public override async Task HandleAsync(ExceptionNotificationContext context) + { + //TODO... + } +} +```` + +更多信息请参见[异常处理](https://docs.abp.io/en/abp/latest/Exception-Handling). + +### 其他 + +在之前的发布中框架也有很多小的功能和改进.这里列举几个: + +* 新增了`AbpLocalizationOptions.DefaultResourceType`用来设置应用程序的默认资源类型.通过这种方式,当资源未指定时, 本地化系统使用默认的资源.最新的应用程序启动模板已经配置了,你也可以为你现有的应用程序设置它. +* 权限定义新增了`IsEnabled`.通过这种方式,你可以从应用程序中完全禁用权限和隐藏相关功能.这可在一些应用程序中做为功能开关的方式.用法请参见[#3486](https://github.com/abpframework/abp/issues/3486). +* 框架中定义的所有本地化资源新增了荷兰语和德语本地化.感谢贡献者们. + +## ABP商业版有哪些新增内容? + +[ABP商业版](https://commercial.abp.io/)的目标是基于ABP框架项目提供预构建的应用程序功能,代码生成工具,专业的主题,先进的示例和高级支持. + +我们正在并行工作于ABP商业版与ABP框架功能对齐,并提供更多的模块,主题选项和工具. + +本节将介绍ABP商业版这边有哪些进展. + +### 模块实体扩展系统 + +模块实体扩展系统是相对于对象扩展系统(上面介绍的)的一个更高级别的API,并提供了一种简单的方法来向现有实体中增加扩展属性.一个新的扩展属性可以很容易地自动成为HTTP API和用户界面的一部分. + +例如:向Identity模块的User实体中添加`SocialSecurityNumber` + +````csharp +ObjectExtensionManager.Instance.Modules() + .ConfigureIdentity(identity => + { + identity.ConfigureUser(user => + { + user.AddOrUpdateProperty( //属性类型: string + "SocialSecurityNumber", //属性名 + property => + { + //验证规则 + property.Attributes.Add(new RequiredAttribute()); + property.Attributes.Add( + new StringLengthAttribute(64) { + MinimumLength = 4 + } + ); + + //...该属性的其它配置 + } + ); + }); + }); +```` + +仅通过这样的配置,用户界面就将具有新的属性(在表中和在创建/编辑表单中): + +![module-entity-extended-ui](module-entity-extended-ui.png) + +新属性可以轻松地本地化和验证.目前,它支持原始类型,如字符串,数字和布尔型,但我们计划添加更多高级场景(如导航/查找属性). + +请参阅[模块实体扩展](https://docs.abp.io/en/commercial/latest/guides/module-entity-extensions)指南来了解如何使用和配置的详细信息. + +#### 其他扩展点 + +还有其他一些预先定义的点来定制和扩展依赖模块的用户界面: + +* 你可以为数据表中的实体添加新动作(下方左侧的图). +* 你可以向页面的工具栏中添加新的按钮(或其他控件)(下方右侧的图). +* 你可以向数据表中添加自定义列. + +![abp-commercial-ui-extensions](abp-commercial-ui-extensions.png) + +请参阅[自定义模块](https://docs.abp.io/en/commercial/latest/guides/customizing-modules)指南,以了解所有可能的方式来定制依赖模块. + +### 文本模板管理模块 + +我们在v2.7中推出一个新的模块:[文本模板管理](https://docs.abp.io/en/commercial/latest/modules/text-template-management).它基本上是用来在用户界面上编辑文本/邮件模板(在ABP框架2.7中加入的),并保存更改到数据库中. + +一个密码重置邮件模板的内容编辑截图: + +![text-template-content-ui](text-template-content-ui.png) + +当创建新工程时, 这个模块已经预装了. + +### 实体历史视图 + +审计日志UI模块现在显示所有应用程序中的实体变更, 带有属性修改的细节. + +![audit-log-entity-changes](audit-log-entity-changes.png) + +当点击实体的动作菜单时, 你还可以查看实体的历史信息: + +![tenant-entity-changes](tenant-entity-changes.png) + +### 更多示例 + +我们正在创建ABP商业版更多高级的示例应用程序.其中一个是简易CRM, 将在几天内提供给商业客户. + +这是一个简易CRM仪表盘的截图: + +![easy-crm](easy-crm.png) + +具有帐户,联系人,产品组,产品,订单等. + +### 新模块 + +我们将继续改善现有模块和创建新的模块.除了上面介绍的新的[文本模板管理](https://docs.abp.io/en/commercial/latest/modules/text-template-management), 还有: + +* 我们最近发布了[支付模块](https://commercial.abp.io/modules/Volo.Payment),目前对接了PayU和的2Checkout支付网关.更多网关陆续添加. +* 我们已经创建了一个简单的[Twilio短信集成](https://docs.abp.io/en/commercial/latest/modules/twilio-sms)模块,以通过Twilio发送短信. +* 我们正在开发一个**聊天模块**, 将在未来几周内可用. +* 我们正在致力于为Identity模块增加**组织单元管理**系统, 用于创建分层组织单元(Domain层将是开源和免费的). + +更多ABP商业版和ABP框架的模块,主题和工具选项正在开发中. + +## ABP框架 VS ABP商业版 + +我们([Volosoft](https://volosoft.com/) - ABP.IO平台背后的核心团队),在ABP框架和ABP商业版上花费几乎相同的精力,我们认为ABP.IO平台是一个整体. + +[ABP框架](https://abp.io/)提供了所有的基础设施和应用程序的独立框架功能,使你更具生产力,专注于自己的业务代码,并实现软件开发最佳实践.它为你提供不重复作业的一个明确和舒适的开发经验. + +[ABP商业版](https://commercial.abp.io/)提供内置功能,主题和工具, 如果你的需求涉及到这些, 就可以节省你的时间.除此之外还有框架的高级支持和预构建模块. diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/abp-commercial-ui-extensions.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/abp-commercial-ui-extensions.png new file mode 100644 index 0000000000..52fe37a712 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/abp-commercial-ui-extensions.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/audit-log-entity-changes.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/audit-log-entity-changes.png new file mode 100644 index 0000000000..e06b3300ee Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/audit-log-entity-changes.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/easy-crm.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/easy-crm.png new file mode 100644 index 0000000000..e40f399525 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/easy-crm.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/github-contribution-graph.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/github-contribution-graph.png new file mode 100644 index 0000000000..ff3db2ad22 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/github-contribution-graph.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/module-entity-extended-ui.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/module-entity-extended-ui.png new file mode 100644 index 0000000000..25621aabb7 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/module-entity-extended-ui.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/tenant-entity-changes.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/tenant-entity-changes.png new file mode 100644 index 0000000000..4cd573c588 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/tenant-entity-changes.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/text-template-content-ui.png b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/text-template-content-ui.png new file mode 100644 index 0000000000..037e3e4d8b Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/text-template-content-ui.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/Post.md b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/Post.md new file mode 100644 index 0000000000..eb193b8e41 --- /dev/null +++ b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/Post.md @@ -0,0 +1,214 @@ +# ABP v2.8.0发布 & 路线图 + +**ABP框架**和**ABP商业版**v2.8已经发布.这篇文章将涵盖这些发布中的**新增内容**和项目的**中期路线图**. + +## ABP框架2.8有哪些新增内容? + +你可在[GitHub的发行说明](https://github.com/abpframework/abp/releases/tag/2.8.0)中看到所有的变更.这篇博客只包括重要的一些功能/变更. + +### SignalR集成包 + +我们已经发布了[一个新的包](https://www.nuget.org/packages/Volo.Abp.AspNetCore.SignalR)用来集成SignalR到基于ABP框架应用程序中. + +> 其实跟随[标准Microsoft教程](https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr)添加[SignalR](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)到你的应用程序中已经可以实现.但是,ABP提供了SignalR集成包用来简化集成和使用. + +参见[SignalR集成文档](https://docs.abp.io/en/abp/latest/SignalR-Integration)开始使用SignalR. + +#### SignalR演示应用程序 + +我们也创建了一个简单的聊天应用程序来演示如何使用它. + +![signalr-chat-demo](signalr-chat-demo.png) + +参见[应用程序的源代码.](https://github.com/abpframework/abp-samples/tree/master/SignalRDemo) + +### 控制台应用程序启动模板 + +新的控制台应用程序模板,可用来创建整合了ABP框架的控制台应用程序. + +使用ABP CLI来创建新的控制台应用程序,并为`-t`(模板)选项指定`console`: + +````bash +abp new MyApp -t console +```` + +感谢[@liangshiw](https://github.com/liangshiw)为此模板的贡献. + +### 为MVC UI增加RTL支持和阿拉伯语本地化 + +[@kgamalseif](https://github.com/kgamalseif)为MVC UI贡献了RTL实现, 看起来很棒: + +![rtl-ui](rtl-ui.png) + +他还本地化了所有的框架和模块的资源.感谢他伟大的贡献. + +### 其它 + +本次发布的其它一些亮点: + +* 转换HttpApi.Client模块的包为.netstandard 2.0, 用来与其他类型的应用程序兼容. +* 改进的对象扩展系统,以更好地处理UI,本地化和验证. +* 为Hangfire和Quartz集成实现了禁用后台作业执行. +* 为MVC UI新增JsTree集成包. +* 移动所有示例到新的[ABP-示例](https://github.com/abpframework/abp-samples)库中并创建了[索引页](https://docs.abp.io/en/abp/latest/Samples/Index)来查看所有示例. + +### 弃用 + +* 弃用了`app.UseMvcWithDefaultRouteAndArea()`,并引入了`app.UseConfiguredEndpoints()`(见[#3880](https://github.com/abpframework/abp/issues/3880)). +* 弃用了`UsePostgreSql()`,并为[Volo.Abp.EntityFrameworkCore.PostgreSql](http://nuget.org/packages/Volo.Abp.EntityFrameworkCore.PostgreSql)包引入了`UseNpgsql()`.如果你正在使用PostgreSQL, 切换到`UseNpgsql()`. + +旧方法被标记为`Obsolete`,将在下一主要版本中删除. + +## ABP商业版2.8中有哪些新增内容? + +### 新的Lepton主题 + +我们已经彻底修改[lepton主题](https://commercial.abp.io/themes).来看下不同的风格: + +![lepton-themes](lepton-themes.gif) + +ABP商业版中语言管理页面的截图: + +![lepton-abp-default-theme](lepton-abp-default-theme.png) + +(默认风格UI) + +![lepton-abp-material-theme](lepton-abp-material-theme.png) + +(Material风格UI) + +[创建一个演示](https://commercial.abp.io/demo)来现场测试所有的风格.你可以设置页面更改风格. + +### 新增聊天模块 + +第一版的[聊天模块](https://commercial.abp.io/modules/Volo.Chat)已经在本版本中发布.当前只有MVC / Razor PagesUI.Angular UI正在开发中. + +![abp-chat-module](abp-chat-module.png) + +目前,它有一个简单的**实时文本消息**功能.更多的功能,比如群组消息,发送图像/文件在路线图中. + +### 其它 + +* 为Angular UI实现了[模块实体扩展](https://docs.abp.io/en/commercial/latest/guides/module-entity-extensions)系统.还提高该系统以更好地处理float/double/decimal,date,datetime,enum和bool属性. +* [EasyCRM示例应用程序](https://docs.abp.io/en/commercial/latest/samples/easy-crm)树形视图中管理产品组. + +## 关于下一个版本 + +我们**每2周**发布一次.因此,下一个功能版本的计划的日期为**6月4日**, 版本号为**2.9**.这(可能)会是**最后的2.x版本**, 下个版本将是**3.0**. + +### ABP框架 2.9 & 3.0 + +#### 组织单元系统 + +Identity模块的组织单元系统本来要在2.8中发布,但不幸的是我们不能肯定该功能的稳定性,所以推迟到了2.9. + +#### gRPC + +我们打算创建一个gPRC集成示例应用程序.然后,我们打算为所有[预构建模块](https://docs.abp.io/en/abp/latest/Modules/Index)和[启动模板](https://docs.abp.io/en/abp/latest/Startup-Templates/Index)创建gRPC端点.我们想为这些端点使用新计划的[Blazor](https://docs.microsoft.com/en-us/aspnet/core/blazor/) UI选项(我们知道Blazor UI有着[巨大的需求](https://github.com/abpframework/abp/issues/394).这并不意味着我们在3.0中会完成全部工作,但我们已经开始了, 并将在3.0+版本中继续. + +#### Oracle与EF Core + +我们看到,在ABP框架之外,人们使用Oracle与EF Core有一些痛点.这是因为EF Core 3.1目前还没有稳定并且免费的Oracle提供器.我们只看到了[Devart](https://www.devart.com/)创建了一个[付费的包](https://www.nuget.org/packages/Devart.Data.Oracle.EFCore). + +[@ebicoglu](https://github.com/ebicoglu)[创建了一个gist](https://gist.github.com/ebicoglu/9f364c7eff9d87315af0178866186401)用来演示如何使用它. 我们[打算](https://github.com/abpframework/abp/issues/3983)创建一个集成包来让它更简单. + +#### API文档 + +我们正[致力于](https://github.com/abpframework/abp/issues/1184)为框架创建一个API文档,并建立一个CD管线自动地在每次发布时公开它.这会更容易地探索框架中的类. + +#### 示例应用程序:在分层/分布式系统上使用SignalR + +在分布式/微服务系统上使用SignalR可能有一些麻烦,因为服务没有连接到客户端所以不能直接从服务器调用客户端函数.一个解决这个问题的方法是使用分布式消息总线(如RabbitMQ),用来向客户端转发从服务到Web应用程序的消息. + +我们将创建一个示例应用程序和文档来阐述这样一个架构,和使用ABP框架它会多么的容易. + +虽然这个话题与ABP框架没有直接关系, 而且这个问题不是ABP应用程序独有的,我们仍然觉得创建这样的指南对开发者是很有用的. + +#### 还有... + +我们会花更多的时间来写更多的文档,实现性能的提升,做更多的测试,创建更多的扩展点等等. + +### ABP商业版 2.9 & 3.0 + +#### 组织单元系统 + +并行于ABP框架的组织单元系统(如上所述),我们正在创建一个UI用来管理组织单元,将在2.9中发布. + +#### 聊天模块的Angular UI + +聊天模块(如上所述)目前只有ASP.NET Core MVC / Razor Pages UI.我们正努力为该模块创建Angular UI + +#### 新模块想法:文件管理 + +我们正在创建一个文件管理模块,用来管理(上传/下载)和在用户之间共享文件.你可将之视为一个轻量级的Google Drive :). + +#### Easy CRM Angular UI + +[Easy CRM](https://docs.abp.io/en/commercial/latest/samples/easy-crm)是我们之前发布的ABP商业版中的一个示例应用程序.在这个版本中,我们向这个应用程序中加入了更多的功能.在下一个版本中,我们会为它创建Angular UI. + +我们发现这个应用程序非常有用,因为与简单的[图书商城](https://docs.abp.io/en/commercial/latest/samples/index#book-store)相比, 它非常接近现实世界的应用程序. + +#### 还有.. + +我们正在致力于改进现有的[模块](https://commercial.abp.io/modules),[主题](https://commercial.abp.io/themes)和[工具](https://commercial.abp.io/tools), 旨在3.0版本中提供更舒适的开发者体验. + +## 路线图 + +我们经常被问到的[ABP框架](https://abp.io/)和[ABP商业版](https://commercial.abp.io/)的路线图.虽然我们已经在各种平台上回答过,但在这次发布中,我们在这些产品的文档里增加了路线图页面: + +* [ABP框架路线图](https://docs.abp.io/en/abp/latest/Road-Map) +* [ABP商业版路线图](https://docs.abp.io/en/commercial/latest/road-map) + +我也把路线图写在下面的章节中: + +### ABP框架路线图 + +你可随时在[GitHub的仓库](https://github.com/abpframework/abp/milestones)中检查里程碑规划和优先积压问题. + +虽然我们会**继续添加其它令人激动的功能**,但我们在中期将主要致力于下列内容的工作: + +* 为所有的预构建模块实现**gPRC集成**. +* 为框架和所有预构建的模块实现**Blazor UI**. +* **NET 5.0**!由于微软已经宣布了.NET 5.0将在2020年11月发布,在这之前我们会做好准备,并在微软发布后就迁移到.NET 5.0上, 我们希望能平稳过渡. + +### ABP商业版路线图 + +我们将与ABP框架同步进行, 为ABP商业版实现一些相同的内容: + +* gRPC集成 +* Blazor UI +* .NET 5.0 + +除此之外,我们将在中期致力于下列内容: + +* 一个用来创建微服务解决方案的启动模板(含有Ocelot,Redis,RabbitMQ,ElasticSearch,IdentityServer ..等等. 并且预先集成和配置好的). +* 更多的模块扩展点. +* 动态仪表板系统. +* 实时通知系统. +* SaaS的模块的认购及支付系统. +* 更多的身份认证选项. +* 新的应用模块(我们有几十个模块的想法, 将陆续与大家分享 - 上面宣布的"文件管理"就是其中之一). +* 新的主题与主题风格(包括公共/企业网站的主题). + +## 彩蛋:ABP.IO平台路线图 + +ABP框架和ABP商业版是ABP.IO平台的基本组成部分,我们还想创造一个更大的平台将.NET社区聚集在一起,利用ABP框架的统一性和标准开发模型来创建可重用模块,分享知识,彼此互相帮助. + +所以,我们有了新的*.abp.io网站的想法,我想分享给社区 + +#### market.abp.io + +一个平台用于让开发者/公司发布他们基于ABP框架的可重用的应用模块,主题, 库和工具.这个网站上会有免费/开源和商业产品. + +#### jobs.abp.io + +我们收到了太多来自其它公司的电子邮件, 想聘请其它公司的开发者来打造基于ABP.IO平台的自己的产品.我们作为[Volosoft](https://volosoft.com/),想留在产品端,而不是客户的基础工程.我们一般会把有经验的开发者和公司介绍给他们. + +我们计划创建一个网站来满足各方需要,这样你可以为你的项目找到开发者,或者找一个短期或长期的工作. + +## 跟随ABP! + +跟随社交媒体帐号,即可了解ABP.IO平台上发生的事情: + +* [@abpframework](https://twitter.com/abpframework): ABP框架官方推特帐号 +* [@abpcommercial](https://twitter.com/abpcommercial): ABP商业版官方推特帐号 diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/abp-chat-module.png b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/abp-chat-module.png new file mode 100644 index 0000000000..88509b6022 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/abp-chat-module.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-abp-default-theme.png b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-abp-default-theme.png new file mode 100644 index 0000000000..93e94e5a67 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-abp-default-theme.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-abp-material-theme.png b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-abp-material-theme.png new file mode 100644 index 0000000000..c78dc96245 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-abp-material-theme.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-themes.gif b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-themes.gif new file mode 100644 index 0000000000..7ce3935ef5 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/lepton-themes.gif differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/rtl-ui.png b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/rtl-ui.png new file mode 100644 index 0000000000..0e1a162eb1 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/rtl-ui.png differ diff --git a/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/signalr-chat-demo.png b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/signalr-chat-demo.png new file mode 100644 index 0000000000..e5f647b79c Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2020-05-22 v2_8_Release/signalr-chat-demo.png differ