Skip to content

Commit

Permalink
Merge branch 'dev' into openiddict6
Browse files Browse the repository at this point in the history
  • Loading branch information
maliming committed Dec 18, 2024
2 parents e1e6615 + 7a7d191 commit 7e5d2f1
Show file tree
Hide file tree
Showing 25 changed files with 250 additions and 143 deletions.
192 changes: 128 additions & 64 deletions docs/en/docs-nav.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/en/get-started/layered-web-application.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ In the Solution Runner section (on the left side) you can see all the runnable a

You can run all the applications or start them one by one. To start an application, either click the *Play* icon near to the application or right-click and select the *Run* -> *Start* context menu item.

> For the first run, you'll need to build the application. You can achieve this by selecting *Run* -> *Build & Start* from the context menu.
> ABP Studio builds the application by default. So, you don't need to manually build the application before running it.
You can start the following application(s):

Expand Down
8 changes: 3 additions & 5 deletions docs/en/get-started/microservice.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,13 +143,11 @@ In the *Solution Runner* section (on the left side) you can see all the runnable
As shown in the figure above, the executable applications are grouped into folders like `apps`, `gateways`, `infrastructure`, and `services`. You can start/stop them all, a group (folder) of them, or one by one.

Before running the applications, it is good to be sure that all applications are built. To do that, right-click the root item in the *Solution Runner* and select *Build* -> *Build All* action.
Before running the applications, you can run the all application by right-clicking the root item in the *Solution Runner* and select *Build* -> *Build All* action. However, you don't need to do that, because ABP Studio builds the applications before running them by default.

![abp-studio-microservice-solution-runner-build-all](images/abp-studio-microservice-solution-runner-build-all.png)
> If you want to change this behavior, and don't want ABP Studio to build before running the applications, you can click the *Manage start actions* button in the *Solution Runner*, which you can see from the root item or per folder.
> *Solution Runner* doesn't build an application before running it. That provides a great performance gain because most of the time you will work on one or a few services and you don't need to build all of the other applications in every run. However, if you want to build before running, you can right-click an item in the *Solution Runner* tree and select *Run* -> *Build & Start* command.
It will take some time to build all. Once all is done, you can start the system. You can click the *Play* button on the root item in Solution Runner to start all the applications.
You can click the *Play* button on the root item in *Solution Runner* to start all the applications.

> **About the Docker Containers**
>
Expand Down
2 changes: 0 additions & 2 deletions docs/en/get-started/single-layer-web-application.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ In the Solution Runner section (on the left side) you can see all the runnable a

To start an application, either click the *Play* icon near to the application or right-click and select the *Run* -> *Start* context menu item.

> For the first run, you'll need to build the application. You can achieve this by selecting *Run* -> *Build & Start* from the context menu.
You can start the `Acme.BookStore`{{ if UI == "NG" }} and `Acme.BookStore.Angular`{{ end }}.

Once the `Acme.BookStore{{ if UI == "NG" }}.Angular{{ end }}` application started, you can right-click it and select the *Browse* command:
Expand Down
7 changes: 7 additions & 0 deletions docs/en/studio/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version.

## 0.9.17 (2024-12-17)

* Added social login option to the "No Layers" Blazor WebAssembly template.
* Fixed AutoMapper missing configuration exception problem during module import.
* Fixed Blazor WebAssembly build issue for the MAUI template.
* Fixed a problem that prevented ABP Studio from opening on macOS.

## 0.9.16 (2024-12-11)

> This version does not work for macOS, we are currently working on that manner.
Expand Down
1 change: 1 addition & 0 deletions docs/en/studio/version-mapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ This document provides a general overview of the relationship between various ve

| **ABP Studio Version** | **ABP Version of Startup Template** |
|------------------------|---------------------------|
| 0.9.17 | 9.0.2 |
| 0.9.15 - 0.9.16 | 9.0.1 |
| 0.9.9 to 0.9.14 | 9.0.0 |
| 0.9.8 | 8.3.4 |
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 3 additions & 9 deletions docs/en/tutorials/book-store-with-abp-suite/index.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
# Web Application Development (with ABP Suite) Tutorial
````json
//[doc-params]
{
"UI": ["MVC"],
"DB": ["EF"]
}
````
# Web Application Development Tutorial (with ABP Suite)

