diff --git a/docs/en/Blog-Posts/2020-06-05 v2_9_Release/Post.md b/docs/en/Blog-Posts/2020-06-05 v2_9_Release/Post.md index 2bb570473f..b21cc852c8 100644 --- a/docs/en/Blog-Posts/2020-06-05 v2_9_Release/Post.md +++ b/docs/en/Blog-Posts/2020-06-05 v2_9_Release/Post.md @@ -1,6 +1,6 @@ # ABP Framework v2.9 Has Been Released -The **ABP Framework** & and the **ABP Commercial** version 2.9 have been released, which is the last version before 3.0! This post will cover **what's new** with these this release. +The **ABP Framework** & and the **ABP Commercial** version 2.9 have been released, which are the last versions before v3.0! This post will cover **what's new** with these this release. ## What's New with the ABP Framework 2.9? @@ -8,9 +8,9 @@ You can see all the changes on the [GitHub release notes](https://github.com/abp ### Pre-Compiling Razor Pages -Pre-built pages (for [the application modules](https://docs.abp.io/en/abp/latest/Modules/Index)) and view components were compiling on runtime until this version. Now, they are pre-compiled and we've measured that the application startup time (for the MVC UI) has been reduced more than 50%. In other words, it has **two-times faster** than the previous version. Not only for the application startup, the speed change also effects when you visit a page for the first time. +Pre-built pages (for [the application modules](https://docs.abp.io/en/abp/latest/Modules/Index)) and view components were compiling on runtime until this version. Now, they are pre-compiled and we've measured that the application startup time (especially for the MVC UI) has been reduced more than 50%. In other words, it is **two-times faster** than the previous version. The speed change also effects when you visit a page for the first time. -Here, a test result for for the startup project with v2.8 vs v.2.9: +Here, a test result for the startup application template with v2.8 and v.2.9: ```` ### v2.8 @@ -30,9 +30,7 @@ Total: 12.42s Total: 5.24s ```` -You do nothing to get the benefit of the new system. [Overriding UI pages/components](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Customization-User-Interface) are also just working as before. - -We will be working on more performance improvements in the v3.0. +You do nothing to get the benefit of the new approach. [Overriding UI pages/components](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Customization-User-Interface) are also just working as before. We will be working on more performance improvements in the v3.0. ### Organization Unit System @@ -44,16 +42,16 @@ The documentation will come soon... ### New Blob Storing Package -We've created a new [Blob Storing package](https://www.nuget.org/packages/Volo.Abp.BlobStoring) to store arbitrary binary object. It is generally used to store files in your application. This package provides an abstraction, so any application or [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics) can save and retrieve files independent from the actual storing provider. +We've created a new [Blob Storing package](https://www.nuget.org/packages/Volo.Abp.BlobStoring) to store arbitrary binary objects. It is generally used to store the content of the files in your application. This package provides an abstraction, so any application or [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics) can save and retrieve files independent from the actual storing provider. -There are two storing provider currently implemented: +There are two storage provider currently implemented: -* [Volo.Abp.BlobStoring.FileSystem](https://www.nuget.org/packages/Volo.Abp.BlobStoring.FileSystem) package stores objects/files in the local file system with a configured folder. +* [Volo.Abp.BlobStoring.FileSystem](https://www.nuget.org/packages/Volo.Abp.BlobStoring.FileSystem) package stores objects/files in the local file system. * [Volo.Abp.BlobStoring.Database](https://github.com/abpframework/abp/tree/dev/modules/blob-storing-database) module stores objects/files in a database. It currently supports [Entity Framework Core](https://docs.abp.io/en/abp/latest/Entity-Framework-Core) (so, you can use [any relational DBMS](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Other-DBMS)) and [MongoDB](https://docs.abp.io/en/abp/latest/MongoDB). [Azure BLOB provider](https://github.com/abpframework/abp/issues/4098) will be available with v3.0. You can request other cloud providers or contribute yourself on the [GitHub repository](https://github.com/abpframework/abp/issues/new). -One of the benefit of the blob storing system it allows you to create multiple containers (each container is a blob storage) and use different storing providers for each container. +One of the benefits of the blob storing system is that it allows you to create multiple containers (each container is a blob storage) and use different storage providers for each container. **Example: Use the default container to save and get a byte array** @@ -86,9 +84,9 @@ It can work with `byte[]` and `Stream` objects. ````csharp public class MyService : ITransientDependency { - private readonly IBlobContainer _container; + private readonly IBlobContainer _container; - public MyService(IBlobContainer container) + public MyService(IBlobContainer container) { _container = container; } @@ -105,16 +103,24 @@ public class MyService : ITransientDependency } ```` -`TestContainer1` is an empty class that has no purpose than identifying the container. +`TestContainer` is an empty class that has no purpose than identifying the container: + +````csharp +[BlobContainerName("test")] //specifies the name of the container +public class TestContainer +{ + +} +```` A typed (named) container can be configured to use a different storing provider than the default one. It is a good practice to always use a typed container while developing re-usable modules, so the final application can configure provider for this container without effecting the other containers. -**Example: Configure the File System provider for the `TestContainer1`** +**Example: Configure the File System provider for the `TestContainer`** ````csharp Configure(options => { - options.Containers.Configure(configuration => + options.Containers.Configure(configuration => { configuration.UseFileSystem(fileSystem => { @@ -128,13 +134,13 @@ See the [blob storing documentation](https://docs.abp.io/en/abp/latest/Blob-Stor ### Oracle Integration Package for Entity Framework Core -We've create an [integration package for Oracle](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.Oracle.Devart), so you can easily switch to the Oracle for the EF Core. It is tested for the framework and pre-built modules. +We've created an [integration package for Oracle](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.Oracle.Devart), so you can easily switch to the Oracle for the EF Core. It is tested for the framework and pre-built modules. [See the documentation](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Oracle) to start using the Oracle integration package. ### Automatically Determining the Database Provider -When you develop a **reusable application module** with EF Core integration, you want to develop your module **DBMS independent**. However, there are minor (sometimes major) differences between DBMSs. If you perform a custom mapping based on the DBMS, you can now use `ModelBuilder.IsUsingXXX()` extension methods: +When you develop a **reusable application module** with EF Core integration, you generally want to develop your module **DBMS independent**. However, there are minor (sometimes major) differences between different DBMSs. If you perform a custom mapping based on the DBMS, you can now use `ModelBuilder.IsUsingXXX()` extension methods: ````csharp protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -162,11 +168,11 @@ Beside the stupid example above, you can configure your mapping however you need `abp translate` is a new command that simplifies to translate [localization](https://docs.abp.io/en/abp/latest/Localization) files when you have multiple JSON localization files in a source control repository. -The main purpose of this command is to **translate the ABP Framework** localization files (since the [abp repository](https://github.com/abpframework/abp) has tens of localization files to be translated in different directories). +The main purpose of this command is to **translate the ABP Framework** localization files (since the [abp repository](https://github.com/abpframework/abp) has tens of localization files to be translated in different folders). It is appreciated if you use this command to translate the framework resources **for your mother language**. -See [the documentation](https://docs.abp.io/en/abp/latest/CLI#translate) to learn how to use it. +See [the documentation](https://docs.abp.io/en/abp/latest/CLI#translate) to learn how to use it. Also see [the contribution guide](https://docs.abp.io/en/abp/latest/Contribution/Index). ### The New Virtual File System Explorer Module @@ -176,23 +182,27 @@ Thanks to [@liangshiw](https://github.com/liangshiw) created and contributed a n ![virtual-file-explorer-2](virtual-file-explorer-2.png) -### Sample Application: SignalR with Tiered Architecture +[See the documentation](https://docs.abp.io/en/abp/latest/Modules/Virtual-File-Explorer) to learn how to use it. -Implementing SignalR in a distributed/tiered architecture can be challenging. We've created a sample application that demonstrate how to easily implement it using the [SignalR integration](https://docs.abp.io/en/abp/latest/SignalR-Integration) and the [distributed event bus](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) system. +### Sample Application: SignalR with Tiered Architecture -![signalr-tiered-demo](signalr-tiered-demo.png) +Implementing SignalR in a distributed/tiered architecture can be challenging. We've created a sample application that demonstrate how to implement it using the [SignalR integration](https://docs.abp.io/en/abp/latest/SignalR-Integration) and the [distributed event bus](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) system easily. See [the source code](https://github.com/abpframework/abp-samples/tree/master/SignalRTieredDemo) of the sample solution. **An article is on the road** that will deeply explain the solution. Follow the [@abpframework](https://twitter.com/abpframework) Twitter account. +![signalr-tiered-demo](signalr-tiered-demo.png) + +*A picture from the article that shows the communication diagram of the solution* + ### About gRPC -Created a sample application to show how to create gRPC endpoints in your ABP based application. +We've created a sample application to show how to create and consume gRPC endpoints in your ABP based applications. See [the source code](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) on GitHub. -We were planning to create gRPC endpoints for all the pre-built application modules, but see that ASP.NET Core gRPC integration is not mature enough and doesn't support some common deployment scenarios yet. So, deferring this to the next versions ([see this comment](https://github.com/abpframework/abp/issues/2882#issuecomment-633080242) for more). However, it is pretty standard if you want to use gRPC in your applications. ABP Framework has no issue with gRPC. Just check the [sample application](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo). +We were planning to create gRPC endpoints for all the pre-built application modules, but we see that ASP.NET Core gRPC integration is not mature enough and doesn't support some common deployment scenarios yet. So, deferring this to the next versions ([see this comment](https://github.com/abpframework/abp/issues/2882#issuecomment-633080242) for more). However, it is pretty standard if you want to use gRPC in your applications. ABP Framework has no issue with gRPC. Just check the [sample application](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo). ### Others @@ -200,6 +210,8 @@ We were planning to create gRPC endpoints for all the pre-built application modu * Support for [virtual path deployment](https://github.com/abpframework/abp/issues/4089) on IIS. * RTL support for the Angular UI. +See the [GitHub release notes](https://github.com/abpframework/abp/releases/tag/2.9.0) for others updates. + ## What's New with the ABP Commercial 2.9 In addition to all the features coming with the ABP Framework, the ABP Commercial has additional features with this release, as always. This section covers the [ABP Commercial](https://commercial.abp.io/) highlights in the version 2.9. @@ -210,7 +222,7 @@ We've created the UI for manage organization units, their members and roles for ![organization-units](organization-units.png) -OU management is available for both of the MVC (Razor Pages) & the Angular user interfaces. +OU management is available for both of the MVC (Razor Pages) and the Angular user interfaces. ### Chat Module Angular UI @@ -222,12 +234,14 @@ We had introduced a new [chat module](https://commercial.abp.io/modules/Volo.Cha ### Easy CRM Angular UI -Easy CRM is a sample application that is built on the ABP Commercial to provide a relatively complex application to the customers. In the version 2.7, we have lunched it with MVC / Razor Pages UI. With the 2.9 version, we are releasing the AngularUI for the Easy CRM. +Easy CRM is a sample application that is built on the ABP Commercial to provide a relatively complex application to the ABP Commercial customers. In the version 2.7, we have lunched it with MVC / Razor Pages UI. With the 2.9 version, we are releasing the Angular UI for the Easy CRM application. ![easy-crm](easy-crm.png) *A screenshot from the "Order Details" page of the Easy CRM application.* +See the [Easy CRM document](https://docs.abp.io/en/commercial/latest/samples/easy-crm) to learn how to download and run it. + ### Module Code Generation for the ABP Suite [ABP Suite](https://commercial.abp.io/tools/suite) is a tool that's main feature is to [generate code](https://docs.abp.io/en/commercial/latest/abp-suite/generating-crud-page) for complete CRUD functionality for an entity, from database to the UI layer. @@ -247,14 +261,14 @@ In addition to this main feature, we added many minor enhancements on the ABP Su [Lepton Theme](https://commercial.abp.io/themes) is the commercial theme we've developed for the ABP Commercial; * It is 100% bootstrap compatible - so you don't write theme specific HTML! -* It provides different kind of styles - you see the material style in the picture below. -* It provides different kind of layouts (side/top menu, fluid/boxed layout... etc). +* Provides different kind of styles - you see the material style in the picture below. +* Provides different kind of layouts (side/top menu, fluid/boxed layout...). * It is lightweight, responsive and modern. * And... it is upgradeable with no cost! You just update a NuGet/NPM package to get the new features. We've create its own web site: [http://leptontheme.com/](http://leptontheme.com/) -So, you can view all components together independent from your application: +You can view all the components together, independent from an application: ![lepton-theme](lepton-theme.png) @@ -268,6 +282,6 @@ We plan to release the initial version with the ABP Commercial v3.0 and continue ## About the Next Version: 3.0 -We have added many new features with the v2.9. In the next version, we will completely focus on the **documentation, performance improvements** and and other enhancements as well as bug fixes. +We have added many new features with the [v2.8](https://blog.abp.io/abp/ABP-v2.8.0-Releases-%26-Road-Map) and v2.9. In the next version, we will completely focus on the **documentation, performance improvements** and and other enhancements as well as bug fixes. For a long time, we were releasing a new feature version in every 2 weeks. We will continue to this approach after v3.0. But, as an exception to the v3.0, the development cycle will be ~4 weeks. **The planned release date for the v3.0 is the July 1, 2020**. \ No newline at end of file