Browse Source

Merge branch 'dev' into auto-merge/rel-9-1/3514

pull/22278/head
maliming 11 months ago
committed by GitHub
parent
commit
f85281860e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 101
      .github/scripts/update_versions.py
  2. 33
      Directory.Packages.props
  3. 7
      README.md
  4. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json
  5. 27
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  6. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  7. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  8. 37
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  9. 6
      build/common.ps1
  10. 4
      common.props
  11. 147
      docs/en/Blog-Posts/2025-01-21 v9_1_Preview/POST.md
  12. BIN
      docs/en/Blog-Posts/2025-01-21 v9_1_Preview/cover-image.png
  13. BIN
      docs/en/Blog-Posts/2025-01-21 v9_1_Preview/idle-session-settings.png
  14. BIN
      docs/en/Blog-Posts/2025-01-21 v9_1_Preview/lazy-expandable.png
  15. BIN
      docs/en/Blog-Posts/2025-01-21 v9_1_Preview/session-expiration-warning.png
  16. BIN
      docs/en/Blog-Posts/2025-01-21 v9_1_Preview/studio-switch-to-preview.png
  17. 46
      docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/POST.md
  18. BIN
      docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/abp-studio-macos-intel.png
  19. BIN
      docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/cover-image.png
  20. BIN
      docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/594bc2cb4507d5ae91d439e91cf03cc9.png
  21. 176
      docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/post.md
  22. BIN
      docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/d92ca39b02b79d5984d739ec266fd43f.png
  23. 52
      docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/post.md
  24. BIN
      docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/mvc-template-solution.png
  25. 87
      docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/post.md
  26. 44
      docs/en/Community-Articles/2019-08-16-abp-v019-release-with-new-angular-ui/post.md
  27. 19
      docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/post.md
  28. BIN
      docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/volosoft-booth.png
  29. 25
      docs/en/Community-Articles/2019-10-22-abp-v10-has-been-finally-released/post.md
  30. BIN
      docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/abp-commercial-demo.png
  31. BIN
      docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/lepton-theme-material.png
  32. BIN
      docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-2020-volosoft-booth-wall.png
  33. BIN
      docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-london-volosoft.png
  34. 162
      docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/post.md
  35. 140
      docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/post.md
  36. BIN
      docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/react-native-ui.png
  37. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/abp-commercial-ui-extensions.png
  38. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/audit-log-entity-changes.png
  39. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/easy-crm.png
  40. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/github-contribution-graph.png
  41. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/module-entity-extended-ui.png
  42. 247
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/post.md
  43. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/tenant-entity-changes.png
  44. BIN
      docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/text-template-content-ui.png
  45. BIN
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/abp-chat-module.png
  46. BIN
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-default-theme.png
  47. BIN
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-material-theme.png
  48. BIN
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-themes.gif
  49. 215
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/post.md
  50. BIN
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/rtl-ui.png
  51. BIN
      docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/signalr-chat-demo.png
  52. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-chat-module.png
  53. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-commercial-290.png
  54. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-framework-290-.png
  55. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/easy-crm-1.png
  56. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/lepton-theme.png
  57. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/organization-units.png
  58. 300
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/post.md
  59. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/signalr-tiered-demo.png
  60. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/suite.png
  61. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-11.png
  62. BIN
      docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-2.png
  63. BIN
      docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/file-management-ui.png
  64. 180
      docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/post.md
  65. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-comm-release-v3.1.png
  66. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-framework-release-v3.1.png
  67. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/email-phone-verification.png
  68. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/forgot-password.png
  69. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/ldap-settings-ui.png
  70. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/my-security-logs.png
  71. 311
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/post.md
  72. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/reset-password.png
  73. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/security-logs-ui.png
  74. BIN
      docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/user-lock.png
  75. 62
      docs/en/Community-Articles/2020-09-04-abp-framework-v31-final-has-been-released/post.md
  76. 431
      docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/post.md
  77. BIN
      docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/swagger.png
  78. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/abp-community-20200917.png
  79. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/account-profile-picture.jpg
  80. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazor-role-management-img.png
  81. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazorise-github.png
  82. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/file-management-module-angular.png
  83. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/host-features.png
  84. 260
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/post.md
  85. BIN
      docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/visual-studio-solution-with-blazor.png
  86. 45
      docs/en/Community-Articles/2020-10-02-abp-framework-v32-final-has-been-released/post.md
  87. BIN
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/0f4aa548ce22a256829739f842a3ff54.png
  88. BIN
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/41968da6c558c075cf1239f842a30e29.png
  89. BIN
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/532b0018b486294ac3e539f842a36433.png
  90. BIN
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/546a89e4112ec73f45ec39f842a3b663.png
  91. BIN
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/86021f7f983fc9739cfb39f842a29644.png
  92. BIN
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/ef376d39f6c5be0a628639f842a448d7.png
  93. 284
      docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/post.md
  94. 46
      docs/en/Community-Articles/2020-10-28-abp-framework--abp-commercial-33-final-have-been-released/post.md
  95. BIN
      docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/066daf9bcf2e9e2c6bed39f8e7480552.png
  96. BIN
      docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/1ad2d609148d655845ea39f8e73d0894.png
  97. BIN
      docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/723f7d5553da8714d3f839f8e747c95f.png
  98. 145
      docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/post.md
  99. BIN
      docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/461ed871392027d60be739f93edde364.png
  100. BIN
      docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/7585eb53490fa17c62c939f93ede61d6.png

101
.github/scripts/update_versions.py

@ -1,54 +1,79 @@
import os
import json
import re
import xml.etree.ElementTree as ET
from github import Github
def update_latest_versions():
version = os.environ["GITHUB_REF"].split("/")[-1]
def get_target_release_branch(version):
"""
Extracts the first two numbers from the release version (`9.0.5` `rel-9.0`)
to determine the corresponding `rel-x.x` branch.
"""
match = re.match(r"(\d+)\.(\d+)\.\d+", version)
if not match:
raise ValueError(f"Invalid version format: {version}")
if "rc" in version:
return False
major, minor = match.groups()
target_branch = f"rel-{major}.{minor}"
return target_branch
with open("latest-versions.json", "r") as f:
latest_versions = json.load(f)
def get_version_from_common_props(branch):
"""
Retrieves `Version` and `LeptonXVersion` from the `common.props` file in the specified branch.
"""
g = Github(os.environ["GITHUB_TOKEN"])
repo = g.get_repo("abpframework/abp")
latest_versions[0]["version"] = version
try:
file_content = repo.get_contents("common.props", ref=branch)
common_props_content = file_content.decoded_content.decode("utf-8")
with open("latest-versions.json", "w") as f:
json.dump(latest_versions, f, indent=2)
root = ET.fromstring(common_props_content)
version = root.find(".//Version").text
leptonx_version = root.find(".//LeptonXVersion").text
return True
return version, leptonx_version
except Exception as e:
raise FileNotFoundError(f"common.props not found in branch {branch}: {e}")
def create_pr():
g = Github(os.environ["GITHUB_TOKEN"])
repo = g.get_repo("abpframework/abp")
def update_latest_versions():
"""
Updates `latest-versions.json` based on the most relevant release branch.
"""
# Get the release version from GitHub reference
release_version = os.environ["GITHUB_REF"].split("/")[-1] # Example: "refs/tags/v9.0.5" → "v9.0.5"
if release_version.startswith("v"):
release_version = release_version[1:] # Convert to "9.0.5" format
branch_name = f"update-latest-versions-{os.environ['GITHUB_REF'].split('/')[-1]}"
base = repo.get_branch("dev")
repo.create_git_ref(ref=f"refs/heads/{branch_name}", sha=base.commit.sha)
# Determine the correct `rel-x.x` branch
target_branch = get_target_release_branch(release_version)
# Retrieve `common.props` data from the target branch
version, leptonx_version = get_version_from_common_props(target_branch)
# Get the current latest-versions.json file and its sha
contents = repo.get_contents("latest-versions.json", ref="dev")
file_sha = contents.sha
# Skip if the version is a preview or release candidate
if "preview" in version or "rc" in version:
return False
# Update the file in the repo
repo.update_file(
path="latest-versions.json",
message=f"Update latest-versions.json to version {os.environ['GITHUB_REF'].split('/')[-1]}",
content=open("latest-versions.json", "r").read().encode("utf-8"),
sha=file_sha,
branch=branch_name,
)
# Read the `latest-versions.json` file
with open("latest-versions.json", "r") as f:
latest_versions = json.load(f)
try:
pr = repo.create_pull(title="Update latest-versions.json",
body="Automated PR to update the latest-versions.json file.",
head=branch_name, base="dev")
except Exception as e:
print(f"Error while creating PR: {e}")
# Add the new version entry
new_version_entry = {
"version": version,
"releaseDate": "",
"type": "stable",
"message": "",
"leptonx": {
"version": leptonx_version
}
}
latest_versions.insert(0, new_version_entry) # Insert the new version at the top
pr.create_review_request(reviewers=["ebicoglu", "gizemmutukurt", "skoc10"])
# Update the file
with open("latest-versions.json", "w") as f:
json.dump(latest_versions, f, indent=2)
if __name__ == "__main__":
should_create_pr = update_latest_versions()
if should_create_pr:
create_pr()
return True

33
Directory.Packages.props

@ -15,12 +15,13 @@
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
<PackageVersion Include="AWSSDK.S3" Version="3.7.410.9" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.401.16" />
<PackageVersion Include="BunnyCDN.Net.Storage" Version="1.0.4" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.18.1" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.22.1" />
<PackageVersion Include="Blazorise" Version="1.6.2" />
<PackageVersion Include="Blazorise.Components" Version="1.6.2" />
<PackageVersion Include="Blazorise.DataGrid" Version="1.6.2" />
<PackageVersion Include="Blazorise.Snackbar" Version="1.6.2" />
<PackageVersion Include="Blazorise" Version="1.7.3" />
<PackageVersion Include="Blazorise.Components" Version="1.7.3" />
<PackageVersion Include="Blazorise.DataGrid" Version="1.7.3" />
<PackageVersion Include="Blazorise.Snackbar" Version="1.7.3" />
<PackageVersion Include="Castle.Core" Version="5.1.1" />
<PackageVersion Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
<PackageVersion Include="CommonMark.NET" Version="0.15.1" />
@ -37,6 +38,10 @@
<PackageVersion Include="EphemeralMongo6.runtime.linux-x64" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.osx-x64" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.win-x64" Version="1.1.3" />
<PackageVersion Include="MongoSandbox.Core" Version="1.0.1" />
<PackageVersion Include="MongoSandbox6.runtime.linux-x64" Version="1.0.1" />
<PackageVersion Include="MongoSandbox6.runtime.osx-x64" Version="1.0.1" />
<PackageVersion Include="MongoSandbox6.runtime.win-x64" Version="1.0.1" />
<PackageVersion Include="FluentValidation" Version="11.10.0" />
<PackageVersion Include="Google.Cloud.Storage.V1" Version="4.10.0" />
<PackageVersion Include="Hangfire.AspNetCore" Version="1.8.17" />
@ -106,12 +111,12 @@
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="9.0.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.3.0" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.3.0" />
<PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.3.0" />
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.3.0" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.5.0" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.5.0" />
<PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.5.0" />
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.5.0" />
<PackageVersion Include="Minio" Version="6.0.3" />
<PackageVersion Include="MongoDB.Driver" Version="2.29.0" />
<PackageVersion Include="MongoDB.Driver" Version="3.1.0" />
<PackageVersion Include="NEST" Version="7.17.5" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Nito.AsyncEx.Context" Version="5.1.2" />
@ -121,11 +126,11 @@
<PackageVersion Include="NUglify" Version="1.21.9" />
<PackageVersion Include="Nullable" Version="1.3.1" />
<PackageVersion Include="Octokit" Version="13.0.1" />
<PackageVersion Include="OpenIddict.Abstractions" Version="6.0.0" />
<PackageVersion Include="OpenIddict.Core" Version="6.0.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="6.0.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="6.0.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="6.0.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="6.1.1" />
<PackageVersion Include="OpenIddict.Core" Version="6.1.1" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="6.1.1" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="6.1.1" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="6.1.1" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="9.23.60" />
<PackageVersion Include="Polly" Version="8.4.2" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />

7
README.md