````json
//[doc-nav]
{
Expand All @@ -20,7 +14,7 @@
## About This Tutorial

> In this tutorial, you will use the [ABP Suite](../../suite/index.md) to generate everything you need to build the **BookStore** application, such as [*Entities*](../../framework/architecture/domain-driven-design/entities.md), [*Domain Services*](../../framework/architecture/domain-driven-design/domain-services.md), [*Application Services*](../../framework/architecture/domain-driven-design/application-services.md), *CRUD pages* and more...
> This tutorial explains how to build code using the [ABP Suite](../../suite/index.md) tool. You will develop an application similar to the one developed in [that tutorial](../book-store/index.md), but this time, the code will be automatically generated instead of manually written.
In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:

Expand Down
9 changes: 1 addition & 8 deletions docs/en/tutorials/book-store-with-abp-suite/part-01.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
# Web Application Development (with ABP Suite) Tutorial - Part 1: Creating the Solution
# Web Application Development Tutorial (with ABP Suite) - Part 1: Creating the Solution

````json
//[doc-params]
{
"UI": ["MVC"],
"DB": ["EF"]
}
````
````json
//[doc-nav]
{
Expand Down
14 changes: 4 additions & 10 deletions docs/en/tutorials/book-store-with-abp-suite/part-02.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
# Web Application Development (with ABP Suite) Tutorial - Part 2: Creating the Books
````json
//[doc-params]
{
"UI": ["MVC"],
"DB": ["EF"]
}
````
# Web Application Development Tutorial (with ABP Suite) - Part 2: Creating the Books

````json
//[doc-nav]
{
Expand Down Expand Up @@ -108,9 +102,9 @@ ABP Suite will generate the necessary code for you. It generates:
* All related **permission**, **object mapping** and **navigation menu item** configurations,
* and all required **UI components and pages**...

It will take some time to complete the process. After the process is completed, you will see a success message, you can click the *Ok* button, and build & start the application by clicking the *Run -> Build & Start* button in the *Solution Runner* panel:
It will take some time to complete the process. After the process is completed, you will see a success message, you can click the *Ok* button, and then run the application by clicking the *Start* button (or alternatively, directly clicking the *run* icon) in the *Solution Runner* panel:

![](./images/suite-book-entity-6.png)
![](./images/book-store-studio-run-app.png)

After the application is started, you can right-click and *Browse* on the application to open it in the ABP Studio's pre-integrated browser. You can see the Books page in the following figure with a single record:

Expand Down
14 changes: 4 additions & 10 deletions docs/en/tutorials/book-store-with-abp-suite/part-03.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
# Web Application Development (with ABP Suite) Tutorial - Part 3: Creating the Authors
````json
//[doc-params]
{
"UI": ["MVC"],
"DB": ["EF"]
}
````
# Web Application Development Tutorial (with ABP Suite) - Part 3: Creating the Authors

````json
//[doc-nav]
{
Expand Down Expand Up @@ -62,9 +56,9 @@ You can click the **Save and Generate** button to start the code generation proc

![](./images/suite-book-entity-5.png)

ABP Suite will generate the necessary code for you. It will take some time to complete the process. After the process is completed, you will see a success message, you can click the *Ok* button, and build & start the application by clicking the *Run -> Build & Start* button in the *Solution Runner* panel:
ABP Suite will generate the necessary code for you. It will take some time to complete the process. After the process is completed, you will see a success message, you can click the *Ok* button, and then run the application by clicking the *Start* button (or alternatively, directly clicking the *run* icon) in the *Solution Runner* panel:

![](./images/suite-book-entity-6.png)
![](./images/book-store-studio-run-app.png)

After the application is started, you can right-click and *Browse* on the application to open it in the ABP Studio's pre-integrated browser and try to add a new author:

Expand Down
14 changes: 4 additions & 10 deletions docs/en/tutorials/book-store-with-abp-suite/part-04.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
# Web Application Development (with ABP Suite) Tutorial - Part 4: Book to Author Relation
````json
//[doc-params]
{
"UI": ["MVC"],
"DB": ["EF"]
}
````
# Web Application Development Tutorial (with ABP Suite) - Part 4: Book to Author Relation

````json
//[doc-nav]
{
Expand Down Expand Up @@ -55,9 +49,9 @@ After, specifying the metadata, you can click the *Ok* button to close the modal

![](./images/suite-end-of-generation-modal.png)

It will take some time to complete the process. After the process is completed, you will see a success message, you can click the *Ok* button, and build & start the application by clicking the *Run -> Build & Start* button in the *Solution Runner* panel:
It will take some time to complete the process. After the process is completed, you will see a success message, you can click the *Ok* button, and then run the application by clicking the *Start* button (or alternatively, directly clicking the *run* icon) in the *Solution Runner* panel:

![](./images/suite-book-entity-6.png)
![](./images/book-store-studio-run-app.png)

After the application is started, you can right-click and *Browse* on the application to open it in the ABP Studio's pre-integrated browser. You can first create an author and then create a book with the author for testing:

Expand Down
10 changes: 2 additions & 8 deletions docs/en/tutorials/book-store-with-abp-suite/part-05.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
# Web Application Development (with ABP Suite) Tutorial - Part 5: Customizing the Generated Code
````json
//[doc-params]
{
"UI": ["MVC"],
"DB": ["EF"]
}
````
# Web Application Development Tutorial (with ABP Suite) - Part 5: Customizing the Generated Code

````json
//[doc-nav]
{
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 5 additions & 5 deletions docs/en/tutorials/microservice/part-03.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ That's all. You can click the *Save and generate* button to start the code gener

ABP Suite will generate the necessary code for you. It will take some time to complete the process. After the process is completed, you will see a success message, click the *OK* button.

![abp-studio-catalog-service-build-and-start](images/abp-studio-catalog-service-build-and-start.png)
![abp-studio-catalog-service-build-and-start](images/abp-studio-catalog-service-start.png)

We can now build and start the `CloudCrm.CatalogService` application by clicking the *Run* -> *Build & Start* button in the *Solution Runner* panel.
We can now start the `CloudCrm.CatalogService` application by clicking the *Start* button (or alternatively, directly clicking the *run* icon) in the *Solution Runner* panel.

![abp-studio-browse-catalog-service-2](images/abp-studio-browse-catalog-service-2.png)

Expand All @@ -89,7 +89,7 @@ It will open the *Generate C# Proxies* window. Select the `CloudCrm.CatalogServi

![abp-studio-generate-proxy-window](images/abp-studio-generate-proxy-window.png)

> To be able to select the *Application*, you must *Build & Start* the related application beforehand. You can start the application using [Solution Runner](../../studio/running-applications.md) as explained in the previous parts.
> To be able to select the *Application*, you must *Start* the related application beforehand. You can start the application using [Solution Runner](../../studio/running-applications.md) as explained in the previous parts.
Lastly, we need to configure the use of a static HTTP client for the `CatalogService` in the `CloudCrm.Web` project. Open the `CloudCrmWebModule.cs` file in the `Web` project and add the following line to the `ConfigureServices` method:

Expand All @@ -107,9 +107,9 @@ public override void ConfigureServices(ServiceConfigurationContext context)

### Running the Application

Now, stop any application running in the *Solution Runner* panel, and then run the applications by clicking the *Run* -> *Build & Start All* button on the root item in the *Solution Runner* panel:
Now, stop any application running in the *Solution Runner* panel, and then run the applications by clicking the *Start All* button on the root item in the *Solution Runner* panel:

![abp-studio-run-build-and-start-all](images/abp-studio-run-build-and-start-all.png)
![abp-studio-run-build-and-start-all](images/abp-studio-run-start-all.png)

After the application is started, you can right-click and [Browse](../../studio/running-applications.md#monitoring) on the `CloudCrm.Web` application to open it in the ABP Studio's pre-integrated browser:

Expand Down
6 changes: 3 additions & 3 deletions docs/en/tutorials/microservice/part-05.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ public class OrderingServiceApplicationAutoMapperProfile : Profile

## Testing the Application Service

Now, we can test the `OrderAppService` class using the Swagger UI. Open the Solution Runner and right-click to `CloudCrm.OrderingService` project and select the *Run* -> *Build & Start* command. After the application starts, you can open the Swagger UI by clicking to the [Browse](../../studio/running-applications.md#monitoring) command:
Now, we can test the `OrderAppService` class using the Swagger UI. Open the Solution Runner and right-click to `CloudCrm.OrderingService` project and select the *Start* command. After the application starts, you can open the Swagger UI by clicking to the [Browse](../../studio/running-applications.md#monitoring) command:

![ordering-service-swagger-ui](images/ordering-service-swagger-ui.png)

Expand Down Expand Up @@ -411,9 +411,9 @@ private static async Task ConfigureMainMenuAsync(MenuConfigurationContext contex

## Building and Running the Application

Now, we can build and run the application to see the changes. Please stop the applications if they are running. Then open the *Solution Runner* panel, right-click the `CloudCrm` root item, and select the *Run* -> *Build & Start* command:
Now, we can run the application to see the changes. Please stop the applications if they are running. Then open the *Solution Runner* panel, right-click the `CloudCrm` root item, and select the *Start* command:

![abp-studio-run-build-start](images/abp-studio-run-build-start.png)
![abp-studio-run-build-start](images/abp-studio-run-start-all.png)

After the applications are started, you can *Browse* and navigate to the `Orders` page to see the list of orders:

Expand Down
4 changes: 2 additions & 2 deletions docs/en/tutorials/microservice/part-06.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ Let's explain the changes we made:

### Generating Proxy Classes for the Integration Service

We have created the `IProductIntegrationService` interface and the `ProductIntegrationService` class in the `CloudCrm.CatalogService` solution. Now, we need to generate the proxy classes for the integration service in the `CloudCrm.OrderingService` package. First, *Build & Start* the `CloudCrm.CatalogService` application in ABP Studio *Solution Runner*. Then, open the *Solution Explorer* and right-click on the `CloudCrm.OrderingService` package. Select the *ABP CLI* -> *Generate Proxy* -> *C#* command:
We have created the `IProductIntegrationService` interface and the `ProductIntegrationService` class in the `CloudCrm.CatalogService` solution. Now, we need to generate the proxy classes for the integration service in the `CloudCrm.OrderingService` package. First, *Start* the `CloudCrm.CatalogService` application in ABP Studio *Solution Runner*. Then, open the *Solution Explorer* and right-click on the `CloudCrm.OrderingService` package. Select the *ABP CLI* -> *Generate Proxy* -> *C#* command:

![generate-proxy-catalog-service](images/generate-proxy-catalog-service.png)

Expand Down Expand Up @@ -295,7 +295,7 @@ Open the `Index.cshtml` file (the `Index.cshtml` file under the `Pages/Orders` f
</abp-card>
```

That's it! Now, you can *Build & Start* the all applications and run it in ABP Studio to see the result:
That's it! Now, you can *Start* the all applications and browse it in ABP Studio to see the result:

![web-orders-page-with-product-name](images/web-orders-page-with-product-name.png)

Expand Down
2 changes: 1 addition & 1 deletion docs/en/tutorials/microservice/part-07.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ Implementing `ITransientDependency` registers the `OrderEventHandler` class to t

### Testing the Order Creation

To keep this tutorial simple, we will not implement a user interface for creating orders. Instead, we will use the Swagger UI to create an order. Open the *Solution Runner* panel in ABP Studio and use *Build & Start* to launch the `CloudCrm.OrderingService` and `CloudCrm.CatalogService` applications. Then, go to *Run* -> *Start All* to start the remaining applications listed in the [Solution Runner root item](../../studio/running-applications.md#run).
To keep this tutorial simple, we will not implement a user interface for creating orders. Instead, we will use the Swagger UI to create an order. Open the *Solution Runner* panel in ABP Studio and use the *Start* action to launch the `CloudCrm.OrderingService` and `CloudCrm.CatalogService` applications. Then, use the *Start All* action to start the remaining applications listed in the [Solution Runner root item](../../studio/running-applications.md#run).

Once the application is running and ready, [Browse](../../studio/running-applications.md#c-application) the `CloudCrm.OrderingService` application. Use the `POST /api/ordering/order` endpoint to create a new order:

Expand Down
2 changes: 1 addition & 1 deletion docs/en/tutorials/modular-crm/part-05.md
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@ Now, we will run the application to see the result. Please stop the application

![abp-studio-solution-runner-graph-build](images/abp-studio-solution-runner-graph-build.png)

We've performed a graph build since we've made a change on a module, and more than building the main application is needed. *Graph Build* command also builds the depended modules if necessary. Alternatively, you could build the Ordering module first (on ABP Studio or your IDE), then right-click the `ModularCrm.Web` application and select the *Run* -> *Build & Start*. This approach can be faster if you have too many modules and you make a change in one of the modules. Now you can run the application by right-clicking the `ModularCrm.Web` application and selecting the *Run* -> *Start* command.
We've performed a graph build since we've made a change on a module, and more than building the main application is needed. *Graph Build* command also builds the depended modules if necessary. Alternatively, you could build the Ordering module first (on ABP Studio or your IDE). This approach can be faster if you have too many modules and you make a change in one of the modules. Now you can run the application by right-clicking the `ModularCrm.Web` application and selecting the *Start* command.

![abp-studio-browser-orders-menu-item](images/abp-studio-browser-orders-menu-item.png)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,17 @@
$.fn.needConfirmationOnUnsavedClose = function ($modal) {
var $form = $(this);
var formSaved = false;
var unEditedForm = JSON.stringify($form.serializeFormToObject());
var unEditedForm;

$modal.on("shown.bs.modal", function () {
unEditedForm = JSON.stringify($form.serializeFormToObject());
});

$modal.on("hide.bs.modal", function (e) {
if(unEditedForm === undefined) {
return;
}

var currentForm = JSON.stringify($form.serializeFormToObject());
var thereAreUnsavedChanges = currentForm !== unEditedForm;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ public class NavigationNode

[JsonPropertyName("items")]
public List<NavigationNode> Items { get; set; }

[JsonPropertyName("isIndex")]
public bool IsIndex { get; set; }

public bool IsLeaf => !HasChildItems;

Expand Down
Loading

0 comments on commit 7e5d2f1

Please sign in to comment.