diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 9410a7813f..923535cfdd 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -346,9 +346,12 @@
"Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!",
"Volo.AbpIo.Commercial:030003": "There is no such status!",
"Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!",
- "Volo.AbpIo.Commercial:030005": "Start date and end date cannot be given when the trial license is in the requested state!",
+ "Volo.AbpIo.Commercial:030005": "Start and end date can be updated when the trial license is in the -activated- status!",
"Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!",
"Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!",
"Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!",
+ "Volo.AbpIo.Commercial:030009": "User not found!",
+ "Volo.AbpIo.Commercial:030010": "To purchase the trial license, first you need to activate your trial license!",
+ "Volo.AbpIo.Commercial:030011": "You cannot delete a trial license when it is purchased!"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
index b31c33621c..c8bfea1f13 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
@@ -230,7 +230,7 @@
"HowCanIRefundVatExplanation2": "Log in into your 2Checkout account",
"HowCanIRefundVatExplanation3": "Find the appropriate order and press \"Refund Belated VAT\" (enter your VAT ID)",
"HowCanIGetMyInvoice": "How can I get my invoice?",
- "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: PayU and 2Checkout. If you purchase your license through 2Checkout gateway, it sends the PDF invoice to your email address, see 2Checkout invoicing. If you purchase through the PayU gateway or via bank wire transfer, we will prepare and send your invoice. You can request your invoice from the organization management page.",
+ "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: Iyzico and 2Checkout. If you purchase your license through the 2Checkout gateway, it sends the PDF invoice to your email address, see 2Checkout invoicing. If you purchase through the Iyzico gateway, with custom purchase link or via bank wire transfer, we will prepare and send your invoice. You can request or download your invoice from the organization management page. Before contacting us for the invoice, check your organization management page!",
"Forum": "Forum",
"SupportExplanation": "ABP Commercial licenses provides a premium forum support by a team consists of the ABP Framework experts.",
"PrivateTicket": "Private Ticket",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
index ac5e247264..7dddad6580 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
@@ -230,7 +230,7 @@
"HowCanIRefundVatExplanation2": "登录到你的2Checkout账户",
"HowCanIRefundVatExplanation3": "找到适当的订单,然后按\"退还已延期的增值税\"(输入你的增值税ID",
"HowCanIGetMyInvoice": "我如何获得发票?",
- "HowCanIGetMyInvoiceExplanation": "有两个用于购买许可的支付网关:PayU和2Checkout. 如果你通过2Checkout网关购买许可,则它将PDF发票发送到你的电子邮件地址,请参阅2Checkout发票.如果你是通过PayU网关或通过银行电汇购买的,我们将准备并发送你的发票. 你可以从组织管理页面索取发票.",
+ "HowCanIGetMyInvoiceExplanation": "有两个用于购买许可的支付网关:Iyzico和2Checkout. 如果你通过2Checkout网关购买许可,则它将PDF发票发送到你的电子邮件地址,请参阅2Checkout发票.如果你是通过Iyzico网关或通过银行电汇购买的,我们将准备并发送你的发票. 你可以从组织管理页面索取发票.",
"Forum": "论坛",
"SupportExplanation": "ABP商业版许可包含由ABP框架专家组成的团队提供的高级论坛支持.",
"PrivateTicket": "私有票",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
index 80fed13066..137079c16a 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
@@ -228,7 +228,7 @@
"HowCanIRefundVatExplanation2": "登錄到你的2Checkout賬戶",
"HowCanIRefundVatExplanation3": "找到適當的訂單,然後按\"退還已延期的增值稅\"(輸入你的增值稅ID",
"HowCanIGetMyInvoice": "我如何獲得發票?",
- "HowCanIGetMyInvoiceExplanation": "有兩個用於購買許可的支付網關:PayU和2Checkout. 如果你通過2Checkout網關購買許可,則它將PDF發票發送到你的電子郵件地址,請參閱2Checkout發票.如果你是通過PayU網關或通過銀行電匯購買的,我們將準備並發送你的發票. 你可以從組織管理頁面索取發票.",
+ "HowCanIGetMyInvoiceExplanation": "有兩個用於購買許可的支付網關:Iyzico和2Checkout. 如果你通過2Checkout網關購買許可,則它將PDF發票發送到你的電子郵件地址,請參閱2Checkout發票.如果你是通過Iyzico網關或通過銀行電匯購買的,我們將準備並發送你的發票. 你可以從組織管理頁面索取發票.",
"Forum": "論壇",
"SupportExplanation": "ABP商業版許可包含由ABP框架專家組成的團隊提供的高級論壇支持.",
"PrivateTicket": "私有票",
@@ -319,4 +319,4 @@
"MongoDB": "MongoDB"
}
-}
\ No newline at end of file
+}
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md
index 675544fba0..8a807efdd6 100644
--- a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md
+++ b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/POST.md
@@ -32,6 +32,14 @@ See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all t
> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**.
+### Visual Studio Upgrade
+
+As .NET 6 is a preview version you need to make changes on your current Visual Studio. If you want to run a .NET 6 project on Visual Studio 2019, you need to enable the `Use Previews of the .NET SDK` option from Visual Studio 2019 options. See the screenshot:
+
+
+
+Alternatively you can download the latest Visual Studio 2022 preview to run/create the .NET 6 projects. We have tested the ABP solution with the Visual Studio 2022 `17.0.0 Preview 4.1`. Check out https://visualstudio.microsoft.com/vs/preview/ for more information.
+
### Migration Notes & Breaking Changes
This is a major version and there are some breaking changes and upgrade steps. Here, a list of important breaking changes in this version:
@@ -111,7 +119,7 @@ Enabling the inbox and outbox patterns requires a few manual steps for your appl
First of all, you need to have EF Core or MongoDB installed into your solution. It should be already installed if you'd created a solution from the ABP startup template.
-#### Install the package
+#### Install the packages
Install the new [Volo.Abp.EventBus.Boxes](https://www.nuget.org/packages/Volo.Abp.EventBus.Boxes) NuGet package to your database layer (to `EntityFrameworkCore` or `MongoDB` project) or to the host application. Open a command-line terminal at the root directory of your database (or host) project and execute the following command:
@@ -119,7 +127,27 @@ Install the new [Volo.Abp.EventBus.Boxes](https://www.nuget.org/packages/Volo.Ab
abp add-package Volo.Abp.EventBus.Boxes
````
-This will install the package and setup the ABP module dependency.
+This will install the package and setup the ABP module dependency. This package depends on [DistributedLock.Core](https://www.nuget.org/packages/DistributedLock.Core) library which provides a distributed locking system for concurrency control in a distributed environment. There are [many distributed lock providers](https://github.com/madelson/DistributedLock#implementations), including Redis, SqlServer and ZooKeeper. You can use the one you like. Here, I will show the Redis provider.
+
+Add [DistributedLock.Redis](https://www.nuget.org/packages/DistributedLock.Redis) NuGet package to your project, then add the following code into the ConfigureService method of your ABP module class:
+
+````csharp
+context.Services.AddSingleton(sp =>
+{
+ var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
+ return new RedisDistributedSynchronizationProvider(connection.GetDatabase());
+});
+````
+
+We are getting the Redis configuration from the `appsettings.json` file, so add the following lines to your `appsettings.json` file:
+
+````json
+"Redis": {
+ "Configuration": "127.0.0.1"
+}
+````
+
+You can change the IP or customize the configuration based on your environment.
#### Configure the DbContext
diff --git a/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/use-preview-visual-studio.png b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/use-preview-visual-studio.png
new file mode 100644
index 0000000000..317cf1d209
Binary files /dev/null and b/docs/en/Blog-Posts/2021-10-05 v5_0_Beta1/use-preview-visual-studio.png differ
diff --git a/docs/en/Distributed-Event-Bus-Azure-Integration.md b/docs/en/Distributed-Event-Bus-Azure-Integration.md
new file mode 100644
index 0000000000..ca66cbca8a
--- /dev/null
+++ b/docs/en/Distributed-Event-Bus-Azure-Integration.md
@@ -0,0 +1,133 @@
+# Distributed Event Bus Azure Integration
+
+> This document explains **how to configure the [Azure Service Bus](https://azure.microsoft.com/en-us/services/service-bus/)** as the distributed event bus provider. See the [distributed event bus document](Distributed-Event-Bus.md) to learn how to use the distributed event bus system
+
+## Installation
+
+Use the ABP CLI to add [Volo.Abp.EventBus.Azure](https://www.nuget.org/packages/Volo.Abp.EventBus.Azure) NuGet package to your project:
+
+* Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't installed before.
+* Open a command line (terminal) in the directory of the `.csproj` file you want to add the `Volo.Abp.EventBus.Azure` package.
+* Run `abp add-package Volo.Abp.EventBus.Azure` command.
+
+If you want to do it manually, install the [Volo.Abp.EventBus.Azure](https://www.nuget.org/packages/Volo.Abp.EventBus.Azure) NuGet package to your project and add `[DependsOn(typeof(AbpEventBusAzureModule))]` to the [ABP module](Module-Development-Basics.md) class inside your project.
+
+## Configuration
+
+You can configure using the standard [configuration system](Configuration.md), like using the `appsettings.json` file, or using the [options](Options.md) classes.
+
+### `appsettings.json` file configuration
+
+This is the simplest way to configure the Azure Service Bus settings. It is also very strong since you can use any other configuration source (like environment variables) that is [supported by the AspNet Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/).
+
+**Example: The minimal configuration to connect to Azure Service Bus Namespace with default configurations**
+
+````json
+{
+ "Azure": {
+ "ServiceBus": {
+ "Connections": {
+ "Default": {
+ "ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={};EntityPath=marketing-consent"
+ }
+ }
+ },
+ "EventBus": {
+ "ConnectionName": "Default",
+ "SubscriberName": "MySubscriberName",
+ "TopicName": "MyTopicName"
+ }
+ }
+}
+````
+
+* `MySubscriberName` is the name of this subscription, which is used as the **Subscriber** on the Azure Service Bus.
+* `MyTopicName` is the **topic name**.
+
+See [the Azure Service Bus document](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions) to understand these options better.
+
+#### Connections
+
+If you need to connect to another Azure Service Bus Namespace the Default, you need to configure the connection properties.
+
+**Example: Declare two connections and use one of them for the event bus**
+
+````json
+{
+ "Azure": {
+ "ServiceBus": {
+ "Connections": {
+ "Default": {
+ "ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey={{SharedAccessKey}}"
+ },
+ "SecondConnection": {
+ "ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={{SharedAccessKey}}"
+ }
+ }
+ },
+ "EventBus": {
+ "ConnectionName": "SecondConnection",
+ "SubscriberName": "MySubscriberName",
+ "TopicName": "MyTopicName"
+ }
+ }
+}
+````
+
+This allows you to use multiple Azure Service Bus namespaces in your application, but select one of them for the event bus.
+
+You can use any of the [ServiceBusAdministrationClientOptions](https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.administration.servicebusadministrationclientoptions?view=azure-dotnet), [ServiceBusClientOptions](https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.servicebusclientoptions?view=azure-dotnet), [ServiceBusProcessorOptions](https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.servicebusprocessoroptions?view=azure-dotnet) properties for the connection.
+
+**Example: Specify the Admin, Client and Processor options**
+
+````json
+{
+ "Azure": {
+ "ServiceBus": {
+ "Connections": {
+ "Default": {
+ "ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={};EntityPath=marketing-consent",
+ "Admin": {
+ "Retry": {
+ "MaxRetries": 3
+ }
+ },
+ "Client": {
+ "RetryOptions": {
+ "MaxRetries": 1
+ }
+ },
+ "Processor": {
+ "AutoCompleteMessages": true,
+ "ReceiveMode": "ReceiveAndDelete"
+ }
+ }
+ }
+ },
+ "EventBus": {
+ "ConnectionName": "Default",
+ "SubscriberName": "MySubscriberName",
+ "TopicName": "MyTopicName"
+ }
+ }
+}
+````
+
+### The Options Classes
+
+`AbpAzureServiceBusOptions` and `AbpAzureEventBusOptions` classes can be used to configure the connection strings and event bus options for Azure Service Bus.
+
+You can configure this options inside the `ConfigureServices` of your [module](Module-Development-Basics.md).
+
+**Example: Configure the connection**
+
+````csharp
+Configure(options =>
+{
+ options.Connections.Default.ConnectionString = "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={}";
+ options.Connections.Default.Admin.Retry.MaxRetries = 3;
+ options.Connections.Default.Client.RetryOptions.MaxRetries = 1;
+});
+````
+
+Using these options classes can be combined with the `appsettings.json` way. Configuring an option property in the code overrides the value in the configuration file.
diff --git a/docs/en/Distributed-Event-Bus.md b/docs/en/Distributed-Event-Bus.md
index 05ef16a59e..1e8549d8f0 100644
--- a/docs/en/Distributed-Event-Bus.md
+++ b/docs/en/Distributed-Event-Bus.md
@@ -7,6 +7,7 @@ Distributed Event bus system allows to **publish** and **subscribe** to events t
Distributed event bus system provides an **abstraction** that can be implemented by any vendor/provider. There are four providers implemented out of the box:
* `LocalDistributedEventBus` is the default implementation that implements the distributed event bus to work as in-process. Yes! The **default implementation works just like the [local event bus](Local-Event-Bus.md)**, if you don't configure a real distributed provider.
+* `AzureDistributedEventBus` implements the distributed event bus with the [Azure Service Bus](https://azure.microsoft.com/en-us/services/service-bus/). See the [Azure Service Bus integration document](Distributed-Event-Bus-Azure-Integration.md) to learn how to configure it.
* `RabbitMqDistributedEventBus` implements the distributed event bus with the [RabbitMQ](https://www.rabbitmq.com/). See the [RabbitMQ integration document](Distributed-Event-Bus-RabbitMQ-Integration.md) to learn how to configure it.
* `KafkaDistributedEventBus` implements the distributed event bus with the [Kafka](https://kafka.apache.org/). See the [Kafka integration document](Distributed-Event-Bus-Kafka-Integration.md) to learn how to configure it.
* `RebusDistributedEventBus` implements the distributed event bus with the [Rebus](http://mookid.dk/category/rebus/). See the [Rebus integration document](Distributed-Event-Bus-Rebus-Integration.md) to learn how to configure it.
diff --git a/docs/en/UI/Angular/Content-Strategy.md b/docs/en/UI/Angular/Content-Strategy.md
index 8544042c32..cb06ecf044 100644
--- a/docs/en/UI/Angular/Content-Strategy.md
+++ b/docs/en/UI/Angular/Content-Strategy.md
@@ -11,13 +11,15 @@
constructor(
public content: string,
protected domStrategy?: DomStrategy,
- protected contentSecurityStrategy?: ContentSecurityStrategy
+ protected contentSecurityStrategy?: ContentSecurityStrategy,
+ protected options?: ElementOptions = {},
)
```
- `content` is set to `