@ -1,11 +1,12 @@
# ABP Framework
![build and test](https://img.shields.io/github/actions/workflow/status/abpframework/abp/build-and-test.yml?branch=dev&style=flat-square) 🔹 [![codecov](https://codecov.io/gh/abpframework/abp/branch/dev/graph/badge.svg?token=jUKLCxa6HF)](https://codecov.io/gh/abpframework/abp) 🔹 [![NuGet](https://img.shields.io/nuget/v/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![NuGet (with prereleases)](https://img.shields.io/nuget/vpre/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![MyGet (nightly builds)](https://img.shields.io/myget/abp-nightly/vpre/Volo.Abp.svg?style=flat-square)](https://abp.io/docs/latest/release-info/nightly-builds) 🔹
[![NuGet Download](https://img.shields.io/nuget/dt/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![Code of Conduct](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](https://github.com/abpframework/abp/blob/dev/CODE_OF_CONDUCT.md) 🔹 [![CLA Signed](https://cla-assistant.io/readme/badge/abpframework/abp)](https://cla-assistant.io/abpframework/abp) 🔹 [![Discord Shield](https://discord.com/api/guilds/951497912645476422/widget.png?style=shield)](https://abp.io/join-discord)
[ABP](https://abp.io/) offers an **opinionated architecture** to build enterprise software solutions with **best practices** on top of the **.NET** and the **ASP.NET Core** platforms. It provides the fundamental infrastructure, production-ready startup templates, pre-built application modules, UI themes, tooling, guides and documentation to implement that architecture properly and **automate the details** and repetitive works as much as possible.
[![ABP Platform](https://github.com/user-attachments/assets/200653c0-0e69-4b47-b76a-3a83460aaab6)](https://abp.io)
[![ABP Platform](https://github.com/user-attachments/assets/c4356ec7-4d0f-4e00-a1d2-fc74ad985fb8)](https://abp.io)
## Getting Started

3
abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json

@ -16,6 +16,7 @@
"IdentityUserNotAvailable:Deleted": "This email address is not available. Reason: Already deleted.",
"SelectYourOrganization": "Select your organization",
"PleaseSelectOrganization": "Please select an organization to continue",
"Continue": "Continue"
"Continue": "Continue",
"CaptchaExplanation": "Calculate the below mathematical expression and enter the answer."
}
}

27
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json

@ -607,7 +607,9 @@
"OrganizationDoesNotHaveACreditCardInGateway": "Organization does not have a credit card in the gateway!",
"Permission:EditWinners": "Edit Winners",
"Permission:ChangeDrawingStatus": "Change Drawing Status",
"Menu:Licenses": "Licensing",
"Menu:LicenseSettings": "License Settings",
"Menu:Licensing": "Licensing",
"Menu:Campaigns": "Campaigns",
"OrganizationId": "Organization Id",
"RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?",
"AutoRenewals": "Auto Renewals",
@ -665,8 +667,29 @@
"EditAttendees": "Edit attendees",
"ExportAttendeesAsExcel": "Export attendees as Excel",
"DuplicateRaffle": "Duplicate raffle",
"LicenseMonthsOnNewPurchase": "License Months for New License",
"LicenseMonthsOnRenewPurchase": "License Months for License Renewal",
"SupportQuestionCountPerDeveloperOnRenewLicense": "Support Question Count Per Developer for License Renewal",
"SupportQuestionCountPerDeveloperOnNewLicense": "Support Question Count Per Developer for New License",
"IncludedDeveloperCount": "Included Developer Count",
"CanBuyAdditionalDevelopers": "Can Buy Additional Developers",
"HasEmailSupport": "Has Email Support",
"IsSupportPrivateQuestion": "Can Open Private Support Question",
"AdditionalDeveloperPrice": "Additional Developer Price",
"LicenseUpgradePrice": "License Upgrade Price",
"AdditionalDeveloperUpgradePrice": "Additional Developer Upgrade Price",
"EditLicense{0}": "Edit {0} License",
"CampaignNameAlreadyExists": "Campaign name already exists",
"DiscountRate": "Discount Rate",
"Menu:RedisManagement": "Redis Management",
"RedisManagement": "Redis Management",
"Permission:RedisManagement": "Redis Management"
"Permission:RedisManagement": "Redis Management",
"UserCleanUp": "User Clean Up",
"Permission:UserCleanUp": "User Clean Up",
"AllowPrivateQuestion": "Allow Private Question",
"Permission:Campaigns": "Campaigns",
"Permission:Licenses": "License Settings",
"BlockUserPolicy": "User Block Policies",
"Permission:BlockUserPolicy": "User Block Policy"
}
}

3
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json

@ -252,6 +252,7 @@
"DoYouAgreePrivacyPolicy": "By clicking <b>Subscribe</b> button you agree to the <a href=\"/terms-conditions\">Terms & Conditions</a> and <a href=\"/privacy\">Privacy Policy</a>.",
"AbpConferenceDescription": "ABP Conference is a virtual event for .NET developers to learn and connect with the community.",
"Mobile": "Mobile",
"MetaTwitterCard": "summary_large_image"
"MetaTwitterCard": "summary_large_image",
"IPAddress": "IP Address"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json

@ -645,7 +645,7 @@
"ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get <a href=\"{0}\" target=\"_blank\">premium support</a>. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use <a href=\"{1}\" target=\"_blank\">ABP Suite</a> which speeds up your development.",
"LicenseRenewalPrice": "License renewal price",
"LicensePrice": "License Price",
"TrialLicensePaymentInfoSection_Description": "<strong>Purchase license:</strong> By purchasing a license, you will continue to get <a href=\"{0}\" target=\"_blank\" rel=\"noopener\">premium support</a>. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use <a href=\"{1}\" target=\"_blank\" rel=\"noopener\">ABP Suite</a> which speeds up your development.<br>See the <a href=\"{2}\" target=\"_blank\" rel=\"noopener\">license comparison table</a> to check the differences between the license types.",
"TrialLicensePaymentInfoSection_Description": "<strong>Purchase license:</strong> By purchasing a license, you will continue to get <a href=\"https://abp.io/support/questions\" target=\"_blank\" rel=\"noopener\">premium support</a>. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use <a href=\"{1}\" target=\"_blank\" rel=\"noopener\">ABP Suite</a> which speeds up your development.<br>See the <a href=\"{2}\" target=\"_blank\" rel=\"noopener\">license comparison table</a> to check the differences between the license types.",
"SelectTargetLicense": "Select Target License",
"UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Yes, extend my license expiration date for 1 year.",
"UpgradePaymentInfoSection_WantToExtendLicense": "Do you want to extend your license for 1 more year?",

37
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json

@ -505,8 +505,8 @@
"AbpIoPlatformExplanation2": "In the core, it provides an <a href=\"https://github.com/abpframework/abp\" target=\"_blank\">open source</a> and free framework that consists of hundreds of <a href=\"{0}\">NuGet and NPM packages</a>, each offering different functionalities. The core framework is modular, themeable and microservice compatible, providing a complete architecture and a robust infrastructure. This allows you to focus on your business code rather than repeating yourself for every new project. It is based on the best practices of software development and integrates popular tools you're already familiar with. The framework is completely free, open source and community-driven.",
"AbpIoPlatformExplanation3": "The ABP Platform offers free and paid licensing options. Depending on your license type, you can access multiple production-ready startup templates, many pre-built application modules, UI themes, CLI and GUI tooling, support and more.",
"WhatAreTheDifferencesBetweenFreeAndPaid": "What are the differences between the free and commercial licenses?",
"WhatAreTheDifferencesBetweenFreeAndPaidExplanation1": "Free (open source) ABP license includes the core framework, basic startup templates, basic modules, basic themes and the community edition of ABP Studio.",
"WhatAreTheDifferencesBetweenFreeAndPaidExplanation2": "Commercial licenses offer additional features, including more startup templates (such as the microservice startup template), professional application modules, a full-featured UI theme, professional editions of ABP Studio, ABP Suite for code generation, more options for mobile startup applications, premium support and some other benefits.",
"WhatAreTheDifferencesBetweenFreeAndPaidExplanation1": "Free (open source) ABP license includes the core framework, basic startup templates, basic modules, basic themes and the community edition of <a href=\"https://abp.io/studio\" target=\"_blank\">ABP Studio</a>.",
"WhatAreTheDifferencesBetweenFreeAndPaidExplanation2": "Commercial licenses offer additional features, including more startup templates (such as the <a href=\"https://abp.io/startup-templates/microservice\" target=\"_blank\">microservice startup template</a>), professional application modules, a full-featured UI theme, professional editions of <a href=\"https://abp.io/studio\" target=\"_blank\">ABP Studio</a>, <a href=\"https://abp.io/suite\" target=\"_blank\">ABP Suite</a> for code generation, more options for mobile startup applications, premium support and some other benefits.",
"WhatAreTheDifferencesBetweenFreeAndPaidExplanation3": "For more information about the differences between the license types, please see the <a href=\"{0}\">pricing page</a>.",
"HowDoIUseTheABPIOPlatform": "How do I use the ABP Platform?",
"HowDoIUseTheABPIOPlatformExplanation": "ABP Framework extends the .NET platform, meaning anything you can do with a plain .NET solution is already possible with the ABP Framework. That makes it easy to get started with a low learning curve. See the <a href=\"{0}\">How it works</a> page to learn how to use the ABP Platform in practice.",
@ -520,12 +520,12 @@
"DowngradeLicensePlanExplanation": "You cannot downgrade your existing license plan. For further information, contact us at <a href=\"mailto:info@abp.io\">info@abp.io</a>.",
"LicenseTransferExplanation": "Yes! When you purchase a license, you become the license holder, which grants you access to the organization management page. An organization includes roles for owners and developers. Owners can manage developer seats and assign developers. Each assigned developer will log in to the system using the ABP CLI command and will have permissions for development and support.",
"LicenseExtendUpgradeDiff": "What is the difference between license renewal and upgrading?",
"LicenseExtendUpgradeDiffExplanation1": "<strong>Renewal</strong>: By renewing your license, you will continue to receive premium support and updates, both major and minor, for modules, tools, and themes. Additionally, you will be able to create new projects and use ABP Suite and ABP Studio, which can significantly speed up your development process. When you renew your license, one year is added to your license's expiry date.",
"LicenseExtendUpgradeDiffExplanation1": "<strong>Renewal</strong>: By renewing your license, you will continue to receive premium support and updates, both major and minor, for <a href=\"https://abp.io/modules\" target=\"_blank\">modules</a>, <a href=\"https://abp.io/tools\" target=\"_blank\">tools</a>, and <a href=\"https://abp.io/themes\" target=\"_blank\">themes</a>. Additionally, you will be able to create new projects and use <a href=\"https://abp.io/suite\" target=\"_blank\">ABP Suite</a> and <a href=\"https://abp.io/studio\" target=\"_blank\">ABP Studio</a>, which can significantly speed up your development process. When you renew your license, one year is added to your license's expiry date.",
"LicenseExtendUpgradeDiffExplanation2": "<strong>Upgrading</strong>: By upgrading your license, you will be promoted to a higher license plan, allowing you to receive additional benefits. Check out the <a href=\"{0}\">pricing page</a> to see the differences between the license plans. <strong>On the other hand, when you upgrade, your license expiry date will not change!</strong> To extend your license end date, you need to renew your license.",
"WhatHappensWhenLicenseEndsExplanation1": "ABP licenses are perpetual licenses. After your license expires, you can continue developing your project without the obligation to renew. Your license comes with a one-year update and premium support plan out of the box. To receive new features, performance enhancements, bug fixes, and continued support, as well as to use ABP Suite and ABP Studio, you need to renew your license. When your license expires;",
"WhatHappensWhenLicenseEndsExplanation1": "ABP licenses are perpetual licenses. After your license expires, you can continue developing your project without the obligation to renew. Your license comes with a one-year update and premium support plan out of the box. To receive new features, performance enhancements, bug fixes, and continued support, as well as to use <a href=\"https://abp.io/suite\" target=\"_blank\">ABP Suite</a> and <a href=\"https://abp.io/studio\" target=\"_blank\">ABP Studio</a>, you need to renew your license. When your license expires;",
"WhatHappensWhenLicenseEndsExplanation2": "You can not create new solutions using the pro startup templates, but you can continue developing your existing applications forever.",
"WhatHappensWhenLicenseEndsExplanation3": "You will receive updates for the application modules and themes within your MINOR version (excluding RC or Preview versions). For example, if you are using v3.2.0 of a module, you can still receive updates for v3.2.x (v3.2.1, v3.2.5... etc.) of that module. However, you cannot receive updates for the next major or minor version (such as v3.3.0, v3.3.3, 4.x.x.. etc.). For example, if the latest release was v4.4.3 when your license expired and later versions 4.4.4 and 4.5.0 were published, you would have access to v4.4.x but not to v4.5.x.",
"WhatHappensWhenLicenseEndsExplanation4": "You cannot install new application modules and themes added to your solution after your license ends.",
"WhatHappensWhenLicenseEndsExplanation4": "You cannot install pro application modules and themes to your solution.",
"WhatHappensWhenLicenseEndsExplanation5": "You cannot use the ABP Suite.",
"WhatHappensWhenLicenseEndsExplanation6": "You cannot use the ABP Studio’s pro features (you can use the Community Edition features of ABP Studio)",
"WhatHappensWhenLicenseEndsExplanation7": "You will no longer have access to premium support.",
@ -535,7 +535,7 @@
"WhenShouldIRenewMyLicenseExplanation3": "{0} for Business and Enterprise Licenses;",
"WhenShouldIRenewMyLicenseExplanation4": "However, if you renew your license more than {0} days after the expiry date, the renewal price will be the same as the initial purchase price of the license, with no discounts applied to your renewal.",
"DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP Platform allows you to auto-renew your license. This is an optional free service. You can toggle this feature when you purchase a new license or later enable it from your <a href=\"{0}\">organization management page</a>. If you want to turn on or off the auto-renewal, visit the <a href=\"{0}\">organization management page</a>, go to the 'Payments Method' section and either check or uncheck the 'Automatic Renewal' checkbox. When you turn off the auto-renewal feature, it will be your responsibility to renew your license manually.",
"TrialPlanExplanation": "Yes, to start your free trial, please contact <a href=\"mailto:marketing@volosoft.com?subject=Trial License Request\">marketing@volosoft.com</a>. We also offer a 30-day money-back guarantee for the Team license, with no questions asked! You can request a full refund within the first 30 days of purchasing the license. For Business and Enterprise licenses, we provide a 60% refund if requested within 30 days of purchase. This policy is due to the inclusion of the full source code for all modules and themes in the Business and Enterprise licenses.",
"TrialPlanExplanation": "Yes, to start your free trial, please contact <a href=\"mailto:sales@volosoft.com?subject=Trial License Request\">sales@volosoft.com</a>. We also offer a 30-day money-back guarantee for the Team license, with no questions asked! You can request a full refund within the first 30 days of purchasing the license. For Business and Enterprise licenses, we provide a 60% refund if requested within 30 days of purchase. This policy is due to the inclusion of the full source code for all modules and themes in the Business and Enterprise licenses.",
"BlazoriseLicenseExplanation": "We have an agreement between Volosoft and Megabit, according to which the Blazorise license is bundled with the ABP Platform’s commercial licenses. Therefore, our paid users do not need to purchase an additional Blazorise license.",
"HowToUpgradeExplanation1": "When you create a new application using the ABP startup templates, all the modules and themes are used as NuGet and NPM packages. This setup allows for easy upgrades to newer versions of the packages.",
"HowToUpgradeExplanation2": "In addition to the standard NuGet/NPM upgrades, <a href=\"{0}\">ABP CLI</a> provides an <strong>update</strong> command that automatically finds and upgrades all ABP-related packages in your solution.",
@ -546,7 +546,7 @@
"MicroserviceSupportExplanation3": "ABP Platform commercial licenses also includes a <a href=\"{0}\">microservice startup template</a> which can be used to directly create <strong>a production ready base solution for your microservice system.</strong>",
"MicroserviceSupportExplanation4": "For the non-paid users, we are also providing an <a href=\"{0}\">example e-commerce solution</a> that you can check to understand how you can build your microservice solution based on the ABP Framework.",
"MicroserviceSupportExplanation5": "However, a microservice system is a solution, and every solution will have different requirements, including network topology, communication scenarios, authentication possibilities, database sharding/partitioning decisions, runtime configurations, 3rd party system integrations and many more aspects. The ABP platform provides infrastructure for microservice scenarios, microservice-compatible modules, samples, and documentation to assist in building your own solution. However, don't expect to directly download your ideal, custom solution pre-built for you. You will need to understand it and bring specific parts together based on your requirements.",
"WhereCanIDownloadSourceCodeExplanation": "You can download the source code of all the ABP modules, Angular packages and themes via ABP Suite, ABP Studio or ABP CLI. Check out the forum question: <a href=\"{0}\">How to download the source-code</a>?",
"WhereCanIDownloadSourceCodeExplanation": "You can download the source code of all the ABP modules, Angular packages and themes via <a href=\"https://abp.io/suite\" target=\"_blank\">ABP Suite</a>, <a href=\"https://abp.io/studio\" target=\"_blank\">ABP Studio</a> or <a href=\"https://abp.io/cli\" target=\"_blank\">ABP CLI</a>. Check out the forum question: <a href=\"{0}\" target=\"_blank\">How to download the source-code</a>?",
"CommercialLicenses": "Commercial Licenses",
"WhatIsDifferencePaidLicenses": "What is the difference between a personal license and other types of paid licenses?",
"DifferencePaidLicenseExplanation1": "A non-personal paid license is the standard licensing option for enterprises and commercial entities. Licenses are purchased by the company and can be used by anyone within the organization.",
@ -586,10 +586,10 @@
"CreatePostSummaryInfo": "A short summary of the post to be shown on the post list. Maximum length: <b>{0}</b>",
"CreatePostCoverInfo": "For creating an effective post, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.<br/> Maximum file size: <b>1MB.</b>",
"CreatePostCoverInfo_Title": "<strong>Add a cover image to your post.</strong>",
"CreatePostCoverInfo1": "<i class='bi bi-dot'></i> Accepted file types : <strong>JPEG, JPG, PNG</strong>",
"CreatePostCoverInfo2": "<i class='bi bi-dot'></i> Max file size : <strong>1 MB</strong>",
"CreatePostCoverInfo3": "<i class='bi bi-dot'></i> Image proportion : <strong>16:9</strong>",
"CreatePostCoverInfo4": "<i class='bi bi-dot'></i> <a href='/assets/example-post-image.png' download> Download a sample cover image </a>",
"CreatePostCoverInfo1": "Accepted file types : <strong>JPEG, JPG, PNG</strong>",
"CreatePostCoverInfo2": "Max file size : <strong>1 MB</strong>",
"CreatePostCoverInfo3": "Image proportion : <strong>16:9</strong>",
"CreatePostCoverInfo4": "<a href='/assets/example-post-image.png' download> Download a sample cover image </a>",
"ThisExtensionIsNotAllowed": "This extension is not allowed.",
"TheFileIsTooLarge": "The file is too large.",
"GoToThePost": "Go to the Post",
@ -976,7 +976,7 @@
"IsSourceCodeIncludedExplanation1": "Depends on the license type you've purchased:",
"IsSourceCodeIncludedExplanation2": "<strong>Team</strong>: Your solution uses the modules and themes as NuGet and NPM packages. It doesn't include their source code. This way, you can easily upgrade these modules and themes whenever a new version is available. However, you can not get the source code of these modules and themes.",
"IsSourceCodeIncludedExplanation3": "<strong>Business/Enterprise</strong>: In addition to the Team license, you are able to download the source code of any module or theme you need. You can even remove the NuGet/NPM package references for a particular module and add its source code directly to your solution to fully change it.",
"IsSourceCodeIncludedExplanation4": "<p>Including the source code of a module to your solution gives you the maximum freedom to customize that module. However, it will then not be possible to automatically upgrade the module when a new version is released.</p><p>None of the licenses include the ABP Suite and ABP Studio source code, which is external tools that generates code for you and assists your development.</p><p>Check out the <a href=\"{0}\">Plans & Pricing</a> page for other differences between the license types.</p>",
"IsSourceCodeIncludedExplanation4": "<p>Including the source code of a module to your solution gives you the maximum freedom to customize that module. However, it will then not be possible to automatically upgrade the module when a new version is released.</p><p>None of the licenses include the <a href=\"https://abp.io/suite\" target=\"_blank\">ABP Suite</a> and <a href=\"https://abp.io/studio\" target=\"_blank\">ABP Studio</a> source code, which is external tools that generates code for you and assists your development.</p><p>Check out the <a href=\"{0}\">Plans & Pricing</a> page for other differences between the license types.</p>",
"ChangingDevelopers": "Can I change the registered developers of my organization in the future?",
"ChangingDevelopersExplanation": "In addition to adding new developers to your license, you can also change the existing developers (you can remove a developer and add a new one to the same seat) without any additional cost.",
"WhatHappensWhenLicenseEnds": "What happens when my license period ends?",
@ -1348,7 +1348,7 @@
"ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get <a href=\"{0}\" target=\"_blank\">premium support</a>. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use <a href=\"{1}\" target=\"_blank\">ABP Suite</a> which speeds up your development.",
"LicenseRenewalPrice": "License renewal price",
"LicensePrice": "License Price",
"TrialLicensePaymentInfoSection_Description": "<strong>Purchase license:</strong> By purchasing a license, you will continue to get <a href=\"{0}\" target=\"_blank\" rel=\"noopener\">premium support</a>. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use <a href=\"{1}\" target=\"_blank\" rel=\"noopener\">ABP Suite</a> which speeds up your development.<br>See the <a href=\"{2}\" target=\"_blank\" rel=\"noopener\">license comparison table</a> to check the differences between the license types.",
"TrialLicensePaymentInfoSection_Description": "<strong>Purchase license:</strong> By purchasing a license, you will continue to get <a href=\"https://abp.io/support/questions\" target=\"_blank\" rel=\"noopener\">premium support</a>. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use <a href=\"{1}\" target=\"_blank\" rel=\"noopener\">ABP Suite</a> which speeds up your development.<br>See the <a href=\"{2}\" target=\"_blank\" rel=\"noopener\">license comparison table</a> to check the differences between the license types.",
"SelectTargetLicense": "Select Target License",
"UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Yes, extend my license expiration date for 1 year.",
"UpgradePaymentInfoSection_WantToExtendLicense": "Do you want to extend your license for 1 more year?",
@ -1868,6 +1868,15 @@
"GenerateQuote" : "Generate Quote" ,
"GeneratePriceQuote": "Generate a Price Quote",
"Qa:QuestionPageTitle": "Support",
"SelectedTrainingName" : "Trainings"
"SelectedTrainingName" : "Trainings",
"RcStableDifference": "What is the difference between the RC version and the stable version of ABP?",
"RcStableDifferenceExplanation1": "The RC (Release Candidate) version is a pre-release version that allows early access to upcoming features and updates in the ABP project. It is primarily intended for testing purposes and for developers who want to prepare for the upcoming stable release. While it undergoes internal testing, it may still contain unresolved issues and it is not recommended for use in the production environment.",
"RcStableDifferenceExplanation2": "The Stable version is tested and officially supported for production use. It ensures reliability and compatibility.",
"RcStableDifferenceExplanation3": "Use the RC version for testing and early adoption but use the Stable version for production deployment.",
"AddToCalendar": "Add To Calendar",
"AddToGoogleCalendar": "Add To Google Calendar",
"DownloadICSFile": "Download ICS File",
"AddToAppleCalendar": "Add To Apple Calendar",
"AddToOutlookCalendar": "Add To Outlook Calendar"
}
}

6
build/common.ps1

@ -34,11 +34,13 @@ if ($full -eq "-f")
"../templates/module/aspnet-core",
"../templates/app/aspnet-core",
"../templates/console",
"../templates/wpf",
"../templates/app-nolayers/aspnet-core",
"../abp_io/AbpIoLocalization",
"../source-code"
)
)
if ($env:OS -eq "Windows_NT") {
$solutionPaths += "../templates/wpf"
}
}else{
Write-host ""
Write-host ":::::::::::::: !!! You are in development mode !!! ::::::::::::::" -ForegroundColor red -BackgroundColor yellow

4
common.props

@ -1,8 +1,8 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>9.1.0</Version>
<LeptonXVersion>4.1.0</LeptonXVersion>
<Version>9.2.0-preview</Version>
<LeptonXVersion>4.2.0-preview</LeptonXVersion>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>https://abp.io/</PackageProjectUrl>

147
docs/en/Blog-Posts/2025-01-21 v9_1_Preview/POST.md

@ -0,0 +1,147 @@
# ABP Platform 9.1 RC Has Been Released
We are happy to release [ABP](https://abp.io) version **9.1 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version.
Try this version and provide feedback for a more stable version of ABP v9.1! Thanks to you in advance.
## Get Started with the 9.1 RC
You can check the [Get Started page](https://abp.io/get-started) to see how to get started with ABP. You can either download [ABP Studio](https://abp.io/get-started#abp-studio-tab) (**recommended**, if you prefer a user-friendly GUI application - desktop application) or use the [ABP CLI](https://abp.io/docs/latest/cli).
By default, ABP Studio uses stable versions to create solutions. Therefore, if you want to create a solution with a preview version, first you need to create a solution and then switch your solution to the preview version from the ABP Studio UI:
![studio-switch-to-preview.png](studio-switch-to-preview.png)
## Migration Guide
There are no breaking changes in this version that would affect your application. Only you might need to update some constant names due to the OpenIddict 6.0 upgrade, which is explained in the [OpenIddict 6.0 migration guide](https://abp.io/docs/9.1/release-info/migration-guides/openiddict5-to-6).
## What's New with ABP v9.1?
In this section, I will introduce some major features released in this version.
Here is a brief list of titles explained in the next sections:
* Upgraded to Angular 19
* Upgraded to OpenIddict 6.0
* New Blazor WASM Bundling System
* Idle Session Warning
* Lazy Expandable Feature for Documentation
### Upgraded to Angular 19
We've upgraded the Angular templates and packages to **Angular 19**. This upgrade brings the latest features and improvements from the Angular ecosystem to ABP-based applications, including better performance and development experience.
### Upgraded to OpenIddict 6.0
OpenIddict 6.0 has been released and we've upgraded the OpenIddict packages to version 6.0 in ABP 9.1. This brings enhanced security features and improved authentication capabilities. The migration is straightforward and mainly involves updating some constant names:
- `OpenIddictConstants.Permissions.Endpoints.Logout` is now `OpenIddictConstants.Permissions.Endpoints.EndSession`
- `OpenIddictConstants.Permissions.Endpoints.Device` is now `OpenIddictConstants.Permissions.Endpoints.DeviceAuthorization`
If you're using IdentityModel packages directly, you'll need to upgrade them to the latest stable version (8.3.0). This update ensures your applications stay current with the latest security standards and best practices.
> Please refer to the [OpenIddict 6.0 migration guide](https://abp.io/docs/9.1/release-info/migration-guides/openiddict5-to-6) for more information.
### New Blazor WASM Bundling System
We've implemented a new bundling system for Blazor WebAssembly applications that eliminates the need to manually run the `abp bundle` command. This system automatically handles JavaScript and CSS file bundling at runtime, significantly improving both development experience and application loading performance.
**Key improvements include:**
- Automatic bundling of JavaScript and CSS files without manual intervention
- Dynamic file generation through the host application
- Better integration with the ABP module system
- Improved asset management through virtual file system
The new system is particularly beneficial for modular applications, as it allows modules to contribute their assets automatically to the global bundles. This results in a more maintainable and efficient asset management system for Blazor WebAssembly applications.
> Please refer to [this documentation](https://abp.io/docs/9.1/framework/ui/blazor/global-scripts-styles) for more information.
### Idle Session Warning
We've introduced a new idle session warning feature for the [Account (Pro) Module](https://abp.io/docs/latest/modules/account-pro) that helps manage user sessions more effectively. This security enhancement automatically monitors user activity and manages session timeouts in a user-friendly way.
![idle-session-settings.png](idle-session-settings.png)
The feature can be easily configured through the administration interface, where administrators can:
- Enable/disable the idle session timeout
- Set custom timeout duration in minutes
- Configure when users should be signed out
When a user becomes inactive for the configured duration, they'll receive a warning dialog:
![session-expiration-warning.png](session-expiration-warning.png)
**Key features and behaviors:**
- Tracks real user activity (mouse movements, keyboard presses) across all tabs
- Works on a per-browser session basis - affects all tabs of the same session
- Maintains session if user is active in any tab of the application
- Provides a countdown timer before automatic sign-out
- Offers options to "Stay signed in" or "Sign out now"
This feature significantly improves application security while maintaining a smooth user experience by preventing unexpected session expirations and data loss.
### Lazy Expandable Feature for Documentation
We've introduced a new lazy expandable feature to the documentation system that significantly improves navigation through large documentation sections. This enhancement addresses common challenges when dealing with extensive documentation hierarchies by introducing smart menu management.
**Key benefits and features:**
- **Cleaner Navigation:** The menu stays concise by hiding sub-items until they're needed, reducing visual clutter
- **Better Performance:** Reduces the initial load of the navigation tree by loading sub-items on demand
- **Improved Search Experience:** Makes filtering documentation items more efficient by showing only relevant top-level items
- **Context-Aware Expansion:** Automatically expands relevant sections when viewing specific documentation pages
The feature works by marking certain documentation sections as "lazy expandable" in the navigation configuration. When users navigate to a document within a lazy expandable section, the system automatically expands the relevant menu items while keeping other sections collapsed.
This improvement is particularly valuable for complex documentation areas like tutorials, solution templates, and extensive module documentation, where having all navigation items visible at once could be overwhelming.
An example of lazy expandable feature from the [ABP's BookStore Tutorial](https://abp.io/docs/latest/tutorials/book-store/part-01):
```json
{
"text": "Book Store Application",
"isLazyExpandable": true,
"path": "tutorials/book-store",
"items": [
{
"text": "Overview",
"path": "tutorials/book-store",
"isIndex": true
},
//other items...
]
}
```
![lazy-expandable.png](lazy-expandable.png)
### Others
Some other highlights from this release:
* Updated Iyzico NuGet packages to the latest version, which is used in the [ABP's Payment Module](https://abp.io/docs/latest/modules/payment#payment-module-pro).
* Removed optional _secondaryIds_ from path. See: [#21307](https://github.com/abpframework/abp/pull/21307)
* [CMS Kit Pro](https://abp.io/docs/latest/modules/cms-kit-pro): Added automatic deletion of comments when a blog post is deleted - comments are now automatically removed when their associated blog post is deleted.
* Avoiding global blocking in distributed event handlers (See [#21716](https://github.com/abpframework/abp/pull/21716)).
## Community News
### New ABP Community Articles
There are exciting articles contributed by the ABP community as always. I will highlight some of them here:
* [Integrating ABP Modules in Your ASP.NET Core Web API Project. A Step-by-Step Guide](https://abp.io/community/articles/integrating-abp-modules-in-your-asp.net-core-web-api-project.-a-stepbystep-guide-jtbyosnr) by [Sajankumar Vijayan](https://abp.io/community/members/connect)
* [ABP Framework: Background Jobs vs Background Workers](https://abp.io/community/articles/abp-framework-background-jobs-vs-background-workers-when-to-use-which-t98pzjv6) — When to Use Which? by [Alper Ebiçoğlu](https://twitter.com/alperebicoglu)
* [The new Unit Test structure in ABP application](https://abp.io/community/articles/the-new-unit-test-structure-in-abp-application-4vvvp2oy) by [Liming Ma](https://github.com/maliming)
* [How to Use OpenAI API with ABP Framework](https://abp.io/community/articles/how-to-use-openai-api-with-abp-framework-rsfvihla) by [Berkan Şaşmaz](https://github.com/berkansasmaz)
Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://abp.io/community/posts/submit) to the ABP Community.
## Conclusion
This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://abp.io/docs/9.1/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v9.1 RC and provide feedback to help us release a more stable version.
Thanks for being a part of this community!

BIN
docs/en/Blog-Posts/2025-01-21 v9_1_Preview/cover-image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

BIN
docs/en/Blog-Posts/2025-01-21 v9_1_Preview/idle-session-settings.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/en/Blog-Posts/2025-01-21 v9_1_Preview/lazy-expandable.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
docs/en/Blog-Posts/2025-01-21 v9_1_Preview/session-expiration-warning.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
docs/en/Blog-Posts/2025-01-21 v9_1_Preview/studio-switch-to-preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

46
docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/POST.md

@ -0,0 +1,46 @@
# ABP Studio Now Supports MacOS Intel 🚀
We are excited to announce that [ABP Studio, our cross-platform desktop application for ABP developers](https://abp.io/studio), now supports Intel-based Mac computers!
This addition expands our platform compatibility, ensuring that developers using Intel-powered Macs can also benefit from the powerful features of ABP Studio.
## What is ABP Studio?
For those who aren't familiar, [ABP Studio](https://abp.io/studio) is a powerful desktop application that makes ABP development faster and easier. It offers:
* Easy creation of new solutions (from simple applications to microservices)
* Visual architecture management for modular-monolith and microservice solutions
* Solution exploration tools for entities, services, and HTTP APIs
* Simplified running, debugging and monitoring of multi-application or microservice solutions
* Kubernetes cluster integration capabilities
* and more...
## Extended Platform Support
ABP Studio has been proudly supporting multiple platforms, and we're excited to add MacOS Intel to the our list of supported architectures. You can now use ABP Studio on:
* Windows x64
* Windows ARM
* MacOS Apple Silicon (M1/M2/M3)
* MacOS Intel **(New!)**
## Why This Matters
This update is particularly important for developers who are using Intel-based Mac computers. Previously, ABP Studio was only available for Apple Silicon Macs (for MacOS), but we understand that many developers are still using Intel-based Macs. With this release, we're ensuring that all Mac users can access our development tools, regardless of their processor architecture.
## Getting Started
Installing ABP Studio on your Intel-based Mac is straightforward:
1. Go to [abp.io/studio](https://abp.io/studio)
2. Click on the download button and select "MacOS Intel" from the dropdown menu
3. Once downloaded, open the installer package
4. Follow the installation wizard to complete the setup
![ABP Studio Download Page](abp-studio-macos-intel.png)
## Conclusion
As ABP team, we're always looking for ways to improve the developer experience. By supporting Intel-based Macs, we're ensuring that all Mac users can access our development tools, regardless of their processor architecture.
Stay tuned for more updates and enhancements as we continue to optimize ABP Studio and please provide us with your invaluable feedback. Thanks in advance!

BIN
docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/abp-studio-macos-intel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

BIN
docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/cover-image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

BIN
docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/594bc2cb4507d5ae91d439e91cf03cc9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

176
docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/post.md

@ -0,0 +1,176 @@
### Introduction
For a while, we were working to design a new major version of the ASP.NET Boilerplate framework. Now, it’s time to share it with the community. We are too excited and we believe that you are too.
#### Naming
The name of the framework remains same, except we will call it only as “ABP” instead of “ASP.NET Boilerplate”. Because, the “boilerplate” word leads to misunderstandings and does not reflect that it is a framework (instead of some boilerplate code). We continue to use the “ABP” name since it’s the successor of the current ASP.NET Boilerplate framework, except it’s a rewrite.
### How To Start
We have created a startup template. You can just create a new project from [abp.io/Templates](https://abp.io/Templates) and start your development. For more information, visit [abp.io](https://abp.io).
### Why A Complete Rewrite?
Why we spent our valuable time to rewrite it from scratch instead of incremental changes and improvements. Why?
#### ASP.NET Core
When we first introduced the ABP framework, it was 2013 (5 years ago)! There was no .Net Core & ASP.NET Core and there was no Angular2+. They were all developed from scratch after ABP’s release.
ASP.NET Core introduced many built-in solutions (extension libraries) for dependency injection, logging, caching, localization, configuration and so on. These are actually independent from the ASP.NET Core and usable for any type of application.
We were using 3rd-party libraries and our own solutions for these requirements. We immediately integrated to ASP.NET Core features once they were released. But that was an integration, instead of building the ABP framework on top of these extension libraries. For instance, current ASP.NET Boilerplate still depends on Castle Windsor for dependency injection even it’s integrated to ASP.NET Core’s DI system.
We wanted to depend on these new extension libraries instead of 3rd-party and custom solutions and this changes fundamental structures of the framework.
#### Self Modularization
While current ABP is already modular itself and consists of dozens of packages, we still wanted to split the functionalities to more fine grained nuget packages.
For example, the core Abp package contains many features like DDD classes, auditing, authorization, background jobs, event bus, json serialization, localization, multi-tenancy, threading, timing and so on… We wanted to split all these functionality into their own packages and make them optional.
#### Dropping Support for Legacy Technologies
Yes, the new ABP framework will not support ASP.NET MVC 5.x, Entity Framework 6.x and other legacy technologies.
These legacy technologies are maintained by Microsoft but no new feature is being added. So, if you are still using these technologies, you can continue with the current ASP.NET Boilerplate framework. We will continue to maintain it, fix bugs and will add new features.
Dropping support for these legacy libraries will improve our development speed (since we currently duplicate our work for some features) and concentrate on the .Net Core & ASP.NET Core.
The new ABP framework will be based on .net standard. So, it’s still possible to use full .net framework or .net core with the new ABP framework.
### Goals
We have learnt much from the community and had experience of developing the current ASP.NET Boilerplate framework. New ABP framework has significant and exciting goals.
#### Application Modularity
The first goal is to provide a good infrastructure to develop application modules. We think a module as a set of application features with its own database, its own entities, services, APIs, UI pages, components and so on.
We will create a module market which will contain free & paid application modules. You will also be able to publish your own modules on the market. More information will be coming soon.
#### Microservices
We are designing the new ABP framework to be ready to develop microservices and communicate them to each other.
We are designing application modules so that they can be separately deployable as microservices or they can be embedded into a monolithic application.
We are creating a [specification / best practice documentation](https://abp.io/documents/abp/latest/Best-Practices/Index) for that.
#### Theming and UI Composition
The new ABP framework will provide a theming infrastructure based on the latest Twitter Bootstrap 4.x. We developed a basic theme that only uses the plain Bootstrap 4.x styling. It’s free and open source. We are also developing premium & paid themes.
UI Composition is one of the main goals. For this purpose, theme system will provide menus, toolbars and other extensible areas to allow other modules to contribute.
#### ORM/Database Independence & MongoDB Integration
While current ASP.NET Boilerplate framework has implemented the repository pattern for ORM/Database independence, identity integration module (Abp.Zero* packages) has never worked well with ORMs other than EF.
With the new ABP framework, the ultimate goal is completely abstract underlying data store system and develop modules EF Core independent.
We embrace the MongoDB as a first-class citizen database and designing entities and repositories without any relational database or ORM assumption.
#### More Extensibility
New ABP framework provides more extensibility points and overriding capabilities for built-in services.
### Some Features
In this section, I will introduce some exciting new features of the new ABP framework.
#### Bootstrap Tag Helpers
We are creating a library to wrap twitter bootstrap 4.x elements/components into tag helpers. Example:
````C#
<abp-card>
<img abp-card-image="Top" src="~/images/my-dog.png" />
<abp-card-body>
<abp-card-title>Card title</abp-card-title>
<abp-card-text>
<p>
This is a sample card component built by ABP bootstrap
card tag helper. ABP has tag helper wrappers for most of
the bootstrap components.
</p>
</abp-card-text>
<a abp-button="Primary" href="#">Go somewhere &rarr;</a>
</abp-card-body>
</abp-card>
````
"abp-*" tags are ABP tag helpers to simplify writing HTML for Bootstrap 4.x.
#### Dynamic Forms
Dynamic forms tag helper allows you to dynamically create forms for given model classes. Example:
````C#
<abp-dynamic-form abp-model="@Model.PersonInput" submit-button="true" />
````
Output:
![dynamic-forms.png](594bc2cb4507d5ae91d439e91cf03cc9.png)
It currently supports most used input types and more in the development.
#### Virtual File System
Virtual File System allows you to embed views, pages, components, javascript, css, json and other type of files into your module assembly/package (dll) and use your assembly in any application. Your virtual files behave just like physical files in the containing application with complete ASP.NET Core Integration.
Read more [about the Virtual File System](https://medium.com/volosoft/designing-modularity-on-asp-net-core-virtual-file-system-2dd2cc2078bd) and see [its documentation](https://abp.io/documents/abp/latest/Virtual-File-System).
#### Dynamic Bundling & Minification System
Dynamic bundling & minification system works on the virtual file system and allows modules to create, modify and contribute to bundles in a modular, dynamic and powerful way. An example:
````C#
<abp-style-bundle>
<abp-style type="@typeof(BootstrapStyleContributor)" />
<abp-style src="/libs/font-awesome/css/font-awesome.css" />
<abp-style src="/libs/toastr/toastr.css" />
</abp-style-bundle>
````
This code creates a new style bundle on the fly by including bootstrap (and its dependencies if there are) and two more css files. These files are bundled & minified on production environment, but will be added individually on the development environment.
See [the documentation](https://abp.io/documents/abp/latest/AspNetCore/Bundling-Minification) for more.
#### Distributed Event Bus
In current ABP, there is an IEventBus service to trigger and handle events inside the application. In addition to this local event bus, we are creating a distributed event bus abstraction (and RabbitMQ integration) to implement distributed messaging patterns.
#### Dynamic C# HTTP Client Proxies
ABP was already creating dynamic javascript proxies for all HTTP APIs. This feature does also exists in the new ABP framework. In addition, it now can create dynamic C# proxies for all HTTP APIs.
### Future Works
All the stuffs mentioned above are already in development. However, we haven’t started some concepts yet.
#### Single Page Applications
We designed the new framework SPAs in mind. However, we haven’t tried it with any SPA framework and we haven’t prepared a startup template for it yet.
### What About ASP.NET Boilerplate (Current Version) and ASP.NET Zero?
We have dedicated development & support teams actively working on the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) and [ASP.NET Zero](https://aspnetzero.com/) projects. These projects have a big community and we are also getting contributions from the community.
We will continue to make enhancements, add new features and fix bugs for these projects for a long time. So, you can safely continue to use them.
### Is New ABP Production Ready?
No, not yet. Our first goal is to make fundamental features stable then incrementally complete other features.
We will frequently release new versions and every new version will probably have breaking changes. We will write breaking changes on the release notes.
We currently define it experimental. But we hope that this will not continue for a long time. We can not declare a date yet, follow our releases.
### Packages & Versioning
New ABP framework will start with v1.0 instead of following current ASP.NET Boilerplate's version to reflect the fact that it’s a rewrite.
We will frequently [release](https://github.com/abpframework/abp/releases) it. You can expect many breaking changes until v1.0. Starting with the v1.0, we will pay attention to not introduce breaking changes in 1.x releases.
Current ABP’s package names start with [Abp](https://www.nuget.org/packages/Abp) prefix (like Abp.EntityFrameworkCore). New package names start with [Volo.Abp](https://www.nuget.org/packages/Volo.Abp.Core) prefix (like Volo.Abp.EntityFrameworkCore).
### Which One Should I Start With?
If you are creating a new project, we suggest to continue with the current ASP.NET Boilerplate framework since it’s very mature, feature rich and production ready.
If you are open to breaking changes and want to have experience on the new framework, you can start with the new ABP. We don’t suggest it yet for projects with close deadlines and go to the production in a short term.
### Contribution
Just like the current ABP framework, the new framework is available for your contribution.
* You can send pull requests for code or documentation.
* You can write blog posts or tutorials about it.
* You can try it and share your experiences.
* You can create enhancement and feature requests.
* You can report bugs and other issues.
See [the contribution guide](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md).
### Communication / Links
* **Official web site**: [abp.io](https://abp.io)
* **Github**: [github.com/abpframework](https://github.com/abpframework)
* **Twitter**: [@abpframework](https://twitter.com/abpframework)

BIN
docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/d92ca39b02b79d5984d739ec266fd43f.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 KiB

52
docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/post.md

@ -0,0 +1,52 @@
After [the first announcement](https://abp.io/blog/abp/Abp-vNext-Announcement) on the ABP vNext, we have a lot of improvements on the codebase (1100+ commits on the [GitHub repository](https://github.com/abpframework/abp)). We've created features, samples, documentation and much more. In this post, I want to inform you about some news and the status of the project.
## Microservice Demo Solution
One of the major goals of the ABP framework is to provide a [convenient infrastructure to create microservice solutions](https://abp.io/documents/abp/latest/Microservice-Architecture).
We've been working to develop a microservice solution demo. Initial version was completed and [documented](https://abp.io/documents/abp/latest/Samples/Microservice-Demo). This sample solution aims to demonstrate a simple yet complete microservice solution;
- Has multiple, independent, self-deployable **microservices**.
- Multiple **web applications**, each uses a different API gateway.
- Has multiple **gateways** / BFFs (Backend for Frontends) developed using the [Ocelot](https://github.com/ThreeMammals/Ocelot) library.
- Has an **authentication service** developed using the [IdentityServer](https://identityserver.io/) framework. It's also a SSO (Single Sign On) application with necessary UIs.
- Has **multiple databases**. Some microservices has their own database while some services/applications shares a database (to demonstrate different use cases).
- Has different types of databases: **SQL Server** (with **Entity Framework Core** ORM) and **MongoDB**.
- Has a **console application** to show the simplest way of using a service by authenticating.
- Uses [Redis](https://redis.io/) for **distributed caching**.
- Uses [RabbitMQ](https://www.rabbitmq.com/) for service-to-service **messaging**.
- Uses [Docker](https://www.docker.com/) & [Kubernates](https://kubernetes.io/) to **deploy** & run all services and applications.
- Uses [Elasticsearch](https://www.elastic.co/products/elasticsearch) & [Kibana](https://www.elastic.co/products/kibana) to store and visualize the logs (written using [Serilog](https://serilog.net/)).
See [its documentation](https://abp.io/documents/abp/latest/Samples/Microservice-Demo) for a detailed explanation of the solution.
## Improvements/Features
We've worked on so many features including **distributed event bus** (with RabbitMQ integration), **IdentityServer4 integration** and enhancements for almost all features. We are continuously refactoring and adding tests to make the framework more stable and production ready. It is [rapidly growing](https://github.com/abpframework/abp/graphs/contributors).
## Road Map
There are still too much work to be done before the first stable release (v1.0). You can see [prioritized backlog items](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+milestone%3ABacklog) on the GitHub repo.
According to our estimation, we have planned to release v1.0 in Q2 of 2019 (probably in May or June). So, not too much time to wait. We are also very excited for the first stable release.
We will also work on [the documentation](https://abp.io/documents/abp/latest) since it is far from complete now.
First release may not include a SPA template. However, we want to prepare a simple one if it can be possible. Haven't decided yet about the SPA framework. Alternatives: **Angular, React and Blazor**. Please write your thought as a comment to this post.
## Chinese Web Site
There is a big ABP community in China. They have created a Chinese version of the abp.io web site: https://cn.abp.io/ They are keeping it up to date. Thanks to the Chinese developers and especially to [Liming Ma](https://github.com/maliming).
## NDC {London} 2019
It was a pleasure to be in [NDC {London}](https://ndc-london.com/) 2019 as a partner. We've talked to many developers about the current ASP.NET Boilerplate and the ABP vNext and we got good feedbacks.
We also had a chance to talk with [Scott Hanselman](https://twitter.com/shanselman) and [Jon Galloway](https://twitter.com/jongalloway). They visited our booth and we talked about the ideas for ABP vNext. They liked features, approaches and the goal of new ABP framework. See some photos and comments on twitter:
![scott-and-jon.png](d92ca39b02b79d5984d739ec266fd43f.png)
## Follow It
* You can star and follow the **GitHub** repository: https://github.com/abpframework/abp
* You can follow the official **Twitter** account for news: https://twitter.com/abpframework

BIN
docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/mvc-template-solution.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

87
docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/post.md

@ -0,0 +1,87 @@
ABP v0.18 has been released with [80+ issues](https://github.com/abpframework/abp/milestone/16?closed=1) resolved and [550+ commits](https://github.com/abpframework/abp/compare/0.17.0.0...0.18.0) pushed.
## Web Site Changes
[abp.io](https://abp.io) web site is **completely renewed** to highlight the goals and important features of the ABP framework. Document & blog URLs are also changed:
- `abp.io/documents` moved to [docs.abp.io](https://docs.abp.io).
- `abp.io/blog` moved to [blog.abp.io](https://blog.abp.io).
## ABP CLI
ABP CLI (Command Line Interface) is a new global command line tool to perform some common operations for ABP based solutions. Main functions are;
* **Creating a new application** or module project.
* **Adding a new module** to an application.
* **Updating** all ABP related packages in a solution.
ABP CLI is now the preferred way to create a new project, while you can still download a new project from the [get started](https://abp.io/get-started) page.
### Usage
Install the ABP CLI using a command line window:
````bash
dotnet tool install -g Volo.Abp.Cli
````
Create a new application:
````bash
abp new Acme.BookStore
````
Add a module to an application:
````bash
abp add-module Volo.Blogging
````
Update all ABP related packages in a solution:
````bash
abp update
````
See [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for details.
## New Templates
In this release, we've renewed all startup templates. The main goal is to provide better startup templates based on Domain Driven Design layers those also allow to create tiered solutions (where Web and API layers can be physically separated). It also includes unit & integration test projects separated for different layers.
The image below shows the new startup project for an MVC application.
![mvc-template-solution](mvc-template-solution.png)
See the [startup templates document](https://docs.abp.io/en/abp/latest/Startup-Templates/Index) for details.
## Change Logs
Here are some other features and enhancements coming with this release:
* New [Volo.Abp.Dapper](https://www.nuget.org/packages/Volo.Abp.Dapper) package.
* New [Volo.Abp.Specifications](https://www.nuget.org/packages/Volo.Abp.Specifications) package.
* New data seed system with `IDataSeeder` service & `IDataSeedContributor` interface to allow a modular initial data seed system.
* Improved MemoryDB implementation to serialize/deserialize objects stored in memory, so it provides more realistic infrastructure for mocking database in unit/integration tests.
* Added multi-language support for the docs module. Used it for the [ABP documentation](https://docs.abp.io).
See the [GitHub Release Notes](https://github.com/abpframework/abp/releases/tag/0.18.0) for all features, enhancements & bugfixes in this release.
## Road Map
One thing related to the ABP v1.0 release is .NET Core / ASP.NET Core 3.0 release. According to the [.NET Core road map](https://github.com/dotnet/core/blob/master/roadmap.md), 3.0 release has been scheduled for September 2019.
ASP.NET Core comes with big changes and features. As a big breaking change, it will [only run on .NET Core](https://github.com/aspnet/Announcements/issues/324) (dropping .net standard support), so it will not work with full .net framework anymore.
We had declared to release v1.0 in 2019 Q2. The main works we should do for v1.0 are;
* Fill the gaps in current features.
* Refactor & improve the current APIs.
* Fix known bugs.
* Complete the documentation & tutorials.
In addition to the work we should do, we are also considering to wait ASP.NET Core 3.0 release. Because, if we release ABP v1.0 before ASP.NET Core 3.0, we will have to release ABP v2.0 again in a short time and drop v1.0 support. So, we are considering to publish ABP v1.0 RC with ASP.NET Core 3.0 RC and align the final release date with Microsoft.
## Want to Contribute?
Thanks to the community for their support for ABP development. It is very appreciated. If you also want to contribute, see [this guide](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md) as the beginning.

44
docs/en/Community-Articles/2019-08-16-abp-v019-release-with-new-angular-ui/post.md

@ -0,0 +1,44 @@
ABP v0.19 has been released with [90 issues](https://github.com/abpframework/abp/milestone/17?closed=1) resolved and [650+ commits](https://github.com/abpframework/abp/compare/0.18.1...0.19.0) pushed.
## New Features
### Angular UI
Finally, ABP has a **SPA UI** option with the latest [Angular](https://angular.io/) framework. Angular integration was not simply creating a startup template.
* Created a base infrastructure to handle ABP's modularity, theming and some other features. This infrastructure has been deployed as [NPM packages](https://github.com/abpframework/abp/tree/dev/npm/ng-packs/packages).
* Created Angular UI packages for the modules like account, identity and tenant-management.
* Created a minimal startup template that authenticates using IdentityServer and uses the ASP.NET Core backend. This template uses the packages mentioned above.
* Worked on the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) and the [download page](https://abp.io/get-started) to be able to generate projects with the new UI option.
* Created a [tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Angular/Part-I) to jump start with the new UI option.
We've created the template, document and infrastructure based on the latest Angular tools and trends:
* Uses [NgBootstrap](https://ng-bootstrap.github.io/) and [PrimeNG](https://www.primefaces.org/primeng/) as the UI component libraries. You can use your favorite library, no problem, but pre-built modules work with these libraries.
* Uses [NGXS](https://ngxs.gitbook.io/ngxs/) as the state management library.
Angular was the first SPA UI option, but it is not the last. After v1.0 release, we will start to work on a second UI option. Not decided yet, but candidates are Blazor, React and Vue.js. Waiting your feedback. You can thumb up using the following issues:
* [Blazor](https://github.com/abpframework/abp/issues/394)
* [Vue.js](https://github.com/abpframework/abp/issues/1168)
* [React](https://github.com/abpframework/abp/issues/1638)
### Widget System
[Widget system](https://docs.abp.io/en/abp/latest/AspNetCore/Widgets) allows to **define and reuse** widgets for ASP.NET Core MVC applications. Widgets may have their own script and style resources and dependencies to 3rd-party libraries which are managed by the ABP framework.
### Others
We've solved many bugs and worked on existing features based on the community feedback. See the [v0.19 milestone](https://github.com/abpframework/abp/milestone/17?closed=1) for all the closed issues.
## Road Map
We had decided to wait for **ASP.NET Core 3.0** final release. Microsoft has announced to released it at [.NET Conf](https://www.dotnetconf.net/), between 23-25 September.
We have planned to finalize our work and move to ASP.NET Core 3.0 (with preview or RC) before its release. Once Microsoft releases it, we will immediately start to upgrade and test with the final release.
So, you can expect ABP **v1.0** to be released in the **first half of the October**. We are very excited and working hard on it.
You can follow the progress from [the GitHub milestones](https://github.com/abpframework/abp/milestones).
We will not add major features until v1.0.

19
docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/post.md

@ -0,0 +1,19 @@
Just one hour after Microsoft released it, ABP v0.21 [has been released](https://twitter.com/abpframework/status/1176185493119258624) based on the ASP.NET Core 3.0.
v0.21 has no new feature. It just upgrades to the stable ASP.NET Core 3.0. Check [v0.20 release notes](https://github.com/abpframework/abp/releases/tag/0.20.0) for new features, enhancements and bug fixes.
## About v1.0
ABP framework is getting closer to v1.0. We intent to release it in the middle of this October. In this time, we will test and document more.
## .NET Conf 2019
Microsoft has lunched ASP.NET Core 3.0 in the .NET Conf 2019, a 3-days virtual conference. ABP's lead developer [Halil ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has also talked in the conference to introduce the ABP framework. It was great to be a part of this important event.
## Techorama Netherlands 2019
[Techorama NL](https://techorama.nl/) is one of the biggest conferences in Europe. This year, Volosoft is a sponsor of the conference and will have a booth to talk to software developers about the ABP framework and software development. Our booth wall will look like shown below:
![volosoft-booth](volosoft-booth.png)
If you are in the conference, come to out booth to talk about the ABP framework. We will also have nice swags for you :)

BIN
docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/volosoft-booth.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

25
docs/en/Community-Articles/2019-10-22-abp-v10-has-been-finally-released/post.md

@ -0,0 +1,25 @@
Today is the big day! After ~3 years of continuous development, first stable ABP release, 1.0, has been released. Thanks to everyone contributed to the project or tried it so far.
Start playing with the new ABP framework now: [abp.io/get-started](https://abp.io/get-started)
## Statistics
Here, a few GitHub & NuGet statistics about the project:
* 2,360 stars.
* 5,917 commits.
* 72 contributors.
* 1,136 issues were closed, 276 open.
* 566 PRs were closed, 5 open.
* 39 releases.
* 122,795 downloads on NuGet.
There was an excellent demand even before the first release.
## Road Map
The first priority is to complete the documentation, since there are still a lot of missing documents for the framework features & the modules. Then we will continue to work on the issues on GitHub, based on the labeled priorities.
See the [GitHub milestone items](https://github.com/abpframework/abp/milestones).
ABP is a community-driven project. So, we are prioritizing the issues mostly based on the community feedback and demand.

BIN
docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/abp-commercial-demo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/lepton-theme-material.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-2020-volosoft-booth-wall.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

BIN
docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-london-volosoft.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

162
docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/post.md

@ -0,0 +1,162 @@
ABP Framework v2.0 has been released in this week. This post explains why we have released an early major version and what is changed with version 2.0.
In addition to the v2.0 release, we are excited to announce the **ABP Commercial**, which is a set of professional modules, tools, themes, and services built on top of the open-source ABP framework.
## ABP Framework v2.0
### Why 2.0 instead of 1.2?
It was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** issues on Linux, especially when you deploy your application to **Linux** containers with **low CPU and memory** resources.
We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization.
Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the [semantic versioning](https://semver.org/).
Most of the applications won't be affected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make these necessary changes.
### Breaking Changes
#### Removed Some Sync APIs
Some of the interceptors are required to use `async` APIs. When they intercept `sync` methods, they need to call `async` over `sync`. This eventually ends up with `async` over `sync` problem. That's why we have [removed some sync APIs](https://github.com/abpframework/abp/pull/2464).
**`Async` over `sync`** pattern is a classical problem of `C#` when you need to **call an `async` method inside a `sync` method**. While there are some workarounds to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find many documents related to this topic on the web.
To avoid this problem, we have removed:
- `sync` [repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like `insert`, `update`, etc...),
- `sync` APIs of the [unit of work](https://docs.abp.io/en/abp/latest/Unit-Of-Work),
- `sync` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs),
- `sync` APIs of the [audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging),
- some other rarely used `sync` APIs.
If you get any compile error, just use the `async` versions of these APIs.
#### Always Async!
Beginning from the v2.0, the ABP framework assumes that you are writing your application code `async` first. Otherwise, some framework functionalities may not properly work.
It is suggested to write `async` to all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers.
Even if your application service method doesn't need to be `async` , set it as `async` , because interceptors perform `async` operations (for authorization, unit of work, etc...). You can return `Task.Completed` from a method that doesn't make an `async` call.
Example:
````csharp
public Task<int> GetValueAsync()
{
//this method doesn't make any async call.
return Task.CompletedTask(42);
}
````
The example above normally doesn't need to be `async` because it doesn't perform an `async` call. However, making it `async` helps the ABP framework to run interceptors without `async` over sync calls.
This rule doesn't force you to write every method `async` . This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories))
#### Other Breaking Changes
See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes. Most of them will not affect your application code.
### New Features
This release also contains some new features and tens of enhancements:
- [#2597](https://github.com/abpframework/abp/pull/2597) New `Volo.Abp.AspNetCore.Serilog` package.
- [#2526](https://github.com/abpframework/abp/issues/2526) Client-side validation for the dynamic `C#` client proxies.
- [#2374](https://github.com/abpframework/abp/issues/2374) `Async` background jobs.
- [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown.
- [#2472](https://github.com/abpframework/abp/issues/2472) Implemented `DeviceFlowCodes` and `TokenCleanupService` for the `IdentityServer` module.
See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the complete list of features, enhancements and bug fixes.
### Documentation
We have completed some missing documentation with the v2.0 release. In the following weeks, we will mostly focus on the documentation and tutorials.
## ABP Commercial
[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes, and services** built on top of the open-source ABP framework.
- It provides [professional modules](https://commercial.abp.io/modules) in addition to the ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index).
- It includes a beautiful a [UI theme](https://commercial.abp.io/themes) with 5 different styles.
- It provides the [ABP Suite](https://commercial.abp.io/tools/suite); A tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added over time.
- [Premium support](https://commercial.abp.io/support) for enterprise companies.
In addition to these standard set of features, we will provide customer basis services. See the [commercial.abp.io](https://commercial.abp.io/) web site for other details.
### ABP Framework vs the ABP Commercial
The ABP Commercial **is not a paid version** of the ABP Framework. You can consider it as **set of additional benefits** for professional companies. You can use it to save your time and develop your product faster.
ABP Framework is **open source & free** and will always be like that!
As a principle, we build the main infrastructure as open-source and sell additional pre-built application features, themes, and tools. The main idea similar to the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products.
Buying a commercial license saves your significant time and effort and you can focus on your own business, besides you get dedicated and high priority support. Also, you will be supporting the ABP core team since we are spending most of our time to develop, maintain and support the open-source ABP Framework.
With the introduction of the ABP Commercial, now ABP becomes a platform. We call it as the **ABP.IO Platform** which consists of the open source ABP Framework and the ABP Commercial.
### Demo
If you are wondering how exactly looks like the ABP Commercial application startup template, you can easily [create a demo](https://commercial.abp.io/demo) and see it in action. The demo includes all the pre-built modules and the theme.
Here, a screenshot from the IdentityServer management module UI:
![abp-commercial-demo](abp-commercial-demo.png)
This is another screenshot from a demo application using the material design style of the theme:
![lepton-theme-material](lepton-theme-material.png)
### Pricing
You can build **unlimited projects/products**, sell to **unlimited customers**, host **unlimited servers** without any restriction. Pricing is mostly based on the **developer count**, **support level** and **source code** requirement. There are three main packages;
- **Team license**: Includes all the modules, themes and tools. Allows developing your product with up to 3 developers. You can buy additional developer licenses.
- **Business license**: Allows downloading the source code of all the modules and the themes. Also, it includes 5 developer licenses by default. You can buy additional developer licenses.
- **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license.
See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have any questions.
#### License Comparison
The license price changes based on your developer count, support level and source-code access.
##### The Source-Code
Team license doesn't include the source-code of the pre-built modules & themes. It uses all these modules as **NuGet & NPM packages**. In this way, you can easily **get new features and bug fixes** by just updating the package dependencies. But you can't access their source-code. So you don't have the possibility to embed a module's source code into your application and freely change the source-code.
Pre-built modules provide some level of **customization** and **extensibility** and allow you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. If you don't need to make major changes in the pre-built modules, the team license will be ideal for you, because it is cheaper and allows you to easily get new features and bug fixes.
Business and Enterprise licenses allow you to **download the source-code** of any module or the theme when you need it. They also use the same startup template with the team license, so all modules are used as `NuGet` & `NPM` packages by default. But in case of need, you can remove the package dependencies for a module and embed its source-code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely! But if you want, you should do it yourself using some merge tool or Git branch system.
#### License Lifetime
ABP Commercial license is **perpetual**, which means you can **use it forever** and continue to develop your applications.
However, the following services are covered for one year:
- Premium **support** ends after one year. You can continue to get community support.
- You can not get **updates** of the modules & the themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version.
- You can use the **ABP Suite** tool for one year.
If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price.
## NDC London 2020
Just like the [previous year](https://medium.com/volosoft/impressions-of-ndc-london-2019-f8f391bb7a9c), we are a partner of the famous software development conference: [NDC London](https://ndc-london.com/)! In the previous year, we were there with the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & [ASP.NET Zero](https://aspnetzero.com/) theme:
![ndc-london-volosoft](ndc-london-volosoft.png)
This year, we will be focusing on the **ABP.IO Platform** (The Open Source ABP Framework and the ABP Commercial). Our booth wall will be like that:
![ndc-london-volosoft](ndc-2020-volosoft-booth-wall.png)
If you attend to the conference, remember to visit our booth. We would be glad to talk about the ABP platform features, goals and software development in general.
### Would you like to meet the ABP Team?
If you are in London and want to have a coffee with us, we will be available at February 1st afternoon. [@hibrahimkalkan](https://twitter.com/hibrahimkalkan) and [@ismcagdas](https://twitter.com/ismcagdas) will be there.
Just write to info@abp.io if you want to meet :)

140
docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/post.md

@ -0,0 +1,140 @@
In the days of **coronavirus**, we have released **ABP Framework v2.3** and this post will explain **what's new** with this release and **what we've done** in the last two weeks.
## About the Coronavirus & Our Team
**We are very sad** about the coronavirus case. As [Volosoft](https://volosoft.com/) team, we have **remote workers** working in their home in different countries. Beginning from the last week, we've **completely started to work remotely** from home including our main office employees.
We believe in and pray for that the humanity will overcome this issue in a short time.
## About the Release Cycle
Beginning from the ABP v2.1.0, we have started to release feature versions once **in two weeks**, on Thursdays. This is the 3rd release after that decision and we see that it works fine for now and improved our agility.
We will continue to release **feature versions** (like v2.4, v2.5) in every two weeks. In addition, we may release **hotfix versions** (like v2.3.1, v2.3.2) whenever needed.
## What's New in ABP Framework v2.3.0
We've completed & merged **[104](https://github.com/abpframework/abp/milestone/30?closed=1) issues and pull requests** with **393 commits** in this two weeks development period.
I will introduce some new features and enhancements introduced with this release.
### React Native Mobile Application
We have finally completed the **react native mobile application**. It currently allows you to **login**, manage your **users** and **tenants**. It utilizes the same setting, authorization and localization systems of the ABP Framework.
A few screenshots from the application:
![mobile-ui](react-native-ui.png)
It doesn't have much functionality but it is a **perfect starting point** for your own mobile application since it is completely integrated to the backend and supports multi-tenancy.
### Angular TypeScript Proxy Generator
It is common to call a REST endpoint in the server from our Angular applications. In this case, we generally create **services** (those have methods for each service method on he server side) and **model objects** (matches to [DTOs](https://docs.abp.io/en/abp/latest/Data-Transfer-Objects) in the server side).
In addition to manually creating such server-interacting services, we could use tools like [NSWAG](https://github.com/RicoSuter/NSwag) to generate service proxies for us. But NSWAG has the following problems we've experienced:
* It generates a **big, single** .ts file which has some problems;
* It get **too large** when your application grows.
* It doesn't fit into the **[modular](https://docs.abp.io/en/abp/latest/Module-Development-Basics) approach** of the ABP framework.
* It creates a bit **ugly code**. We want to have a clean code (just like if we write manually).
* It can not generate the same **method signature** declared in the server side (because swagger.json doesn't exactly reflect the method signature of the backend service). We've created an endpoint that exposes server side method contacts to allow clients generate a better aligned client proxies.
So, we've decided to create an ABP CLI command to automatically generate the typescript client proxies ([#2222](https://github.com/abpframework/abp/issues/2222)) for your REST API developed with the ABP Framework.
It is easy to use. Just run the following command in the **root folder** of the angular application:
````bash
abp generate-proxy
````
It only creates proxies only for your own application's services. It doesn't create proxies for the services of the application modules you're using (by default). There are several options. See the [CLI documentation](https://docs.abp.io/en/abp/latest/CLI).
### CRUD Application Services for Entities with Composite Keys
` CrudAppService ` is a useful base class to create CRUD application services for your entities. But it doesn't support entities with **composite primary keys**. `AbstractKeyCrudAppService` is the new base class that is developed to support entities with composite primary keys. See [the documentation](https://docs.abp.io/en/abp/latest/Application-Services#abstractkeycrudappservice) for more.
### Add Source Code of the Modules
The application startup template comes with some [application modules](https://docs.abp.io/en/abp/latest/Modules/Index) **pre-installed** as **NuGet & NPM packages**. This have a few important advantages:
* You can **easily [upgrade](https://docs.abp.io/en/abp/latest/CLI#update)** these modules when a new version is available.
* Your solution becomes **cleaner**, so you can focus on your own code.
However, when you need to make **major customizations** for a depended module, it is not easy as its source code is in your applications. To solve this problem, we've introduces a new command to the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) that **replaces** NuGet packages with their **source code** in your solution. The usage is simple:
````bash
abp add-module --with-source-code
````
This command adds a module with source code or replaces with its source code if it is already added as package references.
> It is suggested to **save your changes** to your source control system before using this command since it makes a lot of changes in your source code.
In addition, we've documented how to customize depended modules without changing their source code (see the section below). It is suggested to use modules as packages to easily upgrade them in the future.
> Source code of the free modules are licensed under **MIT**, so you can freely change them and add into your solution.
### Switch to Preview
ABP Framework is rapidly evolving and we are frequently releasing new versions. However, if you want to follow it closer, you can use the **daily preview packages**.
We've created an ABP CLI command to easily **update to the latest preview packages** for your solution. Run the following command in the root folder of your solution:
````bash
abp switch-to-preview
````
It will change the versions of all ABP related NuGet and NPM packages. You can **switch back to the latest stable** when you want:
````bash
abp switch-to-stable
````
See the [ABP CLI document](https://docs.abp.io/en/abp/latest/CLI#switch-to-preview) fore more.
### Documentation Improvements
#### Extending/Customizing Depended Application Modules
We've created a huge documentation that explains how to customize a depended module without changing its source code. See [the documentation](https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Guide).
In addition to the documentation, we've revised all the modules ([#3166](https://github.com/abpframework/abp/issues/3166)) to make their services easily extensible & customizable.
#### EF Core Migration Guide
We've recently created a guide to explain the migration system that is used by the ABP startup templates. [This guide](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Migrations) also explains how to customize the migration structure, split your modules across multiple databases, reusing a module's table and son on.
#### Migration from the ASP.NET Boilerplate
If you have a solution built on the ASP.NET Boilerplate, we've [created a guide](https://docs.abp.io/en/abp/latest/AspNet-Boilerplate-Migration-Guide) that tries to help you if you want to migrate your solution to the new ABP Framework.
### Some Other Features
#### The Framework
* Add `IRepository.GetAsync` and `IRepository.FindAsync` methods ([#3184](https://github.com/abpframework/abp/issues/3148)).
#### Modules
* Get password & email address of the admin while creating a new tenant, for the tenant management module ([#3088](https://github.com/abpframework/abp/issues/3088)).
* Elastic search integrated full text search for the docs module ([#2901](https://github.com/abpframework/abp/pull/2901)).
* New Quartz background worker module ([#2762](https://github.com/abpframework/abp/issues/2762))
#### Samples
* Add multi-tenancy support to the microservice demo ([#3032](https://github.com/abpframework/abp/pull/3032)).
See [the release notes](https://github.com/abpframework/abp/releases/tag/2.3.0) for all feature, enhancement and bugfixes.
## What's Next?
We have the following goals for the next few months:
* Complete the **documentation and samples**, write more tutorials.
* Make the framework and existing modules more **customizable and extensible**.
* Integrate to **gRPC** & implement gRPC endpoint for pre-built modules ([#2882](https://github.com/abpframework/abp/issues/2882)).
* Create a **Blazor UI** for the ABP Framework & implement it for all the modules and startup templates ([#394](https://github.com/abpframework/abp/issues/394)).
* Add **new features** to pre-built modules and create new modules for the [ABP Commercial](https://commercial.abp.io/).
See [the GitHub milestones](https://github.com/abpframework/abp/milestones) for details.

BIN
docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/react-native-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/abp-commercial-ui-extensions.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/audit-log-entity-changes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/easy-crm.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/github-contribution-graph.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/module-entity-extended-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

247
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/post.md

@ -0,0 +1,247 @@
# ABP Framework v2.7.0 Has Been Released!
The **ABP Framework** & and the **ABP Commercial** v2.7 have been released. We hadn't created blog post for the 2.4, 2.4 and 2.6 releases, so this post will also cover **what's new** with these releases and **what we've done** in the last 2 months.
## About the Release Cycle & Development
Reminding that we had started to release a new minor feature version **in every two weeks**, generally on Thursdays. Our goal is to deliver new features as soon as possible.
We've completed & merged hundreds of issues and pull requests with **1,300+ commits** in the last 7-8 weeks, only for the ABP Framework repository. Daily commit counts are constantly increasing:
![github-contribution-graph](github-contribution-graph.png)
ABP.IO Platform is rapidly growing and we are getting more and more contributions from the community.
## What's New in the ABP Framework?
### Object Extending System
In the last few releases, we've mostly focused on providing ways to extend existing modules when you use them as NuGet/NPM Packages.
The Object Extending System allows module developers to create extensible modules and allows application developers to customize and extend a module easily.
For example, you can add two extension properties to the user entity of the identity module:
````csharp
ObjectExtensionManager.Instance
.AddOrUpdate<IdentityUser>(options =>
{
options.AddOrUpdateProperty<string>("SocialSecurityNumber");
options.AddOrUpdateProperty<bool>("IsSuperUser");
}
);
````
It is easy to define validation rules for the properties:
````csharp
ObjectExtensionManager.Instance
.AddOrUpdateProperty<IdentityUserCreateDto, string>(
"SocialSecurityNumber",
options =>
{
options.Attributes.Add(new RequiredAttribute());
options.Attributes.Add(
new StringLengthAttribute(32) {
MinimumLength = 6
}
);
});
````
You can even write custom code to validate the property. It automatically works for the objects those are parameters of an application service, controller or a page.
While extension properties of an entity are normally stored in a single JSON formatted field in the database table, you can easily configure to store a property as a table field using the EF Core mapping:
````csharp
ObjectExtensionManager.Instance
.AddOrUpdateProperty<IdentityUser, string>(
"SocialSecurityNumber",
options =>
{
options.MapEfCore(b => b.HasMaxLength(32));
}
);
````
See the [Object Extensions document](https://docs.abp.io/en/abp/latest/Object-Extensions) for details about this system.
See also the [Customizing the Existing Modules](https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Guide) guide to learn all the possible customization options.
### Text Templating Package
[Volo.Abp.TextTemplating](https://www.nuget.org/packages/Volo.Abp.TextTemplating) is a new package introduced with the v2.7.0. Previously, [Volo.Abp.Emailing](https://www.nuget.org/packages/Volo.Abp.Emailing) package had a similar functionality but it was limited, experimental and tightly coupled to the emailing.
The new text templating package allows you to define text based templates those can be easily localized and reused. You can define layout templates and share the layout from other templates.
We are currently using it for email sending. A module needs to send an email typically defines a template. Example:
````xml
<h3>{{L "PasswordReset"}}</h3>
<p>{{L "PasswordResetInfoInEmail"}}</p>
<div>
<a href="{{model.link}}">{{L "ResetMyPassword"}}</a>
</div>
````
This is a typical password reset email template.
* The template system is based on the open source [Scriban library](https://github.com/lunet-io/scriban). So it supports if conditions, loops and much more.
* `model` is used to pass data to the template (just like the ASP.NET Core MVC).
* `L` is a special function that localizes the given string.
It is typical to use the same layout for all emails. So, you can define a layout template. This is the standard layout template comes with the framework:
````xml
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
</head>
<body>
{{content}}
</body>
</html>
````
A layout should have a `{{content}}` area to render the child content (just like the `RenderBody()` in the MVC).
It is very easy to override a template content by the final application to customize it.
Whenever you need to render a template, use the `ITemplateRenderer` service by providing the template name and a model. See the [text templating documentation](https://docs.abp.io/en/abp/latest/Text-Templating) for details. We've even created a UI for the ABP Commercial (see the related section below).
### Subscribing to the Exceptions
ABP Framework's [exception handling system](https://docs.abp.io/en/abp/latest/Exception-Handling) automatically handles exceptions and returns an appropriate result to the client. In some cases, you may want to have a callback that is notified whenever an exception occurs. In this way, for example, you can send an email or take any action based on the exception.
Just create a class derived from the `ExceptionSubscriber` class in your application:
````csharp
public class MyExceptionSubscriber : ExceptionSubscriber
{
public override async Task HandleAsync(ExceptionNotificationContext context)
{
//TODO...
}
}
````
See the [exception handling](https://docs.abp.io/en/abp/latest/Exception-Handling) document for more.
### Others
There are many minor features and enhancements made to the framework in the past releases. Here, a few ones:
* Added `AbpLocalizationOptions.DefaultResourceType` to set the default resource type for the application. In this way, the localization system uses the default resource whenever the resource was not specified. The latest application startup template already configures it, but you may want to set it for your existing applications.
* Added `IsEnabled` to permission definition. In this way, you can completely disable a permission and hide the related functionality from the application. This can be a way of feature switch for some applications. See [#3486](https://github.com/abpframework/abp/issues/3486) for usage.
* Added Dutch and German localizations to all the localization resources defined by the framework. Thanks to the contributors.
## What's New in the ABP Commercial
The goal of the [ABP Commercial](https://commercial.abp.io/) is to provide pre-build application functionalities, code generation tools, professional themes, advanced samples and premium support for ABP Framework based projects.
We are working on the ABP Commercial in the parallel to align with the ABP Framework features and provide more modules, theme options and tooling.
This section explains what's going on the ABP Commercial side.
### Module Entity Extension System
Module entity extension system is a higher level API that uses the object extension system (introduced above) and provides an easy way to add extension properties to existing entities. A new extension property easily automatically becomes a part of the HTTP API and the User Interface.
Example: Add a `SocialSecurityNumber` to the user entity of the identity module
````csharp
ObjectExtensionManager.Instance.Modules()
.ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<string>( //property type: string
"SocialSecurityNumber", //property name
property =>
{
//validation rules
property.Attributes.Add(new RequiredAttribute());
property.Attributes.Add(
new StringLengthAttribute(64) {
MinimumLength = 4
}
);
//...other configurations for this property
}
);
});
});
````
With just such a configuration, the user interface will have the new property (on the table and on the create/edit forms):
![module-entity-extended-ui](module-entity-extended-ui.png)
The new property can be easily localized and validated. Currently, it supports primitive types like string, number and boolean, but we planned to add more advanced scenarios by the time (like navigation/lookup properties).
See the [Module Entity Extensions](https://docs.abp.io/en/commercial/latest/guides/module-entity-extensions) guide to learn how to use it and configure details.
#### Other Extension Points
There are also some other pre-defined points to customize and extend the user interface of a depended module:
* You can add a new action for an entity on the data table (left side on the picture below).
* You can add new buttons (or other controls) to the page toolbar (right side on the picture below).
* You can add custom columns to a data table.
![abp-commercial-ui-extensions](abp-commercial-ui-extensions.png)
See the [Customizing the Modules](https://docs.abp.io/en/commercial/latest/guides/customizing-modules) guide to learn all the possible ways to customize a depended module.
### Text Template Management Module
We are introducing a new module with the v2.7 release: [Text Template Management](https://docs.abp.io/en/commercial/latest/modules/text-template-management). It is basically used to edit text/email templates (introduced with the ABP Framework 2.7) on the user interface and save changed in the database.
A screenshot from the content editing for the password reset email template:
![text-template-content-ui](text-template-content-ui.png)
This module comes pre-installed when you create a new project.
### Entity History Views
Audit logging UI module now shows all the entity changes in the application with property change details.
![audit-log-entity-changes](audit-log-entity-changes.png)
You can also check history for an entity when you click to the actions menu for the entity:
![tenant-entity-changes](tenant-entity-changes.png)
### More Samples
We are creating more advanced sample applications built with the ABP Commercial. Easy CRM is one of them which will be available in a few days to the commercial customers.
Here, a screenshot from the Easy CRM dashboard:
![easy-crm](easy-crm.png)
It has accounts, contacts, product groups, products, orders and so on.
### New Modules
We continue to improve existing modules and creating new modules. In addition to the new [text template management](https://docs.abp.io/en/commercial/latest/modules/text-template-management) module introduced above;
* We've recently released a [payment module](https://commercial.abp.io/modules/Volo.Payment) that currently works with PayU and 2Checkout payment gateways. More gateways will be added by the time.
* We've created a simple [Twilio SMS integration](https://docs.abp.io/en/commercial/latest/modules/twilio-sms) module to send SMS over the Twilio.
* We are working on a **chat module** that is currently being developed and will be available in the next weeks.
* We are working on the **organization unit management** system for the identity module to create hierarchical organization units (domain layer will be open source & free).
More modules, theme and tooling options are being developed for the ABP Commercial and the ABP Framework.
## ABP Framework vs ABP Commercial
We ([Volosoft](https://volosoft.com/) - the core team behind the ABP.IO platform), are spending almost equal time on the ABP Framework and the ABP Commercial and we consider the ABP.IO platform as a whole.
[ABP Framework](https://abp.io/) provides all the infrastructure and application independent framework features to make you more productive, focus on your own business code and implement software development best practices. It provides you a well defined and comfortable development experience without repeating yourself.
[ABP Commercial](https://commercial.abp.io/) provides pre-built functionalities, themes and tooling to save your time if your requirements involve these functionalities in addition to the premium support for the framework and the pre-built modules.

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/tenant-entity-changes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/text-template-content-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

BIN
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/abp-chat-module.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-default-theme.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

BIN
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-material-theme.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-themes.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

215
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/post.md

@ -0,0 +1,215 @@
# ABP v2.8.0 Releases & Road Map
The **ABP Framework** & and the **ABP Commercial** v2.8 have been released. This post will cover **what's new** with these releases and the **middle-term road maps** for the projects.
## What's New in the ABP Framework 2.8?
You can see all the changes on the [GitHub release notes](https://github.com/abpframework/abp/releases/tag/2.8.0). This post will only cover the important features/changes.
### SignalR Integration Package
We've published [a new package](https://www.nuget.org/packages/Volo.Abp.AspNetCore.SignalR) to integrate SignalR to ABP framework based applications.
> It is already possible to follow [the standard Microsoft tutorial](https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr) to add [SignalR](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction) to your application. However, ABP provides a SignalR integration packages those simplify the integration and usage.
See the [SignalR Integration document](https://docs.abp.io/en/abp/latest/SignalR-Integration) to start with the SignalR.
#### SignalR Demo Application
We've also created a simple chat application to demonstrate how to use it.
![signalr-chat-demo](signalr-chat-demo.png)
See [the source code of the application.](https://github.com/abpframework/abp-samples/tree/master/SignalRDemo)
### Console Application Startup Template
The new console application template can be used to create a new console application that has the ABP Framework integrated.
Use ABP CLI to create a new console application, specifying the `console` as the `-t` (template) option:
<code style="font size:30px; background-color: lightgray">
abp new MyApp -t console
</code>
Thanks to the contribution of [@realLiangshiwei](https://github.com/realLiangshiwei) for this template.
### RTL Support for the MVC UI & Arabic Localization
[@kgamalseif](https://github.com/kgamalseif) has contributed a RTL implementation for the MVC UI which looks pretty fine:
![rtl-ui](rtl-ui.png)
He also localized all the framework and module resources. Thanks to him for this great contribution.
### Others
Some other highlights from this release:
* Converted HttpApi.Client packages of the modules to .netstandard 2.0 to be compatible with other kind of applications.
* Improved the object extensibility system to better handle UI, localization and validation.
* Implemented disabling background job execution for HangFire & Quartz intergrations.
* New JsTree integration package for the MVC UI.
* Moved all samples to the new [abp-samples](https://github.com/abpframework/abp-samples) repository and created an [index page](https://docs.abp.io/en/abp/latest/Samples/Index) to see all.
### Deprecations
* Deprecated the `app.UseMvcWithDefaultRouteAndArea()` and introduced the `app.UseConfiguredEndpoints()` (see [#3880](https://github.com/abpframework/abp/issues/3880)).
* Deprecated the `UsePostgreSql()` and introduced the `UseNpgsql()` for the [Volo.Abp.EntityFrameworkCore.PostgreSql](http://nuget.org/packages/Volo.Abp.EntityFrameworkCore.PostgreSql) package. Switch to `UseNpgsql()` if you are using PostgreSQL.
Old methods are marked as `Obsolete` and will be removed in the next major versions.
## What's New in the ABP Commercial 2.8?
### The New Lepton Theme
We've completely revised [the lepton theme](https://commercial.abp.io/themes). See with different styles:
![lepton-themes](lepton-themes.gif)
Example screenshots from the language management page of the ABP Commercial:
![lepton-abp-default-theme](lepton-abp-default-theme.png)
(Default style UI)
![lepton-abp-material-theme](lepton-abp-material-theme.png)
(Material style UI)
[Create a demo](https://commercial.abp.io/demo) to test all the styles in live. You can change the style from the settings page.
### The New Chat Module
The first version of [the chat module](https://commercial.abp.io/modules/Volo.Chat) has been released with this version. It has only the MVC / Razor Pages UI. Angular UI is on the way.
![abp-chat-module](abp-chat-module.png)
It currently has a simple **real time text messaging** functionality. More features like group messaging, sending images/files are on the road map.
### Others
* Implemented [module entity extension](https://docs.abp.io/en/commercial/latest/guides/module-entity-extensions) system for the Angular UI. Also improved the system to better handle float/double/decimal, date, datetime, enum and boolean properties.
* Managing product groups on a tree view for the [EasyCRM sample application](https://docs.abp.io/en/commercial/latest/samples/easy-crm).
## About the Next Versions
We publish feature releases in **every 2 weeks**. So, the planned date of the next feature version is **June 04** and the version number is **2.9**. This (probably) will be the **last 2.x version** and the following version will be **3.0**.
### ABP Framework 2.9 & 3.0
#### Organization Unit System
Organization Unit system for the Identity module was intended to be released with 2.8, but unfortunately we couldn't be sure about the stability of the feature, so deferred it to the 2.9.
#### gRPC
We planned to work on a gRPC integrated example application. Then we will plan to create gRPC endpoints for all [pre-built modules](https://docs.abp.io/en/abp/latest/Modules/Index) and to [the startup templates](https://docs.abp.io/en/abp/latest/Startup-Templates/Index). We want to use these endpoints with the new planned [Blazor](https://docs.microsoft.com/en-us/aspnet/core/blazor/) UI option (there is a [huge demand](https://github.com/abpframework/abp/issues/394) on a Blazor UI, we know). It doesn't mean that we'll finish the whole work in 3.0, but we are starting and will continue in 3.0+ versions.
#### Oracle with EF Core
We see that the people using Oracle with EF Core has some pains, independent from the ABP Framework. Because there is no stable & free Oracle provider for EF Core 3.1 yet. We only see the [Devart](https://www.devart.com/) has created a [paid package](https://www.nuget.org/packages/Devart.Data.Oracle.EFCore).
[@ebicoglu](https://github.com/ebicoglu) has [created a gist](https://gist.github.com/ebicoglu/9f364c7eff9d87315af0178866186401) to demonstrate how to use it. We [planned](https://github.com/abpframework/abp/issues/3983) to work on an integration package to make it even easier.
#### API Documentation
We are [working](https://github.com/abpframework/abp/issues/1184) to create an API documentation for the framework and build a CD pipeline to automatically publish it in every new release. This will make easier to explore the framework classes.
#### Sample Application: Using SignalR on a Tiered/Distributed system
Using SignalR on a distributed/microservice system can be tricky since the services are not connected to clients and can not directly call client functions from the server. One way to overcome this problem is using a distributed message bus (like RabbitMQ) that transfers the message from the service to the web application to deliver to the client.
We will create an example application and document it to demonstrate such an architecture and how it is easy by using the ABP Framework.
While this topic is not directly related to the ABP Framework and the problem is not unique to an ABP based application, we find useful to create such guides to developers.
#### And...
We will spend more time to write more documentation, implement performance improvements, make more tests, creating more extensibility points and so on.
### ABP Commercial 2.9 & 3.0
#### Organization Unit Management UI
In parallel to the OU system in the ABP Framework (mentioned above), we are creating a UI to manage the organization units, which will be released with the 2.9.
#### Angular UI for the Chat Module
The Chat Module (mentioned above) only has the ASP.NET Core MVC / Razor Pages UI now. We are working to create the Angular UI for this module.
#### New Module Idea: File Management
We are looking to create a File Management Module that is used to manage (upload/download) and share files between users. You may think as a very simple and lightweight Google Drive :).
#### Easy CRM Angular UI
[Easy CRM](https://docs.abp.io/en/commercial/latest/samples/easy-crm) is a sample application we've released with the previous version of the ABP Commercial. In this version, we've added more features to this application. In the next version, we will work on the Angular UI for it.
We found this application very useful since it is very close to a real world application compared to the simple [BookStore](https://docs.abp.io/en/commercial/latest/samples/index#book-store) example.
#### And...
We are working to improve current [modules](https://commercial.abp.io/modules), [themes](https://commercial.abp.io/themes) and the [tooling](https://commercial.abp.io/tools) to provide a more comfortable developer experience with the version 3.0.
## The Road Map
We are frequently asked about the road map of the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/). While we've answered to it in various platforms, with this release, we've adding road map pages for these products to their documentation:
* [ABP Framework Road Map](https://docs.abp.io/en/abp/latest/Road-Map)
* [ABP Commercial Road Map](https://docs.abp.io/en/commercial/latest/road-map)
I am also writing the road map here, in the following sections;
### ABP Framework Road Map
You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones).
While we will **continue to add other exciting features**, we will work on the following major items in the middle term:
* **gRPC integration** and implementation for all the pre-built modules.
* **Blazor UI** for the framework and all the pre-built modules.
* **.NET 5.0**! As Microsoft has announced that the .NET 5.0 will be released in November 2020, we will prepare for this change before and move to the .NET 5.0 just after Microsoft releases it. We hope a smooth transition.
### ABP Commercial Road Map
We will work on the same items in parallel to to ABP Framework to implement them in the ABP Commercial side:
* gRPC integration
* Blazor UI
* .NET 5.0
In addition, we will be working on the following items in the middle term:
* A startup template to create microservice solutions (that has Ocelot, Redis, RabbitMQ, ElasticSearch, IdentityServer... etc. pre-integrated and configured).
* More module extension points.
* Dynamic dashboard system.
* Real-time notification system.
* Subscription and payment system for the SaaS module.
* More authentication options.
* New application modules (we have tens of module ideas and will share by the time - the "file management" announced above was one of them).
* New themes & theme styles (including public/corporate web site themes).
## BONUS: ABP.IO Platform Road Map
While the ABP Framework and the ABP Commercial are the fundamental components of the ABP.IO Platform, we want to create a much bigger platform to bring the .NET community together to create reusable modules, share knowledge, help each other by taking the advantage of the ABP Framework's unified and standardized development model.
So, we have new *.abp.io web site ideas I want to share with the community
#### market.abp.io
A platform that is used by developers/companies to publish their reusable application modules, themes, libraries and tools base don the ABP Framework. There will be free/open source and commercial products on this web site.
#### jobs.abp.io
We are getting too many emails from companies want to hire developers or other other companies to build their products based on the ABP.IO Platform. We, as [Volosoft](https://volosoft.com/), want to stay in the product side rather than customer basis projects. We generally lead them to experienced developers and companies.
We have a plan to create a web site to meet each side, so you can find developers for your projects or you find short or long term works to do.
## Follow the ABP!
Follow the social media accounts to get informed about happenings on the ABP.IO Platform:
* [@abpframework](https://twitter.com/abpframework): ABP Framework official Twitter account
* [@abpcommercial](https://twitter.com/abpcommercial): ABP Commercial official Twitter account

BIN
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/rtl-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/signalr-chat-demo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-chat-module.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-commercial-290.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-framework-290-.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/easy-crm-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/lepton-theme.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/organization-units.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

300
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/post.md

@ -0,0 +1,300 @@
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?
You can see all the changes on the [GitHub release notes](https://github.com/abpframework/abp/releases/tag/2.9.0). This post will only cover the important features/changes.
![abp-framework-290-.png](abp-framework-290-.png)
### 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 (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 the startup application template with v2.8 and v.2.9:
### v2.8
````
2020-06-04 22:59:04.891 +08:00 [INF] Starting web host.
2020-06-04 22:59:07.662 +08:00 [INF] Now listening on: https://localhost:44391
2020-06-04 22:59:17.315 +08:00 [INF] Request finished in 7756.6218ms 200 text/html;
Total: 12.42s
````
### v2.9
````
2020-06-04 22:59:13.720 +08:00 [INF] Starting web host.
2020-06-04 22:59:16.639 +08:00 [INF] Now listening on: https://localhost:44369
2020-06-04 22:59:18.957 +08:00 [INF] Request finished in 1780.5461ms 200 text/html;
Total: 5.24s
````
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
[The Identity Module](https://docs.abp.io/en/abp/latest/Modules/Identity) now has the most requested feature: Organization Units!
Organization unit system is used to create a hierarchical organization tree in your application. You can then use this organization tree to authorize data and functionality in your application.
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 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 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.
* [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 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**
```csharp
public class MyService : ITransientDependency
{
private readonly IBlobContainer _container;
public MyService(IBlobContainer container)
{
_container = container;
}
public async Task FooAsync()
{
//Save a BLOB
byte[] bytes = GetBytesFromSomeWhere();
await _container.SaveAsync("my-unique-blob-name", bytes);
//Retrieve a BLOB
bytes = await _container.GetAllBytesAsync("my-unique-blob-name");
}
}
```
It can work with `byte[]` and `Stream` objects.
**Example: Use a typed (named) container to save and get a stream**
````csharp
public class MyService : ITransientDependency
{
private readonly IBlobContainer<TestContainer> _container;
public MyService(IBlobContainer<TestContainer> container)
{
_container = container;
}
public async Task FooAsync()
{
//Save a BLOB
Stream stream = GetStreamFromSomeWhere();
await _container.SaveAsync("my-unique-blob-name", stream);
//Retrieve a BLOB
stream = await _container.GetAsync("my-unique-blob-name");
}
}
````
`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 `TestContainer`**
````csharp
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.Configure<TestContainer>(configuration =>
{
configuration.UseFileSystem(fileSystem =>
{
fileSystem.BasePath = "C:\\MyStorageFolder";
});
});
});
````
See the [blob storing documentation](https://docs.abp.io/en/abp/latest/Blob-Storing) for more information.
### Oracle Integration Package for Entity Framework Core
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 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)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Phone>(b =>
{
//...
if (modelBuilder.IsUsingPostgreSql()) //Check if using PostgreSQL!
{
b.Property(x => x.Number).HasMaxLength(20);
}
else
{
b.Property(x => x.Number).HasMaxLength(32);
}
});
}
````
Beside the stupid example above, you can configure your mapping however you need!
### ABP CLI: Translate Command
`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 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. Also see [the contribution guide](https://docs.abp.io/en/abp/latest/Contribution/Index).
### The New Virtual File System Explorer Module
Thanks to [@realLiangshiwei](https://github.com/realLiangshiwei) created and contributed a new module to explore files in the [Virtual File System](https://docs.abp.io/en/abp/latest/Virtual-File-System). It works for MVC UI and shows all the virtual files in the application. Example screenshots:
![virtual-file-explorer-11](virtual-file-explorer-11.png)
![virtual-file-explorer-2](virtual-file-explorer-2.png)
[See the documentation](https://docs.abp.io/en/abp/latest/Modules/Virtual-File-Explorer) to learn how to use it.
### Sample Application: SignalR with Tiered Architecture
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
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 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
* [Time zone system](https://github.com/abpframework/abp/pull/3933) to support different time zones for an application.
* 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/?ref=abpio) highlights in the version 2.9.
![abp-commercial-290](abp-commercial-290.png)
### Organization Unit Management UI
We've created the UI for manage organization units, their members and roles for the ABP Commercial [Identity Module](https://commercial.abp.io/modules/Volo.Identity.Pro):
![organization-units](organization-units.png)
OU management is available for both of the MVC (Razor Pages) and the Angular user interfaces.
> See [this entry](https://support.abp.io/QA/Questions/222/Bugs--Problems-v290#answer-3cf5eba3-0bf1-2aa1-cc5e-39f5a0750329) if you're upgrading your solution from an earlier version.
### Chat Module Angular UI
We had introduced a new [chat module](https://commercial.abp.io/modules/Volo.Chat) in the previous version, which was only supporting the ASP.NET Core MVC / Razor Pages UI. Now, it has also an Angular UI option.
![abp-chat-module](abp-chat-module.png)
*A screenshot from the chat module - two users are sending messages to each other*
### 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 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-1](easy-crm-1.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.
![suite](suite.png)
*A screenshot from the ABP Suite: Define the properties of a new entity and let it to create the application code for you!*
It was working only for [the application template](https://docs.abp.io/en/commercial/latest/startup-templates/application/index) until this release. Now, it supports to generate code for the [module projects](https://docs.abp.io/en/commercial/latest/startup-templates/module/index) too. That's a great way to create reusable application modules by taking the power of the code generation.
In addition to this main feature, we added many minor enhancements on the ABP Suite in this release.
> Notice: Generating code for the module template is currently in beta. Please inform us if you find any bug.
### Lepton Theme
[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!
* 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/)
You can view all the components together, independent from an application:
![lepton-theme](lepton-theme.png)
This web site is currently in a very early stage. We will be documenting and improving this web site to be a reference for your development and explore the features of the theme.
### Coming Soon: The File management Module
Based on the new blob storing system (introduced above), we've started to build a file management module that is used to manage (navigate/upload/download) a hierarchical file system on your application and share the files between your users and with your customers.
We plan to release the initial version with the ABP Commercial v3.0 and continue to improve it with the subsequent releases.
## About the Next Version: 3.0
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**.
## Bonus: Articles!
Beside developing our products, our team are constantly writing articles/tutorials on various topics. You may want to check the latest articles:
* [ASP.NET Core 3.1 WebHook Implementation Using Pub/Sub](https://volosoft.com/blog/ASP.NET-CORE-3.1-Webhook-Implementation-Using-Pub-Sub/?ref=abpio)
* [Using Azure Key Vault with ASP.NET Core](https://volosoft.com/blog/Using-Azure-Key-Vault-with-ASP.NET-Core/?ref=abpio)

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/signalr-tiered-demo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/suite.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/file-management-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

180
docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/post.md

@ -0,0 +1,180 @@
We are excited to announce that the **ABP Framework** & and the **ABP Commercial** version 3.0 have been released. As different than the regular release lifecycle, which is 2-weeks, this version has taken 4-weeks with **119 [issues](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+milestone%3A3.0)** closed, **89 [pull requests](https://github.com/abpframework/abp/pulls?q=is%3Aopen+is%3Apr+milestone%3A3.0)** merged and **798 commits** done in the main framework [repository](https://github.com/abpframework/abp).
Since this is a **major version**, it also includes some **breaking changes**. Don't panic, the changes are easy to adapt and will be explained below.
> See the [GitHub release notes](https://github.com/abpframework/abp/releases) for a detailed change log.
## What's New with the ABP Framework 3.0?
This post will only cover the important features/changes. You can see all the changes on the [GitHub release notes](https://github.com/abpframework/abp/releases/tag/3.0.0).
### Angular 10!
Angular version 10 has just been [released](https://blog.angular.io/version-10-of-angular-now-available-78960babd41) and we've immediately migrated the [startup templates](https://docs.abp.io/en/abp/latest/Startup-Templates/Application) to Angular 10! So, when you [create a new solution](https://abp.io/get-started) with the Angular UI, you will take the advantage of the new Angular.
We've prepared a [migration guide](https://github.com/abpframework/abp/blob/dev/docs/en/UI/Angular/Migration-Guide-v3.md) for the projects created an older version and want to migrate to Angular 10.
### The Oracle Integration Package
We had created [an integration package](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.Oracle.Devart) for the Oracle for EF Core based applications using the Devart's library since the official Oracle EF Core package was not supporting the EF Core 3.1. It now supports as a [beta release](https://www.nuget.org/packages/Oracle.EntityFrameworkCore/3.19.0-beta1). While it is in beta, we've created [the integration package](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.Oracle), so you can use it in your application.
See [the documentation](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Oracle) for details.
### Azure BLOB Storage Provider
We had created a [BLOB storing system](https://docs.abp.io/en/abp/latest/Blob-Storing) in the previous version with a file system and database storage provider. This release introduces the Azure BLOB Storage provider. See [the documentation](https://docs.abp.io/en/abp/latest/Blob-Storing-Azure).
### Distributed Cache Bulk Operations & the New Redis Cache Package
The [standard IDistributeCache](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) interface of the ASP.NET Core doesn't contain **bulk operations**, like setting multiple items with a single method/server call. ABP Framework introduces new methods those can be used for bulk operations on the ABP's `IDistributedCache<T>` interface:
* GetManyAsync / GetMany
* SetManyAsync / SetMany
Then we needed to implement these new methods for Redis cache and [had to create](https://github.com/abpframework/abp/issues/4483) a Redis integration package which extends the Microsoft's implementation.
These methods are also used by the ABP Framework to cache settings, features and permissions for a user/role/tenant and brings a **significant performance improvement**.
See the [caching document](https://docs.abp.io/en/abp/latest/Caching) for details.
### Embedded Files Manifest Support for the Virtual File System
Virtual File System now supports to use `GenerateEmbeddedFilesManifest` in your projects to add the **real file/directory structure** of your embedded resources in the compiled assembly. So, you can now access to the files without any file name restriction (previously, some special chars like `.` in the directory names was a problem in some cases)
See [the documentation](https://docs.abp.io/en/abp/latest/Virtual-File-System) to learn how to take the advantage of new system.
### New Samples
Based on the requests from the community, we've prepared two new sample applications:
* [StoredProcedureDemo](https://github.com/abpframework/abp-samples/tree/master/StoredProcedureDemo) demonstrates how to call stored procedures, views and functions inside a custom repository.
* [OrganizationUnitSample](https://github.com/abpframework/abp-samples/tree/master/OrganizationUnitSample) shows how to use the organization unit system of the [Identity module](https://docs.abp.io/en/abp/latest/Modules/Identity) for your entities.
### DynamicStringLength & DynamicMaxLength Attributes
The standard `StringLength` and `MaxLength` data annotation attributes is useful to validate properties of a class when the class is used as a Model or [DTO](https://docs.abp.io/en/abp/latest/Data-Transfer-Objects). However, just like any other attribute, the length values should be literal (constant) values known at **compile time**.
**Example: Using the `StringLength`**
```csharp
public class CreateBookDto
{
public const int MaxNameLength = 128; //CONSTANT!
[StringLength(MaxNameLength)]
public string Name { get; set; }
}
```
ABP Framework now has the `DynamicStringLength` & `DynamicMaxLength` properties to allow to determine the lengths at **runtime**.
**Example: Using the `DynamicStringLength`**
```csharp
public class CreateBookDto
{
public static int MaxNameLength { get; set; } = 128;
[DynamicStringLength(typeof(CreateBookDto), nameof(MaxNameLength))]
public string Name { get; set; }
}
```
`DynamicStringLength` gets a class **type** and the **name** of a static property on this class to read the max length (there is also a minimum length option just like the `StringLength`).
This allows you to get the max value from a configuration and set on the application startup (generally, in the `PreConfigureServices` method of your [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics)):
```csharp
CreateBookDto.MaxNameLength = 200;
```
This feature is used by the [pre-built application modules](https://docs.abp.io/en/abp/latest/Modules/Index), so you can now override the max lengths of the properties defined in these modules.
### Auto Distributed Events
ABP can **automatically publish distributed events** for all entities on their create, update and delete events. That's pretty useful since you commonly interest in these basic events in a distributed system.
This feature is **mature and [documented](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#pre-defined-events)** with the v3.0. You can easily configure some or all the entities to be published.
### IAsyncQueryableExecuter
When you work with LINQ extension methods, you need to call `ToListAsync()`, `FirstOrDefaultAsync()`... methods on your queries. Unfortunately, these methods are **not standard** LINQ extension methods. They are defined in the [Microsoft.EntityFrameworkCore](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore) package (or in the [MongoDB.Driver](https://www.nuget.org/packages/MongoDB.Driver/) package if you are using the MongoDB).
So, you need to depend on this package if you want to use the async extension methods. That breaks the layering and makes your application or domain layer depends on the EF Core / MongoDB package.
`IAsyncQueryableExecuter` is a service defined by the ABP Framework to **execute queries asynchronously without depending the specific provider** (EF Core / MongoDB) package.
See [the documentation](https://docs.abp.io/en/abp/latest/Repositories#iqueryable-async-operations) to read the details and learn our recommendations.
### API documentation
We are now publishing [API documents](https://docs.abp.io/api-docs/abp/3.0/api/index.html) for the ABP Framework and modules in every release. So, you can explore the ABP Framework classes much more easier than before. Click the the **API Documentation** link on the navigation menu of the [documentation](https://docs.abp.io/en/abp/latest/).
### Package List
We have [created a page](http://abp.io/packages) to list all the ABP-related official NuGet and NPM packages.
### Others
* Implemented front-channel server-side clients [sign out](https://identityserver4.readthedocs.io/en/latest/topics/signout.html) for the identity server.
* `abp.currentUser` (`CurrentUser` service in the Angular UI) now has a `roles` array that contains role names of the current user.
* Upgraded all the NuGet and NPM package dependencies.
* Introduced `ReadOnlyAppService` base class (which has only the get operations) in addition to the `CrudAppService` base class (which has get, create, update and delete operations).
See the [GitHub release notes](https://github.com/abpframework/abp/releases/tag/3.0.0) for others updates.
## What's New with the ABP Commercial 3.0?
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 3.0.
### New File Management Module
We've created a new module that is used to store and manage files in your application. This new module is based on the [BLOB Storing system](https://docs.abp.io/en/abp/latest/Blob-Storing), so it can use different storage providers to store the file contents.
**Example screenshot**
![file-management-ui](file-management-ui.png)
You can upload, download and organize files in a hierarchical folder structure. It is also compatible to multi-tenancy and you can determine total size limit for your tenants. In the next versions, we will be working on a "share" system to share files between users in a more controlled way or share your files with your customers with a public link.
> File Management module is currently available only for the MVC / Razor Pages UI. We are working on the Angular UI and it will be released in the next versions.
## Breaking Changes
Since this is a major version, we've redesigned some APIs and introduced a few "easy to fix" breaking changes.
### ABP Framework
* Changed some **consts** in the pre-built application modules to static properties that is possible to change by your code. If you've used these consts on an attribute, then use the `DynamicStringLength` as explained above.
* Changed `ConcurrencyStamp` max length to 40. You need to **add a database migration** and update your database after upgrading the ABP Framework.
* Using `~` instead of `^` for NPM package dependencies anymore, to be more stable.
### ABP Commercial
* Changed file names for the application logos. Previously, it was using separate logo files for each theme, like `theme1.png`, `theme1-reverse.png`, `theme2.png`, `theme2-reverse.png` (... `6`). Now, we have only two logo files: `logo-light.png` and `logo-dark.png`. So, rename your logo in the `wwwroot/images/logo/` folder for the MVC UI and `/src/assets/images/logo/` folder for the Angular UI.
* We've added the [API documentation](https://docs.abp.io/api-docs/commercial/3.0/api/index.html) for the ABP Commercial too.
> **Also, see the [migration guide](https://github.com/abpframework/abp/blob/dev/docs/en/UI/Angular/Migration-Guide-v3.md) for Angular UI**.
## Known Issues
* 3.0.0 version has a problem with tiered architecture. See [this issue](https://github.com/abpframework/abp/pull/4564) to fix it for your application until we release the v3.0.1.
## About the Next Versions
We will continue to release a new minor/feature version in every two weeks. So, the next expected release date is **2020-07-16** for the version **3.1**.
In the next few versions, we will be focused on the **Blazor UI**, as promised on [the road map](https://docs.abp.io/en/abp/latest/Road-Map). We will continue to improve the documentation, create samples, add other new features and enhancements. Follow the [ABP Framework Twitter account](https://twitter.com/abpframework) for the latest news...
## Bonus: Articles!
Beside developing our products, our team are constantly writing articles/tutorials on various topics. You may want to check the latest articles:
* [What is New in Angular 10?](https://volosoft.com/blog/what-is-new-in-angular-10)
* [Real-Time Messaging In A Distributed Architecture Using ABP, SignalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)
* [How to Use Attribute Directives to Avoid Repetition in Angular Templates](https://volosoft.com/blog/attribute-directives-to-avoid-repetition-in-angular-templates)
&nbsp;
> We’d love to hear from you. Please leave your comments, suggestions, feeedbacks below.

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-comm-release-v3.1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-framework-release-v3.1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/email-phone-verification.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/forgot-password.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/ldap-settings-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/my-security-logs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

311
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/post.md

@ -0,0 +1,311 @@
Today, we are releasing the **ABP Framework version 3.1 Release Candidate** (RC). The development cycle for this version was **~7 weeks**. It was the longest development cycle for a feature version release ever. We have completed **~150 issues**, merged **~150 PRs** and made **~1,000 commits** only in the main [abp repository](https://github.com/abpframework/abp). See the related [milestone](https://github.com/abpframework/abp/milestone/38?closed=1) on GitHub.
There were two main reasons of this long development cycle;
* We've switched to **4-weeks** release cycle (was discussed in [this issue](https://github.com/abpframework/abp/issues/4692)).
* We've [re-written](https://github.com/abpframework/abp/issues/4881) the Angular service proxy generation system using the Angular schematics to make it more stable. There were some problems with the previous implementation.
This long development cycle brings a lot of new features, improvements and bug fixes. I will highlight the fundamental features and changes in this blog post.
> `3.1.0` final stable version has been published. See [this post](https://blog.abp.io/abp/ABP-Framework-v3.1-Final-Has-Been-Released) for details.
## About the Preview/Stable Version Cycle
As mentioned above, it is planned to release a new stable feature version (like 3.1, 3.2, 3.3...) in every 4-weeks.
In addition, we are starting to deploy a **preview version** 2-weeks before the stable versions for every feature/major releases.
Today, we've released `3.1.0-rc.1` as the first preview version. We may release more previews if it is needed until the stable 3.1.0 version.
**The stable `3.1.0` version will be released on September 3, 2020.** Next RC version, `3.2.0-rc.1`, is planned for September 17, 2020 (2 weeks after the stable 3.1.0 and 2 weeks before the stable 3.2.0).
We **won't add new features** to a version after publishing the preview version. We only will make **bug fixes** until the stable version. The new features being developed in this period will be available in the next version.
> We will use `-rc.x` suffix (like `3.1.0-rc.1` and `3.1.0-rc.2`) for preview releases. However, we may also publish with `-preview.x` suffix before RC (Release Candidate) releases, especially for major versions (like 4.0, 5.0...).
### About the Nightly Builds
Don't confuse preview versions vs nightly builds. When we say preview, we are mentioning the preview system explained above.
We will continue to publish **nightly builds** for all the [ABP Framework packages](https://abp.io/packages). Nightly pages are built from the development branch. You can refer to [this document](https://docs.abp.io/en/abp/latest/Nightly-Builds) to learn how to use the nightly packages.
## Get Started with the RC Versions
Please try the preview versions and provide feedback to us to release more stable versions. Please open an issue on the [GitHub repository](https://github.com/abpframework/abp/issues/new) if you find a bug or want to give feedback.
### Update the ABP CLI to the 3.1.0-rc.4
Since this is the first preview version, you need to upgrade the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) to the `3.1.0-rc.4` to be able to use the preview features:
````bash
dotnet tool update Volo.Abp.Cli -g --version 3.1.0-rc.4
````
### New Solutions
The [ABP.IO](https://abp.io/) platform and the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) are compatible with the RC system. You can select the "preview" option on the [download page](https://abp.io/get-started) or use the "**--preview**" parameter with the ABP CLI [new](https://docs.abp.io/en/abp/latest/CLI?_ga=2.106435654.411298747.1597771169-1910388957.1594128976#new) command:
````bash
abp new Acme.BookStore --preview
````
This command will create a new project with the latest RC/Preview version. Whenever the stable version is released, you can switch to the stable version for your solution using the `abp switch-to-stable` command in the root folder of your solution.
### Existing Solutions
If you already have a solution and want to use/test the latest RC/Preview version, use the `abp switch-to-preview` command in the root folder of your solution. You can return back to the latest stable using the `abp switch-to-stable ` command later.
> Note that the `abp switch-to-preview` command was being used to switch to nightly builds before the v3.1. Now, you should use the `abp switch-to-nightly` for [nightly builds](https://docs.abp.io/en/abp/latest/Nightly-Builds).
## Breaking Changes / Special Notes
### ABP & ABP Commercial
* You may need to upgrade the `Microsoft.Extensions.FileProviders.Embedded` package in your projects to `3.1.6` or a later version.
* If you are using **EF Core**, you may need to **add a new migration** after upgrading the packages. Just run the standard "Add-Migration" command, check the generated migration code and execute the "Update-Database" command to apply changes to the database.
* If you have implemented **social/external logins** for your MVC / Razor Page UI application before, you may want to check [this issue](https://github.com/abpframework/abp/issues/4981). We made some improvements and changes that you may want to take action for your application. Beginning from v3.1, the users created their accounts via social login can still set a local password to login with local username/email & password.
* See the "Angular Service Proxies" section below for the Angular applications.
### ABP Commercial Only
* We've **moved favicons** into `/wwwroot/images/favicon/` folder for the ASP.NET Core **MVC / Razor Page UI** applications. There are 10 favicon related files (including the `favicon.ico`) under this directory to better work with different browser and cases. You can create a new application to check this folder and copy the files into your own application. Then you can customize the icons for your own brand (hint: you can use a tool [like that](https://realfavicongenerator.net/) to create the favicons with various formats).
* Removed direct **Twitter & Facebook social login integrations** from the [account module](https://commercial.abp.io/modules/Volo.Account.Pro), for **MVC / Razor Pages UI**. Follow [this documentation](https://github.com/abpframework/abp/blob/dev/docs/en/Authentication/Social-External-Logins.md) to easily add social logins to your applications if you need. The account module provides all the infrastructure to handle social/external logins, you just need to configure it.
## What's New with the ABP Framework 3.1 RC
![abp-framework-release-v3.1](abp-framework-release-v3.1.png)
### Angular Service Proxies
ABP provides a system to generate Angular service proxies (with TypeScript) to consume the HTTP APIs of your application. Service proxy generation system **has been completely re-written** with the ABP Framework 3.1. The main goal was to build more stable and feature rich system that is better aligned with other ABP Framework features (like [modularity](https://docs.abp.io/en/abp/latest/Module-Development-Basics)).
You will continue to use the same `abp generate-proxy` command, however it internally uses an NPM package that implements the command using the Angular schematics. It will come pre-configured for new solutions. However, implement the following steps for existing solutions;
* Add `@abp/ng.schematics` package to the devDependencies of the Angular project.
* Add `rootNamespace` entry into the `/apis/default/` section in the `/src/environments/environment.ts`, as shown below:
````json
apis: {
default: {
url: 'https://localhost:44360',
rootNamespace: 'Acme.BookStore' //<-- ADD THIS
},
}
````
`Acme.BookStore` should be replaced by the root namespace of your .NET project. This ensures to not create unnecessary nested folders.
* Finally, add the following paths to the `tsconfig.base.json` to have a shortcut while importing proxies:
```json
"paths": {
"@proxy": ["src/app/proxy/index.ts"],
"@proxy/*": ["src/app/proxy/*"]
}
```
[See the documentation](https://docs.abp.io/en/abp/3.1/UI/Angular/Service-Proxies) to learn more about the service proxy generation for Angular applications.
> The [application development tutorial](https://docs.abp.io/en/abp/3.1/Tutorials/Part-1?UI=NG) has been updated based on the new Angular Service proxy system.
### Authorization Code Flow for the Angular UI
We were using the **resource owner password authentication** flow for the Angular UI login page. We've implemented **Authorization Code Flow** for the Angular account module and made it **default for new projects**. With this change, the Angular application now redirects to the login page of the MVC UI which was implemented using the Identity Server 4. We also removed the client secret from the Angular side with this change.
Old behavior remains exist. If you want to switch to the new flow (which is recommended), follow the steps below:
1) Add `authorization_code` to the `IdentityServerClientGrantTypes` table in the database, for the client used by the Angular UI (the `ClientId` is `YourProjectName_App` by default, in the `IdentityServerClients` table).
2) Add `http://localhost:4200` to `IdentityServerClientRedirectUris` and `IdentityServerClientPostLogoutRedirectUris` tables for the same client.
3) Set `RequireClientSecret` to `false` in the `IdentityServerClients` table for the same client.
> [ABP Commercial](https://commercial.abp.io/) users can make these changes on the [Identity Server Management UI](https://commercial.abp.io/modules/Volo.Identityserver.Ui).
4) Change the `oAuthConfig` section in the `src/environments/environment.ts` file of the Angular application.
You can take [this new configuration](https://gist.github.com/hikalkan/e7f6ae7f507b201783682dccaeadc5e3) as a reference. Main changes are;
* Added `responseType` as `code`.
* Added `redirectUri`
* Added `offline_access` to the `scope`.
* Removed `oidc: false` option.
* Removed the client secret option.
### Global Feature System
The new "Global Features" system allows to **enable/disable features of an application or a module** in a central point. It is especially useful if you want to use a module but don't want to bring all its features into your application. If the module was so designed, you can enable only the features you need.
When you disable a feature;
* The **database tables** related to that feature should not be created in the database.
* The **HTTP APIs** related to that feature should not be exposed. They returns 404 if they are directly requested.
So, the goal is that; when you disable a feature, it should behave like that feature doesn't exists in your system at all.
There is **no way to enable/disable a global feature on runtime**. You should decide it in the development time (remember, even database tables are not being created for disabled global features, so you can't enable it on runtime).
> "Global Features" system is different than [SaaS/multi-tenancy features](https://docs.abp.io/en/abp/latest/Features), where you can enable/disable features for your tenants on runtime.
Assume that you are using the [CMS Kit module](https://github.com/abpframework/abp/tree/dev/modules/cms-kit) (this module is in a very early stage) where you only want to enable the comment feature:
````csharp
GlobalFeatureManager.Instance.Modules.CmsKit().Comments.Enable();
````
You can check if a feature was enabled:
```csharp
GlobalFeatureManager.Instance.IsEnabled<CommentsFeature>();
```
Or you can add `[RequiresGlobalFeature(...)]` attribute to a controller/page to disable it if the related feature was disabled:
```csharp
//...
[RequiresGlobalFeature(typeof(CommentsFeature))]
public class CommentController : AbpController
{
//...
}
```
See the issue [#5061](https://github.com/abpframework/abp/issues/5061) until this is fully documented.
### Social/External Logins
Implemented the infrastructure for social/external logins in the account module. So, now you can easily configure your application to support social/external logins by [following the documentation](https://github.com/abpframework/abp/blob/dev/docs/en/Authentication/Social-External-Logins.md). Once you configure a provider, a button will appear on the login page to use this provider.
The social logins will work as expected even if you are using the Angular UI, since the Angular UI uses the MVC login using the authorization code flow implemented with this new version (as explained above).
### Forgot/Reset Password
Implemented forgot password / password reset for the account module.
You can now enter your email address to get an email containing a **password reset link**:
![forgot-password](forgot-password.png)
When you click to the link, you are redirected to a password reset page to determine your new password:
![reset-password](reset-password.png)
### External Login System
The standard Social/External Login system (like Facebook login) works via OpenID Connect. That means the user is redirected to the login provider, logins there and redirected to your application.
While this is pretty nice for most scenarios, sometimes you want a simpler external login mechanism: User enters username & password in your own application's login form and you check the username & password from another source, not from your own database.
ABP v3.1 introduces an External Login System to check username & password from any source (from an external database, a REST service or from an LDAP / Active Directory server).
You can check the [issue #4977](https://github.com/abpframework/abp/issues/4977#issuecomment-670006297) until it is fully documented.
We've implemented LDAP authentication for the ABP Commercial, using this new login extension system (see the ABP Commercial section below).
### User Security Logs
The new [Security Log System](https://github.com/abpframework/abp/issues/4492) (of the Identity module) automatically logs all authentication related operations (login, logout, change password...) to a `AbpSecurityLogs` table in the database.
### New BLOB Storage Providers
Implemented [AWS](https://github.com/abpframework/abp/blob/dev/docs/en/Blob-Storing-Aws.md) and [Aliyun](https://github.com/abpframework/abp/blob/dev/docs/en/Blob-Storing-Aliyun.md) providers for the [BLOB storing](https://docs.abp.io/en/abp/latest/Blob-Storing) system with this version.
### Module Entity Extensibility
We had introduced a entity extension system that allows to add new properties to existing entities of depended modules by a simple configuration. When you add a new property, it appears on the create, edit and list views on the UI and created a new field in the related database table. We've implemented this system for the identity and tenant management modules, so you can extend entities of these modules. See [the documentation](https://github.com/abpframework/abp/blob/dev/docs/en/Module-Entity-Extensions.md).
### Other Features / Highlights
Here, some other highlights from this release;
* UOW level caching system [#4796](https://github.com/abpframework/abp/issues/4796)
* Refactored the console application template to better integrate to the host builder [#5006](https://github.com/abpframework/abp/issues/5006)
* [Volo.Abp.Ldap](https://www.nuget.org/packages/Volo.Abp.Ldap) package now supports multi-tenancy.
* Introduce `BasicAggregateRoot` base class [#4808](https://github.com/abpframework/abp/issues/4808)
* Sets GUID Id in the `InsertAsync` method of the EF Core repository if it was not set by the developer [#4634](https://github.com/abpframework/abp/pull/4634)
* Added `GetPagedListAsync` methods to the repository to simplify paging [#4617](https://github.com/abpframework/abp/pull/4617)
* Configured [Prettier](https://prettier.io/) for the startup template [#4318](https://github.com/abpframework/abp/issues/4318)
* Defined new layout hooks for the MVC UI: before page content & after page content [#4008](https://github.com/abpframework/abp/issues/4008)
* Allow to put static resources (js, css... files) under the Components folder for ASP.NET Core MVC UI.
* Upgraded to AutoMapper 10 and Quartz 3.1 for the related integration packages.
## What's New with the ABP Commercial v3.1 RC
![abp-comm-release-v3.1](abp-comm-release-v3.1.png)
### Security Logs UI
We've created a UI to report user security logs for authentication related operations, under the Identity Management menu:
![security-logs-ui](security-logs-ui.png)
Also, every user can see his/her own security logs by selecting the "My security logs" under the user menu:
![my-security-logs](my-security-logs.png)
### LDAP Authentication
We've implemented LDAP authentication using the new external login system explained above. Also, created a UI to configure the server settings:
![ldap-settings-ui](ldap-settings-ui.png)
In this way, you can simply check passwords of the users from LDAP in the login page. If given username / password doesn't exists on LDAP, then it fallbacks to the local database, just like before.
Since it supports **multi-tenancy**, you can enable, disable and configure it for your tenants.
### Email / Phone Number Verification
User profile management page now supports to Email & Phone Number verification flow:
![email-phone-verification](email-phone-verification.png)
When user clicks to the **verify** button, a verification email/SMS (that has a verification code) sent to the user and the UI waits to submit this code.
### User Lock
Implemented to **lock a user** for a given period of time. Locked users can not login to the application for the given period of time:
![user-lock](user-lock.png)
### ABP Suite: Angular UI Code Generation Revisited
Angular UI code generation has been re-written using the Angular Schematics for the ABP Suite. It is now more stable and produces a better application code.
ABP Suite also supports code generation on module development.
### Others
* **Social logins** and **authorization code flow** are also implemented for the ABP Commercial, just as described above.
* Added breadcrumb and file icons for the **file management module**.
## The ABP Community
We've lunched the [community.abp.io](https://community.abp.io/) ~two weeks ago with its initial version. It only has "Article submission" system for now. We are developing new exciting features. There will be an update in a few days and we'll publish a new blog post for it.
## Conclusion
The main goals of the 3.1 version were;
* Complete the missing **authentication features** (like social logins, LDAP authentication, authorization code flow for the Angular UI...) for the ABP Framework & ABP Commercial.
* Re-write a stable and feature complete **Angular service proxy generation** system for the ABP Framework and CRUD UI generation system for the ABP Commercial.
* Develop a system to lunch **preview versions** of the platform. `3.1.0-rc.1` was the first preview version that has been published with this new system.
* Complete the fundamental **documentation & tutorials** (we've even created a [video tutorial series](https://www.youtube.com/watch?v=cJzyIFfAlp8&list=PLsNclT2aHJcPNaCf7Io3DbMN6yAk_DgWJ)).
ABP.IO platform will be more mature & stable with the v3.1. Enjoy Coding!
&nbsp;
## Bonus: Articles!
Beside developing our products, our team are constantly writing articles/tutorials on various topics. You may want to check the latest articles:
* [ASP.NET CORE 3.1 Social Login and Multi-Tenancy](https://volosoft.com/blog/ASPNET-CORE-3.1-Social-Login-and-Multi-Tenancy)
* [File Upload/Download with BLOB Storage System in ASP.NET Core & ABP Framework](https://volosoft.com/blog/File-Upload-Download-with-BLOB-Storage-in-ASP.NET-Core-and-ABP)
* [Extracting and Hashing Lazy-Loaded CSS in Angular](https://volosoft.com/blog/Extracting-and-Hashing-Lazy-Loaded-CSS-in-Angular)
&nbsp;
> We’d love to hear from you. Please leave your comments, suggestions, feeedbacks below.

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/reset-password.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/security-logs-ui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

BIN
docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/user-lock.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

62
docs/en/Community-Articles/2020-09-04-abp-framework-v31-final-has-been-released/post.md

@ -0,0 +1,62 @@
# ABP Framework 3.1 Final Has Been Released
It is exciting for us to announce that we've released the ABP Framework & ABP Commercial 3.1 today.
Since all the new features are already explained in details with the [3.1 RC Announcement Post](https://blog.abp.io/abp/ABP-Framework-v3.1-RC-Has-Been-Released), I will not repeat all the details here. Please read [the RC post](https://blog.abp.io/abp/ABP-Framework-v3.1-RC-Has-Been-Released) for **new feature and changes** you may need to do for your solution while upgrading to the version 3.1.
## Creating New Solutions
You can create a new solution with the ABP Framework version 3.1 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details.
## How to Upgrade an Existing Solution
### Install/Update the ABP CLI
First of all, install the ABP CLI or upgrade to the latest version.
If you haven't installed yet:
````bash
dotnet tool install -g Volo.Abp.Cli
````
To update an existing installation:
```bash
dotnet tool update -g Volo.Abp.Cli
```
### ABP UPDATE Command
[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
````bash
abp update
````
After the update command, check [the RC blog post](https://blog.abp.io/abp/ABP-Framework-v3.1-RC-Has-Been-Released) to learn if you need to make any changes in your solution.
> You may want to see the new [upgrading document](https://docs.abp.io/en/abp/latest/Upgrading).
## About the version 3.2
The planned schedule for the version 3.2 is like that;
* **September 17, 2020**: 3.2.0-rc.1 (release candidate)
* **October 1, 2020**: 3.2.0 final (stable)
You can check [the GitHub milestone](https://github.com/abpframework/abp/milestone/39) to see the features/issues we are working on.
## ABP Community & Articles
We had lunched the [ABP Community web site](https://community.abp.io/) a few weeks before. The core ABP team and the ABP community have started to create content for the community.
Here, the last three articles from the ABP Community:
* [ABP Suite: How to Add the User Entity as a Navigation Property of Another Entity](https://community.abp.io/articles/abp-suite-how-to-add-the-user-entity-as-a-navigation-property-of-another-entity-furp75ex) by [@ebicoglu](https://github.com/ebicoglu)
* [Reuse ABP vNext Modules to Quickly Implement Application Features](https://community.abp.io/articles/reuse-abp-vnext-modules-to-quickly-implement-application-features-tdtmwd9w) by [@gdlcf88](https://github.com/gdlcf88)
* [Using DevExtreme Components With the ABP Framework](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) by [@cotur](https://github.com/cotur).
We are looking for your contributions; You can [submit your article](https://community.abp.io/articles/submit)! We will promote your article to the community.

431
docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/post.md

@ -0,0 +1,431 @@
# Introducing the Angular Service Proxy Generation
ABP Angular Service Proxy System **generates TypeScript services and models** to consume your backend HTTP APIs developed using the ABP Framework. So, you **don't manually create** models for your server side DTOs and perform raw HTTP calls to the server.
ABP Framework has introduced the **new** Angular Service Proxy Generation system with the **version 3.1**. While this feature was available since the [v2.3](https://blog.abp.io/abp/ABP-Framework-v2_3_0-Has-Been-Released), it was not well covering some scenarios, like inheritance and generic types and had some known problems. **With the v3.1, we've re-written** it using the [Angular Schematics](https://angular.io/guide/schematics) system. Now, it is much more stable and feature rich.
This post introduces the service proxy generation system and highlights some important features.
## Installation
### ABP CLI
You need to have the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) to use the system. So, install it if you haven't installed before:
````bash
dotnet tool install -g Volo.Abp.Cli
````
If you already have installed it before, you can update to the latest version:
````shell
dotnet tool update -g Volo.Abp.Cli
````
### Project Configuration
> If you've created your project with version 3.1 or later, you can skip this part since it will be already installed in your solution.
For a solution that was created before v3.1, follow the steps below to configure the angular application:
* Add `@abp/ng.schematics` package to the `devDependencies` of the Angular project. Run the following command in the root folder of the angular application:
````bash
npm install @abp/ng.schematics --save-dev
````
- Add `rootNamespace` entry into the `apis/default` section in the `/src/environments/environment.ts`, as shown below:
```json
apis: {
default: {
...
rootNamespace: 'Acme.BookStore'
},
}
```
`Acme.BookStore` should be replaced by the root namespace of your .NET project. This ensures to not create unnecessary nested folders while creating the service proxy code. This value is `AngularProxyDemo` for the example solution explained below.
* Finally, add the following paths to the `tsconfig.base.json` to have a shortcut while importing proxies:
```json
"paths": {
"@proxy": ["src/app/proxy/index.ts"],
"@proxy/*": ["src/app/proxy/*"]
}
```
## Basic Usage
### Project Creation
> If you already have a solution, you can skip this section.
You need to [create](https://abp.io/get-started) your solution with the Angular UI. You can use the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) to create a new solution:
````bash
abp new AngularProxyDemo -u angular
````
#### Run the Application
The backend application must be up and running to be able to use the service proxy code generation system.
> See the [getting started](https://docs.abp.io/en/abp/latest/Getting-Started?UI=NG&DB=EF&Tiered=No) guide if you don't know details of creating and running the solution.
### Backend
Assume that we have an `IBookAppService` interface:
````csharp
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace AngularProxyDemo.Books
{
public interface IBookAppService : IApplicationService
{
public Task<List<BookDto>> GetListAsync();
}
}
````
That uses a `BookDto` defined as shown:
```csharp
using System;
using Volo.Abp.Application.Dtos;
namespace AngularProxyDemo.Books
{
public class BookDto : EntityDto<Guid>
{
public string Name { get; set; }
public DateTime PublishDate { get; set; }
}
}
```
And implemented as the following:
```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace AngularProxyDemo.Books
{
public class BookAppService : ApplicationService, IBookAppService
{
public async Task<List<BookDto>> GetListAsync()
{
//TODO: get books from a database...
}
}
}
```
It simply returns a list of books. You probably want to get the books from a database, but it doesn't matter for this article.
### HTTP API
Thanks to the [auto API controllers](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) system of the ABP Framework, we don't have to develop API controllers manually. Just **run the backend (*HttpApi.Host*) application** that shows the [Swagger UI](https://swagger.io/tools/swagger-ui/) by default. You will see the **GET** API for the books:
![swagger](swagger.png)
### Service Proxy Generation
Open a **command line** in the **root folder of the Angular application** and execute the following command:
````bash
abp generate-proxy
````
It should produce an output like the following:
````bash
...
CREATE src/app/proxy/books/book.service.ts (446 bytes)
CREATE src/app/proxy/books/models.ts (148 bytes)
CREATE src/app/proxy/books/index.ts (57 bytes)
CREATE src/app/proxy/index.ts (33 bytes)
````
> `generate-proxy` command can take some some optional parameters for advanced scenarios (like [modular development](https://docs.abp.io/en/abp/latest/Module-Development-Basics)). You can take a look at the [documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies).
#### The Generated Code
`src/app/proxy/books/book.service.ts`: This is the service that can be injected and used to get the list of books;
````js
import type { BookDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class BookService {
apiName = 'Default';
getList = () =>
this.restService.request<any, BookDto[]>({
method: 'GET',
url: `/api/app/book`,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}
````
`src/app/proxy/books/models.ts`: This file contains the modal classes corresponding to the DTOs defined in the server side;
````js
import type { EntityDto } from '@abp/ng.core';
export interface BookDto extends EntityDto<string> {
name: string;
publishDate: string;
}
````
> There are a few more files have been generated to help you import the types easier.
#### How to Import
You can now import the `BookService` into any Angular component and use the `getList()` method to get the list of books.
````js
import { BookService, BookDto } from '../proxy/books';
````
You can also use the `@proxy` as a shortcut of the proxy folder:
````js
import { BookService, BookDto } from '@proxy/books';
````
### About the Generated Code
The generated code is;
* **Simple**: It is almost identical to the code if you've written it yourself.
* **Splitted**: Instead of a single, large file;
* It creates a separate `.ts` file for every backend **service**. **Model** (DTO) classes are also grouped per service.
* It understands the [modularity](https://docs.abp.io/en/abp/latest/Module-Development-Basics), so creates the services for your own **module** (or the module you've specified).
* **Object oriented**;
* Supports **inheritance** of server side DTOs and generates the code respecting to the inheritance structure.
* Supports **generic types**.
* Supports **re-using type definitions** across services and doesn't generate the same DTO multiple times.
* **Well-aligned to the backend**;
* Service **method signatures** match exactly with the services on the backend services. This is achieved by a special endpoint exposed by the ABP Framework that well defines the backend contracts.
* **Namespaces** are exactly matches to the backend services and DTOs.
* **Well-aligned with the ABP Framework**;
* Recognizes the **standard ABP Framework DTO types** (like `EntityDto`, `ListResultDto`... etc) and doesn't repeat these classes in the application code, but uses from the `@abp/ng.core` package.
* Uses the `RestService` defined by the `@abp/ng.core` package which simplifies the generated code, keeps it short and re-uses all the logics implemented by the `RestService` (including error handling, authorization token injection, using multiple server endpoints... etc).
These are the main motivations behind the decision of creating a service proxy generation system, instead of using a pre-built tool like [NSWAG](https://github.com/RicoSuter/NSwag).
## Other Examples
Let me show you a few more examples.
### Updating an Entity
Assume that you added a new method to the server side application service, to update a book:
```csharp
public Task<BookDto> UpdateAsync(Guid id, BookUpdateDto input);
```
`BookUpdateDto` is a simple class defined shown below:
```csharp
using System;
namespace AngularProxyDemo.Books
{
public class BookUpdateDto
{
public string Name { get; set; }
public DateTime PublishDate { get; set; }
}
}
```
Let's re-run the `generate-proxy` command:
````bash
abp generate-proxy
````
This command will re-generate the proxies by updating some files. Let's see some of the changes;
**book.service.ts**
````js
import type { BookDto, BookUpdateDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class BookService {
apiName = 'Default';
getList = () =>
this.restService.request<any, BookDto[]>({
method: 'GET',
url: `/api/app/book`,
},
{ apiName: this.apiName });
update = (id: string, input: BookUpdateDto) =>
this.restService.request<any, BookDto>({
method: 'PUT',
url: `/api/app/book/${id}`,
body: input,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}
````
`update` function has been added to the `BookService` that gets an `id` and a `BookUpdateDto` as the parameters.
**models.ts**
````js
import type { EntityDto } from '@abp/ng.core';
export interface BookDto extends EntityDto<string> {
name: string;
publishDate: string;
}
export interface BookUpdateDto {
name: string;
publishDate: string;
}
````
Added a new DTO class: `BookUpdateDto`.
### Advanced Example
In this example, I want to show a DTO structure using inheritance, generics, arrays and dictionaries.
I've created an `IOrderAppService` as shown below:
````csharp
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace AngularProxyDemo.Orders
{
public interface IOrderAppService : IApplicationService
{
public Task CreateAsync(OrderCreateDto input);
}
}
````
`OrderCreateDto` and the related DTOs are as the followings;
````csharp
using System;
using System.Collections.Generic;
using Volo.Abp.Data;
namespace AngularProxyDemo.Orders
{
public class OrderCreateDto : IHasExtraProperties
{
public Guid CustomerId { get; set; }
public DateTime CreationTime { get; set; }
//ARRAY of DTOs
public OrderDetailDto[] Details { get; set; }
//DICTIONARY
public Dictionary<string, object> ExtraProperties { get; set; }
}
public class OrderDetailDto : GenericDetailDto<int> //INHERIT from GENERIC
{
public string Note { get; set; }
}
//GENERIC class
public abstract class GenericDetailDto<TCount>
{
public Guid ProductId { get; set; }
public TCount Count { get; set; }
}
}
````
When I run the `abp generate-proxy` command again, I see there are some created and updated files. Let's see some important ones;
`src/app/proxy/orders/order.service.ts`
````js
import type { OrderCreateDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class OrderService {
apiName = 'Default';
create = (input: OrderCreateDto) =>
this.restService.request<any, void>({
method: 'POST',
url: `/api/app/order`,
body: input,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}
````
`src/app/proxy/orders/models.ts`
````js
export interface GenericDetailDto<TCount> {
productId: string;
count: TCount;
}
export interface OrderCreateDto {
customerId: string;
creationTime: string;
details: OrderDetailDto[];
extraProperties: Record<string, object>;
}
export interface OrderDetailDto extends GenericDetailDto<number> {
note: string;
}
````
## Conclusion
`abp generate-proxy` is a very handy command that creates all the necessary code to consume your ABP based backend HTTP APIs. It generates a clean code that is well aligned to the backend services and benefits from the power of TypeScript (by using generics, inheritance...).
## The Documentation
See [the documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies) for details of the Angular Service Proxy Generation.

BIN
docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/swagger.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/abp-community-20200917.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 KiB

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/account-profile-picture.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazor-role-management-img.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazorise-github.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/file-management-module-angular.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/host-features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

260
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/post.md

@ -0,0 +1,260 @@
We are extremely excited today to release the [ABP Framework](https://abp.io/) Release Candidate (and the [ABP Commercial](https://commercial.abp.io/), as always). This release includes an early preview version of the **Blazor UI** for the ABP.IO Platform.
## The Blazor UI
While the Blazor UI **should be considered as experimental** for now, it is possible to start to develop your application today.
### Fundamental Services
Currently, implemented some important framework features;
* **Authentication** through the MVC backend using the OpenId Connect authorization code flow. So, all the current login options (login, register, forgot password, external/social logins...) are supported.
* **Authorization**, using the ABP Framework **permissions** as well as the standard authorization system.
* **Localization** just works like the MVC UI.
* **Basic Theme** with the top main menu.
* **Dynamic C# HTTP API proxies**, so you can directly consume your backend API by injecting the application service interfaces.
* Some other **fundamental services** like `ISettingProvider`, `IFeatureChecker`, `ICurrentUser`...
Also, the standard .net services are already available, like caching, logging, validation and much more. Since the ABP Framework has layered itself, all the non-MVC UI related features are already usable for the Blazor UI.
### Pre-Built Modules
Some modules have been implemented;
* **Identity** module is pre-installed and provides **user, role and permission management**.
* **Profile management** page is implemented to allow to change the password and personal settings.
### About the Blazorise Library
We've selected the [Blazorise](https://blazorise.com/) as a fundamental UI library for the Blazor UI. It already supports different HTML/CSS frameworks (like Bootstrap, Bulma, Ant Design...) and significantly increases the developer productivity.
![blazorise-github](blazorise-github.png)
We also have good news: **[Mladen Macanović](https://github.com/stsrki)**, the creator of the Blazorise, is **joining to the core ABP Framework team** in the next weeks. We are excited to work with him to bring the power of these two successful projects together.
### The Tutorial
We've **updated** the [web application development tutorial](https://docs.abp.io/en/abp/3.2/Tutorials/Part-1?UI=Blazor) for the **Blazor UI**. You can start to develop applications today! The **source code** of the BookStore application developed with this tutorial is [here](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore).
### Get started with the Blazor UI
If you want to try the Blazor UI today, follow the instructions below.
#### Upgrade the ABP CLI
Install the latest [ABP CLI](https://docs.abp.io/en/abp/3.2/CLI) preview version:
````bash
dotnet tool update Volo.Abp.Cli -g --version 3.2.0-rc.2
````
#### Create a new Solution
Then you can create a new solution using the *abp new* command:
````bash
abp new AbpBlazorDemo -u blazor --preview
````
Also, specify the `-t app-pro` parameter if you are an ABP Commercial user.
> See the ABP CLI documentation for the additional options, like MongoDB database or separated authentication server.
#### Open the Solution
Open the generated solution using the latest Visual Studio 2019. You will see a solution structure like the picture below:
![visual-studio-solution-with-blazor](visual-studio-solution-with-blazor.png)
#### Run the Application
* Run the `DbMigrator` project to create the database and seed the initial data.
* Run the `HttpApi.Host` project for the server-side.
* Run the `Blazor` project to start the Blazor UI.
Use `admin` as the username and `1q2w3E*` as the password to login to the application.
Here, a screenshot from the role management page of the Blazor UI:
![blazor-role-management-img](blazor-role-management-img.png)
## What's New with the ABP Framework 3.2
Besides the Blazor UI, there are a lot of issues that have been closed with [the milestone 3.2](https://github.com/abpframework/abp/milestone/39?closed=1). I will highlight some of the major features and changes released with this version.
### MongoDB ACID Transactions
[MongoDB integration](https://docs.abp.io/en/abp/3.2/MongoDB) now supports multi-document transactions that comes with the MongoDB 4.x.
We've **disabled transactions** for solutions use the MongoDB, inside the `YourProjectMongoDbModule.cs` file in the MongoDB project. If your MongoDB server **supports transactions**, you should manually enable it in this class:
```csharp
Configure<AbpUnitOfWorkDefaultOptions>(options =>
{
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Auto;
});
```
> Or you can delete this code since this is already the default behavior.
#### Upgrade Notes
If you are upgrading an existing solution and your MongoDB server doesn't support transactions, please disable it:
```csharp
Configure<AbpUnitOfWorkDefaultOptions>(options =>
{
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled;
});
```
See the [Unit Of Work document](https://docs.abp.io/en/abp/3.2/Unit-Of-Work) to learn more about UOW and transactions.
Also, add [this file](https://github.com/abpframework/abp/blob/rel-3.2/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MongoDbMyProjectNameDbSchemaMigrator.cs) into your MongoDB project (remember to change `MongoDbMyProjectNameDbSchemaMigrator` and `IMyProjectNameDbSchemaMigrator` with your own project name).
#### Integration Tests
> Transactions are also **disabled for automated integration tests** coming with the application startup template, since the [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library (we use in the test projects) has a problem with the transactions. We've sent a [Pull Request](https://github.com/Mongo2Go/Mongo2Go/pull/101) to fix it and will enable the transactions again when they merge & release it.
>
> If you are upgrading an existing solution and using MongoDB, please disable transactions for the test projects just as described above.
### Kafka Integration for the Distributed Event Bus
ABP Framework's [distributed event system](https://docs.abp.io/en/abp/3.2/Distributed-Event-Bus) has been [integrated to RabbitMQ](https://docs.abp.io/en/abp/3.2/Distributed-Event-Bus-RabbitMQ-Integration) before. By the version 3.2, it has a Kafka integration package, named [Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka).
See the [Kafka integration documentation](https://docs.abp.io/en/abp/3.2/Distributed-Event-Bus-Kafka-Integration) to learn how to install and configure it.
### Host Features
[ABP Feature System](https://docs.abp.io/en/abp/3.2/Features) allows you to define features in your application. Then you can enable/disable a feature dynamically on the runtime. It is generally used in a [multi-tenant](https://docs.abp.io/en/abp/3.2/Multi-Tenancy) system to restrict features for tenants, so you can charge extra money for some features in a SaaS application.
In some cases, you may want to use the same features in the host side (host is you as you are managing the tenants). For this case, we've added a "**Manage Host Features**" button to the Tenant Management page so you can open a modal dialog to select the features for the host side.
![host-features](host-features.png)
### AbpHttpClientBuilderOptions
ABP Framework provides a system to dynamically create C# proxies to consume HTTP APIs from your client applications. `AbpHttpClientBuilderOptions` is a new option class to configure the `HttpClient`s used by the proxy system.
**Example: Use the [Polly](https://github.com/App-vNext/Polly) library to retry up to 3 times for a failed HTTP request**
````csharp
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpHttpClientBuilderOptions>(options =>
{
options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) =>
{
clientBuilder.AddTransientHttpErrorPolicy(policyBuilder =>
policyBuilder.WaitAndRetryAsync(
3,
i => TimeSpan.FromSeconds(Math.Pow(2, i))
)
);
});
});
}
````
See the issue [#5304](https://github.com/abpframework/abp/issues/5304) for the details.
### ABP Build Command
We are using **mono repository** approach and the [abp repository](https://github.com/abpframework/abp) has tens of solutions and hundreds of projects (the framework, modules, tooling, templates...) with all of them are referencing to each other.
It gets a significant time to build the whole repository for every Git push. To **optimize** this process, we've created the **abp build** command in the [ABP CLI](https://docs.abp.io/en/abp/3.2/CLI):
````bash
abp build
````
We will use this command to build the abp repository or a solution inside it. However, it is available to everyone in case of need.
> **Most of the people will not need it**. If you need it, see the [ABP CLI](https://docs.abp.io/en/abp/3.2/CLI) document to learn all the details and options.
### Other Features, Improvements and Changes
* Introduced the `DynamicRangeAttribute` that can be used to determine the range values on runtime, just like the `DynamicStringLengthAttribute` was introduced before.
* Improved the feature management modal for multi-tenant applications to group features on the UI and show hierarchically.
* Added `--skip-cli-version-check` option to ABP CLI to improve the performance by bypassing the online version check.
* Angular UI now redirect to MVC UI (the authentication server-side) for profile management page, if the authorization code flow is used (which is the default).
* Account module profile management page is now extensible. You can implement the `IProfileManagementPageContributor` interface and register it using the `ProfileManagementPageOptions` class.
* Improvements and optimizations for the [Angular service proxy generation](https://blog.abp.io/abp/Introducing-the-Angular-Service-Proxy-Generation).
And a lot of minor improvements and bug fixes. You can see [the milestone 3.2](https://github.com/abpframework/abp/milestone/39?closed=1) for all issues & PRs closed with this version.
## What's New with the ABP Commercial 3.2
### Breaking Changes
The new *profile picture management* feature uses the [BLOB storing](https://docs.abp.io/en/abp/3.2/Blob-Storing) system, so it needs a Storage Provider. The new **startup template comes with the [Database BLOB Provider](https://docs.abp.io/en/abp/3.2/Blob-Storing-Database) pre-installed**. You can change it if you want to use another BLOB provider (like Azure, AWS or a simple file system).
**Existing solutions must configure a BLOB provider** after upgrading to the version 3.2. Follow the [BLOB Storing document](https://docs.abp.io/en/abp/3.2/Blob-Storing#blob-storage-providers) to configure the provider yourself.
### The Blazor UI
The **experimental** Blazor UI is also available for the ABP Commercial. The [Lepton Theme](https://commercial.abp.io/themes) hasn't been implemented with this initial preview, however we are working on it with the highest priority.
You can use the [ABP Suite](https://docs.abp.io/en/commercial/latest/abp-suite/index) or the following ABP CLI command to create a new solution with the Blazor UI:
````bash
abp new AbpBlazorDemo -u blazor -t app-pro --preview
````
Please try it and provide feedback to us. Thanks in advance.
> See the instructions in the *Get started with the Blazor UI* section above to properly create and run your application.
### File Management Angular UI
Angular UI for the [File Management](https://commercial.abp.io/modules/Volo.FileManagement) module is available with version 3.2. You can add it to your solution using the ABP Suite.
![file-management-module-angular](file-management-module-angular.png)
### Profile Picture Management
We've added profile picture management for the account module, so a user can select one of the options below for her profile picture;
* Use the default placeholder as the avatar.
* Use [Gravatar](https://gravatar.com/) service to get the picture matching the email address of the user.
* Upload a file as the profile picture.
![account-profile-picture](account-profile-picture.jpg)
### Two Factor Authentication Features
Created [features](https://docs.abp.io/en/abp/3.2/Features) and [settings](https://docs.abp.io/en/abp/3.2/Settings) to disable, enable or force to use 2FA on login for the tenants and users.
### Upgrading the ABP Suite
You can use the following command to upgrade the ABP Suite to the latest preview version:
````
abp suite update --preview
````
## Other News
### The ABP Community
**ABP Community** web site is constantly being improved and new articles are added. We will add "**commenting**" and "**rating**" features to the articles soon to increase the interactivity between the people.
![abp-community-20200917](abp-community-20200917.png)
If you have something to share with the ABP community or want to follow the project progress, please check the **[community.abp.io](https://community.abp.io/)**!
### CMS Kit Project
We are silently working on a project, named [CMS Kit](https://github.com/abpframework/abp/tree/dev/modules/cms-kit), for a few months. CMS Kit is a set of reusable CMS (Content Management System) components based on the ABP Framework. Some of the components currently being developed:
* **Comments**; Allows users to comment under something (a blog post, a document, an image... etc).
* **Reactions**; Allows users to give reactions to something (a comment, a picture... etc.) using simple emoji icons.
* **Rating**; Allows users to rate some content from 1 to 5.
* **Newsletter**; Allows you to put a newsletter box to your web site to collect emails from users.
* **Contact**; Put a form to get a message from the web site visitors.
There are more planned components like articles, tags, votes, favorites, portfolios, image galleries, FAQs... etc. We will document and deploy these components when they get matured and ready to use. Some of them will be open source & free while some of them are paid (included in the [ABP Commercial](https://commercial.abp.io/) license).
## Feedback
Please try the ABP Framework 3.2.0 RC and [provide feedback](https://github.com/abpframework/abp/issues/new) to help us to release a more stable version. The planned release date for the [3.2.0 final](https://github.com/abpframework/abp/milestone/43) version is October 01.

BIN
docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/visual-studio-solution-with-blazor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

45
docs/en/Community-Articles/2020-10-02-abp-framework-v32-final-has-been-released/post.md

@ -0,0 +1,45 @@
ABP Framework & ABP Commercial 3.2 have been released today.
Since all the new features are already explained in detail with the [3.2 RC Announcement Post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI), I will not repeat all the details again. Please read [the RC post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI) for **new features and changes** you may need to do for your solution while upgrading to version 3.2.
## Creating New Solutions
You can create a new solution with the ABP Framework version 3.2 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details.
## How to Upgrade an Existing Solution
### Install/Update the ABP CLI
First of all, install the ABP CLI or upgrade to the latest version.
If you haven't installed yet:
````bash
dotnet tool install -g Volo.Abp.Cli
````
To update an existing installation:
```bash
dotnet tool update -g Volo.Abp.Cli
```
### ABP UPDATE Command
[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
````bash
abp update
````
After the update command, check [the RC blog post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI) to learn if you need to make any changes in your solution.
> You may want to see the new [upgrading document](https://docs.abp.io/en/abp/latest/Upgrading).
## About the Next Versions
The next two versions (3.3 & 4.0) will be mostly related to completing the Blazor UI features and upgrading the ABP Framework & ecosystem to the .NET 5.0.
The ultimate goal is to complete the version 4.0 with a stable Blazor UI with the fundamental features implemented and publish it just after the Microsoft lunches .NET 5 in this November.

BIN
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/0f4aa548ce22a256829739f842a3ff54.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/41968da6c558c075cf1239f842a30e29.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/532b0018b486294ac3e539f842a36433.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/546a89e4112ec73f45ec39f842a3b663.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/86021f7f983fc9739cfb39f842a29644.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/ef376d39f6c5be0a628639f842a448d7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

284
docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/post.md

@ -0,0 +1,284 @@
> Note that the blog post has been updated for the `3.3.0-rc.2` release.
We have released the [ABP Framework](https://abp.io/) (and the [ABP Commercial](https://commercial.abp.io/)) `3.3.0-rc.2` today. This blog post introduces the new features and important changes in the new version.
## Get Started with the 3.3 RC.2
If you want to try the version `3.3.0-rc.2` today, follow the steps below;
1) **Upgrade** the ABP CLI to the version `3.3.0-rc.2` using a command line terminal:
````bash
dotnet tool update Volo.Abp.Cli -g --version 3.3.0-rc.2
````
**or install** if you haven't installed before:
````bash
dotnet tool install Volo.Abp.Cli -g --version 3.3.0-rc.2
````
2) Create a **new application** with the `--preview` option:
````bash
abp new BookStore --preview
````
See the [ABP CLI documentation](https://docs.abp.io/en/abp/3.3/CLI) for all the available options.
> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the Preview checkbox.
### Entity Framework Core Migrations
This release includes changes in the database tables. If you are using EF Core, then you need to **add a new migration** (`Add-Migration`) and **apply changes** (`Update-Database`) to the database after upgrading your project.
## What's new in the ABP Framework 3.3
![abp-fr-note.png](86021f7f983fc9739cfb39f842a29644.png)
### The Blazor UI
We had released an experimental early preview version of the Blazor UI with the [previous version](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI). In this version, we've completed most of the fundamental infrastructure features and the application modules (like identity and tenant management).
It currently has almost the same functionalities as the other UI types (Angular & MVC / Razor Pages).
**Example screenshot**: User management page of the Blazor UI
![abp-blazor-ui.png](41968da6c558c075cf1239f842a30e29.png)
> We've adapted the [Lepton Theme](https://commercial.abp.io/themes) for the ABP Commercial, see the related section below.
We are still working on the fundamentals. So, the next version may introduce breaking changes of the Blazor UI. We will work hard to keep them with the minimal effect on your application code.
#### Blazor UI Tutorial
The [Blazor UI tutorial](https://docs.abp.io/en/abp/3.3/Tutorials/Part-1?UI=Blazor) has been updated for the version `3.3.0-rc.2`. So, you can start the development today!
#### Breaking Changes on the Blazor UI
There are some breaking changes with the Blazor UI. If you've built an application and upgrade it, your application might not properly work. See [the migration guide](https://docs.abp.io/en/abp/3.3/Migration-Guides/BlazorUI-3_3) for the changes you need to do after upgrading your application.
### Automatic Validation for AntiForgery Token for HTTP APIs
Starting with the version 3.3, all your HTTP API endpoints are **automatically protected** against CSRF attacks, unless you disable it for your application. So, no configuration needed, just upgrade the ABP Framework.
[See the documentation](https://docs.abp.io/en/abp/3.3/CSRF-Anti-Forgery) to if you want to understand why you need it and how ABP Framework solves the problem.
### Rebus Integration Package for the Distributed Event Bus
[Rebus](https://github.com/rebus-org/Rebus) describes itself as "Simple and lean service bus implementation for .NET". There are a lot of integration packages like RabbitMQ and Azure Service Bus for the Rebus. The new [Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus) package allows you to use the Rebus as the [distributed event bus](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) for the ABP Framework.
See [the documentation](https://docs.abp.io/en/abp/3.3/Distributed-Event-Bus-Rebus-Integration) to learn how to use Rebus with the ABP Framework.
### Async Repository LINQ Extension Methods
You have a problem when you want to use **Async LINQ Extension Methods** (e.g. `FirstOrDefaultAsync(...)`) in your **domain** and **application** layers. These async methods are **not included in the standard LINQ extension methods**. Those are defined by the [Microsoft.EntityFrameworkCore](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore) NuGet package (see [the code](https://github.com/dotnet/efcore/blob/main/src/EFCore/Extensions/EntityFrameworkQueryableExtensions.cs)). To be able to use these `async` methods, you need to reference to the `Microsoft.EntityFrameworkCore` package.
If you don't want to depend on the EF Core in your business layer, then ABP Framework provides the `IAsyncQueryableExecuter` service to execute your queries asynchronously without depending on the EF Core package. You can see [the documentation](https://docs.abp.io/en/abp/latest/Repositories#option-3-iasyncqueryableexecuter) to get more information about this service.
ABP Framework version 3.3 takes this one step further and allows you to directly execute the async LINQ extension methods on the `IRepository` interface.
**Example: Use `CountAsync` and `FirstOrDefaultAsync` methods on the repositories**
````csharp
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
namespace MyCompanyName.MyProjectName
{
public class BookAppService : ApplicationService, IBookAppService
{
private readonly IRepository<Book, Guid> _bookRepository;
public BookAppService(IRepository<Book, Guid> bookRepository)
{
_bookRepository = bookRepository;
}
public async Task DemoAsync()
{
var countAll = await _bookRepository
.CountAsync();
var count = await _bookRepository
.CountAsync(x => x.Name.Contains("A"));
var book1984 = await _bookRepository
.FirstOrDefaultAsync(x => x.Name == "1984");
}
}
}
````
All the standard LINQ methods are supported: *AllAsync, AnyAsync, AverageAsync, ContainsAsync, CountAsync, FirstAsync, FirstOrDefaultAsync, LastAsync, LastOrDefaultAsync, LongCountAsync, MaxAsync, MinAsync, SingleAsync, SingleOrDefaultAsync, SumAsync, ToArrayAsync, ToListAsync*.
This approach still has a limitation. You need to execute the extension method directly on the repository object. For example, the below usage is **not supported**:
````csharp
var count = await _bookRepository.Where(x => x.Name.Contains("A")).CountAsync();
````
This is because the object returned from the `Where` method is not a repository object, it is a standard `IQueryable`. In such cases, you can still use the `IAsyncQueryableExecuter`:
````csharp
var count = await AsyncExecuter.CountAsync(
_bookRepository.Where(x => x.Name.Contains("A"))
);
````
`AsyncExecuter` has all the standard extension methods, so you don't have any restriction here. See [the repository documentation](https://docs.abp.io/en/abp/latest/Repositories#iqueryable-async-operations) for all the options you have.
> ABP Framework does its best to not depend on the EF Core and still be able to use the async LINQ extension methods. However, there is no problem to depend on the EF Core for your application, you can add the `Microsoft.EntityFrameworkCore` NuGet package and use the native methods.
### Stream Support for the Application Service Methods
[Application services](https://docs.abp.io/en/abp/latest/Application-Services) are consumed by clients and the parameters and return values (typically [Data Transfer Objects](https://docs.abp.io/en/abp/latest/Data-Transfer-Objects)). In case of the client is a remote application, then these objects should be serialized & deserialized.
Until the version 3.3, we hadn't suggest to use the `Stream` in the application service contracts, since it is not serializable/deserializable. However, with the version 3.3, ABP Framework properly supports this scenario by introducing the new `IRemoteStreamContent` interface.
Example: An application service that can get or return streams
````csharp
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace MyProject.Test
{
public interface ITestAppService : IApplicationService
{
Task Upload(Guid id, IRemoteStreamContent streamContent);
Task<IRemoteStreamContent> Download(Guid id);
}
}
````
The implementation can be as shown below:
````csharp
using System;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace MyProject.Test
{
public class TestAppService : ApplicationService, ITestAppService
{
public Task<IRemoteStreamContent> Download(Guid id)
{
var fs = new FileStream("C:\\Temp\\" + id + ".blob", FileMode.OpenOrCreate);
return Task.FromResult(
(IRemoteStreamContent) new RemoteStreamContent(fs) {
ContentType = "application/octet-stream"
}
);
}
public async Task Upload(Guid id, IRemoteStreamContent streamContent)
{
using (var fs = new FileStream("C:\\Temp\\" + id + ".blob", FileMode.Create))
{
await streamContent.GetStream().CopyToAsync(fs);
await fs.FlushAsync();
}
}
}
}
````
> This is just a demo code. Do it better in your production code :)
Thanks to [@alexandru-bagu](https://github.com/alexandru-bagu) for the great contribution!
### Other Changes
* Upgraded all the .NET Core / ASP.NET Core related packages to the version 3.1.8. If you have additional dependencies to the .NET Core / ASP.NET Core related packages, we suggest you to updates your packages to the version 3.1.8 to have the latest bug and security fixes published by Microsoft.
* The blogging module now uses the [BLOB Storing](https://docs.abp.io/en/abp/latest/Blob-Storing) system to store images & files of the blog posts. If you are using this module, then you need to manually migrate the local files to the BLOB Storing system after the upgrade.
* The Angular UI is now redirecting to the profile management page of the MVC UI instead of using its own UI, if you've configured the authorization code flow (which is default since the version 3.2.0).
## What's new in the ABP Commercial 3.3
![abp-co-note.png](532b0018b486294ac3e539f842a36433.png)
### The Blazor UI
We have good news for the ABP Commercial Blazor UI too. We have implemented the [Lepton Theme](https://commercial.abp.io/themes) integration, so it is now available with the Blazor UI. Also, implemented most of the fundamental [modules](https://commercial.abp.io/modules).
**A screenshot from the ABP Commercial startup template with the Blazor UI**
![abp-commercial-blazor-ui.png](546a89e4112ec73f45ec39f842a3b663.png)
There are still missing features and modules. However, we are working on it to have a more complete version in the next release.
#### Breaking Changes on the Blazor UI
There are some breaking changes with the Blazor UI. If you've built an application and upgrade it, your application might not properly work. See the [ABP Commercial Blazor UI v 3.3 Migration Guide](https://docs.abp.io/en/commercial/3.3/migration-guides/blazor-ui-3_3) for the changes you need to do after upgrading your application.
#### Known Issues
When you create a new project, profile management doesn't work, you get an exception because it can't find the `/libs/cropperjs/css/cropper.min.css` file. To fix the issue;
* Add `"@volo/account": "^3.3.0-rc.2"` to the `package.json` in the `.Host` project.
* Run `yarn` (or `npm install`), then `gulp` on a command line terminal in the root folder of the `.Host` project.
### Multi-Tenant Social Logins
[Account module](https://commercial.abp.io/modules/Volo.Account.Pro) now supports to manage the social/external logins in the UI. You can **enable/disable** and **set options** in the settings page. It also supports to use **different credentials for the tenants** and it is also **configured on the runtime**.
![abp-commercial-setting-account-external-logins.png](0f4aa548ce22a256829739f842a3ff54.png)
### Linked Accounts
Linked user system allows you to link other accounts (including account in a different tenant) with your account, so you can switch between different accounts with a single-click. It is practical since you no longer need to logout and login again with entering the credentials of the target account.
To manage the linked accounts, go to the profile management page from the user menu;
![abp-commercial-linked-users.png](ef376d39f6c5be0a628639f842a448d7.png)
### Paypal & Stripe Integrations
The [Payment Module](https://commercial.abp.io/modules/Volo.Payment) was supporting PayU and 2Checkout providers until the version 3.3. It's now integrated to PayPal and Stripe. See the [technical documentation](https://docs.abp.io/en/commercial/latest/modules/payment) to learn how to use it.
### ABP Suite Improvements
We've done a lot of small improvements for the [ABP Suite](https://commercial.abp.io/tools/suite). Some of the enhancements are;
* Show the previously installed modules as *installed* on the module list.
* Switch between the latest stable, the latest [preview](https://docs.abp.io/en/abp/latest/Previews) and the latest [nightly build](https://docs.abp.io/en/abp/latest/Nightly-Builds) versions of the ABP related packages.
* Moved the file that stores the *previously created entities* into the solution folder to allow you to store it in your source control system.
### Others
* Added an option to the Account Module to show reCAPTCHA on the login & the registration forms.
Besides the new features introduced in this post, we've done a lot of small other enhancements and bug fixes to provide a better development experience and increase the developer productivity.
## New Articles
The core ABP Framework team & the community continue to publish new articles on the [ABP Community](https://community.abp.io/) web site. The recently published articles are;
* [Replacing Email Templates and Sending Emails](https://community.abp.io/articles/replacing-email-templates-and-sending-emails-jkeb8zzh) (by [@EngincanV](https://community.abp.io/members/EngincanV))
* [How to Add Custom Properties to the User Entity](https://community.abp.io/articles/how-to-add-custom-property-to-the-user-entity-6ggxiddr) (by [@berkansasmaz](https://community.abp.io/members/berkansasmaz))
* [Using the AdminLTE Theme with the ABP Framework MVC / Razor Pages UI](https://community.abp.io/articles/using-the-adminlte-theme-with-the-abp-framework-mvc-razor-pages-ui-gssbhb7m) (by [@mucahiddanis](https://community.abp.io/members/mucahiddanis))
* [Using DevExtreme Angular Components With the ABP Framework](https://community.abp.io/articles/using-devextreme-angular-components-with-the-abp-framework-x5nyvj3i) (by [@bunyamin](https://community.abp.io/members/bunyamin))
It is appreciated if you want to [submit an article](https://community.abp.io/articles/submit) related to the ABP Framework.
## About the Next Release
The next version will be `4.0.0`. We are releasing a major version, since we will move the ABP Framework to .NET 5.0. We see that for most of the applications this will not be a breaking change and we hope you easily upgrade to it.
The planned 4.0.0-rc.1 (Release Candidate) version date is **November 11**, just after the Microsoft releases the .NET 5.0 final. The planned 4.0.0 final release date is **November 26**.
Follow the [GitHub milestones](https://github.com/abpframework/abp/milestones) for all the planned ABP Framework version release dates.
## Feedback
Please check out the ABP Framework 3.3.0 RC and [provide feedback](https://github.com/abpframework/abp/issues/new) to help us to release a more stable version. The planned release date for the [3.3.0 final](https://github.com/abpframework/abp/milestone/44) version is October 27th.

46
docs/en/Community-Articles/2020-10-28-abp-framework--abp-commercial-33-final-have-been-released/post.md

@ -0,0 +1,46 @@
ABP Framework & ABP Commercial 3.3.0 have been released today.
Since all the new features are already explained in details with the [3.3 RC Announcement Post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-v3.3-RC-Have-Been-Released), I will not repeat all the details again. Please read [the RC post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-v3.3-RC-Have-Been-Released) for **new feature and changes** you may need to do for your solution while upgrading to the version 3.3.
## Creating New Solutions
You can create a new solution with the ABP Framework version 3.3 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details.
## How to Upgrade an Existing Solution
### Install/Update the ABP CLI
First of all, install the ABP CLI or upgrade to the latest version.
If you haven't installed yet:
````bash
dotnet tool install -g Volo.Abp.Cli
````
To update an existing installation:
```bash
dotnet tool update -g Volo.Abp.Cli
```
### ABP UPDATE Command
[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
````bash
abp update
````
Run this command in the root folder of your solution. After the update command, check [the RC blog post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-v3.3-RC-Have-Been-Released) to learn if you need to make any changes in your solution.
> You may want to see the new [upgrading document](https://docs.abp.io/en/abp/latest/Upgrading).
## About the Next Version: 4.0
The next version will be 4.0 and it will be mostly related to completing the Blazor UI features and upgrading the ABP Framework & ecosystem to the .NET 5.0.
The goal is to complete the version 4.0 with a stable Blazor UI with the fundamental features implemented and publish it just after the Microsoft lunches .NET 5 in this November. The planned 4.0 preview release date is November 11th.

BIN
docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/066daf9bcf2e9e2c6bed39f8e7480552.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/1ad2d609148d655845ea39f8e73d0894.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/723f7d5553da8714d3f839f8e747c95f.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

145
docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/post.md

@ -0,0 +1,145 @@
Today, we have released the [ABP Framework](https://abp.io/) (and the [ABP Commercial](https://commercial.abp.io/)) 4.0.0 RC that is based on the **.NET 5.0**. This blog post introduces the new features and important changes in the new version.
> **The planned release date for the [4.0.0 final](https://github.com/abpframework/abp/milestone/45) version is December 3, 2020**.
## Get Started with the 4.0 RC
If you want to try the version `4.0.0` today, follow the steps below;
1) **Upgrade** the ABP CLI to the version `4.0.0-rc.5` using a command line terminal:
````bash
dotnet tool update Volo.Abp.Cli -g --version 4.0.0-rc.5
````
**or install** if you haven't installed before:
````bash
dotnet tool install Volo.Abp.Cli -g --version 4.0.0-rc.5
````
2) Create a **new application** with the `--preview` option:
````bash
abp new BookStore --preview
````
See the [ABP CLI documentation](https://docs.abp.io/en/abp/3.3/CLI) for all the available options.
> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**.
## Migrating From 3.x to 4.0
The version 4.0 comes with some major changes including the **migration from .NET Core 3.1 to .NET 5.0**.
We've prepared a **detailed [migration document](https://docs.abp.io/en/abp/4.0/Migration-Guides/Abp-4_0)** to explain all the changes and the actions you need to take while upgrading your existing solutions.
## What's new with the ABP Framework 4.0
![abp-fr-note.png](723f7d5553da8714d3f839f8e747c95f.png)
### The Blazor UI
The Blazor UI is now stable and officially supported. The [web application development tutorial](https://docs.abp.io/en/abp/4.0/Tutorials/Part-1?UI=Blazor) has been updated based on the version 4.0.
#### abp bundle command
Introducing the `abp bundle` CLI command to manage static JavaScript & CSS file dependencies of a Blazor application. This command is currently used to add the dependencies to the `index.html` file in the dependency order by respecting to modularity. In the next version it will automatically unify & minify the files. The documentation is being prepared.
#### Removed the JQuery & Bootstrap JavaScript
Removed JQuery & Bootstrap JavaScript dependencies for the Blazor UI.
>There are some other changes in the startup template and some public APIs. Follow the [Migration Guide](https://docs.abp.io/en/abp/4.0/Migration-Guides/Abp-4_0) to apply changes for existing solutions that you're upgrading from the version 3.3. While we will continue to make improvements add new features, we no longer make breaking changes on the existing APIs until the version 5.0.
#### Others
A lot of minor and major improvements have been done for the Blazor UI. Some of them are listed below:
* Implemented `IComponentActivator` to resolve the component from the `IServiceProvider`. So, you can now inject dependencies into the constructor of your razor component.
* Introduced the `AbpComponentBase` base class that you derive your components from. It has useful base properties that you can use in your pages/components.
* Introduced `IUiNotificationService` service to show toast notifications on the UI.
* Improved the `IUiMessageService` to show message & confirmation dialogs.
### System.Text.Json
ABP Framework 4.0 uses the System.Text.Json by default as the JSON serialization library. It, actually, using a hybrid approach: Continues to use the Newtonsoft.Json when it needs to use the features not supported by the System.Text.Json.
Follow the [Migration Guide](https://docs.abp.io/en/abp/4.0/Migration-Guides/Abp-4_0) to learn how to configure to use the Newtonsoft.Json for some specific types or switch back to the Newtonsoft.Json as the default JSON serializer.
### Identity Server 4 Upgrade
ABP Framework upgrades the [IdentityServer4](https://www.nuget.org/packages/IdentityServer4) library from 3.x to 4.1.1 with the ABP Framework version 4.0. IdentityServer 4.x has a lot of changes. Some of them are **breaking changes in the data structure**.
Follow the [Migration Guide](https://docs.abp.io/en/abp/4.0/Migration-Guides/Abp-4_0) to upgrade existing solutions.
### Creating a New Module Inside the Application
ABP CLI has now a command to create a new module and add it to an existing solution. In this way, you can create modular applications easier than before.
Example: Create a *ProductManagement* module into your solution.
````bash
abp add-module ProductManagement --new --add-to-solution-file
````
Execute this command in a terminal in the root folder of your solution. If you don't specify the `--add-to-solution-file` option, then the module projects will not be added to the main solution, but the project references still be added. In this case, you need to open the module's solution to develop the module.
See the [CLI document](https://docs.abp.io/en/abp/4.0/CLI) for other options.
### WPF Startup Template
Introducing the WPF startup template for the ABP Framework. Use the ABP CLI new command to create a new WPF application:
````bash
abp new MyWpfApp -t wpf
````
This is a minimalist, empty project template that is integrated to the ABP Framework.
### New Languages
**Thanks to the contributors** from the ABP Community, the framework modules and the startup template have been localized to **German** language by [Alexander Pilhar](https://github.com/alexanderpilhar) & [Nico Lachmuth](https://github.com/tntwist) and to **Spanish** language by [Jose Manuel Gonzalez](https://github.com/jmglezgz) and [Washington Acero M.](https://github.com/washyn).
### Other Notes
* Upgraded to Angular 11.
* Since [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library not supports transactions, you can use transactions in unit tests for MongoDB.
## What's new with the ABP Commercial 4.0
![abp-co-note.png](066daf9bcf2e9e2c6bed39f8e7480552.png)
### The Blazor UI
The Blazor UI for the ABP Commercial is also becomes stable and feature rich with the version 4.0;
* [ABP Suite](https://commercial.abp.io/tools/suite) now supports to generate CRUD pages for the Blazor UI.
* Completed the [Lepton Theme](https://commercial.abp.io/themes) for the Blazor UI.
* Implemented the [File Management](https://commercial.abp.io/modules/Volo.FileManagement) module for the Blazor UI.
### The ABP Suite
While creating create/edit modals with a navigation property, we had two options: A dropdown to select the target entity and a modal to select the entity by searching with a data table.
Dropdown option now supports **lazy load, search and auto-complete**. In this way, selecting a navigation property becomes much easier and supports large data sets on the dropdown.
**Example: Select an author while creating a new book**
![abp-suite-auto-complete-dropdown.png](1ad2d609148d655845ea39f8e73d0894.png)
With the new version, you can **disable backend code generation** on CRUD page generation. This is especially useful if you want to regenerate the page with a different UI framework, but don't want to regenerate the server side code.
### Identity Server Management UI Revised
Completely revised the Identity Server Management UI based on the IDS 4.x changes.
## About the Next Release
The next feature version, `4.1.0`, will mostly focus on completing the missing documents, fixing bugs, performance optimizations and improving the Blazor UI features. The planned preview release date for the version `4.1.0` is December 10 and the final (stable) version release date is December 24.
Follow the [GitHub milestones](https://github.com/abpframework/abp/milestones) for all the planned ABP Framework version release dates.
## Feedback
Please check out the ABP Framework 4.0.0 RC and [provide feedback](https://github.com/abpframework/abp/issues/new) to help us to release a more stable version. **The planned release date for the [4.0.0 final](https://github.com/abpframework/abp/milestone/45) version is November 26**.

BIN
docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/461ed871392027d60be739f93edde364.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/7585eb53490fa17c62c939f93ede61d6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save