From e18a190867c4098e6b119266489707ea875bf77d Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 9 May 2022 16:54:56 +0300 Subject: [PATCH] Add the "What's New with ABP Framework 5.3?" section to blog-post --- .../2022-05-09 v5_3_Preview/POST.md | 96 +++++++++++++++--- .../deployment-documentation.png | Bin 0 -> 4595 bytes .../leptonx-lite-documentations.png | Bin 0 -> 13496 bytes 3 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/deployment-documentation.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/leptonx-lite-documentations.png diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index 60e5850e96..53376e24af 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -1,4 +1,4 @@ -# ABP.IO Platform 5.3 RC.1 Has Been Released +# ABP.IO Platform 5.3 RC Has Been Released Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **5.3 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. @@ -16,7 +16,7 @@ Follow the steps below to try the version 5.3.0 RC today: dotnet tool update Volo.Abp.Cli -g --version 5.3.0-rc.1 ```` -​ **or install** it if you haven't before: +**or install** it if you haven't before: ````bash dotnet tool install Volo.Abp.Cli -g --version 5.3.0-rc.1 @@ -34,14 +34,13 @@ See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all t You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. ---- - - ## Migration Notes & Breaking Changes ---- +There is only one breaking changes in this version upgrade and it's explained below. + +* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to upgrade your projects that uses **AutoMapper** library (probably your `*.Application` project) to **netstandard2.1** or **net6** if it's **netstandard2.0**. See [#12189](https://github.com/abpframework/abp/pull/12189). -## What's New with ABP Framework 5.2? +## What's New with ABP Framework 5.3? In this section, I will introduce some major features released with this version. Here, a brief list of titles explained in the next sections: @@ -50,20 +49,91 @@ In this section, I will introduce some major features released with this version * Introduce the `Volo.Abp.Gdpr.Abstractions` package * Batch Publish Events from Outbox to the Event Bus * Improvements on **eShopOnAbp** project -* LeptonX Lite Documentations & Status of the Project -* Progress of the OpenIddict module -* New Deployment Documentations +* LeptonX Lite Documentations & Project Status & Roadmap +* OpenIddict Module +* Deployment Documentations * Other news... -### Single-layer Option on Get Started Page +### Single-layer Option on *Get Started* Page -We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've also add this startup template option to the *Get Started* page, so anyone can also create a single layer application template via *Get Started* page. +We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've added this startup template option to the *Get Started* page. + +*You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page.* ![Get Started Page / app-nolayers](./app-nolayers-get-started.png) ### PWA Support for Blazor WASM & Angular UIs ---- +With v5.3 ABP supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. +Example: + +```bash +abp new MyProgressiveWebApp -u blazor --pwa +``` + +### Introduce the `Volo.Abp.Gdpr.Abstractions` package + +A new `Volo.Abp.Gdpr.Abstractions` package is added to the framework. + +Anyone can use this package to use the pre-defined ETOs and implement GDPR-related operations for their own applications. + +In that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. + +### Batch Publish Events from Outbox to the Event Bus + +We've introduced the "Transactional Outbox & Inbox Patterns" in [**v5.0**](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), it was one of the most awaited features by distributed software developers. + +We've made some optimizations for the **Batch Event Publishing** in this version, you can examine the related development from [here](https://github.com/abpframework/abp/pull/11243). After the optimization, the results are impressive. + +| | Before | After | +|---|---|---| +| **RabbitMQ** | 50080ms | 547ms | +| **Kafka** | 15303ms | 475ms | +| **Azure (Remote Service)** | 116157ms | 1534ms | +| **Rebus (RabbitMQ transport)** | 26094ms | 560ms | + +*You can see the optimization results above for "Batch Publishing (1000 Events)"* + + +### Improvements on eShopOnAbp project + +### LeptonX Lite Documentations & Project Status & Roadmap + +It is finally here, we've released the **1.0.0-beta.1** version for the **LeptonX Lite**. + +![](./leptonx-lite-documentations.png) + +Lepton X Lite documents have been written for the three UI types within this version. You can see the related documentation from the screenshot above. You can follow these documentations and try the new **LeptonX Lite Theme**. + +We don't suggest using the **beta.1** version on production but we highly demand you to test the **LeptonX Lite** and provide feedback to us. It's really important for us to be able to release a more stable version. Thanks in advance. + +For the following versions (beta.2 and RC versions), we will focus on; + +* Fixing the reported bugs from the community +* Providing documentations as much as possible +* Adding new custom pages to demo + + +### OpenIddict Module + +### Deployment Documentations + +Deploying an ABP based application is not so different than deploying any .NET or ASP.NET Core application. You can deploy it to a cloud provider (e.g. Azure, AWS, Google Could) or on-premise server, IIS or any other web server. However, we wanted to prepare a "Deployment Guide" to mention the important points and considerations. + +![](./deployment-documentation.png) + +We've created two new deployment documentations, you can find them under the ["Deployment"](https://docs.abp.io/en/abp/5.3/Deployment/Index) section of our documentation website. + +In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Deployment/Clustered-Environment) documentation, we've documented the topics that you should consider when you are developing your application to a clustered environment and explains how you can deal with these topics in your ABP based application. + +### Other News + +* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. See [#12189](https://github.com/abpframework/abp/pull/12189). +* Global Features was only accessible from C# code. From this version Global Features can be provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). +* Get the user's detailed informations (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). +* Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). + +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), that contains a list of all issues and pull requests closed with this version. ## Community News diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/deployment-documentation.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/deployment-documentation.png new file mode 100644 index 0000000000000000000000000000000000000000..3dde546b153d7ada02f94b81d090c57d9c2a6509 GIT binary patch literal 4595 zcmb7IcQhQ{wjQE|j2b37iOvuuYK-1{lqjS3FzV|vg_L`0HBK3 zP*yMswA#xdgVXlW4|HbB3&b9(E0ifJvfU?j)mysRZ$ugB8uEUNhhe<2_e)jUgy_JhT_uCVJHxa-h=<_3=Ev z9h>(JaK2ltxaEVZU;DZ?-}4m|@BsiFjv;FR;5)uDAt0YNo)jR@Pe}`SZNkO}094Bx z0RZNaWdJ}uz5yPaYc~nbL;{+qz^MZqj*)` z{u2E<5KxH!LuVFqt7>_L$k1XQkg#^o_r$iF3PvUq?Nhjb-o#Q9M|FG2HbdATugjDR zyyodDDl2I)d|BD;)@XeHptXd+%JDkw?s&~xw+swjk$0SKL;Cplv|=R@Zb=5X@&iul zBa=M)%nu2g`B$Mk(&19fx~cae969F?CwOt&>e14Xxj$X@OWRyApUOoD>**X5rmJ#< z43kluXOv-3)#JgyOg2;YjOD)wshXL}1l+f_Z>Y{^D`Q2&D<`Z=G{s5l!IYi7+D0!_ zbhXQ}VEvm;^e(^GPR`oY1i!Z{aEgf^!pqs;r<_TV@u zzQMK+Gh%#?9ds;eYZpl6QqC>yik7nMOfExDXpb{F->@uyyO!mgy=Ieh;nb$BfaRN@LNtYkf1C=rj%4Hmg)@=V zKq?%9xQ|wcc2?7r|4GbX=nFRoLT}wsWzIkwa^_I5k!gF>n*e6A6<@-T<&IM-;nOjeUDEX{Y=G3grtaEgS= zRIt~!Te&b?L}wKq5iVqzMVd-SnSoIk-lK6Mvkt z+(w15dl}VOfj+i4-HtP@;Vik~S^-m%3@jH5hWtwv)bV%cO^si@8v0o~?rp78aP#DY zR;b!NM>1o)R}hHfG>?`}!Ek|+$}uZ%sM`CuWk=hmV1$bol#}g`Q-Z5u39Q2*3DXb& zTH{Sn994<+Ce;!kC^;O`$l&iX=^8hx#FcXcA4nxju|*WNbJp%Ut~0*}b;9Mv}Trft-;iWt$h-;JGLvbl*m-z1?CxPl(Zu~j9RJY`|B@*gk~k%Hl%e2Loj`j=Y0?$8Sz)Rn8`j#K zf@-P*Q#Mr=DEGAFe6qS+r_(?V!ItWiGOCYb;by4)lq?aS8p=Xie#Tlq?Up2$^DrNU z!`>(8Y+R9C=199$3*@r}nMm$VEN~iUu(<`STO^{;CF6koW~zj4giAIV;w{LJ=ZX;h!K)7H-n*>N z>`9q~)nwUiz#~Ro(>PVb{p`ejo3T%+C@1 zYUALBs1Fa2AYL1@Kvn7VVfiXxl6hChQo&<>n-NKS2{rtHBAI*5YKp7MGOrit&i7UV zA7giX1$;-pl#F℞Y+ZSaQ^86_YKLY!_S zN^m5kJ-~|y*4y$PCiZ5w+NC{wXZZFHJm@AW|#2J)9eU-d`-*0!O?*m!5rIJv(th(oKVdRtU{qet> zleZ>NrIae&^aOEtC%t@-JHPy|mnS6RuwuE4G(#ZaXz7pNyRQ1v(Z|m%bqsN>j6v~@ z7_!fFli6P#?0Ji|6+FH|)xryZ{XkZogkR)bWi=g3hFFOSgl8>3gYm%3j>U7Hf|o0H zv7~xEI3}_K9I%xQZcY7hz>FU3lik)DO+K__eImZ3$bnWB2my-;&~ zpB96Ci)^`)^|z}Z_Y8e>i$I-O}596yD8m+`D%=6*LYS+u55 znX9)i)$@eG!$hEco@c=Q8agY-Aknh=Zc%Q+IKzkaiCIt!GKYiV3hu@T(c2u){Vk28 zQ&d*lIL;3qw_$BOd)2IH`%@NIuq8MyZT#^&R?t$r)`cE#$N4smOy>#gr&yLT-N{mcQ ze#yz!Ci^qeQ%nwwFRSTw-h%D7)yu1IYfwK`4{0tv_L2mXoTi5(FfYq{T(rm7GwmQ7 zD7vqSan=PnVrg&kg5=S2hrqB`{Sa>@Q>xq>y%GBSt%*iFsJs!#jhqtGq=*4E%ARCzpdiVNAGoSggMmQqW@N=ye{N`^3nJAWA1=XS&7!hCe8s|tiv(y#FoLX`qMFJrKknyI{8 zaTPZz&vayYVgI7!XBT0tJY4`9K^ok|J8cB7CY6CQi;mK(_7i`mKz>pX@RkLL?*7Oy z*}XQg9jNqDidXOBN0rJ~QG^tYd~9xs`smcEN++pF^CoQ4>{djau7RpS?e~5uW0i1F?S1xPyMCgznfgW0CH?j zx`EDa#>}G;ChP5V+|PJDE4jyga$m6Xlxq;-SB#FZTKe`cGw{f{6W19V#~7xhdg&iA z?!Uu5#+s?3m2zhir$lwpk@W~G6b@dQ((@LK@Eo{}EAA^L2|#u41<8~2ttHkxw%YWX z6=0}tiNG(HV&9Oi-Uz%`I7uXFWAbi!fp*u%ZMAaBK&+*UN|HuzkAW6_!&I9`JJ*AF8p#-ekLssD0PZHVnvDHn-V~9` zRG(*5sJz6ypLMIXoD`>!OI)eEg&;KWV^`gyu>G%=I*TwQuY! zYi^hiGJAfYsd&a0Swy;+XG-(rOs$WlyD#WRte(ISqZWXT;eTl2%FRC^hteeBd8%Oy z)UU?~ZmxgDjmv4#=iFL38mt~9uPs;Pf5tO7`pMIN5mIFnuE++lo*=Hn+o!l=qP0fX z@pk1OSf}sHy-9Asihg{HD_{ECAA2gHS%oCuqmVk?OZ%eJc>r-()N5@%?({U`fn zeZH^Do0(8_egIZd+SDUCs0Zf&7??c#ew%Sv0$NC^yeW?bh+R(eF+(fvLzd;G{TpfV@ESs|WOobF-x zXR+Upq{lM}jdJLz|J>2rt~$KCbXdF}OCR;uh2hQKdp@C-9nbECwe%BFXXxw>j3q#kUIf_; zWrAA~WW^3=rC4{o`;~*dRRu+~`*p;N`0@aQ1loSkLP-M~!Q)GL>mzjp+``><WJ z^Dc<`CyTGoN%Cz~41zyQpd;I^`w8%K7~?ew+9Q8VPHs~XzajlfGDqa%rK;6Nbh*~G zC7UE}fNWQ+BzHo>y?f{03O1iP`N1;WLRTs;!{^Xp3-^k=-O-3m3J#9*y#J^Ywf`?I k;-CHh{;O_?DIQ1shDuubi+Ew~gc^W`imviUMVqL916HV*ivR!s literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/leptonx-lite-documentations.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/leptonx-lite-documentations.png new file mode 100644 index 0000000000000000000000000000000000000000..4186dc99a12a287011d36c444335c3a070ff65f0 GIT binary patch literal 13496 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�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 HR$>1QY+zJ5 literal 0 HcmV?d00001