diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000000..5ecb45e142
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,14 @@
+### Description
+
+Resolves #xxxx (write the related issue number if available)
+
+TODO: Describe what this PR has changed, add screenshot or animated GIF if available, write if it is a breaking change, and how to fix the breaking changes for existing applications if so.
+
+### Checklist
+
+- [ ] I fully tested it as developer / designer and created unit / integration tests
+- [ ] I documented it (or no need to document or I will create a separate documentation issue)
+
+### How to test it?
+
+Please describe how this can be tested by the test engineers if it is not already explicit - or remove this section if no need to description.
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 1dbca493c5..333a8e2b35 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -428,6 +428,29 @@
"CurrentEstimatedSizeInfo": "Indicates an estimated sum of all the NuGet packages' content size currently in the memory cache",
"CurrentEntryCountInfo": "Indicates the number of instances currently in the memory cache.",
"TotalHitsInfo": "Indicates the total number of cache misses. A cache hit occurs when a file is requested from a cache and the cache is able to fulfill that request.",
- "TotalMissesInfo": "Indicates the total number of cache hits. A cache miss is when the cache does not contain the requested content."
+ "TotalMissesInfo": "Indicates the total number of cache hits. A cache miss is when the cache does not contain the requested content.",
+ "Permission:VersionHistory": "Version History",
+ "Caches": "Caches",
+ "VersionHistories": "Version History",
+ "Version": "Version",
+ "PublishDate": "Publish Date",
+ "IsStableVersion": "Stable Version",
+ "IsActive": "Active",
+ "NewVersion": "New Version",
+ "VersionHistoryDeletionConfirmationMessage": "Are you sure you want to delete this version?",
+ "CreateAbpConsultantLogoInfo": "Maximum file size: 1MB Supported file types: jpg, jpeg, png, SVG, WebP",
+ "UrlCode": "Url Code",
+ "Icon": "Icon",
+ "Clear": "Clear",
+ "Permission:AbpConsultant": "ABP Consultant",
+ "Menu:AbpConsultants": "ABP Consultants",
+ "CreateAbpConsultant": "Create ABP Consultant",
+ "UrlCodeIsNotAvailable": "Url code is used by another ABP Consultant.",
+ "AbpConsultants": "ABP Consultants",
+ "AbpConsultant": "ABP Consultant",
+ "AbpConsultantEdit": "Edit ABP Consultant",
+ "AbpConsultantCreate": "Create ABP Consultant",
+ "WhoWeAreItem": "Who We Are Item",
+ "FieldIsRequired": "{0} is required.",
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
index 751c5b6481..253ff9b542 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
@@ -429,6 +429,8 @@
"Activity": "Activity",
"Type": "Type",
"Contribution": "Contribution",
- "Info": "Info"
+ "Info": "Info",
+ "WhoWeAre_Partner": "Who We Are",
+ "WhoWeAre_Expert": "About Me"
}
}
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index ee204898cf..9feb810730 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -138,6 +138,7 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample
* `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
* `mvc`: ASP.NET Core MVC.
* `angular`: Angular UI.
+ * `blazor`: Blazor UI.
* `blazor-server`: Blazor Server UI.
* `none`: Without UI.
* `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers:
diff --git a/docs/en/Customizing-Application-Modules-Extending-Entities.md b/docs/en/Customizing-Application-Modules-Extending-Entities.md
index a3c9ae4e9a..c2cacb4e4c 100644
--- a/docs/en/Customizing-Application-Modules-Extending-Entities.md
+++ b/docs/en/Customizing-Application-Modules-Extending-Entities.md
@@ -101,7 +101,7 @@ public class MyLocalIdentityUserChangeEventHandler :
````
* `EntityChangedEventData` covers create, update and delete events for the given entity. If you need, you can subscribe to create, update and delete events individually (in the same class or different classes).
-* This code will be executed **out of the local transaction**, because it listens the `EntityChanged` event. You can subscribe to the `EntityChangingEventData` to perform your event handler in **the same local (in-process) transaction** if the current [unit of work](Unit-Of-Work.md) is transactional.
+* This code will be executed in the **current unit of work**, the whole process becomes transactional.
> Reminder: This approach needs to change the `IdentityUser` entity in the same process contains the handler class. It perfectly works even for a clustered environment (when multiple instances of the same application are running on multiple servers).
diff --git a/docs/en/Getting-Started-Running-Solution.md b/docs/en/Getting-Started-Running-Solution.md
index 44fbd3eb03..36cd5ffe0a 100644
--- a/docs/en/Getting-Started-Running-Solution.md
+++ b/docs/en/Getting-Started-Running-Solution.md
@@ -113,11 +113,11 @@ This is the HTTP API that is used by the web application.
3. Lastly, ensure that the {{if UI=="MVC"}}`.Web`{{else}}`.Blazor`{{end}} project is the startup project and run the application which will open a **welcome** page in your browser
-
+
Click to the **login** button which will redirect you to the *authentication server* to login to the application:
-
+
{{ else # Tiered != "Yes" }}
@@ -125,7 +125,7 @@ Ensure that the {{if UI=="MVC"}}`.Web`{{else}}`.Blazor`{{end}} project is the st
> Use Ctrl+F5 in Visual Studio (instead of F5) to run the application without debugging. If you don't have a debug purpose, this will be faster.
-
+
{{ end # Tiered }}
@@ -171,7 +171,7 @@ Ensure that the `.Blazor` project is the startup project and run the application
Once the application starts, click to the **Login** link on to header, which redirects you to the authentication server to enter a username and password:
-
+
{{ else if UI == "NG" }}
@@ -191,7 +191,7 @@ yarn start
It may take a longer time for the first build. Once it finishes, it opens the Angular UI in your default browser with the [localhost:4200](http://localhost:4200/) address.
-
+
{{ end }}
diff --git a/docs/en/Migration-Guides/Abp-7_0.md b/docs/en/Migration-Guides/Abp-7_0.md
index 05dc276e3d..65a1614603 100644
--- a/docs/en/Migration-Guides/Abp-7_0.md
+++ b/docs/en/Migration-Guides/Abp-7_0.md
@@ -110,6 +110,31 @@ See https://github.com/abpframework/abp/pull/13845 for more info.
> You can ignore this if you don't use CMS Kit Module.
+## Data migration environment
+
+Please call `AddDataMigrationEnvironment` method in the migration project.
+
+```cs
+using (var application = await AbpApplicationFactory.CreateAsync(options =>
+{
+ //...
+ options.AddDataMigrationEnvironment();
+}))
+{
+ //...
+}
+```
+
+```cs
+var builder = WebApplication.CreateBuilder(args);
+builder.Services.AddDataMigrationEnvironment();
+// Call AddDataMigrationEnvironment before AddApplicationAsync
+await builder.AddApplicationAsync();
+//...
+```
+
+See https://github.com/abpframework/abp/pull/13985 for more info.
+
## Devart.Data.Oracle.EFCore
The `Devart.Data.Oracle.EFCore` package do not yet support EF Core 7.0, If you use `AbpEntityFrameworkCoreOracleDevartModule(Volo.Abp.EntityFrameworkCore.Oracle.Devart)` may not work as expected, We will release new packages as soon as they are updated.
diff --git a/docs/en/Migration-Guides/OpenIddict-Angular.md b/docs/en/Migration-Guides/OpenIddict-Angular.md
index c3ca6a7fbb..fe0b3986ac 100644
--- a/docs/en/Migration-Guides/OpenIddict-Angular.md
+++ b/docs/en/Migration-Guides/OpenIddict-Angular.md
@@ -112,7 +112,7 @@
## IdentityServer
-This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
+This project is renamed to **AuthServer** after v6.0.0. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
- In **MyApplication.IdentityServer.csproj** replace **project references**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md b/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
index 65011f6124..93c9562a4d 100644
--- a/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
+++ b/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
@@ -103,7 +103,7 @@
## IdentityServer
-This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
+This project is renamed to **AuthServer** after v6.0.0. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
- In **MyApplication.IdentityServer.csproj** replace **project references**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Blazor.md b/docs/en/Migration-Guides/OpenIddict-Blazor.md
index 7db082808e..09e137a0a6 100644
--- a/docs/en/Migration-Guides/OpenIddict-Blazor.md
+++ b/docs/en/Migration-Guides/OpenIddict-Blazor.md
@@ -131,7 +131,7 @@
## IdentityServer
-This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
+This project is renamed to **AuthServer** after v6.0.0. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
- In **MyApplication.IdentityServer.csproj** replace **project references**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Mvc.md b/docs/en/Migration-Guides/OpenIddict-Mvc.md
index 7fd411155d..8dd5ec6c94 100644
--- a/docs/en/Migration-Guides/OpenIddict-Mvc.md
+++ b/docs/en/Migration-Guides/OpenIddict-Mvc.md
@@ -111,7 +111,7 @@ Replace role scope to **roles** and add **UsePkce** and **SignoutScheme** option
## IdentityServer
-This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
+This project is renamed to **AuthServer** after v6.0.0. You can also refactor and rename your project to *AuthServer* for easier updates in the future.
- In **MyApplication.IdentityServer.csproj** replace **project references**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md b/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
index 2638895843..8aff29c84d 100644
--- a/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
+++ b/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
@@ -1,6 +1,6 @@
# Migrating from IdentityServer to OpenIddict Step by Step Guide
-This guide provides layer-by-layer guidance for migrating your existing application to [OpenIddict](https://github.com/openiddict/openiddict-core) from IdentityServer. ABP startup templates use `OpenIddict` OpenId provider from v6.0.0-rc1 by default and `IdentityServer` projects are renamed to `AuthServer` in tiered/separated solutions. Since OpenIddict is only available with ABP v6.0, you will need to update your existing application in order to apply OpenIddict changes.
+This guide provides layer-by-layer guidance for migrating your existing application to [OpenIddict](https://github.com/openiddict/openiddict-core) from IdentityServer. ABP startup templates use `OpenIddict` OpenId provider from v6.0.0 by default and `IdentityServer` projects are renamed to `AuthServer` in tiered/separated solutions. Since OpenIddict is only available with ABP v6.0, you will need to update your existing application in order to apply OpenIddict changes.
## History
We are not removing Identity Server packages and we will continue to release new versions of IdentityServer-related NuGet/NPM packages. That means you won't have an issue while upgrading to v6.0 when the stable version releases. We will continue to fix bugs in our packages for a while. ABP 7.0 will be based on .NET 7. If Identity Server continues to work with .NET 7, we will also continue to ship NuGet packages for our IDS integration.
diff --git a/docs/en/Modules/Account.md b/docs/en/Modules/Account.md
index 7beb5b128d..2ae77d532d 100644
--- a/docs/en/Modules/Account.md
+++ b/docs/en/Modules/Account.md
@@ -6,7 +6,7 @@ This module is based on [Microsoft's Identity library](https://docs.microsoft.co
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Modules/Audit-Logging.md b/docs/en/Modules/Audit-Logging.md
index 30e1ef4e04..93a50c8387 100644
--- a/docs/en/Modules/Audit-Logging.md
+++ b/docs/en/Modules/Audit-Logging.md
@@ -6,7 +6,7 @@ The Audit Logging Module basically implements the `IAuditingStore` to save the a
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Modules/Background-Jobs.md b/docs/en/Modules/Background-Jobs.md
index 6cce8a6c95..5fd57d812c 100644
--- a/docs/en/Modules/Background-Jobs.md
+++ b/docs/en/Modules/Background-Jobs.md
@@ -6,7 +6,7 @@ The Background Jobs module implements the `IBackgroundJobStore` interface and ma
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Modules/Cms-Kit/Comments.md b/docs/en/Modules/Cms-Kit/Comments.md
index ac8853a4d8..ef476600eb 100644
--- a/docs/en/Modules/Cms-Kit/Comments.md
+++ b/docs/en/Modules/Cms-Kit/Comments.md
@@ -35,11 +35,12 @@ The comment system provides a commenting [widget](../../UI/AspNetCore/Widgets.md
@await Component.InvokeAsync(typeof(CommentingViewComponent), new
{
entityType = "Product",
- entityId = "..."
+ entityId = "...",
+ referralLinks = new [] {"nofollow"}
})
```
-`entityType` was explained in the previous section. `entityId` should be the unique id of the product, in this example. If you have a Product entity, you can use its Id here.
+`entityType` was explained in the previous section. `entityId` should be the unique id of the product, in this example. If you have a Product entity, you can use its Id here. `referralLinks` is an optional parameter. You can use this parameter to add values (such as "nofollow", "noreferrer", or any other values) to the [rel attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel) of links.
## User Interface
diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md
index 94b50aea58..143ec7168d 100644
--- a/docs/en/Modules/Docs.md
+++ b/docs/en/Modules/Docs.md
@@ -32,7 +32,7 @@ It is recommended to use ABP CLI to create new projects. Use the following comma
abp new Acme.MyProject
```
-You can also navigate to https://abp.io/get-started. Enter your project name as `Acme.MyProject`, other use default options.
+You can also generate a CLI command from [get started page](https://abp.io/get-started). Enter your project name as `Acme.MyProject`, other use default options.
Note that this document covers `Entity Framework Core` provider but you can also select `MongoDB` as your database provider.
@@ -519,7 +519,7 @@ Now you can use **Scriban** syntax to create sections in your document.
For example:
-```txt
+````
{{ if UI == "NG" }}
* `-u` argument specifies the UI framework, `angular` in this case.
@@ -538,7 +538,7 @@ For example:
{{ end }}
-```
+````
You can also use variables in a text, adding **_Value** postfix to its key:
diff --git a/docs/en/Modules/Feature-Management.md b/docs/en/Modules/Feature-Management.md
index 9677e2f470..d6cf470391 100644
--- a/docs/en/Modules/Feature-Management.md
+++ b/docs/en/Modules/Feature-Management.md
@@ -6,7 +6,7 @@ The Feature Management module implements the `IFeatureManagementStore` interface
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Modules/Identity.md b/docs/en/Modules/Identity.md
index 4cd8bef316..f73e8073b2 100644
--- a/docs/en/Modules/Identity.md
+++ b/docs/en/Modules/Identity.md
@@ -4,7 +4,7 @@ Identity module is used to manage roles, users and their permissions, based on t
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Modules/IdentityServer.md b/docs/en/Modules/IdentityServer.md
index 90e9fe19eb..f754a29687 100644
--- a/docs/en/Modules/IdentityServer.md
+++ b/docs/en/Modules/IdentityServer.md
@@ -4,7 +4,7 @@ IdentityServer module provides a full integration with the [IdentityServer](http
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Modules/OpenIddict.md b/docs/en/Modules/OpenIddict.md
index 3a015011e6..cfa35b7e2c 100644
--- a/docs/en/Modules/OpenIddict.md
+++ b/docs/en/Modules/OpenIddict.md
@@ -4,7 +4,7 @@ OpenIddict module provides an integration with the [OpenIddict](https://github.c
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as a package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as a package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
@@ -299,12 +299,12 @@ PreConfigure(options =>
The background task that automatically removes orphaned tokens/authorizations. This can be configured by `TokenCleanupOptions` to manage it.
-`TokenCleanupOptions` can be configured in the `PreConfigureServices` method of your OpenIddict [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics).
+`TokenCleanupOptions` can be configured in the `ConfigureServices` method of your OpenIddict [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics).
Example:
```csharp
-PreConfigure(options =>
+Configure(options =>
{
//Set options here...
});
diff --git a/docs/en/Modules/Permission-Management.md b/docs/en/Modules/Permission-Management.md
index b97ddfca6c..e77a284a42 100644
--- a/docs/en/Modules/Permission-Management.md
+++ b/docs/en/Modules/Permission-Management.md
@@ -6,7 +6,7 @@ This module implements the `IPermissionStore` to store and manage permissions va
## How to Install
-This module comes as pre-installed (as NuGet/NPM packages) when you [create a new solution](https://abp.io/get-started) with the ABP Framework. You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
+This module comes as pre-installed (as NuGet/NPM packages). You can continue to use it as package and get updates easily, or you can include its source code into your solution (see `get-source` [CLI](../CLI.md) command) to develop your custom module.
### The Source Code
diff --git a/docs/en/Startup-Templates/Application-Single-Layer.md b/docs/en/Startup-Templates/Application-Single-Layer.md
index 95ebad55a7..02a743c5ee 100644
--- a/docs/en/Startup-Templates/Application-Single-Layer.md
+++ b/docs/en/Startup-Templates/Application-Single-Layer.md
@@ -10,7 +10,7 @@ ABP's [Application Startup Template](Application.md) provides a well-organized a
## How to Start with It?
-You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download this startup template from the [Get Started](https://abp.io/get-started) page. In this section, we will use the ABP CLI.
+You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can generate a CLI command for this startup template from the [Get Started](https://abp.io/get-started) page. In this section, we will use the ABP CLI.
Firstly, install the ABP CLI if you haven't installed it before:
@@ -32,19 +32,18 @@ abp new Acme.BookStore -t app-nolayers
This template provides multiple UI frameworks:
* `mvc`: ASP.NET Core MVC UI with Razor Pages (default)
+* `blazor`: Blazor UI
* `blazor-server`: Blazor Server UI
* `angular`: Angular UI
* `none`: Without UI (for HTTP API development)
-> This template doesn't have Blazor WebAssembly UI, because it requires 3 projects at least (server-side, UI and shared library between these two projects). We are recommending to use the layered [application startup template](Application.md) for Blazor WebAssembly projects.
-
Use the `-u` (or `--ui`) option to specify the UI framework while creating the solution:
```bash
abp new Acme.BookStore -t app-nolayers -u angular
```
-This example specifies the UI type (the `-u` option) as `angular`. You can also specify `mvc`, `blazor-server` or `none` for the UI type.
+This example specifies the UI type (the `-u` option) as `angular`. You can also specify `mvc`, `blazor`, `blazor-server` or `none` for the UI type.
### Specify the Database Provider
diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md
index 6a47363e8c..98ccdd10d2 100644
--- a/docs/en/Startup-Templates/Application.md
+++ b/docs/en/Startup-Templates/Application.md
@@ -11,7 +11,7 @@ This document explains **the solution structure** and projects in details. If yo
## How to Start With?
-You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download from the [Get Started](https://abp.io/get-started) page. CLI approach is used here.
+You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can generate a CLI command from the [Get Started](https://abp.io/get-started) page. CLI approach is used here.
First, install the ABP CLI if you haven't installed it before:
diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md
index afb6496ed5..faf4cb41a2 100644
--- a/docs/en/Startup-Templates/Module.md
+++ b/docs/en/Startup-Templates/Module.md
@@ -4,7 +4,7 @@ This template can be used to create a **reusable [application module](../Modules
## How to Start With?
-You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download from the [Get Started](https://abp.io/get-started) page. CLI approach is used here.
+You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can generate a CLI command from the [Get Started](https://abp.io/get-started) page. CLI approach is used here.
First, install the ABP CLI if you haven't installed before:
diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md
index d72505b309..6178ebbb8e 100644
--- a/docs/en/Tutorials/Part-10.md
+++ b/docs/en/Tutorials/Part-10.md
@@ -1126,6 +1126,21 @@ protected override async Task OnInitializedAsync()
* It is essential to call the `base.OnInitializedAsync()` since `AbpCrudPageBase` has some initialization code to be executed.
+Override the `OpenCreateModalAsync` method and adding the following code:
+
+````csharp
+protected override async Task OpenCreateModalAsync()
+{
+ if (!authorList.Any())
+ {
+ throw new UserFriendlyException(message: L["AnAuthorIsRequiredForCreatingBook"]);
+ }
+
+ await base.OpenCreateModalAsync();
+ NewEntity.AuthorId = authorList.First().Id;
+}
+````
+
The final `@code` block should be the following:
````csharp
@@ -1147,6 +1162,17 @@ The final `@code` block should be the following:
await base.OnInitializedAsync();
authorList = (await AppService.GetAuthorLookupAsync()).Items;
}
+
+ protected override async Task OpenCreateModalAsync()
+ {
+ if (!authorList.Any())
+ {
+ throw new UserFriendlyException(message: L["AnAuthorIsRequiredForCreatingBook"]);
+ }
+
+ await base.OpenCreateModalAsync();
+ NewEntity.AuthorId = authorList.First().Id;
+ }
}
````
@@ -1156,7 +1182,6 @@ Finally, add the following `Field` definition into the `ModalBody` of the *Creat
@L["Author"]