diff --git a/.github/ISSUE_TEMPLATE/03_studio.yml b/.github/ISSUE_TEMPLATE/03_studio.yml new file mode 100644 index 0000000000..c6839403d7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03_studio.yml @@ -0,0 +1,94 @@ +name: 🤠 ABP Studio +description: Create a report to help us improve the ABP Studio +labels: [studio] +body: + - type: markdown + attributes: + value: | + We welcome bug reports! This template will help us gather the information we need to start the triage process. + + Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting **non-security** bugs and feature requests. + If you believe you have an issue that affects the SECURITY of the platform, please do NOT create an issue and instead email your issue details to info@abp.io. + For other types of questions, consider using [StackOverflow](https://stackoverflow.com/questions/tagged/abp). + - type: checkboxes + id: searched + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered or feature request ([abp/issues](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+label%3Astudio)). + options: + - label: I have searched the existing issues + required: true + - type: textarea + id: background + attributes: + label: Description + description: Please share a clear and concise description of the problem. + placeholder: Description + validations: + required: true + - type: markdown + attributes: + value: | + ## Setup + Please provide more information on your ABP Studio setup. + - type: input + id: version + attributes: + label: Version + description: Which version of ABP Studio are you using? + placeholder: Version + validations: + required: true + - type: dropdown + id: Operation-System + attributes: + label: Operation System + description: What is the operation system of the computer? + options: + - Windows (Default) + - Linux + - macOS + - Others + validations: + required: true + - type: textarea + id: solution-config + attributes: + label: Solution Configuration + description: | + If there is an open solution, what are the configurations of the solution? + 🧐 Hint: You can see all the information about your solution from the configuration window, which opens when you right-click on the [solution](https://abp.io/docs/latest/studio/solution-explorer#solution) and click on the `Solution Configuration` button. + placeholder: | + - **Template**: app + - **Created ABP Studio Version**: 0.7.9 + - **Tiered**: No + - **UI Framework**: mvc + - **Theme**: leptonx + - **Theme Style**: system + - **Database Provider**: ef + - **Database Management System**: sqlserver + - **Separate Tenant Schema**: No + - **Mobile Framework**: none + - **Public Website**: No + - **Optional Modules**: + * GDPR + * TextTemplateManagement + * LanguageManagement + * AuditLogging + * SaaS + * OpenIddictAdmin + validations: + required: false + - type: markdown + attributes: + value: | + --- + - type: textarea + id: other-info + attributes: + label: Other information + description: | + If you have an idea where the problem might lie, let us know that here. Please include any pointers to code, relevant changes, or related issues you know of. + placeholder: Other information + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/03_article_request.yml b/.github/ISSUE_TEMPLATE/04_article_request.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/03_article_request.yml rename to .github/ISSUE_TEMPLATE/04_article_request.yml diff --git a/.github/ISSUE_TEMPLATE/04_performance_issue.md b/.github/ISSUE_TEMPLATE/05_performance_issue.md similarity index 100% rename from .github/ISSUE_TEMPLATE/04_performance_issue.md rename to .github/ISSUE_TEMPLATE/05_performance_issue.md diff --git a/.github/ISSUE_TEMPLATE/05_blank_issue.md b/.github/ISSUE_TEMPLATE/06_blank_issue.md similarity index 100% rename from .github/ISSUE_TEMPLATE/05_blank_issue.md rename to .github/ISSUE_TEMPLATE/06_blank_issue.md diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 9fca40ba4f..fe03c27997 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ -blank_issues_enabled: true +blank_issues_enabled: false contact_links: - name: Issue with ABP Commercial url: https://abp.io/support/questions diff --git a/.github/scripts/update_versions.py b/.github/scripts/update_versions.py index dcbd749796..1f593273bc 100644 --- a/.github/scripts/update_versions.py +++ b/.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() \ No newline at end of file + return True diff --git a/.github/workflows/angular.yml b/.github/workflows/angular.yml index ee66fbcf2c..cd48c0448a 100644 --- a/.github/workflows/angular.yml +++ b/.github/workflows/angular.yml @@ -27,12 +27,12 @@ jobs: with: fetch-depth: 0 - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: 'npm/ng-packs/node_modules' key: ${{ runner.os }}-${{ hashFiles('npm/ng-packs/yarn.lock') }} - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: 'templates/app/angular/node_modules' key: ${{ runner.os }}-${{ hashFiles('templates/app/angular/yarn.lock') }} diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml index 39fb6199ad..db6ca8e1ff 100644 --- a/.github/workflows/auto-pr.yml +++ b/.github/workflows/auto-pr.yml @@ -1,13 +1,13 @@ -name: Merge branch rel-9.0 with rel-8.3 +name: Merge branch dev with rel-9.3 on: push: branches: - - rel-8.3 + - rel-9.3 permissions: contents: read jobs: - merge-rel-9-0-with-rel-8-3: + merge-dev-with-rel-9-3: permissions: contents: write # for peter-evans/create-pull-request to create branch pull-requests: write # for peter-evans/create-pull-request to create a PR @@ -15,17 +15,17 @@ jobs: steps: - uses: actions/checkout@v2 with: - ref: rel-9.0 + ref: dev - name: Reset promotion branch run: | - git fetch origin rel-8.3:rel-8.3 - git reset --hard rel-8.3 + git fetch origin rel-9.3:rel-9.3 + git reset --hard rel-9.3 - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: - branch: auto-merge/rel-8-3/${{github.run_number}} - title: Merge branch rel-9.0 with rel-8.3 - body: This PR generated automatically to merge rel-9.0 with rel-8.3. Please review the changed files before merging to prevent any errors that may occur. + branch: auto-merge/rel-9-3/${{github.run_number}} + title: Merge branch dev with rel-9.3 + body: This PR generated automatically to merge dev with rel-9.3. Please review the changed files before merging to prevent any errors that may occur. reviewers: maliming draft: true token: ${{ github.token }} @@ -34,5 +34,5 @@ jobs: GH_TOKEN: ${{ secrets.BOT_SECRET }} run: | gh pr ready - gh pr review auto-merge/rel-8-3/${{github.run_number}} --approve - gh pr merge auto-merge/rel-8-3/${{github.run_number}} --merge --auto --delete-branch + gh pr review auto-merge/rel-9-3/${{github.run_number}} --approve + gh pr merge auto-merge/rel-9-3/${{github.run_number}} --merge --auto --delete-branch diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 696d401fed..4ecb0c6543 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -18,6 +18,7 @@ on: - 'templates/**/*.razor' - 'Directory.Build.props' - 'Directory.Packages.props' + - '.github/workflows/build-and-test.yml' pull_request: paths: @@ -35,6 +36,7 @@ on: - 'templates/**/*.razor' - 'Directory.Build.props' - 'Directory.Packages.props' + - '.github/workflows/build-and-test.yml' types: - opened - synchronize @@ -45,17 +47,14 @@ permissions: jobs: build-test: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 + timeout-minutes: 50 if: ${{ !github.event.pull_request.draft }} steps: - uses: actions/checkout@v2 - uses: actions/setup-dotnet@master with: - dotnet-version: 8.0.100 - - - name: chown - run: | - sudo chown -R $USER:$USER /home/runneradmin + dotnet-version: 9.0.100 - name: Build All run: ./build-all.ps1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 439d06b62b..4ca0238728 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ ## Contribution -See the [contribution guide](docs/en/Contribution/Index.md). +The contribution guide is available at [contribution guide](docs/en/contribution/index.md). diff --git a/Directory.Packages.props b/Directory.Packages.props index d4ce71f1ca..79cfb1a914 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,175 +3,187 @@ true - + - - - - + + + + - + - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - + + + + - + - - - - - + + + + + + - - - - + + + + - + \ No newline at end of file diff --git a/README.md b/README.md index dd953a6431..fa6632daa8 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,82 @@ -# 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) -![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://docs.abp.io/en/abp/latest/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://discord.gg/abp) +[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 Framework is a complete **infrastructure** based on **ASP.NET Core** that creates **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**. - -[![ABP Platform](https://github.com/abpframework/abp/assets/9526587/47531496-4088-406d-9c69-63cb0ffec2ba)](https://abp.io) +[![ABP Platform](https://github.com/user-attachments/assets/c4356ec7-4d0f-4e00-a1d2-fc74ad985fb8)](https://abp.io) + ## Getting Started -- [Quick Start](https://docs.abp.io/en/abp/latest/Tutorials/Todo/Index) is a single-part, quick-start tutorial to build a simple application with the ABP Framework. Start with this tutorial if you want to understand how ABP works quickly. -- [Getting Started guide](https://docs.abp.io/en/abp/latest/Getting-Started) can be used to create and run ABP-based solutions with different options and details. -- [Web Application Development Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1) is a complete tutorial on developing a full-stack web application with all aspects of a real-life solution. - -### Quick Start - -Install the ABP CLI: - -````bash -> dotnet tool install -g Volo.Abp.Cli -```` - -Create a new solution: - -````bash -> abp new BookStore -u mvc -d ef -```` - -> See the [CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all available options. - - - -### UI Framework Options - - - - - -### Database Provider Options - - - - +- [The Getting Started guide](https://abp.io/docs/latest/get-started) can be used to create and run ABP-based solutions with different options and details. +- [Quick Start](https://abp.io/docs/latest/tutorials/todo) is a single-part, quick-start tutorial to build a simple application with the ABP Framework. Start with this tutorial if you want to understand how ABP works quickly. +- [Web Application Development Tutorial](https://abp.io/docs/latest/tutorials/book-store) is a complete tutorial on developing a full-stack web application with all aspects of a real-life solution. +- [Modular Monolith Application](https://abp.io/docs/latest/tutorials/modular-crm/index): A multi-part tutorial that demonstrates how to create application modules, compose and communicate them to build a monolith modular web application. ## What ABP Provides? -ABP provides a **full stack developer experience**. +ABP bridges the gap between ASP.NET Core and real-world business application requirements, and makes you focus on your own business code. +The following diagram contains the core components of the **ABP Platform** and shows how ABP sits between **ASP.NET Core** and **Your Application**: +![abp-overall-diagram](docs/en/images/abp-overall-diagram.png) ### Architecture - +ABP offers a complete architectural model to build modern enterprise software solutions. Here, the fundamental architectural structures offered and first-class supported by ABP: -ABP offers a complete, **modular** and **layered** software architecture based on **[Domain Driven Design](https://docs.abp.io/en/abp/latest/Domain-Driven-Design)** principles and patterns. It also provides the necessary infrastructure and guidance to [implement this architecture](https://docs.abp.io/en/abp/latest/Domain-Driven-Design-Implementation-Guide). +* [Domain Driven Design (DDD)](https://abp.io/docs/latest/framework/architecture/domain-driven-design) +* [Microservices](https://abp.io/docs/latest/framework/architecture/microservices) +* [Modularity](https://abp.io/docs/latest/framework/architecture/modularity/basics) +* [Multi-Tenancy](https://abp.io/docs/latest/framework/architecture/multi-tenancy) -ABP Framework is suitable for **[microservice solutions](https://docs.abp.io/en/abp/latest/Microservice-Architecture)** as well as monolithic applications. +### Infrastructure +There are a lot of infrastructure features provided by the ABP Framework to achieve real-world scenarios easier, like [Event Bus](https://abp.io/docs/latest/framework/infrastructure/event-bus), [Background Job System](https://abp.io/docs/latest/framework/infrastructure/background-jobs), [Audit Logging](https://abp.io/docs/latest/framework/infrastructure/audit-logging), [BLOB Storing](https://abp.io/docs/latest/framework/infrastructure/blob-storing), [Data Seeding](https://abp.io/docs/latest/framework/infrastructure/data-seeding), [Data Filtering](https://abp.io/docs/latest/framework/infrastructure/data-filtering), and much more. +[See ABP Framework features](https://abp.io/framework) -### Infrastructure +#### Cross-Cutting Concerns -There are a lot of features provided by the ABP Framework to achieve real-world scenarios easier, like [Event Bus](https://docs.abp.io/en/abp/latest/Event-Bus), [Background Job System](https://docs.abp.io/en/abp/latest/Background-Jobs), [Audit Logging](https://docs.abp.io/en/abp/latest/Audit-Logging), [BLOB Storing](https://docs.abp.io/en/abp/latest/Blob-Storing), [Data Seeding](https://docs.abp.io/en/abp/latest/Data-Seeding), [Data Filtering](https://docs.abp.io/en/abp/latest/Data-Filtering), etc. +ABP also simplifies (and even automates wherever possible) cross-cutting concerns and common non-functional requirements like [Exception Handling](https://abp.io/docs/latest/framework/fundamentals/exception-handling), [Validation](https://abp.io/docs/latest/framework/fundamentals/validation), [Authorization](https://abp.io/docs/latest/framework/fundamentals/authorizationn), [Localization](https://abp.io/docs/latest/framework/fundamentals/localization), [Caching](https://abp.io/docs/latest/framework/fundamentals/caching), [Dependency Injection](https://abp.io/docs/latest/framework/fundamentals/dependency-injection), [Setting Management](https://abp.io/docs/latest/framework/infrastructure/settings), etc. +### Application Modules +ABP is a modular framework and the [application modules](https://abp.io/modules) provide **pre-built application functionalities**. -### Cross-Cutting Concerns +Some examples: -ABP also simplifies (and even automates wherever possible) cross-cutting concerns and common non-functional requirements like [Exception Handling](https://docs.abp.io/en/abp/latest/Exception-Handling), [Validation](https://docs.abp.io/en/abp/latest/Validation), [Authorization](https://docs.abp.io/en/abp/latest/Authorization), [Localization](https://docs.abp.io/en/abp/latest/Localization), [Caching](https://docs.abp.io/en/abp/latest/Caching), [Dependency Injection](https://docs.abp.io/en/abp/latest/Dependency-Injection), [Setting Management](https://docs.abp.io/en/abp/latest/Settings), etc. +- [**Account**](https://abp.io/modules/Volo.Account.Pro): Provides UI for the account management and allows user to login/register to the application. +- [CMS Kit](https://abp.io/modules/Volo.CmsKit): Brings CMS (Content Management System) capabilities to your application. +- **[Identity](https://abp.io/modules/Volo.Identity.Pro)**: Manages organization units, roles, users and their permissions based on the Microsoft Identity library. +- [**OpenIddict**](https://abp.io/modules/Volo.OpenIddict.Pro): Integrates to OpenIddict library and provides a management UI. +- [**SaaS**](https://abp.io/modules/Volo.Saas): Manages tenants and editions for a [multi-tenant](https://abp.io/docs/latest/framework/architecture/multi-tenancy) (SaaS) application. +See [all official modules](https://abp.io/modules). +### Startup Templates -### Application Modules +The [Startup templates](https://abp.io/docs/latest/solution-templates) are pre-built Visual Studio solution templates. You can create your own solution based on these templates to **immediately start your development**. -ABP is a modular framework and the Application Modules provide **pre-built application functionalities**; +### Tooling -- [**Account**](https://docs.abp.io/en/abp/latest/Modules/Account): Provides UI for the account management and allows user to login/register to the application. -- **[Identity](https://docs.abp.io/en/abp/latest/Modules/Identity)**: Manages organization units, roles, users and their permissions based on the Microsoft Identity library. -- [**OpenIddict**](https://docs.abp.io/en/abp/latest/Modules/OpenIddict): Integrates to OpenIddict. -- [**Tenant Management**](https://docs.abp.io/en/abp/latest/Modules/Tenant-Management): Manages tenants for a [multi-tenant](https://docs.abp.io/en/abp/latest/Multi-Tenancy) (SaaS) application. +ABP provides CLI and UI tools to simplify your daily development work flows. -See the [Application Modules](https://docs.abp.io/en/abp/latest/Modules/Index) document for all pre-built modules. +#### ABP Studio +[ABP Studio](https://abp.io/studio) is a cross-platform desktop application for ABP developers. +It is well integrated to the ABP Framework and aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run and deploy your solutions much easier. -### Startup Templates +#### ABP Suite -The [Startup templates](https://docs.abp.io/en/abp/latest/Startup-Templates/Index) are pre-built Visual Studio solution templates. You can create your own solution based on these templates to **immediately start your development**. +[ABP Suite](https://abp.io/suite) allows you to automatically generate web pages in a matter of minutes. +#### ABP CLI +[ABP CLI](https://abp.io/cli) is a command line tool to perform common operations for ABP based solutions. ## Mastering ABP Framework Book @@ -103,43 +90,36 @@ This book will help you to gain a complete understanding of the ABP Framework an ### ABP Community Web Site -The [ABP Community](https://community.abp.io/) is a website to publish **articles** and share **knowledge** about the ABP Framework. You can also create content for the community! +The [ABP Community](https://abp.io/community) is a central hub to publish **articles** and share **knowledge** about the ABP Framework. ### Blog -Follow the [ABP Blog](https://blog.abp.io/) to learn the latest happenings in the ABP Framework. +Follow the [ABP Blog](https://abp.io/blog) to learn the latest happenings in the ABP Framework. ### Samples -See the [sample projects](https://docs.abp.io/en/abp/latest/Samples/Index) built with the ABP Framework. +See the [sample projects](https://abp.io/docs/latest/samples) built with the ABP Framework. ### Want to Contribute? -ABP is a community-driven open-source project. See [the contribution guide](https://docs.abp.io/en/abp/latest/Contribution/Index) if you want to participate in this project. - - +ABP is a community-driven open-source project. See [the contribution guide](https://abp.io/docs/latest/contribution) if you want to participate in this project. ## Official Links * [Home Website](https://abp.io) * [Get Started](https://abp.io/get-started) - * [Features](https://abp.io/features) -* [Documents](https://docs.abp.io/) -* [Samples](https://docs.abp.io/en/abp/latest/Samples/Index) -* [Blog](https://blog.abp.io/) -* [Community](https://community.abp.io/) + * [Features](https://abp.io/framework) +* [Documents](https://abp.io/docs/latest) +* [Samples](https://abp.io/docs/latest/samples) +* [Blog](https://abp.io/blog) +* [Community](https://abp.io/community) * [Stackoverflow](https://stackoverflow.com/questions/tagged/abp) * [Twitter](https://twitter.com/abpframework) - - ## Support ABP GitHub repository stars are an important indicator of popularity and the size of the community. If you like ABP Framework, support us by clicking the star :star: on the repository. - - ## Discord Server -We have a Discord server where you can chat with other ABP users. Share your ideas, report technical issues, showcase your creations, share the tips that worked for you and catch up with the latest news and announcements about ABP Framework. Join 👉 https://discord.gg/abp. - +We have a Discord server where you can chat with other ABP users. Share your ideas, report technical issues, showcase your creations, share the tips that worked for you and catch up with the latest news and announcements about ABP Framework. Join 👉 https://abp.io/join-discord. diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj index 267ace87f2..6e7bbc184e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj @@ -1,7 +1,7 @@ - netstandard2.0;netstandard2.1;net8.0 + netstandard2.0;netstandard2.1;net8.0;net9.0 diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs index fe24f4d4ec..3876b58c89 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs @@ -2,8 +2,6 @@ using AbpIoLocalization.Admin.Localization; using AbpIoLocalization.Base.Localization; using AbpIoLocalization.Blog.Localization; -using AbpIoLocalization.Commercial.Localization; -using AbpIoLocalization.Community.Localization; using AbpIoLocalization.Docs.Localization; using AbpIoLocalization.Support.Localization; using AbpIoLocalization.Www; @@ -28,9 +26,7 @@ namespace AbpIoLocalization Configure(options => { - options.MapCodeNamespace("Volo.AbpIo.Commercial", typeof(AbpIoCommercialResource)); options.MapCodeNamespace("Volo.AbpIo.Domain", typeof(AbpIoBaseResource)); - options.MapCodeNamespace("Volo.AbpIo.Community", typeof(AbpIoCommunityResource)); }); Configure(options => @@ -57,11 +53,6 @@ namespace AbpIoLocalization .AddVirtualJson("/Blog/Localization/Resources") .AddBaseTypes(typeof(AbpIoBaseResource)); - options.Resources - .Add("en") - .AddVirtualJson("/Commercial/Localization/Resources") - .AddBaseTypes(typeof(AbpIoBaseResource)); - options.Resources .Add("en") .AddVirtualJson("/Docs/Localization/Resources") @@ -76,11 +67,6 @@ namespace AbpIoLocalization .Add("en") .AddVirtualJson("/Www/Localization/Resources") .AddBaseTypes(typeof(AbpIoBaseResource)); - - options.Resources - .Add("en") - .AddVirtualJson("/Community/Localization/Resources") - .AddBaseTypes(typeof(AbpIoBaseResource)); }); } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json index 44ab5b3e31..59edeb9031 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json @@ -13,6 +13,10 @@ "ManageAccount": "My Account | ABP.IO", "ManageYourProfile": "Manage your profile", "ReturnToApplication": "Return to application", - "IdentityUserNotAvailable:Deleted": "This email address is not available. Reason: Already deleted." + "IdentityUserNotAvailable:Deleted": "This email address is not available. Reason: Already deleted.", + "SelectYourOrganization": "Select your organization", + "PleaseSelectOrganization": "Please select an organization to continue", + "Continue": "Continue", + "CaptchaExplanation": "Calculate the below mathematical expression and enter the answer." } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json index 2429f52eef..7e2642e88b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json @@ -15,6 +15,7 @@ "Permission:Maintain": "Maintain", "Permission:ClearCaches": "Clear caches", "Permission:Modules": "Modules", + "Permission:UserDownloads": "User Downloads", "Permission:Packages": "Packages", "Permission:Edit": "Edit", "Permission:Delete": "Delete", @@ -32,12 +33,15 @@ "Name": "Name", "DisplayName": "Display name", "ShortDescription": "Short description", + "LongDescription": "Long description", "NameFilter": "Name", "CreationTime": "Creation time", - "IsPro": "Is pro", + "IsPro": "Pro package", "ShowOnModuleList": "Show in module list", "EfCoreConfigureMethodName": "Configure method name", "IsProFilter": "Is pro", + "ShowOnModuleFilter": "Show on module list", + "ShowOnModuleListFilter": "Show on module list", "ApplicationType": "Application type", "Target": "Target", "TargetFilter": "Target", @@ -56,8 +60,10 @@ "Refresh": "Refresh", "NpmPackages": "NPM Packages", "NugetPackages": "Nuget Packages", + "NuGetPackages": "NuGet Packages", "NpmPackageCount": "NPM Package Count", "NugetPackageCount": "Nuget Package Count", + "NuGetPackageCount": "NuGet Package Count", "Module": "Modules", "ModuleInfo": "Module info", "CreateANpmPackage": "Create a NPM package", @@ -102,6 +108,9 @@ "DoYouWantToCreateNewUser": "Do you want to create new user?", "MasterModules": "Master Modules", "OrganizationName": "Organisation name", + "DownloadType": "Download type", + "UserDownloads": "User Downloads", + "AcceptNewsletter": "Accept newsletter", "CreationDate": "Creation date", "LicenseStartDate": "License start date", "LicenseEndDate": "License end date", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 5bc1680708..eebf13731a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -22,23 +22,28 @@ "Permission:Accounting": "Accounting", "Permission:Accounting:Quotation": "Quotation", "Permission:Accounting:Invoice": "Invoice", + "Permission:Export" : "Export", "Menu:Organizations": "Organizations", "Menu:Accounting": "Accounting", "Menu:Packages": "Packages", "Menu:DiscountRequests": "Discount Requests", "NpmPackageDeletionWarningMessage": "This NPM Package will be deleted. Do you confirm that?", "NugetPackageDeletionWarningMessage": "This Nuget Package will be deleted. Do you confirm that?", + "NuGetPackages": "NuGet Packages", "ModuleDeletionWarningMessage": "This Module will be deleted. Do you confirm that?", "Name": "Name", "DisplayName": "Display name", "ShortDescription": "Short description", + "LongDescription": "Long description", "NameFilter": "Name", "CreationTime": "Creation time", - "IsPro": "Is pro", + "IsPro": "Pro package", "IsFreeToActiveLicenseOwners": "Free to license owners", "ShowOnModuleList": "Show on module list", "EfCoreConfigureMethodName": "Configure method name", - "IsProFilter": "Is pro", + "IsProFilter": "Pro package", + "ShowOnModuleFilter": "Show on module list", + "ShowOnModuleListFilter": "Show on module list", "ApplicationType": "Application type", "Target": "Target", "TargetFilter": "Target", @@ -59,6 +64,7 @@ "NugetPackages": "Nuget Packages", "NpmPackageCount": "NPM Package Count", "NugetPackageCount": "Nuget Package Count", + "NuGetPackageCount": "NuGet Package Count", "Module": "Modules", "ModuleInfo": "Module info", "CreateANpmPackage": "Create a NPM package", @@ -72,7 +78,7 @@ "Menu:NpmPackages": "NPM Packages", "Menu:Modules": "Modules", "Menu:Maintenance": "Maintenance", - "Menu:NugetPackages": "Nuget Packages", + "Menu:NugetPackages": "NuGet Packages", "CreateAnOrganization": "Create an organization", "Organizations": "Organizations", "LongName": "Long name", @@ -120,8 +126,15 @@ "PurchaseOrderNo": "Purchase order no", "QuotationDate": "Quotation date", "CompanyName": "Company name", + "DownloadType": "Download type", + "UserDownloads": "User Downloads", + "AcceptNewsletter": "Accept newsletter", "CompanyAddress": "Company address", "Price": "Price", + "Unknown": "Unknown", + "DddEBook": "Ddd EBook", + "MasteringAbpFrameworkEBook": "Mastering AbpFramework EBook", + "MicroserviceEBook": "Microservice EBook", "DiscountText": "Discount text", "DiscountQuantity": "Discount quantity", "DiscountPrice": "Discount price", @@ -219,8 +232,8 @@ "ReIndexAllPostsConfirmationMessage": "Are you sure you want to reindex all posts?", "SuccessfullyReIndexAllPosts": "All posts have been successfully reindexed.", "Permission:FullSearch": "Full text search", - "Menu:CliAnalytics": "Cli Analytics", - "Menu:Reports": "Reports", + "Menu:CliAnalytics": "CLI Analytics", + "Menu:Reports": "Dynamic Reports", "TemplateName": "Template name", "TemplateVersion": "Template version", "DatabaseProvider": "Database provider", @@ -232,7 +245,7 @@ "UiFramework": "Ui framework", "Options": "Options", "CliAnalytics": "Cli Analytics", - "Reports": "Reports", + "Reports": "Dynamic Reports", "Permission:CliAnalyticses": "Cli Analyticses", "Permission:CliAnalytics": "Cli Analytics", "Permission:Reports": "Reports", @@ -284,6 +297,7 @@ "Menu:Quotation": "Quotation", "Menu:Invoice": "Invoice", "Menu:Quotation/Invoice": "Quotation/Invoice", + "Menu:UserDownloads": "User Downloads", "Menu:PaymentRequests": "Payment Requests", "Permission:PaymentRequests": "Payment Requests", "PaymentRequests": "Payment Requests", @@ -456,7 +470,8 @@ "InterestedLicenseType": "Interested License Type", "MoveWaitList": "Move to wait list", "CommunityLinkTitle": "Open on the community website", - "CommunityLink": "Community link", + "CommunityLink": "Link", + "IpAddress": "IP Address", "ReloadFromSource": "Reload From the Source", "ReloadFromSourceConfirmationMessage": "This post will be refreshed from \"{0}\". Do you want to continue?", "UnitPrice": "Unit Price", @@ -497,6 +512,7 @@ "QuotationTemplate.BankAccount": "Our bank account information can be found at {0}", "Permission:Raffles": "Raffle", "Permission:Draw": "Draw", + "Permission:ExportAttendeesAsExcel": "Export at attendees as Excel", "Menu:Raffles": "Raffles", "RaffleIsNotDrawable": "Raffle is not drawable", "WinnerCountMustBeGreaterThanZero": "Winner count must be greater than zero", @@ -565,6 +581,7 @@ "AllowAbpStudioBetaAccess": "Allow ABP Studio Beta Access", "TotalQuestionCanNotBeNullMessage": "Total Question can not be null", "Permission:OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", + "Permission:UserDownloads": "User Downloads", "Permission:RetryFailedPayments": "Retry Failed Payments", "AutoRenewalIsNotEnabled": "Auto Renewal is not enabled!", "LicenseIsNotExpired": "License is not expired!", @@ -587,9 +604,12 @@ "AutoRenewalEnabled": "Auto Renewal Enabled", "LastAutoRenewalPaymentTime": "Last Auto Renewal Payment Time", "OrganizationDoesNotHaveACreditCard": "Organization does not have a credit card!", + "OrganizationDoesNotHaveACreditCardInGateway": "Organization does not have a credit card in the gateway!", "Permission:EditWinners": "Edit Winners", "Permission:ChangeDrawingStatus": "Change Drawing Status", - "Menu:Licenses": "Licenses", + "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", @@ -622,6 +642,85 @@ "DeleteImageSuccessMessage": "Image successfully deleted", "DeleteImage": "Delete Image", "NetTerms": "Terms (Days)", - "AbpStudioName": "Abp Studio name" + "Menu:DynamicReports": "Dynamic Reports", + "Menu:Others": "Others", + "Menu:Packs&Modules": "Packs & Modules", + "ReleaseCaches": "Release Cache", + "Menu:HeroSections": "Hero Sections", + "HeroSections": "Hero Sections", + "DynamicReports": "Dynamic Reports", + "Menu:ReportsMenu": "Reports", + "Permission:HeroSections": "Hero Sections", + "RedirectLink": "Redirect link", + "HeroSectionsDeletionConfirmationMessage": "Are you sure you want to delete the hero section?", + "AbpStudioName": "ABP Studio name", + "Permission:EditAttendees": "Edit Attendees", + "AttendeesCount": "Attendees Count", + "CreateQRCode": "Create QR Code", + "DrawTV": "Public draw on the TV", + "DrawModal": "Private draw on the modal", + "SetAsDrawable": "Set as drawable", + "SetAsNoDrawable": "Set as non-drawable", + "SetAsCompleted": "Set as completed", + "RemoveAllWinners": "Remove all winners", + "EditWinners": "Edit winners", + "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", + "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", + "ManageImages" : "Manage Image", + "ModuleMainImage": "Module Main Image", + "ModuleImageInfo1": "Accepted file types : JPEG, JPG, PNG, SVG ", + "ModuleImageInfo2": "Max file size : 1 MB ", + "ModuleImageInfo3": "Image Proportion : 1:1 ", + "ModuleImageInfo4": " Download a sample cover image ", + "AreYouSureToDeleteImage": "Are you sure you want to delete this image?", + "CompactPercentage": "Compact Percentage", + "CompactPercentageDescription": "Percentage of cache entries to remove during compaction (1-100)", + "Settings": "Settings", + "MaxSizeOfInMemoryCache": "Max Size Of In Memory Cache", + "MaxSizeOfInMemoryCacheInfo": "Gets or sets the maximum size of the memory cache.", + "SizeOfTriggerAutoCompact": "Size Of Trigger Auto Compact", + "SizeOfTriggerAutoCompactInfo": "Gets or sets the size threshold that triggers auto-compaction. When the cache size exceeds this value, auto-compaction will be performed", + "AutoCompactPercentage": "Auto Compact Percentage", + "AutoCompactPercentageInfo": "Gets or sets the percentage of items to remove when auto-compaction is triggered (1-100)", + "ClearCaches": "This clears all NuGet content cache", + "CacheLatestVersions": "Cache Latest Versions", + "VersionCount": "Version Count", + "VersionCountInfo": "Gets or sets the number of versions to cache", + "IncludeLeptonX": "Include LeptonX", + "IncludeLeptonXInfo": "Gets or sets whether to include LeptonX in the cache", + "IncludePrerelease": "Include Prerelease", + "IncludePrereleaseInfo": "Gets or sets whether to include prerelease versions in the cache", + "CacheVersionCount": "Cache Version Count", + "CacheVersionCountInfo": "Gets or sets the number of versions to cache", + "CacheLatestVersionsInfo": "This caches the latest versions of the NuGet packages", + "NuGetApiKey": "NuGet API key", + "QuestionCount": "Question Count", + "MakeAnnouncement": "Make Announcement", + "MakeAnnouncementInfo": "Check it if you want to make an announcement for this post" } -} \ No newline at end of file +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index feb63fc93e..31f6186258 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -90,9 +90,9 @@ "TermsAndConditions": "Terms & Conditions", "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing materials like product deals & special offers.", "JoinOurMarketingNewsletter": "Join our marketing newsletter", - "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", + "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", "WouldLikeToReceiveNotification": "I would like to receive the latest news from abp.io websites.", - "CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", + "CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", "FreeDDDEBook": "Free DDD E-Book", "AdditionalServices": "Additional Services", "Learn": "Learn", @@ -118,7 +118,7 @@ "EULA": "EULA", "ABPCommercialIntroductionMessage": "Pre-built application modules, advanced startup templates, rapid application development tooling, professional UI themes and premium support.", "MasteringAbpFrameworkEBook": "Mastering ABP Framework", - "MasteringTheABPFrameworkExplanation": "Written by the creator of the ABP Framework, this book will help you gain a complete understanding of the framework and modern web application development techniques.", + "MasteringTheABPFrameworkExplanation": "Mastering ABP Framework e-book; written by the creator of the ABP Framework, will help you gain a complete understanding of the framework and modern web application development techniques.", "Speakers": "Speakers", "PreviousEvents": "Previous Events", "WatchTheEvent": "Watch the Event", @@ -158,7 +158,7 @@ "SeePreviousEvents": "See Previous Events", "CookieConsent_Accept": "Accept", "CookieConsent_Explanation_1": "We use cookies to give you the best experience on our website.", - "CookieConsent_Explanation_2": "If you continue to browse, then you agree to our Privacy policy and cookie policy..", + "CookieConsent_Explanation_2": "If you continue to browse, then you agree to our Privacy policy and cookie policy..", "Error_Page_400_Title": "There was a problem serving the requested page.", "Error_Page_400_Description_1": "Usually this means that an unexpected error happened while processing your request.", "Error_Page_400_Description_2": "If the problem persists, contact us at info@abp.io and we'll help get you on your way.", @@ -239,18 +239,20 @@ "Trainings": "Trainings", "MeetTheABPCommunity": "Meet the ABP Community", "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll", - "ReturnOfInvestment": "Return Of Investment", + "ReturnOnInvestment": "Return on Investment", "PromotionalOffers": "Promotional Offers", "PromotionalOffersDefinition": "Discounts, seasonal campaigns, etc.", - "EventsDefinition": "Community Talks, Webinars, ABP .NET Conference, etc.", + "EventsDefinition": "Community Talks, Webinars, ABP DOTNET Conference, etc.", "ReleaseNotesDefinition": "ABP.IO Platform releases, new products, etc.", "Newsletter": "Newsletter", "NewsletterDefinition": "Blog posts, community news, etc.", "OrganizationOverview": "Organization Overview", "EmailPreferences": "Email Preferences", "VideoCourses": "Essential Videos", - "DoYouAgreePrivacyPolicy": "By clicking Subscribe button you agree to the Terms & Conditions and Privacy Policy.", + "DoYouAgreePrivacyPolicy": "By clicking Subscribe button you agree to the Terms & Conditions and Privacy Policy.", "AbpConferenceDescription": "ABP Conference is a virtual event for .NET developers to learn and connect with the community.", - "Mobile": "Mobile" + "Mobile": "Mobile", + "MetaTwitterCard": "summary_large_image", + "IPAddress": "IP Address" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json index 2da5698215..880cb53a9e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json @@ -1,8 +1,9 @@ { "culture": "en", "texts": { - "AbpTitle": "Read All Blog Posts", + "AbpTitle": "New Blog Post | ABP.IO", "AbpDescription": "ABP is an open source application framework focused on AspNet Core based web application development. Don't repeat yourself, focus on your own business code.", - "AbpDefinition": "ABP blog for .NET development, cross-platform, ASP.NET application templates, ABP-related news and more..." + "AbpDefinition": "Create a new blog post and share your knowledge and experience with ABP.", + "Blogs": "Blog Posts" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs deleted file mode 100644 index 76eb74933d..0000000000 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Volo.Abp.Localization; - -namespace AbpIoLocalization.Commercial.Localization -{ - [LocalizationResourceName("AbpIoCommercial")] - public class AbpIoCommercialResource - { - - } -} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index 6ab986076e..5e3a26f6fb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (واجهة سطر الأوامر) هي أداة سطر أوامر لتنفيذ بعض العمليات الشائعة للحلول المستندة إلى ABP.", "ABPSuiteEasilyCURD": "ABP Suite هي أداة تسمح لك بإنشاء صفحات CRUD بسهولة", "WeAreHereToHelp": "نحن هنا من أجل المساعدة ", - "BrowseOrAskQuestion": "يمكنك تصفح مواضيع المساعدة الخاصة بنا أو البحث في الأسئلة الشائعة ، أو يمكنك طرح سؤال علينا باستخدام نموذج الاتصال .", + "BrowseOrAskQuestion": "يمكنك تصفح مواضيع المساعدة الخاصة بنا أو البحث في الأسئلة الشائعة ، أو يمكنك طرح سؤال علينا باستخدام نموذج الاتصال .", "SearchQuestionPlaceholder": "البحث في الأسئلة المتداولة", "WhatIsTheABPCommercial": "ما هو برنامج ABP التجاري؟", "WhatAreDifferencesThanAbpFramework": "ما هي الاختلافات بين إطار عمل ABP مفتوح المصدر وإطار عمل ABP التجاري؟", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json index a92366fa07..30500aab9b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) je nástroj příkazového řádku pro provádění některých běžných operací pro řešení založená na ABP.", "ABPSuiteEasilyCURD": "ABP Suite je nástroj, který vám umožní snadno vytvářet stránky CRUD", "WeAreHereToHelp": "Jsme tu, abychom vám Pomohli", - "BrowseOrAskQuestion": "Můžete procházet naše témata nápovědy nebo vyhledávat v často kladených dotazech, případně nám můžete položit otázku pomocí kontaktního formuláře.", + "BrowseOrAskQuestion": "Můžete procházet naše témata nápovědy nebo vyhledávat v často kladených dotazech, případně nám můžete položit otázku pomocí kontaktního formuláře.", "SearchQuestionPlaceholder": "Hledejte v často kladených otázkách", "WhatIsTheABPCommercial": "Co je ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Jaké jsou rozdíly mezi open source ABP Framework a ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json index dcea7faa20..210f46ff8b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) ist ein Befehlszeilentool zum Ausführen einiger allgemeiner Operationen für ABP-basierte Lösungen.", "ABPSuiteEasilyCURD": "ABP Suite ist ein Tool, mit dem Sie einfach CRUD-Seiten erstellen können", "WeAreHereToHelp": "Wir sind hier, um Hilfe", - "BrowseOrAskQuestion": "Sie können unsere Hilfethemen durchsuchen oder in häufig gestellten Fragen suchen oder uns über das Kontaktformular eine Frage stellen.", + "BrowseOrAskQuestion": "Sie können unsere Hilfethemen durchsuchen oder in häufig gestellten Fragen suchen oder uns über das Kontaktformular eine Frage stellen.", "SearchQuestionPlaceholder": "Suche in häufig gestellten Fragen", "WhatIsTheABPCommercial": "Was ist der ABP-Werbespot?", "WhatAreDifferencesThanAbpFramework": "Was sind die Unterschiede zwischen dem Open Source ABP Framework und dem ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index ae040e7fd2..456e8ebd05 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/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 premium support. 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 ABP Suite which speeds up your development.", "LicenseRenewalPrice": "License renewal price", "LicensePrice": "License Price", - "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. 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 ABP Suite which speeds up your development.
See the license comparison table to check the differences between the license types.", + "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. 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 ABP Suite which speeds up your development.
See the license comparison table 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?", @@ -987,7 +987,7 @@ "Summary": "Summary", "TrainingPack": "Training pack", "TrainingPackDiscount": "Training pack discount", - "Purchase_OnboardingTraining_Description": "This live training is valid for a class of 8 students and this discount is only valid when purchased with the new license. Learn more ", + "Purchase_OnboardingTraining_Description": "This live training is valid for a class of 8 students and this discount is only valid when purchased with the new license. Learn more ", "Purchase_Save": "{0}% Save {1}", "RemoveBasket": "Remove from basket", "WhyABPIOPlatform?": "Why ABP.IO Platform?", @@ -1211,6 +1211,5 @@ "TrainingDescription": "We are offering the following training packages for who want to get expertise on the ABP Framework and the ABP.", "PurchaseDevelopers": "developers", "LinkExpiredMessage": "The payment link has expired! Contact us at sales@volosoft.com to update the link or click here to navigate to the contact page." - } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json index a8389d694d..8d68f0c60f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) es una herramienta de línea de comandos para realizar algunas operaciones comunes para soluciones basadas en ABP.", "ABPSuiteEasilyCURD": "ABP Suite es una herramienta que le permite crear fácilmente páginas CRUD", "WeAreHereToHelp": "Estamos aquí para Ayuda ", - "BrowseOrAskQuestion": "Puede explorar nuestros temas de ayuda o buscar preguntas frecuentes, o puede hacernos una pregunta mediante el formulario de contacto .", + "BrowseOrAskQuestion": "Puede explorar nuestros temas de ayuda o buscar preguntas frecuentes, o puede hacernos una pregunta mediante el formulario de contacto .", "SearchQuestionPlaceholder": "Buscar en preguntas frecuentes", "WhatIsTheABPCommercial": "¿Qué es ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "¿Cuáles son las diferencias entre ABP Framework de código abierto y ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index 4c87baefb3..8a85358884 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) on komentorivityökalu joidenkin yleisten toimintojen suorittamiseen ABP-pohjaisiin ratkaisuihin.", "ABPSuiteEasilyCURD": "ABP Suite on työkalu, jonka avulla voit helposti luoda CRUD-sivuja", "WeAreHereToHelp": "Apua olemme täällä", - "BrowseOrAskQuestion": "Voit selata ohjeaiheitamme tai etsiä usein kysyttyjä kysymyksiä tai voit esittää meille kysymyksiä yhteydenottolomakkeella .", + "BrowseOrAskQuestion": "Voit selata ohjeaiheitamme tai etsiä usein kysyttyjä kysymyksiä tai voit esittää meille kysymyksiä yhteydenottolomakkeella .", "SearchQuestionPlaceholder": "Hae usein kysyttyjä kysymyksiä", "WhatIsTheABPCommercial": "Mikä on ABP-kauppa?", "WhatAreDifferencesThanAbpFramework": "Mitä eroja on avoimen lähdekoodin ABP Frameworkilla ja ABP Commercialilla?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json index a78b492d07..998d0d9129 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) est un outil de ligne de commande pour effectuer certaines opérations courantes pour les solutions basées sur ABP.", "ABPSuiteEasilyCURD": "ABP Suite est un outil qui vous permet de créer facilement des pages CRUD", "WeAreHereToHelp": "Nous sommes ici pour Aide ", - "BrowseOrAskQuestion": "Vous pouvez parcourir nos rubriques d'aide ou rechercher dans les questions fréquemment posées, ou vous pouvez nous poser une question en utilisant le formulaire de contact .", + "BrowseOrAskQuestion": "Vous pouvez parcourir nos rubriques d'aide ou rechercher dans les questions fréquemment posées, ou vous pouvez nous poser une question en utilisant le formulaire de contact .", "SearchQuestionPlaceholder": "Rechercher dans les questions fréquemment posées", "WhatIsTheABPCommercial": "Qu'est-ce que la publicité ABP?", "WhatAreDifferencesThanAbpFramework": "Quelles sont les différences entre le Framework ABP open source et le ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json index 68fab24fc2..3adb4d3108 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (कमांड लाइन इंटरफेस) ABP आधारित समाधानों के लिए कुछ सामान्य ऑपरेशन करने के लिए एक कमांड लाइन टूल है।", "ABPSuiteEasilyCURD": "एबीपी सूट एक उपकरण है जो आपको आसानी से CRUD पेज बनाने की अनुमति देता है", "WeAreHereToHelp": "हम यहाँ हैं मदद ", - "BrowseOrAskQuestion": "आप हमारे सहायता विषयों को ब्राउज़ कर सकते हैं या अक्सर पूछे जाने वाले प्रश्नों में खोज कर सकते हैं, या आप संपर्क फ़ॉर्म का उपयोग करके हमसे एक प्रश्न पूछ सकते हैं।", + "BrowseOrAskQuestion": "आप हमारे सहायता विषयों को ब्राउज़ कर सकते हैं या अक्सर पूछे जाने वाले प्रश्नों में खोज कर सकते हैं, या आप संपर्क फ़ॉर्म का उपयोग करके हमसे एक प्रश्न पूछ सकते हैं।", "SearchQuestionPlaceholder": "अक्सर पूछे जाने वाले प्रश्नों में खोजें", "WhatIsTheABPCommercial": "ABP कमर्शियल क्या है?", "WhatAreDifferencesThanAbpFramework": "ओपन सोर्स ABP फ्रेमवर्क और ABP कमर्शियल के बीच क्या अंतर हैं?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json index 07974134a2..d7865bf455 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI (sučelje naredbenog retka) alat je naredbenog retka za izvođenje nekih uobičajenih operacija za rješenja temeljena na ABP-u.", "ABPSuiteEasilyCURD": "ABP Suite je alat koji vam omogućuje jednostavno stvaranje CRUD stranica", "WeAreHereToHelp": "Ovdje smo da pomognemo", - "BrowseOrAskQuestion": "Možete pregledavati naše teme pomoći ili pretraživati u često postavljanim pitanjima ili nam možete postaviti pitanje koristeći obrazac za kontakt .", + "BrowseOrAskQuestion": "Možete pregledavati naše teme pomoći ili pretraživati u često postavljanim pitanjima ili nam možete postaviti pitanje koristeći obrazac za kontakt .", "SearchQuestionPlaceholder": "Pretražite u često postavljanim pitanjima", "WhatIsTheABPCommercial": "Što je ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Koje su razlike između open source ABP Framework i ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json index 4fbdb2a8d4..5cbe578021 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "Az ABP CLI (Command Line Interface) egy parancssori eszköz az ABP alapú megoldások általános műveleteinek végrehajtására.", "ABPSuiteEasilyCURD": "Az ABP Suite egy olyan eszköz, amellyel könnyedén hozhat létre CRUD oldalakat", "WeAreHereToHelp": "Azért vagyunk itt, hogy segítsünk", - "BrowseOrAskQuestion": "Böngésszen a súgótémáink között, kereshet a gyakran ismételt kérdések között, vagy feltehet nekünk kérdést a kapcsolatfelvételi űrlap használatával.", + "BrowseOrAskQuestion": "Böngésszen a súgótémáink között, kereshet a gyakran ismételt kérdések között, vagy feltehet nekünk kérdést a kapcsolatfelvételi űrlap használatával.", "SearchQuestionPlaceholder": "Keressen a gyakran ismételt kérdések között", "WhatIsTheABPCommercial": "Mi az az ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Mi a különbség a nyílt forráskódú ABP Framework és az ABP Commercial között?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json index be9337e842..6e0572a790 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) er skipanalínutæki til að framkvæma nokkrar algengar aðgerðir fyrir ABP byggðar lausnir.", "ABPSuiteEasilyCURD": "ABP Suite er tæki sem gerir þér kleift að búa til CRUD síður auðveldlega", "WeAreHereToHelp": "Við erum hérna til að Hjálpa", - "BrowseOrAskQuestion": "Þú getur skoðað hjálparefni okkar eða leitað í algengum spurningum, eða þú getur spurt okkur spurningar með því að nota samskiptaform .", + "BrowseOrAskQuestion": "Þú getur skoðað hjálparefni okkar eða leitað í algengum spurningum, eða þú getur spurt okkur spurningar með því að nota samskiptaform .", "SearchQuestionPlaceholder": "Leitaðu í algengum spurningum", "WhatIsTheABPCommercial": "Hvað er ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Hver er munurinn á milli open source ABP Framework og ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index edc80b48e1..481a1a416a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) è uno strumento a riga di comando per eseguire alcune operazioni comuni per soluzioni basate su ABP.", "ABPSuiteEasilyCURD": "ABP Suite è uno strumento che ti permette di creare facilmente pagine CRUD", "WeAreHereToHelp": "Siamo qui per Aiutarti", - "BrowseOrAskQuestion": "Puoi sfogliare i nostri argomenti della guida o cercare nelle domande frequenti oppure puoi farci una domanda utilizzando il modulo di contatto .", + "BrowseOrAskQuestion": "Puoi sfogliare i nostri argomenti della guida o cercare nelle domande frequenti oppure puoi farci una domanda utilizzando il modulo di contatto .", "SearchQuestionPlaceholder": "Cerca nelle domande frequenti", "WhatIsTheABPCommercial": "Cos'è ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Quali sono le differenze tra ABP Framework open source e ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json index da7037c8f2..197c23d17b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) is een opdrachtregelprogramma om een aantal veelvoorkomende bewerkingen uit te voeren voor op ABP gebaseerde oplossingen.", "ABPSuiteEasilyCURD": "ABP Suite is een tool waarmee u eenvoudig CRUD-pagina's kunt maken", "WeAreHereToHelp": "We zijn hier om Help", - "BrowseOrAskQuestion": "U kunt door onze Help-onderwerpen bladeren of zoeken in veelgestelde vragen, of u kunt ons een vraag stellen via het contactformulier.", + "BrowseOrAskQuestion": "U kunt door onze Help-onderwerpen bladeren of zoeken in veelgestelde vragen, of u kunt ons een vraag stellen via het contactformulier.", "SearchQuestionPlaceholder": "Zoeken in veelgestelde vragen", "WhatIsTheABPCommercial": "Wat is de ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Wat zijn de verschillen tussen het open source ABP Framework en de ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json index 8c37e62706..9bf2c05d39 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Interfejs wiersza poleceń) to narzędzie wiersza poleceń do wykonywania niektórych typowych operacji dla rozwiązań opartych na ABP.", "ABPSuiteEasilyCURD": "ABP Suite to narzędzie, które pozwala łatwo tworzyć strony CRUD", "WeAreHereToHelp": "Jesteśmy tutaj, aby pomoc", - "BrowseOrAskQuestion": "Możesz przeglądać nasze tematy pomocy lub przeszukiwać często zadawane pytania albo możesz zadać nam pytanie, korzystając z formularza kontaktowego.", + "BrowseOrAskQuestion": "Możesz przeglądać nasze tematy pomocy lub przeszukiwać często zadawane pytania albo możesz zadać nam pytanie, korzystając z formularza kontaktowego.", "SearchQuestionPlaceholder": "Szukaj w często zadawanych pytaniach", "WhatIsTheABPCommercial": "Co to jest reklama ABP?", "WhatAreDifferencesThanAbpFramework": "Jakie są różnice między Open Source ABP Framework a ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json index 43d80af012..2de960edf1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) é uma ferramenta de linha de comando para realizar algumas operações comuns para soluções baseadas em ABP.", "ABPSuiteEasilyCURD": "ABP Suite é uma ferramenta que permite criar facilmente páginas CRUD", "WeAreHereToHelp": "Estamos aqui para ajudar ", - "BrowseOrAskQuestion": "Você pode navegar em nossos tópicos de ajuda ou pesquisar as perguntas mais frequentes, ou pode nos fazer uma pergunta usando o formulário de contato .", + "BrowseOrAskQuestion": "Você pode navegar em nossos tópicos de ajuda ou pesquisar as perguntas mais frequentes, ou pode nos fazer uma pergunta usando o formulário de contato .", "SearchQuestionPlaceholder": "Pesquise nas perguntas mais frequentes", "WhatIsTheABPCommercial": "O que é o comercial ABP?", "WhatAreDifferencesThanAbpFramework": "Quais são as diferenças entre o ABP Framework de código aberto e o ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json index b04650b958..d48ea54135 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) este un instrument de linii de comandă pentru executarea unor operaţii comune pentru soluţiile ABP.", "ABPSuiteEasilyCURD": "Suita ABP este un instrument care vă permite crearea cu uşurinţă a paginilor CRUD", "WeAreHereToHelp": "Suntem aici să Ajutăm", - "BrowseOrAskQuestion": "Puteţi răsfoi subiectele noastre de ajutor sau puteţi căuta în cadrul secţiunii întrebărilor frecvent adresate, sau ne puteţi adresa o întrebare folosind formularul de contact.", + "BrowseOrAskQuestion": "Puteţi răsfoi subiectele noastre de ajutor sau puteţi căuta în cadrul secţiunii întrebărilor frecvent adresate, sau ne puteţi adresa o întrebare folosind formularul de contact.", "SearchQuestionPlaceholder": "Caută în întrebările frecvent adresate", "WhatIsTheABPCommercial": "Ce este ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Care sunt diferenţele dintre ABP Framework şi ABP Comercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json index ee34099ccb..dce8c92888 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI (интерфейс командной строки) — это инструмент командной строки для выполнения некоторых распространенных операций для решений на основе ABP.", "ABPSuiteEasilyCURD": "ABP Suite — это инструмент, который позволяет легко создавать страницы CRUD.", "WeAreHereToHelp": "Мы здесь, чтобы Помощь", - "BrowseOrAskQuestion": "Вы можете просмотреть разделы справки или выполнить поиск по часто задаваемым вопросам, либо задать нам вопрос, используя Форма обратной связи.", + "BrowseOrAskQuestion": "Вы можете просмотреть разделы справки или выполнить поиск по часто задаваемым вопросам, либо задать нам вопрос, используя Форма обратной связи.", "SearchQuestionPlaceholder": "Поиск в часто задаваемых вопросах", "WhatIsTheABPCommercial": "Что такое ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Каковы различия между ABP Framework с открытым исходным кодом и ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json index 48f4a3c304..e59887beab 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) je nástroj v príkazovom riadku na vykonávanie niektorých bežných operácií v riešeniach založených na ABP.", "ABPSuiteEasilyCURD": "ABP Suite je nástroj, ktorý vám umožňuje jednoducho vytvárať CRUD stránky.", "WeAreHereToHelp": "Sme tu, aby sme pomohli", - "BrowseOrAskQuestion": "Môžete si prezerať témy našej nápovedy alebo vyhľadávať v často kladených otázkach, prípadne nám môžete položiť otázku pomocou kontaktného formulára.", + "BrowseOrAskQuestion": "Môžete si prezerať témy našej nápovedy alebo vyhľadávať v často kladených otázkach, prípadne nám môžete položiť otázku pomocou kontaktného formulára.", "SearchQuestionPlaceholder": "Vyhľadávanie v často kladených otázkach", "WhatIsTheABPCommercial": "Čo je to ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Aké sú rozdiely medzi open source ABP Framework a ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json index 870268c576..3fb3d559d4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (vmesnik ukazne vrstice) je orodje ukazne vrstice za izvajanje nekaterih običajnih operacij za rešitve, ki temeljijo na ABP.", "ABPSuiteEasilyCURD": "ABP Suite je orodje, ki vam omogoča preprosto ustvarjanje strani CRUD", "WeAreHereToHelp": "Tukaj smo za pomoč", - "BrowseOrAskQuestion": "Brskate lahko po naših temah pomoči ali iščete po pogostih vprašanjih ali pa nam postavite vprašanje z uporabo kontaktnega obrazca.", + "BrowseOrAskQuestion": "Brskate lahko po naših temah pomoči ali iščete po pogostih vprašanjih ali pa nam postavite vprašanje z uporabo kontaktnega obrazca.", "SearchQuestionPlaceholder": "Iščite v pogosto zastavljenih vprašanjih", "WhatIsTheABPCommercial": "Kaj je reklama ABP?", "WhatAreDifferencesThanAbpFramework": "Kakšne so razlike med odprtokodnim okvirom ABP in ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index 64bf89dc48..2fd650a4fb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -153,7 +153,7 @@ "ABPCLIExplanation": "ABP CLI (Komut Satırı Arayüzü), ABP tabanlı projeler için bazı ortak işlemleri gerçekleştirmek için bir komut satırı aracıdır.", "ABPSuiteEasilyCURD": "ABP Suite, kolayca CRUD sayfaları oluşturmanıza olanak sağlayan bir araçtır", "WeAreHereToHelp": "Yardım için buradayız", - "BrowseOrAskQuestion": "Yardım konularımıza göz atabilir veya sık sorulan sorularda arama yapabilir ya da iletişim formunu kullanarak bize soru sorabilirsiniz.", + "BrowseOrAskQuestion": "Yardım konularımıza göz atabilir veya sık sorulan sorularda arama yapabilir ya da iletişim formunu kullanarak bize soru sorabilirsiniz.", "SearchQuestionPlaceholder": "Sık sorulan sorularda ara", "WhatIsTheABPCommercial": "ABP Commercial nedir?", "WhatAreDifferencesThanAbpFramework": "Açık kaynaklı ABP Frameworkü ile ABP Commercial arasındaki farklar nelerdir?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json index 231687fc9b..eab68bdf79 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Giao diện dòng lệnh) là một công cụ dòng lệnh để thực hiện một số hoạt động phổ biến cho các giải pháp dựa trên ABP.", "ABPSuiteEasilyCURD": "ABP Suite là một công cụ cho phép bạn dễ dàng tạo các trang CRUD", "WeAreHereToHelp": "Chúng tôi ở đây để Trợ giúp ", - "BrowseOrAskQuestion": "Bạn có thể duyệt qua các chủ đề trợ giúp của chúng tôi hoặc tìm kiếm trong các câu hỏi thường gặp hoặc bạn có thể đặt câu hỏi cho chúng tôi bằng cách sử dụng biểu mẫu liên hệ .", + "BrowseOrAskQuestion": "Bạn có thể duyệt qua các chủ đề trợ giúp của chúng tôi hoặc tìm kiếm trong các câu hỏi thường gặp hoặc bạn có thể đặt câu hỏi cho chúng tôi bằng cách sử dụng biểu mẫu liên hệ .", "SearchQuestionPlaceholder": "Tìm kiếm trong các câu hỏi thường gặp", "WhatIsTheABPCommercial": "ABP thương mại là gì?", "WhatAreDifferencesThanAbpFramework": "Sự khác biệt giữa Khung ABP nguồn mở và ABP Thương mại là gì?", 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 5f8141bf2a..60364800b6 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI(命令行界面)是一种命令行工具,用于执行基于 ABP 的解决方案的一些常用操作。", "ABPSuiteEasilyCURD": "ABP Suite 是一款可让您轻松创建 CRUD 页面的工具", "WeAreHereToHelp": "我们在这里帮助", - "BrowseOrAskQuestion": "您可以浏览我们的帮助主题或搜索常见问题,也可以使用 联系表单向我们提问。", + "BrowseOrAskQuestion": "您可以浏览我们的帮助主题或搜索常见问题,也可以使用 联系表单向我们提问。", "SearchQuestionPlaceholder": "在常见问题中搜索", "WhatIsTheABPCommercial": "ABP Commercial 是什么?", "WhatAreDifferencesThanAbpFramework": "开源 ABP 框架与 ABP 商业版之间有哪些区别?", 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 302007af79..212c641305 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -159,7 +159,7 @@ "ABPCLIExplanation": "ABP CLI(命令行頁面)是一個執行基於ABP解決方案的一些常見操作的命令行工具.", "ABPSuiteEasilyCURD": "ABP Suite是一個使你輕松創建CURD頁面的工具", "WeAreHereToHelp": "我們在這裏為你提供幫助", - "BrowseOrAskQuestion": "你可以瀏覽我們的幫助主題或搜索常見的問題, 或者你可以使用聯系表單向我們提問.", + "BrowseOrAskQuestion": "你可以瀏覽我們的幫助主題或搜索常見的問題, 或者你可以使用聯系表單向我們提問.", "SearchQuestionPlaceholder": "搜索常見的問題", "WhatIsTheABPCommercial": "什麽是ABP商業版?", "WhatAreDifferencesThanAbpFramework": "ABP框架與ABP商業版有什麽不同?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/AbpIoCommunityResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/AbpIoCommunityResource.cs deleted file mode 100644 index 2d7f93aeae..0000000000 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/AbpIoCommunityResource.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Volo.Abp.Localization; - -namespace AbpIoLocalization.Community.Localization -{ - [LocalizationResourceName("AbpIoCommunity")] - public class AbpIoCommunityResource - { - - } -} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 78231bb1af..f1dcba47a8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -264,6 +264,7 @@ "EditProfile": "Edit Profile", "ConfirmEmailForPost": "To be able to post, you need to confirm your email. Go to account.abp.io/Account/Manage and verify your email in the Personal Info tab.", "DailyPostCreateLimitation": "You have reached the daily post creation limit. You can create a new post in {0}.", - "YourAccountDisabled": "Your user account is disabled!" + "YourAccountDisabled": "Your user account is disabled!", + "PostCreationFailed": "An error occurred while creating the post. Please try again later." } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json index 36cad167bd..23176ac6ac 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json @@ -4,6 +4,7 @@ "Buy": "Buy", "SeeBookDetails": "See Book Details", "MasteringAbpFrameworkEBookDescription": "This book will help you gain a complete understanding of the framework and modern web application development techniques.", - "Feedback": "Feedback" + "Feedback": "Feedback", + "DocumentationDescription": "Dive into ABP's latest documentation. Find guides, API references, and best practices to help you effectively build and manage modern web apps with ABP" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json index 720cbd39e1..da957142bb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "تطبيق ويب تقدمي", "Preview": "معاينة", "CreateANewSolution": "قم بإنشاء حل جديد", - "ABPFrameworkFeatures": "إطار عمل ABP ميزات", + "FrameworkFeatures": "إطار عمل ABP ميزات", "Commercial": "تجاري", "ThirdPartyTools": "أدوات الطرف الثالث", "Back": "عودة", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json index 2aea81b930..e57855cdae 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresivní webová aplikace", "Preview": "Náhled", "CreateANewSolution": "Vytvořte nové řešení", - "ABPFrameworkFeatures": "Funkce rámce ABP", + "FrameworkFeatures": "Funkce rámce ABP", "Commercial": "Komerční", "ThirdPartyTools": "Nástroje třetích stran", "Back": "Zadní", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json index 0b0eb71adf..d125dbded4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progressive Webanwendung", "Preview": "Vorschau", "CreateANewSolution": "Erstellen Sie eine neue Lösung", - "ABPFrameworkFeatures": "ABP-Framework- Funktionen", + "FrameworkFeatures": "ABP-Framework- Funktionen", "Commercial": "Kommerziell", "ThirdPartyTools": "Tools von Drittanbietern", "Back": "Zurück", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json index f0f5dbd496..f91152bf59 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json @@ -153,6 +153,9 @@ "AndMore": "and more...", "Code": "Code", "Result": "Result", + "CommercialSupport": "Commercial Suport", + "GithubIssues": "GitHub Issues", + "TechnicalSupport": "Technical Support", "SeeTheDocumentForMoreInformation": "See the {0} document for more information", "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", "UiFramework": "UI Framework", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index d35936411c..f5fea908de 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -2,6 +2,7 @@ "culture": "en", "texts": { "GetStarted": "Get Started", + "GetStarted_Page_Title": "Get Started with ABP | Quick and Easy Setup Guide", "Create": "Create", "NewProject": "New Project", "DirectDownload": "Direct Download", @@ -29,7 +30,7 @@ "DomainDrivenDesignExplanation": "Designed and developed based on DDD patterns and principles. Provides a layered model for your application.", "Authorization": "Authorization", "AuthorizationExplanation": "Advanced authorization with user, role and fine-grained permission system. Built on Microsoft Identity library.", - "MultiTenancy": "Multi-Tenancy", + "MultiTenancy": "Multi-tenancy", "MultiTenancyExplanationShort": "SaaS applications made easy! Integrated multi-tenancy from database to UI.", "CrossCuttingConcerns": "Cross Cutting Concerns", "CrossCuttingConcernsExplanationShort": "Complete infrastructure for authorization, validation, exception handling, caching, audit logging, transaction management and more.", @@ -65,7 +66,7 @@ "AuditLogging": "Audit Logging", "Caching": "Caching", "Multitenancy": "Multitenancy", - "DataFiltering": "Data filtering", + "DataFiltering": "Data Filtering", "ConventionOverConfiguration": "Convention Over Configuration", "ConventionOverConfigurationExplanation": "ABP implements common application conventions by default with minimal or zero configuration.", "ConventionOverConfigurationExplanationList1": "Auto registers known services to dependency injection.", @@ -94,7 +95,7 @@ "DynamicForms": "Dynamic Forms", "BundlingMinification": "Bundling & Minification", "BackgroundJobs": "Background Jobs", - "BackgroundJobsExplanation": "Define simple classes to execute jobs in the background as queued. Use the built-in job manager or integrate your own. Hangfire & RabbitMQ integrations are already available.", + "BackgroundJobsExplanation": "Define simple classes to execute jobs in the background as queued. Use the built-in job manager or integrate your own. Hangfire, RabbitMQ and Quartz integrations are already available.", "DDDInfrastructure": "DDD Infrastructure", "DomainDrivenDesignInfrastructure": "Domain Driven Design Infrastructure", "AutoRESTAPIs": "Auto REST APIs", @@ -109,18 +110,20 @@ "EmailSMSAbstractionsWithTemplatingSupport": "Email & SMS Abstractions with Templating Support", "Localization": "Localization", "SettingManagement": "Setting Management", + "CommercialSupport": "Commercial Suport", + "GithubIssues": "GitHub Issues", + "TechnicalSupport": "Technical Support", "ExtensionMethods": "Extension Methods", "ExtensionMethodsHelpers": "Extension Methods & Helpers", "AspectOrientedProgramming": "Aspect Oriented Programming", "DependencyInjection": "Dependency Injection", "DependencyInjectionByConventions": "Dependency Injection by Conventions", - "ABPCLIExplanation": "ABP CLI (Command Line Interface) is a command line tool to automate some common operations for ABP based solutions.", "ModularityExplanation": "ABP provides a complete infrastructure to build your own application modules that may have entities, services, database integration, APIs, UI components and so on..", - "MultiTenancyExplanation": "ABP framework doesn't only support developing multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.", + "MultiTenancyExplanation": "ABP doesn't only support developing multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.", "MultiTenancyExplanation2": "Can automatically determine the current tenant, isolate data of different tenants from each other.", "MultiTenancyExplanation3": "Supports single database, database per tenant and hybrid approaches.", "MultiTenancyExplanation4": "You focus on your business code and let the framework handle multi-tenancy on behalf of you.", - "BootstrapTagHelpersExplanation": "Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify it and take advantage of the IntelliSense. You can definitely use Bootstrap whenever you need it.", + "BootstrapTagHelpersExplanation": "Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify it and take advantage of the IntelliSense. You can directly use Bootstrap whenever you need it.", "DynamicFormsExplanation": "Dynamic form & input tag helpers can create the complete form from a C# class as the model.", "AuthenticationAuthorizationExplanation": "Rich authentication & authorization options integrated to ASP.NET Core Identity & OpenIddict. Provides an extensible & detailed permission system.", "CrossCuttingConcernsExplanation": "Don't repeat yourself to implement all this common stuff again & again. Focus on your business code and let ABP automate them by conventions.", @@ -137,7 +140,7 @@ "ApplicationService": "Application Service", "DataTransferObject": "Data Transfer Object", "AggregateRootEntity": "Aggregate Root, Entity", - "AutoRESTAPIsExplanation": "ABP can automagically configure your application services as API Controllers by convention.", + "AutoRESTAPIsExplanation": "ABP can automatically configure your application services as API Controllers by convention.", "DynamicClientProxiesExplanation": "Easily consume your APIs from JavaScript and C# clients.", "DistributedEventBusWithRabbitMQIntegrationExplanation": "Easily publish & consume distributed events using built-in Distributed Event Bus with RabbitMQ integration available.", "TestInfrastructureExplanation": "The framework has been developed with unit & integration testing in mind. Provides you base classes to make it easier. Startup templates come pre-configured for testing.", @@ -151,15 +154,18 @@ "DataFilteringExplanation": "Define and use data filters that are automatically applied when you query entities from the database. Soft Delete & MultiTenant filters are provided out of the box when you implement simple interfaces.", "PublishEvents": "Publish Events", "HandleEvents": "Handle Events", - "AndMore": "and more...", "Code": "Code", "Result": "Result", - "SeeTheDocumentForMoreInformation": "Check out the {0} document for more information", - "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", + "SeeTheDocumentForMoreInformation": "Check out the {0} document for more information", "UiFramework": "UI Framework", "EmailAddress": "Email address", "Mobile": "Mobile", + "MobileTitle": "Select a Mobile Application", + "MobileTitleDescription" : "You can include a mobile application that is integrated to your backend.", "ReactNative": "React Native", + "AdditonalOptions" : "Additonal Options", + "CreateYourSolution" : "Create a Your Solution", + "CreateYourSolutionDescription" : "Execute the following ABP CLI command in your command-line terminal:", "Strong": "Strong", "Complete": "Complete", "BasedLayeringModel": "Based Layering Model", @@ -185,7 +191,7 @@ "InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:", "DifferentLevelOfNamespaces": "You can use different levels of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.", "ABPCLIExamplesInfo": "The new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options.", - "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", + "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", "Optional": "Optional", "LocalFrameworkRef": "Keep the local project reference for the framework packages.", "BlobStoring": "BLOB Storing", @@ -194,7 +200,6 @@ "TextTemplatingExplanation": "Text templating is used to dynamically render contents based on a template and a model (a data object). For example, you can use it to create dynamic email contents with a pre-built template.", "MultipleUIOptions": "Multiple UI Options", "MultipleDBOptions": "Multiple Database Providers", - "MultipleUIOptionsExplanation": "The core framework is designed as UI independent and can work with any type of UI system, while there are multiple pre-built and integrated options provided out of the box.", "MultipleDBOptionsExplanation": "The framework can work with any data source, while the following providers are officially developed and supported:", "SelectLanguage": "Select language", "LatestPostOnCommunity": "Latest Post on ABP Community", @@ -206,7 +211,7 @@ "SeeOnNpm": "See on NPM", "SeeOnNuget": "See on Nuget", "MVCGulpCommandExplanation": "If you are using MVC (Razor Pages) UI, then run the \"gulp\" command after the package installation.", - "UsingABPCLI": "Using Abp CLI", + "UsingABPCLI": "Using Abp CLI", "WithoutABPCLI": "Without ABP CLI", "ABPCLIModuleDependency": "Abp Cli automatically adds module dependency.", "AddModuleDependency": "Then add module dependency", @@ -236,11 +241,9 @@ "ClientSideDevelopment": "Client Side Development", "ClientSideDevelopmentDocumentationMessage": "Check out the {0} document to learn the key points for the user interface (client side) development.", "DatabaseProviderDocumentationMessage": "Check out the {0} document to learn the key points for the database layer development.", - "ABPCommercialExplanationMessage": "ABP Commercial provides premium modules, themes, tooling and support for the ABP Framework.", "ImplementingDDD": "Implementing Domain Driven Design", "DDDBookExplanation": "A practical guide for implementing the Domain Driven Design with the ABP Framework.", "Overview": "Overview", - "DDDBookPracticalGuide": "This is a practical guide for implementing the Domain Driven Design (DDD). While the implementation details are based on the ABP Framework infrastructure, the basic concepts, principles and models can be applied to any solution, even if it is not a .NET solution.", "TableOfContents": "Table of Contents", "IntroductionToImplementingDDD": "Introduction to Implementing the Domain Driven Design", "WhatIsDDD": "What is the Domain Driven Design?", @@ -251,6 +254,8 @@ "DomainAndApplicationLogic": "Domain Logic & Application Logic", "Author": "Author", "Pages": "Pages", + "Purchase_Page_Title": "{0} License", + "Purchase_Page_Description": "Don't waste time reinventing the wheel. Purchase the {0} License and start coding your business today!", "PublishedOn": "Published on", "FreeEBook": "Free E-Book", "Download": "Download", @@ -261,7 +266,8 @@ "Name": "Name", "Surname": "Surname", "CompanyName": "Company name", - "DoYouAgreePrivacyPolicy": "I agree to the Terms & Conditions and Privacy Policy.", + "CompanyAddress" : "Company Address", + "TaxNumber" : "Tax Number", "Free": "Free", "DDDEBook": "DDD E-Book", "PracticalGuideForImplementingDDD": "This book is a practical guide for implementing the Domain Driven Design with the ABP Framework.", @@ -276,7 +282,7 @@ "GoHome": "Go Home", "InvalidFormInputs": "Please, type the valid information specified on the form.", "DDDBookEmailBody": "Thank you.
To download your book, click here.", - "SubscribeToNewsletter": "Subscribe to the newsletter to get information about happenings in the ABP.IO Platform, such as new releases, posts, offers, and more.", + "SubscribeToNewsletter": "Subscribe to the newsletter to get information about happenings in the ABP Platform, such as new releases, posts, offers, and more.", "FirstEdition": "First Edition", "ThankYou": "Thank you!", "CheckboxMandatory": "You need to check this to proceed!", @@ -300,8 +306,8 @@ "SeparateAuthenticationServer": "Separate Authentication Server", "ProgressiveWebApplication": "Progressive Web Application", "Preview": "Preview", - "CreateANewSolution": "Create a new solution", - "ABPFrameworkFeatures": "ABP Framework Features", + "CreateANewSolution": "Create a New .NET Solution", + "FrameworkFeatures": "Framework Features", "Commercial": "Commercial", "ThirdPartyTools": "Third Party Tools", "Back": "Back", @@ -309,7 +315,7 @@ "SeeMore": "See More", "DetailsOfTheEBook": "Details of the E-Book", "JoinOurMarketingNewsletter": "Join our marketing newsletter", - "FrameworkNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", + "FrameworkNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", "GetYourFreeEBook": "Get Your Free DDD E-book ", "EverythingYouNeedToKnow": "Everything you need to know.", "PreOrderNow": "Pre-Order Now", @@ -317,11 +323,11 @@ "UIThemingExplanation": "Create reusable UI themes and layouts or use one of the pre-built UI themes.", "DataFilteringExplanation2": "Automatically filter on querying from the database to easily implement patterns like soft-delete and multi-tenancy.", "NeedHelp": "Need Help?", - "GiveYourProjectAName": "Give your project a name", - "SelectProjectType": "Select Project Type", - "SelectUIFramework": "Select UI Framework", - "SelectDatabaseProvider": "Select Database Provider", - "SelectDatabaseManagementSystem": "Select Database Management System", + "GiveYourProjectAName": "Give Your Project a Name", + "SelectProjectType": "Select a Project Type", + "SelectUIFramework": "Select a UI Framework", + "SelectDatabaseProvider": "Select a Database Provider", + "SelectDatabaseManagementSystem": "Select a Database Management System", "InstallingTheABPCLI": "Installing the ABP CLI", "CreateYourProjectNow": "Create Your Project Now", "OrderOn": "Order on {0}", @@ -356,6 +362,8 @@ "BuyOnDangDang": "Buy on DangDang", "BuyOnJD": "Buy on JD", "Discounted": "Discounted", + "MasteringAbpBookTitle": "Mastering ABP Framework", + "MasteringAbpBookDescription": "Written by the creator of ABP, this book will help you to gain a complete understanding of the ABP and web app development techniques.", "MasteringAbpFramework_Book_KeyFeatures": "Key Features", "MasteringAbpFramework_Book_Key_Features_Description_1": "Build robust, maintainable, modular, and scalable software solutions using ABP Framework.", "MasteringAbpFramework_Book_Key_Features_Description_2": "Learn how to implement SOLID principles and domain-driven design in your web applications.", @@ -373,7 +381,7 @@ "MasteringAbpFramework_Book_What_You_Will_Learn_6": "Work with multi-tenancy to create modular web applications.", "MasteringAbpFramework_Book_What_You_Will_Learn_7": "Understand modularity and create reusable application modules.", "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Write unit, integration, and UI tests using ABP Framework.", - "MasteringAbpFramework_Book_WhoIsThisBookFor": "Who's this book for", + "MasteringAbpFramework_Book_WhoIsThisBookFor": "Who's This Book For", "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "This book is for web developers who want to learn software architectures and best practices for building\n maintainable web-based solutions using Microsoft technologies and ABP Framework. Basic knowledge of C#\n and ASP.NET Core is necessary to get started with this book.", "ComputersAndTechnology": "Computers & Technology", "BuildingMicroserviceSolutions": "Building Microservice Solutions", @@ -390,13 +398,13 @@ "ThisBookIsInDraftStageAndIsNotCompletedYet": "This book is in draft stage and is not completed yet.", "Authors": "Authors", "MicroserviceEBook": "Microservice E-Book", - "SelectUITheme": "Select UI Theme", + "SelectUITheme": "Select a UI Theme", "LeptonXLiteTheme": "LeptonX Lite Theme", "BasicTheme": "Basic Theme", "LeptonXLiteThemeInfo": " A modern and stylish Bootstrap UI theme. Ideal if you want to have a production ready UI theme. This is the newest theme and is the default.", "BasicThemeInfo": "Minimalist UI theme with plain Bootstrap colors and styles. Ideal if you will build your own UI theme.", - "SeeDocumentation": "See documentation.", - "SeeFullScreen": "🖼️ See the screenshot", + "SeeDocumentation": "See documentation.", + "SeeFullScreen": "🖼️ See the screenshot", "BuildingMicroserviceSolutionsShortDescription": "This book is a reference guide for developing and managing microservice-based applications using the ABP Framework.", "InstallAbpCliMessage": "Install the ABP CLI in a command line terminal, if you haven't installed it before:", "Terminal": "Terminal", @@ -424,22 +432,24 @@ "CreateSolutionFolder": "Create Solution Folder", "CreateSolutionFolderOption": "Specifies if the project will be in a new folder in the output folder or directly the output folder.", "BooksPageTitle": "ABP Books", + "BooksPageDescription": "Explore ABP books to deepen your understanding and mastery of ABP.", "PackageDetailPage_NuGetPackageInstallationOptions": "There are three ways to install {0} NuGet package to your project", "PackageDetailPage_InstallingWithABPCLI": "1: Installing with the ABP CLI", - "PackageDetailPage_InstallingWithABPCLIDescription1": "If you haven't installed the ABP CLI, first install by executing the following command in a command-line terminal", + "PackageDetailPage_InstallingWithABPCLIDescription1": "If you haven't installed the ABP CLI, first install by executing the following command in a command-line terminal", "PackageDetailPage_InstallingWithABPCLIDescription2": "Once you have installed the ABP CLI, open a command-line terminal in the location of the project (.csproj file) you want to install it and execute the following command", "PackageDetailPage_InstallingWithABPCLIDescription3": "It will add the {0} package reference to your project and the {1} dependency to your module class.", "PackageDetailPage_ManualInstallation": "2: Installing with the Dotnet CLI", "PackageDetailPage_ManualInstallationDescription1": "Add {0} NuGet package reference to your project using your IDE or executing the following command", - "PackageDetailPage_ManualInstallationDescription2": "Then add the {0} dependency to your module class as shown in the following example", + "PackageDetailPage_ManualInstallationDescription2": "Then add the {0} dependency to your module class as shown in the following example", "PackageDetailPage_SeeDocumentation": "See the documentation to learn how to use this package in your applications.", "PackageDetailPage_InstallingUsingPMC": "3: Installing with the Package Manager Console", "PackageDetailPage_InstallingUsingPMCDescription1": "Open the Package Manager Console in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command", "UIOptions": "UI Options", "Testimonials": "Testimonials", + "TestimonialsDescription": "Our clients' feedback is invaluable to us. Discover what they have to say about their experience working with us.", "CoolestCompaniesUseABPFramework": "Coolest Companies Use ABP Framework", "Index_Page_Testimonial_1": "ABP Framework is not just a tool but a catalyst that has accelerated my growth as a developer. It has made it possible for me to build new features faster than ever before, reminiscent of the experiences of other users. The unified coding pattern has streamlined my projects, giving me more time to focus on creating rather than troubleshooting.\nI would say the ABP Framework has been the cornerstone of my early professional journey. It has facilitated my transition from an aspiring developer to a confident professional ready to make a mark in the software world. I am looking forward to the exciting projects that await me, knowing that ABP will be there to guide me. It is more than just a product; it's a partner in success.", - "Index_Page_Testimonial_2": "ABP Framework is not only a framework, it is also a guidance for project development/management, because it provides DDD, GenericRepository, DI, Microservice, Modularity trainings. Even if you are not going to use framework itself, you can develop yourself with docs.abp.io which is well and professionally prepared. (OpenIddict, Redis, Quartz etc.)\nBecause many thing pre-built, it shortens project development time significantly. (Such as login page, exception handling, data filtering-seeding, audit logging, localization, auto api controller etc.)\nAs an example from our app, i have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler.\nIt is wonderful not to lose time for CreationTime, CreatorId. They are filled automatically.", + "Index_Page_Testimonial_2": "ABP Framework is not only a framework, it is also a guidance for project development/management, because it provides DDD, GenericRepository, DI, Microservice, Modularity trainings. Even if you are not going to use framework itself, you can develop yourself with abp.io/docs which is well and professionally prepared. (OpenIddict, Redis, Quartz etc.)\nBecause many thing pre-built, it shortens project development time significantly. (Such as login page, exception handling, data filtering-seeding, audit logging, localization, auto api controller etc.)\nAs an example from our app, i have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler.\nIt is wonderful not to lose time for CreationTime, CreatorId. They are filled automatically.", "VideosLoginAndRegisterMessage": "To be able to watch videos, you must sign in.", "Filter": "Filter", "VideoCourses": "Essential Videos", @@ -449,7 +459,7 @@ "FullName": "Full name", "CompanySize": "Company size", "TestimonialTitle": "Let's hear your testimonial", - "TestimonialInfo": "What our customers say matters! Tell us about your experience with our product and service. It is recommended to write the testimonial in English to reach a wider audience.", + "TestimonialInfo": "What you say matters! Tell us about your experience with ABP in a few sentences. Please write it in English to reach a wider audience.", "Country": "Country", "TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project.", "PositionPlaceholder": "Your position at your company", @@ -467,11 +477,12 @@ "TestimonialSend": "Thank you! We've received your testimonial.
We'll review and take the next step soon.", "Title": "Title", "TitlePlaceholder": "Software Developer, CTO etc.", - "Characters": "characters", + "characters": "characters", "Testimonial_YourProfilePicture": "Your profile picture (only {0})", "BootstrapCardTitle": "This is a sample card component built by ABP bootstrap card tag helper.", "GoSomewhere": "Go somewhere →", - "ABPTestimonialDescription": "ABP Framework: Let's hear your testimonial", + "ABPTestimonialTitle": "New Testimonial", + "ABPTestimonialDescription": "Submit your testimonial to the ABP Community by sharing your experiences and feedback about the framework.", "NotValidEmailAddress": "The Email field is not a valid e-mail address.", "EmailAddressMaxLength": "The field Email must be a string with a maximum length of 255.", "EmailAddressRequired": "The Email field is required.", @@ -480,14 +491,1406 @@ "AddressLength": "The field Address must be a string with a maximum length of 255.", "GenderRequired": "The Gender field is required.", "LeaveUsReview": "Leave us review", - "ABPVideoCoursesDescription": "Learn the basics of the ABP Framework through video courses created by the ABP team.", - "ABPVideoCoursesPageDescription": "Learn the basics of the ABP Framework through video courses created by the ABP team. In this video series, you will learn the essential topics of the ABP Framework. The numbers on each video are written according to the learning flow.", + "ABPVideoCoursesDescription": "Learn fundamental concepts and usage of ABP Framework in this video course series. Ideal for newbies!", + "ABPVideoCoursesPageDescription": "In this video series, you will learn the key topics of the ABP Framework through videos prepared by the ABP Team.", "DocumentationButtonTitle": "Documentation", - "ABPVideoCoursesTitle": "ABP Essential Videos", + "ABPVideoCoursesTitle": "Essentials Videos", "LovedDevelopers": "Loved by thousands of developers
around the world", - "ABPIOPlatformPackages": "ABP.IO Platform Packages", - "AbpPackagesDescription": "ABP templates are being distributed as NuGet and NPM packages. Here are all the official NuGet and NPM packages used by the ABP.IO Platform.", + "ABPIOPlatformPackages": "ABP Packages", + "AbpPackagesDescription": "Extend your application with various packages available in ABP, adding functionality and features.", "Cancel": "Cancel", - "Continue": "Continue" + "Continue": "Continue", + "WhatIsTheABPIOPlatform": "What is the ABP Platform?", + "AbpIoPlatformExplanation1": "ABP Platform is a comprehensive infrastructure for application development based on .NET and ASP.NET Core platforms. It fills the gap between the plain ASP.NET Core platform and the complex requirements of modern business software development.", + "AbpIoPlatformExplanation2": "In the core, it provides an open source and free framework that consists of hundreds of NuGet and NPM packages, 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.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation3": "For more information about the differences between the license types, please see the pricing page.", + "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 How it works page to learn how to use the ABP Platform in practice.", + "SupportPolicyFaqExplanation1": "We provide two kinds of support: community support for users with a non-commercial license and premium support for commercial license holders. Community support is available on platforms like GitHub and Stackoverflow, where support is limited. On the other hand, premium support is provided on the official ABP Support website. Here, your questions are answered directly by the core ABP developers, ensuring higher quality support.", + "SupportPolicyFaqExplanation2": "Premium support details: We support only the active and the previous major version. We do not guarantee patch releases for the 3rd and older major versions. For example, if the active version is 7.0.0, we will release patch releases for both 6.x.x and 7.x.x. Besides, we provide support only for ABP Platform related issues. This means no support is given for the 3rd party applications, cloud services and other peripheral libraries used by ABP products.", + "SupportPolicyFaqExplanation3": "We commit to using commercially reasonable efforts to provide our customers with technical support during the official business hours of \"Volosoft Bilisim A.S\". However, we do not commit to a Service-Level Agreement (SLA) response time, but we will try to respond to the technical issues as quickly as possible within our official working hours. Unless a special agreement is made with the customer, support is provided exclusively at {1}. Furthermore, private email support is available only to Enterprise License holders.", + "HowManyProducts": "How many different products/solutions can I build?", + "HowManyDevelopers": "How many developers can work on the solutions using the ABP Platform?", + "HowManyDevelopersExplanation": "ABP.IO licenses are issued per developer. Different license types come with varying developer limits. However, you can add more developers to any license type whenever you need. For information on license types, developer limits, and the costs for additional developers, please refer to the pricing page.", + "ChangingLicenseTypeExplanation": "You can upgrade to a higher license by paying the difference during your active license period. When you upgrade to a higher license plan, you get the benefits of the new plan, however the license upgrade does not change the license expiry date. Besides, you can add new developer seats to your existing license. For details on how many developers can work on solutions using the ABP Platform, please see the 'How many developers can work on the solutions using the ABP Platform?' question.", + "DowngradeLicensePlanExplanation": "You cannot downgrade your existing license plan. For further information, contact us at info@abp.io.", + "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": "Renewal: 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.", + "LicenseExtendUpgradeDiffExplanation2": "Upgrading: By upgrading your license, you will be promoted to a higher license plan, allowing you to receive additional benefits. Check out the pricing page to see the differences between the license plans. On the other hand, when you upgrade, your license expiry date will not change! 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;", + "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 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.", + "WhatHappensWhenLicenseEndsExplanation8": "You can renew (extend) your license to continue receiving these benefits. If you renew your license within {3} days after it expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}.", + "WhenShouldIRenewMyLicenseExplanation1": "If you renew your license within 30 days after it expires, the following discounts will be applied:", + "WhenShouldIRenewMyLicenseExplanation2": "{0} for Team Licenses;", + "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 organization management page. If you want to turn on or off the auto-renewal, visit the organization management page, 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 sales@volosoft.com. 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, ABP CLI provides an update command that automatically finds and upgrades all ABP-related packages in your solution.", + "HowToUpgradeExplanation3": "Beyond automatic package upgrades, we also publish a migration guide if the new version requires some manual steps to upgrade or it has some notes to be considered. Keep following the ABP blog for the news about new releases.", + "DatabaseSupportExplanation": "ABP is database agnostic and can work with any database provider by its nature. For a list of currently implemented providers, please check out the Data Access document.", + "MicroserviceSupportExplanation1": "Yes, it supports microservice architectures.", + "MicroserviceSupportExplanation2": "One of the major goals of the ABP platform is to provide a convenient infrastructure to create microservice solutions. All the official ABP application modules are designed to support microservice deployment scenarios (with its own API and database) by following the Module Development Best Practices document.", + "MicroserviceSupportExplanation3": "ABP Platform commercial licenses also includes a microservice startup template which can be used to directly create a production ready base solution for your microservice system.", + "MicroserviceSupportExplanation4": "For the non-paid users, we are also providing an example e-commerce solution 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: How to download the source-code?", + "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.", + "DifferencePaidLicenseExplanation2": "Personal License; on the other hand, is a type of license for private individuals/freelancers/independent developers who purchase licenses with their own funds and solely for their own use. The Personal License has some limitations. In this plan, there can only be 1 developer working on the ABP project and no additional developers are allowed to be added later to the project. Downloading the source-code of PRO modules is not allowed in the personal license plan. There is no microservice template in this plan. There is no tier architecture (Web and HTTP API layers are physically separated) in this plan. Personal License holders can only use the following modules: Account, Audit Logging UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI and SaaS. Personal License holders cannot use the following modules: Chat, CMS-Kit PRO, File Management, Forms, Payment, Text Template Management, and Twilio SMS. You can access the full module list at abp.io/modules.", + "ReadyToStart": "Ready to start?", + "TransformYourIdeasIntoRealityWithOurProfessionalNETDevelopmentServices": "Transform your ideas into reality with our professional .NET development services.", + "ReadyToUpgrade": "Ready to upgrade?", + "SendServiceRequest": "Send a Service Request", + "Permission:CommunityPost": "Community Post", + "Permission:Edit": "Edit", + "Waiting": "Waiting", + "Approved": "Approved", + "Rejected": "Rejected", + "Wait": "Wait", + "Approve": "Approve", + "Reject": "Reject", + "ReadPost": "Read Post", + "Status": "Status", + "ContentSource": "Content Source", + "Details": "Details", + "CreationTime": "Creation time", + "Save": "Save", + "SameUrlAlreadyExist": "Same url already exists if you want to add this post, you should change the url!", + "UrlIsNotValid": "Url is not valid.", + "UrlNotFound": "Url not found.", + "UrlContentNotFound": "Url content not found.", + "Summary": "Summary", + "MostRead": "Most Read", + "Latest": "Latest", + "ContributeAbpCommunity": "Contribute to the ABP Community", + "ContributionGuide": "Contribution Guide", + "BugReport": "Bug Report", + "SeeAllPosts": "See All Posts", + "WelcomeToABP": "Welcome to the ABP", + "FeatureRequest": "Feature Request", + "CreatePostTitleInfo": "Title of the post to be shown on the post list.", + "CreatePostSummaryInfo": "A short summary of the post to be shown on the post list. Maximum length: {0}", + "CreatePostCoverInfo": "For creating an effective post, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.
Maximum file size: 1MB.", + "CreatePostCoverInfo_Title": "Add a cover image to your post.", + "CreatePostCoverInfo1": "Accepted file types : JPEG, JPG, PNG", + "CreatePostCoverInfo2": "Max file size : 1 MB", + "CreatePostCoverInfo3": "Image proportion : 16:9", + "CreatePostCoverInfo4": " Download a sample cover image ", + "ThisExtensionIsNotAllowed": "This extension is not allowed.", + "TheFileIsTooLarge": "The file is too large.", + "GoToThePost": "Go to the Post", + "GoToTheVideo": "Go to the Video", + "Contribute": "Contribute", + "OverallProgress": "Overall Progress", + "Done": "Done", + "Open": "Open", + "Closed": "Closed", + "RecentQuestionFrom": "Recent question from {0}", + "Stackoverflow": "Stackoverflow", + "Votes": "votes", + "Answer": "Answer", + "views": "views", + "Answered": "Answered", + "WaitingForYourAnswer": "Waiting for your answer", + "Asked": "asked", + "AllQuestions": "All Questions", + "NextVersion": "Next Version", + "MilestoneErrorMessage": "Could not get the current milestone details from Github.", + "QuestionItemErrorMessage": "Could not get the latest question details from Stackoverflow.", + "Oops": "Oops!", + "CreatePostSuccessMessage": "The Post has been successfully submitted. It will be published after a review from the site admin.", + "Browse": "Browse", + "CoverImage": "Cover Image", + "ShareYourExperiencesWithTheABPFramework": "ABP Community Articles | Read or Submit Articles", + "CommunityVideosTitle": "ABP Community Videos | Watch and Share Your Videos", + "CommunityVideosDescription": "Watch the video tutorials, get informed about ABP news & updates and share your experiences with the community.", + "UpdateUserWebSiteInfo": "Example: https://johndoe.com", + "UpdateUserTwitterInfo": "Example: johndoe", + "UpdateUserGithubInfo": "Example: johndoe", + "UpdateUserLinkedinInfo": "Example: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Example: Volosoft", + "UpdateUserJobTitleInfo": "Example: Software Developer", + "UserName": "Username", + "Company": "Company", + "PersonalWebsite": "Personal Website", + "RegistrationDate": "Registration Date", + "Social": "Social", + "Biography": "Biography", + "HasNoPublishedPostsYet": "has no published posts yet", + "LatestGithubAnnouncements": "Latest Github Announcements", + "SeeAllAnnouncements": "See All Announcements", + "LatestBlogPost": "Latest Blog Post", + "Edit": "Edit", + "ProfileImageChange": "Change the profile image", + "BlogItemErrorMessage": "Could not get the latest blog post details from ABP.", + "PlannedReleaseDate": "Planned release date", + "CommunityPostRequestErrorMessage": "Could not get the latest post request from Github.", + "PostRequestFromGithubIssue": "There aren't any post requests now.", + "LatestPosts": "Latest Posts", + "ArticleRequests": "Request a content", + "ArticleRequestsDescription": "Want to see a specific content here? You can ask the community to create it!", + "LatestContentRequests": "Latest content requests", + "AllPostRequests": "See All Post Requests", + "SubscribeToTheNewsletter": "Subscribe to the Newsletter", + "NewsletterEmailDefinition": "Get information about happenings in ABP, such as new releases, free sources, posts, and more.", + "NoThanks": "No, thanks", + "MaybeLater": "Maybe later", + "JoinOurPostNewsletter": "Join our post newsletter", + "Marketing": "Marketing", + "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", + "PostRequestMessageTitle": "Open an issue on GitHub to request a post/tutorial you want to see on this website.", + "PostRequestMessageBody": "Here's a list of the requested posts by the community. Do you want to write a requested post? Please click on the request and join the discussion.", + "Language": "Language", + "CreatePostLanguageInfo": "The language for the post content.", + "VideoPost": "Video Post", + "Post": "Post", + "Read": "Read", + "CreateGithubPostUrlInfo": "Full URL of the Markdown file on GitHub (example).", + "CreateVideoContentUrlInfo": "Original Youtube URL of the post.", + "CreateExternalPostUrlInfo": "Original External Url of the post.", + "VideoContentForm": "Submit Video on YouTube", + "GithubPostForm": "Submit Post on GitHub", + "ExternalPostForm": "Submit an External Content", + "HowToPost": "How to Post?", + "Posts": "Posts", + "VideoUrl": "Video Url", + "GithubPostUrl": "GitHub Post Url", + "ExternalPostUrl": "External Post Url", + "ThankYouForContribution": "Thank you for contributing to the ABP Community. We accept articles and video tutorials on ABP Framework, .NET, ASP.NET Core and general software development topics.", + "GithubPost": "GitHub Post", + "GithubPostSubmitStepOne": "1. Write a post on any public GitHub repository with the Markdown format. example", + "GithubPostSubmitStepTwo": "2. Submit your post URL using the form.", + "GithubPostSubmitStepThree": "3. Your post will be rendered in this website.", + "YoutubeVideo": "Youtube Video", + "YoutubeVideoSubmitStepOne": "1. Publish your video on YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Submit the video URL using the form.", + "YoutubeVideoSubmitStepThree": "3. Visitors will be able to watch your video content directly on this website.", + "ExternalContent": "External Content", + "ExternalContentSubmitStepOne": "1. Create a content on any public platform (Medium, your own blog or anywhere you like).", + "ExternalContentSubmitStepTwo": "2. Submit your content URL using the form.", + "ExternalContentSubmitStepThree": "3. Visitors are redirected to the content on the original website.", + "ChooseYourContentType": "Please choose the way you want to add your content.", + "PostContentViaGithub": "I want to add my post with GitHub in accordance with the markdown rules.", + "PostContentViaYoutube": "I want to share my videos available on Youtube here.", + "PostContentViaExternalSource": "I want to add the content I published on another platform here.", + "GitHubUserNameValidationMessage": "Your Github username can not include whitespace, please make sure your Github username is correct.", + "PersonalSiteUrlValidationMessage": "Your personal site URL can not include whitespace, please make sure your personal site URL is correct.", + "TwitterUserNameValidationMessage": "Your Twitter username can not include whitespace, please make sure your Twitter username is correct.", + "LinkedinUrlValidationMessage": "Your Linkedin URL can not include whitespace, please make sure your Linkedin URL is correct.", + "NoPostsFound": "No posts found!", + "SearchInPosts": "Search in posts...", + "MinimumSearchContent": "You must enter at least 3 characters!", + "Volo.AbpIo.Domain:060001": "Source URL(\"{PostUrl}\") is not Github URL", + "Volo.AbpIo.Domain:060002": "Post Content is not available from Github(\"{PostUrl}\") resource.", + "Volo.AbpIo.Domain:060003": "No post content found!", + "JoinTheABPCommunity": "Join the ABP Community", + "ABPCommunityTalks": "ABP Community Talks", + "LiveDemo": "Live Demo", + "GetLicense": "Get a License", + "SourceCode": "Source Code", + "LeaveComment": "Leave Comment", + "ShowMore": "Show More", + "NoPublishedPostsYet": "No published posts yet.", + "FullURL": "Full URL", + "JobTitle": "Job Title", + "Prev": "Prev", + "Previous": "Previous", + "Next": "Next", + "Share": "Share", + "SortBy": "Sort by", + "NoPublishedEventsYet": "No published events yet.", + "SubscribeYoutubeChannel": "Subscribe to the Youtube Channel", + "Enum:EventType:0": "Talks", + "MemberNotPublishedPostYet": "This member hasn't published any posts yet.", + "MemberNotPublishedArticlesYet": "This member hasn't published any articles yet.", + "MemberNotPublishedVideosYet": "This member hasn't published any videos yet.", + "TimeAgo": "{0} ago", + "Discord_Page_JoinCommunityMessage": "Join ABP Discord Community", + "Discord_Page_Announce": "We are happy to announce ABP Community Discord Server!", + "Discord_Page_Description_1": "ABP Community has been growing since day one. We wanted to take it to the next step by creating an official ABP Discord server so the ABP Community can interact with each other using the wonders of instant messaging.", + "Discord_Page_Description_2": "ABP Community Discord Server is the place where you can showcase your creations using ABP Framework, share the tips that worked for you, catch up with the latest news and announcements about ABP Framework, just chat with community members to exchange ideas, and have fun!", + "Discord_Page_Description_3": "This ABP Community Discord Server is the official one with the ABP Core Team is present on the server to monitor.", + "Discord_Page_JoinToServer": "Join ABP Discord Server", + "Events_Page_MetaTitle": "ABP Events | Community Talks", + "Events_Page_MetaDescription": "Live ABP Community Talks hosted by the ABP Team and casual sessions full of community content, demos, Q&A, and discussions around what's happening in ABP.", + "Events_Page_Title": "ABP Community Talks", + "Members_Page_WritingFromUser": "Read writing from {0} on ABP Community.", + "Post_Create_Page_MetaTitle": "New Community Post", + "Post_Create_Page_MetaDescription": "Submit your own posts to the ABP Community platform, contributing your insights and experiences.", + "Post_Create_Page_CreateNewPost": "Create New Post", + "Post_Index_Page_MetaDescription": "Write, read articles or watch videos about ABP and .NET. Keep informed about the latest developments.", + "Layout_Title": "{0} | ABP Community", + "Layout_MetaDescription": "A hub for ABP Framework, .NET, and software development. Access articles, tutorials, news, and contribute to the ABP community.", + "Index_Page_CommunityIntroduction": "This is a hub for ABP Framework, .NET and software development. You can read the articles, watch the video tutorials, get informed about ABP’s development progress and ABP-related events, help other developers and share your expertise with the ABP community.", + "TagsInArticle": "Tags in Article", + "IConsentToMedium": "I consent to the publication of this post at https://medium.com/volosoft.", + "SearchResultsFor": "Search results for \"{0}\"", + "SeeMoreVideos": "See More Videos", + "DiscordPageTitle": "Discord", + "DiscordPageDescription": "Join the ABP Community Discord to chat with other members, discuss ideas, and get support about ABP.", + "ViewVideo": "View Video", + "AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework", + "CommunitySlogan": "A unique community platform for ABP Lovers", + "RaffleIsNotActive": "Raffle is not active", + "YouAreAlreadyJoinedToThisRaffle": "You already joined to this raffle!", + "InvalidSubscriptionCode": "Invalid subscription code", + "Raffle:{0}": "Raffle: {0}", + "Join": "Join", + "Leave": "Leave", + "LoginToJoin": "Login to join", + "ToEnd:": "To end:", + "ToStart:": "To start:", + "days": "days", + "hrs": "hrs", + "min": "min", + "sec": "sec", + "Winners": "Winners", + "To{0}LuckyWinners": "to {0} lucky winners", + "ActiveRaffles": "Active Raffles", + "UpcomingRaffles": "Upcoming Raffles", + "CompletedRaffles": "Completed Raffles", + "NoActiveRaffleTitle": "No active raffle is available at the moment.", + "NoActiveRaffleDescription": "No active raffle is available at the moment.", + "RaffleSubscriptionCodeInputMessage": "This raffle requires a registration code. Please enter the registration code below:", + "RaffleSubscriptionCodeInputErrorMessage": "The registration code is incorrect. Please try again.", + "GoodJob!": "Good Job!", + "RaffleJoinSuccessMessage": "You are successfully registered for the raffle. You will be informed via email if you win the prize!", + "RaffleLoginAndRegisterMessage": "You must sign in to join this raffle! If you haven't registered yet, create an account for free now.", + "Ok": "Ok", + "WaitingForTheDraw": "Wait for the draw!", + "AllAttendees": "All Attendees", + "SeeRaffleDetail": "See Raffle Detail", + "SeeRaffle": "See Raffle", + "ParticipationIsComplete": "Participation is complete.", + "ABPCoreDevelopmentTeam": "ABP Core Development Team", + "RegisterTheEvent": "Register the Event", + "GoToConferencePage": "Go to Conference Page", + "BuyTicket": "Buy Ticket", + "SeeEvent": "See Event", + "PreviousEvents": "Previous Events", + "OtherLiveEvents": "Other Live Events", + "SponsoredConferences": "Sponsored Conferences", + "SponsoredConferencesDescription": "We are honoring to support .NET communities and events for software developers.", + "UpcomingEvents": "Upcoming Events", + "UpcomingCommunityTalkEventDescription": "The live shows, hosted by the ABP Team, are casual sessions full of community content, demos, Q&A, and discussions around what's happening in ABP.", + "UpcomingConferenceEventDescription": "ABP .NET Conference is a virtual event for the .NET Developer community to come together and listen to talks about the .NET world, common software development practices and the open source ABP Framework.", + "LastOneYear": "Last 1 Year", + "AllTimes": "All Times", + "TopContributors": "Top Contributors", + "{0}Posts": "{0} Posts", + "LATESTPOSTS": "LATEST POSTS", + "NoContributorsFound": "No contributors found!", + "LatestPost": "Latest post", + "MEMBERSINCE{0}": "MEMBER SINCE {0}", + "CopyLink": "Copy Link", + "ShareOnTwitter": "Share on Twitter", + "ShareOnLinkedIn": "Share on LinkedIn", + "MoreFrom{0}": "More from {0}", + "SeeAllFrom{0}": "See all from {0}", + "MostWatched": "Most Watched", + "Articles({0})": "Articles ({0})", + "Videos({0})": "Videos ({0})", + "LatestArticles": "Latest Articles", + "Raffles": "Raffles", + "RafflesPageTitle": "ABP Community Raffles | Join and Win ABP Raffles", + "RafflesDescription": "Check the upcoming raffles, attend them and be a winner for various ABP licences.", + "RaffleHeader": "Hello ABP Community Member!", + "RafflesInfo": "
This is the raffle page dedicated to show our appreciation towards you for being an active Community Member. We do ABP Community Talks ABP Dotnet Conference, attend or sponsor to the .NET-related events in which we give away some gifts.

You can follow this page to see the upcoming raffles, attend them, or see previous raffles we draw including the winners.

Thank you for being an active member! See you in the upcoming raffles.", + "RafflesInfoTitle": "ABP Community Raffles", + "ToLuckyWinner": "to 1 lucky winner", + "MarkdownSupported": "Markdown supported.", + "VisitPage": "Visit Page", + "VisitVideoCourseDescription": "If you want to learn the basics of the ABP Framework, check out the ABP Essentials Video courses.", + "EditProfile": "Edit Profile", + "ConfirmEmailForPost": "To be able to post, you need to confirm your email. Go to account.abp.io/Account/Manage and verify your email in the Personal Info tab.", + "DailyPostCreateLimitation": "You have reached the daily post creation limit. You can create a new post in {0}.", + "OrganizationManagement": "Organization Management", + "OrganizationList": "Organization list", + "Volo.AbpIo.Commercial:010003": "You are not the owner of this organization!", + "OrganizationNotFoundMessage": "No organization found!", + "DeveloperCount": "Allocated / total developers", + "QuestionCount": "Remaining / total questions", + "Unlimited": "Unlimited", + "Owners": "Owners", + "Owner": "Owner", + "AddMember": "Add Member", + "AddNewOwner": "Add New Owner", + "AddNewDeveloper": "Add New Developer", + "Developers": "Developers", + "LicenseType": "License type", + "Manage": "Manage", + "SetDefault": "Set as default", + "DefaultOrganization": "Default", + "StartDate": "Start date", + "EndDate": "End date", + "Modules": "Modules", + "LicenseExtendMessage": "Your license end date is extended to {0}", + "LicenseUpgradeMessage": "Your license is upgraded to {0}", + "LicenseExtendAdnUpgradeMessage": "Your license has been extended until {0} and your license plan is upgraded to {1}.", + "LicenseAddDeveloperMessage": "{0} developers added to your license", + "Volo.AbpIo.Commercial:010004": "Can not find the specified user! The user must have already been registered.", + "MyOrganizations": "My organizations", + "ApiKey": "API Key", + "UserNameNotFound": "There is no user with the username {0}", + "SuccessfullyAddedToNewsletter": "Thank you for subscribing to our newsletter!", + "MyProfile": "My profile", + "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing news like product deals & special offers.", + "StartUsingYourLicenseNow": "Start using your license now!", + "WelcomePage": "Welcome Page", + "UnsubscriptionExpireEmail": "Unsubscribe from license expiration date reminder emails", + "UnsubscribeLicenseExpireEmailReminderMessage": "This email subscription only contains reminders of your license expiration date.", + "UnsubscribeFromLicenseExpireEmails": "If you don't want to receive the emails about your license expiration date, you can unsubscribe at any time you want.", + "Unsubscribe": "Unsubscribe", + "NotOrganizationMember": "You are not a member of any organization.", + "UnsubscribeLicenseExpirationEmailSuccessTitle": "Successfully unsubscribed", + "UnsubscribeLicenseExpirationEmailSuccessMessage": "You will not receive license expiration date reminder emails anymore.", + "LiveDemoLead": "{1} using your ABP account, {3} to abp.io or fill the form below to create a live demo now", + "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "There is already an account with the given email address: {0}
You should login with your account to proceed.", + "GetLicence": "Get a License", + "Startup": "Startup", + "Templates": "Templates", + "Developer": "Developer", + "Tools": "Tools", + "Premium": "Premium", + "PremiumSupport": "Premium Support", + "PremiumForumSupport": "Premium Forum Support", + "UI": "UI", + "Themes": "Themes", + "JoinOurNewsletter": "Join Our Newsletter", + "Send": "Send", + "OpenSourceBaseFramework": "Open Source Base Framework", + "MicroserviceCompatible": "Microservice compatible", + "DistributedMessaging": "Distributed Messaging", + "DynamicProxying": "Dynamic Proxying", + "BLOBStoring": "BLOB Storing", + "AdvancedLocalization": "Advanced Localization", + "ManyMore": "Many more", + "ExploreTheABPFramework": "Explore the ABP Framework", + "StartupTemplatesShortDescription": "Startup templates make you jump-start your project in a few seconds.", + "UIFrameworksOptions": "UI frameworks options;", + "DatabaseProviderOptions": "Database provider options;", + "PreBuiltApplicationModules": "Pre-Built Application Modules", + "PreBuiltApplicationModulesShortDescription": "Most common application requirements are already developed for you as reusable modules.", + "Account": "Account", + "Blogging": "Blogging", + "Identity": "Identity", + "IdentityServer": "Identity Server", + "LanguageManagement": "Language Management", + "TextTemplateManagement": "Text Template Management", + "See All Modules": "SeeAllModules", + "ABPSuite": "ABP Suite", + "AbpSuiteShortDescription": "ABP Suite is a complementary tool to ABP Platform.", + "AbpSuiteExplanation": "It allows you to build web pages in a matter of minutes. It's a .NET Core Global tool that can be installed from the command line. It can create a new ABP solution and generate CRUD pages from the database to the front-end.", + "LeptonTheme": "Lepton Theme", + "ProfessionalModernUIThemes": "Professional, modern UI themes", + "LeptonThemeExplanation": "Lepton provides a gamut of Bootstrap admin themes that serve as a solid foundation for any project requiring an admin dashboard.", + "DefaultTheme": "Default Theme", + "MaterialTheme": "Material Theme", + "Default2Theme": "Default 2 Theme", + "DarkTheme": "Dark Theme", + "DarkBlueTheme": "Dark Blue Theme", + "LightTheme": "Light Theme", + "ProudToWorkWith": "Proud to Work With", + "JoinOurConsumers": "Join them and build amazing products fast.", + "AdditionalServicesExplanation": "Do you need additional or custom services? We and our partners can provide;", + "CustomProjectDevelopment": "Custom Project Development", + "CustomProjectDevelopmentExplanation": "Dedicated developers for your custom projects.", + "PortingExistingProjects": "Porting Existing Projects", + "PortingExistingProjectsExplanation": "Migrating your legacy projects to the ABP platform.", + "LiveSupport": "Live Support", + "LiveSupportExplanation": "Live remote support option when you need it.", + "Training": "Training", + "TrainingExplanation": "Dedicated training for your developers.", + "OnBoarding": "Onboarding", + "OnBoardingExplanation": "Help to setup your development, CI & CD environments.", + "PrioritizedTechnicalSupport": "Prioritized Technical Support", + "PremiumSupportExplanation": "Besides the great community support of the ABP framework, our support team answers technical questions and problems of the commercial users with high priority.", + "SeeTheSupportOptions": "Check out the Support Options", + "Contact": "Contact", + "TellUsWhatYouNeed": "Tell us what you need.", + "YourMessage": "Your Message", + "YourFullName": "Your full name", + "FirstNameField": "First Name", + "LastNameField": "Last Name", + "EmailField": "E-mail Address", + "YourEmailAddress": "Your e-mail address", + "ValidEmailAddressIsRequired": "A valid e-mail address is required.", + "HowMayWeHelpYou": "How may we help you?", + "SendMessage": "Send Message", + "Success": "Success", + "WeWillReplyYou": "We received your message and will be in touch shortly.", + "CreateLiveDemo": "Create Live Demo", + "CreateLiveDemoDescription": "Once you submit this form, you will receive an email containing your demo link.", + "RegisterToTheNewsletter": "Register for the newsletter to receive information regarding ABP.IO, including new releases etc.", + "EnterYourEmailOrLogin": "Enter your e-mail address to create your demo or Login using your existing account.", + "ApplicationTemplate": "Application Template", + "ApplicationTemplateExplanation": "Application startup template is used to create a new web application.", + "EfCoreProvider": "Entity Framework (Supports SQL Server, MySQL, PostgreSQL, Oracle and others)", + "AlreadyIncludedInTemplateModules": "Following modules are already included and configured in this template:", + "ApplicationTemplateArchitecture": "This application template also supports tiered architecture where the UI layer, API layer and authentication service are physically separated.", + "SeeTheGuideOrGoToTheLiveDemo": "Check out the developer guide for technical information about this template or go to the live demo.", + "DeveloperGuide": "Developer Guide", + "ModuleTemplate": "Module Template", + "ModuleTemplateExplanation1": "You want to create a module and reuse it across different applications? This startup template prepares everything to start to create a reusable application module or a microservice.", + "ModuleTemplateExplanation2": "

You can support single or multiple UI frameworks, single or multiple database providers for a single module. The startup template is configured to run and test your module in a minimal application in addition to the unit and integration test infrastructure.

Check out the developer guide for technical information about this template.

", + "WithAllStyleOptions": "with all style options", + "Demo": "Demo", + "SeeAllModules": "See All Modules", + "ABPCLIExplanation": "ABP CLI is a command line tool to perform common development tasks for ABP-based solutions.", + "ABPSuiteEasilyCURD": "ABP Suite is a tool which allows you to easily create CRUD pages", + "WeAreHereToHelp": "We are Here to Help", + "BrowseOrAskQuestion": "You can browse our help topics or search in the frequently asked questions, or you can ask us a question by using the contact form.", + "SearchQuestionPlaceholder": "Search in frequently asked questions", + "AbpCommercialMetaDescription": "A comprehensive web development platform on ABP Framework with pre-built modules, startup templates, rapid dev tools, pro UI themes & premium support.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP framework is a modular, themeable, microservice compatible application development framework for ASP.NET Core. It provides a complete architecture and a strong infrastructure to let you focus on your own business code rather than repeating yourself for every new project. It is based on the best practices of software development and popular tools you already know.

ABP framework is completely free, open source and community-driven. It also provides a free theme and some pre-built modules (e.g. identity management and tenant management).

", + "VisitTheFrameworkVSCommercialDocument": "Visit the following link for more information {1} ", + "Professional": "Professional", + "UIThemes": "UI Themes", + "EnterpriseModules": "Enterprise ready, feature-rich, pre-built Application Modules (e.g. Identity Server management, SaaS management, language management)", + "ToolingToSupport": "Tooling to support your development productivity (e.g. ABP Suite)", + "PremiumSupportLink": "Premium Support", + "ABPCommercialSolutionExplanation": "When you create a new application, you get a Visual Studio solution (a startup template) based on your preferences. The downloaded solution has commercial modules and themes already installed and configured for you. You can remove a pre-installed module or add another module if you like. All modules and themes use NuGet/NPM packages by default.", + "StartDevelopWithTutorials": "The downloaded solution is well architected and documented. You can start developing your own business code based on it following the tutorials.", + "HowManyProductsExplanation": "You can create as many projects as you want during your active license period; there is no limit! After your license expires, you cannot create new projects, but you can continue to develop the projects you have downloaded and deploy them to an unlimited count of servers.", + "ChangingLicenseType": "Can I upgrade my license type later?", + "LicenseExtendUpgradeDiffExplanation": "Extending: By extending/renewing your license, you will continue to get premium support and get major or minor updates for the modules and themes. Besides, you will be able to continue creating new projects. And you will still be able to use ABP Suite, which speeds up your development. When you extend your license, 1 year is added to your license expiry date.
Upgrading: By upgrading your license, you will be promoted to a higher license plan, which will allow you to get additional benefits. Check out the license comparison table to see the differences between the license plans. On the other hand, when you upgrade, your license expiry date will not change! To extend your license end date, you need to extend your license.", + "LicenseRenewalCost": "What is the license renewal cost after 1 year?", + "LicenseRenewalCostExplanation": "The renewal (extend) price of the standard Team License is ${0}, standard Business License is ${1} and standard Enterprise License is ${2}. If you are already a customer, log into your account to review the current renewal pricing.", + "HowDoIRenewMyLicense": "How do I renew my license?", + "HowDoIRenewMyLicenseExplanation": "You can renew your license by navigating to the organization management page. In order to take advantage of our discounted Early Renewal rates, ensure you renew before your license expires. Don't worry about not knowing when your Early Renewal opportunity closes; you'll receive 3 reminder e-mails before your subscription expires. We'll send them 30 days, 7 days and 1 day before expiration.", + "IsSourceCodeIncluded": "Does my license include the source code of the pro modules and themes?", + "IsSourceCodeIncludedExplanation1": "Depends on the license type you've purchased:", + "IsSourceCodeIncludedExplanation2": "Team: 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": "Business/Enterprise: 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": "

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.

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.

Check out the Plans & Pricing page for other differences between the license types.

", + "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?", + "discountForYears": "{0}% discount for {1} year(s)", + "WhenShouldIRenewMyLicense": "When should I renew my license?", + "WhenShouldIRenewMyLicenseExplanation": "If you renew your license within {3} days after your license expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}. However, if you renew your license after {3} days since the expiry date of your license, the renewal price will be the same as the license purchase price, and there will be no discount on your renewal.", + "TrialPlan": "Do you have a trial plan?", + "DoYouAcceptBankWireTransfer": "Do you accept bank wire transfers?", + "DoYouAcceptBankWireTransferExplanation": "Yes, we accept bank wire transfers.
After sending the license fee via bank transfer, send your receipt and requested license type to accounting@volosoft.com.
Our international bank account information:", + "HowToUpgrade": "How to upgrade existing applications when a new version is available?", + "DatabaseSupport": "Which database systems are supported?", + "UISupport": "Which UI frameworks are supported?", + "Supported": "Supported", + "UISupportExplanation": "ABP Framework itself is UI framework agnostic and can work with any UI framework. However, startup templates, module UIs and themes were not implemented for all UI frameworks. Check out the Getting Started document for the up-to-date list of UI options.", + "MicroserviceSupport": "Does it support the microservice architecture?", + "WhereCanIDownloadSourceCode": "Where can I download the source-code?", + "HowCanIUpgradeMyProjectToCommercialTemplate": "How can I upgrade my open-source project to the commercial PRO templates?", + "HowCanIUpgradeMyProjectToCommercialExplanation": "You can check out our documentation at Migrating from open source templates to upgrade your open-source projects to the paid PRO templates.", + "ComputerLimitation": "How many computers can a developer login when developing ABP?", + "ComputerLimitationExplanation": "We specifically permit {0} computers per individual/licensed developer. Whenever there is a need for a developer to develop ABP based products on a third machine, an e-mail should be sent to license@abp.io explaining the situation, and we will then make the appropriate allocation in our system.", + "RefundPolicy": "Do you have a refund policy?", + "RefundPolicyExplanation": "You can request a refund within 30 days of your license purchase. The Business and Enterprise license types have source-code download options; therefore, we provide a 60% refund within 30 days for Business and Enterprise licenses. In addition, no refunds are made for renewals and second license purchases.", + "HowCanIRefundVat": "How can I refund VAT?", + "HowCanIRefundVatExplanation1": "If you made the payment using 2Checkout, you can refund VAT via your 2Checkout account:", + "HowCanIRefundVatExplanation2": "Log in to 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: Iyzico and 2Checkout. If you purchase your license through the 2Checkout gateway, it sends the PDF invoice to your email address; check out 2Checkout invoicing. If you purchase through the Iyzico gateway, with a custom purchase link or via a 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", + "PrivateTicket": "Private Ticket", + "PrivateTicketExplanation": "Enterprise License also includes a private support with e-mail and ticket system.", + "AbpSuiteExplanation1": "ABP Suite allows you to build web pages in a matter of minutes. It's a .NET Core Global tool that can be installed from the command line.", + "AbpSuiteExplanation2": "It can create a new ABP solution and generate CRUD pages from the database to the front-end. For technical overview see the document", + "FastEasy": "Fast & Easy", + "AbpSuiteExplanation3": "ABP Suite allows you to easily create CRUD pages. You just need to define your entity and its properties and let the rest go to ABP Suite for you! ABP Suite generates all the necessary code for your CRUD page in a few seconds. It supports Angular, MVC and Blazor user interfaces.", + "RichOptions": "Rich Options", + "AbpSuiteExplanation4": "ABP Suite supports multiple UI options like Razor Pages and Angular. It also supports multiple databases like MongoDB and all databases supported by EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL, and other providers...).", + "AbpSuiteExplanation5": "The good thing is that you don't have to worry about those options. ABP Suite understands your project type and generates the code for your project and places the generated code in the correct place in your project.", + "AbpSuiteExplanation6": "ABP Suite generates the source code for Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript and CSHTML/HTML and necessary Interfaces as well. ABP Suite also generates the code according to the Best Practices of software development, so you don't have to worry about the generated code's quality.", + "AbpSuiteExplanation7": "Since you have the source code of the building blocks of the generated CRUD page in the correct application layers, you can easily modify the source code and inject your custom/business logic to the generated code.", + "CrossPlatform": "Cross Platform", + "AbpSuiteExplanation8": "ABP Suite is built with .NET Core, and it is cross-platform. It runs as a web application on your local computer. You can run it on Windows, Mac and Linux", + "OtherFeatures": "Other Features", + "OtherFeatures1": "Updates NuGet and NPM packages on your solution easily.", + "OtherFeatures2": "Regenerates already generated pages from scratch.", + "OtherFeatures3": "Creates new solutions", + "ThanksForCreatingProject": "Your project has been successfully created!", + "HotToRunSolution": "How to run your solution?", + "HotToRunSolutionExplanation": "Check out the getting started document to learn how to configure and run your solution.", + "GettingStarted": "Getting Started", + "WebAppDevTutorialExplanation": "Check out the web application development tutorial document for a step-by-step development sample.", + "Document": "Document", + "UsingABPSuiteToCURD": "Using ABP Suite for CRUD Page Generation & Tooling", + "SeeABPSuiteDocument": "Check out the ABP Suite document to learn the usage of ABP Suite.", + "SeeModulesDocument": "See the modules page for a list of all the PRO modules.", + "Pricing": "Pricing", + "PricingExplanation": "Choose the features and functionality your business needs today. Easily upgrade as your business grows.", + "Team": "Team", + "Business": "Business", + "Enterprise": "Enterprise", + "Custom": "Custom", + "IncludedDeveloperLicenses": "Included developer licenses", + "CustomLicenceOrAdditionalServices": "Need custom license or additional services?", + "CustomOrVolumeLicense": "Custom or volume license", + "LiveTrainingSupport": "Live training & support", + "AndMore": "and more", + "AdditionalDeveloperLicense": "Additional developer license", + "ProjectCount": "Project count", + "AllProModules": "All pro modules", + "AllProThemes": "All pro themes", + "AllProStartupTemplates": "All pro startup templates", + "SourceCodeOfAllModules": "Source code of all modules", + "SourceCodeOfAllThemes": "Source code of all themes", + "PerpetualLicense": "Perpetual license", + "UnlimitedServerDeployment": "Unlimited server deployment", + "YearUpgrade": "1 year upgrade", + "YearPremiumForumSupport": "1-year premium forum support", + "ForumSupportIncidentCountYear": "Forum support incident count/year", + "PrivateTicketEmailSupport": "Private ticket & email support", + "BuyNow": "Buy Now", + "PayViaAmexCard": "How can I pay via my AMEX card?", + "PayViaAmexCardDescription": "The default payment gateway 'Iyzico' may decline some AMEX credit cards due to security measures. In this case, you can pay through the alternative payment gateway '2Checkout'.", + "InvalidReCaptchaErrorMessage": "There was an error verifying reCAPTCHA. Please try again.", + "YourCompanyName": "Your company name", + "FirstName": "First name", + "LastName": "Last name", + "YourFirstName": "Your first name", + "YourLastName": "Your last name", + "SpecialOffer": "Special Offer", + "SpecialOfferMessage": "Hurry up! Prices are valid for a limited time.", + "DiscountRequest": "Discount Request", + "DiscountRequestDescribeCustomerQuestion": "Which of the following describes you?", + "DiscountRequestStudentEmailMessage": "Email Address must contain 'edu'.", + "DiscountRequestDeveloperCount": "How many developers are you?", + "DiscountRequestDeveloperCountExceedMessage": "We don't provide discounted licenses for companies that have over {0} developers.", + "DiscountRequestOrganizationName": "Company/organization/school name", + "Website": "Website", + "GithubUsername": "GitHub username", + "PhoneNumber": "Phone number", + "DescribeABPCommercialUsage": "Describe the project you are planning to develop based on APB Commercial", + "DiscountRequestCertifyInformationMessage": "I certify that all information is true and correct.", + "DiscountRequestReceived": "We have received your discount request.", + "DiscountRequestStatusMessage": "We will respond to you after checking the information you have provided.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "New", + "MongoDB": "MongoDB", + "EBookDDD": "E-Book Domain Driven Design", + "Page": "Page", + "DoYouAgreePrivacyPolicy": "I agree to the Terms & Conditions and Privacy Policy.", + "VolosoftMarketingInformationMessage": "I would like information, tips, and offers about Solutions for Businesses and Organizations and other Volosoft products and services.", + "VolosoftSharingInformationMessage": "I would like Volosoft to share my information with select partners so I can receive relevant information about their products and services.", + "StartFree": "Start free", + "FreeTrial": "Free Trial", + "AcceptsMarketingCommunications": " Yes, I`d like to receive ABP related marketing news.", + "PurposeOfUsage": "Purpose of usage", + "Choose": "- Choose -", + "CompanyOrganizationName": "Company / Organization name", + "StartTrial": "Start My Free Trial", + "ContactUsQuestions": "Contact us if you have any questions", + "TrialActivatedWarning": "A user is entitled to have only 1 free trial period. You already used your trial period.", + "ActivationRequirement": "You are last one step away from starting your trial.
After checking your information, we will activate your license. Once your license is activated, we will send an email to {0}. Don't worry, this process won't take long!", + "SaveAndDownload": "Save And Download", + "CompanyNameValidationMessage": "Company name is too long!", + "AddressValidationMessage": "Address is too long!", + "TaxNoValidationMessage": "TAX/VAT No is too long!", + "NotesValidationMessage": "Notes field is too long!", + "CheckYourBillingInfo": "You can create your invoice only once! Check your billing information before creating your invoice.", + "StartYourFreeTrial": "Start your free trial", + "TrialLicenseModelInvalidErrorMessage": "One of the following fields is invalid: Country Name, Company Size, Industry or Purpose Of Usage.", + "Trial": "Trial", + "Purchased": "Purchased", + "PurchaseNow": "Purchase Now", + "PurchaseTrialLicenseMessage": "Your license expiration date is {0}.
If you want to continue using the projects you created during your free trial period, you need to change the license keys in your appsettings.secrets.json files. Here is your license key:", + "TrialLicenseExpireMessage": "You are using the trial license and your trial license will expire on {0}.", + "TryForFree": "Try For Free", + "TrialLicenseExpiredInfo": "Your trial license period has expired!", + "DowngradeLicensePlan": "Can I downgrade to a lower license plan in the future?", + "LicenseTransfer": "Can a license be transferred from one developer to another?", + "UserOwnerDescription": "The 'Owner' of the organization is the admin of this account. He/she manages the organization by purchasing licenses and allocating developers. An 'Owner' cannot write code in the ABP projects, cannot download the ABP sample projects, and cannot ask questions on the support website. If you want to do all these, you have to add yourself as a developer too.", + "UserDeveloperDescription": "The 'Developers' can write code in the ABP projects, download the ABP sample projects, and ask questions on the support website. On the other hand, the 'Developers' cannot manage this organization.", + "RemoveCurrentUserFromOrganizationWarningMessage": "You are removing yourself from your own organization. You will no longer be able to manage this organization, do you confirm?", + "RenewExistingOrganizationOrCreateNewOneMessage": "You can renew the license of your organization(s) by clicking the below \"Extend Now\" button(s) and thus you can extend the license expiration date by 1 year. If you continue to checkout, you will have a new organization. Do you want to continue with a new organization?", + "PurchaseTrialOrganizationOrCreateNewOneMessage": "You have a trial license. To purchase your trial license click the Purchase Now button. If you continue to checkout, you will have a new organization. Do you want to continue with a new organization?", + "ExtendNow": "Extend / Renew", + "CreateNewOrganization": "Create a new organization", + "RenewLicenseEarly": "If I renew my license early, will I get the full year?", + "RenewLicenseEarylExplanation": "When you renew your license before your license expiration date, 1 year will be added to your license expiration date. For example, if your license expires on {0}-06-06 and you renew it on {0}-01-01, your new license expiration date will be {1}-06-06.", + "OpenSourceWebApplication": "Open source web application", + "CompleteWebDevelopment": "A complete web development", + "ABPFrameworkDescription": "ABP Framework is a complete infrastructure to create modern web applications by following the best practices of software development and conventions.", + "CommunityDescription": "Share your experiences with the ABP Framework!", + "PreBuiltApplication": "Pre-Built Application", + "DatabaseProviders": "Database Providers", + "UIFrameworks": "UI Frameworks", + "UsefulLinks": "Useful Links", + "Platform": "Platform", + "MicroserviceArchitectureExplanation": "This is a complete solution architecture that consists of multiple applications, API gateways, microservices and databases to build a scalable microservice solution with the latest technologies.", + "BusinessLogic": "Business Logic", + "DataAccessLayer": "Data Access Layer", + "Monolith": "Monolith", + "ModularArchitectureExplanation": "This startup template provides a layered, modular and DDD-based solution architecture to build a clean and maintainable codebase.", + "Bs5Compatible": "Bootstrap 5 compatible professional theme, perfect for your admin website.", + "LeptonXTheme": "LeptonX Theme", + "LeptonXDark": "LeptonX Dark", + "LeptonXLight": "LeptonX Light", + "LeptonXSemiDark": "LeptonX Semi-Dark", + "BuiltOnBs5Library": "Built on Bootstrap 5 library", + "FullyCompatibleWithBs5": "100% compatible with Bootstrap 5 HTML structure and CSS classes", + "ResponsiveAndMobileCompatible": "Responsive, mobile-compatible, RTL support", + "ProvidesStylesForDatatables": "Provides styles for Datatables", + "MultipleLayoutOptions": "Multiple layout options", + "EasilyInstallAndUpgrade": "Easily install and upgrade", + "SupportForum": "Support Forum", + "TrustedBy": "Trusted By", + "OurPricing": "Our Pricing", + "Plans": "Plans", + "NameSurname": "Name Surname", + "LicenceType": "Licence Type", + "LicenseDiscountWarning": "THIS DISCOUNT PAGE USES DEFAULT DISCOUNT CODE AND FOR VOLOSOFT DEVELOPERS. PURCHASE LINKS BELOW DO NOT WORK.", + "DiscountedLicenseExplanation": "These license prices are for small startups, individual developers, students, non-profit organizations and projects!", + "General": "General", + "Development": "Development", + "Payment": "Payment", + "WatchExplainerVideo": "Let's Meet! Watch Explainer Video", + "LightDarkAndSemiDarkThemes": "Light, Dark and Semi-Dark", + "LeptonXThemeExplanation": "Lepton Theme can change your theme according to your system settings.", + "PRO": "PRO", + "YourAccountDetails": "Your Account Details", + "OrganizationName": "Organization Name", + "MicroserviceDescription": "Discover ABP's complete solution architecture featuring multiple applications, API gateways, micro services, and databases using the latest technologies.", + "AddDevelopers": "Add Developers", + "StartDevelopment": "Start Development", + "ModularMonolithDescription": "Explore this ABP template designed for a layered, modular, and DDD-based solution architecture, helping you build a clean, maintainable codebase with ease.", + "CreateAndRunApplicationUsingStartupTemplate": "Learn how to create and run a new web application using the ABP startup template.", + "CommunityDescription2": "abp.io/community is a place where people can share ABP-related articles. Search for articles, tutorials, code samples, case studies and meet people in the same lane as you.", + "UseABPSuiteExplanation": "Use ABP Suite to download the source-code of the modules and themes.", + "ManageModulesWithSuite": "You can also manage your ABP modules with Suite.", + "LearnHowToInstallSuite": "Learn how to install and use ABP Suite.", + "SeeLess": "See Less", + "LayeredSolutionStructure": "Layered Solution Structure", + "LayeredSolutionStructureExplanation": "The solution is layered based on Domain Driven Design principles and patterns to isolate your business logic from the infrastructure and integrations and to maximize code maintainability and reusability. ABP Framework already provides abstractions, base classes and guides to truly implement DDD for your application.", + "SimpleMonolithDescription": "This ABP template is a simple monolith application that is designed to be a good starting point for your small to medium-sized projects.", + "MultipleUIOptionsExplanation": "We love different ways to create the UI. This startup solution provides three different UI framework options for your business application.", + "MultipleDatabaseOptions": "Multiple Database Options", + "MultipleDatabaseOptionsExplanation": "You have two database provider options (in addition to using both in a single application). Use Entity Framework Core to work with any relational database and optionally use Dapper when you need to write low-level queries for better performance. MongoDB is another option if you need to use a document-based NoSQL database. While these providers are well-integrated, abstracted and pre-configured, you can actually interact with any database system that you can use with .NET.", + "ModularArchitectureExplanation2": "Modularity is a first-class citizen in the ABP platform. All the application functionalities are split into well-isolated optional modules. The startup solution already comes with the fundamental ABP modules pre-installed. You can also create your own modules to build a modular system for your own application.", + "MultiTenancyForSaasBusiness": "Multi-tenancy for your SaaS Business", + "MultiTenancyForSaasBusinessExplanation": "The solution has been fully configured to support multi-tenant systems. It allows the tenants to share or have their own databases with on-the-fly database creation and migration system.", + "MicroserviceStartupSolution": "Microservice Startup Solution", + "MicroserviceArchitectureExplanation2": "You can get it for your next microservice system to take advantage of the pre-built base solution and distilled experience.", + "PreIntegratedTools": "Pre-integrated to Popular Tools", + "PreIntegratedToolsExplanation": "The solution is already integrated into the industry-standard tools and technologies, while you can always change them and integrate with your favorite tools.", + "SingleSignOnAuthenticationServer": "Single Sign-on Authentication Server", + "SingleSignOnAuthenticationServerExplanation": "The solution has an authentication server application that is used by the other applications as a single sign-on server with the API access management features. It is based on the Openiddict implementation.", + "WebAppsWithGateways": "2 Web Apps with 2 API Gateways", + "WebAppsWithGatewaysExplanation": "The solution contains two web applications, each one has a dedicated API gateway (BFF - Backend For Frontend pattern).", + "BackOfficeApplication": "Back Office Application", + "BackOfficeApplicationExplanation": "The actual web application of your system, with multiple UI framework options. You can create any kind of business application.", + "LandingWebsite": "Landing Website", + "LandingWebsiteExplanation": "A generic landing/public website that can be used for several purposes, like introducing your company, selling your products, etc.", + "ABPFrameworkEBook": "Mastering ABP Framework e-book", + "MasteringAbpFrameworkEBookDescription": "Included within your commercial license", + "LicenseTypeNotCorrect": "The license type is not correct!", + "Trainings": "Trainings", + "ChooseTrainingPlaceholder": "Choose the training...", + "DoYouNeedTrainings": "Do you need one of these trainings?", + "DoYouNeedTraining": "Do you need {0} training?", + "GetInTouchUs": "Get in touch with us", + "ForMoreInformationClickHere": "For more information, click here.", + "ForMoreInformationClickHereByClass": "For more information, click here.", + "IsGetOnboardingTraining": "Would you like to get onboarding & web application development training?", + "OnboardingWebApplicationDevelopmentTrainingMessage": "To schedule your training calendar, please contact {0} after creating the organization", + "CustomPurchaseMessage": "For the next step, click {0} to contact us.", + "Note": "Note", + "AdditionalNote": "Additional Note", + "OnboardingTrainingFaqTitle": "Do you have ABP onboarding training?", + "OnboardingTrainingFaqExplanation": "Yes, we have ABP Training Services to help you get your ABP project started fast. You will learn about ABP from an ABP core team member, and you will get the skills to begin your ABP project. In the onboarding training, we will explain how to set up your development environment, install the required tools, and create a fully functional CRUD page. The training will be live, and the Zoom application will be used, we are open to using other online meeting platforms. The language of the training will be English. You can also ask your questions about ABP during the sessions. A convenient time and date will be planned for both parties. For further information visit training page.", + "AddBasket": "Add to Basket", + "SendTrainingRequest": "Send Training Request", + "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* The English version of this document is the most up-to-date, and the English version will prevail in any dispute.", + "Pricing_Page_Title": "ABP Pricing | Flexible Plans for Development Needs", + "Pricing_Page_Description": "See the licensing plans of the ABP, including free tiers. If standard plans don't fit, ask for a quote. Don't forget; we have a 30-day money-back guarantee!", + "Pricing_Page_HurryUp": "Hurry Up!", + "Pricing_Page_BuyLicense": "Buy a license at 2021 prices until January 16!", + "Pricing_Page_ValidForExistingCustomers": "Also valid for existing customers and license renewals.", + "Pricing_Page_Hint1": "The license price includes a certain number of developer seats. If you have more developers, you can always purchase additional seats.", + "Pricing_Page_Hint2": "You can purchase more developer licenses now or in the future. Licenses are seat-based, so you can transfer a seat from one developer to another.", + "Pricing_Page_Hint3": "You can develop an unlimited count of different products with your license.", + "Pricing_Page_Hint4": "ABP Suite is a tool to assist your development to improve your productivity. It supports generating CRUD pages and creating new projects.", + "Pricing_Page_Hint5": "You can use all the pre-built modules in your applications.", + "Pricing_Page_Hint6": "You can use all the pre-built themes in your applications.", + "Pricing_Page_Hint7": "A startup template is a Visual Studio solution to make you jump-start your project. All fundamental modules are added and pre-configured for you.", + "Pricing_Page_Hint8": "Mastering ABP Framework e-book explains how to implement .NET solutions with best practices. It is sold on Amazon.com, and you can download the book for free with your license.", + "Pricing_Page_Hint9": "You can download the source-code of any module. You may want to add the source code to your solution to make radical changes or just keep it for yourself for security reasons.", + "Pricing_Page_Hint10": "Licenses are for a lifetime. That means you can continue to develop your application forever. Accessing to the latest version and getting support are granted within the license period (1 year unless you renew it).", + "Pricing_Page_Hint11": "No restrictions on deployment! You can deploy to as many servers as you want, including the cloud services or on-premises.", + "Pricing_Page_Hint12": "You can update the modules, themes and tools to the latest version within your active license period. After your license expires, you need to renew it to continue to get updates for bug fixes, new features and enhancements.", + "Pricing_Page_Hint13": "You can get the premium support for one year (you can renew your license to extend it).", + "Pricing_Page_Hint14": "Team and Business licenses have incident/question count limit. If you buy additional developer licenses, your incident limit increases by {0} (for the Team License) or {1} (for the Business License) per developer.", + "Pricing_Page_Hint15": "Only Enterprise License includes private support. You can send an e-mail directly to the ABP Team or ask questions on abp.io/support/questions with a private ticket option. The private tickets are not visible to the public.", + "Pricing_Page_Hint16": "You can download the source-code of all ABP themes. You may want to add the source code to your solution to make radical changes or just keep it for yourself for security reasons.", + "Pricing_Page_Testimonial_1": "ABP Commercial allowed SC Ventures to deliver a bank-grade multi-tenant silo-database SaaS platform in 9 months to support the accounts receivable / accounts payable supply chain financing of significant value invoices from multiple integrated anchors. The modularity of ABP made it possible for the team to deliver in record time, pass all VAPT, and deploy the containerized microservices stack via full CI/CD and pipelines into production.", + "Pricing_Page_Testimonial_2": "We see the value of using ABP Commercial to reduce the overhead of custom development projects. The team is able to unify the code pattern in different project streams. We see more potential in the framework for us to build new features faster than before. We trust we will be constantly seeing the value of leveraging ABP Commercial.", + "Pricing_Page_Testimonial_3": "We love ABP. We don't have to write everything from scratch. We start from out-of-the-box features and just focus on what we really need to write. Also, ABP is well-architected and the code is high quality with fewer bugs. If we had to write everything we needed on our own, we might have to spend years. One more thing we like is that the new version, issue fixing, or improvement comes out very soon every other week. We don't wait too long.", + "Pricing_Page_Testimonial_4": "ABP Commercial is a fantastic product would recommend. Commercial products to market for our customers in a single configurable platform. The jump starts that the framework and tooling provide any team is worth every cent. ABP Commercial was the best fit for our needs.", + "Pricing_Page_Testimonial_5": "ABP Framework is not only a framework, but it is also a guide for project development/management, because it provides DDD, GenericRepository, DI, Microservice, and Modularity training. Even if you are not going to use the framework itself, you can develop yourself with abp.io/docs which is well and professionally prepared (OpenIddict, Redis, Quartz etc.). Because many things are pre-built, it shortens project development time significantly (Such as login page, exception handling, data filtering, seeding, audit logging, localization, auto API controller etc.). As an example from our application, I have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler. It is wonderful not to lose time for CreationTime, CreatorId. They are being filled automatically.", + "Pricing_Page_Testimonial_6": "ABP Framework is a good framework but it needs time to understand the different layers, classes, and libraries it uses (especially ABP). I spent a lot of time reading the code base, but ABP Commercial saved us time in creating the project specialty entities (AR) and the repository linked to each of them. I liked also the approach used in ABP is very mature; we know is based on DDD and monolith.", + "Pricing_Page_Testimonial_7": "As a startup, we need to iterate quickly and spend minimal time on boilerplate and non-core features.\nOur engineers range from highly experienced to junior engineers, and we needed a common understanding and a way to share technical and domain knowledge, ABP allowed us to do this due to their great guides and documentation. \nThere are things we haven't had to worry about since they work out of the box with ABP. \nABP helped us streamline rapid prototyping and development, less than 4 weeks from feature inception to production. With all its premium features included in the license, ABP has given us, \"Startup in a Box\" on the Software Engineering Side.", + "Pricing_Page_Testimonial_8": "I would recommend ABP commercial to all those who want to expand the range of products available to their customers. It's fantastic when need to use a distributed enterprise environment (Angular, WPF, Win&Linux). In addition to their products, we love their support, which makes our job faster and easier. We already know that we have found a great partner for the future who will support us in expanding our business.", + "Pricing_Page_Testimonial_9": "We are a company of 2 employees that's been in business for over 20 years.\nIn terms of our experience with ABP Commercial, we were approached by a client who requested that we develop a new human resources application in a modern environment to replace their 25-year-old Access application. We decided to transition from a desktop solution to a web-based one.\n\nAt the time, we had very little knowledge of web applications and .NET, but we stumbled upon ABP Commercial, and with the help of ABP Framework, technical documentation, and ABP Suite, we were able to not only develop the application to the client's specifications but also successfully work within a .NET environment within a year.", + "AbpBookDownloadArea_ClaimYourEBook": "Claim your Mastering ABP Framework E-Book", + "AddMemberModal_Warning_1": "If the username you are trying to add doesn't exist in the system, please ask your team member to register on {0} and share the username of his/her account with you.", + "MyOrganizations_Detail_WelcomeMessage": "Welcome to your organization, {0}", + "MyOrganizations_Detail_OrganizationManagement": "Organization Management", + "OrganizationDisplayName": "Organization Display Name", + "MyOrganizations_Detail_EditDisplayName": "Edit Display Name", + "MyOrganizations_Detail_UpgradeYourLicense": "Upgrade your license", + "MyOrganizations_Detail_LicenseStartAndExpiryDate": "License Start Date - Expiry Date", + "MyOrganizations_Detail_OwnerRightInfo": "You are using {0} of your {1} owners rights.", + "MyOrganizations_Detail_CopyApiKey": "Copy the Key", + "MyOrganizations_Detail_ApiKeyDescription": "The API Key is the token of PRO packages hosted on {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Your private NuGet source is {0}", + "MyOrganizations_Detail_PrivateNugetSourceWarning": "This is automatically added as a feed to your NuGet.Config in your ABP solution. Do not share your private key with unauthorized users!", + "MyOrganizations_Detail_DeveloperSeatInfo": "You are using {0} of your {1} developer seats.", + "NeedMoreSeatsForYourTeam": "Need more seats for your team?", + "MyOrganizations_Detail_PricePerYear": "{0} / per year", + "MyOrganizations_Detail_PurchaseDeveloperSeats": "Purchase Developer Seats", + "Invoices": "Invoices", + "RequestInvoice": "Request Invoice", + "OrderNumber": "Order Number", + "Products": "Products", + "TotalPrice": "Total Price", + "ThereIsNoInvoice": "There is no invoice", + "MyOrganizations_Detail_PaymentProviderInfo": "If you have purchased your license through {0} gateway, it sends the PDF invoice to your email address, see {0} invoicing.", + "MyOrganizations_Detail_PayUInfo": "If you have purchased through the Iyzico gateway, click the \"Request Invoice\" button and fill in the billing information.", + "MyOrganizations_Detail_ConclusionInfo": "Your invoice request will be concluded within {0} business days.", + "ExtendYourLicense": "Extend your {0} License", + "PurchaseLicense": "Purchase {0} license", + "DownloadInvoiceModal_DownloadInvoice": "Download Invoice", + "DownloadInvoiceModal_SaveInformationOnlyOnce": "You can save your billing information only once.", + "InvoiceModal_EnterCompanyName": "Enter your legal company name...", + "InvoiceModal_EnterCompanyAddress": "Enter your legal company address...", + "InvoiceModal_EnterTaxNumber": "Enter your TAX/VAT number if available...", + "RequestInvoiceModal_EnterNotes": "Additional information for your invoice... This note will be written in the notes section of the invoice.", + "PrePayment_PayWithIyzico": "You will pay with Iyzico", + "ContinueToCheckout": "Continue to Checkout", + "PrePayment_IyzicoRedirectionInfo": "You will be redirected to Iyzico Payment Gateway to complete your purchase securely.", + "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico accepts Visa and MasterCard.", + "Purchase": "Purchase", + "AcceptTermsAndConditions": "I have read, understand and accept the privacy policy, terms & conditions and EULA.", + "AcceptTermsAndConditionsWarningMessage": "Please accept the privacy policy and terms & conditions", + "SelectGatewayToContinue": "Please select a Gateway to continue!", + "GatewaySelection_SelectGateway": "Select a Payment Gateway", + "GatewaySelection_RedirectionMessage": "Next, you will be redirected to the selected payment gateway's website for the transaction.", + "PaymentSucceed_PaymentSuccessMessage": "Payment Successful", + "PaymentSucceed_ThanksForPurchase": "Thank you for your purchase!", + "PaymentSucceed_CreateYourOrganization": "Create your organization", + "PaymentSucceed_AddMeAsDeveloper": "I'm a developer too, add me as a developer to my organization.", + "PaymentSucceed_CreateOrganization": "Create Organization", + "PaymentSucceed_OrganizationDescription": "An organization consists of developers and owners. The developers are users who write code on the ABP project and will benefit from the {1} website. The owners are users who allocate developer seats and manage licensing.", + "PaymentSucceed_ViewOrganization": "Click here to view organization", + "Purchase_TotalAnnualPrice": "TOTAL (annual fee)", + "Purchase_TrainingPrice": "Training Price", + "Purchase_OnboardingTraining": "Onboarding & Web Application Development Live Training", + "TotalDeveloperPrice": "Total Developer Price", + "Purchase_PricePerDeveloper": "{0} per developer", + "Purchase_IncludedDeveloperInfo": "{0} {1} included.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "The {0} License includes {1} developers. You can add additional developers.", + "StartupTemplates_Page_Title": "ABP Startup Templates", + "StartupTemplates_Page_Description": "Kickstart your new project with ABP's app templates! Leave all the infrastructure aspects to ABP and do what you do best; focus on your work…", + "MicroserviceStartupSolutionForDotnet": "Microservice Startup Solution for .NET", + "MonolithSolutionForDotnet": "Monolith (modular) Solution for .NET", + "TrainingDetailsHeaderInfo_TrainingHour": "{0} hours", + "Trainings_Content": "Content of Training", + "Trial_Page_StartYourFreeTrial": "Start Your Free Trial", + "TrialLicenseFeatures": "You'll be able to benefit from all ABP commercial features", + "TrialPeriodDays": "You'll have a {0} days Team License", + "TrialForumSupportIncident": "You'll have {0} forum support incidents", + "Contact_Page_Title": "Contact Us", + "Contact_Page_Description": "Get in touch with us for licensing, additional services, inquiries or feedback about ABP. We're here to help!", + "Demo_Page_Title": "Create a Live Demo", + "CustomProjectDescription" : "Leverage ABP's expertise for custom project development. Get solutions built to your specifications with our modular architecture and cutting-edge technology", + "Demo_Page_Description": "Create a free live demo to experience the power of ABP with our interactive demos. Explore a variety of real-world web applications.", + "Discounted_Page_Title": "Discounted pricing", + "Discounted_Page_Description": "Choose the features and functionality your business needs today. Buy an commercial license and create unlimited projects", + "PortingExistingProjectsDescription": "Modernize your app with ABP's project porting services. Migrate your existing .NET projects to a robust, scalable architecture using the latest technologies", + "Faq_Page_Title": "Frequently Asked Questions", + "Faq_Page_Description": "Find answers to common questions about ABP in our FAQ section, covering various topics and issues.", + "Faq_Page_SwiftCode": "SWIFT Code", + "Faq_Page_BankName": "Bank Name", + "Faq_Page_AccountName": "Account Name", + "Faq_Page_AccountNumber": "Account Number", + "Faq_Page_Currency": "Currency", + "Faq_Page_VatNumber": "VAT number", + "Faq_Page_OtherCurrenciesInfo": "For other currencies, see all accounts", + "ProjectCreatedSuccess_Page_Title": "Your project created", + "ProjectCreatedSuccess_Page_Description": "Your ABP project created successfully!", + "Suite_Page_Title": "ABP Suite", + "Suite_Page_Description": "Meet ABP Suite, a rapid application development tool that increases productivity and efficiency. Create CRUD pages in minutes!", + "Themes_Page_Title": "ABP Themes", + "Themes_Page_Description": "Appearance matters! We present to you LeptonX Theme, a modern, customizable, flexible theme that creates a unique user experience.", + "Tools_Page_Title": "ABP Tools", + "Tools_Page_Description": "Explore the tool kits provided by ABP that enhance development productivity and streamline your development.", + "DeveloperPrice": "Developer Price", + "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} developers", + "LicenseRemainingDays": "for {0} days", + "ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get premium support. 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 ABP Suite which speeds up your development.", + "LicenseRenewalPrice": "License renewal price", + "LicensePrice": "License Price", + "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. 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 ABP Suite which speeds up your development.
See the license comparison table 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?", + "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Upgrading will not extend your license expiration date!", + "UpgradePaymentInfoSection_LicenseUpgradeDescription": "By upgrading your license, you will be promoted to a higher license type, which will allow you to get additional benefits. See the license comparison table to check the differences between the license types.", + "Welcome_Page_UseSameCredentialForCommercialWebsites": "Use the same credentials for both abp.io and abp.io/support/questions.", + "WatchCrudPagesVideo": "Watch the \"Creating CRUD Pages with ABP Suite\" Video!", + "WatchGeneratingFromDatabaseVideo": "Watch the \"ABP Suite: Generating CRUD Pages From Existing Database Tables\" Video!", + "WatchTakeCloserLookVideo": "Watch the \"Take a closer look at the code generation: ABP Suite\" Video!", + "ConfirmedEmailAddressRequiredToStartTrial": "You should have a confirmed email address in order to start a trial license.", + "EmailVerificationMailNotSent": "Email verification mail couldn't send.", + "GetConfirmationEmail": "Click here to get a verification email if you haven't got it before.", + "WhichLicenseTypeYouAreInterestedIn": "Which license type you are interested in?", + "DontTakeOurWordForIt": "Don't take our word for it...", + "BlazoriseLicense": "Do we need to buy a Blazorise license?", + "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Additional Developer(s)", + "ExtendPaymentInfoSection_DiscountRate": "Discount {0}%", + "TotalNetPrice": "Total Net Price", + "EFCore": "Entity Framework Core", + "All": "All", + "Mvc": "MVC", + "DataBaseProvider": "Data Provider", + "UIFramework": "UI Framework", + "LeptonXThemeForDashboard": "LeptonX Theme for Your Admin Dashboard by", + "AbpPlatform": "ABP Platform", + "YouDeserveGoodUXUI": "You deserve a good UI and a better UX. LeptonX Theme by ABP is here to serve it.", + "ViewLiveDemo": "View Live Theme Demo", + "GetLeptonX": "Get LeptonX Now", + "SeeLeptonXDocumentation": "See LeptonX Documentation", + "SeeLeptonDocumentation": "See Lepton Documentation", + "SimplifiedMenu": "Simplified menu", + "SimplifiedMenuDescription": "You can easily find the page you are looking for by filtering the menu", + "YourFavoritePages": "Your favorite pages at your reach", + "YourFavoritePagesDescription": "Easily add or remove the page from favorites by clicking the star icon in the upper right corner of the page.", + "BreadCrumbs": "Breadcrumb for seamless switching", + "BreadCrumbsDescription": "Using Breadcrumb, you can switch to the pages at the same level with one click, even when the left menu is closed, and it works on tablet and mobile responsive!", + "YourMenu": "Your menu as you wish", + "YourMenuDescription": "Customize the directly clickable icons and dropdown boxes on the user menu as you wish. The user menu is completely customizable for your needs", + "RtlSupport": "RTL support for your language", + "RtlSupportDescription": "LeptonX Theme supports RTL for your language. The language options are in the settings menu for you to change the language.", + "YourColors": "Your colors on your admin dashboard UI", + "YourColorsDescription": "LeptonX Theme works according to your system preferences and has dashboard light theme, dashboard dark theme, and dashboard semi-dark theme options.", + "ArrangeContentWidth": "Easily arrange your content width", + "ArrangeContentWidthDescription": "Easily change the width of your content area.", + "LeptonXCompatibleWith": "LeptonX Theme is compatible with", + "MobileResponsiveTemplate": "Mobile Responsive Template", + "MobileResponsiveTemplateDescription1": "Access your LeptonX admin dashboard from any device you like.", + "MobileResponsiveTemplateDescription2": "It is designed for you to easily use in every device of yours. It is responsive on mobile devices and tablet sizes.", + "TopMenuLayoutOption": "Top Menu Layout Option", + "TopMenuLayoutOptionDescription1": "If you would like to set up your website with the same admin dashboard, it is possible to do it with LeptonX Theme!", + "TopMenuLayoutOptionDescription2": "Just try the LeptonX top menu layout to make it happen!", + "EasilyCustomizable": "Easily customizable for your brand colors", + "EasilyCustomizableDescription1": "You can customize the LeptonX theme using just a few SCSS variables. No overriding, no extra CSS load!", + "EasilyCustomizableDescription2": "With LeptonX, you can arrange your admin dashboard however you like.", + "IndependentLayout": "Independent layout and content area", + "IndependentLayoutDescription1": "LeptonX's layout infrastructure was designed completely separate from the content.", + "IndependentLayoutDescription2": "This means that you can freely design your project with a content structure other than Bootstrap if you want.", + "MostUsedLibraries": "Most used libraries integrated with LeptonX", + "MostUsedLibrariesDescription1": "LeptonX contains your most used libraries. It allows you to use libraries such as ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2, and Toastr effortlessly.", + "MostUsedLibrariesDescription2": "LeptonX also supports MVC Angular and Blazor-specific libraries.", + "CreateAndCustomize": "Create and customize the pages you need in seconds with LeptonX custom pages", + "CreateAndCustomizeDescription": "By using LeptonX Theme you also have access to many pre-made HTML pages. These include many pages such as login page, blog, FAQ, subscription list, invoice, pricing, and file management.", + "LeptonThemeForAdmin": "Lepton Theme for your admin dashboard by", + "LeptonThemeForAdminDescription": "Lepton Theme is still available and will be maintained. If you want to switch to LeptonX Theme as a Lepton Theme user, you can see the documentation to learn how-to.", + "LeptonCompatibleWith": "Lepton Theme is compatible with", + "BlackFridayDiscount": "Black Friday Discount", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} for {1} additional developer(s)", + "Upgrade": "Upgrade", + "Renewal": "Renewal", + "UpgradePaymentInfoSection_LicensePrice": "{0} license", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "License renewal", + "Total": "Total", + "SupportPolicyFaqTitle": "What is your support policy?", + "TotalDevelopers": "Total {0} developer(s)", + "CustomPurchaseExplanation": "Tailored to your specific needs", + "WhereDidYouHearAboutUs": "Where did you hear about us?", + "Twitter": "Twitter", + "Facebook": "Facebook", + "Youtube": "YouTube", + "Google": "Google", + "Github": "GitHub", + "Friend": " From a friend", + "Other": "Other", + "WhereDidYouHearAboutUs_explain": "Specify ...", + "DeletingMemberWarningMessage": "\"{0}\" will be removed from the developer list. If you want, you can assign this empty seat to another developer later.", + "AdditionalInfo": "If the developer seats are above your requirements, you can reduce them. You can email at info@abp.io to remove some of your developer seats. Clearing unused developer seats will reduce the license renewal cost. If you want, you can re-purchase additional developer seats within your active license period. Note that, since there are {0} developers in this license package, you cannot reduce this number.", + "LinkExpiredErrorMessage": "The link you are trying to access is expired.", + "ExpirationDate": "Expiration Date", + "SpringCampaignDiscount": "Spring Campaign Discount", + "WhyUseAbpIoPlatform": "Why should I use the ABP Platform instead of creating a new solution from scratch?", + "WhyUseAbpIoPlatformFaqExplanation": "See that page for a detailed explanation of why using ABP Platform has a significant advantage over doing everything yourself.", + "EulaPageTitle": "End User License Agreement (EULA)", + "EulaPageDescription": "Review ABP's End User License Agreement (EULA) to understand the terms and conditions to use our software, including rights, restrictions, obligations.", + "PrivacyPolicyPageTitle": "Privacy Policy | Cookie Policy", + "PrivacyPolicyPageDescription": "Discover how ABP ensures your privacy and protection. Learn about our commitment to safeguarding your information and the measures we take to secure data.", + "TermsConditionsPageTitle": "Terms and Conditions", + "TermsConditionsPageDescription": "Read ABP's Terms and Conditions to understand the rules, rights, and responsibilities for using our software and services.", + "TrainingsPageTitle": "Training Packages", + "ModulesPageTitle": "Modules | Pre-built Modules for .NET", + "ModulesPageDescription": "Discover ABP's pre-built modules designed for .NET applications. Enhance your development workflow with framework's customizable solutions.", + "Volo.AbpIo.Commercial:040001": "API Access Key is incorrect.", + "GetLepton": "Get Lepton Now", + "MyOrganizations_Detail_LicenseStartDate": "Start Date", + "MyOrganizations_Detail_LicenseExpiryDate": "Expiry Date", + "BlazoriseSupport": "How do I get the Blazorise license key and support from the Blazorise team?", + "BlazoriseSupportExplanation": "Follow the steps below to get support from the Blazorise team and get your Blazorise license key:", + "BlazoriseSupportExplanation1": "Sign up for a new account at blazorise.com/support/register with the same email address as your abp.io account. Leave the \"License Key\" entry blank. It must be the same email address as your email account on abp.io.", + "BlazoriseSupportExplanation2": "Verify your email address by checking your email box. Check your spam box if you don't see an email in your inbox!", + "BlazoriseSupportExplanation3": "Log into the Blazorise support website at blazorise.com/support/login.", + "BlazoriseSupportExplanation4": "If you have an active ABP Commercial License, you will also have a Blazorise PRO license. You can get your Blazorise license key at blazorise.com/support/user/manage/license.", + "BlazoriseSupportExplanation5": "You can post your questions on the support website and generate a product token for your application.", + "AbpLiveTrainingPackages": "ABP Live Training Packages", + "Releases": "Releases", + "ReleasesDescription": "This page contains detailed information about each release. You can see all the closed pull requests for a specific release. For overall milestone developments, you can check out the brief release notes page.", + "ReleaseDate": "Release Date", + "Labels": "Labels", + "PreRelease": "Pre-release", + "AllTypes": "All Types", + "Enhancement": "Enhancement", + "Bug": "Bug", + "Feature": "Feature", + "AllUIs": "All UIs", + "MVC": "MVC", + "BlazorServer": "Blazor Server", + "MAUI": "MAUI", + "HowItWorks_Page_Title": "How It Works?", + "HowItWorks_Page_Description": "Understand how ABP works with detailed documentation, including guides and best practices.", + "HowItWorks_Description_Title": "What’s possible with ASP.NET Core, easier with ABP!", + "HowItWorks_Description1": "ABP extends the .NET platform. So, anything you can do with a plain .NET solution is already possible with ABP. That makes it easy to get started with a low learning curve.", + "HowItWorks_Description2": "Once you start learning and using ABP features, developing your software will be much more enjoyable than ever.", + "HowItWorks_Description3": "This page basically explains how you use the ABP Platform as a .NET developer.", + "CreateANewSolution_Description1": "Everything starts by creating a new ABP integrated .NET solution.", + "StartWithStartupTemplates": "Start one of the pre-built startup solution templates", + "SimpleMonolithApplicationTemplate": "Simple monolith application template", + "LayeredApplicationTemplate": "Modular monolith application template", + "MicroserviceSolutionTemplate": "Microservice solution template", + "CreateEmptySolutionAndUseAbp": "Or create a new empty .NET solution and install ABP NuGet & NPM packages yourself.", + "CreatingSolutionWithMultipleOptions": "There are multiple UI and Database options while creating a new solution.", + "UIFrameworkOptions": "UI Framework Options", + "DotnetSolutionWithoutDependency": "Now, you have a regular .NET solution in your local computer that has no dependency on a cloud platform or external service.", + "CheckTheDocumentForDetails": "You can check the {1} document for details.", + "UIAndDatabaseIndependent": "ABP can work with any UI and any database provider supported by .NET. \n However, these UI and database providers are pre-integrated and well documented.", + "InstallAbpModules": "Install ABP Modules", + "DevelopYourSolution": "Develop Your Solution", + "DeployAnywhere": "Deploy Anywhere", + "InstallAbpModule_Description1": "ABP is a modular application development framework. Startup solution templates already come with the essential modules installed. \n But there are more application modules you may want to use in your solution.", + "InstallAbpModule_Description2": "Every module consists of a few NuGet and NPM packages and has an installation document. ABP Studio does most of the work automatically, then you manually configure or fine-tune the module based on its documentation.", + "DevelopYourSolution_Description1": "ABP’s infrastructure makes you focus on your own business code by automating the repetitive work and providing pre-built infrastructure and application features.", + "DevelopYourSolution_Description2": "In the following code block, you can see how the ABP seamlessly integrates into your code and automates the repetitive tasks for you.", + "DevelopYourSolution_Description3": "Even in this shortcode block, ABP does a lot of things for you.", + "DevelopYourSolution_Description4": "It provides base classes to apply conventions, like \n dependency injection. Generic \n repository services provide a convenient \n way to interact with the database. Declarative \n authorization works with a fine-tuned permission system.", + "DevelopYourSolution_Description5": "ABP completely automates \n unit of work (for database connection and transaction management), \n exception handling, \n validation\n and audit logging. It provides many more building blocks to simplify your daily development tasks and focus on your own code while creating production-ready \n applications.", + "DevelopYourSolution_Description6": "You can imagine how much that code block can be long and complicated if you would do it all manually.", + "SuiteCrudGenerationInFewSeconds": "In addition to hand coding your solution, you can create fully working advanced CRUD pages in a few minutes using the ABP Suite tooling. It generates the code into your solution, so you can fine-tune it based on your custom requirements.", + "DeployAnywhere_Description1": "At the end of the day, you have a pure .NET solution. You can deploy your solution to your own server, to a cloud platform, to Kubernetes or anywhere you want. You can deploy to as many servers as you want. ABP is a deployment environment agnostic tool.", + "ExpertiseAbpFramework": "Expertise ABP", + "ExpertiseAbpFramework_Description1": "Want to go beyond basics and get expertise with the ABP Platform?", + "FreeDownload": "Free Download", + "HavingTrouble": "Having Trouble?", + "HavingTrouble_Description1": "Do you have problems with developing your solution? We are here! Use the ABP Support platform \n or send an email to get help directly from the Core ABP team members.", + "WeAreHereToHelp_Description1": "You can browse our help topics or search in the frequently asked questions, \n or you can ask us a question by using the contact form.", + "OtherModules": "Other Modules", + "OtherModules_Description1": "Account, Audit Logging, Chat, CMS Kit, File Management, Forms, GDPR, Language Management and more...", + "HowItWorks_DatabaseProviderOptions": "Database provider options", + "SeeFAQ": "See FAQ", + "ReleaseLogs": "Release Logs", + "ReleaseLogs_Tag": "{0} Release Logs", + "ReleaseLogs_Pr": "Pull Request #{0} - {1}", + "NoLabels": "No labels", + "DoesTheSubscriptionRenewAutomatically": "Does the subscription renew automatically?", + "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP platform does not have an auto-renewal billing model. Therefore your subscription will not be automatically renewed at the end of your license period. If you want to continue to have the benefits of ABP platform, you need to manually renew it at the organization management page. If you have multiple organizations, click the \"Manage\" button at your expiring organization and then click the \"Extend Now\" button to renew your license. You may also want to take a look at the What Happens When My License Ends? section.", + "ExtraQuestionCreditsFaqTitle": "Can I purchase extra support question credits?", + "ExtraQuestionCreditsFaqExplanation": "Yes, you can. To buy extra question credits, send an e-mail to info@abp.io with your organization's name. Here's the price list for the extra question credits:
  • 50 questions pack $999
  • 25 questions pack $625
  • 15 questions pack $450
", + "AlreadyBetaTester": "You have already joined the beta tester program.", + "AbpStudio": "ABP Studio", + "AbpStudio_Description": "ABP Studio is still under development. You can fill out the form below to be one of the first users.", + "AbpStudio_Description1": "ABP Studio is a cross-platform desktop application for ABP developers.", + "AbpStudio_Description2": "It is well integrated to the ABP Framework and aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run and deploy your solutions much easier.", + "AbpStudio_ComingSoon": "Coming Soon Planned beta release date: Q4 of 2023.", + "AbpStudio_PlannedPreviewDate": "Planned preview release date: Q4 of 2023.", + "BetaRequest": "Beta Request", + "CreateNewSolutions": "Create New Solutions", + "CreateNewSolutions_Description1": "You can create from simple applications to modular monolith or microservice solutions easily with a lot of options. You get a full production-ready base software solution for your business.", + "ArchitectYourSolutions": "Architect Your Solutions", + "ArchitectYourSolutions_Description1": "Build monolith-modular and microservice solution structures easier by creating modules or services and establishing relations between them. You can also install or uninstall pre-built application modules.", + "ExploreYourSolution": "Explore Your Solution", + "ExploreYourSolution_Description1": "ABP Studio shows a high-level view of components in your solution and the modules your solution depends on. You can explore entities, services, HTTP APIs and much more without needing to open your codebase.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Run Multi-Application or Microservice Solutions in a Breeze", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Run one, multiple or all services with a single click. In this way, it is very easy to stop a service, run it in Visual Studio to test or debug.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "See a list of services, view real-time HTTP request and exception counts for each service.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "See all details of all HTTP requests coming to any service.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Explore exception details as real-time in any service, easily filter and search.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Show the application logs, filter by log level or search by text.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "Browse the UI of your application without leaving the solution runner.", + "IntegrateToYourKubernetesCluster": "Integrate with your Kubernetes Cluster", + "IntegrateToYourKubernetesCluster_Description1": "Connect your local development environment to a local or remote Kubernetes cluster, where that cluster already runs your microservice solution.", + "IntegrateToYourKubernetesCluster_Description2": "Access any service in Kubernetes with their service name as DNS, just like they are running in your local computer.", + "IntegrateToYourKubernetesCluster_Description3": "Intercept any service in that cluster, so all the traffic to the intercepted service is automatically redirected to your service that is running in your local machine. When your service needs to use any service in Kubernetes, the traffic is redirected back to the cluster, just like your local service is running inside the Kubernetes.", + "GetInformed": "Get Informed", + "Studio_GetInformed_Description1": "Leave your contact information to get informed and try it first when ABP Studio has been launched.", + "Studio_GetInformed_Description2": "Planned preview release date: Q3 of 2023.", + "ThankYou!": "Thank you!", + "SendBetaRequest": "Send Beta Request", + "YouJoinedTheBetaTesterProgram": "You joined the ABP Studio beta tester program.", + "PricingExplanation2": "30 days money back guarantee — Learn more", + "MoneyBackGuaranteeText": "* 30-day money-back guarantee on all licenses! 100% refund on Team, 60% refund on Business and Enterprise licenses within 30 days.", + "MobileApplicationStartupTemplates": "Mobile Application Startup Templates", + "MobileApplicationStartupTemplates_Description1": "Integrated mobile application startup templates for your ABP projects.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Build Powerful Line of Business Applications using ABP Mobile Startup Templates", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP provides two mobile application startup templates implemented with React Native and .NET MAUI. When you create your new ABP-based solution, you will also have basic startup applications connected to your backend APIs.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "The application has a pre-built authentication token cycle, multi-language support, multi-tenancy support, login, forgot password, profile management and a user management page. You can add your own business logic and customize it based on your requirements.", + "TwoFrameworkOptions": "Two Framework Options", + "TwoFrameworkOptions_Description": "ABP provides both React Native and .NET MAUI mobile startup templates. This way, you can choose the one that best suits your needs. Both apps reuse code at the highest rate between iOS and Android platforms.", + "PreIntegratedToYourBackend": "Pre-integrated to Your Backend", + "PreIntegratedToYourBackend_Description": "ABP Mobile applications are pre-integrated to your backend APIs. It gets a valid authentication token from the server and makes authenticated requests.", + "MultiLanguage": "Multi-language", + "MultiLanguage_Description": "It already supports more than 10 languages out of the box. You can also add next languages.", + "Arabic": "Arabic", + "Czech": "Czech", + "English": "English", + "Hungarian": "Hungarian", + "Finnish": "Finnish", + "French": "French", + "Hindi": "Hindi", + "Portuguese": "Portuguese", + "Italian": "Italian", + "Russian": "Russian", + "Slovak": "Slovak", + "Turkish": "Turkish", + "EngageAndRetainYourCustomersWithABPMobileApps": "Engage and Retain Your Customers with ABP Mobile Apps", + "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Your customers want to manage their products and subscriptions from anywhere, anytime. That requires organizations to create mobile apps that enable customers to fulfill their requests quickly and seamlessly.", + "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "With ABP Mobile apps, you can create high-quality native mobile apps for Android and iOS… Using a single codebase and without compromising on security, quality, or scalability.", + "OneCodeBaseMultipleDevices": "One Code-Base Multiple Devices", + "OneCodeBaseMultipleDevices_Description": "ABP Mobile applications are cross-platform. They are ready to be installed and run on iOS and Android devices, and they adapt to different form factors using a single code base. Developers only need to create the UI and front-end code once, there is no need to adapt the code for each device you want to support.", + "ComesWithTheSourceCode": "Comes with the Source-Code", + "ComesWithTheSourceCode_Description": "The mobile apps are provided with the source-code. Easily customize the UX/UI of your apps to meet branding guidelines.", + "Purchase_OneYearPrice": "1 Year Price", + "Purchase_DeveloperSeatCount": "Developer Seat Count", + "Purchase_DevelopersAlreadyIncluded": "{0} developers already included", + "1Year": "1 year", + "{0}Years": "{0} years", + "1YearLicense": "1 Year License", + "{0}YearsLicense": "{0} Years License", + "1AdditionalDeveloper": "1 Additional Developer", + "{0}AdditionalDevelopers": "{0} Additional Developers", + "Discount": "Discount ({0}%)", + "TrainingPack": "Training pack", + "TrainingPackDiscount": "Training pack discount", + "Purchase_OnboardingTraining_Description": "This live training is valid for a class of 8 students and this discount is only valid when purchased with the new license. Learn more ", + "Purchase_Save": "{0}% Save {1}", + "RemoveBasket": "Remove from basket", + "WhyABPIOPlatform?": "Why ABP Platform?", + "DocumentAim": "This document aims to answer the big question:", + "DocumentAim_Description": "\"Why should you use the ABP Platform instead of creating a new solution from scratch?\"", + "DocumentAim_Description2": "The document introduces the challenges of building a modern software solution and explains how ABP addresses these challenges.", + "CreatingANewSolution": "Creating a New Solution", + "CreatingANewSolution_Description": "When you need to start a new solution, there are a lot of questions you need to ask yourself, and you should spend a lot of time before starting to write your very first business code.", + "CreatingAnEmptySolution": "Creating an Empty Solution", + "THEPROBLEM": "THE PROBLEM", + "CreatingAnEmptySolution_THEPROBLEM_Description": "Even creating an almost-empty solution is challenging;", + "CreatingAnEmptySolution_THEPROBLEM_Description2": "How do you organize your code-base across projects?", + "CreatingAnEmptySolution_THEPROBLEM_Description3": "What are the layers and how do they interact?", + "CreatingAnEmptySolution_THEPROBLEM_Description4": "How do you integrate with 3rd-party libraries?", + "CreatingAnEmptySolution_THEPROBLEM_Description5": "How to set up automated tests?", + "ABPSOLUTION": "ABP SOLUTION", + "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP provides a well-architected, layered and production-ready startup solution based on the Domain Driven Design principles. The solution also includes a pre-configured unit and integration test projects for each layer.", + "CommonLibraries": "Common Libraries", + "CommonLibraries_THEPROBLEM_Description": "Which libraries should you use to implement common requirements? The software development ecosystem is highly dynamic, making it challenging to keep up with the latest tools, libraries, trends, and approaches.", + "CommonLibraries_ABPSOLUTION_Description": "ABP pre-integrates popular, mature, and up-to-date libraries into the solution. You don't need to spend time integrating them or making them communicate with each other. They work properly out of the box.", + "UITheme&Layout": "UI Theme & Layout", + "UITheme&Layout_THEPROBLEM_Description": "When addressing UI concerns, a range of challenges surfaces. These include establishing the groundwork for a responsive, contemporary, and adaptable UI kit with a consistent appearance and a host of features like navigation menus, headers, toolbars, footers, widgets, and more.", + "UITheme&Layout_THEPROBLEM_Description2": "Even if you opt for a pre-designed theme, seamlessly integrating it into your project could demand days of development. An additional hurdle lies in upgrading such themes. Frequently, the theme's HTML/CSS structure becomes intertwined with your UI code, rendering future theme changes or upgrades intricate tasks. This interweaving of code and design complicates the flexibility of making adjustments down the line.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP offers a distinctive theming system that liberates your UI code from theme constraints. Themes exist in isolation, packaged as NuGet or NPM packages, making theme installation or upgrades a matter of minutes. While you retain the option to develop your custom theme or integrate an existing one, ABP presents a collection of polished and contemporary themes.", + "UITheme&Layout_ABPSOLUTION_Description2": "Additionally, there are UI component providers like Telerik and DevExpress. However, these providers primarily furnish individual components, placing the onus on you to establish your layout system. When working within ABP-based projects, you can seamlessly incorporate these libraries, similar to how you would in any other project.", + "TestInfrastructure_THEPROBLEM_Description": "Establishing a robust testing environment is a time-consuming endeavor. It involves setting up dedicated test projects within your solution, carefully selecting the necessary tools, creating service and database mocks, crafting essential base classes and utility services to minimize redundant code across tests, and addressing various related tasks.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates arrive pre-equipped with configured test projects, streamlining the process for you. This means that from day one, you can readily commence writing your initial unit or integration test code without delay.", + "CodingStandards&Training": "Coding Standards & Training", + "CodingStandards&Training_THEPROBLEM_Description": "After you've set up the solution for development, you usually have to teach the developers how the system works and how to build it using the same agreed-upon methods. Even if you give them training, keeping the documentation up-to-date can be difficult. As time goes on, each developer might write code in their own way, causing the rules for writing code to become different from each other.", + "CodingStandards&Training_ABPSOLUTION_Description": "The ABP solution is already neatly organized and has clear explanations. Step-by-step tutorials and guides show you exactly how to work on an ABP project.", + "KeepingYourSolutionUpToDate": "Keeping Your Solution Up to Date", + "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "After you start your development, you must keep track of the new versions of the libraries you use for upgrades & patches.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "We regularly update all packages to the latest versions and test them before the stable release. When you update your ABP based project, all its dependencies are upgraded to edge technology.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update
CLI command automatically discovers and upgrades all ABP-dependant NuGet and NPM packages in a solution. With ABP, it is easier to stay with the latest versions.", + "DRY": "Don't Repeat Yourself!", + "DRY_Description": "Creating a base solution takes significant time and requires good architectural experience. However, this is just the beginning! As you start developing, you will likely have to write lots of repetitive code; that would be great if all this could be handled automatically.", + "DRY_Description2": "ABP automates and simplifies repeating code as much as possible by following the convention over configuration principle. However, it doesn't restrict you when you need to switch to manual gear. The control is always in your hands.", + "Authentication": "Authentication", + "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP Integration, OpenIddict integration, social logins, two-factor authentication, forgot/reset password, email activation, new user registration, password complexity control, locking account on failed attempts, showing failed login attempts... etc. We know that all these generic requirements are familiar to you. You are not alone!", + "Authentication_ABPSOLUTION_Description": "ABP provide all these standard stuff pre-implemented for you as a re-usable account module. You just enable and configure what you need.", + "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns are the fundamental repeating logic that should be implemented for each use case. Some examples;", + "CrossCuttingConcerns_THEPROBLEM_Description2": "Starting transactions, committing on success and rollback on errors.", + "CrossCuttingConcerns_THEPROBLEM_Description3": "Handling and reporting exceptions, returning a proper error response to the clients and handling error cases on the client side.", + "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementing authorization and validation, returning proper responses and handling these on the client side.", + "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP automates or simplifies all the common cross-cutting concerns. You only write code that matters for your business, and ABP handles the rest by conventions.", + "ArchitecturalInfrastructure": "Architectural Infrastructure", + "ArchitecturalInfrastructure_THEPROBLEM_Description": "You typically need to build infrastructure to implement your architecture properly. For example, you generally implement the Repository pattern. You define some base classes to simplify and standardize to create entities, services, controllers and other objects.", + "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP provides all these and more out of the box. It is mature and well-documented.", + "EnterpriseApplicationRequirements": "Enterprise Application Requirements", + "EnterpriseApplicationRequirements_THEPROBLEM_Description": "There are a lot of requirements you repeatedly implement in every business application;", + "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detailed permission system and managing permissions on the UI based on roles and users.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Writing audit logs and entity histories to track when a user modifies a database record.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Make your entities soft delete, so they are marked as deleted instead of physically deleting from the database and automatically filtering deleted entities on your queries.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Creating abstractions and wrappers to consume your backend APIs from the frontend code.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "Enqueuing and executing background jobs.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Handling multiple time zones in a global system.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Sharing validation, localization, authorization logic between server and client.", + "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP provides an infrastructure to implement such requirements easily. Again, you don't spend your valuable time to re-implement all these again and again.", + "GeneratingInitialCode&Tooling": "Generating Initial Code & Tooling", + "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "You will build many similar pages in a typical web application. Most of them will perform similar CRUD operations. It is very tedious and also error-prone to repeatedly create such pages.", + "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite can generate a full-stack CRUD page for your entities in seconds. The generated code is layered and clean. All the standard validation and authorization requirements are implemented. Plus, unit test classes are generated. Once you get a fully running page, you can modify it according to your business requirements.", + "IntegratingTo3rdPartyLibrariesAndSystems": "Integrating to 3rd-Party Libraries and Systems", + "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "Most libraries are designed as low level, and you typically do some work to integrate them properly without repeating the same integration and configuration code everywhere in your solution. For example, assume you must use RabbitMQ to implement your distributed event bus. All you want to do is; send a message to a queue and handle the incoming messages. But you need to understand messaging patterns, queues and exchange details. To write efficient code, you must create a pool to manage connections, clients and channels. You also must deal with exceptions, ACK messages, re-connecting to RabbitMQ on failures and more.", + "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "For example, ABP's RabbitMQ Distributed Event Bus integration abstracts all these details. You send and receive messages without the hustle and bustle. Do you need to write low-level code? No problem, you can always do that. ABP doesn't restrict you when you need to use low-level features of the library you are using.", + "WhyNotBuildYourOwnFramework?": "Why Not Build Your Own Framework?", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All the infrastructure, even in the simplest way, takes a lot of time to build, maintain and document. It gets bigger over time, and it becomes hard to maintain it in your solution. Separating these into a re-usable project is the starting point for building your own internal framework.", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Building, documenting, training and maintaining an internal framework is really hard. If you don't have an experienced, dedicated framework team, your internal framework rapidly becomes an undocumented legacy code that no one can understand and maintain anymore. On the other hand, these frameworks are generally developed by one or two developers in the team. And these fellows are becoming a knowledge silo. It is good for them but bad for the company because they are the project's single point of failure -SPOF-. Once they leave the company, the project dramatically goes down.", + "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP is a community-driven, well-documented, mature and generic application framework. A team of highly experienced developers are working hard to keep it up-to-date, easy to understand and comfortable to use. Using such a stable framework makes you focus on your own business code and get help with the framework from experts whenever you need it.", + "ArchitecturalInfrastructure_Description": "SaaS applications, modular or microservice systems are most used enterprise software models. Building such systems not only requires a good understanding and experience but also requires a strong software infrastructure. Otherwise, you will find yourself spending a great effort to support these architectural details in your codebase.", + "Modularity_THEPROBLEM_Description": "Building a truly modular system is not easy! All the aspects of the system (database, entities, APIs, UI pages/components) can be split into modules, and each module can be re-usable without others. The plain ASP.NET Core doesn't provide such a modular architecture. If you need it, you should think about it from scratch.", + "Modularity_ABPSOLUTION_Description": "The ABP is born to be a modular application development structure. Every feature in the framework is developed to be compatible with modularity. Documentation and guides explain how to develop re-usable modules in a standard way.", + "SaaSMultiTenancy": "SaaS / Multi-tenancy", + "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-tenancy is a common way to implement SaaS systems. However, implementing a consistent multi-tenant infrastructure may become complicated.", + "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP provides a complete multi-tenant infrastructure and abstract complexity from your business code. Your application code will be mostly multi-tenancy aware, while the ABP automatically isolates the database, cache and other details of the tenants from each other. It supports single database, per tenant database and hybrid approaches. It properly configures the libraries like Microsoft Identity and OpenIddict, which are not normally multi-tenancy compatible.", + "Microservices": "Microservices", + "Microservices_THEPROBLEM_Description": "Building a microservice system requires many infrastructure details: Authenticating and authorizing applications and microservices and implementing asynchronous messaging and synchronous (Rest/GRPC) communication patterns between microservices are the most fundamental issues.", + "Microservices_ABPSOLUTION_Description": "The ABP provides services, guides, and samples to help you implement your microservice solution using the industry standard tools.", + "Microservices_ABPSOLUTION_Description2": "ABP's commercial licenses even goes one step further and provides a complete startup template to kick-start your microservice solution.", + "PreBuiltModules": "Pre-Built Modules", + "PreBuiltModules_THEPROBLEM_Description": "All of us have similar but slightly different business requirements. However, we all should re-invent the wheel since no one's code can directly work in our solution. They are all embedded parts of a larger solution.", + "PreBuiltModules_ABPSOLUTION_Description": "ABP modules provides a lot of re-usable application modules like payment, chat, file management, audit log reporting... etc. All of these modules are easily installed into your solution and directly work. We are constantly adding more modules.", + "PreBuiltModules_ABPSOLUTION_Description2": "All modules are designed as customizable for your business requirements. If you need complete control, you can download the full source code of any module and completely customize based on your specific business requirements.", + "ABPCommunity": "ABP Community", + "ABPCommunity_Description": "Finally, Being in a big community where everyone follows similar coding styles and principles and shares a common infrastructure brings power when you have troubles or need help with design decisions. Since we write code similarly, we can help each other much better. ABP is a community-backed project with more than 10K stars on GitHub.", + "ABPCommunity_Description2": "It is easy to share code or even re-usable libraries between ABP developers. A code snippet that works for you will also work for others. There are a lot of samples and tutorials that you can directly implement for your application.", + "ABPCommunity_Description3": "When you hire a developer who worked before with the ABP architecture will immediately understand your solution and start development in a very short time.", + "WhyAbpIo_Page_Title": "Why ABP Platform?", + "AbpStudio_Page_Title": "ABP Studio | Cross-Platform Desktop Application", + "AbpStudio_Page_Description": "ABP Studio is a cross-platform desktop application for ABP developers. It's the easiest way to get started with the ABP Platform.", + "CampaignInfo": "Buy a new license or renew your existing license and get an additional 2 months at no additional cost! This offer is valid for all license plans. Ensure you take advantage of this limited-time promotion to expand your access to premium features and upgrades.", + "HurryUpLastDay": "Hurry Up! Last Day: {0}", + "CreatingCRUDPagesWithABPSuite": "Creating CRUD pages with ABP Suite", + "MultipleYearDiscount": "Multiple Year Discount", + "CampaignDiscountText": "Black Friday Discount", + "CampaignDiscountName": "Black Friday", + "CampaignName:BlackFriday": "Black Friday", + "MultipleOrganizationInfo": "See All Your Organizations", + "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", + "AbpStudioBetaAccessInfoText": "We're thrilled to share with you the beta version of ABP Studio! This release marks a significant milestone in our development journey, and we're eager to gather your feedback to make the application even better.", + "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Your organization has no default credit card. Please add a credit card to your organization.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "You are not authorized to pay this payment request.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "You are not authorized to create billing info for this payment request.", + "OrganizationNotFound": "Organization not found.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "You cannot delete this card at the moment because the Auto-Renewal feature is enabled. To delete the card, first disable Auto-Renewal.", + "AreYouSureWantToDeleteThisCard": "Are you sure you want to delete this card?", + "AreYouSureWantToSetThisCardAsDefault": "Are you sure you want to set this card as default?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Your organization's billing info is not suitable for iyzico payment.", + "AutomaticRenewal": "Automatic Renewal", + "AutomaticRenewal_Description": "Renewing a license before it expires lets you get a discount of up to %40. The auto-renewal process lets you renew your license without losing this discount, and your development will never interrupt. Auto-renewal is only available for credit card payment. You can disable auto-renewal at any time by accessing your Organization Management page. ABP does not save your credit card information, but our global payment gateways do secure savings.", + "CardNotFoundMessage": "Do you want to add a new card?", + "CardNotFoundTitle": "Card Not Found", + "AutoRenewalEnabled": "Auto Renewal Enabled", + "AutoRenewalDisabled": "Auto Renewal Disabled", + "PaymentRequestIdIsNotProvided": "Payment request id is not provided.", + "PaymentFailedInfo": "Sorry, payment failed! This could be due to insufficient funds, invalid credit card numbers or invalid pin", + "UsedPayment": "This payment has been already used", + "ManageLicense": "Manage License", + "AbpPlatformLeptonXTheme": "LeptonX Theme for Your Admin Dashboard by ABP Platform", + "NoActiveLicence": "You are not eligible for this action! You have no active license.", + "ABPStudioBetaTester": "To be able to submit your request, you must sign in", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Visit ABP Studio", + "EditBillingInformation": "Edit Billing Information", + "Organization": "Organization", + "E-Book": "E-Book", + "CreditCards": "Credit Cards", + "BillingInformation": "Billing Information", + "AddNewCreditCard": "Add New Credit Card", + "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page", + "AutoLicenseRenewalIsNotEnabled": "Auto license renewal is not enabled.", + "SetAsDefaultPaymentMethod": "Set as default payment method", + "{0}PerAdditionalDeveloper": "${0} per additional developer", + "CardAlias": "Card Alias (Optional)", + "AbpDoesNotSaveYourPaymentDetails_Description": "The payment data will be saved in {2} security vaults and you can remove stored data anytime. Enabling auto-renewal ensures that your ABP subscription will automatically renew prior to expiration, providing a valid credit card. Disabling auto-renewal means you will have to renew your subscription manually. To continue your project development without interruption, we suggest you enable the Auto-Renewal option.", + "AddBillingInformation": "Add Billing Information", + "YouHaveNoCardsSaved": "Card not saved yet.", + "CreateCreditCardModal_BillingDetails_Description": "You must save your billing details to be able to add your credit card.", + "TaxNo": "Tax No", + "CardNumber": "Card Number", + "NameOnCard": "Name on Card", + "BillingDetails": "Billing Details", + "ThereIsNoDeveloper": "No developer added.", + "CardDetails": "Debit/Credit Card Details", + "YearCantBeNull": "Year field cannot be empty.", + "CardHolderName": "Name on Card", + "ExpireDate": "Expiration Date", + "DisplayName:ExpireDate": "Expiration Date", + "DisplayName:CardHolderName": "Name on Card", + "CreditCardNumberLengthWarning": "Invalid card number", + "ExpirationWarning": "Invalid expiration date", + "CreateCreditCardModal_Description": "When saving your debit/credit card, a temporary $1 charge will be authorized for verification and promptly refunded.", + "ReturnOnInvestmentTitle": "Return on Investment", + "ReduceYourDevelopmentCostsDescription": "Reduce your development costs by more than 50% with the ABP Platform.", + "SettingUpTheArchitectureTitle": "Setting up the Architecture", + "DoingEverythingFromScratch": "Doing everything from scratch", + "SettingUpTheArchitecture_Description1": "Organize code base and solution structure", + "SettingUpTheArchitecture_Description2": "Determine, install and configure essential 3rd-party libraries", + "SettingUpTheArchitecture_Description3": "Setup automated integration and unit test infrastructure", + "SettingUpTheArchitecture_Description4": "Determine and document code standards, train the development team", + "UsingTheABPFramework": "Using the ABP Platform", + "UseABPSettingUpTheArchitecture_Description": "Use ABP's startup solution templates", + "ReduceCostsWithABP": "Reduce Costs with ABP by", + "ReduceCostsBy": "80% to 100%", + "DesigningTheUserInterfaceTitle": "Designing the User Interface", + "DesigningTheUserInterface_Description1": "Create or buy a UI theme", + "DesigningTheUserInterface_Description2": "Adapt the UI theme to the solution", + "DesigningTheUserInterface_Description3": "Build the essential UI parts (layout, menu, header, footer with responsive design)", + "DesigningTheUserInterface_Description4": "Ensure the design consistency across application pages", + "UseABPDesigningTheUserInterface_Description": "Use ABP's LeptonX UI Theme", + "DevelopingApplicationFeaturesTitle": "Developing the Application Features", + "DevelopingApplicationFeatures_Description1": "Develop your own business logic", + "DevelopingApplicationFeatures_Description2": "Develop every page one by one", + "DevelopingApplicationFeatures_Description3": "Develop common business modules yourself", + "DevelopingApplicationFeatures_Description4": "Develop the authentication system (single sign on, 2 factor auth, social logins, reset password, email activation, etc...)", + "DevelopingApplicationFeatures_Description5": "Apply cross-cutting concerns in every use case (DB transactions, authorization, validation, exception handling, etc...)", + "DevelopingApplicationFeatures_Description6": "Develop common base classes and utility services", + "DevelopingApplicationFeatures_Description7": "Develop common non-business requirements (audit logging, soft-delete, background jobs, permission system, etc.)", + "UseABPDevelopingApplicationFeatures_Description1": "Develop your own business logic", + "UseABPDevelopingApplicationFeatures_Description2": "Use ABP Suite to automatically generate CRUD-like pages", + "UseABPDevelopingApplicationFeatures_Description3": "Directly use ABP's pre-built common application modules and customize based on your unique requirements", + "ReduceCostsBy_2": "40% to 60%", + "WhyABPIoPlatform": "Why ABP Platform?", + "WhyShouldYouUsetheABPIOPlatform": "Why should you use the ABP Platform instead of creating a new solution from scratch?", + "ExploreMore": "Explore More", + "DocumentIntroducesDescription": "If you want to learn more details about why should you use the ABP Platform instead of creating a new solution from scratch, read the following document. ", + "ReturnOnInvestmentPageAbout": "This page covers the fundamental steps of developing a software solution and explains how the ABP Platform reduces your development costs at each step.", + "LearnMore": "Learn More", + "ReturnOfInvestment": "Return of Investment", + "ReturnOnInvestment_Description": "Learn about the return on investment when using ABP, highlighting cost-effectiveness and efficiency.", + "PricingDiscount": "Save", + "PricingTeamTitle": "Team", + "PricingBusinessTitle": "Business", + "PricingEnterpriseTitle": "Enterprise", + "SpecialDiscount": "Special Discount", + "YourOrganizationOverview": "Your Organization Overview", + "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hour", + "ContactPageError": "Please send your message via email to info@abp.io
Here's what you wrote :", + "GoBack": "Go back", + "HereWhatYouWrote": "Here's what you wrote :", + "Sales": "Sales", + "LicensingPricing": "Licensing / Pricing", + "TrialDemo": "Trial / Demo", + "TrainingOnboarding": "Training / Onboarding", + "Resellers": "Resellers", + "Reselling": "Reselling", + "Others": "Others", + "Characters": "Characters", + "Topic": "Topic", + "SendUsEmail": "Send us email", + "ErrorExceptionMessage": "An error occurred while processing your request", + "WatchTakeCodeGeneration": "Watch the \"Explore the Potential of Code Generation: ABP Suite\" Video!", + "StartupTemplatesUser": "User", + "StartupSingleSignOn": "Single Sign On", + "Application{0}": "Application {0}", + "PreBuiltApplicationModulesTitle": "Pre-Built Application Modules", + "RegisterDemo": "Register", + "TrainingDescription": "Enroll in ABP trainings to improve your skills and knowledge, keeping up with the latest developments.", + "PurchaseDevelopers": "developers", + "LinkExpiredMessage": "The payment link has expired! Contact us at sales@volosoft.com to update the link or click here to navigate to the contact page.", + "YourAccountDisabled": "Your user account is disabled!", + "WhyChooseAbpTitle": "Why Choose ABP?", + "WhyChooseAbpDescription": "Discover ABP Commercial benefits: modular architecture, microservice ready modules, productivity tools and robust features for modern line of business web apps.", + "AbpIo_Modern_Title": "ABP.IO - Modern ASP.NET Core Web Application Platform", + "AbpIo_Modern_Description": "ABP Platform provides an open-source framework on top of ASP.NET Core with Angular, Blazor, and MVC UI options to create scalable line of business web apps.", + "My_Organizations_Page_Title": "My Organizations", + "My_Organizations_Page_Description": "View your ABP Platform organizations to manage your developers, license renewals and upgrade.", + "Members_Page_Title": "{0} - Community Member", + "Members_Page_Description": "{0} is a member of the ABP Community. Check out the contributions and benefit this experience.", + "Framework_Page_Title": "ABP Framework", + "Framework_Page_Description": "ABP Framework is the most straightforward way to kick-start your project! Learn about ABP Framework's robust features.", + "CLI_Page_Title": "ABP CLI", + "CLI_Page_Description": "Use the ABP CLI dotnet global tool to create a new ABP project, update it, manage packages and access the source-code of ABP modules.", + "Mobile_Page_Title": "ABP Mobile Client", + "Mobile_Page_Description": "Develop powerful mobile applications with ABP's mobile development features, ensuring cross-platform compatibility.", + "ReleasesPageTitle": "ABP Commercial Releases", + "ReleasesPageDescription": "Stay updated with the latest features and updates in ABP Commercial Releases, ensuring your applications are cutting-edge.", + "GetStartedPageDescription": "Begin your journey with ABP by following our step-by-step guide. Learn how to set up your development environment, explore key features, start building apps", + "Community_Page_Title": "ABP Community", + "Community_Page_Description": "Connect and collaborate with other developers in the ABP Community, sharing knowledge and resources.", + "Services_Page_Title": "Additional Services", + "Services_Page_Description": "Get professional development and support services from the ABP Team or its solution partners, ensuring your project's success.", + "Contributors_Page_Title": "Contributors of ABP", + "Contributors_Page_Description": "Meet the contributors of the ABP Community, learning about their roles and contributions to the framework.", + "PackagesDetailTitle": "{0} - Package Details", + "PackagesDetailDescription": "Get detailed information about the {0} package, including features and usage.", + "Raffle_Page_Title": "Raffle - {0}", + "Raffle_Page_Description": "Participate in ABP raffles and stand a chance to win exciting prizes, engaging with the ABP Community.", + "Docs_Page_Title": "ABP Documentation", + "Docs_Page_Description": "Access comprehensive guides and API references in the ABP Documentation, aiding in development and troubleshooting.", + "Videos_Page_Title": "{0} - Video Post", + "AskQuestionsOnSupport": "You can ask questions on ABP Support.", + "MicroserviceApplicationExplanation1": "Creates a distributed solution.", + "MicroserviceApplicationExplanation2": "Recommended for large teams to create complex and scalable systems.", + "CancellationSupport": "Cancellation Support", + "CancellationSupportExplanation": "ABP allows for the graceful termination of asynchronous operations in applications, ensuring proper resource cleanup and responsive user experience.", + "DistributedLocking": "Distributed Locking", + "DistributedLockingExplanation": "ABP's distributed locking system ensures that resources are accessed in a mutually exclusive manner across different nodes in a distributed environment, preventing concurrent conflicts and ensuring data consistency.", + "EncryptionDecryptionServices": "Encryption & Decryption Services", + "EncryptionDecryptionServicesExplanation": "ABP provides string encryption feature that allows to Encrypt and Decrypt strings.", + "BackgroundWorkers": "Background Workers", + "BackgroundWorkersExplanation": "Define operations to run in a separate, dedicated thread. Use the built-in background workers or integrate your own. Hangfire and Quartz integrations are already available.", + "ConcurrencyCheck": "Concurrency Check", + "ConcurrencyCheckExplanation": "ABP provides an optimistic concurrency check mechanism to ensure data consistency in your application and prevents users access or change the same data in a database at the same time.", + "NewsletterEmailFooterCreateTemplateMessage": "
Thank you for subscribing! We're thrilled to have you on board.
As a subscriber, you'll receive the latest updates on:
  • Promotional Offers:Benefit from exclusive discounts, seasonal campaigns, and special offers.
  • Events:Stay informed about our Community Talks, Webinars, and the ABP DOTNET Conferences.
  • Release Notes:Get the latest on ABP Platform releases and new products.
  • Newsletter:Enjoy our blog posts, community news, and more.

We look forward to keeping you informed and engaged.
", + "NewsletterDeleteSubscriptionDescription": "
This is a confirmation that you have unsubscribed from the following email categories:
  • Promotional Offers:Discounts, seasonal campaigns, etc.
  • Events:Community Talks, Webinars, ABP DOTNET Conference, etc.
  • Release Notes:ABP Platform releases, new products, etc.
  • Newsletter:Blog posts, community news, etc.

Please note that you will still receive important transactional emails related to your account.
", + "NewsletterEmailFooterTemplateDeleteSubscription": "If you change your mind, you're always welcome to resubscribe!", + "GenerateQuote" : "Generate Quote" , + "GeneratePriceQuote": "Generate a Price Quote", + "Qa:QuestionPageTitle": "Support", + "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", + "FaqIyzicoPaymentIssuesTitle" : "What should I do if I encounter issues while purchasing the Iyzico payment gateway?", + "FaqIyzicoPaymentIssuesExplanation1": "This website uses two payment gateways to receive payments: Iyzico and 2Checkout. The default gateway is Iyzico. When you check the 'Automatic Renewal' option, it will automatically use the Iyzico payment gateway. If you’re experiencing issues while trying to purchase through the Iyzico payment gateway, it could be due to the following reasons:", + "FaqIyzicoPaymentIssuesExplanation2": "Card Type: Iyzico only supports VISA and MasterCard. If you’re using a different card type (e.g., American Express), please switch to the 2Checkout payment gateway.", + "FaqIyzicoPaymentIssuesExplanation3": "3D Secure: If your card has 3D Secure enabled, you’ll be redirected to your card provider’s 3D Secure page to complete the verification process. Once done, you’ll return to Iyzico to finalize the payment. If you encounter any issues with 3D Secure, please contact your card provider for assistance. Sometimes there might be problems with the redirection to the 3D Secure provider, in that case you can disable 3D Secure or contact us.", + "FaqIyzicoPaymentIssuesExplanation4": "If you’re unable to complete the payment through Iyzico, you can use our alternative payment gateway, 2Checkout which supports a wider range of payment options, including:", + "FaqIyzicoPaymentIssuesExplanation5": "Credit/Debit Cards: Visa, MasterCard, American Express, Discover, Diners Club, JCB", + "FaqIyzicoPaymentIssuesExplanation6": "Digital Wallets: PayPal, AliPay, WebMoney", + "FaqIyzicoPaymentIssuesExplanation7": "Alternatively, you can send the license amount directly via bank wire transfer. For our bank account details, please visit: Bank Account Information (use USD currency).", + "FaqIyzicoPaymentIssuesExplanation8": "ABP website doesn't save or process your credit card. We use payment gateways for this and the entire transaction is handled by payment gateways. We have no authority to interfere with the payment process or fix the payment steps. If you have further questions or need additional support, feel free to contact us at abp.io/contact.", + "BiographyContainsUrlValidationMessage": "Biography cannot contain URL.", + "CreatePostSEOTitleInfo": "SEO URL is a clean, readable, keyword-rich URL that helps both users and search engines understand what this post is about. Keep it short with 60 characters. SEO titles over 60 characters will be truncated. Use hyphens (-) to separate words (not underscores). Include target keywords near the start. Lowercase only. No stop words unless needed (e.g: \"and\", \"or\", \"the\").", + "SEOTitle": "SEO URL", + "InvalidYouTubeUrl": "The URL you entered is not a valid YouTube video link. Please make sure it points to a specific video and try again.", + "SelectAnOption": "Select an option" } -} \ No newline at end of file +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json index 2c647327ef..20f77e2323 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Aplicación web progresiva", "Preview": "Avance", "CreateANewSolution": "Crear una nueva solución", - "ABPFrameworkFeatures": "Características del marco ABP", + "FrameworkFeatures": "Características del marco ABP", "Commercial": "Comercial", "ThirdPartyTools": "Herramientas de terceros", "Back": "Atrás", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json index 4a63cc389d..e189d7fd3e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progressiivinen verkkosovellus", "Preview": "Esikatsele", "CreateANewSolution": "Luo uusi ratkaisu", - "ABPFrameworkFeatures": "ABP-kehyksen Ominaisuudet", + "FrameworkFeatures": "ABP-kehyksen Ominaisuudet", "Commercial": "Kaupallinen", "ThirdPartyTools": "Kolmannen osapuolen työkalut", "Back": "Takaisin", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json index d8278d2aea..918b66b3db 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Application Web progressive", "Preview": "Aperçu", "CreateANewSolution": "Créer une nouvelle solution", - "ABPFrameworkFeatures": "Fonctionnalités du cadre ABP", + "FrameworkFeatures": "Fonctionnalités du cadre ABP", "Commercial": "Commercial", "ThirdPartyTools": "Outils tiers", "Back": "Dos", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json index 12113024fa..e421c2e5d1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "प्रगतिशील वेब अनुप्रयोग", "Preview": "पूर्व दर्शन", "CreateANewSolution": "एक नया समाधान बनाएं", - "ABPFrameworkFeatures": "एबीपी फ्रेमवर्क विशेषताएं", + "FrameworkFeatures": "एबीपी फ्रेमवर्क विशेषताएं", "Commercial": "व्यावसायिक", "ThirdPartyTools": "तृतीय पक्ष उपकरण", "Back": "पीछे", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json index 96981e81a3..d54e9fd481 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresivna web aplikacija", "Preview": "Pregled", "CreateANewSolution": "Napravite novo rješenje", - "ABPFrameworkFeatures": "Značajke ABP okvira", + "FrameworkFeatures": "Značajke ABP okvira", "Commercial": "Komercijalni", "ThirdPartyTools": "Alati trećih strana", "Back": "leđa", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json index b7b8eb602c..60fdc4eb92 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresszív webes alkalmazás", "Preview": "Előnézet", "CreateANewSolution": "Hozzon létre egy új megoldást", - "ABPFrameworkFeatures": "Az ABP keretrendszer jellemzői", + "FrameworkFeatures": "Az ABP keretrendszer jellemzői", "Commercial": "Kereskedelmi", "ThirdPartyTools": "Harmadik féltől származó eszközök", "Back": "Vissza", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json index 562f09c178..e6b27aeae8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Framsækið vefforrit", "Preview": "Forskoðun", "CreateANewSolution": "Búðu til nýja lausn", - "ABPFrameworkFeatures": "ABP Framework Eiginleikar", + "FrameworkFeatures": "ABP Framework Eiginleikar", "Commercial": "Auglýsing", "ThirdPartyTools": "Verkfæri þriðja aðila", "Back": "Til baka", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json index 4201960c15..e13fa64406 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Applicazione Web progressiva", "Preview": "Anteprima", "CreateANewSolution": "Creare una nuova soluzione", - "ABPFrameworkFeatures": "Caratteristiche della struttura ABP", + "FrameworkFeatures": "Caratteristiche della struttura ABP", "Commercial": "Commerciale", "ThirdPartyTools": "Strumenti di terze parti", "Back": "Indietro", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json index 9a49e6ab83..47469d7a90 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progressieve webapplicatie", "Preview": "Voorbeeld", "CreateANewSolution": "Creëer een nieuwe oplossing", - "ABPFrameworkFeatures": "ABP Framework -functies", + "FrameworkFeatures": "ABP Framework -functies", "Commercial": "Reclame", "ThirdPartyTools": "Hulpmiddelen van derden", "Back": "Rug", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json index 04af61c847..b2c9c3acf2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresywna aplikacja internetowa", "Preview": "Zapowiedź", "CreateANewSolution": "Utwórz nowe rozwiązanie", - "ABPFrameworkFeatures": "Funkcje struktury ABP", + "FrameworkFeatures": "Funkcje struktury ABP", "Commercial": "Handlowy", "ThirdPartyTools": "Narzędzia stron trzecich", "Back": "Z powrotem", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json index 02ade27a61..6ababfeac1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Aplicativo Web Progressivo", "Preview": "Visualização", "CreateANewSolution": "Crie uma nova solução", - "ABPFrameworkFeatures": "Recursos da estrutura ABP", + "FrameworkFeatures": "Recursos da estrutura ABP", "Commercial": "Comercial", "ThirdPartyTools": "Ferramentas de terceiros", "Back": "Voltar", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json index 1f7ad50da1..f1f80e27b8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Aplicație web progresivă", "Preview": "previzualizare", "CreateANewSolution": "Creați o nouă soluție", - "ABPFrameworkFeatures": "Caracteristicile cadrului ABP", + "FrameworkFeatures": "Caracteristicile cadrului ABP", "Commercial": "Comercial", "ThirdPartyTools": "Instrumente de la terți", "Back": "Înapoi", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json index dd022d4d26..8f0c0ef81e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json @@ -299,7 +299,7 @@ "ProgressiveWebApplication": "Прогрессивное веб-приложение", "Preview": "Предварительный просмотр", "CreateANewSolution": "Создать новое решение", - "ABPFrameworkFeatures": "Структура ABP Функции", + "FrameworkFeatures": "Структура ABP Функции", "Commercial": "Коммерческий", "ThirdPartyTools": "Сторонние инструменты", "Back": "Назад", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json index e5634acb64..333020d4f5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresívna webová aplikácia", "Preview": "Náhľad", "CreateANewSolution": "Vytvorte nové riešenie", - "ABPFrameworkFeatures": "Funkcie rámca ABP", + "FrameworkFeatures": "Funkcie rámca ABP", "Commercial": "Komerčný", "ThirdPartyTools": "Nástroje tretích strán", "Back": "späť", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json index 2b0b8274ec..424efaf1d3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresivna spletna aplikacija", "Preview": "Predogled", "CreateANewSolution": "Ustvarite novo rešitev", - "ABPFrameworkFeatures": "Funkcije ogrodja ABP", + "FrameworkFeatures": "Funkcije ogrodja ABP", "Commercial": "Komercialno", "ThirdPartyTools": "Orodja tretjih oseb", "Back": "Nazaj", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json index b8c3514d66..64f97fc08b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json @@ -298,7 +298,7 @@ "SeparateIdentityServer": "Ayrı Kimlik Sunucusu", "Preview": "Önizleme", "CreateANewSolution": "Yeni bir çözüm oluşturun", - "ABPFrameworkFeatures": "ABP Framework Özellikleri", + "FrameworkFeatures": "ABP Framework Özellikleri", "ThirdPartyTools": "Üçüncü taraf araçlar", "Back": "Geri", "SeeMore": "Daha fazla göster", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json index 6a31739036..210be53393 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Ứng dụng web tiến bộ", "Preview": "Xem trước", "CreateANewSolution": "Tạo một giải pháp mới", - "ABPFrameworkFeatures": "Tính năng của khung ABP", + "FrameworkFeatures": "Tính năng của khung ABP", "Commercial": "Thuộc về thương mại", "ThirdPartyTools": "Công cụ của bên thứ ba", "Back": "Mặt sau", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json index 984a3d28a7..0dc5f525b1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "渐进式Web应用程序", "Preview": "预览", "CreateANewSolution": "创建新解决方案", - "ABPFrameworkFeatures": "ABP 框架 特点特点特點", + "FrameworkFeatures": "ABP框架特點", "Commercial": "商業的", "ThirdPartyTools": "第三方工具", "Back": "後退", diff --git a/build/common.ps1 b/build/common.ps1 index 85f18edb21..51ab56d972 100644 --- a/build/common.ps1 +++ b/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 diff --git a/common.props b/common.props index 41f876e0af..faccfb4394 100644 --- a/common.props +++ b/common.props @@ -1,8 +1,8 @@ latest - 8.3.4 - 3.3.4 + 9.3.2 + 4.3.2 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/docs/en/Blog-Posts/2022-03-08 v5_2_Preview/POST.md b/docs/en/Blog-Posts/2022-03-08 v5_2_Preview/POST.md index b78e3235a2..b0b44b9e45 100644 --- a/docs/en/Blog-Posts/2022-03-08 v5_2_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-03-08 v5_2_Preview/POST.md @@ -187,7 +187,7 @@ We organized the 3rd live [ABP Community Talks](https://community.abp.io/events) * [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) has also created [an article](https://community.abp.io/posts/using-autofilterer-with-abp-framework-uuqv81jm) to demonstrate how to use his own open source [AutoFilterer](https://github.com/enisn/AutoFilterer) library with the ABP Framework. * [Jonathan Potts](https://github.com/jonathanpotts) has created his first ABP Community article that shows how to use Bootswatch themes with the ABP Framework. [See it here](https://community.abp.io/posts/customizing-the-abp-basic-theme-with-bootswatch-4luoqzr0). -Thanks to all the contributors. It is appreciated if you want to submit your post and share your knowledge with the ABP community: https://community.abp.io/posts/submit +Thanks to all the contributors. It is appreciated if you want to submit your post and share your knowledge with the ABP community: https://community.abp.io/posts/create ## Conclusion diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index b23dab0cd1..dfc5a7d67e 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -255,4 +255,4 @@ We've created an official ABP Discord server so the ABP Community can interact w Thanks to the ABP Community, **700+** people joined our Discord Server so far and it grows every day. -You can join our Discord Server from [here](https://discord.gg/abp), if you haven't yet. \ No newline at end of file +You can join our Discord Server from [here](https://abp.io/join-discord), if you haven't yet. \ No newline at end of file diff --git a/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md b/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md index e545681d71..8b0e45fc7b 100644 --- a/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md @@ -187,7 +187,6 @@ The following improvements have been made on [eShopOnAbp project](https://github * Some improvements have been made on the Admin Application for Order Management for Angular UI. See [#110](https://github.com/abpframework/eShopOnAbp/pull/110). * `SignalR` error on Kubernetes & Docker Compose has been fixed. See [#113](https://github.com/abpframework/eShopOnAbp/pull/113). -* eShopOnAbp project has been deployed to Azure Kubernetes Service. See [#114](https://github.com/abpframework/eShopOnAbp/pull/114). The live demo can be seen from [eshoponabp.com](https://eshoponabp.com/). * Configurations have been made for some services on the `docker-compose.yml` file. See [#112](https://github.com/abpframework/eShopOnAbp/pull/112). * Gateway Redirect Loop problem on Kubernetes has been fixed. See [the commit](https://github.com/abpframework/eShopOnAbp/commit/6413ef15c91cd8a5309050b63bb4dbca23587607). diff --git a/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/post.md b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/post.md index b844fb5540..574dd6b590 100644 --- a/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/post.md +++ b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/post.md @@ -105,9 +105,12 @@ ASP.NET modularity, ASP.NET modular development, ASP.NET localization, ASP.NET m ## Microservice Example: eShopOnAbp -[eShopOnAbp](https://www.eshoponabp.com/) is a microservice example built on top ABP. It is a sample net application, similar to the Microsoft's [eShopOnContainer](https://github.com/dotnet-architecture/eShopOnContainers) project. It is a reference microservice solution built with the ABP Framework and .NET, runs on Kubernetes with Helm configuration, includes API Gateways, Angular and ASP.NET Core MVC applications with PostgreSQL and MongoDB databases. For more information, check out https://github.com/abpframework/eShopOnAbp. - +[eShopOnAbp](https://github.com/abpframework/eShopOnAbp) is a microservice example built on top ABP. It is a sample net application, similar to the Microsoft's [eShopOnContainer](https://github.com/dotnet-architecture/eShopOnContainers) project. It is a reference microservice solution built with the ABP Framework and .NET, runs on Kubernetes with Helm configuration, includes API Gateways, Angular and ASP.NET Core MVC applications with PostgreSQL and MongoDB databases. For more information, check out https://github.com/abpframework/eShopOnAbp. +> ⚠️ **Important Notice** +> This project, "eshoponabp," is outdated. It served as a reference project for microservice architecture using the ABP Framework, but we now recommend using the [ABP Microservice Solution Template](https://abp.io/docs/latest/solution-templates/microservice) for new projects. +> +> The new template offers a modernized and officially supported starting point for building microservices with ABP. Please consider transitioning to the new template for the latest features and improvements. ## Conclusion diff --git a/docs/en/Blog-Posts/2024-02-16 v8_1_Preview/POST.md b/docs/en/Blog-Posts/2024-02-16 v8_1_Preview/POST.md index 24f55474ad..70cb53c75e 100644 --- a/docs/en/Blog-Posts/2024-02-16 v8_1_Preview/POST.md +++ b/docs/en/Blog-Posts/2024-02-16 v8_1_Preview/POST.md @@ -230,7 +230,7 @@ There are exciting articles contributed by the ABP community as always. I will h * [A Best Practice for Designing Interfaces in .NET C#](https://community.abp.io/posts/a-best-practice-for-designing-interfaces-in-.net-c-9xqc4h8d) * [Invariance, Covariance, and Contravariance in .NET C#](https://community.abp.io/posts/invariance-covariance-and-contravariance-in-.net-c-9blmuhme) -Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/posts/submit) to the ABP Community. +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/posts/create) to the ABP Community. ## Conclusion diff --git a/docs/en/Blog-Posts/2024-05-21 v8_2_Release/POST.md b/docs/en/Blog-Posts/2024-05-21 v8_2_Release/POST.md index 23260950d4..aadaae1c6f 100644 --- a/docs/en/Blog-Posts/2024-05-21 v8_2_Release/POST.md +++ b/docs/en/Blog-Posts/2024-05-21 v8_2_Release/POST.md @@ -260,7 +260,7 @@ There are exciting articles contributed by the ABP community as always. I will h * [Using FluentValidation with ABP Framework](https://community.abp.io/posts/using-fluentvalidation-with-abp-framework-2cxuwl70) by [Enes Döner](https://community.abp.io/members/Enes) * [Using Blob Storage with ABP](https://community.abp.io/posts/using-blob-storage-with-abp-framework-jygtmhn4) by [Emre Kendirli](https://community.abp.io/members/emrekenderli) -Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/posts/submit) to the ABP Community. +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/posts/create) to the ABP Community. ## Conclusion diff --git a/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/cover.png b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/cover.png new file mode 100644 index 0000000000..95265fea29 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/cover.png differ diff --git a/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/post.md b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/post.md new file mode 100644 index 0000000000..bc18035bf9 --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/post.md @@ -0,0 +1,62 @@ + +# The new ABP Platform is live! + +We're thrilled to announce that the **new ABP.IO Platform is now live!** Our team has been hard at unifying and enhancing the entire platform to deliver a seamless, user-friendly experience. Here's what's new: + + +### Unified domain and enhanced navigation 🌍 +All our services are now consolidated under a single domain; [abp.io](https://abp.io). This means you no longer need to navigate through multiple subdomains. The new mega menu makes finding what you need easier and faster. + + +### Modern design and improved UX 🎨 +The platform boasts a fresh, modern design aimed at improving both aesthetics and functionality. This redesign enhances usability, making your interaction with ABP.IO more intuitive. + + + +### Documentation in one place 📃 +We’ve combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unified documentation will help you find what you're looking for more efficiently. The new documentation address is [abp.io/docs](https://abp.io/docs). When you switch to old ABP versions before v8.3, you will see the old documents are still available. + + + +### Introducing "ABP Studio Community Edition" 🪄 +We're excited to introduce the **ABP Studio Community Edition**, which is now **available for free**. This edition provides powerful tools to streamline your development process. You can easily create a new project with a configuration wizard in ABP Studio. It also provides module management, which means you can add/remove an ABP Module easily. You can also debug your microservice project and track the HTTP requests easily. Connecting your local development environment to a local or remote Kubernetes cluster is another cool feature of ABP Studio. We aim for ABP Studio to be the primary tool for ABP developers to manage their projects. + +> Download ABP Studio 👉 [abp.io/studio](https://abp.io/studio). + + +### Enhanced "ABP CLI" 🚀 +ABP CLI is also renewed. The new CLI is compatible with ABP Studio. It adds new commands. The new CLI is now available on NuGet at [nuget.org/packages/Volo.Abp.Studio.Cli](https://www.nuget.org/packages/Volo.Abp.Studio.Cli). It's a dotnet global tool. When you install ABP Studio, the new ABP CLI is automatically installed. You can still use the old ABP CLI commands. To use the legacy ABP CLI commands just add `--old` parameter to your commands. + +> The docs of the new ABP CLI 👉 [abp.io/docs/latest/cli](https://abp.io/docs/latest/cli). + + + +### 20% Celebration discount 💰 +To celebrate the launch of the new platform, we're offering a **20% discount** for a limited time. This discount is valid for all new purchases, renewing existing licenses and buying additional developer seats. + +> Discounted prices 👉 [abp.io/pricing](https://abp.io/pricing). + + +### Existing customers 🛂 +In terms of licensing rules, existing customers will not be affected by this change. You can manage your license just like before at [abp.io/my-organizations](https://abp.io/my-organizations). + +> The new support website address 👉 [abp.io/support](https://abp.io/support). + +--- + +### Why choose the ABP Platform? 🙄 +ABP Platform simplifies modern software development with well-architected startup templates, modular design infrastructure, multi-tenancy support, comprehensive security features, and a vibrant community. If you are starting a new web project or transforming your legacy application, ABP is the perfect solution! If you still wonder why you need such a solution, see [abp.io/why-choose-abp](https://abp.io/why-choose-abp). + +There are several startup ASP.NET Core templates for your requirements. Read [abp.io/how-it-works](https://abp.io/how-it-works) page to understand ABP's approach. We have a FAQ page where you can find answers to many of your questions [abp.io/faq](https://abp.io/faq). + +> Start your new ABP project -for free- 👉[abp.io/get-started](https://abp.io/get-started)! + + +### Join our community 👨‍👨‍👦 +We invite developers, IT professionals, and businesses to join the ABP Community. Our community website is now [abp.io/community](https://abp.io/community). On this website, you can read ABP-related posts, watch live community shows and core team's fundamental video courses... + +------ + +For more information, visit our newly unified platform at [abp.io](https://abp.io). We look forward to your feedback and continued support as we grow together! + +> Found a bug in the new platform? Or if you have an idea, write to us 👉 [abp.io/contact](https://abp.io/contact). diff --git a/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/cover-image.png b/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/cover-image.png new file mode 100644 index 0000000000..d92621f403 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/post.md b/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/post.md new file mode 100644 index 0000000000..699fbb2c56 --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/post.md @@ -0,0 +1,81 @@ +# Introducing the New ABP CLI + +![](cover-image.png) + +📢 We're excited to introduce the [new ABP CLI](https://abp.io/docs/latest/cli/index) after the announcement of [the new unified ABP Platform](https://abp.io/blog/new-abp-platform-is-live). + +As you know, we recently unified the ABP platform in a single domain ([abp.io](https://abp.io/)) and made some changes in our templating system to simplify your development. Also, we released more stable ABP Studio versions, which can dramatically improve and speed up your development time. Besides all of these changes, we have also introduced a new ABP CLI to bring you a more streamlined and efficient experience, which also extends the current commands. + +Here is a brief overview of what's new, what's changed, and why this change is happening... + +## The New ABP CLI + +ABP CLI is a command line tool to perform some common operations for ABP based solutions or [ABP Studio](https://abp.io/docs/latest/studio) features. With v8.2+, the old/legacy ABP CLI has been replaced with a new CLI system to align with the new templating system and ABP Studio. + +The new ABP CLI extends the old ABP CLI, adds more features that are used by ABP Studio behind the scenes, and is also fully compatible with the new templating system. Also, it allows you to use the old ABP CLI if you need, it by passing a single parameter. + +To be able to use the new ABP CLI, you should first delete the existing/old CLI with the following command if you installed it before: + +```bash +dotnet tool uninstall -g Volo.Abp.Cli +``` + +Then, to install the new ABP CLI, you can just simply execute the following command in your terminal: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +> Both old and new ABP CLI binary names use the same `abp` command as the executing command. Therefore, you should uninstall the old CLI first, if you installed it before. + +> **Note**: Since the new ABP CLI uses the same `abp` command, you can use the same commands as you did before. + +## Reason for the Change + +ABP introduces a new templating system, which is fully compatible with the ABP Studio from v8.2+. Since, ABP Studio offers more and better features (such as tracking, monitoring, and deploying your applications from a single point), and the new templating system has a different versioning structure, we wanted to introduce a new ABP CLI by extending the current features and adding even more features that are compatible with the new templating system and ABP Studio. + +This change allows you to create your application with the new templating system either by running the cross-platform ABP Studio application or ABP CLI and allows you to create automated pipelines with the power of the new ABP CLI. + +## Using the Old ABP CLI + +If you have an older version of ABP solutions and need to use the old ABP CLI for any reason, you can do it easily with the new ABP CLI. + +You just need to put the `--old` command at the end of your command and execute the related CLI command as you would before. This allows you to use the old CLI commands with the new CLI without the need to uninstall the new CLI. + +For example, if you want to create a new ABP v8.2.0 solution, you can execute the following command: + +```bash +abp new Acme.BookStore --version 8.2.0 --old +``` + +When you run this command, the new ABP CLI installs the old CLI with `abp-old` name as the executing command within the latest version of ABP under the **%UserProfile%\\.abp\studio\cli\old** directory and allows you to use the old commands. + +If you want to use a specific version of the old ABP CLI, it's also possible with the new ABP CLI. You can use the `install-old-cli` command of the new CLI to either install or update an old CLI, then you can directly execute any old ABP CLI command by simply passing the `--old` parameter to the end of your command: + +```bash +# installing the old ABP CLI with v8.0 +abp install-old-cli --version 8.0.0 + +abp new Acme.BookStore --version 8.0 --old # alternatively, you can use the `abp-old` command without need to pass the "--old" parameter +``` + +## New Commands + +New ABP CLI extends the existing features of old ABP CLI and introduces new commands. Here are some of the new commands: + +* `kube-connect`: Connects to Kubernetes environment. (Available for **Business or higher licenses**) +* `kube-intercept`: Intercepts a service running in Kubernetes environment. (Available for **Business or higher licenses**) +* `list-module-sources`: Lists the remote module sources. +* and more... + +You can check the CLI documentation for all available commands and their usage. + +## Conclusion + +In this blog post, we briefly explained the new ABP CLI, what's the reason for this change, and how to use the old ABP CLI with the new ABP CLI. + +If you have any further questions related to the new ABP CLI, you can always refer to the [CLI](https://abp.io/docs/latest/cli/index) and [Old ABP CLI vs New ABP CLI](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli) documentation. Also, we listed some of the questions that you may have, which you can [check from here](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli#common-questions). + +Please try out the new ABP CLI, and provide feedback to help us release more stable versions, with additional features. + +Thanks for being a part of the ABP Community! \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png new file mode 100644 index 0000000000..edc9118d9c Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png new file mode 100644 index 0000000000..f0ca19268e Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard-options.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard-options.png new file mode 100644 index 0000000000..051451d512 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard-options.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard.png new file mode 100644 index 0000000000..35e53cd3dc Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png new file mode 100644 index 0000000000..02a2ba1076 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png new file mode 100644 index 0000000000..87dbb07a41 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png new file mode 100644 index 0000000000..572cf40956 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png new file mode 100644 index 0000000000..e09cfb2ddd Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/post.md b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/post.md new file mode 100644 index 0000000000..a5fb9d7bee --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/post.md @@ -0,0 +1,111 @@ +# Announcing ABP Studio (beta) General Availability + +ABP Framework makes your daily coding activities much easier, more convenient, and even more enjoyable. However, building a software product is not just about coding. We know that you need to build, run, test, debug and deploy your software, and trace errors on a failure. You also should to design architecture of your overall solution and perform many common operations on your solutions in addition to the coding activity. + +We'd already provided tools like [ABP CLI](https://abp.io/cli) and [ABP Suite](https://abp.io/suite) for these kind of purposes before. [ABP Studio](https://abp.io/studio) takes this one long step further and offers a tool that you can use continuously throughout your coding activities, help you for non-coding activities to make you focus on your software development. + +I am very excited to announce that the ABP Studio (beta) is generally available to everyone. It is now downloadable on the [get started page](https://abp.io/get-started) of the [new ABP Platform website](https://abp.io/blog/new-abp-platform-is-live). + +## What is ABP Studio? + +[ABP Studio](https://abp.io/docs/latest/studio) is a cross-platform desktop application for ABP and .NET developers. It aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run, browse, monitor, trace and deploy your solutions much easier. + +**From now on, ABP Studio is the default way to start with the ABP Platform**; + +* The [get started page](https://abp.io/get-started) has updated so it offers to download ABP Studio to create a new ABP based solution. +* The ABP CLI ([Volo.Abp.Cli](https://nuget.org/packages/Volo.Abp.Cli)) is replaced by the ABP Studio CLI ([Volo.Abp.Studio.Cli](https://www.nuget.org/packages/Volo.Abp.Studio.Cli)). [The new ABP Studio CLI](https://abp.io/docs/latest/cli) is compatible with the old one, and extends it by introducing new commands. +* [Startup solution templates](https://abp.io/docs/latest/solution-templates) are completely renewed. The solution structures are similar to the old ones, but they are totally new templates built with the new templating engine. +* All the documentation and tutorials now uses ABP Studio and ABP Studio CLI. + +> **ABP Studio is in beta stage now.** It is also in rapid development and release cycle. We frequently release new feature and patch versions. Please [file an issue](https://github.com/abpframework/abp/issues/new/choose) if you have any problem. +> +> If you want to continue to use the old CLI and old startup templates, please [refer that document](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli). + +## The Easiest Way to Start with the ABP Framework + +As mentioned before, the [startup solution templates](https://abp.io/docs/latest/solution-templates) are completely renewed with ABP Studio. They provide much more options compared to the old startup templates. The following screenshot is taken from the New Solution wizard of ABP Studio, which provides an comfortable and easy way to create new solutions: + +![abp-studio-new-layered-solution-template-wizard](abp-studio-new-layered-solution-template-wizard.png) + +For example, you can now select most of the non-fundamental modules as optional while creating a new solution: + +![abp-studio-new-layered-solution-template-wizard-options](abp-studio-new-layered-solution-template-wizard-options.png) + +### Developing Microservices Solutions is Now Much Easier + +The most important change is made on the [microservice startup template](https://abp.io/docs/latest/solution-templates/microservice) (which is available only for Business or higher license holders). We've designed the solution structure, integrations, Kubernetes/Helm configuration, database migrations and all others from scratch and well documented all the decisions we've applied. Developing microservice solutions with ABP Framework is now easier and more understandable than ever. + +## Architecting Your Complex Solutions + +One of the main purposes to build ABP Studio was to simplify to create multi-modular and distributed systems. Either you create a modular monolith application or a microservice solution, [ABP Studio's solution explorer](https://abp.io/docs/latest/studio/solution-explorer) provides a convenient way to design your high-level solution structure. + +You see a microservice solution in the following screenshot: + +![solution-explorer](solution-explorer.png) + +That ABP Studio solution contains multiple separate .NET solutions (`.sln`) each has multiple .NET projects (`.csproj`). ABP Studio allows you to easily manage such a multi-solution system on a single view. You can create new packages and modules, import existing packages and modules, manage their dependencies and so on. + +## Run and Test Your Multi-Application Solutions with a Single Click + +One of the biggest shortcomings we face when developing distributed or complex solutions is being able to easily run all components of the solutions so that we can test and debug a single service or application without caring about all the runtime dependencies. + +Here a screenshot from the ABP Studio's [Solution Runner](https://abp.io/docs/latest/studio/running-applications) view: + +![abp-studio-solution-runner-overall](abp-studio-solution-runner-overall.png) + +When you use ABP Studio, it is dramatically easier to run, monitor, test, debug and develop your applications and services. You can browse your web UI applications, monitor all the HTTP requests, distributed events, exceptions and logs in real time on a single screen. In this way, you can easily run all the systems and trace the problems when you have. + +All you need to click the *Play* button or right-click and select the *Run* -> *Start All* command: + +![abp-studio-solution-runner-start-apps](abp-studio-solution-runner-start-apps.png) + +The nice thing is that you can create multiple profiles for each of your teams so that they can run only the applications they need to develop the application they are working on. + +## Seamlessly Develop Your Service as Integrated to Kubernetes + +Kubernetes is the de-facto tool to deploy, run and scale complex systems. However, it can also be a great tool to develop such solutions in a local environment. + +With ABP Studio's [Kubernetes Integration](https://abp.io/docs/latest/studio/kubernetes) system, it is now possible to deploy and run a complex system in a Kubernetes cluster. Then you can establish a bridge between your local development environment and the Kubernetes cluster. In this way, you can develop, run, test and debug an application or service in your local development environment as it is running in the Kubernetes cluster. All incoming and outgoing traffic is properly routed and managed by ABP Studio. You just focus on the service you are responsible to develop and let the Kubernetes run rest of the system for you. + +You can see all the Helm charts in a solution in the Kubernetes panel of ABP Studio: + +![abp-studio-helm-charts](abp-studio-helm-charts.png) + +Here, you can easily build, install and uninstall the Helm charts to your Kubernetes cluster. In the Kubernetes tab, you can connect to the Kubernetes cluster and intercept a service to develop it locally. See [the documentation](https://abp.io/docs/latest/studio/kubernetes) for more information. + +The good news is that all the monitoring data (HTTP Requests, Events, Exceptions, Logs,...) is still visible in real time with the Kubernetes integration too. + +## Use the ABP Suite as Integrated to ABP Studio + +[ABP Suite](https://abp.io/suite) is a tool that is basically used to generate code for ABP Solutions. It has started by creating simple CRUD pages, and now it does much more. It can establish relations with existing entities, create complex user interfaces like parent/child tables and so on... + +ABP Suite can be used directly inside ABP Studio by clicking the *ABP Suite* -> *Open* command: + +![abp-suite-open-in-abp-studio](abp-suite-open-in-abp-studio.png) + +This will open ABP Suite in a new tab for the current solution and focus on the CRUD page generation: + +![abp-suite-in-abp-studio](abp-suite-in-abp-studio.png) + +The new ABP Studio solution templates and ABP Suite code generation are compatible with each other. Here a screenshot from the generated CRUD UI for a very simple Book entity: + +![suite-generated-entity](suite-generated-entity.png) + +## The Community Edition vs Commercial Licenses + +ABP Studio has a Community Edition which is completely free and available to everyone. As you can guess, there are come differences between the community edition and commercial editions. ABP Platform has 4 fundamental license types; + +* Open source (free) +* Team +* Business +* Enterprise + +Here, the comparison table for ABP Studio features for these license types: + +![abp-studio-license-comparison-table](abp-studio-license-comparison-table.png) + +Microservice startup template and Kubernetes integration features are available only for commercial licenses since these are considered more enterprise requirements. Also, the solution size is limited with the ABP Community edition. If you are building a large or distributed solution, consider to [purchase a commercial license](https://abp.io/pricing). + +## Conclusion + +I've introduced the ABP Studio General Availability with this post. It is still in the beta stage. You can expect frequent releases during the beta phase. We will add new features and fix issues quickly. Please [download](https://abp.io/studio) and use it now. If you find any problem, do not hesitate to open an [issue on GitHub](https://github.com/abpframework/abp/issues/new/choose). \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/solution-explorer.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/solution-explorer.png new file mode 100644 index 0000000000..2d97e6067c Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/solution-explorer.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png new file mode 100644 index 0000000000..2f3342d573 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png new file mode 100644 index 0000000000..be73de4d8f Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png new file mode 100644 index 0000000000..c0b1a4fe48 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png new file mode 100644 index 0000000000..52eb61f285 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png new file mode 100644 index 0000000000..875be518af Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png new file mode 100644 index 0000000000..9398fa1070 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png new file mode 100644 index 0000000000..2f45635782 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png new file mode 100644 index 0000000000..082c567f8c Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png new file mode 100644 index 0000000000..d92621f403 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png new file mode 100644 index 0000000000..95265fea29 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md new file mode 100644 index 0000000000..fc3590b0d5 --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md @@ -0,0 +1,177 @@ +# ABP Platform 8.3 RC Has Been Released + +![](cover-image.png) + +Today, we are happy to release [ABP](https://abp.io) version **8.3 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 v8.3! Thanks to you in advance. + +## Get Started with the 8.3 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) + +## Migration Guide + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3) + +## What's New with ABP v8.3? + +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: + +* CMS Kit: Marked Items/Favorites +* CMS Kit: Approvement System for Comments +* Docs: Added Google Translation Support & Introducing the Single Project Mode +* Using DBFunction for Global Query Filters +* CMS Kit (PRO): FAQ +* Package Updates (NuGet & NPM) + +### CMS Kit: Marked Items/Favorites + +CMS Kit provides a marking system to mark any kind of resource, like a blog post or a product, as a favorite, starred, flagged, or bookmarked. + +![](cmskit-module-markedItems.png) + +This system is especially useful if you need to highlight some resources and differentiate them from other items. To use the marking system, you need to define an entity type with the icon name, by configuring the `CmsKitMarkedItemOptions`: + +```csharp +Configure(options => +{ + options.EntityTypes.Add( + new MarkedItemEntityTypeDefinition( + entityType: "product", + icon: StandardMarkedItems.Favorite + ) + ); +}); +``` + +You can select any of the standard marked item icons (as used in the example above) or easily customize the icons shown in the toggling components. + +> Read the [CMS Kit: Marked Item System](https://abp.io/docs/8.3/modules/cms-kit/marked-items) documentation to learn more. + +### CMS Kit: Approvement System for Comments + +CMS Kit Module has been provided a [Commenting System](https://abp.io/docs/8.3/modules/cms-kit/comments) for a while. This system allows you to add the comment feature to any kind of resource, like blog posts, or products. However, this system wasn't providing an approvement system, that allows system administrations to review the comments before publishing them in their application. + +In this version, we have introduced the [Approvement System](https://abp.io/docs/8.3/modules/cms-kit/comments#settings), which allows you to _require approval for comments to be published_. It's disabled by default, but you can make it enabled by simply checking the related setting on the settings page: + +![](cmskit-module-comments-settings.png) + +When you enable it, whenever a user submits a comment, it can be directly seen on the back-office application (in the _cms/comments_ page), and you can determine if the comment should be approved or rejected. If you approve the comment, then it will be shown in the comment section for the related resource. + +> Read the [CMS Kit: Comments](https://abp.io/docs/8.3/modules/cms-kit/comments) documentation to learn more. + +### Docs: Added Google Translation Support & Introducing the Single Project Mode + +In this version, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Translation support for better findings in the documentation, and introduced a single project mode to align our needs in the documentation system with [the unification of the ABP Platform](https://abp.io/blog/new-abp-platform-is-live). + +The single project mode allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation for it, it's especially useful for you. You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name: + +```csharp +Configure(options => +{ + options.SingleProjectMode.Enable = true; + options.SingleProjectMode.ProjectName = "abp"; +}); +``` + +In addition to this feature, we also introduced Google Translation support for the documentation system and even integrated it into our [abp.io/docs](https://abp.io/docs/) website: + +![](docs-google-search.png) + +![](google-search-results.png) + +Thanks to this system, you can either translate your documentation into your own language by Google Translation System or search specific keywords to easily find the related topic in the documentation. + +### Using DBFunction for Global Query Filters + +In this version, ABP has started using [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) for global filters to gain performance improvements and let EF Core generate more precise SQL commands under the hook. + +> See the documentation for more info: [Using User-defined function mapping for global filters](https://abp.io/docs/8.3/framework/infrastructure/data-filtering#using-user-defined-function-mapping-for-global-filters) + +### CMS Kit: FAQ + +CMS Kit provides a [FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) to allow users to create, edit, and delete FAQs. Here is an example screenshot from the FAQ page on the admin side: + +![](cms-kit-faq.png) + +You can list, create, update, and delete sections and their questions on the admin side of your solution. Then, by using the `FaqViewComponent` in your public-web application, you can display FAQs, section by section: + +![](faq-section-public-web.png) + +> Read the [CMS Kit: FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) documentation to learn more. + +### Package Updates + +In this version, we also updated some of the core NuGet and NPM package versions. All of the removed or deprecated methods have already been updated at the framework level. However, if you used any methods from these packages, you should be aware of the change and update it in your code accordingly. + +You can see the following list of the package version changes: + +* [Updated Markdig.Signed from v0.33.0 to v0.37.0](https://github.com/abpframework/abp/pull/20195) - [NuGet](https://www.nuget.org/packages/Markdig.Signed) +* [Updated Hangfire from v1.8.6 to v1.8.12](https://github.com/abpframework/abp/pull/20009) - [NuGet](https://www.nuget.org/packages/Hangfire.AspNetCore) +* [Updated SixLabors.ImageSharp from v3.0.2 to v3.1.4](https://github.com/abpframework/abp/pull/19643) - [NuGet](https://www.nuget.org/packages/SixLabors.ImageSharp) +* [Updated Blazorise from v1.5.0 to v1.5.2](https://github.com/abpframework/abp/pull/19841) - [NuGet](https://www.nuget.org/packages/Blazorise) +* [Updated datatables.net from v1.11.4 to v2.0.2](https://github.com/abpframework/abp/pull/19340) - [NPM](https://www.npmjs.com/package/datatables.net) + +## Community News + +### The New ABP Platform Is Live! + +![](new-platform-cover-image.png) + +We're thrilled to announce that the **new ABP.IO Platform** is now live! Our team has been hard at unifying and enhancing the entire platform to deliver a seamless, user-friendly experience. We consolidated all our services under a single domain: [abp.io](https://abp.io/); added a new mega menu that makes finding what you need much easier and faster, and also improved the UX of our application and combined both ABP (open-source) and ABP Commercial (paid) documents into a single comprehensive resource. + +> Read the blog post to learn more about this unification 👉 [The new ABP Platform is live!](https://abp.io/blog/new-abp-platform-is-live) + +### Announcing ABP Studio (Beta) General Availability + +We're really excited to announce that the **ABP Studio (beta)** is generally available to everyone. It is now downloadable on the [get started page](https://abp.io/get-started) of the [new ABP Platform website](https://abp.io/blog/new-abp-platform-is-live). + +![](studio-beta-cover-image.png) + +> Read the blog post to learn more about the ABP Studio (Beta) 👉 [Announcing ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability) + +### Introducing the New ABP CLI + +As described above, we recently [unified the ABP platform in a single domain (abp.io)](https://abp.io/blog/new-abp-platform-is-live) and made some changes in our templating system to simplify your development. Also, we released more stable **ABP Studio** versions, which can dramatically improve and speed up your development time. + +Besides all of these changes, we have also introduced a [new ABP CLI](https://abp.io/docs/latest/cli/index) to bring you a more streamlined and efficient experience, which also extends the current commands. + +![](new-abp-cli-cover-image.png) + +The new ABP CLI extends the old ABP CLI, adds more features that are used by ABP Studio behind the scenes, and is also fully compatible with the new templating system. We created a blog post, which you can read at [https://abp.io/blog/introducing-the-new-abp-cli](https://abp.io/blog/introducing-the-new-abp-cli) to highlight the reason behind this change and insights into the new ABP CLI, you can check it out if you want to learn more. + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Ahmed Tarek](https://twitter.com/AhmedTarekHasa1) has created **three** new community articles: + * [🧪 Unit Testing Best Practices In .NET C# 🤷‍♂️](https://abp.io/community/articles/-unit-testing-best-practices-in-.net-c--mnx65npu) + * [Memory Management In .NET](https://abp.io/community/articles/memory-management-in-.net-rqwbtzvl) + * [🧵 How String In .NET C# Works 🤷‍♂️](https://abp.io/community/articles/-how-string-in-.net-c-works--vj6d2pnm) + +* [Anto Subash](https://twitter.com/antosubash) has created **two** new community videos: + * [ABP React Template V2](https://abp.io/community/videos/abp-react-template-v2-ilc4cyqr) + * [Migrating Tye to Aspire - .NET Microservice with ABP](https://abp.io/community/videos/migrating-tye-to-aspire-.net-microservice-with-abp-ga1t4ckr) + +* [HeadChannel Team](https://headchannel.co.uk/) has created **two** new community articles: + * [Managing Baseline Creation in Applications Based on ABP Framework](https://abp.io/community/articles/managing-baseline-creation-in-applications-based-on-abp-framework-yiacte5c) + * [How to Test The System Using PostgreSQL and TestContainers](https://abp.io/community/articles/how-to-test-the-system-using-postgresql-and-testcontainers-8yh8t0j8) + +* [Create a Generic HTTP Service to Consume a Web API](https://abp.io/community/articles/create-a-generic-http-service-to-consume-a-web-api-yidme2kq) by [Bart Van Hoey](https://github.com/bartvanhoey) +* [Use User-Defined Function Mapping for Global Filter](https://abp.io/community/articles/use-userdefined-function-mapping-for-global-filter-pht26l07) by [Liming Ma](https://github.com/maliming) +* [How to use .NET Aspire with ABP framework](https://abp.io/community/articles/how-to-use-.net-aspire-with-abp-framework-h29km4kk) by [Berkan Şaşmaz](https://twitter.com/berkansasmazz) +* [Exciting New Feature in ABP.IO CMS Kit: Marked Item System](https://abp.io/community/articles/exciting-new-feature-in-abp.io-cms-kit-marked-item-system.-2hvpq0me) by [Suhaib Mousa](https://abp.io/community/members/suhaibmousa032@gmail.com) + +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/create) 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/8.3/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.3 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png new file mode 100644 index 0000000000..cc468d4bf3 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png new file mode 100644 index 0000000000..ccfe417544 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png new file mode 100644 index 0000000000..e6bb3f64b6 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png new file mode 100644 index 0000000000..1bb1b0e9dd Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png new file mode 100644 index 0000000000..5dd64da53e Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md new file mode 100644 index 0000000000..3a29539a51 --- /dev/null +++ b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md @@ -0,0 +1,490 @@ +# Switching Between Organization Units + +In most companies, a user belongs to more than one organization. Also, in some applications, we need to filter the data shown depending on the logged-in user's organization. For such scenarios, allowing users to select one of the organizations they belong to is a good practice. + +![0](0.png) + +## Creating a Data Filter with Organization Units + +### IHasOrganization + +First, we need to create a data filter that filters data based on the organization unit. + +The `IHasOrganization` interface is used to define the organization unit property in the entity classes, and used to filter the data based on the organization unit. + +```csharp +public interface IHasOrganization +{ + public Guid? OrganizationId { get; set; } +} +``` + +```csharp +public class Book : AggregateRoot, IHasOrganization +{ + public string Name { get; set; } + + public string Isbn { get; set; } + + public Guid? OrganizationId { get; set; } +} +``` + +### Entity Framework Core DbContext Implementation + +We will override the `ShouldFilterEntity` and `CreateFilterExpression` methods in the `BookStoreDbContext` class to configure the data filter for the entity that implements the `IHasOrganization` interface. + +```csharp +public class BookStoreDbContext : AbpDbContext +{ + // Your others DbSet properties... + + public DbSet Books { get; set; } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + // Your configure code... + + builder.Entity(b => + { + b.ToTable(BookStoreConsts.DbTablePrefix + "Book", BookStoreConsts.DbSchema); + b.ConfigureByConvention(); + }); + } + + public CurrentOrganizationIdProvider CurrentOrganizationIdProvider => LazyServiceProvider.LazyGetRequiredService(); + + protected override bool ShouldFilterEntity(IMutableEntityType entityType) + { + if (typeof(IHasOrganization).IsAssignableFrom(typeof(TEntity))) + { + return true; + } + + return base.ShouldFilterEntity(entityType); + } + + protected override Expression> CreateFilterExpression(ModelBuilder modelBuilder) + { + var expression = base.CreateFilterExpression(modelBuilder); + + if (typeof(IHasOrganization).IsAssignableFrom(typeof(TEntity))) + { + Expression> hasOrganizationIdFilter = e => EF.Property(e, "OrganizationId") == CurrentOrganizationIdProvider.CurrentOrganizationId; + expression = expression == null ? hasOrganizationIdFilter : QueryFilterExpressionHelper.CombineExpressions(expression, hasOrganizationIdFilter); + } + + return expression; + } +} +``` + +### The CurrentOrganizationIdProvider + +This class is used to get the current `organization id`, We will use the `AsyncLocal` class to store the current `organization id`, The `Change` method is used to change the current `organization id`. This service is registered as a singleton service. + +```csharp +public class CurrentOrganizationIdProvider : ISingletonDependency +{ + private readonly AsyncLocal _currentOrganizationId = new AsyncLocal(); + + public Guid? CurrentOrganizationId => _currentOrganizationId.Value; + + public virtual IDisposable Change(Guid? organizationId) + { + var parent = CurrentOrganizationId; + _currentOrganizationId.Value = organizationId; + return new DisposeAction(() => + { + _currentOrganizationId.Value = parent; + }); + } +} +``` + +## Domain Service Implementation + +We will store the current `organization id` in the cache for the logged-in user. at the same time, we want to store it per browser. So we also add the different browser info for every logged-in user. + +In the `BrowserInfoClaimsPrincipalContributor` class, We add a random `BrowserInfo` claim to the logged-in user. And we will use `user id` and `browser info `as a cache key. + +```csharp +public static class CurrentUserExtensions +{ + public static Guid? GetBrowserInfo(this ICurrentUser currentUser) + { + var claimValue = currentUser.FindClaimValue("BrowserInfo"); + if (claimValue != null && Guid.TryParse(claimValue, out var result)) + { + return result; + } + return null; + } +} + +public class BrowserInfoClaimsPrincipalContributor : IAbpClaimsPrincipalContributor, ITransientDependency +{ + public Task ContributeAsync(AbpClaimsPrincipalContributorContext context) + { + var identity = context.ClaimsPrincipal.Identities.FirstOrDefault(); + identity?.AddClaim(new Claim("BrowserInfo", Guid.NewGuid().ToString())); + return Task.CompletedTask; + } +} +``` + +## Application Service Implementation + +The `CurrentOrganizationAppService` to get/change the current organization for the logged-in user. `BookAppService` to get the books based on the current `organization id`. + +```csharp +[Authorize] +public class CurrentOrganizationAppService : BookStoreAppService, ICurrentOrganizationAppService +{ + private readonly IdentityUserManager _identityUserManager; + private readonly IDistributedCache _cache; + + public CurrentOrganizationAppService(IdentityUserManager identityUserManager, IDistributedCache cache) + { + _identityUserManager = identityUserManager; + _cache = cache; + } + + public virtual async Task> GetOrganizationListAsync() + { + var user = await _identityUserManager.FindByIdAsync(CurrentUser.GetId().ToString()); + var organizationUnits = await _identityUserManager.GetOrganizationUnitsAsync(user); + return organizationUnits.Select(ou => new OrganizationDto + { + Id = ou.Id, + DisplayName = ou.DisplayName + }).ToList(); + } + + public virtual async Task GetCurrentOrganizationIdAsync() + { + var cacheKey = CurrentUser.Id.ToString() + ":" + CurrentUser.GetBrowserInfo(); + return (await _cache.GetAsync(cacheKey))?.OrganizationId; + } + + public virtual async Task ChangeAsync(Guid? organizationId) + { + var cacheKey = CurrentUser.Id.ToString() + ":" + CurrentUser.GetBrowserInfo(); + await _cache.SetAsync(cacheKey, new CurrentOrganizationIdCacheItem + { + OrganizationId = organizationId + }); + } +} +``` + +```csharp +[Authorize] +public class BookAppService : BookStoreAppService, IBookAppService +{ + private readonly IBasicRepository _bookRepository; + + public BookAppService(IBasicRepository bookRepository) + { + _bookRepository = bookRepository; + } + + public virtual async Task> GetListAsync() + { + var books = await _bookRepository.GetListAsync(); + return books.Select(book => new BookDto + { + Id = book.Id, + Name = book.Name, + Isbn = book.Isbn, + OrganizationId = book.OrganizationId + }).ToList(); + } +} +``` + +## Seed Sample Data + +Let's seed some sample data for the `Book` and `Organization` entities. + +We added two organization units, `USA Branch` and `Turkey Branch`, and some books to each organization unit. Also, we added the `admin` user to both organization units. + +```csharp +public class BooksDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + public Guid UsaBranchId = Guid.Parse("00000000-0000-0000-0000-000000000001"); + public Guid TurkeyBranchId = Guid.Parse("00000000-0000-0000-0000-000000000002"); + + private readonly IBasicRepository _bookRepository; + private readonly OrganizationUnitManager _organizationUnitManager; + private readonly IOrganizationUnitRepository _organizationUnitRepository; + private readonly IdentityUserManager _identityUserManager; + private readonly IUnitOfWorkManager _unitOfWorkManager; + + public BooksDataSeedContributor( + IBasicRepository bookRepository, + OrganizationUnitManager organizationUnitManager, + IOrganizationUnitRepository organizationUnitRepository, + IdentityUserManager identityUserManager, + IUnitOfWorkManager unitOfWorkManager) + { + _bookRepository = bookRepository; + _organizationUnitManager = organizationUnitManager; + _organizationUnitRepository = organizationUnitRepository; + _identityUserManager = identityUserManager; + _unitOfWorkManager = unitOfWorkManager; + } + + public virtual async Task SeedAsync(DataSeedContext context) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var usa = await _organizationUnitRepository.FindAsync(UsaBranchId); + if (usa == null) + { + await _organizationUnitManager.CreateAsync(new OrganizationUnit(UsaBranchId, "USA Branch")); + } + + var turkey = await _organizationUnitRepository.FindAsync(TurkeyBranchId); + if (turkey == null) + { + await _organizationUnitManager.CreateAsync(new OrganizationUnit(TurkeyBranchId, "Turkey Branch")); + } + + await uow.SaveChangesAsync(); + + var admin = await _identityUserManager.FindByNameAsync("admin"); + Check.NotNull(admin, "admin"); + + await _identityUserManager.AddToOrganizationUnitAsync(admin.Id, UsaBranchId); + await _identityUserManager.AddToOrganizationUnitAsync(admin.Id, TurkeyBranchId); + + if (await _bookRepository.GetCountAsync() <= 0) + { + await _bookRepository.InsertAsync(new Book + { + Name = "1984", + Isbn = "978-0451524935", + OrganizationId = UsaBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "Animal Farm", + Isbn = "978-0451526342", + OrganizationId = UsaBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "Brave New World", + Isbn = "978-0060850524", + OrganizationId = UsaBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "Fahrenheit 451", + Isbn = "978-1451673319", + OrganizationId = TurkeyBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "The Catcher in the Rye", + Isbn = "978-0316769488", + OrganizationId = TurkeyBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "To Kill a Mockingbird", + Isbn = "978-0061120084", + OrganizationId = TurkeyBranchId + }); + } + + await uow.CompleteAsync(); + } + } +} +``` + +## Web Page Implementation + +We will add a dropdown list to the top right corner of the page to allow users to select the organization they belong to. When the dropdown list changes, we will call the application service api to change the current `organization id`. + +```csharp +public class OrganizationUnitComponent : AbpViewComponent +{ + public async Task InvokeAsync() + { + var currentOrganizationAppService = LazyServiceProvider.GetRequiredService(); + var organizationDtos = await currentOrganizationAppService.GetOrganizationListAsync(); + var currentOrganizationId = await currentOrganizationAppService.GetCurrentOrganizationIdAsync(); + return View("/Components/OrganizationUnits/Default.cshtml", new OrganizationUnitComponentModel + { + CurrentOrganizationId = currentOrganizationId, + OrganizationDtos = organizationDtos + }); + } +} + +public class OrganizationUnitComponentModel +{ + public Guid? CurrentOrganizationId { get; set; } + + public List OrganizationDtos { get; set; } +} +``` + +```html +@using Microsoft.AspNetCore.Mvc.TagHelpers +@using Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +@model BookStore.Web.Components.OrganizationUnits.OrganizationUnitComponentModel + +
+ + + + +
+ + +``` + +Add the `OrganizationUnitComponent` to the toolbar. + +```csharp +public class BookStoreToolbarContributor : IToolbarContributor +{ + public virtual Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + // ... + + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(OrganizationUnitComponent)).RequireAuthenticated()); + } + + return Task.CompletedTask; + } +} +``` + +In addition, we also need to add a middleware after `UseAuthorization` to change the current `organization id`. + +```csharp +app.UseAuthorization(); +app.Use(async (httpContext, next) => +{ + var currentUser = httpContext.RequestServices.GetRequiredService(); + var cacheKey = currentUser.Id.ToString() + ":" + currentUser.GetBrowserInfo(); + var cache = httpContext.RequestServices.GetRequiredService>(); + var cacheItem = await cache.GetAsync(cacheKey); + if (cacheItem != null) + { + var currentOrganizationIdProvider = httpContext.RequestServices.GetRequiredService(); + currentOrganizationIdProvider.Change(cacheItem.OrganizationId); + } + await next(httpContext); +}); +// ... +``` + +The `Index` page will show the books based on the current `organization id`. + +```cshtml +public class IndexModel : BookStorePageModel +{ + public List Books { get; set; } = new List(); + public string? OrganizationName { get; set; } + + protected readonly IBookAppService BookAppService; + protected readonly ICurrentOrganizationAppService CurrentOrganizationAppService; + protected readonly IOrganizationUnitRepository OrganizationUnitRepository; + + public IndexModel( + IBookAppService bookAppService, + ICurrentOrganizationAppService currentOrganizationAppService, + IOrganizationUnitRepository organizationUnitRepository) + { + BookAppService = bookAppService; + CurrentOrganizationAppService = currentOrganizationAppService; + OrganizationUnitRepository = organizationUnitRepository; + } + + public async Task OnGetAsync() + { + if (CurrentUser.IsAuthenticated) + { + var currentOrganizationId = await CurrentOrganizationAppService.GetCurrentOrganizationIdAsync(); + if (currentOrganizationId.HasValue) + { + OrganizationName = (await OrganizationUnitRepository.GetAsync(currentOrganizationId.Value)).DisplayName; + } + + Books = await BookAppService.GetListAsync(); + } + } +} +``` + +```html +@page +@model BookStore.Web.Pages.IndexModel +@using Microsoft.AspNetCore.Mvc.Localization +@using BookStore.Localization +@inject IHtmlLocalizer L + +@if (!Model.OrganizationName.IsNullOrEmpty()) +{ +
The books belonging to @Model.OrganizationName organization
+} + +
    + @foreach(var book in Model.Books) + { +
  • Book Name: @book.Name, ISBN: @book.Isbn
  • + } +
+``` + +### Final UI + +The final UI will look like this: + +The index page will show empty if the current organization id is not set. +After selecting the organization unit, the index page will show the books based on the selected organization unit. + +![1](1.png) + +![2](2.png) + +![3](3.png) + +## Summary + +In this blog post. We showd simple implementation of switching between organization units. You can extend this implementation to meet your requirements. + +After [ABP 8.3](https://github.com/abpframework/abp/pull/20065) we introduced [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) feature for global filters which will gain performance improvements. + +## References + +- [Data Filtering](https://abp.io/docs/latest/framework/infrastructure/data-filtering) +- [Claims Principal Factory](https://abp.io/docs/latest/framework/fundamentals/authorization#claims-principal-factory) diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg new file mode 100644 index 0000000000..3503744fbc Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md new file mode 100644 index 0000000000..69da89f2c0 --- /dev/null +++ b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md @@ -0,0 +1,78 @@ +# New ABP Documentation System: Everything You Need In One Place 📣 + +We have combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unification brings you a better experience in the documentation system, helps you find what you're looking for more easily, allows you to read the documents that are related to each other one after the other, and also provides Google Search and Google Translation support for the documents. + +![](blog-cover.png) + +Let's see what's new with the unified documentation system in detail: + +## All Documentation In One Place 📃 + +We decided to combine the ABP (open-source) and ABP Commercial (paid) documents into a single place, along with [the new ABP Platform Unification](https://abp.io/blog/new-abp-platform-is-live). + +The new documentation address is [abp.io/docs](https://abp.io/docs) and seen like below: + +![](abp-docs.png) + +This unified documentation brings you a better search capability with Google Search support, allows you to not need to switch between documentation websites to read both framework and commercial features, look what you are looking for more easily from the unified menu structure, following new features and their documentation in a more stable and easier way. + +## Accessing Documents with Older Versions🗃️ + +From v8.2, with the new documentation system, since we merged all documents into a single place, you don't need to select if you want to show a framework or commercial document. However, if you want to access an old document, for example, if you are using an older version of ABP or don't want to create the solutions from ABP Studio and instead prefer ABP CLI (in the getting started and startup template docs, ABP Studio is shown for project creation and other features, for instance), you can change the version from the version select-box (prior to v8.2), and select which document type (framework or commercial) you want to read and then find/choose the document that you want: + +![](old-docs.png) + +You can access any old-version document as you would before, by specifying the version. But we suggest you update your solution to v8.2+ and start using ABP Studio! By doing that, you can get more benefits from the new features, and edge-cutting features of ABP Studio and easily manage your application from development to production! + +## Documentation Updates 🚀 + +With the [announcement of ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability), we made some improvements in our documents. Starting from v8.2, since ABP Studio is the suggested way to create and manage your applications, we updated the [Get started](https://abp.io/docs/latest/get-started) documentation and some other documents along with, and explained project creation via ABP Studio. If you prefer [creating a new solution with the ABP CLI](https://abp.io/docs/latest/cli), you can use the new ABP CLI as you did the old one before. + +Besides that, we revised all of our documents, updated most of them according to the [new ABP Platform unification](https://abp.io/blog/new-abp-platform-is-live). For example, we merged our migration guide documents into single documents for each version and categorized the related topics you need to do when updating your solutions under the **open-source** and **pro** sections, so either you are an open-source template user or a license owner, you can easily jump to the related section and read them easily and accordingly: + +![](in-this-document.png) + +Since we combined ABP (framework) and ABP Commercial documents, we added information notes in each document that indicate if the related feature is in your license plan or not. An example screenshot from ABP Suite documentation can be seen as follow: + +![](suite-license-note.png) + +Also, for the application modules, we added **(PRO)** postfixes in the navigation menu for you to easily understand if the module is for license owners or open-source users. Thanks to that you can easily distinguish the related application modules and read the related module documentation to understand it: + +![](pro-modules.png) + + +## New Navigation Tree 📚 + +With the documentation unification, we re-structured the navigation tree of the documents: + +![](navigation-menu.png) + +The new navigation tree allows you to find any document you want in a more desired way, in the related sub-menu. For example, if you want to learn more about *modularity*, you can find under the **Framework > Architecture > Modularity** menu items, or if you want to learn more about the ABP Studio, you can find the all related docs under the root **Tools** menu. + +## Google Translate & Search Capabilities 🔎 + +In ABP v8.3, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Search support for better findings in the documentation, and introduced Google Translation for the documentation system. After implementing these features, we integrated them into our documentation system and removed the languages select box from the menu: + +![](google-translate-and-search.png) + +From now on, we will provide documents in English only. The reason behind that is, that with the new Google Translate support, you can directly translate any documentation to the desired language (of course, must be one of the supported languages). Thanks to the Google Translate feature, you can read the official documentation in your own language, and we as the core team, don't need to synchronize the documentation between different languages, it was really hard to keep them up to date, and now they all will be available all the time in the all supported languages. + +![](google-search-result.png) + +Also, thanks to Google Search, now you can search specific keywords to easily find the related topic in the documentation. For example, if you search the **Validation** keyword, Google will list all related documents according to their importance and relevancy: + +## Feedbacks 📝 + +Besides all changes, we also added a **feedback section** at the end of each document. You can share your thoughts, suggestions, or criticism for specific documentation. We would like to hear more from you about our documentation quality and get suggestions from each one of you to improve our documents and platform, so it will be much appreciated if you share your feedback for any documentation you want, please don't hesitate! + +![](docs-feedbacks.png) + +You can either directly scroll down to the bottom directly for a certain document, or click the **Feedback** action button to navigate to the feedbacks section, and provide feedback: + +![](docs-feedback-section.png) + +## Conclusion 🎯 + +To see the new ABP documentation system, please visit the [abp.io/docs](https://abp.io/docs/latest/) website. Check out the new navigation tree, read the documents you want, provide feedback to help us improve our documents, and more... + +We look forward to your feedback and continued support as we grow together! Thanks in advance 🙏 diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png new file mode 100644 index 0000000000..7dbf8f7912 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png new file mode 100644 index 0000000000..4aa3bd0222 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png new file mode 100644 index 0000000000..68dddcad64 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png new file mode 100644 index 0000000000..6584dfc015 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png new file mode 100644 index 0000000000..082c567f8c Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png new file mode 100644 index 0000000000..9398fa1070 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png new file mode 100644 index 0000000000..46c8de76da Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png new file mode 100644 index 0000000000..7b4fdbba8e Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png new file mode 100644 index 0000000000..269159c651 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png new file mode 100644 index 0000000000..8556ff38af Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png new file mode 100644 index 0000000000..3459635322 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png differ diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md new file mode 100644 index 0000000000..3ac9de075a --- /dev/null +++ b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md @@ -0,0 +1,77 @@ +# ABP.IO Platform 8.3 Final Has Been Released! + +![](cover-image.png) + +[ABP](https://abp.io/) 8.3 stable version has been released today. + +## What's New With Version 8.3? + +All the new features were explained in detail in the [8.3 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-3-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 8.3 + +### Creating New Solutions + +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) to create new solutions. + +By default, ABP Studio uses stable versions to create solutions. Therefore, it will be creating the solution with the latest stable version, which is v8.3 for now, so you don't need to specify the version. + +### How to Upgrade an Existing Solution + +You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained: + +### Upgrading via ABP Studio + +If you are already using the ABP Studio, you can upgrade it to the latest version to align it with ABP v8.3. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info. + +After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Switch to stable** action button to instantly upgrade your solution: + +![](switch-to-stable.png) + +### Upgrading via ABP CLI + +Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet, you can run the following command: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +Or to update the existing CLI, you can run the following command: + +```bash +dotnet tool update -g Volo.Abp.Studio.Cli +``` + +After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows: + +```bash +abp update +``` + +> You can run this command in the root folder of your solution. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3) + +## Community News + +### New ABP Community Posts + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [Alper Ebicoglu](https://twitter.com/alperebicoglu) has created **three** new community articles: + * [Do You Really Need Multi-tenancy?](https://abp.io/community/articles/do-you-really-need-multitenancy-hpwn44r3) + * [What is Angular Schematics?](https://abp.io/community/articles/what-is-angular-schematics-2z4jusf5) + * [Understanding Angular AOT vs JIT Compilations](https://abp.io/community/articles/understanding-angular-aot-vs-jit-compilations-0r0a0a3f) +* [Dynamic Widget Communication](https://abp.io/community/articles/dynamic-widget-communication-uvun7q23) by [Suhaib Mousa](https://suhaibmousa.com/) +* [Introducing the Google Cloud Storage BLOB Provider](https://abp.io/community/articles/introducing-the-google-cloud-storage-blob-provider-yrt6azc0) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [Switching Between Organization Units](https://abp.io/community/articles/switching-between-organization-units-i5tokpzt) by [Liming Ma](https://github.com/maliming) + +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/create) to the ABP Community. + +## About the Next Version + +The next feature version will be 9.0. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png new file mode 100644 index 0000000000..875be518af Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png new file mode 100644 index 0000000000..30883ebf92 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/banner.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/banner.png new file mode 100644 index 0000000000..a25baf863a Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/banner.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/boat-trip.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/boat-trip.jpg new file mode 100644 index 0000000000..7a9b89732a Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/boat-trip.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/collage-moscow.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/collage-moscow.jpg new file mode 100644 index 0000000000..69652780b7 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/collage-moscow.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-1.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-1.png new file mode 100644 index 0000000000..20c9ef5b05 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-1.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-collage.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-collage.jpg new file mode 100644 index 0000000000..459f151e25 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-collage.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/halil-talk.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/halil-talk.jpg new file mode 100644 index 0000000000..8d2a116524 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/halil-talk.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-2.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-2.png new file mode 100644 index 0000000000..34acae63da Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-2.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-pro-pictures.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-pro-pictures.jpg new file mode 100644 index 0000000000..8cd11d2d11 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-pro-pictures.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk.png new file mode 100644 index 0000000000..caa9194c3f Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/post.md b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/post.md new file mode 100644 index 0000000000..c6ac51d273 --- /dev/null +++ b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/post.md @@ -0,0 +1,87 @@ +# DotNext 2024 Conference: A Speaker’s Impressions + +![banner](banner.png) + +Last week, I had the chance of being a speaker at **DotNext 2024** in Moscow. [JUG Ru Group](https://jugru.org/en/) is arranging the DotNext Conferences since [2014](https://dotnext.ru/archive/). It's a specific conference for .NET developers held at the [MonArch Moscow Hotel](https://www.moscowmonarch.com/) on 10, 11 September 2024. This event brought together over **600 developers on-site, 200 developers online**, with around **35 speakers** delivering more than **30 talks**, making it one of the largest gatherings of the .NET community in Russia. + +![Atmosphere-1](general-1.png) + +--- + + + +## Key Highlights & Popular Sessions + +One of the standout aspects of the conference was its strong technical focus, particularly on deep-dive .NET topics. Talks covered subjects like **low-level optimizations**, architecture, performance, and platform internals. + +The conference started with Sergei Benzenko's talk "What's New in .NET 9". There are important topics like ".NET Aspire in Action", "AI-Driven Software Development", "DDD and Strategic Design" and "OAuth 2.0 User-Managed Access in ASP.NET Core with Keycloak". + +![DotNext 2024 Speakers](speakers.png) + +There were two international speakers: me and Halil Ibrahim Kalkan from ABP Core Team. Halil's topic was **Implementing Domain-Driven Design as a Pragmatic Developer**. In his session, he gave practical real world examples of bad and best practices of DDD development. + +![halil-talk](halil-talk.jpg) + + +--- + + + +## My Talk + +My presentation topic was **Building Multi-Tenant ASP.NET Core Applications** was part of this technical deep dive, and I was thrilled to see so much interest in scalable multi-tenant solutions. I generally talked about meta data in SaaS development and explained how to identify the active tenant, how to isolate the data in the same database, how to set `TenantId` automatically for new entities, how to select DB connection for the active tenant, how to change the active tenant when needed, how to disable multi-tenancy temporarily, how to handle database migrations and lastly feature system. These features are major multi-tenancy features, and you'll learn how they are implemented in an open-source web app framework. + +![My Talk](my-talk.png) + +![my-talk-2](C:\Users\alper\OneDrive\Desktop\DotNext 2024 Photos\article\my-talk-2.png) + +- My presentation 🌐https://github.com/ebicoglu/presentations/tree/main. + +- My conf profile🌐 https://dotnext.ru/en/persons/cbe6e4b2cc214a47bfc3752cdb0b1f88/ + + +![My Talk Photos](my-talk-pro-pictures.jpg) + +--- + + + +## Venue and Atmosphere + +The MonArch Moscow Hotel provided a great venue, combining spacious halls for sessions with cozy areas for networking. There were also afterparty events, which added a fun, informal touch to the otherwise highly technical environment. The setup allowed plenty of opportunities for spontaneous discussions with attendees and experts, both during and after the sessions. + +![Atmoshpere-4](general-collage.jpg) + + +--- + + + +## Boat Tour on Moscow River + +After the conference ended, the organizing team took all the speakers on a boat tour on the Moscow River. It was a great open buffet dinner in a nice boat. We had a chance to chat with other speakers. + +![Boat Trip](boat-trip.jpg) + +--- + + + +## Networking and Community + +DotNext 2024 provided an excellent platform for connecting with fellow developers and industry leaders. In addition to presentations, there were plenty of opportunities to interact with other participants, including representatives from Microsoft, Volosoft, and local Russian tech giants like Ozon and beeline. The exhibition hall was filled with partner stands, including those from PVS-Studio, Kontur, Eremex and OzonTech which offered interactive displays and demos. + +--- + + + +## Conclusion + +Overall, DotNext 2024 lived up to its reputation as a key event for .NET developers. From highly technical talks to networking opportunities, it was a fantastic experience, and I came away with new insights into both the technical and community aspects of the .NET ecosystem. If you’re a .NET developer looking to stay ahead in your field, DotNext is definitely a conference worth attending! + +Looking forward to come again! + + +Lastly, I took some beautiful photos of Moscow, here are a few... + +![Moscow Pictures](collage-moscow.jpg) \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/speakers.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/speakers.png new file mode 100644 index 0000000000..eccc1bd0b4 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/speakers.png differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/POST.md b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/POST.md new file mode 100644 index 0000000000..db52eed7d5 --- /dev/null +++ b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/POST.md @@ -0,0 +1,223 @@ +# ABP Platform 9.0 Has Been Released Based on .NET 9.0 + +![](cover-image.png) + +Today, we are happy to release the [ABP](https://abp.io/) version **9.0 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.0! Thanks to all of you. + +## Get Started with the 9.0 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) + +## Migration Guide + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.x: [ABP Version 9.0 Migration Guide](https://abp.io/docs/9.0/release-info/migration-guides/abp-9-0) + +## What's New with ABP v9.0? + +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 .NET 9.0 +* Introducing the **Extension Property Policy** +* Allow wildcards for Redirect Allowed URLs +* Docs Module: Show larger images on the same page +* Google Cloud Storage BLOB Provider +* Removed React Native mobile option from free templates +* Suite: Better naming for multiple navigation properties to the same entity +* CMS Kit Pro: Feedback feature improvements + +### Upgraded to .NET 9.0 + +We've upgraded ABP to .NET 9.0, so you need to move your solutions to .NET 9.0 if you want to use ABP 9.0. You can check [Microsoft’s Migrate from ASP.NET Core 8.0 to 9.0 documentation](https://learn.microsoft.com/en-us/aspnet/core/migration/80-90), to see how to update an existing ASP.NET Core 8.0 project to ASP.NET Core 9.0. + +> **Note:** Since the stable version of .NET 9 hasn't been released yet, we upgraded ABP to .NET v9.0-rc.2. We will update the entire ABP Platform to .NET 9 stable, after Microsoft releases it on November 13-14 with the stable ABP 9.0 release. + +### Introducing the Extension Property Policy + +ABP provides a module entity extension system, which is a high level extension system that allows you to define new properties for existing entities of the depended modules. This is a powerful way to dynamically add additional properties to entities without modifying the core structure. However, managing these properties across different modules and layers can become complex, especially when different policies or validation rules are required. + +**Extension Property Policy** feature allows developers to define custom policies for these properties, such as access control, validation, and data transformation, directly within ABP. + +**Example:** + +```csharp +ObjectExtensionManager.Instance.Modules().ConfigureIdentity(identity => +{ + identity.ConfigureUser(user => + { + user.AddOrUpdateProperty( //property type: string + "SocialSecurityNumber", //property name + property => + { + //validation rules + property.Attributes.Add(new RequiredAttribute()); + property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4}); + + //Global Features + property.Policy.GlobalFeatures = new ExtensionPropertyGlobalFeaturePolicyConfiguration() + { + Features = new[] {"GlobalFeatureName1", "GlobalFeatureName2"}, + RequiresAll = true + }; + + //Features + property.Policy.Features = new ExtensionPropertyFeaturePolicyConfiguration() + { + Features = new[] {"FeatureName1", "FeatureName2"}, + RequiresAll = false + }; + + //Permissions + property.Policy.Permissions = new ExtensionPropertyPermissionPolicyConfiguration() + { + PermissionNames = new[] {"AbpTenantManagement.Tenants.Update", "AbpTenantManagement.Tenants.Delete"}, + RequiresAll = true + }; + } + ); + }); +}); +``` + +### Allow Wildcards for RedirectAllowedURLs + +In this version, we made an improvement to the `RedirectAllowedUrls` configuration, which now allows greater flexibility in defining redirect URLs. Previously, developers faced restrictions when configuring URL redirects. Specifically, the `RedirectAllowedUrls` did not support using **wildcards (*)**, limiting how developers could specify which URLs were permissible for redirects. + +With the new changes in [#20628](https://github.com/abpframework/abp/pull/20628), the restriction has been relaxed, allowing developers to define redirect URLs that include wildcards. This makes it easier to handle scenarios where a broad range of URLs need to be allowed, without explicitly listing each one. + +```json +{ + "App": { + //... + "RedirectAllowedUrls": "http://*.domain,http://*.domain:4567" + } +``` + +### Docs Module: Show Larger Images + +As developers, we rely heavily on clear documentation to understand complex concepts and workflows. Often, an image is worth more than a thousand words, especially when explaining intricate user interfaces, workflows, or code structures. In recognition of this, we recently rolled out an improvement to the Docs Module that enables larger images to be displayed more effectively. + +![](docs-image-larger.png) + +Before this enhancement, images embedded in documentation were often limited in size, which sometimes made it difficult to see the details in the diagrams, screenshots, or other visual contents. Now, images can be displayed at a larger size, offering better clarity and usability. + +> See [https://github.com/abpframework/abp/pull/20557](https://github.com/abpframework/abp/pull/20557) for more information. + +### Google Cloud Storage BLOB Provider + +ABP provides a BLOB Storing System, which allows you to work with BLOBs. This system is typically used to store file contents in a project and read these file contents when they are needed. Since ABP provides an abstraction to work with BLOBs, it also provides some pre-built storage providers such as [Azure](https://abp.io/docs/latest/framework/infrastructure/blob-storing/azure), [Aws](https://abp.io/docs/latest/framework/infrastructure/blob-storing/aws) and [Aliyun](https://abp.io/docs/latest/framework/infrastructure/blob-storing/aliyun). + +In this version, we have introduced a new BLOB Storage Provider for Google Cloud Storage: [`Volo.Abp.BlobStoring.Google`](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Google) + +You can [read the documentation](https://abp.io/docs/9.0/framework/infrastructure/blob-storing/google) for configurations and use Google Cloud Storage as your BLOB Storage Provider easily. + +### Removed React Native Mobile Option From Free Templates + +In this version, we removed the **React Native** mobile option from the open source templates due to maintaining reasons. We updated the related documents and the ABP CLI (both old & new CLI) for this change, and with v9.0, you will not be able to create a free template with react-native as the mobile option. + +> **Note:** Pro templates still provide the **React Native** as the mobile option and we will continue supporting it. + +If you want to access the open-source React-Native template, you can visit the abp-archive repository from [here](https://github.com/abpframework/abp-archive). + +### Suite: Better Naming For Multiple Navigation Properties + +Prior to this version, when you defined multiple (same) navigation properties to same entity, then ABP Suite was renaming them with a duplicate number. + +As an example,let's assume that you have a book with an author and coauthor, prior to this version ABP Suite was creating a DTO class as below: + +```csharp +public class BookWithNavigationPropertiesDto +{ + public BookDto Book { get; set; } + + public AuthorDto Author { get; set; } + + public AuthorDto Author1 { get; set; } +} +``` + +Notice, that since the book entity has two same navigation properties, ABP Suite renamed them with a duplicate number. In this version, ABP Suite will ask you to define a propertyName for the **navigation properties** and you'll be able to specify a meaningful name such as (*CoAuthor*, in this example): + +```csharp +public class BookWithNavigationPropertiesDto +{ + public BookDto Book { get; set; } + + public AuthorDto Author { get; set; } + + //used the specified property name + public AuthorDto CoAuthor { get; set; } +} +``` + +ABP Suite respects the specified property name for the related navigation property and generates codes regarding that (by removing the *Id* postfix for the related places): + +![](suite-navigation-properties.png) + +### CMS Kit Pro: Feedback Feature Improvements + +In this version, we revised the [CMS Kit's Feedback Feature](https://abp.io/docs/9.0/modules/cms-kit-pro/page-feedback) and as a result, we made the following improvements: + +* A new **auto-handle** setting has been added to the settings page. When this feature is enabled, if feedback is submitted without a user note, the feedback is automatically marked as handled. +* You can now require users to enter a note when submitting negative feedback. This can be configured in the settings page, ensuring that users provide context when they submit critical feedback. +* We've added a feedback user ID that is saved in local storage. This allows you to track the number of unique users submitting feedback or determine if the same user is sending new feedback on updated documents. + +> For further information about the Page Feedback System, please refer to the [documentation](https://abp.io/docs/9.0/modules/cms-kit-pro/page-feedback). + +## Community News + +### Join ABP at the .NET Conf 2024! + +ABP is excited to sponsor the [14th annual .NET Conf](https://www.dotnetconf.net/)! We've proudly supported the .NET community for years and recognize the importance of this premier virtual event. Mark your calendars for November 12-14, 2024, and join us for 3 incredible days of learning, networking, and fun. + +![](dotnet-conf-2024.png) + +Also, don't miss out on the co-founder of [Volosoft](https://volosoft.com/) and Lead Developer of [ABP](https://abp.io/), [Halil Ibrahim Kalkan](https://x.com/hibrahimkalkan)'s talk about "Building Modular Monolith Applications with ASP.NET Core and ABP Studio" at 10:00 - 10:30 AM GMT+3 on Thursday, November 14. + +### ABP Team Attended the .NETDeveloperDays 2024 + +We are thrilled to announce that we sponsored the [.NETDevelopersDays 2024](https://developerdays.eu/warsaw/) event. It's one of the premier conferences for .NET developers with **over 1.000 attendees**, **50+ expert speakers**, and **40+ sessions and workshops**. + +![](dotnet-developer-days-2024.jpg) + +Core team members of the ABP Framework, [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan), [İsmail Çağdaş](https://x.com/ismcagdas), [Enis Necipoğlu](https://x.com/EnisNecipoglu), and [Tarık Özdemir](https://x.com/mtozdemir) attended [.NETDevelopersDays 2024](https://developerdays.eu/warsaw/) on October 22-23, 2024 at Warsaw, Poland. + +These 2 days with the team were all about chatting and having fun with amazing attendees and speakers. We met with talented and passionate software developers and introduced the [ABP](https://github.com/abpframework/abp) - web application framework built on ASP.NET Core - to them. + +Also, we made a raffle and gifted an Xbox Series S to the lucky winner at the event: + +![](abp-team-raffle.jpg) + +Thanks to everyone who joined the fun and visited at our booth :) + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) has created **five** new community articles: + * [When to Use Cookies, When to Use Local Storage?](https://abp.io/community/articles/when-to-use-cookies-when-to-use-local-storage-uexsjunf) + * [.NET 9 Performance Improvements Summary](https://abp.io/community/articles/.net-9-performance-improvements-summary-gmww3gl8) + * [ASP.NET Core SignalR New Features — Summary](https://abp.io/community/articles/asp.net-core-signalr-new-features-summary-kcydtdgq) + * [Difference Between "Promise" and "Observable" in Angular](https://abp.io/community/articles/difference-between-promise-and-observable-in-angular-bxv97pkc) + * [ASP.NET Core Blazor 9.0 New Features Summary 🆕](https://abp.io/community/articles/asp.net-core-blazor-9.0-new-features-summary--x0fovych) +* [Mohammad AlMohammad AlMahmoud](https://abp.io/community/members/Mohammad97Dev) has created **two** new community articles: + * [Implementing Multi-Language Functionality With ABP Framework](https://abp.io/community/articles/implementing-multilanguage-functionality-with-abp-framework-loq7kfx4) + * [Configure Quartz.Net in Abp FrameWork](https://abp.io/community/articles/configure-quartz.net-in-abp-framework-3bveq4y1) +* [.NET Aspire vs ABP Studio: Side by Side](https://abp.io/community/articles/.net-aspire-vs-abp-studio-side-by-side-t1c73d1l) by [Halil İbrahim Kalkan](https://twitter.com/hibrahimkalkan) +* [PoC of using GrapesJS for ABPs CMS Kit](https://abp.io/community/articles/poc-of-using-grapesjs-for-abps-cms-kit-1rmv4q41) by [Jack Fistelmann](https://abp.io/community/members/jfistelmann) +* [ABP-Powered Web App with Inertia.js, React, and Vite](https://abp.io/community/articles/abppowered-web-app-with-inertia.js-react-and-vite-j7cccvad) by [Anto Subash](https://antosubash.com/) +* [Multi-Tenancy Support in Angular Apps with ABP.IO](https://abp.io/community/articles/multitenancy-support-in-angular-apps-with-abp.io-lw9l36c5) by [HeadChannel Team](https://headchannel.co.uk/) + +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/create) 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.0/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v9.0 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/abp-team-raffle.jpg b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/abp-team-raffle.jpg new file mode 100644 index 0000000000..1210f13283 Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/abp-team-raffle.jpg differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/cover-image.png b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/cover-image.png new file mode 100644 index 0000000000..f272a8d463 Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/docs-image-larger.png b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/docs-image-larger.png new file mode 100644 index 0000000000..95b999560e Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/docs-image-larger.png differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/dotnet-conf-2024.png b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/dotnet-conf-2024.png new file mode 100644 index 0000000000..37ddf06eb4 Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/dotnet-conf-2024.png differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/dotnet-developer-days-2024.jpg b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/dotnet-developer-days-2024.jpg new file mode 100644 index 0000000000..eb9fe26dfd Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/dotnet-developer-days-2024.jpg differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/studio-switch-to-preview.png b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/studio-switch-to-preview.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/studio-switch-to-preview.png differ diff --git a/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/suite-navigation-properties.png b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/suite-navigation-properties.png new file mode 100644 index 0000000000..4d329ccc7b Binary files /dev/null and b/docs/en/Blog-Posts/2024-10-23 v9_0_Preview/suite-navigation-properties.png differ diff --git a/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/community-talks.png b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/community-talks.png new file mode 100644 index 0000000000..7263b68e10 Binary files /dev/null and b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/community-talks.png differ diff --git a/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/cover-image.png b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/cover-image.png new file mode 100644 index 0000000000..f272a8d463 Binary files /dev/null and b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/post.md b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/post.md new file mode 100644 index 0000000000..9c96351d96 --- /dev/null +++ b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/post.md @@ -0,0 +1,93 @@ +# ABP.IO Platform 9.0 Has Been Released Based on .NET 9.0 + +![](cover-image.png) + +Today, [ABP](https://abp.io/) 9.0 stable version has been released based on [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0). You can create solutions with ABP 9.0 starting from ABP Studio v0.9.11 or by using the ABP CLI as explained in the following sections. + +## What's New With Version 9.0? + +All the new features were explained in detail in the [9.0 RC Announcement Post](https://abp.io/blog/announcing-abp-9-0-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 9.0 + +### Creating New Solutions + +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) to create new solutions. + +By default, ABP Studio uses stable versions to create solutions. Therefore, it will be creating the solution with the latest stable version, which is v9.0 for now, so you don't need to specify the version. **You can create solutions with ABP 9.0 starting from v0.9.11.** + +### How to Upgrade an Existing Solution + +You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained: + +### Upgrading via ABP Studio + +If you are already using the ABP Studio, you can upgrade it to the latest version to align it with ABP v9.0. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info. + +After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Switch to stable** action button to instantly upgrade your solution: + +![](switch-to-stable.png) + +> Please note that ABP CLI & ABP Studio only upgrade the related ABP packages, so you need to upgrade the other packages for .NET 9.0 manually. + +### Upgrading via ABP CLI + +Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet, you can run the following command: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +Or to update the existing CLI, you can run the following command: + +```bash +dotnet tool update -g Volo.Abp.Studio.Cli +``` + +After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows: + +```bash +abp update +``` + +You can run this command in the root folder of your solution to update all ABP related packages. + +> Please note that ABP CLI & ABP Studio only upgrade the related ABP packages, so you need to upgrade the other packages for .NET 9.0 manually. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.x: [ABP Version 9.0 Migration Guide](https://abp.io/docs/9.0/release-info/migration-guides/abp-9-0) + +## Community News + +### Highlights from .NET 9.0 + +Our team has closely followed the ASP.NET Core and Entity Framework Core 9.0 releases, read Microsoft's guides and documentation, and adapted the changes to our ABP.IO Platform. We are proud to say that we've shipped the ABP 9.0 based on .NET 9.0 just after Microsoft's .NET 9.0 release. + +In addition to the ABP's .NET 9.0 upgrade, our team has created many great articles to highlight the important features coming with ASP.NET Core 9.0 and Entity Framework Core 9.0. + +> You can read [this post](https://volosoft.com/blog/Highlights-for-ASP-NET-Entity-Framework-Core-NET-9-0) to see the list of all articles. + +### New ABP Community Articles + +In addition to [the articles to highlight .NET 9.0 features written by our team](https://volosoft.com/blog/Highlights-for-ASP-NET-Entity-Framework-Core-NET-9-0), here are some of the recent posts added to the [ABP Community](https://abp.io/community): + +* [Video: Building Modular Monolith Applications with ASP.NET Core & ABP Studio](https://abp.io/community/videos/building-modular-monolith-applications-with-asp.net-core-abp-studio-66znukvf) by [Halil İbrahim Kalkan](https://x.com/hibrahimkalkan) +* [How to create your Own AI Bot on WhatsApp Using an ABP.io Template](https://abp.io/community/articles/how-to-create-your-own-ai-bot-on-whatsapp-using-the-abp-framework-c6jgvt9c) by [Michael Kokula](https://abp.io/community/members/Michal_Kokula) +* [ABP Now Supports .NET 9](https://abp.io/community/articles/abp-now-supports-.net-9-zpkznc4f) by [Alper Ebiçoğlu](https://x.com/alperebicoglu) + +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/create) to the ABP Community. + +### ABP Community Talks 2024.7: What’s New with .NET 9 & ABP 9? + +![](community-talks.png) + +In this episode of ABP Community Talks, 2024.7; we will dive into the features that came with .NET 9.0 with [Alper Ebicoglu](https://github.com/ebicoglu), [Engincan Veske](https://github.com/EngincanV), [Berkan Sasmaz](https://github.com/berkansasmaz) and [Ahmet Faruk Ulu](https://github.com/ahmetfarukulu). + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/9.0/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v9.0 and provide feedback to help us release more stable versions. + +Thanks for being a part of this community! diff --git a/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/switch-to-stable.png b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/switch-to-stable.png new file mode 100644 index 0000000000..30883ebf92 Binary files /dev/null and b/docs/en/Blog-Posts/2024-11-19 v9_0_Release_Stable/switch-to-stable.png differ diff --git a/docs/en/Blog-Posts/2024-12-15-ABP-Studio-R2R/POST.md b/docs/en/Blog-Posts/2024-12-15-ABP-Studio-R2R/POST.md new file mode 100644 index 0000000000..e4c37eec07 --- /dev/null +++ b/docs/en/Blog-Posts/2024-12-15-ABP-Studio-R2R/POST.md @@ -0,0 +1,67 @@ +# ABP Studio Goes AOT: Faster Startups with Ready-to-Run (R2R) Publishing + +We're excited that [ABP Studio](https://abp.io/studio) now supports [Ready-to-Run (R2R) publishing](https://learn.microsoft.com/en-us/dotnet/core/deploying/ready-to-run) (starting from v0.9.16+), a hybrid form of ahead-of-time (AOT) compilation. This enhancement significantly improves the startup time and overall performance of ABP Studio, making it faster and more performant than ever before. + +Let's dive into what R2R publishing is, how it works, and the benefits it brings to ABP Studio. + +## What is Ready-to-Run (R2R) Publishing? + +Ready-to-Run (R2R) is a form of AOT compilation available in the .NET ecosystem. Unlike traditional just-in-time (JIT) compilation, R2R precompiles parts of your application to native code before deployment. This precompiled code helps reduce the startup time by minimizing the work needed during runtime. + +However, R2R isn't a complete AOT compilation. Instead, it's a hybrid approach because it stores both: + +* **Native code for precompiled methods** (to improve startup time and performance) + +* **Intermediate Language (IL) code** for methods that may need further JIT compilation + +This hybrid nature is why R2R binaries are typically larger. For ABP Studio, the storage size increased by ~150 MB with R2R enabled, but the trade-off is well worth it for the performance and startup-time gains. + +## How R2R (Ready-to-Run) Improves ABP Studio + +### Faster Startup Time 🚀 + +One of the biggest advantages of R2R publishing is its impact on startup times. In our local tests, enabling R2R resulted in startup times being **reduced by 2.5x** ⬇️. + +This means you can get to work faster, without waiting for the application to being startup from the beginning. Whether you're launching ABP Studio to manage projects, generate code, or deploy applications, the improved responsiveness is noticeable. + +### Performance Enhancements 📈 + +In addition to faster startups, R2R publishing contributes to overall performance improvements. By precompiling frequently used methods, R2R reduces the workload on the JIT compiler during execution, leading to smoother and more efficient operations. + +### Trade-offs: Increased Storage Size 🆙 + +With great performance comes a slight trade-off: storage size. R2R binaries include both **native** and **IL code**, which increases the file size. In the case of ABP Studio, the storage footprint increased by ~150 MB. However, the substantial improvements in speed and responsiveness make this a worthwhile investment. + +## How to Enable R2R Publishing in Your Applications? + +If you're developing applications and want to benefit from R2R, here's a quick guide on how to enable it in your .NET projects: + +1. You can add the following configuration to your final project's `.csproj` file: + +```xml + + true + +``` + +2. Then, publish your application with the `dotnet publish` command: + +```bash +dotnet publish -c Release +``` + +Alternatively, you can specify the _PublishReadyToRun_ flag directly to the `dotnet publish` command as follows: + +```bash +dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true +``` + +That's it! Your application will now include precompiled native code for faster startup and great performance benefits. + +> Please refer to the [official documentation](https://learn.microsoft.com/en-us/dotnet/core/deploying/ready-to-run) before publishing your application with R2R. + +## Conclusion + +As ABP team, we're always looking for ways to improve the developer experience. By adopting **Ready-to-Run (R2R) publishing** for ABP Studio, we're aiming to deliver a faster and more efficient tool for your development needs. + +Stay tuned for more updates and enhancements as we continue to optimize ABP Studio and please provide us with your invaluable feedback. \ No newline at end of file diff --git a/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/POST.md b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/POST.md new file mode 100644 index 0000000000..bbcc69c727 --- /dev/null +++ b/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/create) 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! diff --git a/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/cover-image.png b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/cover-image.png new file mode 100644 index 0000000000..0575db3f27 Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/cover-image.png differ diff --git a/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/idle-session-settings.png b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/idle-session-settings.png new file mode 100644 index 0000000000..7cdb5df408 Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/idle-session-settings.png differ diff --git a/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/lazy-expandable.png b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/lazy-expandable.png new file mode 100644 index 0000000000..0936bcb024 Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/lazy-expandable.png differ diff --git a/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/session-expiration-warning.png b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/session-expiration-warning.png new file mode 100644 index 0000000000..1c4082874d Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/session-expiration-warning.png differ diff --git a/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/studio-switch-to-preview.png b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/studio-switch-to-preview.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-21 v9_1_Preview/studio-switch-to-preview.png differ diff --git a/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/POST.md b/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/POST.md new file mode 100644 index 0000000000..611d8cb41b --- /dev/null +++ b/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! diff --git a/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/abp-studio-macos-intel.png b/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/abp-studio-macos-intel.png new file mode 100644 index 0000000000..f5d5ca6987 Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/abp-studio-macos-intel.png differ diff --git a/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/cover-image.png b/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/cover-image.png new file mode 100644 index 0000000000..80e0d0faf0 Binary files /dev/null and b/docs/en/Blog-Posts/2025-01-22 ABP_Now_Supports_MacOS_Intel/cover-image.png differ diff --git a/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/POST.md b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/POST.md new file mode 100644 index 0000000000..2e6764e9b7 --- /dev/null +++ b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/POST.md @@ -0,0 +1,82 @@ +# ABP.IO Platform 9.1 Final Has Been Released! + +We are glad to announce that [ABP](https://abp.io/) 9.1 stable version has been released today. + +## What's New With Version 9.1? + +All the new features were explained in detail in the [9.1 RC Announcement Post](https://abp.io/community/articles/abp-platform-9.1-rc-has-been-released-wws5l00k), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 9.1 + +### Creating New Solutions + +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) to create new solutions. + +By default, ABP Studio uses stable versions to create solutions. Therefore, it will be creating the solution with the latest stable version, which is v9.1 for now, so you don't need to specify the version. + +### How to Upgrade an Existing Solution + +You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained: + +### Upgrading via ABP Studio + +If you are already using the ABP Studio, you can upgrade it to the latest version to align it with ABP v9.1. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info. + +After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Upgrade ABP Packages** action button to instantly upgrade your solution: + +![](upgrade-abp-packages.png) + +### Upgrading via ABP CLI + +Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet, you can run the following command: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +Or to update the existing CLI, you can run the following command: + +```bash +dotnet tool update -g Volo.Abp.Studio.Cli +``` + +After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows: + +```bash +abp update +``` + +You can run this command in the root folder of your solution to update all ABP related packages. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v9.0: [ABP Version 9.1 Migration Guide](https://abp.io/docs/latest/release-info/migration-guides/abp-9-1) + +## Community News + +### New ABP Community Articles + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [URL-Based Localization](https://abp.io/community/articles/urlbased-localization-3ivzinbb) by [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) +* [Building a CRUD API with ABP Framework, ASP.NET Core, and PostgreSQL](https://abp.io/community/articles/building-a-crud-api-with-abp-framework-asp.net-core-and-postgresql-elrj0old) by [Berkan Şaşmaz](https://github.com/berkansasmaz) +* [Encryption and Decryption in ABP Framework](https://abp.io/community/articles/encryption-and-decryption-in-abp-framework-37uqhdwz) by [Liming Ma](https://github.com/maliming) +* [Migrate Your DB from the Web Application - Adding a DB Migration Controller](https://abp.io/community/articles/migrate-your-db-from-the-web-application-adding-a-db-migration-controller-in-abp-framework-x3u3uvk3) by [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) +* [Containerization: Blazor WASM + JWT Web API => Docker](https://abp.io/community/articles/containerization-blazor-wasm-jwt-web-api-docker-i3eirlsf) by [Bart Van Hoey](https://abp.io/community/members/bartvanhoey) +* [Configuring Post-Logout Redirect URI in ABP Based Blazor Applications with OpenIddict](https://abp.io/community/articles/configuring-postlogout-redirect-uri-in-abp-based-blazor-applications-with-openiddict-1t84suxg) by [Engincan Veske](https://github.com/EngincanV) + +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/create) to the ABP Community. + +### ABP Community Talks 2025.2: Real World Problems and Solutions with AI + +![](community-talks.png) + +In this episode of ABP Community Talks (2025.2), Decision Tree joined us to explore how AI is being leveraged to solve real-world problems, showcasing a practical use case of AI applications. + +> You can re-watch the talk from [here](https://www.youtube.com/watch?v=CXpWjxCIY_E). + +## About the Next Version + +The next feature version will be 9.2. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/community-talks.png b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/community-talks.png new file mode 100644 index 0000000000..2c2dd5a38a Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/community-talks.png differ diff --git a/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/cover-image.png b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/cover-image.png new file mode 100644 index 0000000000..0575db3f27 Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/cover-image.png differ diff --git a/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/upgrade-abp-packages.png b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/upgrade-abp-packages.png new file mode 100644 index 0000000000..ad5e9bd462 Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-07 v9_1_Release_Stable/upgrade-abp-packages.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/POST.md b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/POST.md new file mode 100644 index 0000000000..e59e75f44a --- /dev/null +++ b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/POST.md @@ -0,0 +1,195 @@ +# ABP Platform 9.2 RC Has Been Released + +We are happy to release [ABP](https://abp.io) version **9.2 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.2! Thanks to you in advance. + +## Get Started with the 9.2 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 a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v9.x or earlier: [ABP Version 9.2 Migration Guide](https://abp.io/docs/9.2/release-info/migration-guides/abp-9-2) + +## What's New with ABP v9.2? + +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: + +* Added `ApplicationName` Property to Isolate Background Jobs & Background Workers +* Docs Module: Added "Alternative Words" to Filter Items +* Introducing the Bunny BLOB Storage Provider +* Upgraded `MongoDB.Driver` to v3.1.0 +* Using Timezone Settings to Display Datetime +* Identity Pro Module: Require Email Verification to Register +* Switching users during OAuth login + +### Added ApplicationName Property to Isolate Background Jobs & Background Workers + +ABP's [Background Jobs Module](https://abp.io/docs/latest/modules/background-jobs) has been enhanced with a new `ApplicationName` property that helps isolate jobs and workers across multiple applications sharing the same database. + +Previously, when different applications used the BackgroundJobs module and shared a database, an application might encounter jobs that didn't belong to it. This would lead to failed processing attempts and marking jobs as `IsAbandoned = true` with a "Undefined background job for the job name" error, preventing these jobs from ever being executed. + +With the new `ApplicationName` property, applications now properly filter jobs at the repository level, ensuring each application only processes job types it recognizes. This prevents the incorrect abandonment of jobs and ensures consistent behavior in multi-application scenarios. + +You can set `ApplicationName` of `AbpBackgroundJobWorkerOptions` to your application name to isolate jobs and workers across multiple applications sharing the same database: + +```csharp +public override void PreConfigureServices(ServiceConfigurationContext context) +{ + PreConfigure(options => + { + options.ApplicationName = context.Services.GetApplicationName()!; + }); +} +``` + +> For more information, please refer to the [Background Jobs Module](https://abp.io/docs/latest/modules/background-jobs) documentation and the [PR](https://github.com/abpframework/abp/pull/22169) that added this feature. + +### Docs Module: Added "Alternative Words" to Filter Items + +[ABP's Docs Module](https://abp.io/docs/9.2/modules/docs) now supports "alternative words" to enhance the search functionality when filtering documentation items. This feature addresses a common user experience issue where users might search using terminology different from what appears in the documentation. + +For example, when a user searches for "Error" in the documentation, they may actually be looking for content related to "Exception Handling." With this new feature, documentation items can now be configured with alternative keywords that are considered during filtering. + +The implementation allows defining optional "keywords" for items in the navigation tree. For example: + +```json +{ + "text": "Exception Handling", + "path": "framework/fundamentals/exception-handling.md", + "keywords": ["Error", "Another Value"] +} +``` + +When users search or filter content, the system now considers both the original text and these alternative keywords, improving discoverability of relevant documentation sections. This enhancement makes the documentation more accessible and user-friendly, especially for newcomers who might not be familiar with the exact terminology used in the ABP documentation. + +### Introducing the Bunny BLOB Storage Provider + +ABP v9.2 RC introduces a new BLOB storage provider for [Bunny Storage](https://bunny.net/storage/), a global edge storage solution. This addition expands ABP's BLOB Storage options beyond the existing providers like Azure, AWS, and others. + +The [Bunny BLOB Storage Provider](https://abp.io/docs/9.2/framework/infrastructure/blob-storing/bunny) allows ABP applications to seamlessly integrate with Bunny's CDN-backed storage service, which offers high-performance content delivery through its global network. + +To use this new provider, you'll need to: + +* Run `abp add-package Volo.Abp.BlobStoring.Bunny` command. +* And then configure the provider in your module's `ConfigureServices` method: + +```csharp +Configure(options => +{ + options.Containers.ConfigureDefault(container => + { + container.UseBunny(bunny => + { + bunny.StorageZoneName = "your-storage-zone"; + bunny.ApiKey = "your-api-key"; + bunny.Region = "your-region"; // de, ny, la, sg, or sy + }); + }); +}); +``` + +This integration provides ABP applications with an efficient and globally distributed storage solution, particularly beneficial for applications requiring fast content delivery across different geographical regions. To use this new provider and make the related configurations, you can refer to the [Bunny Storage Provider](https://abp.io/docs/9.2/framework/infrastructure/blob-storing/bunny) documentation always. + +> This new BLOB Storage provider is contributed by [@suhaib-mousa](https://github.com/suhaib-mousa). Thanks to him for his contribution! +> We are always happy to see the community contributing to the ABP Framework and encouraging them to contribute more. + +### Upgraded `MongoDB.Driver` to `v3.1.0` + +ABP v9.2 RC includes an upgrade to `MongoDB.Driver` version `3.1.0`. This significant version bump from previous releases brings several improvements and new features that benefit ABP applications using MongoDB as their database. + +The upgrade provides: + +* Async/Await Support: Write non-blocking, asynchronous code easily. +* Fluent API: Build queries and updates intuitively with Builders. +* LINQ Support: Use LINQ for querying MongoDB collections. +* and more ... + +> For more information, please refer to the [MongoDB.Driver release notes](https://github.com/mongodb/mongo-csharp-driver/releases/tag/v3.1.0). + +We have prepared a [migration guide](https://abp.io/docs/9.2/release-info/migration-guides/MongoDB-Driver-2-to-3) for this upgrade. Please refer to it to learn more about the changes and how to migrate your application. + +### Using Timezone Settings to Display Datetime + +A significant enhancement in ABP v9.2 is the ability to use timezone settings to display `DateTime` values according to the user's or application's configured timezone. Introduced in `v9.2.0-rc.2`, this feature addresses the common challenge of ensuring users see accurate time information, regardless of their geographical location. + +Previously, `DateTime` values were often shown in the server's timezone or in UTC, which could cause confusion for users in different timezones. With this new feature, ABP applications can now respect the configured timezone and automatically convert and display datetime values accordingly. + +**Before setting the timezone:** + +Consider a scenario where you have a list of books, and the `CreationTime` property is displayed without any timezone consideration. It may appear in the server's default timezone: + +![before.png](before.png) +*(Screenshot of a Books page showing the CreationTime in a default timezone.)* + +**Setting the timezone:** + +To set the timezone, start by configuring the `AbpClockOptions` in your module's `ConfigureServices` method: + +```csharp +Configure(options => +{ + options.Kind = DateTimeKind.Utc; +}); +``` + +> By setting the `Kind` property of `AbpClockOptions` to `DateTimeKind.Utc`, ABP will normalize all datetime values. Times stored in the database and returned to the frontend will be in UTC. Additionally, the `SupportsMultipleTimezone` property of the `IClock` service will be **true**, and you’ll be able to configure the timezone from the UI under the _Settings_ page. + +After setting the `Kind` property, you can run your application and configure the timezone from the UI under the _Settings_ page. For example, set the timezone to "Asia/Tokyo (+09:00)": + +![configure-timezone.png](configure-timezone.png) +*(Screenshot showing the configuration setting for Abp.Timing.TimeZone, set to "Asia/Tokyo (+09:00)".)* + +> ABP provides the `Abp.Timing.TimeZone` setting, which allows you to configure the desired timezone at the application, tenant, or user level and this setting can be configured in the UI under the _Settings_ page, inside of the _Time Zone_ tab. + +**After setting the timezone:** + +Once the timezone is configured, ABP automatically handles the conversion and display of `DateTime` values. The `CreationTime` on the _Books_ page will now be shown in the **"Asia/Tokyo"** timezone. + +![after.png](after.png) +*(Screenshot of the _Books_ page after setting the timezone, showing the `CreationTime` adjusted to the "Asia/Tokyo" timezone.)* + +This feature utilizes the `IClock` service, which provides methods like `ConvertToUserTime` and `ConvertToUtc` to facilitate timezone conversions. By configuring the `Abp.Timing.TimeZone` setting, developers can ensure a consistent and user-friendly experience across applications with a global user base. +> For a more detailed guide on implementing and using this feature, refer to the article: [Developing a Multi-Timezone Application Using the ABP Framework](https://abp.io/community/articles/developing-a-multitimezone-application-using-the-abp-framework-zk7fnrdq). It offers step-by-step instructions and examples for handling multi-timezone scenarios in ABP applications. + +### Identity Pro Module: Require Email Verification to Register + +[ABP Identity Pro module](https://abp.io/docs/9.2/modules/identity-pro) has been enhanced with a new feature that allows administrators to require email verification during the registration process. This security improvement ensures that users must verify their email addresses before their registration is considered complete. Enabling this feature is especially important for applications that want to prevent spam registrations. + +Administrators can enable or disable this feature through the **Identity management -> Identity Verification (tab)** settings page (by checking the `Enforce email verification to register` checkbox): + +![require-email-verification.png](./require-email-verification-for-register.png) + +### Switching users during OAuth login + +If you have an OAuth/Auth Server application using the [ABP Account Pro module](https://abp.io/docs/9.2/modules/account-pro) , you can pass the `prompt=select_account` parameter to force the user to select an account. + +![select-account.png](./select-account.png) + +For more information, please refer to the [Switching users during OAuth login](https://abp.io/docs/9.2/modules/account-pro#switching-users-during-oauth-login) documentation. + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Implementing CQRS with MediatR in ABP](https://abp.io/community/articles/implementing-cqrs-with-mediatr-in-abp-xiqz2iio) by [Engincan Veske](https://github.com/EngincanV) +* [Using Vue Components in a Razor Pages ABP Application](https://abp.io/community/articles/using-vue-components-in-a-razor-pages-abp-application-z3jr07tv) by [Enis Necipoglu](https://github.com/enisn) +* [Using ABP's AWS Blob Storing Provider with DigitalOcean Spaces](https://abp.io/community/articles/using-abps-aws-blob-storing-provider-with-digitalocean-spaces-7hlyb25g) by [Suhaib Mousa](https://abp.io/community/members/suhaib-mousa) +* [Video Post: Using Vue Components in a Razor Pages ABP Application](https://abp.io/community/articles/using-vue-components-in-a-razor-pages-abp-application-z3jr07tv) by [Enis Necipoglu](https://github.com/enisn) +* [Understanding the Embedded Files in ABP Framework](https://abp.io/community/articles/understanding-the-embedded-files-in-abp-framework-nsrp8aa9) by [Liming Ma](https://github.com/maliming) +* [How to Change the CurrentUser in ABP?](https://abp.io/community/articles/how-to-change-the-currentuser-in-abp-i3uu1m7g) by [Engincan Veske](https://github.com/EngincanV) + + +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/create) 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.2/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v9.2 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/after.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/after.png new file mode 100644 index 0000000000..f9f72302a5 Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/after.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/before.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/before.png new file mode 100644 index 0000000000..14340f91ee Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/before.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/configure-timezone.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/configure-timezone.png new file mode 100644 index 0000000000..d383eee6f6 Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/configure-timezone.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/cover-image.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/cover-image.png new file mode 100644 index 0000000000..dd40555c8e Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/cover-image.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/require-email-verification-for-register.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/require-email-verification-for-register.png new file mode 100644 index 0000000000..597eaa6118 Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/require-email-verification-for-register.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/select-account.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/select-account.png new file mode 100644 index 0000000000..39d8c1b421 Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/select-account.png differ diff --git a/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/studio-switch-to-preview.png b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/studio-switch-to-preview.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/Blog-Posts/2025-03-27 v9_2_Preview/studio-switch-to-preview.png differ diff --git a/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/POST.md new file mode 100644 index 0000000000..1062195bda --- /dev/null +++ b/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/POST.md @@ -0,0 +1,86 @@ +# ABP.IO Platform 9.2 Final Has Been Released! + +We are glad to announce that [ABP](https://abp.io/) 9.2 stable version has been released today. + +## What's New With Version 9.2? + +All the new features were explained in detail in the [9.2 RC Announcement Post](https://abp.io/community/articles/abp-platform-9.2-rc-has-been-released-jpq072nh), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 9.2 + +### Creating New Solutions + +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) to create new solutions. + +### How to Upgrade an Existing Solution + +You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained: + +### Upgrading via ABP Studio + +If you are already using the ABP Studio, you can upgrade it to the latest version. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info. + +After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Upgrade ABP Packages** action button to instantly upgrade your solution: + +![](upgrade-abp-packages.png) + +### Upgrading via ABP CLI + +Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet, you can run the following command: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +Or to update the existing CLI, you can run the following command: + +```bash +dotnet tool update -g Volo.Abp.Studio.Cli +``` + +After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows: + +```bash +abp update +``` + +You can run this command in the root folder of your solution to update all ABP related packages. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v9.x: [ABP Version 9.2 Migration Guide](https://abp.io/docs/9.2/release-info/migration-guides/abp-9-2) + +## Community News + +### New ABP Community Articles + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [Liming Ma](https://github.com/maliming) has published 3 new articles: + * [Integrating .NET AI Chat Template with ABP Framework](https://abp.io/community/articles/integrating-.net-ai-chat-template-with-abp-framework-qavb5p2j) + * [Resolving Tenant from Route in ABP Framework](https://abp.io/community/articles/resolving-tenant-from-route-in-abp-framework-ah7oru97) + * [Common Errors in JWT Bearer Authentication](https://abp.io/community/articles/common-errors-in-jwt-bearer-authentication-4u3wrbs5) +* [Engincan Veske](https://engincanveske.substack.com/) has published 3 new articles: + * [Understanding HttpApi.Client Project & Remote Services in an ABP Based Application](https://abp.io/community/articles/http-api-client-and-remote-services-in-abp-based-application-xkknsp6m) + * [Using Elsa 3 with the ABP Framework: A Comprehensive Guide](https://abp.io/community/articles/using-elsa-3-workflow-with-abp-framework-usqk8afg) + * [Implementing Custom Tenant Logo Feature in ABP Framework: A Step-by-Step Guide](https://abp.io/community/articles/implementing-custom-tenant-logo-feature-in-abp-framework-a-stepbystep-guide-sba96ac9) +* [Berkan Şaşmaz](https://berkansasmaz.com/) has published 2 new articles: + * [Understanding the Domain and Application Layers in ABP Framework](https://abp.io/community/articles/understanding-the-domain-and-application-layers-in-abp-1fipc4x4) + * [How Do We Maintain Code Quality and Technical Debt in Our .NET Codebase?](https://abp.io/community/articles/how-do-we-maintain-code-quality-and-technical-debt-in-our-.net-codebase-z7glpya1) +* [Enis Necipoğlu](https://github.com/enisn) has published 2 new articles: + * [White Labeling in ABP Framework](https://abp.io/community/articles/white-labeling-in-abp-framework-5trwmrfm) by [Enis Necipoğlu](https://github.com/enisn) + * [You do it wrong! Customizing ABP Login Page Correctly](https://abp.io/community/articles/you-do-it-wrong-customizing-abp-login-page-correctly-bna7wzt5) +* [Ariful Islam](https://abp.io/community/members/arif) has published 2 new articles: + * [Multi-Workspace Management for ABP Applications](https://abp.io/community/articles/multiworkspace-management-for-abp-applications-eghgty3j) + * [Using Semantic Kernel in the ABP Framework](https://abp.io/community/articles/using-semantic-kernel-in-the-abp-framework-qo5cnuzs) +* [Guide to Add Custom Modules in ABP.IO App](https://abp.io/community/articles/guide-to-add-custom-modules-in-abp.io-app-sttetffa) by [Harsh Gupta](https://abp.io/community/members/harshgupta) +* [Debugging NuGet Packages in ABP.IO: A Complete Guide](https://abp.io/community/articles/debugging-nuget-packages-in-abp.io-a-complete-guide-h13y2033) by [Suhaib Mousa](https://suhaibmousa.com/) +* [Using Microsoft AI Extensions Library and OpenAI to Summarize User Comments](https://abp.io/community/articles/using-microsoft-ai-extensions-library-and-openai-to-summarize-user-comments-gj1lusg7) by [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) + +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/create) to the ABP Community. + +## About the Next Version + +The next feature version will be 9.3. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/cover-image.png b/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/cover-image.png new file mode 100644 index 0000000000..dd40555c8e Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/cover-image.png differ diff --git a/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/upgrade-abp-packages.png b/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/upgrade-abp-packages.png new file mode 100644 index 0000000000..ad5e9bd462 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-02 v9_2_Release_Stable/upgrade-abp-packages.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/POST.md b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/POST.md new file mode 100644 index 0000000000..8b37325e7e --- /dev/null +++ b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/POST.md @@ -0,0 +1,97 @@ +# Announcing ABP Studio 1.0 General Availability 🚀 + +It's the moment you've been waiting for! We are thrilled to announce the stable release of ABP Studio v1.0. This milestone marks a significant step forward in our mission to provide a first-class, integrated development environment for ABP developers. Paired with the recently released [ABP v9.2](https://abp.io/community/articles/announcing-abp-9-2-stable-release-061qmtzb), ABP Studio v1.0 brings new features and improvements that will make your development work faster and more efficient. + +For the past several months, our core ABP team has been hard at work, focusing on the features that matter most to you, our community of developers. This release is the peak of that effort, bringing a host of improvements and new capabilities to the forefront. Let's dive in and explore what's new in ABP Studio v1.0. + +## What's New with ABP Studio v1.0? + +ABP Studio v1.0 is all about enhancing your development experience, from project creation to deployment. Here, we'll walk you through some of the latest features we've implemented, along with other key enhancements that make this release truly special. + +### ❤️ Solution Runner with Ready/Health Checks + +ABP Studio's Solution Runner now provides visual health monitoring that makes tracking your applications' status easily. When you start an application, a spinner indicates it's "starting", then in the *Overall* tab, you can see the application's health (✅ for healthy, ⚠️ for unhealthy) that displays real-time health status: + +![Health Checks](health-checks.png) + +With [pre-configured health checks](https://abp.io/docs/9.2/solution-templates/layered-web-application/health-check-configuration) in ABP solution templates including database connectivity tests, you get instant feedback on your applications' health. + +When health check UI is configured, you can access comprehensive health dashboards with a dedicated "Browse Health UI" command or see the last health response from the "Show Latest Health Check Response" command: + +![SaaS Health Check](saas-health-check.png) + +When you restart applications that are open in your browser, ABP Studio automatically refreshes the pages for you. + +### 🎨 Theme Style Selection on Project Creation + +When creating a new solution, you can now choose your theme, theme style, and layout right from the project creation wizard instead of having to configure these settings later. ABP Studio lets you pick from [ABP's officially provided themes including Basic, LeptonX Lite, and LeptonX](https://abp.io/docs/latest/ui-themes). + +![Theme Style Selection LeptonX](theme-style-selection-leptonx.png) + +If you select Basic or LeptonX Lite themes, only the theme will be changed. However, if you select the LeptonX theme, you'll get additional options to fine-tune your setup: + +- **Theme Style Configuration** - Pick from **System, Light, Dim, or Dark** styles to match how you like your development environment +- **Layout Options** - **Sidebar menu** / **Top menu** + +### 📦 "Container" Application Type for Solution Runner + +ABP Studio v1.0 introduces a dedicated "Container" application type that gives you better control over your Docker containers directly from the Solution Runner. Instead of managing all your containers through PowerShell scripts or running them all together, you can now see and control each container individually in the Solution Runner panel. + +![Container Application Type](containers-type.png) + +This new feature replaces the previous _Infrastructure_ folder approach with a cleaner, more intuitive container section. You can now: + +- **Start and stop containers individually** - No more starting all containers at once when you only need specific services +- **Monitor container status** - See which containers are running, stopped, or have issues directly in the UI +- **Manage container dependencies** - Control the order and timing of container startup based on your application needs + +Whether you're working with databases, message brokers, or other containerized services, the new Container application type makes it much easier to manage your development environment. This is especially useful for microservice architectures where you might want to run only specific services during development or testing. + +### ⚙️ Handle Multiple DbContexts When Adding/Removing/Applying Migrations + +When working with ABP solutions that have multiple DbContexts (such as when using the separate tenant database option), ABP Studio now intelligently prompts you to select the appropriate DbContext for migration operations. This enhancement ensures you're always working with the correct database context and helps prevent common mistakes when managing multiple databases. + +![EF Core Migration Context Selection](new-migration-added.gif) + +The context selection dialog appears automatically when you perform any of these Entity Framework operations: + +- **Adding a new migration** - Choose which DbContext the new migration should target +- **Removing an existing migration** - Select the DbContext from which to remove the migration +- **Updating the database** - Specify which database context should be updated + +## Get Started with ABP Studio v1.0 Today! + +ABP Studio v1.0 is built on the solid foundation of the [latest version of ABP Framework, which is v9.2](https://abp.io/community/articles/announcing-abp-9-2-stable-release-061qmtzb). This means that when you create a new project with ABP Studio, you're getting all the latest features, performance improvements, and bug fixes that come with v9.2. This includes updates to dependencies, enhancements to the core framework, and improvements to application modules. + +We are incredibly excited for you to get your hands on ABP Studio v1.0. We believe these new features will make a real difference in your day-to-day development workflow. + +### ⬇️ Download ABP Studio 1.0 + +Ready to get started? You can download the stable v1.0 release right now from the official ABP Studio website: **[https://abp.io/studio](https://abp.io/studio)** + +![ABP Studio 1.0 Download](abp-studio-download.png) + +If you are an existing ABP Studio user, it's even easier. You don't need to download the installer again. Simply launch ABP Studio, and it will prompt you to update to the latest version directly from the UI. + +> Alternatively, you can click to the *Help -> Check for Updates* context menu item to check for updates and install the latest version: +> +> ![ABP Studio 1.0 Check for Updates](abp-studio-check-for-updates.png) + +### 🔮 What's Next? + +ABP Studio v1.0 represents just the beginning of our journey. We're committed to continuously evolving the platform, adding features that directly address real-world development challenges and enhance your workflow. Our goal is to make ABP Studio the go-to development environment for .NET and ABP Framework developers. + +We will keep releasing new versions with exciting features based on our roadmap and your valuable feedback. To give you a sneak peek into what's planned for future releases, you can expect to see: + +- **Environment Variable Management:** A dedicated UI to easily manage environment variables for your solutions. +- **OpenTelemetry Integration:** We'll be integrating OpenTelemetry support directly into the startup templates, making distributed tracing and observability a seamless part of your application from day one. +- **LeptonX Theme Builder**: Allowing users to determine styling, colour palette and easily override their project's theme styles. +- **Monitor dashboards of the tools used in the solution (e.g. Kubernetes, Redis, Grafana, etc...)** +- **Pre-configured .NET Aspire for the Microservice Startup Template** +- **and more...** + +We are incredibly excited about the future of ABP Studio and can't wait to share the next set of features with you. Your comments and suggestions are invaluable to us. If you have any feedback, please drop a comment below. + +Thank you for being part of our community and happy coding! + +**The Volosoft Team** diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/abp-studio-check-for-updates.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/abp-studio-check-for-updates.png new file mode 100644 index 0000000000..bf7f2dc889 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/abp-studio-check-for-updates.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/abp-studio-download.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/abp-studio-download.png new file mode 100644 index 0000000000..453a9ce3f8 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/abp-studio-download.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/containers-type.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/containers-type.png new file mode 100644 index 0000000000..66bfe4a12c Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/containers-type.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/cover-image.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/cover-image.png new file mode 100644 index 0000000000..76b24a8573 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/cover-image.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/health-checks.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/health-checks.png new file mode 100644 index 0000000000..6de5deeacf Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/health-checks.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/new-migration-added.gif b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/new-migration-added.gif new file mode 100644 index 0000000000..b8149e8a41 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/new-migration-added.gif differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/saas-health-check.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/saas-health-check.png new file mode 100644 index 0000000000..547e518751 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/saas-health-check.png differ diff --git a/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/theme-style-selection-leptonx.png b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/theme-style-selection-leptonx.png new file mode 100644 index 0000000000..8f5f143a11 Binary files /dev/null and b/docs/en/Blog-Posts/2025-06-10-Announcing-ABP-Studio-1.0-Stable-Release/theme-style-selection-leptonx.png differ diff --git a/docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/594bc2cb4507d5ae91d439e91cf03cc9.png b/docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/594bc2cb4507d5ae91d439e91cf03cc9.png new file mode 100644 index 0000000000..22911d4b72 Binary files /dev/null and b/docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/594bc2cb4507d5ae91d439e91cf03cc9.png differ diff --git a/docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/post.md b/docs/en/Community-Articles/2018-09-24-introducing-the-abp-vnext/post.md new file mode 100644 index 0000000000..9b686632fa --- /dev/null +++ b/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# + + + + Card title + +

+ This is a sample card component built by ABP bootstrap + card tag helper. ABP has tag helper wrappers for most of + the bootstrap components. +

+
+ Go somewhere → +
+
+```` + +"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# + +```` + +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# + + + + + +```` + +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) \ No newline at end of file diff --git a/docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/d92ca39b02b79d5984d739ec266fd43f.png b/docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/d92ca39b02b79d5984d739ec266fd43f.png new file mode 100644 index 0000000000..79ad21aee7 Binary files /dev/null and b/docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/d92ca39b02b79d5984d739ec266fd43f.png differ diff --git a/docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/post.md b/docs/en/Community-Articles/2019-02-22-microservice-demo-projects-status-and-road-map/post.md new file mode 100644 index 0000000000..e4efde2a9d --- /dev/null +++ b/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 \ No newline at end of file diff --git a/docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/mvc-template-solution.png b/docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/mvc-template-solution.png new file mode 100644 index 0000000000..ce821eba72 Binary files /dev/null and b/docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/mvc-template-solution.png differ diff --git a/docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/post.md b/docs/en/Community-Articles/2019-06-21-abp-cli-new-templates--features-v018-release/post.md new file mode 100644 index 0000000000..f89b846eab --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2019-08-16-abp-v019-release-with-new-angular-ui/post.md b/docs/en/Community-Articles/2019-08-16-abp-v019-release-with-new-angular-ui/post.md new file mode 100644 index 0000000000..1fc3391c8b --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/post.md b/docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/post.md new file mode 100644 index 0000000000..5451f4b647 --- /dev/null +++ b/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 :) \ No newline at end of file diff --git a/docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/volosoft-booth.png b/docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/volosoft-booth.png new file mode 100644 index 0000000000..3dca4409e4 Binary files /dev/null and b/docs/en/Community-Articles/2019-09-25-abp-v021-has-been-released-based-on-the-aspnet-core-30/volosoft-booth.png differ diff --git a/docs/en/Community-Articles/2019-10-22-abp-v10-has-been-finally-released/post.md b/docs/en/Community-Articles/2019-10-22-abp-v10-has-been-finally-released/post.md new file mode 100644 index 0000000000..0046ada85d --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/abp-commercial-demo.png b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/abp-commercial-demo.png new file mode 100644 index 0000000000..9153adeb86 Binary files /dev/null and b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/abp-commercial-demo.png differ diff --git a/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/lepton-theme-material.png b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/lepton-theme-material.png new file mode 100644 index 0000000000..279f4b2cf1 Binary files /dev/null and b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/lepton-theme-material.png differ diff --git a/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-2020-volosoft-booth-wall.png b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-2020-volosoft-booth-wall.png new file mode 100644 index 0000000000..428ecc284d Binary files /dev/null and b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-2020-volosoft-booth-wall.png differ diff --git a/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-london-volosoft.png b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-london-volosoft.png new file mode 100644 index 0000000000..afaed37a7a Binary files /dev/null and b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/ndc-london-volosoft.png differ diff --git a/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/post.md b/docs/en/Community-Articles/2020-01-16-abp-framework-v20-and-the-abp-commercial/post.md new file mode 100644 index 0000000000..2279b01466 --- /dev/null +++ b/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 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 :) \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/post.md b/docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/post.md new file mode 100644 index 0000000000..55e7ba43af --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/react-native-ui.png b/docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/react-native-ui.png new file mode 100644 index 0000000000..ab054e7cb0 Binary files /dev/null and b/docs/en/Community-Articles/2020-03-19-abp-framework-v230-has-been-released/react-native-ui.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/abp-commercial-ui-extensions.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/abp-commercial-ui-extensions.png new file mode 100644 index 0000000000..252af6b9e4 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/abp-commercial-ui-extensions.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/audit-log-entity-changes.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/audit-log-entity-changes.png new file mode 100644 index 0000000000..6a1ec44810 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/audit-log-entity-changes.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/easy-crm.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/easy-crm.png new file mode 100644 index 0000000000..2bfa53cbcc Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/easy-crm.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/github-contribution-graph.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/github-contribution-graph.png new file mode 100644 index 0000000000..e624e75e38 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/github-contribution-graph.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/module-entity-extended-ui.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/module-entity-extended-ui.png new file mode 100644 index 0000000000..25621aabb7 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/module-entity-extended-ui.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/post.md b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/post.md new file mode 100644 index 0000000000..b6c1d3f952 --- /dev/null +++ b/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(options => + { + options.AddOrUpdateProperty("SocialSecurityNumber"); + options.AddOrUpdateProperty("IsSuperUser"); + } + ); +```` + +It is easy to define validation rules for the properties: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "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( + "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 +

{{L "PasswordReset"}}

+ +

{{L "PasswordResetInfoInEmail"}}

+ + +```` + +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 + + + + + + + {{content}} + + +```` + +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( //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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/tenant-entity-changes.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/tenant-entity-changes.png new file mode 100644 index 0000000000..31524187b0 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/tenant-entity-changes.png differ diff --git a/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/text-template-content-ui.png b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/text-template-content-ui.png new file mode 100644 index 0000000000..99c7972da3 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-08-abp-framework-v270-has-been-released/text-template-content-ui.png differ diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/abp-chat-module.png b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/abp-chat-module.png new file mode 100644 index 0000000000..5ae351ebba Binary files /dev/null and b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/abp-chat-module.png differ diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-default-theme.png b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-default-theme.png new file mode 100644 index 0000000000..f3c3d16581 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-default-theme.png differ diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-material-theme.png b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-material-theme.png new file mode 100644 index 0000000000..e22c3003d9 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-abp-material-theme.png differ diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-themes.gif b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-themes.gif new file mode 100644 index 0000000000..7ce3935ef5 Binary files /dev/null and b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/lepton-themes.gif differ diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/post.md b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/post.md new file mode 100644 index 0000000000..5f44990c3c --- /dev/null +++ b/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: + + +abp new MyApp -t console + + +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 \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/rtl-ui.png b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/rtl-ui.png new file mode 100644 index 0000000000..34cd6581dd Binary files /dev/null and b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/rtl-ui.png differ diff --git a/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/signalr-chat-demo.png b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/signalr-chat-demo.png new file mode 100644 index 0000000000..c93595511a Binary files /dev/null and b/docs/en/Community-Articles/2020-05-22-abp-v280-releases--road-map/signalr-chat-demo.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-chat-module.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-chat-module.png new file mode 100644 index 0000000000..5ae351ebba Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-chat-module.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-commercial-290.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-commercial-290.png new file mode 100644 index 0000000000..656ff13177 Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-commercial-290.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-framework-290-.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-framework-290-.png new file mode 100644 index 0000000000..b64735fb54 Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/abp-framework-290-.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/easy-crm-1.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/easy-crm-1.png new file mode 100644 index 0000000000..07d7a2b54d Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/easy-crm-1.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/lepton-theme.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/lepton-theme.png new file mode 100644 index 0000000000..f6a85115e0 Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/lepton-theme.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/organization-units.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/organization-units.png new file mode 100644 index 0000000000..2a6ad72ffb Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/organization-units.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/post.md b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/post.md new file mode 100644 index 0000000000..e9f3daa5a3 --- /dev/null +++ b/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 _container; + + public MyService(IBlobContainer 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(options => +{ + options.Containers.Configure(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(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) \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/signalr-tiered-demo.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/signalr-tiered-demo.png new file mode 100644 index 0000000000..c4ca5e2b14 Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/signalr-tiered-demo.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/suite.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/suite.png new file mode 100644 index 0000000000..7e08cb3ef3 Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/suite.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-11.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-11.png new file mode 100644 index 0000000000..0db07459ca Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-11.png differ diff --git a/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-2.png b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-2.png new file mode 100644 index 0000000000..5d4d85755d Binary files /dev/null and b/docs/en/Community-Articles/2020-06-05-abp-framework-v290-has-been-released/virtual-file-explorer-2.png differ diff --git a/docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/file-management-ui.png b/docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/file-management-ui.png new file mode 100644 index 0000000000..ea210e53b6 Binary files /dev/null and b/docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/file-management-ui.png differ diff --git a/docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/post.md b/docs/en/Community-Articles/2020-07-03-abp-framework-v30-has-been-released/post.md new file mode 100644 index 0000000000..bd727c03e1 --- /dev/null +++ b/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` 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) + +  + +> We’d love to hear from you. Please leave your comments, suggestions, feeedbacks below. diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-comm-release-v3.1.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-comm-release-v3.1.png new file mode 100644 index 0000000000..13d4de57b4 Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-comm-release-v3.1.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-framework-release-v3.1.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-framework-release-v3.1.png new file mode 100644 index 0000000000..e58db97e0d Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/abp-framework-release-v3.1.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/email-phone-verification.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/email-phone-verification.png new file mode 100644 index 0000000000..2b4c5ac335 Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/email-phone-verification.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/forgot-password.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/forgot-password.png new file mode 100644 index 0000000000..c4bc8bff1d Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/forgot-password.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/ldap-settings-ui.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/ldap-settings-ui.png new file mode 100644 index 0000000000..da77f3bfeb Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/ldap-settings-ui.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/my-security-logs.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/my-security-logs.png new file mode 100644 index 0000000000..10ac509e14 Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/my-security-logs.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/post.md b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/post.md new file mode 100644 index 0000000000..9a41a8063a --- /dev/null +++ b/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(); +``` + +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! + +  + +## 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) + +  + +> We’d love to hear from you. Please leave your comments, suggestions, feeedbacks below. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/reset-password.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/reset-password.png new file mode 100644 index 0000000000..0dd9c94880 Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/reset-password.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/security-logs-ui.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/security-logs-ui.png new file mode 100644 index 0000000000..65c7380a86 Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/security-logs-ui.png differ diff --git a/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/user-lock.png b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/user-lock.png new file mode 100644 index 0000000000..f176bf067a Binary files /dev/null and b/docs/en/Community-Articles/2020-08-25-abp-framework-v31-rc-has-been-released/user-lock.png differ diff --git a/docs/en/Community-Articles/2020-09-04-abp-framework-v31-final-has-been-released/post.md b/docs/en/Community-Articles/2020-09-04-abp-framework-v31-final-has-been-released/post.md new file mode 100644 index 0000000000..fdbeb08c0d --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/post.md b/docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/post.md new file mode 100644 index 0000000000..6b9266462f --- /dev/null +++ b/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> GetListAsync(); + } +} +```` + +That uses a `BookDto` defined as shown: + +```csharp +using System; +using Volo.Abp.Application.Dtos; + +namespace AngularProxyDemo.Books +{ + public class BookDto : EntityDto + { + 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> 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({ + 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 { + 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 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({ + method: 'GET', + url: `/api/app/book`, + }, + { apiName: this.apiName }); + + update = (id: string, input: BookUpdateDto) => + this.restService.request({ + 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 { + 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 ExtraProperties { get; set; } + } + + public class OrderDetailDto : GenericDetailDto //INHERIT from GENERIC + { + public string Note { get; set; } + } + + //GENERIC class + public abstract class GenericDetailDto + { + 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({ + 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 { + productId: string; + count: TCount; +} + +export interface OrderCreateDto { + customerId: string; + creationTime: string; + details: OrderDetailDto[]; + extraProperties: Record; +} + +export interface OrderDetailDto extends GenericDetailDto { + 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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/swagger.png b/docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/swagger.png new file mode 100644 index 0000000000..1cd24d3ec2 Binary files /dev/null and b/docs/en/Community-Articles/2020-09-07-introducing-the-angular-service-proxy-generation/swagger.png differ diff --git a/docs/en/Community-Articles/2020-09-09-Replacing-Email-Template-and-Sending-Emails/POST.md b/docs/en/Community-Articles/2020-09-09-Replacing-Email-Template-and-Sending-Emails/POST.md index 03caff8007..98685933ba 100644 --- a/docs/en/Community-Articles/2020-09-09-Replacing-Email-Template-and-Sending-Emails/POST.md +++ b/docs/en/Community-Articles/2020-09-09-Replacing-Email-Template-and-Sending-Emails/POST.md @@ -470,6 +470,12 @@ namespace TemplateReplace * I highly recommend you to [check it out](https://commercial.abp.io/modules/Volo.TextTemplateManagement). +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## References * [Text Templating](https://docs.abp.io/en/abp/latest/Text-Templating) diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/abp-community-20200917.png b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/abp-community-20200917.png new file mode 100644 index 0000000000..1a3997a6ab Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/abp-community-20200917.png differ diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/account-profile-picture.jpg b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/account-profile-picture.jpg new file mode 100644 index 0000000000..1b57ce4025 Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/account-profile-picture.jpg differ diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazor-role-management-img.png b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazor-role-management-img.png new file mode 100644 index 0000000000..520ba18b0c Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazor-role-management-img.png differ diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazorise-github.png b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazorise-github.png new file mode 100644 index 0000000000..b5ded34da0 Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/blazorise-github.png differ diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/file-management-module-angular.png b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/file-management-module-angular.png new file mode 100644 index 0000000000..e424056917 Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/file-management-module-angular.png differ diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/host-features.png b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/host-features.png new file mode 100644 index 0000000000..dbfed05104 Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/host-features.png differ diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/post.md b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/post.md new file mode 100644 index 0000000000..6dd9b4dcd6 --- /dev/null +++ b/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(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(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(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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/visual-studio-solution-with-blazor.png b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/visual-studio-solution-with-blazor.png new file mode 100644 index 0000000000..097f726bf0 Binary files /dev/null and b/docs/en/Community-Articles/2020-09-18-abp-framework--abp-commercial-32-rc-with-the-new-blazor-ui-/visual-studio-solution-with-blazor.png differ diff --git a/docs/en/Community-Articles/2020-10-02-abp-framework-v32-final-has-been-released/post.md b/docs/en/Community-Articles/2020-10-02-abp-framework-v32-final-has-been-released/post.md new file mode 100644 index 0000000000..41651fb681 --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/0f4aa548ce22a256829739f842a3ff54.png b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/0f4aa548ce22a256829739f842a3ff54.png new file mode 100644 index 0000000000..c40b961beb Binary files /dev/null and b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/0f4aa548ce22a256829739f842a3ff54.png differ diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/41968da6c558c075cf1239f842a30e29.png b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/41968da6c558c075cf1239f842a30e29.png new file mode 100644 index 0000000000..cfe00ac859 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/41968da6c558c075cf1239f842a30e29.png differ diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/532b0018b486294ac3e539f842a36433.png b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/532b0018b486294ac3e539f842a36433.png new file mode 100644 index 0000000000..063f0a1ba7 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/532b0018b486294ac3e539f842a36433.png differ diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/546a89e4112ec73f45ec39f842a3b663.png b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/546a89e4112ec73f45ec39f842a3b663.png new file mode 100644 index 0000000000..920585fbd4 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/546a89e4112ec73f45ec39f842a3b663.png differ diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/86021f7f983fc9739cfb39f842a29644.png b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/86021f7f983fc9739cfb39f842a29644.png new file mode 100644 index 0000000000..5d332cc996 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/86021f7f983fc9739cfb39f842a29644.png differ diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/ef376d39f6c5be0a628639f842a448d7.png b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/ef376d39f6c5be0a628639f842a448d7.png new file mode 100644 index 0000000000..0aaeffc6bc Binary files /dev/null and b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/ef376d39f6c5be0a628639f842a448d7.png differ diff --git a/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/post.md b/docs/en/Community-Articles/2020-10-16-abp-framework--abp-commercial-v33-rc-have-been-released/post.md new file mode 100644 index 0000000000..eae223b1e1 --- /dev/null +++ b/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 _bookRepository; + + public BookAppService(IRepository 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 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 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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-10-28-abp-framework--abp-commercial-33-final-have-been-released/post.md b/docs/en/Community-Articles/2020-10-28-abp-framework--abp-commercial-33-final-have-been-released/post.md new file mode 100644 index 0000000000..f8dba5009b --- /dev/null +++ b/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. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/066daf9bcf2e9e2c6bed39f8e7480552.png b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/066daf9bcf2e9e2c6bed39f8e7480552.png new file mode 100644 index 0000000000..24ae9d86d5 Binary files /dev/null and b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/066daf9bcf2e9e2c6bed39f8e7480552.png differ diff --git a/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/1ad2d609148d655845ea39f8e73d0894.png b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/1ad2d609148d655845ea39f8e73d0894.png new file mode 100644 index 0000000000..d349bf0375 Binary files /dev/null and b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/1ad2d609148d655845ea39f8e73d0894.png differ diff --git a/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/723f7d5553da8714d3f839f8e747c95f.png b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/723f7d5553da8714d3f839f8e747c95f.png new file mode 100644 index 0000000000..e687049cc9 Binary files /dev/null and b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/723f7d5553da8714d3f839f8e747c95f.png differ diff --git a/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/post.md b/docs/en/Community-Articles/2020-11-17-abpio-platform-v40-rc-has-been-released-based-on-net-50/post.md new file mode 100644 index 0000000000..2fd4587ca8 --- /dev/null +++ b/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**. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/461ed871392027d60be739f93edde364.png b/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/461ed871392027d60be739f93edde364.png new file mode 100644 index 0000000000..5c92fb4f5e Binary files /dev/null and b/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/461ed871392027d60be739f93edde364.png differ diff --git a/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/7585eb53490fa17c62c939f93ede61d6.png b/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/7585eb53490fa17c62c939f93ede61d6.png new file mode 100644 index 0000000000..050ed1249e Binary files /dev/null and b/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/7585eb53490fa17c62c939f93ede61d6.png differ diff --git a/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/post.md b/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/post.md new file mode 100644 index 0000000000..5f5f20dce2 --- /dev/null +++ b/docs/en/Community-Articles/2020-12-04-abpio-platform-40-with-net-50-in-the-4th-year/post.md @@ -0,0 +1,86 @@ + +Today, we are extremely happy to release ABP Framework 4.0 with **.NET 5.0 support**! + +## 4 Years of Work + +As a nice coincidence, today is the **4th year** since the first commit made in the [abp repository](https://github.com/abpframework/abp)! So, we can say "*Happy Birthday ABP Framework!*". + +![abp-contribution-graph-4-years.png](461ed871392027d60be739f93edde364.png) + +### Some Statistics + +ABP.IO Platform and the ABP Community is growing. Here, a summary of these 4 years. + +From GitHub, only from the main [abp repository](https://github.com/abpframework/abp); + +* **15,297 commits** done. +* **3,764 issues** are closed. +* **2,133 pull requests** are merged. +* **158 contributors**. +* **88 releases** published. +* **5.2K stars** on GitHub. + +From NuGet & NPM; + +* **220 NuGet** packages & **52 NPM** packages. +* **1,000,000 downloads** only for the core NuGet package. + +From Website; + +* **200,000 visitors**. +* **1,000,000+ sessions**. + +## What's New With 4.0? + +Since all the new features are already explained in details with the [4.0 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.0-RC-Has-Been-Released-based-on-.NET-5.0), I will not repeat all the details again. Please read [the RC post](https://blog.abp.io/abp/ABP.IO-Platform-v4.0-RC-Has-Been-Released-based-on-.NET-5.0) for **new feature and changes** you may need to do for your solution while upgrading to the version 4.0. + +Here, a brief list of major features and changes; + +* Migrated to **.NET 5.0**. +* Stable **Blazor** UI. +* Moved to **System.Text.Json**. +* Upgraded to **IdentityServer** version 4.0. +* **WPF** startup template. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 4.0 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 + +This is a **major version** and requires some **manual work**, especially related to **.NET 5.0** and **IdentityServer** 4.0 upgrades. + +* See the [MIGRATION GUIDE](https://docs.abp.io/en/abp/latest/Migration-Guides/Abp-4_0) that covers all the details about the upgrade progress. + +* You can also see the [upgrading document](https://docs.abp.io/en/abp/latest/Upgrading). + +## New Guides / Documents + +We are constantly improving the documentation. Our purpose is not only document the ABP Framework, but also write architectural and practical guides for developers. + +### Implementing Domain Driven Design + +[Implementing Domain Driven Design](https://docs.abp.io/en/abp/latest/Domain-Driven-Design-Implementation-Guide) is a practical guide for they want to implement the DDD principles in their solutions. While the implementation details rely on the ABP Framework infrastructure, core concepts, principles and patterns are applicable in any kind of solution, even if it is not a .NET solution. + +![ddd-implementation-guide-sample.png](7585eb53490fa17c62c939f93ede61d6.png) + +### Testing + +The new [Testing document](https://docs.abp.io/en/abp/latest/Testing) discusses different kind of automated tests and explains how you can write tests for your ABP based solutions. + +### UI Documents + +We've created a lot of documents for the [MVC](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Overall), [Blazor](https://docs.abp.io/en/abp/latest/UI/Blazor/Overall) and the [Angular](https://docs.abp.io/en/abp/latest/UI/Angular/Quick-Start) UI. + +## About the Next Version + +The next versions 4.1 will mostly focus on; + +* Improving current features. +* Complete module features for the Blazor UI. +* Improve developer experience and productivity. +* More documentation and examples. + +Planned preview date for the version **4.1 is December 17, 2020**. See the [Road Map](https://docs.abp.io/en/abp/latest/Road-Map) document and [GitHub Milestones](https://github.com/abpframework/abp/milestones) to learn what's planned for the next versions. We are trying to be clear about the coming features and the next release dates. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md index 6445d83e85..f946db23b9 100644 --- a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md +++ b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md @@ -4,6 +4,12 @@ Hi, in this step by step article, we will see how we can integrate the Telerik Blazor Components to our Blazor UI. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Creating the Solution > ABP Framework offers startup templates to get into business faster. @@ -532,6 +538,12 @@ namespace TelerikComponents.Blazor.Pages ![final-result](./final-result.jpg) +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Conclusion In this article, I've tried to explain how we can integrate [Telerik Blazor Component](https://www.telerik.com/blazor-ui) to our Blazor UI. ABP Framework designed as modular, so that it can work with any UI library/framework. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/0c328649718826cf744439f99633728b.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/0c328649718826cf744439f99633728b.png new file mode 100644 index 0000000000..478c8f4f33 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/0c328649718826cf744439f99633728b.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/3374c36d0142fa896bba39f99631b937.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/3374c36d0142fa896bba39f99631b937.png new file mode 100644 index 0000000000..45bd98ecd1 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/3374c36d0142fa896bba39f99631b937.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/3ae582c6154776fbb71039f99633f611.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/3ae582c6154776fbb71039f99633f611.png new file mode 100644 index 0000000000..4f049c2339 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/3ae582c6154776fbb71039f99633f611.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/4dc15b8c5f46da81c68739f996354058.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/4dc15b8c5f46da81c68739f996354058.png new file mode 100644 index 0000000000..1b6a6ff295 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/4dc15b8c5f46da81c68739f996354058.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/4f81a99cc6e49386e98d39f99632228e.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/4f81a99cc6e49386e98d39f99632228e.png new file mode 100644 index 0000000000..947e4720af Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/4f81a99cc6e49386e98d39f99632228e.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/8bb3d261bea682dd7c4a39f996328baf.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/8bb3d261bea682dd7c4a39f996328baf.png new file mode 100644 index 0000000000..35bca6a495 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/8bb3d261bea682dd7c4a39f996328baf.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/d5bcdafe37bcb333a24039f9963300b5.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/d5bcdafe37bcb333a24039f9963300b5.png new file mode 100644 index 0000000000..d324f29f11 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/d5bcdafe37bcb333a24039f9963300b5.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/ed6fc66747ade597ea2b39f99634f925.png b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/ed6fc66747ade597ea2b39f99634f925.png new file mode 100644 index 0000000000..c3448a3026 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/ed6fc66747ade597ea2b39f99634f925.png differ diff --git a/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/post.md b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/post.md new file mode 100644 index 0000000000..8a3267a060 --- /dev/null +++ b/docs/en/Community-Articles/2020-12-21-abpio-platform-v41-rc-has-been-released/post.md @@ -0,0 +1,204 @@ +We have released the [ABP Framework](https://abp.io/) (and the [ABP Commercial](https://commercial.abp.io/)) 4.1.0 RC. This blog post introduces the new features and important changes in this new version. + +> **Notice: [4.1.0 final](https://github.com/abpframework/abp/milestone/47) version has been released at January 6, 2021**. + +## Get Started with the 4.1 RC + +If you want to try the version `4.1.0` today, follow the steps below; + +1) **Upgrade** the ABP CLI to the version `4.1.0-rc.2` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 4.1.0-rc.2 +```` + +**or install** if you haven't installed before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 4.1.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/latest/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**. + +## Breaking Changes + +This version has a minor breaking change if you'd injected a repository by class. This is not a problem for 99% of the applications. However, see [#6677](https://github.com/abpframework/abp/issues/6677) for the solution if that's a breaking change for you. + +## What's new with the ABP Framework 4.1 + +![abp-fr-note-41rc.png](ed6fc66747ade597ea2b39f99634f925.png) + +### Module Entity Extensions + +Module Entity Extension system provides a simple way of adding new properties to an existing entity defined by a module that is used by your application. This feature is now available also for the open source modules (identity and tenant-management). [The documentation](https://docs.abp.io/en/abp/latest/Module-Entity-Extensions) has been moved into the ABP Framework's documentation. + +**Example: Add "SocialSecurityNumber" property to the `IdentityUser` entity** + +````csharp +ObjectExtensionManager.Instance.Modules() + .ConfigureIdentity(identity => + { + identity.ConfigureUser(user => + { + user.AddOrUpdateProperty( //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 + } + ); + }); + }); +```` + +The new property becomes available on the UI, API and the database. You can even define navigation properties. This provides an easy way to extend existing modules while using them as NuGet packages. See [the document](https://docs.abp.io/en/abp/latest/Module-Entity-Extensions) for details. + +### Blazor UI Improvements + +Since the Blazor UI is relatively new in the ABP Framework, we continue to add features and make enhancements to fill the gap between other supported UI types. + +#### Bundling & Minification + +In the version 4.1, we had introduced the `abp bundle` command for the Blazor UI to add global script and style files of the depended modules into the `index.html`. It was a preparation for a real bundling & minification system. With the version 4.2, this command has been completed. + +Whenever you add a new module to your Blazor application, just type the `abp bundle` command in a command line terminal; + +* It finds all the global script/style files in your application and the modules your application directly or indirectly depends on, ordered by the module dependencies. +* Bundles all the scripts into a single file and minified the file (same for the styles). +* Add the single bundle file to the `index.html` file. + +Added a configuration into the `appsettings.json` file in the Blazor application in the application startup template to control the bundling mode: + +````js +{ + "AbpCli": { + "Bundle": { + "Mode": "BundleAndMinify" + } + } +} +```` + +Possible values are; + +* `BundleAndMinify`: Bundle all the files into a single file and minify the content. +* `Bundle`: Bundle all files into a single file, but not minify. +* `None`: Add files individually, do not bundle. + +See the [Global Scripts & Styles](https://docs.abp.io/en/abp/latest/UI/Blazor/Global-Scripts-Styles) document for details. + +#### SubmitButton + +`SubmitButton` is a new component that simplifies to save a form: + +````html + +```` + +The main advantages of using this component instead of a standard `Button` with submit type is; It automatically blocks the submit button until the save operation has fully completed. This prevents multiple clicks by user. And it is shorter than doing all manually. See the [document](https://docs.abp.io/en/abp/latest/UI/Blazor/SubmitButton). + +#### Other Blazor UI highlights + +* Implemented some **animations** (like opening/closing modals and dropdowns). +* Automatically **focus** to the first input when you open a modal form. + +Module extensibility system (mentioned above) for the Blazor UI is under development and not available yet. + +## What's new with the ABP Commercial 4.1 + +![abp-co-note-41rc.png](4dc15b8c5f46da81c68739f996354058.png) + +### Blazor UI Improvements + +We continue to complete missing modules and functionalities for the Blazor UI. + +#### Organization Unit Management + +Organization Management UI has been implemented for the Blazor UI. Example screenshot: + +![blazor-organization-units.png](3374c36d0142fa896bba39f99631b937.png) + +#### IdentityServer UI + +IdentityServer Management UI is also available for the Blazor UI now: + +![blazor-identityserver-ui.png](4f81a99cc6e49386e98d39f99632228e.png) + +### Suite: Navigation Property Selection with Typeahead + +We had introduced auto-complete select style navigation property selection. With this release, it is fully supported by all the UI options. So, when you create an CRUD page with ABP Suite for entity that has 1 to Many relation to another entity, you can simply select the target entity with a typeahead style select component. Example screenshot: + +![type-ahead.png](8bb3d261bea682dd7c4a39f996328baf.png) + +### Spanish Language Translation + +We continue to add new language supports for the UI. In this version, translated the UI to **Spanish** language. + +![spanish-commercial-translation.png](d5bcdafe37bcb333a24039f9963300b5.png) + +### Coming: Public Website with Integrated CMS Features + +In the next version, the application startup template will come with a public website application option. CMS Kit module will be installed in the website by default, that means newsletter, contact form, comments and some other new features will be directly usable in your applications. + +An early screenshot from the public website application home page: + +![abp-commercial-public-website.png](0c328649718826cf744439f99633728b.png) + +## Other News + +### ABP Community Contents + +A lot of new contents have been published in the ABP Community Web Site in the last two weeks: + +* [How to Integrate the Telerik Blazor Components to the ABP Blazor UI](https://community.abp.io/articles/how-to-integrate-the-telerik-blazor-components-to-the-abp-blazor-ui-q8g31abb) by [EngincanV](https://github.com/EngincanV) +* [Using DevExpress Blazor UI Components With the ABP Framework](https://community.abp.io/articles/using-devexpress-blazor-ui-components-with-the-abp-framework-wrpoa8rw) by [@berkansasmaz](https://github.com/berkansasmaz) +* [Creating a new UI theme by copying the Basic Theme (for MVC UI)](https://community.abp.io/articles/creating-a-new-ui-theme-by-copying-the-basic-theme-for-mvc-ui-yt9b18io) by [@ebubekirdinc](https://github.com/ebubekirdinc) +* [Using Angular Material Components With the ABP Framework](https://community.abp.io/members/muhammedaltug) by [@muhammedaltug](https://github.com/muhammedaltug) +* [How to export Excel files from the ABP framework](https://community.abp.io/articles/how-to-export-excel-files-from-the-abp-framework-wm7nnw3n) by [bartvanhoey](https://github.com/bartvanhoey) +* [Creating an Event Organizer Application with the ABP Framework & Blazor UI](https://community.abp.io/articles/creating-an-event-organizer-application-with-the-blazor-ui-wbe0sf2z) by [@hikalkan](https://github.com/hikalkan) + +Thanks to all of the contributors. We are waiting for your contributions too. If you want to create content for the ABP Community, please visit [community.abp.io](https://community.abp.io/) website and submit your article. + +#### Be a Superhero on Day 1 with ABP.IO + +Thanks to [@lprichar](http://github.com/lprichar) prepared an awesome introduction video for the ABP.IO Platform: "[Be a Superhero on Day 1 with ABP.IO](https://www.youtube.com/watch?v=ea0Zx9DLcGA)". + +#### New Sample Application: Event Organizer + +This is a new example application developed using the ABP Framework and the Blazor UI. See [this article](https://community.abp.io/articles/creating-an-event-organizer-application-with-the-blazor-ui-wbe0sf2z) for a step by step implementation guide. + +![event-list-ui.png](3ae582c6154776fbb71039f99633f611.png) + +### Github Discussions + +We enabled the [GitHub Discussions for the abp repository](https://github.com/abpframework/abp/discussions) as another place to discuss ideas or get help for the ABP Framework. The ABP core team is spending time participating in discussions and answering to questions as much as possible. + +## About the Next Release(s) + +Beginning from the next version (4.2.0), we are starting to spend more effort on the **CMS Kit module**. The purpose of this module is to provide CMS primitives (e.g. **comments, tags, reactions, contents**...) and features (e.g. **blog, pages, surveys**) as pre-built and reusable components. Current blog module will be a part of the CMS Kit module. + +We will continue to prepare documents, guides, tutorials and examples. And surely, we will continue to make enhancements and optimizations on the current features. + +> The planned preview release date for the version 4.2.0 is January 14, 2021 and the final (stable) version release date is January 28, 2021. + +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.1.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.1.0 final](https://github.com/abpframework/abp/milestone/45) version is January 4, 2021**. \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-01-06-abpio-platform-v41-final-has-been-released/post.md b/docs/en/Community-Articles/2021-01-06-abpio-platform-v41-final-has-been-released/post.md new file mode 100644 index 0000000000..68f9c66ff2 --- /dev/null +++ b/docs/en/Community-Articles/2021-01-06-abpio-platform-v41-final-has-been-released/post.md @@ -0,0 +1,49 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.1 versions have been released today. + +## What's New With 4.1? + +Since all the new features are already explained in details with the [4.1 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.1-RC-Has-Been-Released), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.1-RC-Has-Been-Released) for all the features and enhancements. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 4.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 +``` + +Run this command in the root folder of your solution. + +## ABP Community + +We started to get more contributions by the community for the [ABP Community](https://community.abp.io/) contents. Thank you all! + +We will be adding **Video Content** sharing system in a short time. We are planning to create short video contents, especially to explore the new features in every release. Again, we will be waiting video contributions by the community :) + +## About the Next Versions + +Planned preview date for the version **4.2 is January 14, 2021**. See the [Road Map](https://docs.abp.io/en/abp/latest/Road-Map) document and [GitHub Milestones](https://github.com/abpframework/abp/milestones) to learn what's planned for the next versions. We are trying to be clear about the coming features and the next release dates. \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/3de6a4bbfd8d8536775339fa29015efd.png b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/3de6a4bbfd8d8536775339fa29015efd.png new file mode 100644 index 0000000000..72413c382c Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/3de6a4bbfd8d8536775339fa29015efd.png differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/54bb24af515fbdc810b439fa290916ff.png b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/54bb24af515fbdc810b439fa290916ff.png new file mode 100644 index 0000000000..dae1b2e31a Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/54bb24af515fbdc810b439fa290916ff.png differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/56d7c496adc0c24c33b139fa29085a20.png b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/56d7c496adc0c24c33b139fa29085a20.png new file mode 100644 index 0000000000..3a9694b809 Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/56d7c496adc0c24c33b139fa29085a20.png differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/7269e47595a878d6cea339fa2900c1a0.png b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/7269e47595a878d6cea339fa2900c1a0.png new file mode 100644 index 0000000000..20d5065b20 Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/7269e47595a878d6cea339fa2900c1a0.png differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/8b2ab5592ffa4477392339fa29011429.png b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/8b2ab5592ffa4477392339fa29011429.png new file mode 100644 index 0000000000..f9e3a4f861 Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/8b2ab5592ffa4477392339fa29011429.png differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/acbeb3307fc192f57ad839fa29013656.jpg b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/acbeb3307fc192f57ad839fa29013656.jpg new file mode 100644 index 0000000000..b5784519bd Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/acbeb3307fc192f57ad839fa29013656.jpg differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/cebf90df69ed4e35791f39fa2900e3fe.png b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/cebf90df69ed4e35791f39fa2900e3fe.png new file mode 100644 index 0000000000..583bebb4d1 Binary files /dev/null and b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/cebf90df69ed4e35791f39fa2900e3fe.png differ diff --git a/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/post.md b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/post.md new file mode 100644 index 0000000000..0f961483aa --- /dev/null +++ b/docs/en/Community-Articles/2021-01-18-abpio-platform-v42-rc-has-been-released/post.md @@ -0,0 +1,249 @@ +Today, we have released the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) 4.2.0 RC (Release Candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [4.2.0 final](https://github.com/abpframework/abp/milestone/48) version is January 28, 2021**. + +## Get Started with the 4.2 RC + +If you want to try the version `4.2.0` today, follow the steps below; + +1) **Upgrade** the ABP CLI to the version `4.2.0-rc.2` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 4.2.0-rc.2 +```` + +**or install** if you haven't installed before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 4.2.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/latest/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**. + +## Migration Guide + +Check [the migration guide](https://docs.abp.io/en/abp/4.2/Migration-Guides/Abp-4_2) for the applications with the version 4.x upgrading to the version 4.2. + +## What's new with the ABP Framework 4.2 + +![104887532-78a79f00-597c-11eb-956a-2e9b77851f23.png](56d7c496adc0c24c33b139fa29085a20.png) + +## IRepository.GetQueryableAsync() + +> **This version comes with an important change about using `IQueryable` features over the [repositories](https://docs.abp.io/en/abp/4.2/Repositories). It is suggested to read this section carefully and apply in your applications.** + +`IRepository` interface inherits `IQueryable`, so you can directly use the standard LINQ extension methods, like `Where`, `OrderBy`, `First`, `Sum`... etc. + +**Example: Using LINQ directly over the repository object** + +````csharp +public class BookAppService : ApplicationService, IBookAppService +{ + private readonly IRepository _bookRepository; + + public BookAppService(IRepository bookRepository) + { + _bookRepository = bookRepository; + } + + public async Task DoItInOldWayAsync() + { + //Apply any standard LINQ extension method + var query = _bookRepository + .Where(x => x.Price > 10) + .OrderBy(x => x.Name); + + //Execute the query asynchronously + var books = await AsyncExecuter.ToListAsync(query); + } +} +```` + +*See [the documentation](https://docs.abp.io/en/abp/4.2/Repositories#iqueryable-async-operations) if you wonder what is the `AsyncExecuter`.* + +Beginning from the version 4.2, the recommended way is using `IRepository.GetQueryableAsync()` to obtain an `IQueryable`, then use the LINQ extension methods over it. + +**Example: Using the new GetQueryableAsync method** + +````csharp +public async Task DoItInNewWayAsync() +{ + //Use GetQueryableAsync to obtain the IQueryable first + var queryable = await _bookRepository.GetQueryableAsync(); + + //Then apply any standard LINQ extension method + var query = queryable + .Where(x => x.Price > 10) + .OrderBy(x => x.Name); + + //Finally, execute the query asynchronously + var books = await AsyncExecuter.ToListAsync(query); +} +```` + +ABP may start a database transaction when you get an `IQueryable` (If current [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work) is transactional). In this new way, it is possible to **start the database transaction in an asynchronous way**. Previously, we could not get the advantage of asynchronous while starting the transactions. + +> **The new way has a significant performance and scalability gain. The old usage (directly using LINQ over the repositories) will be removed in the next major version.** You have a lot of time for the change, but we recommend to immediately take the action since the old usage has a big scalability problem. + +See [the migration guide](https://docs.abp.io/en/abp/4.2/Migration-Guides/Abp-4_2) for the actions you may need to take while upgrading your applications. + +#### About IRepository Async Extension Methods + +Using IRepository Async Extension Methods has no such a problem. The examples below are pretty fine: + +````csharp +var countAll = await _personRepository + .CountAsync(); + +var count = await _personRepository + .CountAsync(x => x.Name.StartsWith("A")); + +var book1984 = await _bookRepository + .FirstOrDefaultAsync(x => x.Name == "John"); +```` + +See the [repository documentation](https://docs.abp.io/en/abp/4.2/Repositories#iqueryable-async-operations) to understand the relation between `IQueryable` and asynchronous operations. + +### Repository Bulk Operations + +This version adds the following methods to the repositories: + +* `InsertManyAsync` +* `UpdateManyAsync` +* `DeleteManyAsync` + +The purpose of these methods to insert, update or delete many entities in one call with a better performance. + +Currently, **MongoDB** provider implements these methods as a single bulk operation since MongoDB API natively supports. But current **Entity Framework Core** implementation is not a real bulk operation. Instead, it does its best with the native API of the EF Core. If you want to implement in a more performant way, you can [customize the bulk operations](https://docs.abp.io/en/abp/4.2/Entity-Framework-Core#customize-bulk-operations) with your own implementation or by using a library. We could find a good open source library for EF Core 5.0 to implement it. + +### Selecting DBMS on Template Creation + +[ABP CLI](https://docs.abp.io/en/abp/4.2/CLI#new) now has an option to specify the DBMS when you use EF Core as the database provider. + +**Example: Select MySQL as the DBMS** + +````bash +abp new BookStore -dbms mysql --preview +```` + +Available options: `SqlServer` (default), `MySQL`, `SQLite`, `Oracle-Devart`, `PostgreSQL`. See the [documentation](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Other-DBMS) to use any other DBMS or switch the DBMS later. + +One change related to this feature is that: Now, the startup template doesn't come with an **initial migration** file. This is because the database migrations are different based on your DBMS preference and should be re-created. However, when you first run the `.DbMigrator` application, it will create the initial migration and create the database just like before. + +> See The Initial Migration section in the [Getting Started](https://docs.abp.io/en/abp/4.2/Getting-Started-Running-Solution?DB=EF#database-migrations) document if you have problems on running the `.DbMigrator` application first time. + +### Swagger UI Login / Authorization + +Testing the swagger UI was requiring some additional work, especially your authentication server is separated from the application that hosts the Swagger UI. + +With the version 4.2, the startup templates come with the authorization pre-configured for you. An Authorize button is available when you open the Swagger UI: + +![swagger-authorize.png](7269e47595a878d6cea339fa2900c1a0.png) + +When you click, it opens a modal to authorize: + +![swagger-authorize-modal.png](cebf90df69ed4e35791f39fa2900e3fe.png) + +When you click to the Authorize button here, you are redirected to the login page to login with your username and password (default username is `admin` and password is `1q2w3E*`). + +> Remember to select the Scopes (typically **select all**) you want to use before clicking to the Authorize button. + +### Angular Unit Testing + +We've improved the modules and the startup template to setup and write unit tests easier with the Angular UI. See the [Angular Unit Testing document](https://docs.abp.io/en/abp/4.2/UI/Angular/Testing) for details. + +### Other News + +* Improved HTTP **request-response performance** by resolving dependencies in a deferred way in the action/page filters, interceptors and some other services. +* Removed `MultipleActiveResultSets` from connection strings for new templates for SQL Server, since the new EF Core gives a warning when using it. If you want to use it, you need to change the connection string yourself. +* Added `HardDeleteAsync` extension method that takes a predicate to delete multiple entities. This extension method is available if the entity [Soft Delete](https://docs.abp.io/en/abp/latest/Data-Filtering). +* Implemented the [Page Alerts](https://docs.abp.io/en/abp/4.2/UI/Angular/Page-Alerts) for the **Angular UI**. +* Implemented [Page Progress](https://docs.abp.io/en/abp/4.2/UI/Blazor/Page-Progress) for the **Blazor UI**. It automatically shows an undetermined progress bar on top of the page while performing an AJAX request. It also proves an API to you if you need to show/hide the progress bar in your code. + +## What's new with the ABP Commercial 4.2 + +![104887528-780f0880-597c-11eb-8da4-cf008bd37c66.png](54bb24af515fbdc810b439fa290916ff.png) + +### Microservice Startup Template + +The new [Microservice Startup Template](https://docs.abp.io/en/commercial/4.2/startup-templates/microservice/index) is a generic solution to start a new microservice solution. + +While we accept that every microservice solution will be different and every system has its own design requirements and trade-offs, we believe such a startup solution is a very useful starting point for most of the solutions, and a useful example for others. + +![microservice-template-diagram.png](8b2ab5592ffa4477392339fa29011429.png) + +*Figure: A simplified overall diagram of the microservice solution.* + +You can [follow the documentation](https://docs.abp.io/en/commercial/4.2/startup-templates/microservice/index) to get started with this startup template. **This template should be considered as an early release**. We will improve it and write a lot of guides. + +If you want to use the ABP Suite to create your solution, then you need to first upgrade it: + +````bash +abp suite update --preview +```` + +If you want, you can directly create a new solution from the command line: + +````bash +abp new Volosoft.MyMicroserviceSystem -t microservice-pro --preview +```` + +Company Name is optional. Solution name could be *MyMicroserviceSystem* for this example. + +### Public Website in the Startup Templates + +As mentioned in the previous release post, we've added a *Public Website* application to the startup templates. It is configured to authenticate through the IdentityServer with a single sign-on system. + +You can use this application to create a landing page for your actual application or a corporate website for your business. An example screenshot: + +![public-website.jpg](acbeb3307fc192f57ad839fa29013656.jpg) + +It uses the same *Lepton Theme*, so you can apply [all the styles](https://commercial.abp.io/themes). The Public Website has a different layout and also has a different setting for the styling (that can be configured in the *Settings / Lepton Theme* page of the main web application). + +> *Public Website* is optional and you need to select the "Public Website" option while creating a new solution using the ABP Suite, or use the `--with-public-website` option while using the `abp new` CLI command. + +### Easy CRM Blazor UI + +[Easy CRM](https://docs.abp.io/en/commercial/latest/samples/easy-crm) is an example application built with the ABP Commercial. MVC (Razor Pages) and Angular UI implementations were already provided. With the version 4.2, we are providing the Blazor UI implementation for this application. + +![easy-crm.png](3de6a4bbfd8d8536775339fa29015efd.png) + +### Other News + +* Implemented Iyzico as a payment gateway provider for the [payment module](https://commercial.abp.io/modules/Volo.Payment) in addition to Paypal, Stripe, 2Checkout and Payu providers. +* ABP Suite supports the new microservice template creation, public website and DBMS selection options. +* Swagger authorization and other features mentioned in the ABP Framework section are already implemented for the ABP Commercial too. + +## ABP Community News + +### Sharing Video Contents + +[community.abp.io](https://community.abp.io/) is a place to share ABP related contents. It started with publishing articles. Now, it supports to publish video contents. [See this example](https://community.abp.io/articles/be-a-superhero-on-day-1-with-abp.io-wvifcy9s). All you need to do is to create a video and upload to YouTube. Then you can [submit](https://community.abp.io/articles/submit) the YouTube link to the ABP Community website. + +### Multi-language support + +We planned ABP Community to publish English-only contents. However, we see that people want to share contents in other languages too. Now, **it is possible to submit a content in any language**. Just select the Language option while submitting your content. + +**When you submit a non-English content, it is not visible to all the visitors by default**. Visitors can see a non-English content only if their browser language or the selected language matches to the content language (there is a language selection at the end of the website). + +### External Contents + +If you want to publish your content anywhere else, but want to post a link of your content, you can select *External Content* option while submitting the post. For example, [this article](https://community.abp.io/articles/aspnet-boilerplate-to-abp-framework-xml-to-json-localization-conversion-0mxyjrzj) is an external article and also written in Chinese language. + +## About the Next Release + +The next feature version will be 4.3.0. It is planned to release the 4.3 RC (Release Candidate) on March 11 and the final version on March 25, 2021. + +We decided to slow down the feature development for the [next milestone](https://github.com/abpframework/abp/milestone/49). We will continue to improve the existing features and introduce new ones, sure, but wanted to have more time for the planning, documentation, creating guides and improving the development experience. + +## Feedback + +Please check out the ABP Framework 4.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 [4.2.0 final](https://github.com/abpframework/abp/milestone/48) version is January 28, 2021**. \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-01-29-abpio-platform-42-final-has-been-released/post.md b/docs/en/Community-Articles/2021-01-29-abpio-platform-42-final-has-been-released/post.md new file mode 100644 index 0000000000..ce75c2b453 --- /dev/null +++ b/docs/en/Community-Articles/2021-01-29-abpio-platform-42-final-has-been-released/post.md @@ -0,0 +1,51 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.2 versions have been released today. + +## What's New With 4.2? + +Since all the new features are already explained in details with the [4.2 RC Announcement Post](https://blog.abp.io/abp/ABP-IO-Platform-v4-2-RC-Has-Been-Released), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP-IO-Platform-v4-2-RC-Has-Been-Released) for all the features and enhancements. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 4.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 +``` + +Run this command in the root folder of your solution. + +## Migration Guide + +Check [the migration guide](https://docs.abp.io/en/abp/latest/Migration-Guides/Abp-4_2) for the applications with the version 4.x upgrading to the version 4.2. + +> It is strongly recommended to check the migration guide for this version. Especially, the new `IRepository.GetQueryableAsync()` method is a core change should be considered after upgrading the solution. + +## About the Next Version + +The next feature version will be 4.3. It is planned to release the 4.3 RC (Release Candidate) on March 11 and the final version on March 25, 2021. + +We decided to slow down the feature development for the [next milestone](https://github.com/abpframework/abp/milestone/49). We will continue to improve the existing features and introduce new ones, sure, but wanted to have more time for the planning, documentation, creating guides and improving the development experience. \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/650b59e4f21de768c47039fb9f7b5658.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/650b59e4f21de768c47039fb9f7b5658.png new file mode 100644 index 0000000000..ab8a21eb34 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/650b59e4f21de768c47039fb9f7b5658.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/6e2a6211140d5e181b7839fb9f7af1f2.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/6e2a6211140d5e181b7839fb9f7af1f2.png new file mode 100644 index 0000000000..034782e3f9 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/6e2a6211140d5e181b7839fb9f7af1f2.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/704de57f75e01c54da7e39fb9f7a1a9d.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/704de57f75e01c54da7e39fb9f7a1a9d.png new file mode 100644 index 0000000000..96081e817d Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/704de57f75e01c54da7e39fb9f7a1a9d.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/878e889ad7aaa6c6644939fb9f7aad50.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/878e889ad7aaa6c6644939fb9f7aad50.png new file mode 100644 index 0000000000..79d8e3d321 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/878e889ad7aaa6c6644939fb9f7aad50.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/8ebd9aac852b5784ac5a39fb9f7d8545.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/8ebd9aac852b5784ac5a39fb9f7d8545.png new file mode 100644 index 0000000000..4d5d22e1e9 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/8ebd9aac852b5784ac5a39fb9f7d8545.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/a40402b854fdd27d446539fb9f7bbc1d.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/a40402b854fdd27d446539fb9f7bbc1d.png new file mode 100644 index 0000000000..c6e1679151 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/a40402b854fdd27d446539fb9f7bbc1d.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/cab3b63d4fad58a3b8c039fb9f7c4961.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/cab3b63d4fad58a3b8c039fb9f7c4961.png new file mode 100644 index 0000000000..f6077bb4cc Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/cab3b63d4fad58a3b8c039fb9f7c4961.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/e5d9e0f63668c8d8734e39fb9f7a5d44.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/e5d9e0f63668c8d8734e39fb9f7a5d44.png new file mode 100644 index 0000000000..a94cde1266 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/e5d9e0f63668c8d8734e39fb9f7a5d44.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/f4984a23c9f2a6f5919639fb9f7c06a1.png b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/f4984a23c9f2a6f5919639fb9f7c06a1.png new file mode 100644 index 0000000000..0547e418a9 Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/f4984a23c9f2a6f5919639fb9f7c06a1.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/post.md b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/post.md new file mode 100644 index 0000000000..537f8c1f95 --- /dev/null +++ b/docs/en/Community-Articles/2021-04-01-abp-commercial-43-rc-has-been-published/post.md @@ -0,0 +1,137 @@ +ABP Commercial version 4.3 RC (Release Candidate) has been published alongside [ABP Framework 4.3. RC](https://blog.abp.io/abp/ABP-Framework-4.3-RC-Has-Been-Published). I will introduce the new features in this blog post. Here, a list of highlights for this release; + +* The **microservice starter template** is getting more mature. We've also added a **service template** to add new microservices to the solution. +* New option for the application starter template to have a **separate database schema for tenant databases**. +* New **Forms** module to create surveys +* **Enable/disable modules** per edition/tenant. +* **Lepton theme** and **Account module**'s source codes are available with the Team License. + +Here, some other features already covered in the ABP Framework announcement, but worth mentioning here since they are also implemented for the ABP Commercial; + +* **Blazor UI server-side** support +* **Email setting** management UI +* **Module extensibility** system is now available for the **Blazor UI** too. + +> This post doesn't cover the features and changes done on the ABP Framework side. Please also see the **[ABP Framework 4.3. RC blog post](https://blog.abp.io/abp/ABP-Framework-4.3-RC-Has-Been-Published)**. + +## The Migration Guide + +**This upgrade requires some manual work documented in [the migration guide](https://docs.abp.io/en/commercial/4.3/migration-guides/v4_3).** Please read the guide carefully. Even if your application doesn't break on upgrade, you should apply the changes to avoid future release problems. + +## Known Issues + +If you upgrade the ABP CLI to 4.3.0-rc.1 and try to create a new solution using the stable (4.2.x) version, it won't compile because of some missing packages. Use ABP CLI to create solutions with `--preview` option and downgrade to 4.2.2 to create 4.2.2 solutions. This will be fixed in 4.3.0-rc.2. + +## What's New With The ABP Commercial 4.3 + +### The Microservice Starter Template + +We'd introduced an initial version of the [microservice starter template](https://docs.abp.io/en/commercial/4.3/startup-templates/microservice/index) in the [previous version](https://blog.abp.io/abp/ABP-IO-Platform-v4-2-RC-Has-Been-Released). It is getting more mature with this release. We've made a lot of improvements and changes, including; + +* New **"service" template** to add new microservices for the solution. It still requires some manual work to integrate to other services and gateways; however, it makes progress very easy and straightforward. +* Added [Tye](https://github.com/dotnet/tye) configuration to develop and test the solution easier. +* Added [Prometheus](https://prometheus.io/), [Grafana](https://grafana.com/) integrations for monitoring the solution. +* **Automatic database migrations**. Every microservice automatically checks and migrates/seeds its database on startup (concurrency issues are resolved for multiple instances). For multi-tenant systems, tenant databases are also upgraded by the queue. +* For multi-tenant systems, **databases are being created on the fly** for new tenants with separate connection strings. +* Created **separate solution (`.sln`) file** for each microservice, gateway, and application. In this way, you can focus on what you are working on. The main (roof) solution file only includes the executable projects in these solutions. +* All microservices are converted to the standard **layered module structure**, making it easier to align with ABP application development practices. + +After this release, **we will be preparing microservice development guides** based on this startup solution. + +### Separate Tenant Schema + +ABP's multi-tenancy system allows to the creation of dedicated databases for tenants. However, the application startup solution comes with a single database migration path; hence it has a single database schema. As a result, tenant databases have some host-related tables. These tables are not used for tenants, and they are always empty. However, their existence may disturb us as a clean developer. + +With this release, the application startup template provides an option to address this problem. So, if you want, you can have a separate migration path for tenant databases. Of course, this has a cost; You will have two DbContexts for migration purposes, bringing additional complexity to your solution. We've done our best to reduce this complexity and added a README file into the migration assembly. If you prefer this approach, please check that README file. + +You can specify the new `--separate-tenant-schema` parameter while you are creating a new solution using the [ABP CLI](https://docs.abp.io/en/abp/4.3/CLI): + +````bash +abp new Acme.BookStore --separate-tenant-schema +```` + +If you prefer the [ABP Suite](https://docs.abp.io/en/commercial/latest/abp-suite/create-solution) to create solutions, you can check the *Separated tenant schema* option. + +![abp-suite-separate-tenant-schema.png](8ebd9aac852b5784ac5a39fb9f7d8545.png) + +### Creating Tenant Databases On The Fly + +With this release, the separate tenant database feature becomes more mature. When you create a new tenant with specifying a connection string, the **new database is automatically created** with all the tables and the initial seed data if available. So, tenants can immediately start to use the new database. With this change, tenant connection string textboxes come in the tenant creation modal: + +![new-tenant-modal.png](704de57f75e01c54da7e39fb9f7a1a9d.png) + +Besides, we've added an "**Apply database migrations**" action to the tenant management UI to manually trigger the database creation & migration in case you have a problem with automatic migration: + +![tenant-db-migrate.png](e5d9e0f63668c8d8734e39fb9f7a5d44.png) + +Automatic migration only tries one time. If it fails, it writes the exception log and discards this request. For example, this can happen if the connection string is wrong or the database server is not available. In this case, you can manually retry with this action. + +> Note that this feature requires to **make changes in your solution**, if you upgrade from an older version. Because the tenant database creation and migration code are located in the application startup template. See the [version 4.3 migration guide](https://docs.abp.io/en/commercial/4.3/migration-guides/v4_3) for details. + +### New Module: CMS Kit + +CMS Kit module initial version has been released with this version. As stated in the [ABP Framework 4.3 announcement post](https://blog.abp.io/abp/ABP-Framework-4.3-RC-Has-Been-Published), it should be considered premature for now. + +For ABP Commercial application startup template, we are providing an option to include the CMS Kit into the solution while creating new solutions: + +![cms-kit-selection.png](878e889ad7aaa6c6644939fb9f7aad50.png) + +It is available only if you select the *Public web site* option. Once you include CMS Kit, a *Cms* item is shown on the menu: + +![cms-kit-menu.png](6e2a6211140d5e181b7839fb9f7af1f2.png) + +Each CMS Kit feature can be individually enabled/disabled, using the global feature system. Once you disable a feature, it becomes completely invisible; even the related tables are not included in your database. + +CMS Kit features are separated into two categories: Open source (free) features and pro (commercial) features. For now, only newsletter and contact form features are commercial. By the time, we will add more free and commercial features. + +> We will create a separate blog post for the CMS Kit module, so I keep it short. + +### New Module: Forms + +*Forms* is a new module that is being introduced with this version. It looks like the Google Forms application; You dynamically create forms on the UI and send them to people to answer. Then you can get statistics/report and export answers to a CSV file. + +Forms module currently supports the following question types; + +* **Free text** +* Selecting a **single option** from a **dropdown** list or a **radio button** list +* **Multiple choice**: Selecting multiple options from a checkbox list + +**Screenshot: editing form and questions - view responses** + +![forms-edit-report.png](650b59e4f21de768c47039fb9f7b5658.png) + +**Screenshot: answering to the form** + +![forms-answer.png](a40402b854fdd27d446539fb9f7bbc1d.png) + +### Team License Source Code for Modules + +Team License users can't access the source code of modules and themes as a license restriction. You have to buy a Business or Enterprise license to download any module/theme's full source code. However, we got a lot of feedback from the Team License owners on the source code of the account module and the lepton theme. We see that customization of these two modules is highly necessary for most of our customers. + +With this version, we decided to allow Team License holders to download the source code of the **Account Module** and the **Lepton Theme** to freely customize them based on their requirements. + +You can **Replace these modules with their source code** using the ABP Suite: + +![account-lepton-source.png](f4984a23c9f2a6f5919639fb9f7c06a1.png) + +Remember that; when you include the source code in your solution, it is your responsibility to upgrade them when we release new versions (while you don't have to upgrade them). + +### Lepton Theme Public Website Layout + +We'd added a public website application in the application starter template in the previous versions. It was using the public website layout of the Lepton Theme. We realized that the layout of this application is customized or completely changed in most of the solutions. So, with this version, the layout is included inside the application in the downloaded solution. You can freely change it. Before, you had to download it separately and include it in your solution manually. + +### Enable/Disable Modules + +With this release, all modules can be enabled/disabled per edition/tenant. You can allow/disallow modules when you click *Features* action for an edition or tenant: + +![enable-disable-features.png](cab3b63d4fad58a3b8c039fb9f7c4961.png) + +### Other Features/Changes + +* ABP Suite now supports defining *required* navigation properties on code generation. +* **Blazor server-side** (with tiered option) is added for the application and microservice starter templates. +* An **"Email"** tab has been added to the Settings page to configure the email settings. + +## Feedback + +Please check out the ABP Commercial 4.3 RC to help us to release a more stable version. **The planned release date for the 4.3.0 final version is April 21, 2021**. \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-04-01-abp-framework-43-rc-has-been-published/2dbd008296ba5b04d66c39fb9f7330e2.png b/docs/en/Community-Articles/2021-04-01-abp-framework-43-rc-has-been-published/2dbd008296ba5b04d66c39fb9f7330e2.png new file mode 100644 index 0000000000..4e5d2677ca Binary files /dev/null and b/docs/en/Community-Articles/2021-04-01-abp-framework-43-rc-has-been-published/2dbd008296ba5b04d66c39fb9f7330e2.png differ diff --git a/docs/en/Community-Articles/2021-04-01-abp-framework-43-rc-has-been-published/post.md b/docs/en/Community-Articles/2021-04-01-abp-framework-43-rc-has-been-published/post.md new file mode 100644 index 0000000000..f5661e0549 --- /dev/null +++ b/docs/en/Community-Articles/2021-04-01-abp-framework-43-rc-has-been-published/post.md @@ -0,0 +1,193 @@ +> Notice that the **version 4.3.0 stable has already been released**. We've updated the version usages in this post. + +We are super excited to announce the ABP Framework 4.3 RC (Release Candidate). Here, a list of highlights of this release; + +* **CMS Kit** module initial release. +* **Blazor UI server-side** support. +* **Module extensibility** system for the Blazor UI. +* Angular UI **resource owner password** flow comes back. +* **Volo.Abp.EntityFrameworkCore.Oracle** package is now compatible with .NET 5. +* CLI support to easily add the **Basic Theme** into the solution. +* New **IInitLogger** service to write logs before dependency injection phase completed. + +Besides the new features above, we've done many performance improvements, enhancements and bug fixes on the current features. See the [4.3 milestone](https://github.com/abpframework/abp/milestone/49) on GitHub for all changes made on this version. + +This version was a big development journey for us; [~160 issues](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+milestone%3A4.3-preview) resolved, [~300 PRs](https://github.com/abpframework/abp/pulls?q=is%3Aopen+is%3Apr+milestone%3A4.3-preview) merged and **~1,700 commits** done only in the [main framework repository](https://github.com/abpframework/abp). **Thanks to the ABP Framework team and all the contributors.** + +> ABP Commercial 4.3 RC has also been published. We will write a separate blog post for it. + +## The Migration Guide + +We normally don't make breaking changes in feature versions. However, this version has some small **breaking changes** mostly related to Blazor UI WebAssembly & Server separation. **Please check the [migration guide](https://docs.abp.io/en/abp/4.3/Migration-Guides/Abp-4_3) while upgrading to version 4.3**. + +## Known Issues + +Some minor issues will be fixed in the stable release. You can see the known issues [here](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+milestone%3A4.3-final). + +## Get Started With The 4.3 + +If you want to try version 4.3 today, follow the steps below; + +1) **Upgrade** the ABP CLI to the version `4.3.0` using a command-line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 4.3.0 +```` + +**or install** if you haven't installed before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 4.3.0 +```` + +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/4.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**. + +### Quick Start Tutorial + +If you are new to ABP Framework, we've prepared a [new quick start tutorial](https://docs.abp.io/en/abp/4.3/Tutorials/Todo/Index) that can be pretty helpful to warm up to the ABP Framework. + +## What's New With The ABP Framework 4.3 + +### CMS Kit + +CMS (Content Management System) Kit was a module we worked on for the last couple of months. It is usable now, and we are releasing the initial version with this release. We are considering this module as pre-mature. It will be improved in the next versions. The goal to provide a flexible and extensible CMS infrastructure to .NET community. It currently has the following features; + +* **Pages**: Used to create UI pages with a Markdown + WYSIWYG editor. Once you create a page, it becomes available via URL like `/pages/my-page-url`. +* **Blog**: A built-in blog system that supports multiple blogs with blog posts. +* **Comments**: Allows users to write comments under contents. It is used for blog posts. +* **Tags**: To add tag feature to any content/entity. It is used for blog posts. +* **Reactions**: Allows users to react to content via emojis, like a smile, upvote, downvote, etc. +* **Rating**: This component is used to rate content by users. + +All features are separately usable. For example, you can create an image gallery and reuse the Comments and Tags features for the images. You can enable/disable features individually using the [Global Features System](https://docs.abp.io/en/abp/4.3/global-features). + +> We will create a separate blog post for the CMS Kit module, so I keep it short. + +### Blazor Server Side + +We'd implemented Blazor WebAssembly before. With version 4.3, we have the Blazor Server-Side option too. All the current functionalities are available to the Blazor Server. + +You can select Blazor Server as the UI type while creating a new solution. + +**Example:** + +````bash +abp new Acme.BookStore -u blazor-server +```` + +If you write `blazor` as the UI type, it will create Blazor WebAssembly just as before. + +> You can also select the Blazor Server on the [get started](https://abp.io/get-started) page. + +Blazor Server applications are mixed applications; You can mix the server-side MVC / Razor Pages with the Blazor SPA. This brings an interesting opportunity: MVC / Razor Pages modules can work seamlessly in the Blazor Server applications. For example, the CMS Kit module has no Blazor UI yet, but you can use its MVC UI inside your Blazor Server application. + +> Blazor Server UI has a `--tiered` option just [like](https://docs.abp.io/en/abp/latest/Startup-Templates/Application#tiered-structure) the MVC / Razor Pages UI. This can be used to separate the HTTP API server from the UI server (UI application doesn't directly connect to the database). + +### Blazor UI Module Extensibility + +Module Entity Extensions and some other extensibility features was not supported by the Blazor UI. With this version, we've implemented that system for Blazor UI. + +For anyone wondering what the module entity extensions is, please check [the document](https://docs.abp.io/en/abp/4.3/Module-Entity-Extensions) or [this community video](https://community.abp.io/articles/overview-of-abp-framework-4.1-module-extensions-part-1-n04f7bhf). + +### Email Setting Management UI + +With this release, a new item is added to the main menu to navigate to the setting management page. This page contains the email setting management UI, as shown below: + +![email-settings-page.png](2dbd008296ba5b04d66c39fb9f7330e2.png) + +The setting page is provided by the [setting management module](https://docs.abp.io/en/abp/4.3/Modules/Setting-Management), and it is extensible; You can add your tabs to this page for your application settings. + +### Angular UI Resource Owner Password Flow + +The login page was removed from the Angular UI in previous versions because Authorization Code flow is the recommended approach for SPAs. However, it requires redirecting the user to the authentication server, logging there, and returning to the application. We got a lot of feedback because this brings overhead for simple applications. + +With version 4.3, Angular UI can use its login page with resource owner password flow. Please refer to [the documentation](https://github.com/abpframework/abp/blob/dev/docs/en/UI/Angular/Account-Module.md) to learn how to make it work. + +### Volo.Abp.EntityFrameworkCore.Oracle Package + +We couldn't update the [Oracle.EntityFrameworkCore](https://www.nuget.org/packages/Oracle.EntityFrameworkCore/) package on .NET 5.0 upgrade since it was not supporting .NET 5.0 at that time. Now, it supports .NET 5.0 and we've upgraded the package. + +See [the documentation](https://docs.abp.io/en/abp/4.3/Entity-Framework-Core-Oracle-Official) to learn how to switch to this package for the Oracle database. + +### Add Basic Theme Into Your Solution + +ABP Framework provides a strong theming system. However, the default theme, named the Basic Theme, has a non-styled, base Bootstrap UI. It is expected that you override the styles and UI components of that theme in a serious application. + +There are some articles (see for [mvc](https://community.abp.io/articles/creating-a-new-ui-theme-by-copying-the-basic-theme-for-mvc-ui-yt9b18io) & [blazor](https://community.abp.io/articles/creating-a-new-ui-theme-by-copying-the-basic-theme-for-blazor-ui-qaf5ho1b)) to explain how to include the Basic Theme's source code into your solution to modify it fully. However, it still requires some manual work. + +With this version, ABP CLI providing a command to add the Basic Theme's source code into your solution. Run the following command in a command-line terminal inside the root directory of your solution: + +**MVC UI** + +````bash +abp add-package Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic --with-source-code --add-to-solution-file +```` + +**Blazor Web Assembly UI** + +````bash +abp add-package Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme --with-source-code --add-to-solution-file +abp add-package Volo.Abp.AspNetCore.Components.Web.BasicTheme --with-source-code --add-to-solution-file +```` + +**Blazor Server UI** + +````bash +abp add-package Volo.Abp.AspNetCore.Components.Server.BasicTheme --with-source-code --add-to-solution-file +abp add-package Volo.Abp.AspNetCore.Components.Web.BasicTheme --with-source-code --add-to-solution-file +```` + +As you see, Blazor UI developers should add two packages. The Basic Theme consists of two packages for the Blazor UI: one for wasm/server and one shared. + +**Angular UI** + +Execute the following command in a terminal inside the `angular` folder of your solution: + +````bash +abp add-package @abp/ng.theme.basic --with-source-code +```` + +### IInitLogger + +In ASP.NET Core, logging is not possible before the dependency injection phase is completed. For example, you can't write log in `ConfigureServices` method. However, we sometimes need to write logs in this stage. + +We are introducing the `IInitLogger` service, which allows writing logs inside the `ConfigureServices` method. + +**Example:** + +````csharp +public class MyModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + var logger = context.Services.GetInitLogger(); + logger.LogInformation("Some log..."); + } +} +```` + +Logs are written once the service registration phase is completed. It stores the written logs in memory and then writes logs to the actual `ILogger` when ready. + +> Notice: Startup templates come with [Serilog](https://serilog.net/) pre-installed. So, you can write logs everywhere by directly using its static API (ex: `Log.Information("...");`). The `InitLogger` is a way to write pre-initialization logs without depending on a particular logging library. So, it makes it very handy to write logs inside reusable modules. + +### Other Features/Changes + +* [#7423](https://github.com/abpframework/abp/issues/7423) MongoDB repository base aggregation API. +* [#8163](https://github.com/abpframework/abp/issues/8163) Ignoring given files on minification for MVC UI. +* [#7799](https://github.com/abpframework/abp/pull/7799) Added `RequiredPermissionName` to `ApplicationMenuItem` for MVC & Blazor UI to easily show/hide menu items based on user permissions. Also added `RequiredPermissionName` to `ToolbarItem` for the MVC UI for the same purpose. +* [#7523](https://github.com/abpframework/abp/pull/7523) Add more bundle methods to the distributed cache. +* [#8013](https://github.com/abpframework/abp/pull/8013) Handle `JsonProperty` attribute on Angular proxy generation. + +See the [4.3 milestone](https://github.com/abpframework/abp/milestone/49) on GitHub for all changes made on this version. + +## Feedback + +Please check out the ABP Framework 4.3 RC and [provide feedback](https://github.com/abpframework/abp/issues/new) to help us release a more stable version. **The planned release date for the [4.3.0 final](https://github.com/abpframework/abp/milestone/50) version is April 21, 2021**. \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-04-24-abpio-platform-v43-has-been-released/post.md b/docs/en/Community-Articles/2021-04-24-abpio-platform-v43-has-been-released/post.md new file mode 100644 index 0000000000..b4026d1886 --- /dev/null +++ b/docs/en/Community-Articles/2021-04-24-abpio-platform-v43-has-been-released/post.md @@ -0,0 +1,51 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.3 versions have been released today. + +## What's New With 4.3? + +Since all the new features are already explained in details with the 4.3 RC announcement posts, I will not repeat all the details again. See the related blog posts for all the features and enhancements; + +* [What's New with the ABP Framework 4.3](https://blog.abp.io/abp/ABP-Framework-4.3-RC-Has-Been-Published) +* [What's new with the ABP Commercial 4.3](https://blog.abp.io/abp/ABP-Commercial-4.3-RC-Has-Been-Published) + +## The Quick Start Tutorial + +With this version, we've created a minimalist [quick start tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Todo/Index) for developers who are new to the ABP Framework. + +## 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. + +## Migration Guides + +**Check the migration guides ([for ABP Framework](https://docs.abp.io/en/abp/latest/Migration-Guides/Abp-4_3) & for [ABP Commercial](https://docs.abp.io/en/commercial/latest/migration-guides/v4_3)) for the applications with the version 4.2.x upgrading to the version 4.3.0.** + +## The Road Map + +The next feature version will be 4.4. It is planned to release the 4.4 RC (Release Candidate) at the end of Quarter 2, 2021. See the updated road maps; + +* [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) \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-06-15-introducing-the-cms-kit-module/e6d2e4c928d8df2a122939fd21095dc7.png b/docs/en/Community-Articles/2021-06-15-introducing-the-cms-kit-module/e6d2e4c928d8df2a122939fd21095dc7.png new file mode 100644 index 0000000000..24b97e46c6 Binary files /dev/null and b/docs/en/Community-Articles/2021-06-15-introducing-the-cms-kit-module/e6d2e4c928d8df2a122939fd21095dc7.png differ diff --git a/docs/en/Community-Articles/2021-06-15-introducing-the-cms-kit-module/post.md b/docs/en/Community-Articles/2021-06-15-introducing-the-cms-kit-module/post.md new file mode 100644 index 0000000000..257aad056a --- /dev/null +++ b/docs/en/Community-Articles/2021-06-15-introducing-the-cms-kit-module/post.md @@ -0,0 +1,76 @@ +One of the most exciting announcements of the ABP Framework 4.3 release was the initial version of the CMS Kit module. The team had been working hard to release the initial version for months. + +For those who didn't read the [ABP Framework 4.3 release post](https://blog.abp.io/abp/ABP-Framework-4.3-RC-Has-Been-Published), the CMS Kit module adds CMS (Content Management System) capabilities to your application. Some of the CMS Kit features are [open source](https://github.com/abpframework/abp/tree/dev/modules/cms-kit) and free, while others are only available with the [ABP Commercial](https://commercial.abp.io/modules/Volo.CmsKit.Pro). Here, a list of CMS Kit features with the initial version: + +* [**Page**](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Pages) management system to manage dynamic pages with dynamic URLs. +* [**Blogging**](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Blogging) system to create publish blog posts with multiple blog support. +* [**Tagging**](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Tags) system to tag any kind of resource, like a blog post. +* [**Comment**](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments) system to add comments feature to any kind of resource, like blog post or a product review page. +* [**Reaction**](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Reactions) system to add reactions (smileys) feature to any kind of resource, like a blog post or a comment. +* [**Rating**](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Ratings) system to add rating feature to any kind of resource. +* [**Newsletter**](https://docs.abp.io/en/commercial/latest/modules/cms-kit/newsletter) system to allow users to subscribe to newsletters (ABP Commercial only). +* [**Contact form**](https://docs.abp.io/en/commercial/latest/modules/cms-kit/contact-form) system to allow users to write message to you (ABP Commercial only). + +## Installation + +CMS Kit module comes installed with [ABP Commercial](https://commercial.abp.io/) startup templates when you create the solution with the public website option. You can run the following command and create a solution with a public website. + +```bash +abp new MyProject --with-public-website +``` + +If you're not using the ABP Commercial or adding the module to an existing solution, [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) allows adding a module to a solution using `add-module` command. + +You can run the following command (in the root folder of the solution) to add the module to an existing solution: + +```bash +abp add-module Volo.CmsKit --skip-db-migrations true +``` + +If you're using the ABP Commercial, run the following command to install the pro version of the module: + +```bash +abp add-module Volo.CmsKit.Pro --skip-db-migrations true +``` + +After adding the module to the solution, you need to configure global features provided this module. The CMS Kit module uses the [global feature](https://docs.abp.io/en/abp/latest/Global-Features) system for all features, which means you can enable or disable features individually. To enable the features in the CMS Kit module, open the `GlobalFeatureConfigurator` class in the `Domain.Shared` project and add the following code to the `Configure` method to enable all features in the CMS kit module. + + ```csharp +GlobalFeatureManager.Instance.Modules.CmsKit(cmsKit => +{ + cmsKit.EnableAll(); +}); + ``` + +If you want to enable specific features, you can change the configuration like: + +````csharp +GlobalFeatureManager.Instance.Modules.CmsKit(cmsKit => +{ + cmsKit.Tags.Enable(); + cmsKit.Comments.Enable(); +}); +```` + +If you're using the ABP Commercial, you need to enable CMS Kit Pro features as well: + +```csharp +GlobalFeatureManager.Instance.Modules.CmsKitPro(cmsKitPro => +{ + cmsKitPro.EnableAll(); +}); +``` + +> If you are using Entity Framework Core, do not forget to add a new migration and update your database after configuring the features. + +We've completed the installation step. Run the project, and you will see the CMS menu item in the main menu: + +![cms-kit-menu.png](e6d2e4c928d8df2a122939fd21095dc7.png) + +> CMS Kit's initial release only supports the MVC UI. We're planning to add Angular and Blazor support in upcoming releases. + +## More + +We've covered the initial features, installation and configuration steps in this post. You can see the [open-source](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index) and [commercial](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) documentation to get further information about features and the CMS Kit module. CMS Kit's initial version contains lots of features that you can easily integrate and use in your applications. We're planning to improve the existing features, fixing bugs and adding new features in upcoming releases. If you want to give some feedback or have a feature request, please reach out to us from [GitHub](https://github.com/abpframework/abp). We will be happy to plan the CMS Kit module's future together. + +Thank you! \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-06-17-Using-Elsa-Workflow-with-ABP-Framework/POST.md b/docs/en/Community-Articles/2021-06-17-Using-Elsa-Workflow-with-ABP-Framework/POST.md index 0ec86d40c4..2f5cde6d2d 100644 --- a/docs/en/Community-Articles/2021-06-17-Using-Elsa-Workflow-with-ABP-Framework/POST.md +++ b/docs/en/Community-Articles/2021-06-17-Using-Elsa-Workflow-with-ABP-Framework/POST.md @@ -1,11 +1,19 @@ # Using Elsa Workflow with ABP Framework +> **UPDATE:** There is a newer version of this article, which covers Elsa 3 with ABP Framework. You can check it at https://abp.io/community/articles/using-elsa-3-workflow-with-abp-framework-usqk8afg + **Elsa Core** is an open-source workflows library that can be used in any kind of .NET Core application. Using such a workflow library can be useful to implement business rules visually or programmatically. ![elsa-overview](./elsa-overview.gif) This article shows how we can use this workflow library within our ABP-based application. We will start with a couple of examples and then we will integrate the **Elsa Dashboard** (you can see it in the above gif) into our application to be able to design our workflows visually. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Source Code You can find the source of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/ElsaDemo). @@ -453,4 +461,10 @@ namespace ElsaDemo.Web.Menus * Now we can click the "Workflow" menu item, display the Elsa Dashboard and designing workflows. -![elsa-demo-result](./elsa-demo-result.gif) \ No newline at end of file +![elsa-demo-result](./elsa-demo-result.gif) + +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/78af8114d6a067fdad1739fd6de94488.gif b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/78af8114d6a067fdad1739fd6de94488.gif new file mode 100644 index 0000000000..ba589cabfc Binary files /dev/null and b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/78af8114d6a067fdad1739fd6de94488.gif differ diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/7a3cf29d2aba7b2ba2da39fd6de861a4.png b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/7a3cf29d2aba7b2ba2da39fd6de861a4.png new file mode 100644 index 0000000000..f13fb6b12d Binary files /dev/null and b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/7a3cf29d2aba7b2ba2da39fd6de861a4.png differ diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/9b4c6bd70a839fd0781839fd6de9b717.png b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/9b4c6bd70a839fd0781839fd6de9b717.png new file mode 100644 index 0000000000..a7649c1599 Binary files /dev/null and b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/9b4c6bd70a839fd0781839fd6de9b717.png differ diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/a828f0a8f5283d73020039fd6de9db2d.png b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/a828f0a8f5283d73020039fd6de9db2d.png new file mode 100644 index 0000000000..87fd79109a Binary files /dev/null and b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/a828f0a8f5283d73020039fd6de9db2d.png differ diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/efb3af37378b58e9960839fd6de992e2.png b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/efb3af37378b58e9960839fd6de992e2.png new file mode 100644 index 0000000000..747fcc1d13 Binary files /dev/null and b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/efb3af37378b58e9960839fd6de992e2.png differ diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/ff130f8587690cfec96a39fd6de8a340.png b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/ff130f8587690cfec96a39fd6de8a340.png new file mode 100644 index 0000000000..f697b8ec60 Binary files /dev/null and b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/ff130f8587690cfec96a39fd6de8a340.png differ diff --git a/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/post.md b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/post.md new file mode 100644 index 0000000000..583eefab89 --- /dev/null +++ b/docs/en/Community-Articles/2021-06-30-abp-platform-44-rc-has-been-released/post.md @@ -0,0 +1,171 @@ +Today, we have released the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) version 4.4 RC (Release Candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [4.4.0 final](https://github.com/abpframework/abp/milestone/53) version is July 27, 2021**. + +## Get Started with the 4.4 RC + +If you want to try the version 4.4.0 today, follow the steps below; + +1) **Upgrade** the ABP CLI to the version `4.4.0-rc.2` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 4.4.0-rc.2 +```` + +**or install** if you haven't installed before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 4.4.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/latest/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**. + +### Migration Notes + +There is **no breaking change** with this version. However, if you are using Entity Framework Core, you will need to run the `Add-Migration` command to add a new **database migration** since some changes done in the module database mappings. + +## What's new with the ABP Framework 4.4 + +### Removed EntityFrameworkCore.DbMigrations Project + +With this version, we are doing an important change in the application startup solution template. The startup solution was containing an `EntityFrameworkCore.DbMigrations` project that contains a separate `DbContext` class which was responsible to unify the module database mappings and maintain the code-first database migrations. With the v4.4, we've removed that project from the solution. In the new structure, the `EntityFrameworkCore` integration project will be used for database migrations as well as on runtime. + +We'd published [a community article](https://community.abp.io/articles/unifying-dbcontexts-for-ef-core-removing-the-ef-core-migrations-project-nsyhrtna) about that change. Please see the article to understand the motivation behind the change. + +Beside the `DbContext` unification, we've also used the new `ReplaceDbContext` attribute and [replaced](https://github.com/abpframework/abp/blob/ea2205f0855f52015152ae066a5c239af4b8511f/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs#L18-L19) the `IIdentityDbContext` and `ITenantManagementDbContext` interfaces to make it possible to perform join queries over repositories for these modules easily. In the next days, we will publish another community article to explain the problem and the solution. However, most of times, you don't need to know these details. + +### Dynamic Menu Management for the CMS Kit Module + +CMS Kit is a set of reusable *Content Management System* features packaged as an ABP application module. We had published the first usable version with the previous release. With this release, we are adding another feature to the CMS Kit module: You can now dynamically arrange the main menu on the UI, which is an essential feature for any kind of content management system. In this way, you can add pages or any kind of arbitrary URLs to the main menu from the UI. + +A screenshot from the menu management page (from the CMS Kit admin side): + +![image.png](7a3cf29d2aba7b2ba2da39fd6de861a4.png) + +And the items rendered in a public website: + +![image.png](ff130f8587690cfec96a39fd6de8a340.png) + +Note that this feature is also available with the open source [CMS Kit module](https://docs.abp.io/en/abp/4.4/Modules/Cms-Kit/Index) (while the screenshots have been taken from the ABP Commercial). + +### Razor Engine Support for Text Templating + +[Text Templating](https://docs.abp.io/en/abp/4.4/Text-Templating) is a system to generate content on runtime by using a model (data) and a template. It was running on the [Scriban](https://github.com/scriban/scriban) templating engine. Beginning from this version, we have a second option: We can use the familiar **razor syntax** to build and render the templates. See the text templating [razor integration document](https://docs.abp.io/en/abp/4.4/Text-Templating-Razor) to get started with the new engine! + +### New Customization Points for DbContext/Entities + +Two new extension methods are added to `ObjectExtensionManager.Instance` to override EF Core mappings of [pre-built application modules](https://docs.abp.io/en/abp/latest/Modules/Index). + +**Example: Change mappings for the `IdentityDbContext` to override mappings for the `IdentityUser` entity** + +````csharp +ObjectExtensionManager.Instance.MapEfCoreDbContext(modelBuilder => +{ + modelBuilder.Entity(b => + { + b.ToTable("MyUsers"); + b.Property(x => x.Email).HasMaxLength(300); + }); +}); +```` + +The startup template contains a class, like `YourProjectNameEfCoreEntityExtensionMappings`, that can be used to place that code. + +### New ABP CLI Commands + +There are new [ABP CLI](https://docs.abp.io/en/abp/4.4/CLI) commands introduced with the v4.4: + +* `abp install-libs` command is used for MVC / Razor Pages and Blazor Server applications to restore the `wwwroot/libs` folder. Previously we were running the `yarn` and `gulp` commands to restore that folder. While the `install-libs` command still uses yarn (if available), it is no longer needed to use `gulp`. +* `abp prompt` command can be used to open a prompt for the ABP CLI and run multiple commands without needing to specify the `abp` command every time. For example, if you run `abp prompt`, then you can directly run `install-libs` instead of `abp install-libs`. Use `exit` to quit from the ABP prompt. +* `abp batch` command can be used to run multiple ABP commands with one command. Prepare a text file, write each command as a line (without the `abp` command prefix), then execute `abp batch ` (ex: `abp batch your_commands.txt`) command to execute all the commands in that file. + +### appsettings.secrets.json + +Added `appsettings.secrets.json` to the startup template that can be used to set your sensitive/secret configuration values. You can ignore this file from source control (by adding to `.gitignore` if you're using git) and keep it only in developer/production machines. + +### Other ABP Framework Improvements + +* [#9350](https://github.com/abpframework/abp/pull/9350) Extracted `IRemoteServiceConfigurationProvider` to get remote service configurations. You can replace this service to get the configuration from any source. +* [#8829](https://github.com/abpframework/abp/pull/8829) Implemented error handler and retry for distributed event bus. +* [#9288](https://github.com/abpframework/abp/issues/9288) Use default CORS policy instead of a named one in the startup template. It is suggested to update your own solutions to make it simpler. +* Translated the framework and module localization strings to Hindi, Italian (thanks to Emanuele Filardo), Finnish, French and Slovak (thanks to [Michal Čadecký](https://www.m2ms.sk/)) languages. + +Beside these, there are a lot of enhancements and bug fixes. See the [4.4-preview milestone](https://github.com/abpframework/abp/milestone/52?closed=1) for all issues and pull requests closed with this version. + +## What's new with the ABP Commercial 4.4 + +### New Features for the SaaS Module + +We've implemented some important features to the [SaaS module](https://commercial.abp.io/modules/Volo.Saas): + +* Integrated to the [Payment module](https://commercial.abp.io/modules/Volo.Payment) and implemented **subscription system** for the SaaS module. +* Allow to make a **tenant active/passive**. In this way, you can take a tenant to passive to prevent the users of that tenant from using the system. In addition, you can set a date to automatically make a tenant passive when the date comes. +* Allow to **limit user count** for a tenant. +* Allow to set **different connection strings** for a tenant for each database/module, which makes possible to create different databases for a tenant for each microservice in a microservice solution. + +### New ABP Suite Code Generation Features + +There are many improvements done for for [ABP Suite](https://commercial.abp.io/tools/suite), including CRUD page generation for the **[microservice solution](https://docs.abp.io/en/commercial/latest/startup-templates/microservice/index) template**. + +### Angular UI: Two Factor Authentication for the Resource Owner Password Flow + +In the previous version, we had implemented the resource owner password authentication flow for the Angular UI, which makes the login process easier for simpler applications. With this release, we've implemented two-factor authentication for that flow. Authorization code flow already supports 2FA. + +### Other ABP Commercial Improvements + +* Added web layers to microservices in the microservice solution. You can use them to create modular UI or override existing pages/components of pre-built modules (e.g. Identity and SaaS). +* ABP Commercial license code has been moved to `appsettings.secrets.json` in the new startup templates. + +Beside these, there are many minor improvements and fixes done in the modules and themes. + +## Other News + +In this section, I will share some news that you may be interested in. + +### New Article: Using Elsa Workflow with ABP Framework + +We have been frequently asked how to use [Elsa Workflows](https://elsa-workflows.github.io/elsa-core/) with the ABP Framework. Finally, we have [created an article](https://community.abp.io/articles/using-elsa-workflow-with-the-abp-framework-773siqi9) to demonstrate it. + +![elsa-overview.gif](78af8114d6a067fdad1739fd6de94488.gif) + +You can [check it](https://community.abp.io/articles/using-elsa-workflow-with-the-abp-framework-773siqi9) to see how to integrate Elsa into an ABP based solution easily. + +### Free E-Book: Implementing Domain Driven Design + +We've published a free e-book for the ABP Community in the beginning of June. This is a practical guide for implementing Domain Driven Design (DDD). While the implementation details are based on the ABP Framework infrastructure, the basic concepts, principles and models can be applied to any solution, even if it is not a .NET solution. + +![ddd-book.png](efb3af37378b58e9960839fd6de992e2.png) + +Thousands of copies are already downloaded. If you haven't seen it yet, [click here to get a free copy of that e-book](https://abp.io/books/implementing-domain-driven-design). + +### The LeptonX Theme + +We have been working on a new ABP theme, named the *LeptonX*, for a long time. The theme will be available for ABP Framework (free - lite version) and ABP Commercial (pro version). It is being finalized in the next weeks and we will release the first version in a short time. + +![leptonx.png](9b4c6bd70a839fd0781839fd6de9b717.png) + +See [this blog post](https://volosoft.com/blog/introducing-the-lepton-theme-next-generation) to learn more about that project. + +### Volosoft & .NET Foundation + +[Volosoft](https://volosoft.com/), the company leads the ABP Framework project, has been a corporate sponsor of the [.NET Foundation](https://dotnetfoundation.org/). We are happy by taking our place among other great sponsors! + +![dotnetfoundation-sponsor-volosoft.png](a828f0a8f5283d73020039fd6de9db2d.png) + +We will continue to contribute to and support open source! See this [blog post for the announcement](https://volosoft.com/blog/Volosoft-Announces-the-NET-Foundation-Sponsorship). + +### Looking for Developer Advocate(s) + +We are actively looking for professional developer advocates for the ABP.IO platform. If you want to create content and touch to the ABP community, please check our [job post](https://github.com/volosoft/vs-home/issues/13). + +## About the Next Version + +The next version will be a major version: 5.0, which will be based on .NET 6.0. We are planning to release it in the end of 2021, short time after the .NET 6.0 release. We will release multiple preview/beta versions before the RC version. See the [road map](https://docs.abp.io/en/abp/latest/Road-Map) for details of the planned works for the version 5.0. diff --git a/docs/en/Community-Articles/2021-07-08-introducing-the-eshoponabp-project/9eade951e022722ac39439fd971f14d1.png b/docs/en/Community-Articles/2021-07-08-introducing-the-eshoponabp-project/9eade951e022722ac39439fd971f14d1.png new file mode 100644 index 0000000000..738194b19c Binary files /dev/null and b/docs/en/Community-Articles/2021-07-08-introducing-the-eshoponabp-project/9eade951e022722ac39439fd971f14d1.png differ diff --git a/docs/en/Community-Articles/2021-07-08-introducing-the-eshoponabp-project/post.md b/docs/en/Community-Articles/2021-07-08-introducing-the-eshoponabp-project/post.md new file mode 100644 index 0000000000..5aa8e5a6ba --- /dev/null +++ b/docs/en/Community-Articles/2021-07-08-introducing-the-eshoponabp-project/post.md @@ -0,0 +1,50 @@ +We are happy to introduce the **eShopOnAbp** project as an example microservice solution built with the ABP Framework by the core ABP team. This solution demonstrates the strength of ABP Framework and using it in a real-life case. The goal of the project is to create a full-featured cloud-native microservices reference application. The project is inspired by the [eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers) project and shows how it can be implemented with the ABP Framework. + +> **Project Status**: Currently, the project doesn't have any business logic. We've just brought ABP's pre-built modules (Identity, Tenant Management, IdentityServer, etc) together as a base solution. However, it is fully working and you can now take it as a base solution for your microservice project. From now on, we will build the example application functionalities / business logic on top of it. + +## Source Code + +The source code is available on [abpframework/eShopOnAbp](https://github.com/abpframework/eShopOnAbp) repository. + +## The Big Picture + +The project follows micro-service architecture and overall structure is presented below. + +![overall-solution.png](9eade951e022722ac39439fd971f14d1.png) + +## How to Run? + +You can either run in Visual Studio, or using [Microsoft Tye](https://github.com/dotnet/tye). Tye is a developer tool that makes developing, testing, and deploying micro-services and distributed applications easier. + + ### Requirements + +- .NET 5.0+ +- Docker +- Yarn + +### Instructions + +- Clone the repository ( [eShopOnAbp](https://github.com/abpframework/eShopOnAbp) ) + +- Install Tye (*follow [these steps](https://github.com/dotnet/tye/blob/main/docs/getting_started.md#installing-tye)*) + +- Execute `run-tye.ps1` + +- Wait until all applications are up! + + - You can check running application from tye dashboard ([localhost:8000](http://127.0.0.1:8000/)) + +- After all your backend services are up, start the angular application: + + ```bash + cd apps/angular + yarn start + ``` + +## What's Next? + +We'll work on deployment & CI-CD processes as a next step and build the business logic on. First goal is deploying the entire application on [Kubernetes](https://kubernetes.io/). + +## Feedback + +Your comments and suggestions is important for us. You can ask your questions or post your feedback under [this discussion entry](https://github.com/abpframework/abp/discussions/9536). diff --git a/docs/en/Community-Articles/2021-08-04-abpio-platform-44-final-has-been-released/post.md b/docs/en/Community-Articles/2021-08-04-abpio-platform-44-final-has-been-released/post.md new file mode 100644 index 0000000000..a0ecabbd8d --- /dev/null +++ b/docs/en/Community-Articles/2021-08-04-abpio-platform-44-final-has-been-released/post.md @@ -0,0 +1,40 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.4 versions have been released today. + +## What's New With 4.4? + +Since all the new features are already explained in details with the 4.4 RC announcement posts, I will not repeat all the details again. See [the related blog post](https://blog.abp.io/abp/ABP-Platform-4-4-RC-Has-Been-Released) for all the features and enhancements. + +## 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. + +## The Road Map + +The next feature version will be 5.0. It is planned to release the 5.0 RC (Release Candidate) in November 2021. See the updated road maps; + +* [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) \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/29aea0fc3b31bf55029e39fe4af7fa02.png b/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/29aea0fc3b31bf55029e39fe4af7fa02.png new file mode 100644 index 0000000000..d45a41008e Binary files /dev/null and b/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/29aea0fc3b31bf55029e39fe4af7fa02.png differ diff --git a/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/b10bc0debf9e083a97c239fe4af7df86.png b/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/b10bc0debf9e083a97c239fe4af7df86.png new file mode 100644 index 0000000000..03547aed6b Binary files /dev/null and b/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/b10bc0debf9e083a97c239fe4af7df86.png differ diff --git a/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/post.md b/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/post.md new file mode 100644 index 0000000000..19cc718755 --- /dev/null +++ b/docs/en/Community-Articles/2021-08-12-leptonx-theme-for-abp-framework-alpha-release/post.md @@ -0,0 +1,214 @@ +We are excited to announce that the **alpha version** of the LeptonX theme has been released! As stated in [this blog post](https://volosoft.com/blog/introducing-the-lepton-theme-next-generation), LeptonX comes in different shapes. For this release, we introduce only ABP based projects with the Angular UI. So, if you are already using the ABP Framework and Angular as the frontend choice, you can integrate these packages into your project today. + +The theme has been deployed with two versions: LeptonX-lite (free) and LeptonX (commercial). + +> **Note that this theme currently only works for the *Angular UI*. Please keep waiting for other UI options.** + +## Open-Source + +This section shows how to replace the basic theme (that comes with open source ABP Framework startup template) with the new LeptonX-lite theme. + +To add `LeptonX-lite` into your project, + +* Install `@abp/ng.theme.lepton-x` NPM package + +`npm install @abp/ng.theme.lepton-x@preview` or + +`yarn add @abp/ng.theme.lepton-x@preview` + +* Then, we need to edit the styles array in `angular.json` to replace the existing style with the new one. + +Replace the following style + +```JSON +{ + "input": "node_modules/bootstrap/dist/css/bootstrap.min.css", + "inject": true, + "bundleName": "bootstrap-ltr.min" +}, +``` + +with + +```json +"node_modules/@volo/ngx-lepton-x.lite/styles/sidemenu-layout.min.css", +"node_modules/bootstrap-icons/font/bootstrap-icons.css", +``` + +* Finally, remove `ThemeBasicModule` from `app.module.ts` and `shared.module.ts`, and import the related modules in `app.module.ts` + +```js +import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; +import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; + +@NgModule({ + imports: [ + // ... + ThemeLeptonXModule.forRoot(), + SideMenuLayoutModule.forRoot(), + ], + // ... +}) +export class AppModule {} +``` + +Note: If you employ [Resource Owner Password Flow](https://docs.abp.io/en/abp/latest/UI/Angular/Authorization#resource-owner-password-flow) for authorization, you should import the following module as well: + +```js +import { AccountLayoutModule } from '@abp/ng.theme.lepton-x/account'; + +@NgModule({ + // ... + imports: [ + // ... + AccountLayoutModule.forRoot(), + // ... + ], + // ... +}) +export class AppModule {} +``` + +To change the logos and brand color of the `LeptonX`, simply add the following CSS to the `styles.scss` + +```css +:root { + --lpx-logo: url('/assets/images/logo.png'); + --lpx-logo-icon: url('/assets/images/logo-icon.png'); + --lpx-brand: #edae53; +} +``` + +- `--lpx-logo` is used to place the logo in the menu. +- `--lpx-logo-icon` is a square icon used when the menu is collapsed. +- `--lpx-brand` is a color used throughout the application, especially on active elements. + +![lepton-x-lite-dashboard.png](b10bc0debf9e083a97c239fe4af7df86.png) + +![lepton-x-lite-menu-collapsed.png](29aea0fc3b31bf55029e39fe4af7fa02.png) + +## ABP Commercial + +This section shows how to replace the lepton theme (that comes with the ABP Commercial startup template) with the new LeptonX theme. + +To add `LeptonX` into your existing projects, + +* Firstly, install `@volosoft/abp.ng.theme.lepton-x` NPM package + +`npm install @volosoft/abp.ng.theme.lepton-x@preview` or + +`yarn add @volosoft/abp.ng.theme.lepton-x@preview` + +* Then, edit `angular.json` as follows: + +Remove the following config from the `styles` array since LeptonX provides bootstrap as embedded in its CSS. + +```JSON +{ + "input": "node_modules/bootstrap/dist/css/bootstrap.min.css", + "inject": true, + "bundleName": "bootstrap-ltr.min" +}, +``` + +Add the following ones into the `styles` array + +```JSON +{ + "input": "node_modules/@volosoft/ngx-lepton-x/styles/themes/dark.css", + "inject": false, + "bundleName": "lepton-x.dark" +}, +{ + "input": "node_modules/@volosoft/ngx-lepton-x/styles/themes/dim.css", + "inject": false, + "bundleName": "lepton-x.dim" +}, +{ + "input": "node_modules/@volosoft/ngx-lepton-x/styles/themes/light.css", + "inject": false, + "bundleName": "lepton-x.light" +}, +"node_modules/@volosoft/ngx-lepton-x/styles/css/sidemenu-layout.min.css", +"node_modules/bootstrap-icons/font/bootstrap-icons.css", +``` + +Three of them are related to the theming and will be loaded during runtime. That's why they are not injected into the `head` as a style. Hence, the `"inject": false` + +The fourth one depends on which layout you want to use. For now, there is only `sidemenu-layout` available. In the future, there will be many layouts to choose from. + +The last one is `bootstrap-icons` which are being used throughout the components. + +* At last, remove `ThemeLeptonModule` from `app.module.ts` and `shared.module.ts`, and import the following modules in `app.module.ts` + +```js +import { ThemeLeptonXModule } from '@volosoft/abp.ng.theme.lepton-x'; +import { AbpSideMenuLayoutModule } from '@volosoft/abp.ng.theme.lepton-x/layouts'; + +@NgModule({ + // ... + imports: [ + // ... + ThemeLeptonXModule.forRoot(), + AbpSideMenuLayoutModule.forRoot(), // depends on which layout you choose + // ... + ], + // ... +}) +export class AppModule {} +``` + +Note: If you employ [Resource Owner Password Flow](https://docs.abp.io/en/abp/latest/UI/Angular/Authorization#resource-owner-password-flow) for authorization, you should import the following module as well: + +```js +import { AccountLayoutModule } from '@volosoft/abp.ng.theme.lepton-x/account'; + +@NgModule({ + // ... + imports: [ + // ... + AccountLayoutModule.forRoot({ + layout: { + authLayoutImg: '/assets/images/login-bg.jpg', + }, + }), + // ... + ], + // ... +}) +export class AppModule {} +``` + +`authLayoutImg`: (Optional) If not given, a default image will be placed on the authentication pages. + + +* At this point, `LeptonX` theme should be up and running within your application. However, you may need to overwrite some css variables based your needs for every theme available as follows: +```scss +:root { + .lpx-theme-dark { + --lpx-logo: url('/assets/images/logo/logo-light.svg'); + --lpx-logo-icon: url('/assets/images/logo/logo-light-icon.svg'); + --lpx-brand: #edae53; + } + + .lpx-theme-dim { + --lpx-logo: url('/assets/images/logo/logo-light.svg'); + --lpx-logo-icon: url('/assets/images/logo/logo-light-icon.svg'); + --lpx-brand: #f15835; + } + + .lpx-theme-light { + --lpx-logo: url('/assets/images/logo/logo-dark.svg'); + --lpx-logo-icon: url('/assets/images/logo/logo-dark-icon.svg'); + --lpx-brand: #69aada; + } +} +``` + +When the user selects a theme, the corresponding CSS class is added to the `body`, so you can write specific CSS rules to each theme. + +## Conclusion + +In this blog post, I've explained how to use the alpha version of the new LeptonX theme for ABP-based solutions. Please, keep in mind that this is an alpha version, and we will continue to work on the LeptonX theme. The APIs are bound to change and breaking changes may be introduced in future versions. + +We would like you to try it out with the latest version of the ABP Framework and give us feedback at lepton@volosoft.com or open an issue on this repository: https://github.com/volosoft/lepton-theme \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-10-31-Many-to-Many-Relationship-with-ABP-and-EF-Core/POST.md b/docs/en/Community-Articles/2021-10-31-Many-to-Many-Relationship-with-ABP-and-EF-Core/POST.md index ae688d6981..81c0b6ea34 100644 --- a/docs/en/Community-Articles/2021-10-31-Many-to-Many-Relationship-with-ABP-and-EF-Core/POST.md +++ b/docs/en/Community-Articles/2021-10-31-Many-to-Many-Relationship-with-ABP-and-EF-Core/POST.md @@ -10,6 +10,12 @@ You can see the ER Diagram of our application below. This diagram will be helpfu When we've examined the ER Diagram, we can see the one-to-many relationship between the **Author** and the **Book** tables. Also, the many-to-many relationship (**BookCategory** table) between the **Book** and the **Category** tables. (There can be more than one category on each book and vice-versa in our scenario). +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ### Source Code You can find the source code of the application at https://github.com/EngincanV/ABP-Many-to-Many-Relationship-Demo . @@ -1664,6 +1670,12 @@ namespace BookStore.Web.Pages.Books ![Edit Book Modal](./book-update-modal.png) +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ### Conclusion In this article, I've tried to explain how to create a many-to-many relationship by using the ABP framework. (by following DDD principles) diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/1b985b5f5bed9358713a3a0043e61af2.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/1b985b5f5bed9358713a3a0043e61af2.png new file mode 100644 index 0000000000..5494ad125b Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/1b985b5f5bed9358713a3a0043e61af2.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/44948ada62c17e46b2473a0043e6bf7b.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/44948ada62c17e46b2473a0043e6bf7b.png new file mode 100644 index 0000000000..d35cda4713 Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/44948ada62c17e46b2473a0043e6bf7b.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/518c1127f772c4cc26e53a004436c1ba.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/518c1127f772c4cc26e53a004436c1ba.png new file mode 100644 index 0000000000..545cd61071 Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/518c1127f772c4cc26e53a004436c1ba.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/97e5fd88057afaea6bbb3a0043e70c00.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/97e5fd88057afaea6bbb3a0043e70c00.png new file mode 100644 index 0000000000..671a018dda Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/97e5fd88057afaea6bbb3a0043e70c00.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/a7dca2286734d7639df73a0043e69a5b.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/a7dca2286734d7639df73a0043e69a5b.png new file mode 100644 index 0000000000..b851173ab1 Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/a7dca2286734d7639df73a0043e69a5b.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/bad6fa7e5605c270f0ca3a0043e7534a.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/bad6fa7e5605c270f0ca3a0043e7534a.png new file mode 100644 index 0000000000..bfd2c54599 Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/bad6fa7e5605c270f0ca3a0043e7534a.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/d95519a64013bdf417ad3a0043e67091.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/d95519a64013bdf417ad3a0043e67091.png new file mode 100644 index 0000000000..9df561568c Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/d95519a64013bdf417ad3a0043e67091.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/df5319bd5c6ea32035ce3a0043e5b8d8.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/df5319bd5c6ea32035ce3a0043e5b8d8.png new file mode 100644 index 0000000000..5bc167a388 Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/df5319bd5c6ea32035ce3a0043e5b8d8.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/e34b85f434a8e361bce13a0043e6e920.png b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/e34b85f434a8e361bce13a0043e6e920.png new file mode 100644 index 0000000000..74574fbd2d Binary files /dev/null and b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/e34b85f434a8e361bce13a0043e6e920.png differ diff --git a/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/post.md b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/post.md new file mode 100644 index 0000000000..ad3e1aca26 --- /dev/null +++ b/docs/en/Community-Articles/2021-11-18-abpio-platform-50-rc1-has-been-released/post.md @@ -0,0 +1,313 @@ +Today, we are excited to release the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) version **5.0 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [5.0.0 Stable](https://github.com/abpframework/abp/milestone/57) version is December 14, 2021**. + +Please try this version and provide feedback for a more stable ABP version 5.0! Thank you all. + +## Get Started with the 5.0 RC + +follow the steps below to try the version 5.0.0 RC today; + +1) **Upgrade** the ABP CLI to the version `5.0.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 5.0.0-rc.1 +```` + +**or install** if you haven't installed before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 5.0.0-rc.1 +```` + +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/latest/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**. + +You can use any IDE that supports .NET 6.0, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. + +### 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: + +* Upgraded to .NET 6.0, so you need to move your solution to .NET 6.0 if you want to use the ABP 5.0. +* Upgraded to Bootstrap 5. This is the most important breaking change in ABP 5.0 and you should take care of it. +* `IRepository` doesn't inherit from `IQueryable` anymore. It was already made obsolete in 4.2. +* Removed NGXS and states from the Angular UI. +* Removed gulp dependency from the MVC / Razor Pages UI in favor of `abp install-libs` command of the ABP CLI. +* Deprecated `EntityCreatingEventData`, `EntityUpdatingEventData`, `EntityDeletingEventData` and `EntityChangingEventData` classes. See [#9897](https://github.com/abpframework/abp/issues/9897). + +Please see the [migration document](https://docs.abp.io/en/abp/5.0/Migration-Guides/Abp-5_0) for all the details. You can also see all [the closed issues and pull requests](https://github.com/abpframework/abp/milestone/51). + +## What's new with 5.0? + +In this section, I will introduce some major features released with this version. + +### Static (Generated) Client Proxies for C# and JavaScript + +Dynamic C# ([see](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients)) and JavaScript ([see](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies)) client proxy system is one of the most loved features of the ABP Framework. It generates the proxy code on runtime and makes client-to-server calls a breeze. With ABP 5.0, we are providing an alternative approach: You can generate the client proxy code on development-time. + +Development-time client proxy generation has a performance advantage since it doesn't need to obtain the HTTP API definition on runtime. It also makes it easier to consume a (micro)service behind an API Gateway. With dynamic proxies, we should return a combined HTTP API definition from the API Gateway and need to add HTTP API layers of the microservices to the gateway. Static proxies removes this requirement. One disadvantage is that you should re-generate the client proxy code whenever you change your API endpoint definition. Yes, software development always has tradeoffs :) + +Working with static client proxy generation is simple with the ABP CLI. You first need to run the server application, open a command-line terminal, locate to the root folder of your client application, then run the `generate-proxy` command of the ABP CLI. + +#### Creating C# client proxies + +C# client proxies are useful to consume APIs from Blazor WebAssembly applications. It is also useful for microservice to microservice HTTP API calls. Notice that the client application need to have a reference to the application service contracts (typically, the `.Application.Contracts` project in your solution) in order to consume the services. + +**Example usage:** + +````bash +abp generate-proxy -t csharp -u https://localhost:44305 +```` + +`-t` indicates the client type, C# here. `-u` is the URL of the server application. It creates the proxies for the application (the app module) by default. You can specify the module name as `-m ` if you are building a modular system. The following figure shows the generated files: + +![csharp-proxies.png](df5319bd5c6ea32035ce3a0043e5b8d8.png) + +The next step is to enable the static proxy system for your application (or module) using the `AddStaticHttpClientProxies` extension method: + +````csharp +context.Services.AddStaticHttpClientProxies( + typeof(MyApplicationContractsModule).Assembly +); +```` + +You can then inject and use the application service interfaces of these proxies. The usage is same of the [dynamic C# client proxies](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients). + +When you use static proxies for a module / application, you don't need to dynamic proxies. Find and remove the `context.Services.AddHttpClientProxies(...)` in your solution (typically in the `*.HttpApi.Client` project). + +#### Creating JavaScript client proxies + +JavaScript proxies are useful to consume APIs from MVC / Razor Pages UI. It works on JQuery AJAX API, just like the [dynamic JavaScript proxies](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies). + +**Example usage:** + +````bash +abp generate-proxy -t js -u https://localhost:44305 +```` + +The following figure shows the generated file: + +![js-proxies.png](1b985b5f5bed9358713a3a0043e61af2.png) + +Then you can consume the server-side APIs from your JavaScript code just like the [dynamic JavaScript proxies](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies). + +#### Creating Angular client proxies + +Angular developers knows that the generate-proxy command was already available in ABP's previous versions to create client-side proxy services in the Angular UI. The same functionality continues to be available and already [documented here](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies). + +**Example usage:** + +````bash +abp generate-proxy -t ng -u https://localhost:44305 +```` + +### Transactional Outbox & Inbox for the Distributed Event Bus + +This was one of the most awaited features by distributed software developers. + +The [transactional outbox pattern](https://microservices.io/patterns/data/transactional-outbox.html) is used to publishing distributed events within the same transaction that manipulates the application database. Distributed events are saved into the database inside the same transaction with your data changes, then sent to the message broker (like RabbitMQ or Kafka) by a separate background worker with a re-try system. In this way, it ensures the consistency between your database state and the published events. + +The transactional inbox pattern, on the other hand, saves incoming events into database first, then executes the event handler in a transactional manner and removes the event from the inbox queue in the same transaction. It also ensures that the event is only executed one time by keeping the processed messages for a while and discarding the duplicate events received from the message broker. + +Enabling the inbox and outbox patterns requires a few manual steps for your application. We've created a simple [console application example](https://github.com/abpframework/abp/tree/dev/test/DistEvents), but I will also explain all the steps here. + +#### Pre-requirements + +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 packages +For the outbox & inbox functionality, ABP 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 + +Open your `DbContext` class, implement the `IHasEventInbox` and the `IHasEventOutbox` interfaces. You should end up by adding two `DbSet` properties into your `DbContext` class: + +````csharp +public DbSet IncomingEvents { get; set; } +public DbSet OutgoingEvents { get; set; } +```` + +Add the following lines inside the `OnModelCreating` method of your `DbContext` class: + +````csharp +builder.ConfigureEventInbox(); +builder.ConfigureEventOutbox(); +```` + +It is similar for MongoDB; implement the `IHasEventInbox` and the `IHasEventOutbox` interfaces. There is no `Configure...` method for MongoDB. + +Now, we've added inbox/outbox related tables to our database schema. Now, for EF Core, use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database (you can skip this step for MongoDB). If you want to use the command-line terminal, run the following commands in the root directory of the database integration project: + +````bash +dotnet ef migrations add "Added_Event_Boxes" +dotnet ef database update +```` + +#### Configure the distributed event bus options + +As the last step, write the following configuration code inside the `ConfigureServices` method of your module class: + +````csharp +Configure(options => +{ + options.Outboxes.Configure(config => + { + config.UseDbContext(); + }); + + options.Inboxes.Configure(config => + { + config.UseDbContext(); + }); +}); +```` + +Replace `YourDbContext` with your `DbContext` class. + +That's all. You can continue to publishing and consuming events just as before. See the [distributed event bus documentation](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) if you don't know how to use it. + +### Publishing events in transaction + +The previous feature (outbox & inbox) solves the transactional event publishing problem for distributed systems. This feature, publishing events in transaction, solves the problem of executing event handlers in the same transaction that the events are published in for non-distributed applications. With 5.0, all events (local or distributed) are handled in the same transaction. If any handler fails, the transaction is rolled back. If you don't want that, you should use try/catch and ignore the exception inside your event handler. + +Remember that if you don't install a real distributed event provider (like [RabbitMQ](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration) or [Kafka](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus-Kafka-Integration)), the [distributed events](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) are actually executed in-process, just like the [local events](https://docs.abp.io/en/abp/latest/Local-Event-Bus). So, with this development, all the events become transactional, even if your system is distributed or not. + +No action needed to take. It will just work by default. There is a [deprecation note](https://github.com/abpframework/abp/issues/9897) related to this change (some pre-defined events [will be removed](https://github.com/abpframework/abp/issues/9908) in the next major version since they are not needed anymore) + +### Inactivating a user + +The [Identity module](https://docs.abp.io/en/abp/latest/Modules/Identity) has a new feature to make a user active or inactive. Inactive users can not login to the system. In this way, you can disable a user account without deleting it. An *Active* checkbox is added to the user create/edit dialog to control it on the UI: + +![user-active.png](d95519a64013bdf417ad3a0043e67091.png) + +EF Core developers should add a new database migration since this brings a new field to the `AbpUsers` table. + +### Overriding email settings per tenant + +If you're building a multi-tenant application, it is now possible to override email sending settings per tenant. To make this possible, you should first enable that [feature](https://docs.abp.io/en/abp/latest/Features) to the tenant you want, by clicking the *Actions -> Features* for the tenant. + +![tenant-features.png](a7dca2286734d7639df73a0043e69a5b.png) + +Enable the feature using the checkbox as shown in the following modal: + +![enable-email-tenant.png](44948ada62c17e46b2473a0043e6bf7b.png) + +Then the tenant admin can open the email settings page under the Administration -> Settings menu (on development environment, logout, switch to the tenant and re-login with the tenant admin): + +![email-settings.png](e34b85f434a8e361bce13a0043e6e920.png) + +### Hangfire dashboard permission + +ABP allows to use Hangfire as the background job manager when you install the integration package [as documented](https://docs.abp.io/en/abp/5.0/Background-Jobs-Hangfire). Hangfire's dashboard is used to monitor and control the background job queues. Here, a screenshot from the dashboard: + +![hangfire-dashboard.png](97e5fd88057afaea6bbb3a0043e70c00.png) + +Hangfire's dashboard is not authorized by default, so any user can navigate to the `/hangfire` URL and see/control the jobs. With the ABP version 5.0, we've added a built-in authorization implementation for the Hangfire dashboard. Instead of `app.UseHangfireDashboard();`, you can use the following middleware configuration: + +````csharp +app.UseHangfireDashboard("/hangfire", new DashboardOptions +{ + AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() } +}); +```` + +In this way, only the authenticated users can see the dashboard. However, we suggest to set a permission name, so only the users with that permission can see the dashboard: + +````csharp +app.UseHangfireDashboard("/hangfire", new DashboardOptions +{ + AsyncAuthorization = new[] { + new AbpHangfireAuthorizationFilter("MyPermissionName") + } +}); +```` + +You can define the permission (`MyPermissionName` in this example) using the standard [permission system](https://docs.abp.io/en/abp/5.0/Authorization#permission-system). + +### Introducing AbpControllerBase + +ABP provides an `AbpController` class that you can inherit your MVC controllers from. It provides some pre-injected services to simplify your controllers. With v5.0, we are adding a second base controller class, `AbpControllerBase`, which is more proper to create API controllers (without view features). It is suggested to inherit from the `AbpControllerBase` class to create API controllers, instead of the `AbpController` class. + +**Example:** + +````csharp +[Route("api/products")] +public class ProductController : AbpControllerBase +{ + // TODO: ... +} +```` + +### Automatically setting the TenantId for new entities + +Beginning from the version 5.0, ABP automatically sets the `TenantId` for you when you create a new entity object (that implements the `IMultiTenant` interface). It is done in the constructor of the base `Entity` class (all other base entity and aggregate root classes are derived from the `Entity` class). The `TenantId` is set from the current value of the `ICurrentTenant.Id` property. + +Previously, it was a responsibility of the developer to set `TenantId` for new entities. Now, ABP takes care of it. You only may need to set it if you want to set id of a tenant other than the current tenant. + +This can be a breaking change in rare cases (for example, if you create host side entities from a tenant context and do not explicitly set host entity's `TenantId` to `null`). + +## Community News +### ABP Community Talks 2021.12 + +![community-talks.png](518c1127f772c4cc26e53a004436c1ba.png) + +As the core ABP development team, we've decided to organize monthly live meetings with the ABP community. The first live meeting will be at **December 16, 2021, 17:00 (UTC)** on YouTube. ABP core team members will present some of the new features coming with ABP 5.0. + +**Join this event on the Kommunity platform: https://kommunity.com/volosoft/events/abp-community-talks-4afca9c9** + +You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) for reminders for further ABP events and videos. +### ASP.NET Community Startup! +It was great for us to be invited to Microsoft's [ASP.NET Community Weekly Standup](https://dotnet.microsoft.com/live/community-standup) show, at September 28. There was a very high attention and that made us very happy. Thanks to the ABP Community and all the watchers :) If you've missed the talk, [you can watch it here](https://www.youtube.com/watch?v=vMWM-_ihjwM). + +### Upcoming ABP Book! + +I am currently authoring the first official book for the ABP Framework and it is on [pre-sale on Amazon](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing-dp-1801079242/dp/1801079242) now. + +![abp-book-cover.png](bad6fa7e5605c270f0ca3a0043e7534a.png) + +This books is a complete guide to start working with the ABP Framework, explore the ABP features and concepts. It also contains chapters for DDD, modular application development and multi-tenancy to learn and practically work with the ABP architecture to build maintainable software solutions and create SaaS applications. The book will be based on ABP 5.0 and published in the beginning of 2022. You can [pre-order now](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing-dp-1801079242/dp/1801079242)! + +### New ABP Community posts + +Here, some of the latest posts added to the [ABP community](https://community.abp.io/): + +* [Many to many relationship with ABP and EF Core](https://community.abp.io/articles/many-to-many-relationship-with-abp-and-ef-core-g7rm2qut) +* [Add a new module to your ABP application](https://community.abp.io/articles/abp-framework-add-a-new-module-to-your-abp-application-eogrfm88) +* [Changing UI Theme for ABP MVC / Razor Pages UI](https://community.abp.io/articles/changing-ui-theme-for-abp-mvc-razor-pages-ui-ravx6a0o) +* [Create a Windows Service with the ABP Framework](https://community.abp.io/articles/create-a-windows-service-with-abp-framework-hop4dtra) +* [Deploy ABP Framework .NET Core tiered application to docker swarm](https://community.abp.io/articles/deploy-abp-framework-dotnet-core-tiered-app-to-docker-swarm-kcrjbjec) +* [Centralized logging for .NET Core ABP microservices application using Seq](https://community.abp.io/articles/centralized-logging-for-.net-core-abp-microservices-app-using-seq-g1xe7e7y) + +Thanks to the ABP Community for all the contents they have published. You can also post your ABP and .NET related (text or video) contents to the ABP Community. + +## Conclusion + +The ABP version 5.0 is coming with important changes (like .NET 6 and Bootstrap 5) and features. In this blog post, I summarized the news about that new version. Please try it and provide feedback by opening issues on [the GitHub repository](https://github.com/abpframework/abp). Thank you all! \ No newline at end of file diff --git a/docs/en/Community-Articles/2021-12-13-Integrating-the-Syncfusion-MVC-Components-to-the-ABP-MVC-UI/POST.md b/docs/en/Community-Articles/2021-12-13-Integrating-the-Syncfusion-MVC-Components-to-the-ABP-MVC-UI/POST.md index 4095c62092..2953c552d3 100644 --- a/docs/en/Community-Articles/2021-12-13-Integrating-the-Syncfusion-MVC-Components-to-the-ABP-MVC-UI/POST.md +++ b/docs/en/Community-Articles/2021-12-13-Integrating-the-Syncfusion-MVC-Components-to-the-ABP-MVC-UI/POST.md @@ -4,6 +4,12 @@ In this article we will see how we can integrate the Syncfusion MVC Components into our ABP application. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Source Code You can find the source code of the application at https://github.com/EngincanV/ABP-Syncfusion-Components-Demo. @@ -314,6 +320,12 @@ After injecting the Syncfusion style and script into our application, our config ![](./calendar-component.png) +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ### Conclusion In this article, we've explained how to integrate the **Syncfusion Components** into our applications. After following this article, you can use the Syncfusion components in your application. diff --git a/docs/en/Community-Articles/2021-12-15-abpio-platform-50-final-has-been-released/36c5e78b69024dd6792a3a00cff9e1ea.png b/docs/en/Community-Articles/2021-12-15-abpio-platform-50-final-has-been-released/36c5e78b69024dd6792a3a00cff9e1ea.png new file mode 100644 index 0000000000..545cd61071 Binary files /dev/null and b/docs/en/Community-Articles/2021-12-15-abpio-platform-50-final-has-been-released/36c5e78b69024dd6792a3a00cff9e1ea.png differ diff --git a/docs/en/Community-Articles/2021-12-15-abpio-platform-50-final-has-been-released/post.md b/docs/en/Community-Articles/2021-12-15-abpio-platform-50-final-has-been-released/post.md new file mode 100644 index 0000000000..5465ed1fe5 --- /dev/null +++ b/docs/en/Community-Articles/2021-12-15-abpio-platform-50-final-has-been-released/post.md @@ -0,0 +1,45 @@ +We are very excited to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 5.0 versions today. It was a big development cycle, and finally it is available! + +## What's new with 5.0? + +Since all the new features are already explained in details with the [5.0 RC.1 Announcement Post](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released) for all the features and enhancements. + +## Getting started with 5.0 + +### Creating new solutions + +You can create a new solution with the ABP Framework version 5.0 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started). + +Type the following command in a command-line terminal to install the ABP CLI version 5.0: + +````bash +dotnet tool install -g Volo.Abp.Cli --version 5.0.0 +```` + +To upgrade your existing ABP CLI installation: + +````bash +dotnet tool update -g Volo.Abp.Cli --version 5.0.0 +```` + +Then you can create a new solution using the `abp new` command: + +````bash +abp new Acme.BookStore +```` + +> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details. + +### Upgrading existing solutions + +Check [the migration guide](https://docs.abp.io/en/abp/latest/Migration-Guides/Abp-5_0) for the applications with the version 4.x upgrading to the version 5.0. Also see [the upgrading guide](https://docs.abp.io/en/abp/latest/Upgrading) to understand how to update existing solutions. + +## ABP Community Talks 2021.12 + +![community-talks.png](36c5e78b69024dd6792a3a00cff9e1ea.png) + +As the core ABP development team, we've decided to organize monthly live meetings with the ABP community. The first live meeting will be at **December 16, 2021, 17:00 (UTC)** on YouTube. ABP core team members will present some of the new features coming with ABP 5.0. + +**Join this event on the Kommunity platform: https://kommunity.com/volosoft/events/abp-community-talks-4afca9c9** + +See you in the event! \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/04c9be6a819f74d7d7003a0165ff0d88.png b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/04c9be6a819f74d7d7003a0165ff0d88.png new file mode 100644 index 0000000000..98057eb97c Binary files /dev/null and b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/04c9be6a819f74d7d7003a0165ff0d88.png differ diff --git a/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/1b50e6d6317b84f963ab3a016602cca7.png b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/1b50e6d6317b84f963ab3a016602cca7.png new file mode 100644 index 0000000000..70bb96046f Binary files /dev/null and b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/1b50e6d6317b84f963ab3a016602cca7.png differ diff --git a/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/3104802a0898db35a15c3a0166002a3f.png b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/3104802a0898db35a15c3a0166002a3f.png new file mode 100644 index 0000000000..4c489854f0 Binary files /dev/null and b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/3104802a0898db35a15c3a0166002a3f.png differ diff --git a/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/79374b567169e34b283f3a016603708f.png b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/79374b567169e34b283f3a016603708f.png new file mode 100644 index 0000000000..75e93a6fdd Binary files /dev/null and b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/79374b567169e34b283f3a016603708f.png differ diff --git a/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/post.md b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/post.md new file mode 100644 index 0000000000..e1c319ea4e --- /dev/null +++ b/docs/en/Community-Articles/2022-01-13-abpio-platform-v51-has-been-released/post.md @@ -0,0 +1,143 @@ +Today, we are releasing the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version 5.1 (with a version number `5.1.1`). This blog post introduces the new features and important changes in this new version. + +## Get Started with 5.1 + +Follow the steps below to try the 5.1 version today: + +1) **Upgrade** the ABP CLI to the latest version using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g +```` + +**or install** if you haven't installed it before: + +````bash +dotnet tool install Volo.Abp.Cli -g +```` + +2) Create a **new application**: + +````bash +abp new BookStore +```` + +Check out the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options. + +> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page. + +You can use any IDE that supports .NET 6.x development (e.g. [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)). + +### Migration Notes & Breaking Changes + +This is a minor feature release, mostly with enhancements and improvements based on [version 5.0](https://blog.abp.io/abp/ABP-IO-Platform-5-0-Final-Has-Been-Released). There aren't any breaking changes except for the Angular UI upgrade. ABP 5.1 startup templates use **Angular 13**. + +### Angular UI + +**If you want to upgrade the ABP Framework but want to continue with Angular 12**, add the following section to the `package.json` file of the Angular project: + +````json +"resolutions": { + "ng-zorro-antd": "^12.1.1", + "@ng-bootstrap/ng-bootstrap": "11.0.0-beta.2" + } +```` + +## What's New with the ABP Framework 5.1? + +In this section, I will introduce some major features released with this version. + +### The New Hosting Model + +The ABP startup application template now uses the new ASP.NET Core hosting APIs ([check out the Microsoft's minimal APIs document](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0)) on application startup ([check out the exact place in the ABP startup template](https://github.com/abpframework/abp/blob/46cdfbe7b06c93690181633be4e96bf62e7f34e2/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Program.cs#L33-L40)). So, the `Startup.cs` file has been removed. + +Old-style hosting logic will continue to work as long as ASP.NET Core supports it. It is recommended to switch to the new model if it's possible for your solution. Check out [this guide](https://docs.abp.io/en/abp/latest/Migration-Guides/Upgrading-Startup-Template) if you need to know how to do that. + +### Asynchronous Startup Lifecycle Methods + +The new hosting model allows us to execute asynchronous code on application initialization in the [ABP module](https://docs.abp.io/en/abp/latest/Module-Development-Basics) classes. If you are using the new hosting model (which is default with 5.1 startup templates), you can override the `Async` versions of the module lifecycle methods. + +For example, you can now override the `ConfigureServicesAsync` (instead of `ConfigureServices`) or `OnApplicationInitializationAsync` (instead of `OnApplicationInitialization`) as shown in the following code block: + +````csharp +public class MyModule : AbpModule +{ + public override async Task ConfigureServicesAsync(ServiceConfigurationContext context) + { + /* You can use await here and safely execute other async methods */ + } + + public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context) + { + /* You can use await here and safely execute other async methods */ + } +} +```` + +If you override both the asynchronous and synchronous versions of the same method, only the asynchronous one will be executed. So, override only one of them based on your needs. + +### eShopOnABP Is Getting More Stable + +Our team is working to finalize the [eShopOnAbp](https://github.com/abpframework/eShopOnAbp) example solution, which is a reference **microservice solution** built with the ABP Framework. They will explain the project status and show what's done in the next **ABP Community Talks** meeting (Check out the *ABP Community Talks 2021.1* section at the bottom of this post). + +### The New ABP.IO Design! + +We've been working on a new design for the [abp.io](https://abp.io/) websites for a while. We are adding the final touches; the new design will be live very soon. Here's a screenshot from the design work: + +![new-abp-io-design.png](04c9be6a819f74d7d7003a0165ff0d88.png) + +The [ABP Commercial](https://commercial.abp.io/) and [ABP Community](https://community.abp.io/) websites will also have new designs as part of this update. + +### Other Changes + +Here are some other notable changes that come with this release: + +* Support markdown in [CMS-Kit comments ](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments)feature ([#10792](https://github.com/abpframework/abp/pull/10792)) +* Used file scoped namespaces for all the ABP Framework source code :) ([#10552](https://github.com/abpframework/abp/pull/10696)) + +All issues & PRs in [5.1 milesone](https://github.com/abpframework/abp/milestone/60?closed=1). + +### About ABP Commercial + +The core team is also working on ABP Commercial (which provides pre-built modules, themes, tooling and support on top of the ABP Framework). We've done a lot of minor improvements and fixes to the modules and tooling. + +There's some exciting news about the **LeptonX theme**; We are working on making it available in the **MVC (Razor Pages)** and **Blazor** UI options too (in addition to Angular UI). We are also adding more components, layout options, demo pages, etc... We are planning to release a beta version in the next weeks. Here's an animated GIF from the dashboard we've prepared as a demonstration: + +![leptonx-dash-2.png](1b50e6d6317b84f963ab3a016602cca7.png) + +If you are wondering what is the LeptonX project, please check out this [blog post](https://blog.abp.io/abp/LeptonX-Theme-for-ABP-Framework-Alpha-Release). + +As another visible functionality, we've added a new feature to the [CMS Kit Pro](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) module that is used to forward a URL to another URL. This is a screenshot from the management UI: + +![url-forward.png](3104802a0898db35a15c3a0166002a3f.png) + +This feature can be used to create short URLs in your application (like URL shortening services providers) or forward old pages to their new URLs. + +In addition to the new features shipped in every minor version, we are working on long-term projects for ABP.IO Platform and ABP Commercial (a little secret for now :). We will have announcements once these projects get more stable. + +## Community News + +### ABP Community Talks 2021.1 + +![abp-community-talks-2022-1.png](79374b567169e34b283f3a016603708f.png) + +This is the second episode of the ABP Community Talks and we are talking about microservice development with the ABP Framework, based on the [eShopOnAbp](https://github.com/abpframework/eShopOnAbp) reference solution. We will also briefly talk about the changes that come with ABP version 5.1. This **live meeting** will be on **January 20, 2022, 17:00 (UTC)** on YouTube. + +**Join this event on the Kommunity platform: https://kommunity.com/volosoft/events/abp-community-talks-20221-microservice-development-acd0f44b** + +You can also [subscribe to Volosoft YouTube channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) for reminders of further ABP events and videos. + +### New ABP Community Posts + +Here are some of the recent posts added to the [ABP community](https://community.abp.io/): + +* [Minimal API development with the ABP Framework](https://community.abp.io/articles/minimal-api-with-abp-hello-world-part-1-sg5i44p8) by [@antosubash](https://github.com/antosubash) (three parts, video tutorial). +* [Integrating the Syncfusion MVC Components to the ABP MVC UI](https://community.abp.io/articles/integrating-the-syncfusion-mvc-components-to-the-abp-mvc-ui-0gpkr1if) by [@EngincanV](https://github.com/EngincanV). +* [Add Tailwind CSS to your ABP Blazor UI](https://community.abp.io/articles/add-tailwindcss-to-your-abp-blazor-ui-vidiwzcy) by [@antosubash](https://github.com/antosubash) (video tutorial). +* [Import external users into the users Table from an ABP Framework application](https://community.abp.io/articles/import-external-users-into-the-users-table-from-an-abp-framework-application-7lnyw415) by [@bartvanhoey](https://github.com/bartvanhoey). + +Thanks to the ABP Community for all the contents they have published. You can also [post your ABP and .NET related (text or video) contents](https://community.abp.io/articles/submit) to the ABP Community. + +## Conclusion + +In this blog post, I summarized the news about the new version and the ABP Community. Please try it and provide feedback by opening issues on the [GitHub repository](https://github.com/abpframework/abp). Thank you all! \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-02-06-How-to-Hide-ABP-Related-Endpoints-on-Swagger-UI/POST.md b/docs/en/Community-Articles/2022-02-06-How-to-Hide-ABP-Related-Endpoints-on-Swagger-UI/POST.md index a6ad7596d4..d4102d8256 100644 --- a/docs/en/Community-Articles/2022-02-06-How-to-Hide-ABP-Related-Endpoints-on-Swagger-UI/POST.md +++ b/docs/en/Community-Articles/2022-02-06-How-to-Hide-ABP-Related-Endpoints-on-Swagger-UI/POST.md @@ -8,6 +8,12 @@ In the issue, there are helpful comments about hiding the ABP related endpoints I thought it would be better to enable/disable showing endpoints on runtime by simply selecting a checkbox on the Setting Management page and in this article I wanted to show you how, so let's dive in. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Source Code You can find the source code of the application at https://github.com/EngincanV/ABP-Hide-Swagger-Endpoint-Demo. @@ -445,6 +451,10 @@ services.AddAbpSwaggerGen( > For more info, please see the [Swagger Integration](https://docs.abp.io/en/abp/latest/API/Swagger-Integration#hide-abp-endpoints-on-swagger-ui) docs. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv --- Thanks for reading. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/1c453b5c819a46c9e8583a028146680e.png b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/1c453b5c819a46c9e8583a028146680e.png new file mode 100644 index 0000000000..ffd64b4ec0 Binary files /dev/null and b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/1c453b5c819a46c9e8583a028146680e.png differ diff --git a/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/48b7bb8717413c1f78323a028146a77b.png b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/48b7bb8717413c1f78323a028146a77b.png new file mode 100644 index 0000000000..a0cf54ee9a Binary files /dev/null and b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/48b7bb8717413c1f78323a028146a77b.png differ diff --git a/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/59e40287b10caca3a7b33a0281462c37.png b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/59e40287b10caca3a7b33a0281462c37.png new file mode 100644 index 0000000000..61f3f3edf5 Binary files /dev/null and b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/59e40287b10caca3a7b33a0281462c37.png differ diff --git a/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/9168547a7e70ca84f1a53a028145fc71.png b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/9168547a7e70ca84f1a53a028145fc71.png new file mode 100644 index 0000000000..d2cd8b67bb Binary files /dev/null and b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/9168547a7e70ca84f1a53a028145fc71.png differ diff --git a/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/a4df6d07407c698f36a53a02814594e7.png b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/a4df6d07407c698f36a53a02814594e7.png new file mode 100644 index 0000000000..6005edde7f Binary files /dev/null and b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/a4df6d07407c698f36a53a02814594e7.png differ diff --git a/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/post.md b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/post.md new file mode 100644 index 0000000000..e43ba9a529 --- /dev/null +++ b/docs/en/Community-Articles/2022-03-09-abpio-platform-52-rc-has-been-published/post.md @@ -0,0 +1,195 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **5.2 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [5.2.0 Stable](https://github.com/abpframework/abp/milestone/66) version is April 05, 2022**. + +Please try this version and provide feedback for a more stable ABP version 5.2! Thank you all. + +## Get Started with the 5.2 RC + +Follow the steps below to try the version 5.2.0 RC today: + +1) **Upgrade** the ABP CLI to version `5.2.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 5.2.0-rc.1 +```` + +​ **or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 5.2.0-rc.1 +```` + +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/latest/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**. + +You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. + +## Migration Guides + +Please see the migration guides if you are upgrading from 5.x versions: + +* [ABP Framework 5.x to 5.2 migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp-5_2) +* [ABP Commercial 5.x to 5.2 migration guide](https://docs.abp.io/en/commercial/5.2/migration-guides/index) + +## What's New with ABP Framework 5.2? + +In this section, I will introduce some major features released with this version. Here, a brief list of titles explained in the next sections: + +* Single-layer Solution Template +* API Versioning +* libs Folder Has been Removed from Source Control +* Hiding the Default ABP Endpoints from Swagger UI +* Custom Global CSS and JavaScript for the CMS Kit module +* Other news + + +Let's begin with the first item. + +### Single-layer Solution Template + +ABP's [application startup template](https://docs.abp.io/en/abp/latest/Startup-Templates/Application) is a well-organized and layered solution to create maintainable business applications. However, some developers find it a little bit complex for simple and short-term applications. For such applications, we've created a new startup template that has no layering and built as simple as possible. It has the same functionality, features and modules on runtime, but the development model is minimal and everything is in the single project (`csproj`), as shown in the following figure: + +![single-layer-solution.png](a4df6d07407c698f36a53a02814594e7.png) + +Use the `app-nolayers` as the template name while creating your solution: + +````bash +abp new BookStore -t app-nolayers --preview +```` + +[ABP Commercial](https://commercial.abp.io/) developers can use the `app-nolayers-pro` as the startup template: + +````csharp +abp new BookStore -t app-nolayers-pro --preview +```` + +> There is a bug for the `app-nolayers-pro` related to the licensing system, which will be fixed with 5.2.0-rc.2: `appsettings.secrets.json` is missing in the project folder (should be near to `appsettings.json` and contains the license code normally). As a workaround, create a new solution with the layered startup template, find and copy that file to the single-layer solution. + +One note about the single-layer project is it doesn't have Blazor WebAssembly UI, because it requires 3 projects at least (one server-side, one UI and one shared library project between these two). We will consider to add Blazor UI support based on your feedback. You can continue to develop Blazor WASM projects using the standard layered solution template. + +#### Database Migrations for EF Core + +After creating your solution, you need to create the database before running the application. We've added a parameter to the application that can be specified to migrate the database and seed the initial data. Open the project's directory (that contains the `csproj` file) in a command-line terminal and type the following command: + +````bash +dotnet run --migrate-database +```` + +It will run, migrate the database and exit. You can then run the application as normal. + +You could use the standard `dotnet ef database update` command (or `Update-Database` command in Visual Studio's Package Manager Console). It can successfully create the database tables. However, it doesn't seed the initial data that is necessary to run the application. + +To keep the solution simple, we haven't added an external application (like the `DbMigrator` in the layered application startup template) to migrate the database. + +Using the same application to migrate the database is simple and useful for development environment, and it can also be used in production environment. However, there are other ways of migrating a database. Please read more on [Microsoft's documentation](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations). + +#### Other UI and Database Options + +The new single-layer solution template also supports Angular and Blazor UI, and MongoDB for the database side. For the UI, you can use `mvc` (default), `angular` or `blazor-server` with the `-u` (or `--ui`) parameter. For the database provider, you can use `ef` (default) or `mongodb` with the `-d` (or `--database-provider`) parameter. Example: + +````bash +abp new BookStore -t app-nolayers -u angular -d mongodb --preview +```` + +This will create a single layer template with Angular as the UI framework and MongoDB as the database provider. + +#### Single-Layer Tutorial + +[Hamza Albreem](https://twitter.com/st_braim) has created a video tutorial to explain how to develop a simple application with this startup template. + +![video-single-layer-tutorial.png](9168547a7e70ca84f1a53a028145fc71.png) + +You can [watch it here](https://community.abp.io/posts/developing-a-minimalist-application-with-the-abp-framework-mvad01ca). + +### API Versioning + +API versioning has always been possible with the ABP Framework, but we haven't had a documentation for it. With version 5.2, we've created a document to explain how to implement API versioning for your applications and add versioning support to your standard application service classes. See the [documentation here](https://docs.abp.io/en/abp/5.2/API/API-Versioning). + +### libs Folder Has been Removed from Source Control + +> **NOTICE: This can be a breaking change for your development environment and CI/CD pipelines. So, please read it carefully and take the necessary actions.** + +When you create solutions with MVC (Razor Pages) or Blazor Server UI, your application will have a `wwwroot/libs` folder in the UI project as shown below: + +![libs-folder.png](59e40287b10caca3a7b33a0281462c37.png) + +The `libs` folder contains all the client-side (mostly JavaScript and CSS) library dependencies. For example, in the figure above, the `bootstap` folder contains the necessary files for the Bootstrap library. The folder's content is copied from the `node_modules` folder (it only copies the minimum files to make the library work, not the whole folder) with ABP CLI's `abp install-libs` command. + +Before version 5.2, the `libs` folder was coming with the startup template and committed into your source control system (e.g. Git). With version 5.2, this folder is excluded from the source control by default, so every developer getting the solution must run `abp install-libs` in the UI project's root directory to install these libraries. This approach saves a huge amount of size of the solution. For example, the initial size of an MVC UI application reduces from `9.83MB` to `0.23MB` (you read it right!). + +When you create a new solution with ABP CLI, `abp install-libs` command is automatically executed, so your application directly works. However, if your teammates (or CI/CD system) get the solution from the source control, they should run the `abp install-libs` before running the solution. If you don't want that, you can simply remove the `**/wwwroot/libs/*` line from the `.gitignore` file in the root folder of your solution, then the `libs` folder is added to your source control again (if you are using a source control system other than Git, you should apply your system's rules to include/exclude that folder). + +### Hiding the Default ABP Endpoints from Swagger UI + +[Engincan Veske](https://twitter.com/EngincanVeske) had written [an article](https://community.abp.io/posts/how-to-hide-abp-related-endpoints-on-swagger-ui-mb2w01fe) to explain how to hide ABP's default endpoints from Swagger UI. Then We thought that could be a good built-in option in the ABP Framework and added a `HideAbpEndpoints` method to the `AddAbpSwaggerGen` method, which can be used as in the following code example: + +````csharp +services.AddAbpSwaggerGen( + options => + { + //... other options + + //Hides ABP Related endpoints on Swagger UI + options.HideAbpEndpoints(); + } +) +```` + +After that, ABP's default endpoints will still be functional, but will be hidden in Swagger UI. + +### Custom Global CSS and JavaScript for the CMS Kit module + +We are improving the [CMS Kit module](https://docs.abp.io/en/abp/5.2/Modules/Cms-Kit/Index) and adding new features constantly. A new feature with version 5.2 is a global resources system, where you can write custom JavaScript or CSS code on the application's UI (added a new page for it), which will be immediately available in all your application pages: + +![cms-kit-global-resources.png](1c453b5c819a46c9e8583a028146680e.png) + +In this way, you can customize your application's look and behavior on runtime. See [the documentation](https://docs.abp.io/en/abp/5.2/Modules/Cms-Kit/Global-Resources) for more information. + +> Note that the [pages](https://docs.abp.io/en/abp/5.2/Modules/Cms-Kit/Pages) feature already have a page-basis script/style editor. But this new feature allows you to write script/style that is applied to all pages of your application. + +### Other news + +* Upgraded the [Blazorise](https://blazorise.com/) library to v1.0 for Blazor UI. After the upgrade, ensure that all Blazorise-related packages are using v1.0 in your application. + +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.2.0-rc.1), that contains a list of all issues and pull requests closed with this version. + +## What's New with ABP Commercial 5.2? + +We've also made many enhancements for [ABP Commercial](https://commercial.abp.io/), and also made the necessary changes and improvements to align with the v5.2 release of the ABP Framework. For example, the **single-layer solution template** is also available for ABP Commercial as explained above. + +### Many to Many Relations on Code Generation + +One exciting new feature with ABP Commercial v5.2 is supporting many-to-many entity relations while generating CRUD code with [ABP Suite](https://commercial.abp.io/tools/suite). + +When you open ABP Suite v5.2, you will see an "Add navigation collection" button in the Navigation tab. Here, you can click that button, select the target entity and other options: + +![suite-many-to-many-entity-relation.png](48b7bb8717413c1f78323a028146a77b.png) + +With this new feature, you can automatically generate advanced user interfaces without touching the code, then customize the generated code to implement your business logic. + +## Community News + +We organized the 3rd live [ABP Community Talks](https://community.abp.io/events) event on February 23rd. ABP community has a good interest in these events and we will continue to organize such a live event in every month. March's event will be announced in a few days. [Follow us on twitter](https://twitter.com/abpframework). + +[ABP Community](https://community.abp.io/) website is being a huge resource of articles and video tutorials on the ABP Framework and .NET. There have been 93 articles/tutorials submitted so far. Here's a list of a few contents posted in the last weeks: + +* [Ahmet Urel](https://twitter.com/YellowDraqon) submitted a series of articles to demonstrate the usage of [MudBlazor](https://www.mudblazor.com/) library with the ABP Framework Blazor UI: [Part 1](https://community.abp.io/posts/mudblazor-theme-in-abp-blazor-webassembly-ae23zz17), [Part 2](https://community.abp.io/posts/mudblazor-theme-in-abp-blazor-webassembly-part-2-tkvrvyvm) and [Part 3](https://community.abp.io/posts/mudblazor-theme-in-abp-blazor-webassembly-part-3-c8hwx00l). +* [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) has created two articles for ABP & **.NET MAUI** integration: See [Part 1](https://community.abp.io/posts/integrating-maui-client-via-using-openid-connect-aqjjwsdf) and [Part 2](https://community.abp.io/posts/using-abp-client-proxies-in-maui-with-openid-connect-em7x1s8k). [Bart Van Hoey](https://twitter.com/bartvanhoey) also created [an article](https://community.abp.io/posts/abp-framework-consumed-by-a-.net-maui-app-e74fmblw) for .NET MAUI and the ABP Framework. +* [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) has also created [an article](https://community.abp.io/posts/using-autofilterer-with-abp-framework-uuqv81jm) to demonstrate how to use his own open source [AutoFilterer](https://github.com/enisn/AutoFilterer) library with the ABP Framework. +* [Jonathan Potts](https://github.com/jonathanpotts) has created his first ABP Community article that shows how to use Bootswatch themes with the ABP Framework. [See it here](https://community.abp.io/posts/customizing-the-abp-basic-theme-with-bootswatch-4luoqzr0). + +Thanks to all the contributors. It is appreciated if you want to submit your post and share your knowledge with the ABP community: https://community.abp.io/posts/create + +## Conclusion + +This version was mostly about minor features and enhancements for existing features, and getting the framework, architecture and solution structure more mature. Currently, we are working on middle and long term features, changes and goals. You can find most of them on the [road map here](https://docs.abp.io/en/abp/5.2/Road-Map). + +The planned release date for the [5.2.0 Stable](https://github.com/abpframework/abp/milestone/66) version is April 05, 2022. Please try the ABP v5.2 RC and provide feedback to have a more stable release. diff --git a/docs/en/Community-Articles/2022-04-05-abpio-platform-52-final-has-been-released/post.md b/docs/en/Community-Articles/2022-04-05-abpio-platform-52-final-has-been-released/post.md new file mode 100644 index 0000000000..52849e78d1 --- /dev/null +++ b/docs/en/Community-Articles/2022-04-05-abpio-platform-52-final-has-been-released/post.md @@ -0,0 +1,49 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 5.2 versions have been released today. + +## What's New With 5.2? + +Since all the new features are already explained in details with the [5.2 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) for all the features and enhancements. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 5.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 more. + +## 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. + +## Migration Guide + +Check [the migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp-5_2) for the applications with the version 5.x upgrading to the version 5.2. + +## About the Next Version + +The next feature version will be 5.3. It is planned to release the 5.3 RC (Release Candidate) on May 03 and the final version on May 31, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). + +Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problem with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index b16d6bd9f1..cf8c3c122a 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -2,6 +2,12 @@ In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be implemented in an ABP project. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Creating the Solution For this article, we will create a simple BookStore application and add CRUD functionality to the pages. Hence we deal with the concurrency situation. @@ -546,3 +552,9 @@ Then we can run the application, navigate to the **/Books** endpoint and see the * After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. * The second user should close and re-open the model to get the last state of the record and then they can make changes to the current record. + +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-04-18-abp-community-talks-20223/b8cdde094516786c107d3a0359023e6c.png b/docs/en/Community-Articles/2022-04-18-abp-community-talks-20223/b8cdde094516786c107d3a0359023e6c.png new file mode 100644 index 0000000000..cc1deb74c1 Binary files /dev/null and b/docs/en/Community-Articles/2022-04-18-abp-community-talks-20223/b8cdde094516786c107d3a0359023e6c.png differ diff --git a/docs/en/Community-Articles/2022-04-18-abp-community-talks-20223/post.md b/docs/en/Community-Articles/2022-04-18-abp-community-talks-20223/post.md new file mode 100644 index 0000000000..fcd7043594 --- /dev/null +++ b/docs/en/Community-Articles/2022-04-18-abp-community-talks-20223/post.md @@ -0,0 +1,66 @@ + ABP Community Talks is the event where we gather as ABP Framework’s Community members to talk, and share ideas on a monthly basis. Before the talks, we collect ideas from our contributors, trending topics in the industry, ABP Platform’s news and updates, and more, to select the topics that will be talked about in every episode. After the topics are certain, we announce them on our social media and community channels. + + You are always welcome and encouraged to join, ask questions, make suggestions, or even be in the talks to make presentations about the topics that you think would be beneficial for the ABP Community. + +###### ABP Community Talks Facts: + * ABP Community Talks are scheduled to be held on a monthly basis. + * ABP Community Talks are and always will be completely free to attend. Everyone is welcome to join, ask questions and make suggestions before, during and after the event. + * ABP Community Talks are created and announced on [Kommunity](https://kommunity.com/volosoft/events). + * ABP Community Talks are announced regularly on [ABP Framework Twitter Account](https://twitter.com/abpframework), [Volosoft LinkedIn account](https://www.linkedin.com/company/volosoft), [Volosoft Facebook Account](https://www.facebook.com/volosoftcompany), [ABP Community Discord Server](https://discord.gg/CrYrd5vcGh). We highly encourage everyone to follow us and make suggestions. + * ABP Community Talks are available to watch after the event on YouTube. See [ABP Community Talks YouTube Playlist](https://www.youtube.com/playlist?list=PLsNclT2aHJcOsPustEkzG6DywiO8eh0lB). + +# ABP Community Talks 2022.3 + +> [WATCH FULL ABP Community Talks 2022.3](https://www.youtube.com/watch?v=lB3iXQccaV4) + + This was the 4th episode of ABP Community Talks in which [Jon Galloway](https://twitter.com/jongalloway), [Lee Richardson,](https://twitter.com/lprichar) and [Anto Subash](https://twitter.com/antosubash) being present as speakers! We talked about [ABP 5.2 Release](https://blog.abp.io/abp/ABP-IO-Platform-5-2-Final-Has-Been-Released), Domain-Driven Design, [Mastering ABP Framework Book](https://www.packtpub.com/product/mastering-abp-framework/9781801079242), the [EventHub solution](https://www.openeventhub.com/). + +![164219611-2c46e9d8-1689-4c5f-a783-42f18003f239.png](b8cdde094516786c107d3a0359023e6c.png) + + Special thanks to our sponsors [.Net Foundation](https://dotnetfoundation.org/) and [Packt Publishing](https://www.packtpub.com/). + +# The EventHub Solution + EventHub solution is an open-source reference application for implementing Domain Driven Design with the ABP Framework where you can reach from [EventHub’s GitHub Page](https://github.com/volosoft/eventhub). It is created for the ABP Framework book, therefore, its source code is explained in the Mastering ABP Framework Book. + + Since it is thought of as a real-world, live application, it is accessible from [here](https://www.openeventhub.com/) and configured to run with Kubernetes & Project Tye. It consists of two applications. The first is Main Website to be used by end-users, built with ASP.NET Core Razor Pages, and Admin Application built with Blazor WASM. There is also an authentication server that is built with the IdentityServer 4. Additionally, Two API endpoints (one for each web application), and Background Service. + + You can use the EventHub solution to create actual events like Meet Ups or bigger events where people can register, see your previous and upcoming events, you can arrange reminder emails, and do much more! + + If you would like to use the EventHub solution, you can take a look at the source code from [EventHub’s Github Page](https://github.com/volosoft/eventhub). For in depth information, you can [buy the Mastering ABP Framework Book](https://www.packtpub.com/product/mastering-abp-framework/9781801079242). + +# Mastering the ABP Book + The Mastering ABP Book can be referenced for every detail. The book takes you from the beginning, explaining all the concepts and features and correct order and gives you a good understanding of ABP Framework and its philosophy. It also discussed dot.net and general software development perspectives, alternatives approaches and minimal. + +###### Table of Content: +**Part 1** Introduction +
1. Modern Software Development and ABP Framework +
2. Getting Started with ABP Framework +
3. Step-By-Step Application Development +
4. Understanding the Reference Solution + +**Part 2** Fundamentals of ABP Framework +
5. Exploring the ASP.NET Core and ABP Infrastructure +
6. Working with the Data Access Infrastructure +
7. Exploring Cross-Cutting Concerns +
8. Using the Features and Services of ABP + +**Part 3** Implementing Domain-Driven Design +
9. Understanding Domain-Driven Design +
10. DDD — The Domain Layer +
11. DDD — The Application Layer + +**Part 4** User Interface and API Development +
12. Working with MVC/Razor Pages +
13. Working with the Blazor WebAssembly UI +
14. Building HTTP APIs and Real-Time Services + +**Part 5** Miscellaneous +
15. Working with Modularity +
16. Implementing Multi-Tenancy +
17. Building Automated Tests + +# How to purchase the Mastering ABP Framework book +You can have 25% off on Mastering ABP Framework paperback with “**25ABP**” Discount Code +* Discount is valid between April 7-May 7, 2022 to [purchase in Packt Publishing](https://www.packtpub.com/product/mastering-abp-framework/9781801079242) with 25% off, +* Discount is valid between April 7-April 21, 2022 to [purchase in Amazon US](https://www.amazon.com/gp/mpc/A2945M1X0HIWNL) with 25% off using “**25ABP**” Discount code. + diff --git a/docs/en/Community-Articles/2022-04-19-official-abp-discord-server-is-here/post.md b/docs/en/Community-Articles/2022-04-19-official-abp-discord-server-is-here/post.md new file mode 100644 index 0000000000..5d099cc1c3 --- /dev/null +++ b/docs/en/Community-Articles/2022-04-19-official-abp-discord-server-is-here/post.md @@ -0,0 +1,65 @@ + We are excited to announce Official ABP Discord Server is created! You can join the ABP Discord Community by clicking [here](https://discord.gg/wbcQAsUrs9). + + In the first week of opening ABP Discord Server, member amount reached more than 500. We are grateful to and blessed by your interest. Thanks to all of you! This also made us sure that an ABP Discord Server was actually a need for the community members to interact with each other. + + ABP Community is growing by the second, and we are grateful for all your contributions towards ABP Framework. We noticed that ABP Community’s communication were significant on ABP Framework’s GitHub, we wanted to take it to the next level and have an area where all of us can easily chat with each other. +> [Join ABP Discord Server Now](https://discord.gg/wbcQAsUrs9) + +# What Can You Do on ABP Community Discord Server? + + ABP Discord Server is a multi-channel official server consisting ABP Core Team, community members and anyone who is interested in following ABP Platform closer. + + In ABP Discord Server, we plan to have: +* Discord-special events such as mini talks, discussions on stage channel. +* Showcases for community members, so it would be inspiring for others, and if you want to brag a little bit about your work, you can do it, too :). +* An area where people can look for developers who are experienced in ABP Framework. +* People socialize with each other to talk about common interests and just chat in general. +* Make announcements, so the ABP Discord Server community members would be the first ones to hear about the latest ABP-related news. +* Real-time GitHub issues to make it easier for community members to follow ABP Framework GitHub. +* Collect suggestions to broaden the variety of what we have to offer to our community. + + To demonstrate the current use of ABP Discord Server, it is better to mention open channels with their purposes which are listed below. ABP Discord Server is not limited to include only these channels, we will improve it as needed. + +- **Info:** This is the area where moderators post about rules, announcements, partners, etc + +- **Community:** This is where the actual magic of ABP Discord Server happens. + * **General:** As you can tell from its name, this is the channel where you can talk about ABP in general. + * **Ideas:** In this channel, you can give suggestions or share your ideas with ABP Core Team members on how to improve ABP platform, community members’ work, Discord Server, etc. + * **Tips:** In this channel, you can share the tips you think would be beneficial for the other community members. (Your first tip before entering ABP Discord Server: ABP Core Team also shares tips/new documents as being members of ABP Community) + * **Questions:** We know it can be long to get answers from other community members via ABP Framework GitHub issues. So, you can use Questions channel as you use GitHub issues page to get answers from community members more quickly. + * **Help:** In this channel, you can ask for other members’ help or simply offer help to other community members. (Please not that this is not a support channel from ABP Core Team) + * **UI-Angular:** If you are using ABP Framework with Angular, this is the place for you to talk about anything related Angular. + * **UI-Blazor:** If you are using ABP Framework with Blazor, this is the place for you to talk about anything related to Blazor. + * **UI-MVC:** If you are using ABP Framework with MVC, this is the place for you to talk about anything related to MVC. + * **ABP Community Talks:** As you may or may not know, we, as ABP Core Team, are doing a Community Talks on a monthly basis for you in which we talk about the latest news, trends, etc. In this channel, we ask for your opinion to select the topics for the following episodes, make announcements regarding ABP Community Talks. You can reach to Community Talks playlist from [here](https://youtube.com/playlist?list=PLsNclT2aHJcOsPustEkzG6DywiO8eh0lB). + * **Showcase:** In this channel, you can share what you have created using ABP Framework, your tutorials, posts related to ABP Framework, and brag about your work overall if you want to :). + * **Jobs:** It is created especially to simplify the recruitment process of ABP Framework experienced developers with employers. You can use this channel to look for opportunities or seek for developers who are experienced in ABP Framework. + * **Github Issues:** If you want to follow ABP Framework GitHub closer, this is the channel for you. Opened pull requests, closed pull requests, opened issues, closed issues are automatically published in here on real-time. + * **Dotnet General:** If you want to talk about topics that include Dotnet in general, rather than being specific for ABP Framework, you can use this channel. + * **ASP.NET Boilerplate:** Since ABP is the framework that is built on ASP.NET Boilerplate(which is created by ABP Core Team, also). So, even if you are not a developer of ABP Platform, but ASP.NET Boilerplate; you are welcome to talk about Boilerplate in this channel! + * **Off-Topic:** This is the channel where you are free to talk about anything! When we say anything, we mean anything! +- **Voice Channel:** There are 4 voice channels for community members to have public voice calls with each other to talk about anything they would like to. And, 1 stage channel to take Special-for-Discord Events by ABP Core Team. + +# How Can You Join To ABP Discord Server? + + You can join ABP Discord Server by simply clicking to [https://discord.gg/abp](https://discord.gg/wbcQAsUrs9). + + We are excited to welcome you in ABP Discord Server! + +> [Click Here to Join ABP Discord Server Now](https://discord.gg/wbcQAsUrs9) + +### What is Discord? + + Discord is a free instant communication platform where people can send text messages, make voice calls, video chat, send files, and many more. Discord itself defines the platform as “Your Place to Talk and Hang Out”. You can say, it works like any other chat app such as Skype, or Slack. Despite this remains true, that’s not all Discord has to offer. + +### What is Discord Server? + + Discord pivoted to a place where communities gather in specific servers to communicate with people who has common interests on Discord Servers in which users can socialize and exchange ideas, share tips and simply chat with each other about that specific topic they are interested in. + + Usually, Discord Servers include multi-channels to divide topics to be discussed within. To give an example, there are “General”, “Ideas”, “Tips”, “Questions”, “UI-Angular”, “UI-Blazor”, “UI-MVC”, and many more channels in ABP Discord Community. This way, specific ideas about specific topics are easier to follow and read for everyone, and the topics are not lost, easier to follow and read for everyone. + +### What are Discord Servers Used For? + + In Discord Servers, users communicate with each other in a way that is convenient for them. Discord allows people to make voice calls, video chats, or simply text messages. Communities are created by wether fans of a specific topic(games, open-source frameworks, NFT, etc.) or by the official authorities of that specific topic(game creator, framework core team, creator of a token, etc). + + In ABP Community Discord Server’s case, it is a server created by official authorities with core team being present in the server along with the community members. Even though it is created for the framework community members to communicate with each other easily, everyone who is interested in following the latest news about ABP Platform are welcome to [join ABP Discord Server](https://discord.gg/wbcQAsUrs9)! \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/1b869f1f0b84f697a7c93a03bfaf6d80.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/1b869f1f0b84f697a7c93a03bfaf6d80.png new file mode 100644 index 0000000000..1f048819b3 Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/1b869f1f0b84f697a7c93a03bfaf6d80.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/3e5a0fc742becf26e4f63a03bfaed423.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/3e5a0fc742becf26e4f63a03bfaed423.png new file mode 100644 index 0000000000..1015f7ce18 Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/3e5a0fc742becf26e4f63a03bfaed423.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/4a70b5a48f8355ad109b3a03bfafa75a.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/4a70b5a48f8355ad109b3a03bfafa75a.png new file mode 100644 index 0000000000..bee6caac75 Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/4a70b5a48f8355ad109b3a03bfafa75a.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/5b994aa1669cb6cea61a3a03bfae47a3.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/5b994aa1669cb6cea61a3a03bfae47a3.png new file mode 100644 index 0000000000..736d3b7a88 Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/5b994aa1669cb6cea61a3a03bfae47a3.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/5c10f5ca174e232103ac3a03bfaff95e.gif b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/5c10f5ca174e232103ac3a03bfaff95e.gif new file mode 100644 index 0000000000..8f301559ee Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/5c10f5ca174e232103ac3a03bfaff95e.gif differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/b77ff680a3fcd77048863a03bfaf4694.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/b77ff680a3fcd77048863a03bfaf4694.png new file mode 100644 index 0000000000..5beb5551ac Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/b77ff680a3fcd77048863a03bfaf4694.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/c905db6b3949f07077b63a03bfb1fd0f.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/c905db6b3949f07077b63a03bfb1fd0f.png new file mode 100644 index 0000000000..ee5f374ff4 Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/c905db6b3949f07077b63a03bfb1fd0f.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/ccec571a20bc6673befe3a03bfaf1878.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/ccec571a20bc6673befe3a03bfaf1878.png new file mode 100644 index 0000000000..c617f9348a Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/ccec571a20bc6673befe3a03bfaf1878.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/e4464b33ec38e091736b3a03bfae9ab3.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/e4464b33ec38e091736b3a03bfae9ab3.png new file mode 100644 index 0000000000..124aa35ecf Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/e4464b33ec38e091736b3a03bfae9ab3.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/linkedin-twitter.png b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/linkedin-twitter.png new file mode 100644 index 0000000000..8c731bd878 Binary files /dev/null and b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/linkedin-twitter.png differ diff --git a/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/post.md b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/post.md new file mode 100644 index 0000000000..eb157010b8 --- /dev/null +++ b/docs/en/Community-Articles/2022-05-10-abpio-platform-53-rc-has-been-published/post.md @@ -0,0 +1,257 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **5.3 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [5.3.0 Stable](https://github.com/abpframework/abp/milestone/69) version is June 14, 2022**. + +Please try this version and provide feedback for a more stable ABP version 5.3! Thank you all. + +## Get Started with the 5.3 RC + +Follow the steps below to try version 5.3.0 RC today: + +1) **Upgrade** the ABP CLI to version `5.3.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 5.3.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 5.3.0-rc.1 +```` + +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/latest/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**. + +You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. + +## Migration Guides + +This version comes with a few breaking changes, so please see the migration guides if you are upgrading from **v5.2**: + +* [ABP Framework 5.2 to 5.3 migration guide](https://docs.abp.io/en/abp/5.3/Migration-Guides/Abp-5_3) +* [ABP Commercial 5.2 to 5.3 migration guide](https://docs.abp.io/en/commercial/5.3/migration-guides/v5_3) + +## What's New with ABP Framework 5.3? + +In this section, I will introduce some major features released with this version. Here is a brief list of titles explained in the next sections: + +* Single-layer option added to the [*Get Started*](https://abp.io/get-started) page +* PWA Support for Startup Templates +* Introduced the `Volo.Abp.Gdpr.Abstractions` package +* Batch Publish Events from Outbox to the Event Bus +* Improvements on **eShopOnAbp** Project & E-Book Announcement +* LeptonX Lite Documentations & Project Status & Roadmap +* OpenIddict Module & Keycloack Integration +* Deployment Documentations +* Other News + +### Single-layer Option on *Get Started* Page + +We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've also added this startup template option to the *Get Started* page. + +*You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page:* + +![app-nolayers-get-started.png](5b994aa1669cb6cea61a3a03bfae47a3.png) + +### PWA Support for Startup Templates + +ABP v5.3 application startup template now supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. + +Example: + +```bash +abp new MyProgressiveWebApp -t app -u blazor --pwa +``` + +### Introducing the `Volo.Abp.Gdpr.Abstractions` Package + +A new `Volo.Abp.Gdpr.Abstractions` package has been added to the framework. This is an abstraction package, so doesn't contain any actual GDPR implementation. It defines some classes and interfaces to put a standard for who want to implement a GDPR module that can run in a modular or microservice system. + +At that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. + +> Please see the **GDPR Module** section below to learn more about this module. + +### Batch Publish Events from Outbox to the Event Bus + +We introduced the "Transactional Outbox & Inbox Patterns" in [**ABP v5.0**](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), it was one of the most awaited features by several software developers. + +We've made some optimizations for the **Batch Event Publishing** in this version, you can examine the related development from [here](https://github.com/abpframework/abp/pull/11243). After the optimization, the results are impressive. It is enabled by default (if you have configured [event outbox](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#outbox-inbox-for-transactional-events)), so you don't need to any manual configuration. + +### Improvements on eShopOnAbp Project & E-Book Announcement + +There are some developments on the [eShopOnAbp project](https://github.com/abpframework/eShopOnAbp) made in this version. You can see the brief descriptions of some of the improvements below: + +* Local certificates have been created to use while working in Kubernetes and also Helm Charts have been updated. See [#107](https://github.com/abpframework/eShopOnAbp/pull/107). +* The Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). +* Database migration event handlers have been removed and "Distributed Locking" is now used for database migrations. See [#85](https://github.com/abpframework/eShopOnAbp/pull/85) and [#102](https://github.com/abpframework/eShopOnAbp/pull/102). +* Switched from Ocelot to YARP as the gateway. See [#97](https://github.com/abpframework/eShopOnAbp/pull/97). + +We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the eShopOnAbp project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. + +We're planning to create this book in nine chapters and make it available after the third chapter is written. After that, you will be able to download this free e-book from the [abp.io](https://abp.io/) website. + +### LeptonX Lite Documentations & Project Status & Roadmap + +It is finally here, we've released the **1.0.0-beta.1** and **1.0.0-beta.2** versions for the **LeptonX Lite**. + +![leptonx-lite-documentations.png](e4464b33ec38e091736b3a03bfae9ab3.png) + +Lepton X Lite documents have been written for the three UI types within this version. You can see the related documentation from the screenshot above. You can follow these documents and try the new **LeptonX Lite Theme**. + +We don't suggest using the **beta.1** and **beta.2** versions on production but we highly demand you to test **LeptonX Lite** and provide feedback to us. It's really important for us to be able to release a more stable version. Thanks in advance. + +For the following versions (beta.3 and RC versions), we will focus on: + +* Fixing the reported bugs from the community +* Providing documentations as much as possible +* Adding new custom pages to the demo + +### OpenIddict Module & Keycloack Integration + +We have [announced the plan of replacing the IdentityServer](https://github.com/abpframework/abp/issues/11989). ABP currently uses **IdentityServer4** to add **OAuth** features as built-in on the server-side. However, since *IdentityServer4's support ends at the end of the year 2022*. Its replacement is Duende IdentityServer, which is not a free software anymore. (see [more](https://blog.duendesoftware.com/posts/20220111_fair_trade/)) + +Therefore, we've decided to completely drop the **IdentityServer4** from the ABP platform and implement the [OpenIddict](https://github.com/openiddict/openiddict-core) and install onto the startup templates. + +We've implemented both open source and commercial OpenIddict modules, we plan to remove Identity Server and replace it with OpenIddict for template projects in **ABP v6.0**. Please check [#12084](https://github.com/abpframework/abp/pull/12084) to see the development made on the open-source side. + +We're creating the documentation for the OpenIddict Module, if you want to have general knowledge about this module, you can check the documentation from [here](https://github.com/abpframework/abp/blob/dev/docs/en/Modules/OpenIddict.md). Currently, this is a draft documentation but it gives overall knowledge about the OpenIddict Module, we'll complete this documentation in ABP v6.0 and you'll be able to read it completely. + +Currently, we are also working on Keycloak integration possibilities in parallel to the OpenIddict integration research and we've prepared some samples that you can examine. You can see [#154](https://github.com/abpframework/abp-samples/pull/154) and [#158](https://github.com/abpframework/abp-samples/pull/158). + +### Deployment Documentations + +Deploying an ABP-based application is not so different than deploying any .NET or ASP.NET Core application. You can deploy it to a cloud provider (e.g. Azure, AWS, Google Could) or on-premise server, IIS or any other web server. However, we wanted to prepare a "Deployment Guide" to mention the important points and considerations. + +![deployment-documentation.png](3e5a0fc742becf26e4f63a03bfaed423.png) + +In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Deployment/Clustered-Environment) documentation, we've documented the topics that you should consider when you are developing your application to a clustered environment and explained how you can deal with these topics in your ABP-based application. + +### Other News + +* Global Features were only accessible from the C# code. From this version and on, Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). +* Getting the user's detailed information (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). +* Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). + +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), which contains a list of all the issues and pull requests closed with this version. + +## What's New with ABP Commercial 5.3? + +### GDPR Module + +> **GDPR (General Data Protection Regulation)** is a regulation in EU law on data protection and known as the toughest privacy and security law in the world. GDPR applies to any organization operating within the EU, as well as any organizations outside of the EU which offer goods or services to customers or businesses in the EU. + +With this version, we are introducing the new **GDPR Module**. This was one of the most awaited features, so we've prioritized it and implemented it in this version. + +The GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. + +Currently, there are two main functions of this module and they are "Download Personal Data" and "Delete Personal Data". + +![gdpr-user-menu.png](ccec571a20bc6673befe3a03bfaf1878.png) + +There is a "Personal Data" section in the user menu as in the screenshot above and when you click on this section, you'll be redirected to the "Personal Data" page. On that page, you can either request to "Download Personal Data" or "Delete Personal Data". + +![gdpr-personal-data-page.png](b77ff680a3fcd77048863a03bfaf4694.png) + +After you've requested to download "Personal Data", you need to wait for 1 hour by default (you can configure the related option). Because the GDPR module is developed by considering the distributed systems and therefore a specific time should be passed to ensure all the published events are handled and all personal data is collected. + +### CMS Kit Pro - Polling Feature + +We've added a **Polling** feature to the **CMS Kit Pro** module. This feature allows you to use a questionnaire/voting system in your application easily. You can create a question, define some options for it and the poll will be created for you. You can see the example poll in the screenshot below: + +![poll-question-example.png](1b869f1f0b84f697a7c93a03bfaf6d80.png) + +Also, there is an admin side of the Polling Feature. You can easily manage your polls in your admin (back-office) project. You can create, update, delete and show the results of the poll on the Polls page: + +![poll-questions.png](4a70b5a48f8355ad109b3a03bfafa75a.png) + +### OAuth Resource Owner Password as External Login Provider + +> The Resource Owner Password flow allows for the exchanging of the username and password of a user for an access token. When using the resource owner password credentials grant, the user provides the credentials (username and password) directly to the application. + +Now, you can login by entering a username and password from an OAuth server. + +Example: Use OAuth external login provider with Keycloak: + +![oauth-external-provider.gif](5c10f5ca174e232103ac3a03bfaff95e.gif) + +### Suite New Features & Enhancements + +In this version, there are some enhancements and new features in **Suite** and they are listed briefly below: + +* It's now possible to create an **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for the **app-nolayers** template with this version. +* Suite now allows users to see and download its logs. +* Suite now allows generating code via CLI. If you have a JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. + +Example: + +```bash +abp suite generate -e C:\Users\.suite\entities\Country.json -s C:\Users\my-proj\SuiteProj\SuiteProj.sln +``` + +### Suite Webinar: Take a closer look at the code generation + +![](linkedin-twitter.png) + +We've organized a webinar for Suite and in this webinar, we've talked about ABP Suite's capabilities, important features and more... + +You can watch the event from [here](https://www.youtube.com/watch?v=RFArBh60RSA&t=3s), if you haven't watched it yet. + +### Docker Compose Configurations for Single Layer Startup Template + +Dockerfiles, docker-compose files and build script files have been added to the Single Layer Startup Template (app-nolayers) with this version. + +And this way, applications created with this template now can be deployed more easily. + +### Microservice Solution Enhancements + +There are some enhancements made in the Microservice Solution. You can see the list of these enhancements: + +* Initial migration on the template has been updated with the small improvement that was made in the **Language Management** module. +* Database migration event handlers have been removed and "Distributed Locking" is now used for the database migrations. + +### PWA Support for the Application Pro Template + +Application Pro template also supports the PWA for Blazor WASM & Angular UIS. To create a startup template with the PWA support, you can use the `--pwa` parameter. +Example: + +```bash +abp new MyProgressiveWebApp -t app-pro -u blazor --pwa +``` + +## Community News + +### New ABP Community Posts + +* [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared a couple of video posts about the ABP Microservice solution. +* [Francisco Kadzi](https://github.com/CiscoNinja) has created his first ABP Community article that shows how to ["Customize ABP Angular Application UI with AdminLTE"](https://community.abp.io/posts/customize-abp-angular-application-ui-with-adminlte.-7qu1m67s). +* [Jack Fistelmann](https://github.com/nebula2) has created an article to introduce a helpful project extension to speed up development on Visual Studio. You can read the article [here](https://community.abp.io/posts/using-switch-startup-project-extension-for-visual-studio-52yyw27v). +* [Jack Fistelmann](https://github.com/nebula2) has also created an article to show how you can generate PDF files with the `Sycyber.Core` package in ABP-based applications. You can read it [here](https://community.abp.io/posts/generate-pdfs-in-an-abp-framework-project-using-scryber.core-x9yh1vfa). +* [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. +* [Manoj Kumar](https://community.abp.io/members/manojkumar.t@shloklabs.com) submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). +* [Engincan Veske](https://twitter.com/EngincanVeske) created a new community article to show "Concurrency Check/Control in ABP". You can read it [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). + +### ABP Community Talks 2022.4: How can you contribute to the open source ABP Framework? (May 10, 2022 - 17:00 UTC) + +![community-talks-2022.4.png](c905db6b3949f07077b63a03bfb1fd0f.png) + +We've [asked you to pick the topic of the next Community Talks](https://twitter.com/abpframework/status/1514567683072745474?s=20&t=rJfHrB3DYDNsk2EXS8zBBQ) and you've chosen the "How to contribute to open source ABP Framework?" for the next talk topic. So, in this Community Talk, we will be talking about "How to contribute to ABP Framework" with one of the top contributors of the ABP Framework, [Ismail Yılmaz](https://github.com/iyilm4z). The event will be on **May 10, 2022, at 17:00 (UTC)** on YouTube. + +> You can register for the event from [here](https://kommunity.com/volosoft/events/abp-community-talks-20224-how-to-contribute-to-the-open-source-abp-framework-d9b50664), if you haven't registered yet. + +You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) to be informed about future ABP events and videos. + +### Discord Server + +We've created an official ABP Discord server so the ABP Community can interact with each other and created a blog-post to introduce it. You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about the ABP Discord Server. + +Thanks to the ABP Community, **700+** people joined our Discord Server so far and it grows every day. + +You can join our Discord Server from [here](https://discord.gg/abp), if you haven't yet. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-06-15-abpio-platform-53-final-has-been-released/post.md b/docs/en/Community-Articles/2022-06-15-abpio-platform-53-final-has-been-released/post.md new file mode 100644 index 0000000000..58b1bdd8c7 --- /dev/null +++ b/docs/en/Community-Articles/2022-06-15-abpio-platform-53-final-has-been-released/post.md @@ -0,0 +1,67 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 5.3 versions have been released today. + +## What's New with 5.3? + +Since all the new features are already explained in details with the [5.3 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-5.3-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-5.3-RC-Has-Been-Published) for all the features and enhancements. + +## Getting Started with 5.3 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 5.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 more. + +### 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 +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +Check the following migration guides for the applications with version 5.2 that are upgrading to version 5.3. + +* [ABP Framework 5.2 to 5.3 migration guide](https://docs.abp.io/en/abp/5.3/Migration-Guides/Abp-5_3) +* [ABP Commercial 5.2 to 5.3 migration guide](https://docs.abp.io/en/commercial/5.3/migration-guides/v5_3) + +## Community News + +### New ABP Community Posts + +Here are some of the recent posts added to the [ABP Community](https://community.abp.io/): + +* [Integrating Elsa .NET Workflows with ABP Commercial](https://community.abp.io/posts/integrating-elsa-.net-workflows-with-abp-commercial-io32k420) by [kirtik](https://community.abp.io/members/kirtik). +* [ABP's Conventional Dependency Injection](https://community.abp.io/posts/abps-conventional-dependency-injection-948toiqy) by [iyilm4z](https://github.com/iyilm4z). +* [How to implement Single Sign-On with ABP commercial application](https://community.abp.io/posts/how-to-implement-single-signon-with-abp-commercial-application-m5ek38y9) by [kirtik](https://community.abp.io/members/kirtik). +* [Introduce DTM for Multi-Tenant Multi-Database Scene](https://community.abp.io/posts/introduce-dtm-for-multitenant-multidatabase-scene-23ziikbe) by [gdlcf88](https://github.com/gdlcf88). + +Thanks to the ABP Community for all the contents they have published. You can also [post your ABP related (text or video) contents](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 6.0. It is planned to release the 6.0 RC (Release Candidate) on July 19 and the final version on August 16, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). + +Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/0212cca486b68bf476fe3a055694c57c.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/0212cca486b68bf476fe3a055694c57c.png new file mode 100644 index 0000000000..97e6160211 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/0212cca486b68bf476fe3a055694c57c.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/107a46b6a11909e76a493a055693b308.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/107a46b6a11909e76a493a055693b308.png new file mode 100644 index 0000000000..badedb60d5 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/107a46b6a11909e76a493a055693b308.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/1117c53c9c54182c4a333a055690ac73.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/1117c53c9c54182c4a333a055690ac73.png new file mode 100644 index 0000000000..3b90b515c1 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/1117c53c9c54182c4a333a055690ac73.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/1ec02e85fdc0bbc18dad3a055693f4a9.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/1ec02e85fdc0bbc18dad3a055693f4a9.png new file mode 100644 index 0000000000..b635ffbd5e Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/1ec02e85fdc0bbc18dad3a055693f4a9.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/20555333aa1878334f3f3a0556941a69.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/20555333aa1878334f3f3a0556941a69.png new file mode 100644 index 0000000000..271aeac8fd Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/20555333aa1878334f3f3a0556941a69.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/3a8ef4d97b96ae7af0e63a0556939ec5.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/3a8ef4d97b96ae7af0e63a0556939ec5.png new file mode 100644 index 0000000000..37c428b75e Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/3a8ef4d97b96ae7af0e63a0556939ec5.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/3c0c1c5334f762cf31143a0556935e7b.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/3c0c1c5334f762cf31143a0556935e7b.png new file mode 100644 index 0000000000..00ba2882d2 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/3c0c1c5334f762cf31143a0556935e7b.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/549f9e8744eb851795593a055694546b.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/549f9e8744eb851795593a055694546b.png new file mode 100644 index 0000000000..5b1ca8baf8 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/549f9e8744eb851795593a055694546b.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/6987cdadeca846db8bb93a055690e15a.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/6987cdadeca846db8bb93a055690e15a.png new file mode 100644 index 0000000000..9d38d48772 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/6987cdadeca846db8bb93a055690e15a.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/7e18226b6f26818fdc453a055694d92b.jpg b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/7e18226b6f26818fdc453a055694d92b.jpg new file mode 100644 index 0000000000..314c44d58e Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/7e18226b6f26818fdc453a055694d92b.jpg differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/84cc472a6483f21627993a0556927eb8.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/84cc472a6483f21627993a0556927eb8.png new file mode 100644 index 0000000000..109a07be2b Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/84cc472a6483f21627993a0556927eb8.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/85fcf0dd5a1f01af3ca03a0556906f28.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/85fcf0dd5a1f01af3ca03a0556906f28.png new file mode 100644 index 0000000000..703f80f07d Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/85fcf0dd5a1f01af3ca03a0556906f28.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b258d774491c8d28fcf33a055692d4e7.gif b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b258d774491c8d28fcf33a055692d4e7.gif new file mode 100644 index 0000000000..645346abc6 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b258d774491c8d28fcf33a055692d4e7.gif differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b2ce491beab4168e936f3a055693d46b.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b2ce491beab4168e936f3a055693d46b.png new file mode 100644 index 0000000000..7a510943ab Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b2ce491beab4168e936f3a055693d46b.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b6f8a1832a64ae3326743a0556911c4a.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b6f8a1832a64ae3326743a0556911c4a.png new file mode 100644 index 0000000000..c742d208aa Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/b6f8a1832a64ae3326743a0556911c4a.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/bdc91213aacae19219cd3a0556920c43.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/bdc91213aacae19219cd3a0556920c43.png new file mode 100644 index 0000000000..ffb20ca798 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/bdc91213aacae19219cd3a0556920c43.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/e4bb2df32971fc6981553a0556933473.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/e4bb2df32971fc6981553a0556933473.png new file mode 100644 index 0000000000..46d4ce47e1 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/e4bb2df32971fc6981553a0556933473.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/f850b8fc54a9f9d23b333a0556936d26.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/f850b8fc54a9f9d23b333a0556936d26.png new file mode 100644 index 0000000000..0fbc244b04 Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/f850b8fc54a9f9d23b333a0556936d26.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/fb3b7014926fa8ce6b5c3a05569304a6.png b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/fb3b7014926fa8ce6b5c3a05569304a6.png new file mode 100644 index 0000000000..44e5195e1f Binary files /dev/null and b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/fb3b7014926fa8ce6b5c3a05569304a6.png differ diff --git a/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/post.md b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/post.md new file mode 100644 index 0000000000..470a0c6c0d --- /dev/null +++ b/docs/en/Community-Articles/2022-07-28-abpio-platform-60-rc-has-been-published/post.md @@ -0,0 +1,333 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **6.0 RC** (release candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [6.0.0 Stable](https://github.com/abpframework/abp/milestone/71) version is September 26, 2022**. + +Try this version and provide feedback for the stable ABP v6.0! Thank you to all. + +## Get Started with the 6.0 RC + +Follow the steps below to try version 6.0.0 RC today: + +1) **Upgrade** the ABP CLI to version `6.0.0-rc.4` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.4 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 6.0.0-rc.4 +```` + +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/latest/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**. + +You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v5.3.0: + +* [ABP Framework 5.3 to 6.0 Migration Guide](https://docs.abp.io/en/abp/6.0/Migration-Guides/Abp-6_0) +* [ABP Commercial 5.3 to 6.0 Migration Guide](https://docs.abp.io/en/commercial/6.0/migration-guides/v6_0) + +## What's New with ABP Framework 6.0? + +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: + +* **LeptonX Lite** is now the **default theme** for startup templates. +* Optional PWA support is added to [*Get Started*](https://abp.io/get-started) page. +* Introducing the **OpenIddict Module** and switching to OpenIddict for the startup templates. +* New **.NET MAUI** Startup Template. +* Introducing the `ITransientCachedServiceProvider` interface. +* Introducing the dynamic components for Blazor UI. +* Improvements in ABP CLI. +* Introducing the `Volo.Abp.RemoteServices` package. +* Create/Update user accounts for external logins. +* Sending test email in the setting page for MVC and Blazor user interfaces. +* Improvements on the **eShopOnAbp** project. +* Other news... + +### LeptonX Lite Theme on Startup Templates + +![leptonx-lite-theme.png](85fcf0dd5a1f01af3ca03a0556906f28.png) + +With this version, startup templates (`app` and `app-nolayers` templates) use the **LeptonX Lite** as the default theme. However, it's still possible to create a project with **Basic Theme** either using the **ABP CLI** or downloading the project via [*Get Started*](https://abp.io/get-started) page on the [abp.io](https://abp.io/) website. + +#### via ABP CLI + +To create a new project with **Basic Theme**, you can use the `--theme` option as below: + +```bash +abp new Acme.BookStore --theme basic --preview +``` + +#### via Get Started page + +Also, you can create a new project with **LeptonX Lite** or **Basic Theme** on *Get Started* page. + +![get-started-page.png](1117c53c9c54182c4a333a055690ac73.png) + +> The "Preview" checkbox should be checked to be able to see the theme selection section on the *Get Started* page. + + + +### Optional PWA Support is Added to the Get Started Page + +We've introduced the PWA (Progressive Web Application) support for the startup templates for Angular & Blazor WASM UIs in **v5.3**. In this version, we also added this PWA support to the [*Get Started*](https://abp.io/get-started) page on the [abp.io](https://abp.io/) website. + +![pwa-support-get-started-page.png](6987cdadeca846db8bb93a055690e15a.png) + +If you check the "Progressive Web Application" checkbox while creating an application, the all required configurations will be done for you and you will get the benefit of PWA features in your application. + + + +### Introducing the **OpenIddict Module** and Switching to OpenIddict in the Startup Templates + +We already [announced the plan of replacing the IdentityServer with OpenIddict](https://github.com/abpframework/abp/issues/11989). + +Therefore, we have created the `OpenIddict` module in this version and switched to **OpenIddict** in the startup templates. The ABP Framework uses this module to add **OAuth** features to the applications. We created documentation for the **OpenIddict Module**. + +- You can see the following document to **learn about the OpenIddict Module**: + [https://docs.abp.io/en/abp/6.0/Modules/OpenIddict](https://docs.abp.io/en/abp/6.0/Modules/OpenIddict) +- You can check out the following migration guide to learn **how to migrate to OpenIddict**: + [https://docs.abp.io/en/abp/6.0/Migration-Guides/IdentityServer_To_OpenIddict](https://docs.abp.io/en/abp/6.0/Migration-Guides/IdentityServer_To_OpenIddict) + +> We will continue to ship Identity Server packages for a while but in the long term, you may need to replace it, because Identity Server support ends at the end of 2022. Please see the [announcement](https://github.com/abpframework/abp/issues/11989) for more info. + +### New .NET MAUI Startup Template + +![maui-template.png](b6f8a1832a64ae3326743a0556911c4a.png) + +ABP Framework provides .NET MAUI startup templates with **v6.0.0**. You can create a new .NET MAUI project with the command below: + +```bash +abp new Acme.BookStore -t maui --preview +``` + + +### Introducing the `ITransientCachedServiceProvider` + +`ICachedServiceProvider` interface is used to resolve the cached services within a new scope. We created a new interface to resolve cached services **without creating scopes**. It's called `ITransientCachedServiceProvider`. The difference between `ICachedServiceProvider` and `ITransientCachedServiceProvider` is; `ITransientCachedServiceProvider` is transient. Check out [this issue](https://github.com/abpframework/abp/issues/12918) for more information. + + +### Introducing the dynamic layout components for Blazor UI + +ABP Framework provides different ways of customizing the UI and one of them is to use [Layout Hooks](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Layout-Hooks) in MVC. The **Layout Hook System** allows you to add code to some specific parts of the layout and all layouts of the themes provided by the ABP Framework implement these hooks. + +However, Blazor UI doesn't have such a system yet and we are planning to implement [Layout Hooks for the Blazor UI](https://github.com/abpframework/abp/issues/6261) in version 7.0. + +We are introducing the dynamic layout components for the Blazor UI to be able to add components to the Blazor layouts. + +You can configure the `AbpDynamicLayoutComponentOptions` to render your components in the layout, as below: + +```csharp +Configure(options => +{ + options.Components.Add(typeof(MyBlazorComponent), null); +}); +``` + +### Improvements in ABP CLI + +There are some enhancements in [ABP CLI](https://docs.abp.io/en/abp/6.0/CLI). You can see the brief list of some of these improvements below: + +* You can list all available templates by using the `abp list-templates` command with v6.0. See [#13083](https://github.com/abpframework/abp/pull/13083). +* You can select the theme when creating a new project by specifying the `--theme` option. You can see the *LeptonX Lite Theme on the Startup Templates* section above for an example. +* `abp update` command has been updating the version of the main application until now. With v6.0.0, this command updates all package versions **inside all solutions in the sub-folders**. Checkout the issue [#12735](https://github.com/abpframework/abp/pull/12738) for more information. + +### Introducing the `Volo.Abp.RemoteService` Package + +A new `Volo.Abp.RemoteService` package has been added to the framework. Some of the classes that are related to the remote service configurations such as `AbpRemoteServiceOptions` class moved from `Volo.Abp.Http.Client` to this package. In this way, it became more reusable for further usages. + +### Create/Update User Accounts For External Logins + +If a user authenticates from an external provider like `Keycloak`, the user is being redirected to this external provider, and comes back to the main application. In this process, the user's data is not being saved in the main application's database. With this version, ABP saves the user information and lists in the users page. And this fixes permission management, user information mismatches and other issues. For more info, see [the related issue](https://github.com/abpframework/abp/issues/12203). + + +### Sending test email on the setting page for MVC and Blazor UIs + +"Sending Test Email" feature is added to the [Setting Management](https://docs.abp.io/en/abp/6.0/Modules/Setting-Management) module, which allows checking the email settings are configured properly and sending emails successfully to the target email address. + +![setting-management-emailing.png](bdc91213aacae19219cd3a0556920c43.png) + +After configuring the email settings such as the target email address, you can click the "Send" button to send a test email to see if everything went well. + +> Note that this feature will be implemented for the Angular UI in the stable v6.0. + +### Improvements on eShopOnAbp Project + +The following improvements have been made on [eShopOnAbp project](https://github.com/abpframework/eShopOnAbp) with this version: + +* Some improvements have been made on the Admin Application for Order Management for Angular UI. See [#110](https://github.com/abpframework/eShopOnAbp/pull/110). +* `SignalR` error on Kubernetes & Docker Compose has been fixed. See [#113](https://github.com/abpframework/eShopOnAbp/pull/113). +* Configurations have been made for some services on the `docker-compose.yml` file. See [#112](https://github.com/abpframework/eShopOnAbp/pull/112). +* Gateway Redirect Loop problem on Kubernetes has been fixed. See [the commit](https://github.com/abpframework/eShopOnAbp/commit/6413ef15c91cd8a5309050b63bb4dbca23587607). + +### Other News + +* Autofac library has been upgraded to **v6.4.0**. Please see [#12816](https://github.com/abpframework/abp/pull/12816) for more info. +* Performance Improvements have been made in the **Settings Module** and tabs on the *Settings* page are lazy loading now. +* Some improvements have been made in the CMS Kit Module. You can see the improvements from [here](https://github.com/abpframework/abp/issues/11965). + +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/6.0.0-rc.1), which contains a list of all the issues and pull requests closed in this version. + +## What's New with ABP Commercial 6.0? + +### LeptonX Theme is the Default Theme + +With this version, the startup templates (`app-pro`, `app-nolayers-pro` and `microservice-pro` templates) use the **LeptonX Theme** as the default theme. However, it's still possible to create a new project with **Lepton Theme** or **Basic Theme**, either using the **ABP CLI** or **ABP Suite**. + +#### via ABP CLI + +To create a new project with **Lepton Theme** or **Basic Theme**, you can use the `--theme` option as below. For "Basic Theme" specify the theme name as `--theme basic`. + +```bash +abp new Acme.BookStore --theme lepton --preview +``` + + +#### via ABP Suite + +Also, you can create a new project with **Lepton Theme** or **Basic Theme** from ABP Suite. + +![suite-create-new-solution.png](84cc472a6483f21627993a0556927eb8.png) + +### Switching to OpenIddict in the Startup Templates + +We have also switched to the **OpenIddict** for the startup templates for ABP Commercial as explained above. + +### New .NET MAUI Mobile + +![maui-mobile-option.gif](b258d774491c8d28fcf33a055692d4e7.gif) + +ABP Commercial has been providing a [React Native](https://docs.abp.io/en/commercial/latest/getting-started-react-native) mobile app since with the very early versions. Alternative to this application, we created a new .NET MAUI mobile app. To create a new `app-pro` ABP project with the .NET MAUI mobile app, you can use the command below: + +```bash +abp new Acme.BookStore -t app-pro --mobile maui +``` + +> Note that, when Microsoft supports `WebAuthenticator` on Windows, we'll also support it to work on Windows OS. + +### GDPR: Cookie Consent + +![cookie-banner.png](fb3b7014926fa8ce6b5c3a05569304a6.png) + +With this version, the **Cookie Consent** feature has been added to the **GDPR** module. It's enabled by default for the new startup templates. There are two pages in the templates: "Cookie Policy" page and "Privacy Policy" page. + +If you want to disable/hide the "Cookie Consent", you can simply open the startup project module class and set the `IsEnabled` property as **false** for the **AddAbpCookieConsent** method as below: + +```csharp +context.Services.AddAbpCookieConsent(options => +{ + options.IsEnabled = false; //disabled + options.CookiePolicyUrl = "/CookiePolicy"; + options.PrivacyPolicyUrl = "/PrivacyPolicy"; +}); +``` + +> These pages are used to build up the cookie consent text and you can change the content or url of these pages by your needs. + +If you want to use the Cookie Consent feature of the GDPR module in your existing project, please see the [GDPR Module](https://docs.abp.io/en/commercial/6.0/modules/gdpr) documentation for configurations. + +### Improvements/Developments on CMS Kit Poll + +Some improvements have been made on the Poll System of CMS Kit module as listed below: + +* The Widget rendering and Admin side for the Blazor UI improvements. +* A Widget can be picked from the editor as seen in the image below. + +![poll-add-widget.png](e4bb2df32971fc6981553a0556933473.png) + +### Blazor UI for the Chat Module + +Chat Module is now also available for the Blazor UI after the MVC and Angular UIs. You can read the [Chat Module](https://docs.abp.io/en/commercial/6.0/modules/chat) documentation to get the overall knowledge about the module and add to your application. + +![blazor-chat-module-1.png](3c0c1c5334f762cf31143a0556935e7b.png) + +![blazor-chat-module-2.png](f850b8fc54a9f9d23b333a0556936d26.png) + +### Blazor Admin UI for CMS Kit Module + +All admin side **CMS Kit** and **CMS Kit Pro** features have been implemented for the Blazor UI. Blazor UI will only be available to ABP Commercial customers. + +![cms-blog-blazor.png](3a8ef4d97b96ae7af0e63a0556939ec5.png) + +![cms-blog-post-blazor.png](107a46b6a11909e76a493a055693b308.png) + +### Suite: Excel Export + +With v6.0, now it's possible to export the records as Excel for Blazor & MVC UIs. Angular UI is still in-progress, and we will implement it with the stable v6.0 release. Check the "Excel export" checkbox to add this feature. + +![excel-export.png](b2ce491beab4168e936f3a055693d46b.png) + +A new Excel Export button is being located at the top of the generated page as seen below: + +![export-excel-page.png](1ec02e85fdc0bbc18dad3a055693f4a9.png) + +Then, you can download the records as `.xlsx` format by clicking the "Excel Export" button. Note that the exported Excel list is the filtered list. + +### ABP Suite: Optional PWA Support + +With this version, it's possible to add the [PWA (Progressive Web App)](https://web.dev/progressive-web-apps/?gclid=Cj0KCQjwxIOXBhCrARIsAL1QFCY0IB-W5k-lsXmRCbm00sl4nyBIYynAX3IdJkjyizyNUjuCE8zeu24aApxtEALw_wcB) support for Blazor & Angular UIs while creating the application via Suite. + +![suite-pwa-support.png](20555333aa1878334f3f3a0556941a69.png) + +You just need to check the "Progressive web application" checkbox, when creating a new application. Then, ABP Suite will add the PWA support to your application. When you publish your application, you get the full benefits of PWA features such as offline support. + +### Other News + +#### Explainer Videos + +We are creating explainer videos for the ABP Commercial Modules to provide an overview. Within this milestone, we've created four new explainer videos: + +* [Audit Logging Module](https://www.youtube.com/watch?v=NzSuFBpqfsc) +* [Identity Module](https://www.youtube.com/watch?v=W87jA_GBE54) +* [SaaS Module](https://www.youtube.com/watch?v=xXlaaXP6qqQ) +* [Forms Module](https://www.youtube.com/watch?v=MousWEPfrA8) + +You can subscribe to [Volosoft's YouTube channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) to be informed about future ABP events and videos. + +### Trial License is now available! + +![pricing-page.png](549f9e8744eb851795593a055694546b.png) + +If you are considering purchasing a new ABP Commercial license, and you want to see ABP in action then, check out https://commercial.abp.io/pricing and click the "**FREE TRIAL**" button. + +## Community News + +### New ABP Community Posts + +* [Alper Ebicoglu](https://twitter.com/alperebicoglu) has created a new community article to give a full overview of .NET MAUI. You can read it [here](https://community.abp.io/posts/all-about-.net-maui-gb4gkdg5). +* [Anto Subash](https://twitter.com/antosubash) has created a new video content to show "State Management in Blazor with Fluxor". You can read it [here](https://community.abp.io/posts/blazor-state-management-with-fluxor-raskpv19). +* [Learn ABP Framework](https://community.abp.io/members/learnabp) has also created a new video content to show "How to install LeptonX Lite Theme for ABP Framework 5.3 MVC UI". You can read it [here](https://community.abp.io/posts/how-to-install-leptonx-lite-theme-on-abp-framework-5.3-mvc-ui-epzng137). +* [Kirti Kulkarni](https://twitter.com/kirtimkulkarni) has created three new community articles. You can use the links below to read the articles: + * [Integrating the file management module with ABP Commercial application](https://community.abp.io/posts/integrating-the-file-management-module-with-abp-commercial-application-qd6v4dsr) + * [Work with PDF's in ABP Commercial Project using PDFTron](https://community.abp.io/posts/work-with-pdfs-in-abp-commercial-project-using-pdftron-tjw0hlgu) + * [Create a custom login page in ABP Commercial Angular app](https://community.abp.io/posts/create-a-custom-login-page-in-abp-commercial-angular-app-r2huidx7) +* [Don Boutwell](https://community.abp.io/members/dboutwell) has created his first ABP Community article. You can read it from [here](https://community.abp.io/posts/password-required-redis-with-abp-framework-and-docker-94old5rm). + +### Volosoft Has Attended the DNF Summit 2022 + +![dnf-summit.png](0212cca486b68bf476fe3a055694c57c.png) + +Core team members of ABP Framework, [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) and [Alper Ebicoglu](https://twitter.com/alperebicoglu) have attended the [DNF Summit](https://t.co/ngWnBLiAn5) on the 20th of July. Halil Ibrahim Kalkan talked about the creation of the ABP Framework and Alper Ebicoglu showed how easy to create a project with ABP Framework within 15 minutes. + +Watch the DNF Summit session 👉 https://www.youtube.com/embed/VL0ewZ-0ruo + +![dnf-summit-attendees.jpg](7e18226b6f26818fdc453a055694d92b.jpg) + +## Conclusion + +This version comes with some features and enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/6.0/Road-Map) documentation to learn about the release schedule and planned features for the next releases. The planned release date for the [6.0.0 Stable](https://github.com/abpframework/abp/milestone/71) version is September 26, 2022. Please try the ABP v6.0 RC and provide feedback to us. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md b/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md index b3870ff067..f639d60b0c 100644 --- a/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md +++ b/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md @@ -240,3 +240,7 @@ gRPC on .NET has different approaches, features, configurations and more details * You can find the completed source code here: https://github.com/abpframework/abp-samples/tree/master/GrpcDemo2 * You can also see all the changes I've done in this article here: https://github.com/abpframework/abp-samples/pull/200/files + +## See Also + +* [Consuming gRPC Services from Blazor WebAssembly Application Using gRPC-Web](https://abp.io/community/articles/consuming-grpc-services-from-blazor-webassembly-application-using-grpcweb-dqjry3rv) diff --git a/docs/en/Community-Articles/2022-10-06-abpio-platform-60-final-has-been-released/048cddf521a29aaafbeb3a06cece21da.png b/docs/en/Community-Articles/2022-10-06-abpio-platform-60-final-has-been-released/048cddf521a29aaafbeb3a06cece21da.png new file mode 100644 index 0000000000..4e75f63a1e Binary files /dev/null and b/docs/en/Community-Articles/2022-10-06-abpio-platform-60-final-has-been-released/048cddf521a29aaafbeb3a06cece21da.png differ diff --git a/docs/en/Community-Articles/2022-10-06-abpio-platform-60-final-has-been-released/post.md b/docs/en/Community-Articles/2022-10-06-abpio-platform-60-final-has-been-released/post.md new file mode 100644 index 0000000000..db7dfd186f --- /dev/null +++ b/docs/en/Community-Articles/2022-10-06-abpio-platform-60-final-has-been-released/post.md @@ -0,0 +1,79 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 6.0 versions have been released today. + +## What's new with ABP 6.0? + +All the new features are explained in detail in the [6.0 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-6.0-RC-Has-Been-Published). See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-6.0-RC-Has-Been-Published) for all the features and enhancements. This is the stable version of 6.0. You can safely upgrade your existing solution or create a new production-level solution. + +## Getting started with 6.0 + +### Creating new solutions + +You can create a new solution with the ABP Framework version 6.0 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 more. + +### How to upgrade an existing solution + +#### Install/Update the ABP CLI + +Firstly, install the ABP CLI or upgrade to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update an existing installation: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading existing solutions with the 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. + +## Migration guides + +Check the following migration guides for the applications with version 5.3 that are upgrading to version 6.0: + +* [ABP Framework 5.3 to 6.0 Migration Guide](https://docs.abp.io/en/abp/6.0/Migration-Guides/Abp-6_0) +* [ABP Commercial 5.3 to 6.0 Migration Guide](https://docs.abp.io/en/commercial/6.0/migration-guides/v6_0) + +## Community news + +### New ABP community posts + +Here are some of the recent posts added to the [ABP Community](https://community.abp.io/): + +* [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created two new community articles: + * [Consuming gRPC Services from Blazor WebAssembly Application Using gRPC-Web](https://community.abp.io/posts/consuming-grpc-services-from-blazor-webassembly-application-using-grpcweb-dqjry3rv) + * [Using gRPC with the ABP Framework](https://community.abp.io/posts/using-grpc-with-the-abp-framework-2dgaxzw3) +* [Malik Masis](https://twitter.com/malikmasis) also has created two new community articles: + * [Consuming HTTP APIs from a .NET Client Using ABP's Client Proxy System](https://community.abp.io/posts/consuming-http-apis-from-a-.net-client-using-abps-client-proxy-system-xriqarrm) + * [Using MassTransit via eShopOnAbp](https://community.abp.io/posts/using-masstransit-via-eshoponabp-8amok6h8) +* [Xeevis](https://community.abp.io/members/Xeevis) has created her/his first community article, that shows [Prerendering in Blazor WASM applications](https://community.abp.io/posts/prerendering-blazor-wasm-application-with-abp-6.x-2v8590g3). +* [Don Boutwell](https://community.abp.io/members/dboutwell) has created two new community articles: + * [Logging to Datadog from ABP framework](https://community.abp.io/posts/logging-to-datadog-from-abp-framework-fm4ozds4) + * [Configuring Multiple DbContexts in an ABP Framework Project](https://community.abp.io/posts/configuring-multiple-dbcontexts-in-an-abp-framework-project-uoz5is3o) +* [Kirti Kulkarni](https://twitter.com/kirtimkulkarni) has created a new community article: [Deploying ABP angular application to Azure and App Insights integration](https://community.abp.io/posts/deploying-abp-angular-application-to-azure-and-app-insights-integration-4jrhtp01) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## ABP by numbers +We have worked for 22 weeks on the 6.0 release. During this time, we closed 589 GitHub issues and merged 601 pull requests. For the new features and bug fixes, we made 3421 GitHub commits. We published 321 NuGet and 49 NPM packages. 50 contributors took part in this release, and 19 are first-time contributors. Thanks to everyone taking part in this version. + +![image.png](048cddf521a29aaafbeb3a06cece21da.png) + +## About the next version + +The next feature version will be 7.0. It is planned to release the 7.0 RC (Release Candidate) on November 15 and the final version on December 13, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). + +Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/1.png b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/1.png new file mode 100644 index 0000000000..8e6a25600f Binary files /dev/null and b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/1.png differ diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/2.png b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/2.png new file mode 100644 index 0000000000..d758ca86cf Binary files /dev/null and b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/2.png differ diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/3.png b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/3.png new file mode 100644 index 0000000000..dcca72e932 Binary files /dev/null and b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/3.png differ diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md index 0401c31898..e147058f67 100644 --- a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md +++ b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md @@ -2,17 +2,72 @@ ## ITokenExtensionGrant -Create a class that inherits `ITokenExtensionGrant`, and then register it with the framework. +Create a `MyTokenExtensionGrant` class that inherits `ITokenExtensionGrant`, and then register it with the framework. -In the `MyTokenExtensionGrant` class below we try to get the token details, The `ForbidResult` handles the failure case and `SignInResult` returns a new token response, You can pass more parameters to implement business checks. +```cs +public override void PreConfigureServices(ServiceConfigurationContext context) +{ + //... + PreConfigure(builder => + { + builder.Configure(openIddictServerOptions => + { + openIddictServerOptions.GrantTypes.Add(MyTokenExtensionGrant.ExtensionGrantName); + }); + }); + //... +} + +public override void ConfigureServices(ServiceConfigurationContext context) +{ + //... + Configure(options => + { + options.Grants.Add(MyTokenExtensionGrant.ExtensionGrantName, new MyTokenExtensionGrant()); + }); + //... +} +``` + +## Generate a new token response + +In the `MyTokenExtensionGrant` class below we have two methods to get a new token using a user token or user API key. You can choose one of them based on your business. + +These methods are just examples. Please add more logic to validate input data. ```cs +using System.Collections.Immutable; +using System.Security.Principal; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using OpenIddict.Abstractions; +using OpenIddict.Server; +using OpenIddict.Server.AspNetCore; +using Volo.Abp.Identity; +using Volo.Abp.OpenIddict; +using Volo.Abp.OpenIddict.ExtensionGrantTypes; +using IdentityUser = Volo.Abp.Identity.IdentityUser; +using SignInResult = Microsoft.AspNetCore.Mvc.SignInResult; + +namespace OpenIddict.Demo.Server.ExtensionGrants; + public class MyTokenExtensionGrant : ITokenExtensionGrant { public const string ExtensionGrantName = "MyTokenExtensionGrant"; public string Name => ExtensionGrantName; + public async Task HandleAsync(ExtensionGrantContext context) + { + // You can get a new token using any of the following methods based on your business. + // They are just examples. You can implement your own logic here. + + return await HandleUserAccessTokenAsync(context); + return await HandleUserApiKeyAsync(context); + } + + public async Task HandleUserAccessTokenAsync(ExtensionGrantContext context) { var userToken = context.Request.GetParameter("token").ToString(); @@ -26,6 +81,9 @@ public class MyTokenExtensionGrant : ITokenExtensionGrant }!)); } + // We will validate the user token + // The Token is issued by the OpenIddict server, So we can validate it using the introspection endpoint + var transaction = await context.HttpContext.RequestServices.GetRequiredService().CreateTransactionAsync(); transaction.EndpointType = OpenIddictServerEndpointType.Introspection; transaction.Request = new OpenIddictRequest @@ -64,23 +122,92 @@ public class MyTokenExtensionGrant : ITokenExtensionGrant })); } + // We have validated the user token and got the user id + var userId = principal.FindUserId(); var userManager = context.HttpContext.RequestServices.GetRequiredService(); var user = await userManager.GetByIdAsync(userId.Value); var userClaimsPrincipalFactory = context.HttpContext.RequestServices.GetRequiredService>(); var claimsPrincipal = await userClaimsPrincipalFactory.CreateAsync(user); - claimsPrincipal.SetScopes(principal.GetScopes()); - claimsPrincipal.SetResources(await GetResourcesAsync(context, principal.GetScopes())); - //abp version < 7.3 - await context.HttpContext.RequestServices.GetRequiredService().SetAsync(principal); + // Prepare the scopes + var scopes = GetScopes(context); - //For abp version >= 7.3 + claimsPrincipal.SetScopes(scopes); + claimsPrincipal.SetResources(await GetResourcesAsync(context, scopes)); await context.HttpContext.RequestServices.GetRequiredService().HandleAsync(context.Request, principal); + return new SignInResult(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, claimsPrincipal); + } + + protected async Task HandleUserApiKeyAsync(ExtensionGrantContext context) + { + var userApiKey = context.Request.GetParameter("user_api_key").ToString(); + + if (string.IsNullOrEmpty(userApiKey)) + { + return new ForbidResult( + new[] {OpenIddictServerAspNetCoreDefaults.AuthenticationScheme}, + properties: new AuthenticationProperties(new Dictionary + { + [OpenIddictServerAspNetCoreConstants.Properties.Error] = OpenIddictConstants.Errors.InvalidRequest + }!)); + } + + // Here we can validate the user API key and get the user id + if (false) // Add your own logic here + { + // If the user API key is invalid + return new ForbidResult( + new[] {OpenIddictServerAspNetCoreDefaults.AuthenticationScheme}, + properties: new AuthenticationProperties(new Dictionary + { + [OpenIddictServerAspNetCoreConstants.Properties.Error] = OpenIddictConstants.Errors.InvalidRequest + }!)); + } + + // Add your own logic to get the user by API key + var userManager = context.HttpContext.RequestServices.GetRequiredService(); + var user = await userManager.FindByNameAsync("admin"); + if (user == null) + { + return new ForbidResult( + new[] {OpenIddictServerAspNetCoreDefaults.AuthenticationScheme}, + properties: new AuthenticationProperties(new Dictionary + { + [OpenIddictServerAspNetCoreConstants.Properties.Error] = OpenIddictConstants.Errors.InvalidRequest + }!)); + } + + // Create a principal for the user + var userClaimsPrincipalFactory = context.HttpContext.RequestServices.GetRequiredService>(); + var claimsPrincipal = await userClaimsPrincipalFactory.CreateAsync(user); + + // Prepare the scopes + var scopes = GetScopes(context); + + claimsPrincipal.SetScopes(scopes); + claimsPrincipal.SetResources(await GetResourcesAsync(context, scopes)); + await context.HttpContext.RequestServices.GetRequiredService().HandleAsync(context.Request, claimsPrincipal); return new SignInResult(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, claimsPrincipal); } + private ImmutableArray GetScopes(ExtensionGrantContext context) + { + // Prepare the scopes + // The scopes must be defined in the OpenIddict server + + // If you want to get the scopes from the request, you have to add `scope` parameter in the request + // scope: AbpAPI profile roles email phone offline_access + + //var scopes = context.Request.GetScopes(); + + // If you want to set the scopes here, you can use the following code + var scopes = new[] { "AbpAPI", "profile", "roles", "email", "phone", "offline_access" }.ToImmutableArray(); + + return scopes; + } + private async Task> GetResourcesAsync(ExtensionGrantContext context, ImmutableArray scopes) { var resources = new List(); @@ -98,38 +225,24 @@ public class MyTokenExtensionGrant : ITokenExtensionGrant } ``` -```cs -public override void PreConfigureServices(ServiceConfigurationContext context) -{ - //... - PreConfigure(builder => - { - builder.Configure(openIddictServerOptions => - { - openIddictServerOptions.GrantTypes.Add(MyTokenExtensionGrant.ExtensionGrantName); - }); - }); - //... -} +### Get a new token using user access token -public override void ConfigureServices(ServiceConfigurationContext context) -{ - //... - Configure(options => - { - options.Grants.Add(MyTokenExtensionGrant.ExtensionGrantName, new MyTokenExtensionGrant()); - }); - //... -} -``` +* Get a user token using the `password` grant type. +![Http request 1](1.png) -![Http request 1](postman1.png) +* Use the user token to get a new token using the `HandleUserAccessTokenAsync` method. -![Http request 2](postman2.png) +![Http request 2](2.png) -## Source code +### Get a new token using user API key + +* Directly get a new token using the `HandleUserApiKeyAsync` method. -https://github.com/abpframework/abp/commit/3210f138454697647689b4868c8d4b7b3da02d44 +![Http request 3](3.png) + +## Source code + +https://github.com/abpframework/abp/blob/dev/modules/openiddict/app/OpenIddict.Demo.Server/ExtensionGrants/MyTokenExtensionGrant.cs diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/postman1.png b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/postman1.png deleted file mode 100644 index e7ec1ccce0..0000000000 Binary files a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/postman1.png and /dev/null differ diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/postman2.png b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/postman2.png deleted file mode 100644 index b44e756ed5..0000000000 Binary files a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/postman2.png and /dev/null differ diff --git a/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/1686b2c9b7c4f24e825d3a07afe68750.png b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/1686b2c9b7c4f24e825d3a07afe68750.png new file mode 100644 index 0000000000..49ab9a97c1 Binary files /dev/null and b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/1686b2c9b7c4f24e825d3a07afe68750.png differ diff --git a/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/552094437245394af26b3a07afe7c07b.jpg b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/552094437245394af26b3a07afe7c07b.jpg new file mode 100644 index 0000000000..82179e3362 Binary files /dev/null and b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/552094437245394af26b3a07afe7c07b.jpg differ diff --git a/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/e3241810b6d9885128c03a07afe72f3a.gif b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/e3241810b6d9885128c03a07afe72f3a.gif new file mode 100644 index 0000000000..479b83ce2b Binary files /dev/null and b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/e3241810b6d9885128c03a07afe72f3a.gif differ diff --git a/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/f6372b06f40fa2da9d993a07afe78654.png b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/f6372b06f40fa2da9d993a07afe78654.png new file mode 100644 index 0000000000..c6c3134934 Binary files /dev/null and b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/f6372b06f40fa2da9d993a07afe78654.png differ diff --git a/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/post.md b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/post.md new file mode 100644 index 0000000000..cf3f6eaace --- /dev/null +++ b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/post.md @@ -0,0 +1,308 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.0 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 v7.0! Thanks to all of you. + +## Get Started with the 7.0 RC + +Follow the steps below to try version 7.0.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.0.0-rc.3` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.0.0-rc.3 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.0.0-rc.3 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command for creating a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v6.x: + +* [ABP Framework 6.x to 7.0 Migration Guide](https://docs.abp.io/en/abp/7.0/Migration-Guides/Abp-7_0) +* [ABP Commercial 6.x to 7.0 Migration Guide](https://docs.abp.io/en/commercial/7.0/migration-guides/v7_0) + +## What's New with ABP Framework 7.0? + +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 .NET 7.0 +* Upgraded to OpenIddict 4.0 +* Dapr Integration +* Integration Services +* Dynamic Permissions and Features +* External Localization Infrastructure +* Distributed Entity Cache Service +* Layout Hooks for the Blazor UI +* Improvements on the eShopOnAbp project + +### Upgraded to .NET 7.0 + +We've upgraded the ABP Framework to .NET 7.0, so you need to move your solutions to .NET 7.0 if you want to use ABP 7.0. + +> You can check the [Migrate from ASP.NET Core 6.0 to 7.0](https://learn.microsoft.com/en-us/aspnet/core/migration/60-70?view=aspnetcore-7.0) documentation. Also, there is an ABP Community article that shows how to upgrade an existing project to .NET 7.0. You can check it from 👉 [here](https://community.abp.io/posts/upgrade-your-existing-projects-to-.net7-nmx6vm9m). + +### Upgraded to OpenIddict 4.0 + +OpenIddict 4.0 preview has been released on June 22. So, we decided to upgrade the OpenIddict packages to 4.0-preview in ABP 7.0. + +Once the final release of OpenIddict 4.0 is published, we will immediately upgrade it to the stable version and we plan to make ABP 7.0 final use the stable version of OpenIddict 4.0. + +> You can read the "[OpenIddict 4.0 preview1 is out](https://kevinchalet.com/2022/06/22/openiddict-4-0-preview1-is-out/)" post to learn what's new with OpenIddict 4.0. + +### Dapr Integration + +[Dapr (Distributed Application Runtime)](https://dapr.io/) provides APIs that simplify microservice connectivity. + +ABP and Dapr have some intersecting features like service-to-service communication, distributed message bus and distributed locking. However, the purposes of ABP and Dapr are different. ABP's goal is to provide an end-to-end developer experience with an opinionated architecture. On the other hand, Dapr's purpose is to provide a runtime to decouple common microservice communication patterns from your application logic. + +ABP 7.0 offers some packages to provide better integration with Dapper. I will cover some important integration notes below but if you want to get a full overview of ABP Dapr Integration please see the [ABP Dapr Integration documentation](https://docs.abp.io/en/abp/7.0/Dapr/Index). + +#### Distributed Event Bus Integration + +ABP's [Distributed Event Bus System](https://docs.abp.io/en/abp/7.0/Distributed-Event-Bus) provides a convenient abstraction to allow applications to communicate asynchronously via events. + +The new [Volo.Abp.EventBus.Dapr](https://www.nuget.org/packages/Volo.Abp.EventBus.Dapr) and [Volo.Abp.AspNetCore.Mvc.Dapr.EventBus](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus) packages make it possible to use the Dapr infrastructure with the ABP's standard distributed event bus abstractions. The **Volo.Abp.EventBus.Dapr** package is used to publish events and the **Volo.Abp.AspNetCore.Mvc.Dapr.EventBus** package is used to subscribe to events. + +> See [the documentation](https://docs.abp.io/en/abp/7.0/Dapr/Index#distributed-event-bus-integration) to learn more. + +#### C# API Client Proxies Integration + +ABP can [dynamically](https://docs.abp.io/en/abp/7.0/API/Dynamic-CSharp-API-Clients) or [statically](https://docs.abp.io/en/abp/7.0/API/Static-CSharp-API-Clients) generate proxy classes to invoke your HTTP APIs from a Dotnet client application. + +The [Volo.Abp.Http.Client.Dapr](https://www.nuget.org/packages/Volo.Abp.Http.Client.Dapr) package configures the client-side proxy system, so it uses Dapr's service invocation building block for the communication between your applications. + +> See [the documentation](https://docs.abp.io/en/abp/7.0/Dapr/Index#c-api-client-proxies-integration) to learn more. + +#### Distributed Lock + +ABP provides a [Distributed Locking](https://docs.abp.io/en/abp/7.0/Distributed-Locking) abstraction to control access to a resource that's shared by multiple applications. Dapr also has a [distributed lock building block](https://docs.dapr.io/developing-applications/building-blocks/distributed-lock/). + +The [Volo.Abp.DistributedLocking.Dapr](https://www.nuget.org/packages/Volo.Abp.DistributedLocking.Dapr) package makes ABP use Dapr's distributed locking system. + +> See [the documentation](https://docs.abp.io/en/abp/7.0/Dapr/Index#distributed-lock) to learn more. + +### Integration Services + +Integration services [was an idea](https://github.com/abpframework/abp/issues/12470) to distinguish the application services that are built for inter-module (or inter-microservice) communication from the application services that are intended to be consumed from a user interface or a client application. + +With ABP 7.0, now it is possible to mark an application service as an integration service using the `[IntegrationService]` attribute (that is defined in the `Volo.Abp.Application.Services` namespace). Example: + +````csharp +[IntegrationService] +public class ProductAppService : ApplicationService, IProductAppService +{ + // ... +} +```` + +If your application service has an interface, like `IProductService`, you can use it on the service interface: + +````csharp +[IntegrationService] +public interface IProductAppService : IApplicationService +{ + // ... +} +```` + +When you do that ABP takes the following actions by conventions: + +* If you use the [Auto API Controllers](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) feature, the URL prefix will be `/integration-api/` instead of `/api/`. In this way, for example, you can prevent REST API calls to your integration services out of your API Gateway, in a microservice system, and don't authorize these services. You can also filter integration services (or non-integration services) while creating Auto API Controllers, using the `ApplicationServiceTypes` option of the `ConventionalControllerSetting` object. +* Calls made to integration services are not audit logged by default, because they are intended to be used by other services. You can set `IsEnabledForIntegrationServices` to `true` in `AbpAuditingOptions` [options class](https://docs.abp.io/en/abp/latest/Options) to enable audit logging for the integration services too. + +### Dynamic Permissions and Features + +In ABP Framework, [permissions](https://docs.abp.io/en/abp/latest/Authorization) and [features](https://docs.abp.io/en/abp/latest/Features) are defined in the codebase of your application. Because of that design, it was hard to define permissions (and features) in different microservices and centrally manage all the permissions (and features) in a single admin application. To make that possible, we were adding project references for all the microservices' service contract packages from a single microservice, so it can know all the permissions (and features) and manage them. As a result, that permission manager microservice needs to be re-deployed whenever a microservice's permissions change. + +With ABP 7.0, we've introduced the [dynamic permissions](https://github.com/abpframework/abp/pull/13644) and [dynamic features](https://github.com/abpframework/abp/pull/13881) systems. See the following figure: + +![dynamic-permissions.png](1686b2c9b7c4f24e825d3a07afe68750.png) + +Here, Microservice 1 defines the permissions A and B, Microservice 2 defines the permissions C, D, E. The Permission Management microservice is used by the permission management UI and manages all the permissions of a user in the application. + +Basically, in the solution with ABP 7.0, all microservices serialize their own permission definitions and write them into a shared database on their application startup (with a highly optimized algorithm). On the other hand, the permission management service can dynamically get these permission definitions from the database (it is also highly optimized to reduce database usage) and allow the UI to show and manage them for a user or role. + +We will update the authorization and features documentation in next days to state the configuration, while it mostly works automatically. + +> If you want to know why we made all these decisions and what problems we've solved, you can watch Halil İbrahim Kalkan's "[Authorization in a Distributed / Microservice System](https://www.youtube.com/watch?v=DVqvRZ0w-7g)" talk in .NET Conf 2022. + +### External Localization Infrastructure + +Localization was another problem in a microservice system, when each microservice try to define its own localization texts and you build a unified UI application. + +The PR [#13845](https://github.com/abpframework/abp/pull/13845) described what's done in details. Basically, you need to implement `IExternalLocalizationStore ` to get localizations of other services. However, since the open-source ABP Framework doesn't provide a module for dynamic localization, we haven't implemented that out of the box. We may implement it for open-source if we get a considerable request from the community (you can upvote [#13953](https://github.com/abpframework/abp/issues/13953)). + +We've implemented the external localization system in ABP Commercial's [Language Management module](https://commercial.abp.io/modules/Volo.LanguageManagement) and also applied it in the [microservice startup template](https://commercial.abp.io/startup-templates/microservice). See the ABP Commercial part of this blog post to know more. + +### Distributed Entity Cache Service + +ABP introduces a distributed entity cache service with v7.0. + +Assume that you have a `Product` entity (an [aggregate root](https://docs.abp.io/en/abp/latest/Entities) actually): + +````csharp +public class Product : AggregateRoot +{ + public string Name { get; set; } + public string Description { get; set; } + public float Price { get; set; } + public int StockCount { get; set; } +} +```` + +And you want to use caching for faster access to the products. You first should configure the [dependency injection](https://docs.abp.io/en/abp/latest/Dependency-Injection) to register the `IEntityCache` service, in the `ConfigureServices` method of your [module class](https://docs.abp.io/en/abp/latest/Module-Development-Basics): + +````csharp +context.Services.AddEntityCache(); +```` + +Now, you can inject the `IEntityCache` service whenever you need: + +````csharp +public class ProductAppService : ApplicationService +{ + private readonly IEntityCache _productCache; + + public ProductAppService(IEntityCache productCache) + { + _productCache = productCache; + } + + public async Task GetAsync(Guid id) + { + var product = await _productCache.GetAsync(id); + return ObjectMapper.Map(product); + } +} +```` + +*In this example, I assume that the [object mapping](https://docs.abp.io/en/abp/latest/Object-To-Object-Mapping) is configured to map from `Product` to `ProductDto`.* + +Here, We've directly cached the `Product` objects. In that case, the `Product` class must be serializable (because it is serialized to JSON when saving in the [distributed cache](https://docs.abp.io/en/abp/latest/Caching)). That may not be possible in some scenarios and you may want to use another class to store the cache data. For example, we may want to use the `ProductDto` class instead of the `Product` class for the cache object. In this case, change the dependency injection configuration as below: + +````csharp +context.Services.AddEntityCache(); +```` + +Then inject the `IEntityCache` service instead of the `IEntityCache` service. + +You can configure the cache duration by passing a `DistributedCacheEntryOptions` object to the `AddEntityCache` method: + +````csharp +context.Services.AddEntityCache( + new DistributedCacheEntryOptions + { + SlidingExpiration = TimeSpan.FromMinutes(30) + } +); +```` + +Default cache duration is 2 minutes with the `AbsoluteExpirationRelativeToNow` configuration. + +> Check [this PR](https://github.com/abpframework/abp/pull/14055) to see the implementation and additional notes. + +### Layout Hooks for Blazor UI + +The **Layout Hook System** allows you to add code to some specific parts of the layout and all layouts of the themes provided by the ABP Framework implement these hooks. + +This system was already implemented for MVC UI but not for Blazor UI. We announced in the previous blog post ([ABP 6.0 Release Candidate blog post](https://blog.abp.io/abp/ABP.IO-Platform-6.0-RC-Has-Been-Published)) that we were planning to implement it in version 7.0. And now, we are introducing the Layout Hook System for Blazor UI as planned within this version. + +> You can read the [Blazor UI: Layout Hooks](https://docs.abp.io/en/abp/7.0/UI/Blazor/Layout-Hooks) documentation if you want to use the Layout Hooks in your Blazor application and see the required configurations. + +### Improvements on eShopOnAbp + +The following improvements have been made on the [eShopOnAbp project](https://github.com/abpframework/eShopOnAbp) within this version: + +* We've integrated [Keycloak](https://www.keycloak.org/) (an open-source identity and access management system) as the authentication server instead of the built-in authentication server (that was based on IdentityServer). See [#12021](https://github.com/abpframework/abp/issues/12021) for more information. +* The product detail page now uses CMS Kit's [Rating](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Ratings) and [Comment](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments) features. See [#11429](https://github.com/abpframework/abp/issues/11429) for more info. + +### Other News + +* ABP 7.0 introduces the `AbpDistributedLockOptions` for the main options class to configure the distributed locking. You can specify any name as the lock prefix by configuring the `AbpDistributedLockOptions`. See the [documentation](https://docs.abp.io/en/abp/7.0/Distributed-Locking#abpdistributedlockoptions) for more. + +## What's New with ABP Commercial 7.0? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.0. + +### Microservice Solution Architectural Improvements + +We've worked on the [microservice startup solution](https://commercial.abp.io/startup-templates/microservice) to make it proper for more advanced scenarios and better service independencies. As a result, all the services are made independently deployable and flexible to define its own permissions, features and localization texts. + +For the permissions and features part, we've applied ABP's new dynamic permission and feature systems that are explained above. For the localization texts, we'd implemented ABP's new external localization infrastructure (that was also explained above) in the [Language Management Module](https://commercial.abp.io/modules/Volo.LanguageManagement). + +If you want to build a new microservice solution with ABP 7.0, all these are pre-configured for you. Just create a new solution and focus on your own business code! You can also migrate your existing microservice solutions to take advantage of these new enhancements. You can follow [this guide](https://docs.abp.io/en/abp/latest/Migration-Guides/Upgrading-Startup-Template) as a good way to see the changes you need to apply in your solutions. + +### Set the Tenant Admin's Password from Host + +![tenant-admin-password.gif](e3241810b6d9885128c03a07afe72f3a.gif) + +ABP Commercial's [SaaS module](https://commercial.abp.io/modules/Volo.Saas) now allows setting the tenant admin's password from the host side. You can set a new password to any tenant admin's password from the Tenants page if you are a host user of the system. + +### WeChat and Alipay Integrations for the Payment Module + +![payment-gateway-1.png](f6372b06f40fa2da9d993a07afe78654.png) + +In this version, WeChat Pay and Alipay gateways have been added to the payment module. You can read the [Payment Module documentation](https://docs.abp.io/en/commercial/7.0/modules/payment#alipayoptions) for configurations and more information. + +### Others + +* [CMS Kit (Pro) Module](https://commercial.abp.io/modules/Volo.CmsKit.Pro): Contact Feature allows multiple (named) contact forms with this version. Now, you can add different contact forms on different pages (with different settings). +* [Saas Module](https://commercial.abp.io/modules/Volo.Saas): Allows host users to test the connection string of a tenant database on the UI. +* [Chat Module](https://commercial.abp.io/modules/Volo.Chat): Introduces permission for searching other users. + + +## Community News + +### New ABP Community Posts + +* [gdlcf88](https://github.com/gdlcf88) has created two new community articles: + * [Use Stepping To Perform Atomic Multi-Step Operations](https://community.abp.io/posts/use-stepping-to-perform-atomic-multistep-operations-4kqu8ewp) + * [Notice and Solve ABP Distributed Events Disordering](https://community.abp.io/posts/notice-and-solve-abp-distributed-events-disordering-yi9vq3p4) +* [GDUnit](https://community.abp.io/members/GDUnit) has created his first ABP community article that shows multi-tenant subdomain resolution in Blazor applications. You can read it 👉 [here](https://community.abp.io/posts/abp-blazor-multitenant-subdomain-resolution-c1x4un8x). +* [EngincanV](https://twitter.com/EngincanVeske) has created two new community articles: + * [Testing in ABP Framework (with examples)](https://community.abp.io/posts/testing-in-abp-framework-with-examples-3w29v6ce) + * [What's new with .NET 7?](https://community.abp.io/posts/whats-new-with-.net-7-tlq2g43w) +* [Alper Ebicoglu](https://twitter.com/alperebicoglu) has created a new community article to show "How to upgrade an existing project to .NET7". You can read it 👉 [here](https://community.abp.io/posts/upgrade-your-existing-projects-to-.net7-nmx6vm9m). +* [Kirti Kulkarni](https://community.abp.io/members/kirtik) has created a new community article to show "How to integrate and enable the Chat Module in an ABP Commercial application". You can read it 👉 [here](https://community.abp.io/posts/integrating-and-enabling-the-chat-module-in-abp-commercial-vsci3ov2). +* [maliming](https://github.com/maliming) has created a new community article to show "how to add custom grant type in OpenIddict". You can read it 👉 [here](https://community.abp.io/posts/how-to-add-a-custom-grant-type-in-openiddict.-6v0df94z). + +We thank you all. We thank all the authors for contributing to the [ABP Community platform](https://community.abp.io/). + +### We were in the .NET Conf 2022 + +![dotnef-conf-2022.jpg](552094437245394af26b3a07afe7c07b.jpg) + +Microsoft has released .NET 7.0 and celebrated it with a 3-days international online conference. Halil İbrahim Kalkan, the lead developer of ABP Framework attended [.NET Conf 2022](https://www.dotnetconf.net/) on November 10, 2022. His topic was "Authorization in a Distributed / Microservice System". In this talk, he talked about permission-based authorization systems and their challenges in a distributed system. Then, gave solutions that are implemented in the open source ABP Framework. + +You can watch his speech from 👉 [here](https://www.youtube.com/watch?v=DVqvRZ0w-7g). + +### Community Talks 2022.9: .NET 7.0 & ABP 7.0 + +![](streamyard.png) + +In this episode of ABP Community Talks, 2022.9; we'll talk about .NET 7.0 and ABP 7.0 with the ABP Core Team. We will dive into the features that came with .NET 7.0, how they are implemented in ABP 7.0, and the highlights in the .NET Conf 2022 with [Halil İbrahim Kalkan](https://github.com/hikalkan), [Alper Ebicoglu](https://github.com/ebicoglu), [Engincan Veske](https://github.com/EngincanV), [Hamza Albreem](https://github.com/braim23) and [Bige Besikci Yaman](https://github.com/bigebesikci). + +> Register to listen and ask your questions now 👉 https://kommunity.com/volosoft/events/abp-community-20229-net-70-abp-70-f9e8fb72 . + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.0/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try the ABP v7.0 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/streamyard.png b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/streamyard.png new file mode 100644 index 0000000000..fe7b5e3e3a Binary files /dev/null and b/docs/en/Community-Articles/2022-11-22-abpio-platform-70-rc-has-been-published/streamyard.png differ diff --git a/docs/en/Community-Articles/2022-11-22-gRPC-JSON-Transcoding/POST.md b/docs/en/Community-Articles/2022-11-22-gRPC-JSON-Transcoding/POST.md index 9663ac1f83..e0f1f38aa9 100644 --- a/docs/en/Community-Articles/2022-11-22-gRPC-JSON-Transcoding/POST.md +++ b/docs/en/Community-Articles/2022-11-22-gRPC-JSON-Transcoding/POST.md @@ -4,6 +4,12 @@ In this article, I'll show you one of the new features that came with .NET 7: ** > I've created a community article to highlight some interesting features (briefly) that are now available with the release of .NET 7. You can check it from [here](https://community.abp.io/posts/whats-new-with-.net-7-tlq2g43w). +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## What is gRPC? What are the pros and cons? [gRPC](https://grpc.io/) is a high-performance RPC framework and uses HTTP/2 and Protobuf (protocol buffers). @@ -189,6 +195,12 @@ In this article, I've briefly introduced the JSON Transcoding feature that was s > See the [gRPC JSON transcoding in ASP.NET Core gRPC apps](https://learn.microsoft.com/en-us/aspnet/core/grpc/json-transcoding?view=aspnetcore-7.0) documentation for more information. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## References * https://devblogs.microsoft.com/dotnet/announcing-grpc-json-transcoding-for-dotnet/ diff --git a/docs/en/Community-Articles/2022-18-11-whats-new-with-net7/POST.md b/docs/en/Community-Articles/2022-18-11-whats-new-with-net7/POST.md index fb964fa730..671592d63e 100644 --- a/docs/en/Community-Articles/2022-18-11-whats-new-with-net7/POST.md +++ b/docs/en/Community-Articles/2022-18-11-whats-new-with-net7/POST.md @@ -6,6 +6,12 @@ In this article, I will highlight a few interesting features that are now availa There are many new features coming with this release. We are going to examine new features within 4 sub-sections: ASP.NET Core, C#11, EF 7 and MAUI. Let's start with ASP.NET Core. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## ASP.NET Core We will see the following features in this section: @@ -290,6 +296,12 @@ In this article, I've highlighted some features that were shipped with .NET 7. Thanks for reading the article and I hope you find it helpful. See you in the next one! +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## References * https://devblogs.microsoft.com/dotnet/announcing-dotnet-7/ diff --git a/docs/en/Community-Articles/2023-01-02-abpio-is-sponsoring-ndc-london-2023/post.md b/docs/en/Community-Articles/2023-01-02-abpio-is-sponsoring-ndc-london-2023/post.md new file mode 100644 index 0000000000..4202855593 --- /dev/null +++ b/docs/en/Community-Articles/2023-01-02-abpio-is-sponsoring-ndc-london-2023/post.md @@ -0,0 +1,13 @@ +ABP.IO is excited to announce that we will be sponsoring [NDC London 2023](https://ndclondon.com/) for the fourth time! It is thrilling to support the software development community in London. + +NDC London is a conference for software developers that covers a wide range of topics in the software development industry and brings together experts from around the world to share their knowledge and insights on the latest technologies and best practices in the industry. It is organized by NDC Conferences, a company that produces a number of software development conferences around the world. + +We are proud to sponsor this event and to support the software development community. We believe that conferences like NDC London are an important opportunity for developers to learn, network, and stay up-to-date on the latest trends in the field. + +As always, we have some special surprises for attendees at our booth on the 3rd floor of the Queen Elizabeth II Centre. Be sure to stop by to pick up one of our exclusive swag kits and enter our raffle for a chance to win Meta Quest 2. + +As [ABP.IO](https://abp.io/) Team, we are looking forward to participating in NDC London 2023 and connecting with other professionals in the software development industry. Stay tuned for more updates on our involvement in the conference. We believe that conferences like NDC London are an important opportunity for developers to learn, network, and stay up-to-date on the latest trends in the field. + +If you're interested in learning more about Volosoft and our software development services, or if you want to find out more about our SaaS product, [ABP Commercial](https://commercial.abp.io/), which is based on our [ABP Framework](https://github.com/abpframework/abp), be sure to visit us at our booth. We would be happy to discuss your software development needs and how we can help. + +We hope to see you at NDC London 2023! \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-01-05-abpio-platform-70-final-has-been-released/post.md b/docs/en/Community-Articles/2023-01-05-abpio-platform-70-final-has-been-released/post.md new file mode 100644 index 0000000000..a3619fdc80 --- /dev/null +++ b/docs/en/Community-Articles/2023-01-05-abpio-platform-70-final-has-been-released/post.md @@ -0,0 +1,73 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.0 versions have been released today. + +## What's New With 7.0? + +Since all the new features are already explained in detail in the [7.0 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7.0-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-7.0-RC-Has-Been-Published) for all the features and enhancements. + +## Getting Started with 7.0 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 7.0 by either using the `abp new` command or generating the CLI command 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 more. + +### 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 it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update an existing installation: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are breaking changes in this version that may affect your application. Please see the following migration documents, if you are upgrading from v6.x: + +* [ABP Framework 6.x to 7.0 Migration Guide](https://docs.abp.io/en/abp/7.0/Migration-Guides/Abp-7_0) +* [ABP Commercial 6.x to 7.0 Migration Guide](https://docs.abp.io/en/commercial/7.0/migration-guides/v7_0) + +## Community News + +### Highlights from .NET 7.0? + +Our team has closely followed the ASP.NET Core and Entity Framework Core 7.0 releases, read Microsoft's guides and documentation and adapt the changes to our ABP.IO Platform. We are proud to say that we've shipped the ABP 7.0 RC.1 based on .NET 7.0 just after Microsoft's .NET 7.0 release. + +In addition to the ABP's .NET 7.0 upgrade, our team has created 13 great articles to highlight the important features coming with ASP.NET Core 7.0 and Entity Framework Core 7.0. + +> You can read [this post](https://volosoft.com/Blog/Highlights-for-ASP.NET-Entity-Framework-Core-NET-7.0) to see the list of all articles. + +### New ABP Community Posts + +In addition to [the 13 articles to highlight .NET 7.0 features written by our team](https://volosoft.com/Blog/Highlights-for-ASP.NET-Entity-Framework-Core-NET-7.0), here are some of the recent posts added to the [ABP Community](https://community.abp.io/): + +* [liangshiwei](https://github.com/realLiangshiwei) has created a new community article, that shows [How to Use the Weixin Authentication for MVC / Razor Page Applications](https://community.abp.io/posts/how-to-use-the-weixin-authentication-for-mvc-razor-page-applications-a33e0wti). +* [Jasen Fici](https://community.abp.io/posts/deploying-abp.io-to-an-azure-appservice-ma8kukdp) has created a new article: [Deploying abp.io to an Azure AppService](https://community.abp.io/posts/deploying-abp.io-to-an-azure-appservice-ma8kukdp). + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 7.1. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). + +Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-01-19-abp-commercial-is-application-development-category-leader-of-2022/post.md b/docs/en/Community-Articles/2023-01-19-abp-commercial-is-application-development-category-leader-of-2022/post.md new file mode 100644 index 0000000000..d139a8fca4 --- /dev/null +++ b/docs/en/Community-Articles/2023-01-19-abp-commercial-is-application-development-category-leader-of-2022/post.md @@ -0,0 +1,33 @@ +

We are excited to announce that ABP Commercial on GetApp has been selected as one of the Application Development Category Leader in 2022!

+ + +

The Category Leaders program is intended to help businesses find the best software products in various categories to meet their needs, by providing an objective and unbiased ranking of products based on user reviews and other data.

+ +

GetApp's Category Leaders program ranks software products based on ratings from users in five key areas: ease of use, value for money, functionality, customer support, and likelihood to recommend.

+ +

For Application Development Category, GetApp evaluated 368 products and ABP Commercial entered to the 2022 GetApp Application Development Category Leaders' list from the 12th order in the first 15 high-scorer products, a.k.a. Category Leaders.

+ +

We are proud that ABP Commercial has been recognized as one of the top-ranked product in Application Development category, thanks to the high ratings it has received from users.

+ +

By being selected as a Category Leader, ABP Commercial has demonstrated a high level of satisfaction among its users and a strong performance in the key areas that matter most to businesses.

+ + + +
    Here are ABP Commercial's user rankings: +
  • Ease of use: 16 out of 20
  • +
  • Value for money: 16 out of 20
  • +
  • Functionality: 17 out of 20
  • +
  • Customer support: 16 out of 20
  • +
  • Likelihood to recommend: 16 out of 20
  • +
  • In total: 82 out of 100
  • +
+ +

If you are in the market for business software, we encourage you to check out the Front Runner list and give ABP Commercial a try. We are confident that you will be satisfied with our product and the support we provide.

+

You could also leave ABP Commercial a review to help us understand your experience.

+ +

We would like to thank all of our customers and users for their support and feedback, which have helped us achieve this recognition.

+ +

We will continue to strive for excellence and provide the best possible products and services to our users.

+ + +

Please see the other recognition we got from Software Advice as 2022 Application Development Category Front Runner.

diff --git a/docs/en/Community-Articles/2023-01-19-abp-commercial-is-application-development-front-runner-of-2022/post.md b/docs/en/Community-Articles/2023-01-19-abp-commercial-is-application-development-front-runner-of-2022/post.md new file mode 100644 index 0000000000..2cf0b1b539 --- /dev/null +++ b/docs/en/Community-Articles/2023-01-19-abp-commercial-is-application-development-front-runner-of-2022/post.md @@ -0,0 +1,21 @@ +

Attention all business software buyers! We are excited to announce that ABP Commercial on Software Advice has been selected as a Front Runner on App Development Software category.

+ +

For those unfamiliar with Software Advice, the company is a leading provider of software reviews that helps organizations find the right software for their needs by providing comparisons according to reviews of various business software products.

+ +

The Front Runner list is a ranking of software products based on their performance in a specific market segment, as determined by Software Advice according to the reviews left for those products.

+ +

To be considered for inclusion on the Front Runner list, a software product must meet certain criteria.

+
    The scores for each software product are divided in 2 main categories: +
  • Usability(x-axis) is calculated according to a weighted average of functionality(50%) and ease of use(50%).
  • +
  • Customer Satisfaction(y-axis) is calculated according to a weighted average of value for money(25%), likelihood to recommend(25%), customer support(50%).
  • +
+

You can see the graph for Software Advice App Development Category Front Runners in 2022 and locate ABP Commercial in there!

+ +

We are thrilled to being selected as one of the App Development Software Category's Front Runner and are proud of the high ratings we have received from users.

+

If you are in the market for business software, we encourage you to check out the Front Runner list and give ABP Commercial a try. We are confident that you will be satisfied with our product and the support we provide.

+

You could also leave ABP Commercial a review to help us understand your experience.

+ +

Thank to all of our users for this recognition. We look forward to continuing to provide top-notch software and support to businesses everywhere.

+ + +

Please see the other recognition we got from GetApp as 2022 Application Development Category Leader.

diff --git a/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/75da2f04db562e7a26de3a0947c1bb92.png b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/75da2f04db562e7a26de3a0947c1bb92.png new file mode 100644 index 0000000000..3dfd62fb94 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/75da2f04db562e7a26de3a0947c1bb92.png differ diff --git a/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/997466650163fa5699e43a0947c1a535.png b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/997466650163fa5699e43a0947c1a535.png new file mode 100644 index 0000000000..30a9d70cea Binary files /dev/null and b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/997466650163fa5699e43a0947c1a535.png differ diff --git a/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/b6f3ecc5835632eb71613a0947c17a0e.png b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/b6f3ecc5835632eb71613a0947c17a0e.png new file mode 100644 index 0000000000..7ea566207b Binary files /dev/null and b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/b6f3ecc5835632eb71613a0947c17a0e.png differ diff --git a/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/e4acbb4e2ecce17e64203a0947c1e78b.png b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/e4acbb4e2ecce17e64203a0947c1e78b.png new file mode 100644 index 0000000000..cddf3d01b8 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/e4acbb4e2ecce17e64203a0947c1e78b.png differ diff --git a/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/linkedin-twitter-new-dat.png b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/linkedin-twitter-new-dat.png new file mode 100644 index 0000000000..b95adaebff Binary files /dev/null and b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/linkedin-twitter-new-dat.png differ diff --git a/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/post.md b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/post.md new file mode 100644 index 0000000000..5b8e73548f --- /dev/null +++ b/docs/en/Community-Articles/2023-02-09-abpio-platform-71-rc-has-been-published/post.md @@ -0,0 +1,211 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.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 v7.1! Thanks to all of you. + +## Get Started with the 7.1 RC + +Follow the steps below to try version 7.1.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.1.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.1.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.1.0-rc.1 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guide + +This version comes with a breaking change, so please see the following migration guide if you are upgrading from v7.0: + +* [ABP Framework 7.0 to 7.1 Migration Guide](https://docs.abp.io/en/abp/7.1/Migration-Guides/Abp-7_1) + +> **Note**: Entity Framework developers may need to add a new code-first database migration to their projects since we made some improvements to the existing entities of some application modules. + +## What's New with ABP Framework 7.1? + +In this section, I will introduce some major features released in this version. In addition to these features, so many enhancements have been made in this version too. + +Here is a brief list of the titles explained in the next sections: + +* Blazor WASM option added to Application Single Layer Startup Template +* Introducing the `IHasEntityVersion` interface and `EntitySynchronizer` base class +* Introducing the `DeleteDirectAsync` method for the `IRepository` interface +* Introducing the `IAbpHostEnvironment` interface +* Improvements on the eShopOnAbp project +* Others + +### Blazor WASM option added to Application Single Layer Startup Template + +We've created the [Application (Single Layer) Startup Template](https://docs.abp.io/en/abp/7.1/Startup-Templates/Application-Single-Layer) in v5.2 with three UI types: Angular, Blazor Server, and MVC. At the moment, we didn't provide a UI option for Blazor, because it required 3 projects at least (server-side, client-side, and shared library between these two projects). + +In this version, we've added the Blazor WASM option to the **Application (Single Layer) Startup Template**. It still contains three projects (`blazor`, `host`, and `contracts`) but hosted by a single `host` project. + +You can use the following CLI command to create an `app-nolayers` template with the Blazor UI as the UI option: + +```bash +abp new TodoApp -t app-nolayers -u blazor --version 7.1.0-rc.1 +``` + +> You can check the [Quick Start documentation](https://docs.abp.io/en/abp/7.1/Tutorials/Todo/Single-Layer/Index?UI=Blazor&DB=EF) for a quick start with this template. + +### Introducing the `IHasEntityVersion` interface and `EntitySynchronizer` base class + +Entity synchronization is an important concept, especially in distributed applications and module development. If we have an entity that is related to other modules, we need to align/sync their data once the entity changes and versioning entity changes can also be good, so we can know whether they're synced or not. + +In this version, [@gdlcf88](https://github.com/gdlcf88) made a great contribution to the ABP Framework and introduced the `IHasEntityVersion` interface which adds **auto-versioning** to entity classes and `EntitySynchronizer` base class to **automatically sync an entity's properties from a source entity**. + +You can check the issue and documentation from the following links for more info: + +- [Issue: Entity synchronizers and a new EntityVersion audit property](https://github.com/abpframework/abp/issues/14196) +- [Versioning Entities](https://docs.abp.io/en/abp/7.1/Entities#versioning-entities) +- [Distributed Event Bus - Entity Synchronizer](https://docs.abp.io/en/abp/7.1/Distributed-Event-Bus#entity-synchronizer) + +> Note: The entities of some modules from the ABP Framework have implemented the `IHasEntityVersion` interface. Therefore, if you are upgrading your application from an earlier version, you need to create a new migration and apply it to your database. + +### Introducing the `DeleteDirectAsync` method for the `IRepository` interface + +EF 7 introduced a new [`ExecuteDeleteAsync`](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates) method that deletes entities without involving the change tracker into the process. Therefore, it's much faster. + +We've added the `DeleteDirectAsync` method to the `IRepository<>` interface to take the full power of EF 7. It deletes all entities that fit the given predicate. It directly deletes entities from the database, without fetching them. Therefore, some features (like **soft-delete**, **multi-tenancy**, and **audit logging)** won't work, so use this method carefully when you need it. And use the `DeleteAsync` method if you need those features. + +### Introducing the `IAbpHostEnvironment` interface + +Sometimes, while creating an application, we need to get the current hosting environment and take actions according to that. In such cases, we can use some services such as [IWebHostEnvironment](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.iwebhostenvironment?view=aspnetcore-7.0) or [IWebAssemblyHostEnvironment](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.webassembly.hosting.iwebassemblyhostenvironment) provided by .NET, in the final application. + +However, we can not use these services in a class library, which is used by the final application. ABP Framework provides the `IAbpHostEnvironment` service, which allows you to get the current environment name whenever you want. `IAbpHostEnvironment` is used by the ABP Framework in several places to perform specific actions by the environment. For example, ABP Framework reduces the cache duration on the **Development** environment for some services. + +**Usage:** + +```csharp +public class MyService +{ + private readonly IAbpHostEnvironment _abpHostEnvironment; + + public MyService(IAbpHostEnvironment abpHostEnvironment) + { + _abpHostEnvironment = abpHostEnvironment; + } + + public void MyMethod() + { + //getting the current environment name + var environmentName = _abpHostEnvironment.EnvironmentName; + + //check for the current environment + if (_abpHostEnvironment.IsDevelopment()) { /* ... */ } + } +} +``` + +You can inject the `IAbpHostEnvironment` into your service and get the current environment by using its `EnvironmentName` property. You can also check the current environment by using its extension methods such as `IsDevelopment()`. + +> Check the [ABP Application Startup](https://docs.abp.io/en/abp/7.1/Application-Startup) documentation for more information. + +### Improvements on the eShopOnAbp project + +K8s and Docker configurations have been made within this version (Dockerfiles and helm-charts have been added and image build scripts have been updated). See [#14083](https://github.com/abpframework/abp/issues/14083) for more information. + +### Others + +* Referral Links have been added to the CMS Kit Comment Feature (optional). You can specify common referral links (such as "nofollow" and "noreferrer") for links in the comments. See [#15458](https://github.com/abpframework/abp/issues/15458) for more information. +* ReCaptcha verification has been added to the CMS Kit Comment Feature (optional). You can enable ReCaptcha support to enable protection against bots. See the [documentation](https://docs.abp.io/en/abp/7.1/Modules/Cms-Kit/Comments) for more information. +* In the development environment, it is a must to reduce cache durations for some points. We typically don't have to invalidate the cache manually or wait on it for a certain time to be invalidated. For that purpose, we have reduced the cache durations for some points on the development environment. See [#14842](https://github.com/abpframework/abp/pull/14842) for more information. + +## What's New with ABP Commercial 7.1? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the new features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.1. + +### Blazor WASM option added to Application Single Layer Pro Startup Template + +The [**Application (Single Layer) Startup Template**](https://docs.abp.io/en/commercial/latest/startup-templates/application-single-layer/index) with Blazor UI is also available for ABP Commercial customers with this version as explained above. + +You can use the following CLI command to create an `app-nolayers-pro` template with Blazor UI as the UI option: + +```bash +abp new TodoApp -t app-nolayers-pro -u blazor --version 7.1.0-rc.1 +``` + +You can also create an `app-nolayers-pro` template with Blazor UI via ABP Suite: + +![suite-blazor-wasm-nolayers.png](b6f3ecc5835632eb71613a0947c17a0e.png) + +### Suite - MAUI Blazor Code Generation + +We provided a new UI option "MAUI Blazor" for the `app-pro` template in the previous version and it's possible to create a `maui-blazor` application with both ABP CLI and ABP Suite. + +You can create an `app-pro` template with the MAUI Blazor as the UI option with the following ABP CLI command: + +```bash +abp new Acme.BookStore -t app-pro -u maui-blazor +``` + +In this version, we implemented the code generation for MAUI Blazor. You can create and generate CRUD pages for this new UI option as you do in other UI types. + +> Note: MAUI Blazor is currently only available with the `app-pro` template. + +### SaaS Module - Allowing entering a username while impersonating the tenant + +In the previous versions, we were able to impersonate a tenant from the [SaaS Module's Tenant Management UI](https://docs.abp.io/en/commercial/7.1/modules/saas#tenant-management). There was a constraint in this approach, which forced us to only impersonate the "admin" user. However, the tenant might change the admin user's username, or we may want to impersonate another user of the tenant. + +Thus, with this version, we decided to allow the impersonation of the tenant by the specified username. + +*You can click on the "Login with this tenant" action button:* + +![saas-impersonation-1.png](997466650163fa5699e43a0947c1a535.png) + +*Then, Specify the admin name of the tenant:* + +![saas-impersonation-2.png](75da2f04db562e7a26de3a0947c1bb92.png) + +## Community News + +### New ABP Community Posts + +* [Sergei Gorlovetsky](https://community.abp.io/members/Sergei.Gorlovetsky) has created two new community articles: + * [Why ABP Framework is one of the best tools for migration from legacy MS Access systems to latest Web app](https://community.abp.io/posts/why-abp-framework-is-one-of-the-best-tools-for-migration-from-legacy-ms-access-systems-to-latest-web-app-7l39eof0) + * [ABP Framework — 5 steps Go No Go Decision Tree](https://community.abp.io/posts/abp-framework-5-steps-go-no-go-decision-tree-2sy6r2st) +* [Onur Pıçakcı](https://github.com/onurpicakci) has created his first ABP community article that explains how to contribute to ABP Framework. You can read it 👉 [here](https://community.abp.io/posts/how-to-contribute-to-abp-framework-46dvzzvj). +* [Maliming](https://github.com/maliming) has created a new community article to show how to convert create/edit modals to a page. You can read it 👉 [here](https://community.abp.io/posts/converting-createedit-modal-to-page-4ps5v60m). + +We thank you all. We thank all the authors for contributing to the [ABP Community platform](https://community.abp.io/). + +### Volosoft Attended NDC London 2023 + +![ndc-london.png](e4acbb4e2ecce17e64203a0947c1e78b.png) + +Core team members of the ABP Framework, [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) and [Alper Ebicoglu](https://twitter.com/alperebicoglu) attended [NDC London 2023](https://ndclondon.com/) from the 23rd to the 27th of January. + +> You can check [this post](https://volosoft.com/blog/What%E2%80%99s-NEW-in-NDC-London-2023) to see our takeaways from the **NDC London 2023**. + +### Community Talks 2023.1: LeptonX Customization + +![image](linkedin-twitter-new-dat.png) + +In this episode of ABP Community Talks, 2023.1; we'll talk about **LeptonX Customization**. We will dive into the details and show you how to customize the [LeptonX Theme](https://leptontheme.com/) with examples. + +The event will be live on Thursday, February 28, 2023 (17:00 UTC). + +> Register to listen and ask your questions now 👉 https://kommunity.com/volosoft/events/abp-community-talks-20231-leptonx-customization-03f9fd8c. + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.1/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try the ABP v7.1 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096135937d3f2a596c3f0298830a40.JPG b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096135937d3f2a596c3f0298830a40.JPG new file mode 100644 index 0000000000..3f526ab23b Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096135937d3f2a596c3f0298830a40.JPG differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961366f44a7136b2fb97bd59d5dfc.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961366f44a7136b2fb97bd59d5dfc.jpg new file mode 100644 index 0000000000..7ba3edd466 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961366f44a7136b2fb97bd59d5dfc.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961369b8e73cbf7212e02194dfe38.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961369b8e73cbf7212e02194dfe38.jpg new file mode 100644 index 0000000000..5d85f3f6bd Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961369b8e73cbf7212e02194dfe38.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096137121dd1fc027a8a3f049b7545.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096137121dd1fc027a8a3f049b7545.jpg new file mode 100644 index 0000000000..b270012659 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096137121dd1fc027a8a3f049b7545.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096138b4f6513b8233788e96ac8c05.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096138b4f6513b8233788e96ac8c05.jpg new file mode 100644 index 0000000000..98b7c746f2 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096138b4f6513b8233788e96ac8c05.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613b87df4f9cb2dec966008d135f.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613b87df4f9cb2dec966008d135f.jpg new file mode 100644 index 0000000000..6bedc0428d Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613b87df4f9cb2dec966008d135f.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613d3ba8b917e8e4a473a6ff0a7b.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613d3ba8b917e8e4a473a6ff0a7b.jpg new file mode 100644 index 0000000000..5442186f36 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613d3ba8b917e8e4a473a6ff0a7b.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613d87b1034d63a74d5da77b6ceb.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613d87b1034d63a74d5da77b6ceb.jpg new file mode 100644 index 0000000000..acbcf7aee2 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613d87b1034d63a74d5da77b6ceb.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613e6993994a27cb3dd7715ff6d1.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613e6993994a27cb3dd7715ff6d1.jpg new file mode 100644 index 0000000000..5d341a0327 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613e6993994a27cb3dd7715ff6d1.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613f0111d0bf3f477dfc6653d6b6.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613f0111d0bf3f477dfc6653d6b6.jpg new file mode 100644 index 0000000000..7e7a340553 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09613f0111d0bf3f477dfc6653d6b6.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096140602aa2e4345480767ee7ced8.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096140602aa2e4345480767ee7ced8.jpg new file mode 100644 index 0000000000..bfab97a6e6 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096140602aa2e4345480767ee7ced8.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961410637bce3c946855d5e559ecd.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961410637bce3c946855d5e559ecd.jpg new file mode 100644 index 0000000000..eaad32f215 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a0961410637bce3c946855d5e559ecd.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096143f0266e4c809c33143d42e139.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096143f0266e4c809c33143d42e139.jpg new file mode 100644 index 0000000000..ac0f334d43 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096143f0266e4c809c33143d42e139.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096144b581c4e1a35d85415c8bda44.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096144b581c4e1a35d85415c8bda44.jpg new file mode 100644 index 0000000000..67fcb8d42d Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096144b581c4e1a35d85415c8bda44.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096144eb966eb756f2f381e0dcbb73.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096144eb966eb756f2f381e0dcbb73.jpg new file mode 100644 index 0000000000..1e9f2ce7ec Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096144eb966eb756f2f381e0dcbb73.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614531ca59eecf978535611a4f76.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614531ca59eecf978535611a4f76.jpg new file mode 100644 index 0000000000..95d92c792d Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614531ca59eecf978535611a4f76.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096148452f3112958cee9aed14aa8a.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096148452f3112958cee9aed14aa8a.jpg new file mode 100644 index 0000000000..ce8491e45e Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a096148452f3112958cee9aed14aa8a.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614ee47c4815fb537306266608c4.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614ee47c4815fb537306266608c4.jpg new file mode 100644 index 0000000000..895e91fcb0 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614ee47c4815fb537306266608c4.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614fca668d23b0cef632d0cd74b8.jpg b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614fca668d23b0cef632d0cd74b8.jpg new file mode 100644 index 0000000000..f39d9a90c8 Binary files /dev/null and b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/3a09614fca668d23b0cef632d0cd74b8.jpg differ diff --git a/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/post.md b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/post.md new file mode 100644 index 0000000000..06d56d43b5 --- /dev/null +++ b/docs/en/Community-Articles/2023-02-14-ndc-london-2023-sponsored-for-the-4th-time/post.md @@ -0,0 +1,73 @@ +#### **Recap & Impressions🌟** + +Last week, we were just back from [NDC {London} ](https://ndclondon.com)after had a blast at Queen Elizabeth II Centre in the center of Westminster, London, UK, with holding a stand on Level 3 during the 3-day conference (24 Jan. - 27 Jan.) introducing about the [ABP.IO](https://abp.io) platform. + +![IMG\_4535.JPG](3a096135937d3f2a596c3f0298830a40.JPG) + +We were proud and glad to be a presenting partner of the conference for the 4th time in NDC London, and was able to meet up with other global companies, top experts with their specialties, and the impressive count of attendees. + +![IMG\_0017 16.14.45.jpg](3a0961366f44a7136b2fb97bd59d5dfc.jpg) + +![52660341321\_4883550b40\_c.jpg](3a0961369b8e73cbf7212e02194dfe38.jpg) + +![52659842632\_b45bac83cc\_c.jpg](3a096137121dd1fc027a8a3f049b7545.jpg) + +It was a no-brainer that our team would attend again as we had an absolute blast meeting and chatting with a global group of passionate developers and talented speakers. + +![52660786305\_0cd21ea380\_c.jpg](3a096138b4f6513b8233788e96ac8c05.jpg) + +![52660831093\_85a72a64c5\_o.jpg](3a09613b87df4f9cb2dec966008d135f.jpg) + +Our lead developers *[Halil](https://twitter.com/hibrahimkalkan)* and *[Alper](https://twitter.com/alperebicoglu)* presented the ABP.IO platform modules and features were quite busy enjoying their presenting work with latest version of demos. + +We introduced **[ABP Framework](https://abp.io)**, community-driven open-source web application framework, and **[ABP Commercial](https://commercial.abp.io)**, our enterprise-ready web development platform that is built on top of the open-source ABP Framework. + +![52660783985\_aa747395f6\_c.jpg](3a09613d3ba8b917e8e4a473a6ff0a7b.jpg) + +![F98C7DBC-C412-4010-BE0F-AAA3DF87F8FC.jpg](3a09613d87b1034d63a74d5da77b6ceb.jpg) + +We were pleased with the traffic coming by our booth all the time. + +On the conference, we chatted with [@Nick Chapsas](https://twitter.com/nickchapsas) in person. It was great to talk and discuss out of screen with him for ABP.IO this time. Hope to see more chemistry in our collaborations! + +![IMG\_0014.jpg](3a09613e6993994a27cb3dd7715ff6d1.jpg) + +![IMG\_3623.jpg](3a09613f0111d0bf3f477dfc6653d6b6.jpg) + +#### **SWAGGIE👀** + +For this year NDC London conference, we definitely brought really cool swags for the attendees: + +![IMG\_0010.jpg](3a096140602aa2e4345480767ee7ced8.jpg) + +![IMG\_3619.jpg](3a0961410637bce3c946855d5e559ecd.jpg) + +And I have to say, we’ve got lots of loving feedbacks from the folks on the venue! + +#### **NDC Party🍾** + +Another impression we’ve got from NDC London 2023 is the Thursday Night Party including an amazing music show. Check out the pictures below for feeling the dope live atmosphere! + +![52660620029\_f85f93f2b0\_w.jpg](3a096143f0266e4c809c33143d42e139.jpg) + +![52659840962\_849f1af229\_w.jpg](3a096144b581c4e1a35d85415c8bda44.jpg) + +![52660339311\_6c42d016b3\_w.jpg](3a096144eb966eb756f2f381e0dcbb73.jpg) + +![52660339286\_80576d16a5\_w.jpg](3a09614531ca59eecf978535611a4f76.jpg) + +#### **Drawing RAFFLE🎁** + +We ended up our last day of the conference with the exciting Raffle - META QUEST II ! + +![95f0b17d-a817-443b-8780-18ed1f125bb5.jpg](3a096148452f3112958cee9aed14aa8a.jpg) + +Under the eyes of everyone's great expectation, the winner turned out to be a very cute girl-developer from Poland. I bet she was the happiest one departed from the conference. + +![IMG\_3755.jpg](3a09614ee47c4815fb537306266608c4.jpg) + +It was an absolutely amazing week in NDC London. We had so much fun meeting all of you with pressure! Thanks to all enthusiasts developers and organizers who made the conference days shining inspiring! + +![52660784160\_446aecc95b\_c.jpg](3a09614fca668d23b0cef632d0cd74b8.jpg) + +We see you on the next one! Cheers! \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-02-21-abp-year-review-2022-wrap-up/post.md b/docs/en/Community-Articles/2023-02-21-abp-year-review-2022-wrap-up/post.md new file mode 100644 index 0000000000..6abf2f3d12 --- /dev/null +++ b/docs/en/Community-Articles/2023-02-21-abp-year-review-2022-wrap-up/post.md @@ -0,0 +1,100 @@ +

ABP Framework is an open source infrastructure that enables developers to create modern web applications by following the best practices and conventions of software development. In 2022, ABP Framework continued to thrive, achieving significant milestones and making waves in the software development community. With more than 9K GitHub stars and over 10 millions of downloads on NuGet, ABP Framework has become a go-to framework for developers seeking a reliable and efficient way to build web applications.

+ +

As ABP Team, we owe our success to our vibrant community, and we are immensely grateful for the support and contributions of each and every member. With your help, we achieved a lot in 2022. We remained committed to our values of transparency, openness, and collaboration, engaging with our community members as much as possible to ensure that we are creating a framework that meets their needs.

+ +

One of the major highlights of 2022 was the release of .NET Core 7, which provided a powerful platform for ABP Framework to build upon. Additionally, ABP Commercial and our training programs continued to help developers and businesses to leverage the power of the ABP Framework, enabling them to build modern web applications more efficiently and effectively than ever before.

+ +

In this article, we'll take a closer look at the key highlights of 2022 for ABP Framework, from major updates to achivements and the community insights. We are excited to share our progress with you and provide insights into how ABP Framework is continuing to shape the future of software development. So, let's dive in!

+ + + + +

NuGet Downloads

+

NuGet is a package manager designed specifically for the .NET ecosystem. It simplifies the process of creating and consuming packages, thanks to the NuGet client tools. By using these tools, developers can easily manage their project dependencies and improve their workflow.

+

In 2022, ABP Core NuGet package reached more than 10 million of downloads!

+

On the other hand, overall Volosoft NuGet Packages reached more than half a billion downloads!

+

Thank you all for your interest and support towards Volosoft and ABP packages.

+ + +

E-Books

+

Our published e-book amount is reached 3! This year, with our founder Halil İbrahim Kalkan's contributions we now have 3 published e-books.

+ + + +

Tutorial Videos

+

In 2022, we tried to be as much active as we could. To give you more insight and let you understand ABP Framework with short videos according to your interests, we published 48 tutorial videos. Though the videos were created by overall team members of ABP Framework, someone deserves a special mention here. Shout out to our ABP Core Team member Hamza Albreem for his hard work.

+ + +

GitHub Stars

+

ABP Framework GitHub repository reached more than 9K stars. We appreciate your interest and support for ABP Framework GitHub repository. We are working hard to be worthy of your interest and reach out to more people to simplify and streamline their development processes.

+ +

Community Talks

+

ABP Community Talks is our monthly event that brings together members of the ABP Framework community to discuss and exchange ideas. Prior to each event, we collect suggestions from our contributors, monitor trending topics in the industry, and review updates and news related to the ABP Platform to curate the topics for discussion. Once the topics are finalized, we announce them through our social media and community channels to ensure everyone is aware and can join in on the conversation.

+

We did 10 ABP Community Talks Episodes of and 1 ABP Suite webinar. You can take a look at them and check out our videos we have on Volosoft YouTube Channel.

+ +

ABP Community Contributions

+

The ABP Community is a hub that offers resources such as articles, video tutorials, and updates on ABP's development progress and events for ABP Framework, .NET, and software development. Developers can also connect with others, help each other, and share their expertise in ABP Community.

+
    You can check out each source from the list below. +
  • ABP Community Events: You can reach them from here.
  • +
  • ABP Community Posts: You can reach them from here
  • +
  • ABP Community Videos: You can reach them from here.
  • +
  • ABP Community Stackoverflow: You can reach them from here.
  • +
+

In 2022, the community's contribution reached a point where more than 100 resources. Thank you for all your effort! Please keep it going! It is becoming a more and more rich resource thanks to your variety of contributions and help.

+ + +

ABP Community Discord Server

+

To take community interaction to the next level, we created the official ABP Discord server, providing a platform for the ABP Community to connect and communicate instantly through chatting.

+

We were so excited announcing the official ABP Discord Server. In the first week of announcing it, the server quickly attracted over 500 members. We're grateful for your interest and support, which confirms the need for a dedicated platform for community interaction.

+> Join ABP Discord Server Now + + +

ABP Framework GitHub Contributions

+

In 2022, ABP Core Team worked hard to achieve milestones and give the best value with ABP Framework so users can benefit from its features. Additional to our team's work, ABP Framework is perfected in 2022 with ABP Community members' contributions, 3157 commits pushed from 48 different contributors.

+

We appreciate your hard work and effort you put into making ABP Framework better and improved.

+ + +

Events/Summits

+

We try to contribute to the developers community as much as we can since day 1. This year was no different. We tried to give value through sponsorships for developer communities. Especially with us leaving the pandemic behind every day, we try to keep up with the in-person events as well as online events. We plan to do more in next year. So, stay tuned!

+

This year, we sponsored to 4 events. They were, DevNot +Designing Monolith First for Microservice Architecture event, DNF Summit 2022, Developer Summit 2022, and .NET Conference 2022. + + +

ABP Releases

+

ABP Framework released 4 versions from 5.1 to 7.1 in 2022. You can check the release logs from ABP Framework Release Logs.

+

The most important milestone in these releases is that we upgraded ABP Framework to .NET 7.0 in ABP v7.0.

+

Additionally, we switched to OpenIddict for the startup templates in ABP v6.0.

+ + +

ABP Commercial

+

It has been a successful year for ABP Commercial as well as ABP Framework. We have already reached to more than 100 countries over the years of ABP Commercial's release. This year, we continued to be streamline businesses' development processes with ABP Commercial.

+
    +
  • We have served to different sizes of businesses from more than 50 countries and more than 40 industries .
  • +
  • We performed 286 hours of training to simplify users' learning curve of ABP Framework.
  • +
  • 1771 support tickets resolved in the premium support forum in which ABP Commercial users can ask their questions directly to ABP Core Team members via ABP Commercial Support Center in addition to community support we provide for ABP Framework users/developers.
  • +
  • We received 39 new testimonials, all from satisfied customers which led us to the other headline, Gartner Badges.
  • +
+ + +

LeptonX Theme

+

The Lepton Theme is a module that offers a theme for abp.io-based applications, featuring an Admin Dashboard designed by the ABP Platform. We released a version we called LeptonX Theme which is an upgraded version of Lepton Theme. You can view a live preview of the LeptonX Theme. While the LeptonX theme is currently exclusive to ABP Commercial users, ABP Framework users can still access the Lite version. You can see the documentation for ABP LeptonX Theme light from here.

+ + +

Gartner Badges

+

Gartner badges are given as an award to the listed softwares within their software review/suggestion platforms. To be able to get these awards, certain criterias have to be met such as ease of use, likelihood of recommend, functionality, etc. and they are calculated completely according to the users' real reviews.

+

In 2022, ABP Commercial reached to such success thanks to its users' support on Gartner, it has been recognized with 2 badges in Application Development category.

+ +

Thank you all for all these recognition you deemed us worthy of.

diff --git a/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-1.jpg b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-1.jpg new file mode 100644 index 0000000000..f0005d378d Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-1.jpg differ diff --git a/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-2.jpg b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-2.jpg new file mode 100644 index 0000000000..439e529ee9 Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-2.jpg differ diff --git a/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-3.jpg b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-3.jpg new file mode 100644 index 0000000000..309a7a142f Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/citext-3.jpg differ diff --git a/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/db-converter.jpg b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/db-converter.jpg new file mode 100644 index 0000000000..b2d0a78ee4 Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/db-converter.jpg differ diff --git a/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/post.md b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/post.md new file mode 100644 index 0000000000..d1ce98390c --- /dev/null +++ b/docs/en/Community-Articles/2023-03-20-migrating-from-ms-sql-to-postgresql/post.md @@ -0,0 +1,34 @@ +## Introduction + +Database migration is a common practice for organizations that want to move from one database system to another. This can be for various reasons, including cost, performance, and features. In this article, we will discuss migrating a database from MS-SQL to PostgreSQL, the challenges that may arise during the migration, and how to overcome them. And we recently moved the main database of the https://abp.io platform from MS-SQL to PostgreSQL. + +We switched our database from Microsoft SQL Server (MS-SQL) to PostgreSQL to move our on-premise platform to Azure. We’ve also discovered that the license cost for MS-SQL on Azure was significantly higher than PostgreSQL. After conducting a cost-benefit analysis, we migrated our database to PostgreSQL to save costs. + +Before migrating to Azure, we decided to switch our database from MS-SQL to PostgreSQL on-premise first. This allowed us to test and fine-tune the migration process before making the final switch to Azure. + +## Challenges + +Despite using a third-party tool(DBConvert for MySQL & PostgreSQL) for the migration, we faced three main problems when exporting data to PostgreSQL. Firstly, some tables with plain text had +UTF-8 encoding problems. We overcame this problem by dump-restoring these tables. + +![db-converter](db-converter.jpg) + + +Secondly, our database had to be case-insensitive, but PostgreSQL does not have this as a default configuration. We handled it using `citext` with the ABP migration service. + +![citext-1](citext-1.jpg) +![citext-2](citext-2.jpg) +![citext-3](citext-3.jpg) + + +While everything was proceeding very smoothly, we faced one last problem: importing binary data, such as the content of the NuGet packages. It was hard to understand that the binaries of the NuGet packages were different. Our paid commercial NuGet packages are stored as binary data in the database. Therefore, it was the most compelling part of this migration to transfer the NuGet packages. Fortunately, we overcame the binary error. And we decided to write a custom .NET tool to move only the binary data from MS-SQL to PostgreSQL, thanks to the ABP Core team! + + +## Conclusion + +One of the benefits of using PostgreSQL is the low license costs of the Azure platform. As the main contributors of ABP, we also use ABP Framework under the hood of our abp.io websites; we could easily switch to PostgreSQL. For those who want to switch their ABP project to PostgreSQL, check out [docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL). We had not used any MS-SQL specific function, therefore there was no need to make any changes in the repository classes. This means that the applications that were previously using MS-SQL can seamlessly switch to PostgreSQL without any modifications. + +Thanks to the flexibility of ABP, it has [PostgreSQL package](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.PostgreSql), which is 100% compatible with PostgreSQL. This helped us to make this migration very smooth and seamless. + +In conclusion, migrating a database from MS-SQL to PostgreSQL can be challenging, but it can bring significant cost savings in the long run. By testing and fine-tuning the migration process before making the final switch, we overcame the challenges we’d faced during the migration process. Thanks to the flexibility of ABP, we were able to make the transition with minimal code changes. Also, we didn't see any big performance differences between MS-SQL and PostgreSQL. + diff --git a/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/az-infra.png b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/az-infra.png new file mode 100644 index 0000000000..7602764591 Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/az-infra.png differ diff --git a/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/post.md b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/post.md new file mode 100644 index 0000000000..3069d06b02 --- /dev/null +++ b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/post.md @@ -0,0 +1,41 @@ + +Migrating a Kubernetes platform with a database from our own dedicated servers to Azure can be a compelling task, but it can be a necessary one to take advantage of the benefits that the cloud service offers. In this post, we will discuss the reasons for migrating from a on-premise platform to Azure, the steps taken to create and configure the [abp.io platform](https://abp.io) on Azure, and the benefits gained from the migration. + +### On-Premise Server: The old platform + +There were several reasons for migrating from the old on-premise platform to Azure. First, the Kubernetes cluster and the database were on the same Windows server. Additionally, the Linux virtual machines in Kubernetes were on the Windows server and had limited resources. Furthermore, the Kubernetes maintenance was quite challenging, which was another reason for the migration. + +### Reasons for Moving to Azure: The new platform + +The decision to move to the cloud was made to eliminate the disadvantages of the old platform. The migration to Azure meant that the resources would be independent of each other but faster in terms of communicating with each other. The platform would also take advantage of cloud security and availability. The managed Kubernetes service that Azure offers comes with autoscaling and loadbalancing, which makes the platform more reliable. Finally, the migration to Azure would provide a better quality service to global customers and the community. + +### Before Moving to Azure + +Before migrating to Azure, we decided to switch our database from MS-SQL to PostgreSQL on-premise first. This gave us the opportunity to test and fine-tune the migration process before making the final switch to Azure.You can check the details of database migration from this article [Migrating from MS-SQL to Postgresql](https://blog.abp.io/abp/Migrating-from-MS-SQL-to-Postgresql). + +The platform was tested in a staging environment created on Azure with the same resources as the production environment. The staging environment was used to test and optimize the migration process, including the migration of data from the old platform to Azure, which was tested multiple times to ensure success. + +### Creating and Configuring the abp.io Platform on Azure + +Several steps were taken to create and configure the abp.io platform on Azure. [Terraform](https://www.terraform.io/) was used to create the infrastructure (VM, Private Network, AKS, Postgresql Flexible Server...), while [Ansible](https://www.ansible.com/) was used to configure the Azure resources like Terraform, Helm, Kubectl, Docker, VPN, Redis, Prometheus, Grafana, ElasticSearch, Kibana and so on.... Azure DevOps pipelines and release were used for AKS deployment. The most time-consuming part in this process was to prepare, test and optimize the terraform and ansible settings files. + +To access our platform, which is configured on a private network in Azure, we require a VPN connection. To enable this, we have installed [Wireguard](https://www.wireguard.com/) - an open source VPN service - by creating a virtual machine using Terraform and configuring it with Ansible in Azure. This approach has made the process efficient and streamlined. + +![terra-wire](terra-wire.png) + +The most important step was to transfer the data in both the database and Kubernetes of the volumes. rsync (remote sync commands) were used to transfer the data from Kubernetes volumes to Azure Files through the VPN machine. Additionally, `pg_dump` and `pg_restore` were used to transfer the PostgreSQL database through the machine with VPN. + +Before the production environment, the data migration was tested many times for the staging environment. We estimated this migration to take max 1.5 hours. The ABP community was informed that there may be interruptions during the hours designated for the transition to Azure. To inform our customers and community, we created a status page before this migration. The new status page is [status.abp.io](https://status.abp.io). From now on we will make all the infrastructural announcements on [status.abp.io](https://status.abp.io). We used [Upptime](https://upptime.js.org) which is an open-source uptime monitor and status page provider. During the migration of the production environment, the websites and databases were still up and running. After the data transfer, the only remaining step was to direct the traffic of the already standing abp.io sites to the Azure Kubernetes service via Cloudflare. + +We would like to happily state that **we were offline for only 4 minutes** during this transition. + +![az-infra](az-infra.png) + + +### Benefits of Moving to Azure + +The migration to Azure resulted in several benefits. The platform is now more reliable, scalable, secure, solid with built-in one-click backup and recovery capabilities for abp.io. Additionally, the critical resources are in a private network, making them more secure than the old environment. When we initially compared the speed of our abp.io sites before and after migrating to Azure, we were pleasantly surprised by the significant improvement in performance. To be honest, we did not expect such a speed increase. + +![speed](speed.png) + +In conclusion, migrating a Kubernetes platform with a database from on-premise to Azure is a complex process that requires careful planning and execution. However, the benefits gained from the migration make the process worthwhile. By moving to Azure, the abp.io platform now has a more reliable and available infrastructure that is more secure than the old environment. The migration also resulted in significant improvements in connection speeds, which ultimately provides a better service to global customers and the community. diff --git a/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/speed.png b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/speed.png new file mode 100644 index 0000000000..186615468b Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/speed.png differ diff --git a/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/terra-wire.png b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/terra-wire.png new file mode 100644 index 0000000000..a2a032a1de Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-on-prem-to-azure-migration-of-abpio-platform-to-azure/terra-wire.png differ diff --git a/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/3a0a20886e5c7ab36bd0475a9674495e.png b/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/3a0a20886e5c7ab36bd0475a9674495e.png new file mode 100644 index 0000000000..730e48dc0b Binary files /dev/null and b/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/3a0a20886e5c7ab36bd0475a9674495e.png differ diff --git a/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/3a0a208890e0a0bd9a8348c07e9ca0d1.png b/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/3a0a208890e0a0bd9a8348c07e9ca0d1.png new file mode 100644 index 0000000000..b562de6dae Binary files /dev/null and b/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/3a0a208890e0a0bd9a8348c07e9ca0d1.png differ diff --git a/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/post.md b/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/post.md new file mode 100644 index 0000000000..3cc5956cc3 --- /dev/null +++ b/docs/en/Community-Articles/2023-03-23-abpio-platform-71-final-has-been-released/post.md @@ -0,0 +1,80 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.1 versions have been released today. + +## What's New With Version 7.1? + +All the new features were already explained in detail in the [7.1 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7.1-RC-Has-Been-Published), so no need to go over them again. Check it out for more details. + +## Getting Started with 7.1 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 7.1 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First of all, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +This version includes a very minor breaking change and it doesn't affect most of the applications. Check [the migration guide](https://docs.abp.io/en/abp/7.1/Migration-Guides/Abp-7_1) for the details. + +## Community News + +## ABP Community Talks 2023.2 + +The next ABP Community Talks will take place on March 30, at 18:00 (UTC). + +![abp-comm-talks-2023-2.png](3a0a20886e5c7ab36bd0475a9674495e.png) + +In this episode, core ABP Framework developers will discuss the benefits of using the ABP Framework as a .NET developer instead of creating your own solution from scratch. They will answer most of the common doubts about using ABP and application frameworks in general. You will better understand how ABP makes a developer’s life easier and more enjoyable while cutting production costs. We will also have a question - answer session after the talk, as always. I think this talk will be useful for every .NET developer whether they use ABP or not. + +**[CLICK HERE to register for the event and join us](https://kommunity.com/volosoft/events/abp-community-talks-20232-why-use-abp-framework-as-a-net-developer-e3254183)**. + +## Introducing the first ABP .NET Conference! + +As the ABP team, we've executed more than 10 [online events](https://community.abp.io/events) and gained a good experience of software talks. In May, we are organizing a full-featured software conference, named **ABP Dotnet Conference 2023**! + +![abp-conf-2023.png](3a0a208890e0a0bd9a8348c07e9ca0d1.png) + +We are still organizing the speakers, talks and schedule. There will be 12 sessions about software development and .NET. These will also include a few ABP-related talks. You can **follow https://abp.io/conference website** and buy early bird tickets from now. + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Creating Dockerfile for ABP Applications](https://community.abp.io/posts/creating-dockerfile-for-abp-applications-caj4fkxa) by [Anto Subash](https://community.abp.io/members/antosubash) +* [IdentityUser Relationship and Extending it](https://community.abp.io/posts/identityuser-relationship-and-extending-it-xtv79mpx) by [Onur Pıçakçı](https://community.abp.io/members/onurpicakci) +* [Streamline Localization in Your ABP Project](https://community.abp.io/posts/streamline-localization-in-your-abp-project-1t12rmjc) by [Salih Özkara](https://community.abp.io/members/salih) +* [.Net Microservice template with ABP](https://community.abp.io/posts/.net-microservice-template-with-abp-53r52ryy) by [Anto Subash](https://community.abp.io/members/antosubash) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 7.2. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/discord.png b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/discord.png new file mode 100644 index 0000000000..0e773729e4 Binary files /dev/null and b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/discord.png differ diff --git a/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/gh-status.png b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/gh-status.png new file mode 100644 index 0000000000..0490eeb6f6 Binary files /dev/null and b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/gh-status.png differ diff --git a/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/issue.png b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/issue.png new file mode 100644 index 0000000000..7f21404e8f Binary files /dev/null and b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/issue.png differ diff --git a/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/post.md b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/post.md new file mode 100644 index 0000000000..33221e869b --- /dev/null +++ b/docs/en/Community-Articles/2023-03-27-creating-a-custom-status-page-for-abpio-with-upptime/post.md @@ -0,0 +1,112 @@ +# Creating a Custom Status Page for abp.io with Upptime + +## Introduction +In today's digital world, providing reliable and transparent information about your platform's availability is essential to maintaining trust among your community and customers. With the growing number of abp.io users, we needed a dedicated status page [status.abp.io](https://status.abp.io/) to keep everyone informed about our platform's health. To achieve this, we utilized the open-source project [Upptime](https://upptime.js.org/) and built a custom status page on [GitHub Pages](https://pages.github.com/). In this article, we'll guide you through the process of creating our own status page and customizing it to suit our needs. + +## Why we chose Upptime +[Upptime](https://github.com/upptime/upptime) is an open-source, easy-to-use, and cost-effective solution for monitoring websites and APIs. It offers essential features, such as downtime alerts, response time monitoring, and status history. We decided to use Upptime because of its compatibility with GitHub Pages, ease of customization, comprehensive [documentation ](https://upptime.js.org/docs/) and discord notifications. + +![gh-status](gh-status.png) + +#### Advantages of Upptime +* Open-source: Allows easy customization and community support. + +* GitHub Pages compatibility: Seamless integration with GitHub Pages for hosting. + +* Cost-effective: Utilizes GitHub Actions, which provides free monitoring within the GitHub Actions usage limits. + +* Comprehensive documentation: Easy-to-follow instructions for setting up and customizing the status page. + +#### Disadvantages of Upptime +* Limited monitoring capabilities: Upptime offers basic monitoring features but lacks advanced capabilities found in dedicated monitoring tools. + +* Dependence on GitHub Actions: Upptime relies on GitHub Actions, which may pose limitations for users unfamiliar with GitHub's ecosystem or those with large-scale projects. + +* No built-in alerting system: Users must rely on third-party integrations or custom solutions for notifications, requiring additional configuration. + +* Limited customization options: Upptime allows for some customization, but options are limited compared to comprehensive monitoring platforms. + +* Self-hosted limitations: As a self-hosted solution, users are responsible for maintaining and managing their own infrastructure, which may not be ideal for those who prefer a fully managed monitoring solution. + + +## How to set up the status page on GitHub Pages +To get started with our custom status page, we followed the instructions in the [Upptime documentation](https://upptime.js.org/docs/). Here's a summary of the steps we took: + +* Fork the Upptime [template repository](https://github.com/upptime/upptime) to our own GitHub account as [abpio-status](https://github.com/abpframework/abpio-status). + +* Configure the GitHub Actions workflow. We configured the GitHub Actions workflow by adding the following lines to the [`.github/workflows/uptime.yml`](https://github.com/abpframework/abpio-status/blob/master/.github/workflows/uptime.yml) + +* Add the monitored endpoints. We added the monitored endpoints (our abp.io websites) to the [.upptimerc.yml](https://github.com/abpframework/abpio-status/blob/master/.upptimerc.yml) file. This file is located in the root of the repository and contains a list of URLs that Upptime monitors. + +```yaml +sites: + - name: abp.io + url: https://abp.io/health-status + - name: community.abp.io + url: https://community.abp.io/health-status + - name: commercial.abp.io + url: https://commercial.abp.io/health-status + - name: nuget.abp.io + url: https://nuget.abp.io/health-status + - name: docs.abp.io + url: https://docs.abp.io/health-status + - name: support.abp.io + url: https://support.abp.io/health-status + - name: blog.abp.io + url: https://blog.abp.io/health-status + - name: commercial-demo.abp.io + url: https://commercial-demo.abp.io/health-status +``` +* Enable GitHub Pages. Finally, we enabled GitHub Pages for our forked repository by going to the repository's settings and selecting the gh-pages branch as the source. This made our status page accessible at [status.abp.io](https://status.abp.io/). + +## Customizing the status page + +After setting up the default Upptime status page, we focused on customizing it to align with our brand and provide a consistent experience for our community and customers. We made the following changes: + +* Updating the logo and favicon. We replaced the default logo and favicon with our own abp.io branded assets. This involved adding the new image files to the repository and updating the references in the `.upptimerc.yml` file: + +* Customizing the color scheme and typography. We customized the color scheme and typography to match our corporate identity by editing the `.upptimerc.yml` file: + +```yaml +status-website: + theme: dark + # Add your custom domain name, or remove the `cname` line if you don't have a domain + # Uncomment the `baseUrl` line if you don't have a custom domain and add your repo name there + cname: status.abp.io + # baseUrl: /abpio-status + logoUrl: https://commercial.abp.io/assets/svg/abp-logo-light.svg + favicon: https://raw.githubusercontent.com/abpframework/abpio-status/master/assets/abp-logo-without-text.svg + faviconSvg: https://raw.githubusercontent.com/abpframework/abpio-status/master/assets/abp-logo-without-text.svg +``` +## Creating GitHub Issues for Maintenance Information on status.abp.io + +To provide maintenance information for your status page, you can create GitHub issues in your repository. This allows you to inform your users about planned downtime or ongoing maintenance work. + +![issue](issue.png) + +## Discord Notifications + +### Create a Discord Webhook + +To set up Discord notifications for your status.abp.io status page using [Upptime documentation](https://upptime.js.org/docs/notifications#discord), follow these steps: + +* In Discord, go to "Server Settings" > "Integrations" > "Create Webhook." +* Customize the Webhook name, choose a channel, and copy the Webhook URL. + +### Configure GitHub Actions +* In your Upptime repository, go to the "Settings" tab. +* Click on "Secrets" and then "New repository secret." +* Add secret: Name it DISCORD_WEBHOOK_URL and paste the Webhook URL as the value. +* Add environment variables NOTIFICATION_DISCORD_WEBHOOK and NOTIFICATION_DISCORD set it to true. + +Your status page will now send notifications to your Discord channel whenever there's a change in your platform's status. + +![discord](discord.png) + + +## Conclusion +If your primary goal is to create a simple, cost-effective status page with basic monitoring features, Upptime is an excellent choice. Its open-source nature, seamless integration with GitHub Pages, and comprehensive documentation make it a user-friendly option. + +If you require advanced monitoring capabilities or prefer a fully managed monitoring solution, you may want to explore dedicated monitoring tools, such as Pingdom, Uptime Robot, or Datadog. These tools typically offer more robust monitoring features, built-in alerting systems, and customizable dashboards. + +Creating a custom status page for abp.io using Upptime and GitHub Pages proved to be an efficient and cost-effective solution. By following the documentation and customizing the template, we were able to provide our community and customers with a reliable source of information about our platform's availability. With this new status page [status.abp.io](https://status.abp.io/), we can continue to build trust and transparency as our platform grows and evolves. diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574d0d129822a1deb4f2f5b3310a.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574d0d129822a1deb4f2f5b3310a.png new file mode 100644 index 0000000000..081376668b Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574d0d129822a1deb4f2f5b3310a.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574d690031cc40f67400922eecfb.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574d690031cc40f67400922eecfb.png new file mode 100644 index 0000000000..cecdd739b4 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574d690031cc40f67400922eecfb.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574dd6214b6de0cf998da277eb4d.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574dd6214b6de0cf998da277eb4d.png new file mode 100644 index 0000000000..2550a9209d Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574dd6214b6de0cf998da277eb4d.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574e38a4fd3d6dda4f9884ecd502.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574e38a4fd3d6dda4f9884ecd502.png new file mode 100644 index 0000000000..45f6261a57 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574e38a4fd3d6dda4f9884ecd502.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574edb1461fcb4a37a2cdd16783e.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574edb1461fcb4a37a2cdd16783e.png new file mode 100644 index 0000000000..e709f00327 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574edb1461fcb4a37a2cdd16783e.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574f237946f9746a99e2ef62fca8.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574f237946f9746a99e2ef62fca8.png new file mode 100644 index 0000000000..dee5928bbd Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574f237946f9746a99e2ef62fca8.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574f7e65be09cff31cdfeacadb66.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574f7e65be09cff31cdfeacadb66.png new file mode 100644 index 0000000000..96943ef81f Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a574f7e65be09cff31cdfeacadb66.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a575077ee05f6b67f1d05658457ff.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a575077ee05f6b67f1d05658457ff.png new file mode 100644 index 0000000000..bae6f08238 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a575077ee05f6b67f1d05658457ff.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5ba45243aa36cf8878e3907f96a8.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5ba45243aa36cf8878e3907f96a8.png new file mode 100644 index 0000000000..e4ad6d6014 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5ba45243aa36cf8878e3907f96a8.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5ba4ffbab9c4d502284b08b92b18.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5ba4ffbab9c4d502284b08b92b18.png new file mode 100644 index 0000000000..0d5f5a7e9a Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5ba4ffbab9c4d502284b08b92b18.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5bccb0f41d45e97f2ff4d962d5fd.png b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5bccb0f41d45e97f2ff4d962d5fd.png new file mode 100644 index 0000000000..b1157793bf Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/3a0a5bccb0f41d45e97f2ff4d962d5fd.png differ diff --git a/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/post.md b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/post.md new file mode 100644 index 0000000000..b5ac2c7a46 --- /dev/null +++ b/docs/en/Community-Articles/2023-04-03-abp-framework-open-source-web-application-development-framework/post.md @@ -0,0 +1,127 @@ + + +ABP Framework is an open-source web application development framework that provides developers with a set of tools to build modern, scalable, and maintainable web applications. ABP Framework is also a C# web framework that is based on the ASP.NET web framework. It is one of the [most popular repository](https://github.com/abpframework/abp) for open source application framework. + +![ABP Framework is an open source web development framework ](3a0a5bccb0f41d45e97f2ff4d962d5fd.png) + +ABP Framework is a modular and extensible framework that uses clean architecture principles and is built on top of the latest .NET technologies. The framework comes with a set of pre-built modules, including user management, role management, permission management, and content management system (CMS) modules, which makes it easier for developers to create line of business applications. + + + +## Clean Architecture + +When you want to start a new scratch project, you first google Dotnet Framework Architecture. There are some boilerplate dotnet startup templates, but these are only an orchestration of some popular tools. ABP is not a template, but it's a full stack open source application development framework. + +When you say "Clean Architecture ASP.NET Core", the first web development framework that comes to mind is undoubtedly the ABP Framework. It is built using clean architecture principles, which help developers build scalable and maintainable applications. The clean architecture separates the application into distinct layers, each with a clear responsibility. The dotnet architecture layers include the presentation layer, application layer, domain layer, and infrastructure layer. Each layer has a clear responsibility, which helps in separating concerns and keeping the code organized. This makes ABP Framework one of the best asp net frameworks. + +![Clean architecture - ABP Layers](3a0a574d0d129822a1deb4f2f5b3310a.png) + + +## C# Web Framework for Web Development + +ABP Framework is built using C#, which is a modern programming language that is widely used in the development of web applications. C# provides developers with a set of features that make it easy to write clean and maintainable code. ABP Framework is a web framework that is designed to work with C# and provides developers with a set of tools that makes it easy to build modern web applications. If you are looking for an ASP NET Core shared framework download, then go to https://abp.io/get-started and create your project. + +![ABP Framework Essentials](3a0a574f237946f9746a99e2ef62fca8.png) + +## Yet another ASP.NET Web Framework + +There are a few full stack AspNet Core frameworks around. Many of them are one developer projects which can be risky for you to start a long running project. ABP Framework is built on top of the latest ASP NET Core Framework, which provides developers with a set of features that makes it easy to build modern web applications. And most important part is, ABP is backed with a large group of developers and it has almost 10K stars on GitHub. ASP.NET provides developers with a set of tools that makes it easy to build web applications using a model-view-controller (MVC) architecture. + +![ABP.io Platform](3a0a575077ee05f6b67f1d05658457ff.png) + + +## Implementing Domain Driven Design with C# + +ABP Framework provides developers with a set of tools that make it easy to implement domain-driven design principles. The framework comes with a set of pre-built modules, including user management, role management, permission management, and content management system (CMS) modules, which makes it easier for developers to create complex applications. + +![Implementing Domain Driven Design with C#](3a0a574e38a4fd3d6dda4f9884ecd502.png) + + + +## Open Source Web Application + +ABP Framework is an open-source web application development framework that is free to use and distribute. The framework is licensed under the MIT license, meaning developers can use it for commercial and non-commercial purposes without any restrictions. + + + +## .NET Application Framework with Pre-Built Modules + +ABP Framework is built using the latest .NET technologies and provides developers with a set of tools that makes it easy to build modern web applications. ABP contains several important modules of a line of business applications. + +![ABP Pre-built Modules](3a0a5ba4ffbab9c4d502284b08b92b18.png) + + +## C# Microservice Framework + +ABP Framework is a C# microservices framework that is designed to help developers build scalable and maintainable microservices. The framework is also known as .NET .net microservices framework. It provides developers with a set of tools that makes it easy to build microservices using clean architecture principles. + +![C# Microservice Framework](3a0a574dd6214b6de0cf998da277eb4d.png) + + +## CRUD Tool Dotnet + +ABP Framework has a commercial version as well. The paid version comes with premium support, rich themes and there's a very handy tool called [ABP Suite](https://commercial.abp.io/tools/suite) for "CRUD page generation ASP.NET". While ABP is not a low-code or no-code platform, ABP Suite provides ASP NET rapid application development. There are many ASP.NET rapid development tools but only tools without a framework support. If you are looking for web based rapid application development tools (also open-source), ABP is the way to go! + +![ABP Suite](3a0a5ba45243aa36cf8878e3907f96a8.png) + +## Modular Development + +One of the best sides of the ABP Framework is the modular development side. It's born as a modular system. There are several open source web frameworks around but many of them lack of modularity. + +![Modular Development](3a0a574f7e65be09cff31cdfeacadb66.png) + + +Let's see the key features of the ABP Framework: + +- Multi-tenancy support +- Cross-cutting concerns implemented +- Full-stack microservice solution +- SaaS framework +- ASP.NET modular monolith +- Has an ASP.NET user management module +- Distributed events +- Layered architecture +- Free framework for website +- Several framework templates + + + +## The Essential Features of ABP + +ABP Framework is an open source SaaS framework. This crucial feature distinguishes it from other open source web development frameworks. + +![Essential Features](3a0a574edb1461fcb4a37a2cdd16783e.png) + +The following essential ASP.NET features are available in the ABP Framework: + +ASP.NET modularity, ASP.NET modular development, ASP.NET localization, ASP.NET multi-tenancy, ASP.NET SaaS, ASP.NET SaaS framework, ASP.NET distributed events, ASP.NET distributed event bus, ASP.NET cross-cutting concerns, ASP.NET blob storing, ASP.NET audit logging, ASP.NET microservice, ASP.NET microservice solution, ASP.NET microservice example, ASP.NET API gateway, ASP.NET domain driven design, ASP.NET layered architecture, ASP.NET layering, ASP.NET clean architecture, ASP.NET authentication, ASP.NET authorization, ASP.NET identity, ASP.NET identity server, ASP.NET IdentityServer, ASP.NET payment module, ASP.NET best practices, ASP.NET design patterns, ASP.NET background jobs, ASP.NET exception handling, ASP.NET background workers, ASP.NET repository, ASP.NET repository pattern, ASP.NET unit of work, ASP.NET domain services, ASP.NET swagger, ASP.NET content management system, ASP.NET user management, ASP.NET role management, ASP.NET permission management + + + +## Microservice Example: eShopOnAbp + +[eShopOnAbp](https://github.com/abpframework/eShopOnAbp) is a microservice example built on top of ABP. It is a sample net application similar to Microsoft's [eShopOnContainer](https://github.com/dotnet-architecture/eShopOnContainers) project. It is a reference microservice solution built with the ABP Framework and .NET, runs on Kubernetes with Helm configuration and includes API Gateways, Angular and ASP.NET Core MVC applications with PostgreSQL and MongoDB databases. For more information, check out https://github.com/abpframework/eShopOnAbp. + +> ⚠️ **Important Notice** +> This project, "eshoponabp," is outdated. It served as a reference project for microservice architecture using the ABP Framework, but we now recommend using the [ABP Microservice Solution Template](https://abp.io/docs/latest/solution-templates/microservice) for new projects. +> +> The new template offers a modernized and officially supported starting point for building microservices with ABP. Please consider transitioning to the new template for the latest features and improvements. + + +## Conclusion + +In conclusion, ABP Framework is an open-source web development framework that offers many features and benefits for building modern and scalable web applications. Its modular and extensible architecture, implementation of Domain-Driven Design, and compatibility with various platforms make it a popular choice for developers. Whether you're building a web application, microservices, or modular monoliths, ABP Framework has everything you need to get started. + +![conclusion](3a0a574d690031cc40f67400922eecfb.png) + +Whether you're building a dot net website, a web app infrastructure, or a webpage framework, open source web application frameworks are a cost-effective and flexible option for web development. If you are looking for an open source web application builder which contains a project framework template with web application development tools (open source), [ABP Framework](https://abp.io/) is the right choice. + +--- + +> I'm Alper Ebicoglu 🧑🏽‍💻\ +> ABP Framework Core Team Member\ +> Follow me for the latest news about .NET and software development:\ +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu)\ +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu)\ +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu)\ +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline) diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3c7807c882c1889c1f431b86b7.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3c7807c882c1889c1f431b86b7.png new file mode 100644 index 0000000000..0bd8d212b8 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3c7807c882c1889c1f431b86b7.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3d69a4f5b2b15674fc70e97ba2.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3d69a4f5b2b15674fc70e97ba2.png new file mode 100644 index 0000000000..2f68e23137 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3d69a4f5b2b15674fc70e97ba2.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3dbc9eb0ada4effa3d06208fb4.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3dbc9eb0ada4effa3d06208fb4.png new file mode 100644 index 0000000000..c3a5ffdaec Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b3dbc9eb0ada4effa3d06208fb4.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b43a8bea7e8df7d2ff6b7f1aa8f.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b43a8bea7e8df7d2ff6b7f1aa8f.png new file mode 100644 index 0000000000..6c166ac7eb Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b43a8bea7e8df7d2ff6b7f1aa8f.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b44fb2a208a89d3c9a56916d653.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b44fb2a208a89d3c9a56916d653.png new file mode 100644 index 0000000000..4c4b714694 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b44fb2a208a89d3c9a56916d653.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b45f7f68832d7a7f72262f3c216.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b45f7f68832d7a7f72262f3c216.png new file mode 100644 index 0000000000..5889357a42 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b45f7f68832d7a7f72262f3c216.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b4812b27aa05c1159478175fa02.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b4812b27aa05c1159478175fa02.png new file mode 100644 index 0000000000..50d8d09f9b Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b4812b27aa05c1159478175fa02.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b492ee3cbf9482090fcc8473653.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b492ee3cbf9482090fcc8473653.png new file mode 100644 index 0000000000..b18c3b716a Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b492ee3cbf9482090fcc8473653.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b4b7f00461297fbe88d4c34b831.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b4b7f00461297fbe88d4c34b831.png new file mode 100644 index 0000000000..287d130cb8 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b4b7f00461297fbe88d4c34b831.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b58d26f47970f6edd6f6fbee851.png b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b58d26f47970f6edd6f6fbee851.png new file mode 100644 index 0000000000..7c07800cac Binary files /dev/null and b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/3a0a6b58d26f47970f6edd6f6fbee851.png differ diff --git a/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/post.md b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/post.md new file mode 100644 index 0000000000..35624d8c32 --- /dev/null +++ b/docs/en/Community-Articles/2023-04-07-abp-framework-the-ultimate-net-web-framework-for-rapid-application-development/post.md @@ -0,0 +1,99 @@ +Building robust web applications has become more important than ever as the world is becoming more web-focused. Choosing the right web development framework can be challenging with the rise of new tools and frameworks. Especially if you are a .NET developer, there are not so many popular ASPNET Framework around. However, the ABP Framework has become popular for many developers due to its flexibility, scalability, feature set and performance. Let's mention what's ABP Framework and what it promises to .NET developers. + +## ASP.NET Core Architecture Best Practices + +![ABP Key Features](3a0a6b44fb2a208a89d3c9a56916d653.png) + +ABP Framework is an application design framework that provides developers with a powerful set of tools to build web applications quickly and efficiently. It is an open-source, cross-platform framework supporting monolithic and microservices architectures. ABP Framework is built on top of the ASP.NET Core architecture and incorporates best practices for developing web applications. + +## ASP.NET Platform + +The framework includes a wide range of features, such as an angular code generator with the help of [ABP Suite](https://commercial.abp.io/tools/suite), project templates, and web application themes. These features enable developers to create web applications that are both functional and visually appealing without spending much time on coding. Moreover, ABP Framework provides a common application framework that can be used for different applications, including SaaS, e-commerce, and social media platforms. + +ABP Framework also supports the domain-driven design, which means that the framework is designed to be flexible and adaptable to different business requirements. This approach allows developers to build applications aligned with business needs, ensuring they are efficient and effective. + +## Open Source Dot Net Framework + +One of the major advantages of ABP Framework is its open-source nature. Many developers continuously improve and update the framework, making it more reliable and secure. Moreover, the ABP Framework is compatible with multiple .NET frameworks, including ASP.NET and .NET Core. When starting your project on top of a solid Microsoft web framework, the ABP Framework is one of the best choices. + +![ABP is cross platform](3a0a6b45f7f68832d7a7f72262f3c216.png) + +Another advantage of ABP Framework is that it provides rapid web application development tools that are easy to use. The framework includes project templates that developers can use as a starting point for their web applications, which can significantly reduce the development time. ABP Framework also provides a web app builder that developers can use to create web applications quickly and efficiently. + +## ASPNET Core Architecture + +ABP Framework is also compatible with Microsoft's Clean Architecture, a software design pattern that promotes separation of concerns and maintainability. This integration ensures that the applications developed using ABP Framework are well-structured, easy to maintain, and scalable. Many application marketplace reviewers commented about ABP as the best web application framework. While ABP supports multiple UI choices like MVC, Angular, Blazor Web Assembly, and Blazor Server, the most downloaded one is MVC microservice architecture. If you are here to find a NET application framework for your next NET Core application, you are in the right place! + +![ABP Framework Project Hierarchy](3a0a6b4812b27aa05c1159478175fa02.png) + +Clean Architecture is a design pattern emphasizing the separation of concerns, ensuring that the code is organized in independent layers. This helps developers to write code that is easy to maintain, test and refactor. ABP Framework uses this pattern to structure its application code and ensure it is easy to manage. + +## Open Source Web Framework + +ABP Framework is an open-source web framework that is free to use and distribute. The framework is licensed under the MIT license, meaning developers can use it for commercial and non-commercial purposes without any restrictions. + +ABP Framework provides different templates, which are ASPNET Core web app compatible with various platforms, including Windows, Linux, and macOS. + +## Domain Driven Design DotNet + +The ABP Framework also implements Domain-Driven Design (DDD), a software design methodology that emphasizes the importance of the domain model. The framework provides a guide for implementing DDD through an implementing domain-driven design. It helps developers to create a domain model that is easy to understand, test, and maintain. As ABP is a C# framework, it supports most of the common application framework features for a core framework. + +![ABP Framework - Domain Driven Design e-book](3a0a6b492ee3cbf9482090fcc8473653.png) + +There is also a free PDF e-book for Dotnet developers that explains the Domain Driven Design principle with real-world examples. The book is written by the ABP Core Team. You can download this e-book at [abp.io/books/implementing-domain-driven-design](https://abp.io/books/implementing-domain-driven-design) + +![The official book of ABP Framework: Mastering ABP Framework](3a0a6b58d26f47970f6edd6f6fbee851.png) + +You can also purchase the official Mastering ABP Framework book from Amazon. Check out [amazon.com/Mastering-ABP-Framework-maintainable-implementing/dp/1801079242](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing/dp/1801079242) + +## It's a Dotnet Web Framework + +ABP Framework is a dotnet web framework that is designed with C# and provides developers with a set of tools that makes it easy to build modern web applications. Whether you want to start a new dotnet monolithic solution or dotnet microservice solution, you can start with ABP. Creating your own dotnet framework architecture may be hard if you don't have many years of experience. The brain team of the ABP Framework specializes in ASP.NET framework architecture and ASP.NET application frameworks. + +![ABP Framework is developer focused](3a0a6b3c7807c882c1889c1f431b86b7.png) + +## Essential Features of the ABP Framework: + +ASP.NET Core modularity, ASP.NET Core modular development, ASP.NET Core localization, ASP.NET Core SaaS framework, ASP.NET Core distributed, event, bus, ASP.NET Core cross-cutting concerns, ASP.NET Core blob storing, ASP.NET Core audit logging, ASP.NET Core microservice, ASP.NET Core microservice solution, ASP.NET Core microservice example, ASP.NET Core API gateway, ASP.NET Core domain, driven, design, ASP.NET Core layered architecture, ASP.NET Core layering, ASP.NET Core clean architecture, ASP.NET Core authentication, ASP.NET Core authorization, ASP.NET Core UI theme, ASP.NET Core tag helpers, ASP.NET Core identity, ASP.NET Core, identity, server, ASP.NET Core IdentityServer, ASP.NET Core payment module, ASP.NET Core best practices, ASP.NET Core design patterns, ASP.NET Core background jobs, ASP.NET Core exception handling, ASP.NET Core, background, workers, ASP.NET Core repository, ASP.NET Core repository pattern, ASP.NET Core unit of work, ASP.NET Core domain services, ASP.NET Core Swagger, ASP.NET Core content management system, ASP.NET Core CMS module, ASP.NET Core user management, ASP.NET Core Role management, ASP.NET Core permission management + +![ABP Essential Features](3a0a6b4b7f00461297fbe88d4c34b831.png) + +## Open Source Web Application Framework + +ABP Framework is an open-source web application development framework that is free to use and distribute. The framework is licensed under the MIT license, meaning developers can use it for commercial and non-commercial purposes without any restrictions. + +![ABP Framework is open-source](3a0a6b43a8bea7e8df7d2ff6b7f1aa8f.png) + +## C# Web Application Framework + +ABP Framework is built using C#, which is a modern programming language that is widely used in the development of web applications. C# provides developers with features that make it easy to write clean and maintainable code. ABP Framework is a web framework designed to work with C# and provides developers with tools that make it easy to build modern web applications. + +## Key Features + +The following .NET features are available in the ABP Framework: + +.NET modular development, .NET localization, .NET multi-tenancy, .NET SaaS framework, .NET distributed event bus, .NET cross-cutting concerns, .NET, microservice, .NET microservice solution, .NET microservice example, .NET Domain Driven Design, .NET clean architecture, .NET authentication, .NET authorization, .NET best practices, .NET design patterns, .NET exception handling, .NET background workers, .NET unit of work, .NET domain services, .NET user management, .NET role management, .NET permission management + +![ABP Framework Features](3a0a6b3d69a4f5b2b15674fc70e97ba2.png) + +The following keywords best describe the ABP Framework; + +Open source backend framework, open source development framework, open source web app builder, open source web applications, open source web development, web application development framework, web application framework, web application framework software, web application infrastructure, web application open source, asp net framework, asp net open source, ASP.NET application, ASP.NET software, ASP.NET web app, ASP.NET web development, web app builder open source, web app framework, Dotnet framework, Dotnet UI framework, Dotnet web application themes. + + + +## Conclusion + +ABP Framework is a powerful and flexible web application framework that provides developers with the tools to build high-quality web applications quickly and efficiently. It is an open-source, cross-platform framework that supports multiple .NET frameworks, including ASP.NET and .NET Core. ABP Framework provides rapid web application development tools, project templates, and web application themes that enable developers to create visually appealing and functional applications in no time. + +![Try ABP Framework Now to be hero in the first day](3a0a6b3dbc9eb0ada4effa3d06208fb4.png) + +--- + +> I'm Alper Ebicoglu 🧑🏽‍💻\ +> ABP Framework Core Team Member\ +> Follow me for the latest news about .NET and software development:\ +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu)\ +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu)\ +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu)\ +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline) diff --git a/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/3a0a80478f1cfd26d5802eff5361ba70.png b/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/3a0a80478f1cfd26d5802eff5361ba70.png new file mode 100644 index 0000000000..e986bb5719 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/3a0a80478f1cfd26d5802eff5361ba70.png differ diff --git a/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/3a0a87d836c4e1b10a280fbab982d55f.png b/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/3a0a87d836c4e1b10a280fbab982d55f.png new file mode 100644 index 0000000000..574dd90088 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/3a0a87d836c4e1b10a280fbab982d55f.png differ diff --git a/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/post.md b/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/post.md new file mode 100644 index 0000000000..9862081f39 --- /dev/null +++ b/docs/en/Community-Articles/2023-04-11-top-10-net-core-libraries-every-developer-should-know-/post.md @@ -0,0 +1,81 @@ +> *Brief Summary*: +> +> This article is intended for .NET Core developers who wish to create a robust and useful.NET core application. It is a list of the most popular and widely used .NET Core libraries that have been carefully vetted. Go up the GitHub reference link for the DotNet libraries and see how many stars the .NET community has rewarded. + + + +## Best .NET libraries — Top useful libraries every .NET developers use + +.NET Core has become one of the most popular frameworks for developing modern applications. One of the reasons for its popularity is the wide range of libraries available to developers. .NET Core got new updates in its features with lesser coding, deploying high-accomplishment, and extremely scalable applications. Making the underlying architecture functions more effective and efficient without having to reinvent the wheel will free up your time to focus on more crucial tasks, including making your application stand out from the competition. + +In this article, we'll take a closer look at **The Most Popular .NET Libraries Every Developer Should Know**. As a software developer, you're likely familiar with the .NET framework and the many libraries it offers. With so many options available, it can be overwhelming to know which ones to choose for your project. This is the main reason I have compiled a list of the **Top 10 .NET Libraries That Developers Should Use** to make their development process more efficient and effective. A list of Top 10 .NET Core Libraries will let developers understand these so that they can pick appropriate libraries for their projects. + +If you're a .NET Core developer, there are **10 important .NET Core libraries** that you should be familiar with. While creating these **Essential 10 .NET Libraries Every Developer Must Know**, I used NuGet and GitHub.com popular repositories. And all the libraries listed here are also open-source. The list is filtered with only to .NET Core related libraries. Also I excluded the Microsoft .NET Core Framework libraries from this **Top 10 Unique .NET Core Libraries Developers Must Utilize**. So, without further ado, let’s get right into it: + + +![Best .NET libraries with GitHub stars and download counts](3a0a87d836c4e1b10a280fbab982d55f.png) + +## Top 10 best libraries for .NET developers + + +Here's the list of the most popular open-source .NET tools: + +1. **Newtonsoft.Json:** This library is widely used for working with JSON data in .NET applications. It provides high performance and ease of use, making it a go-to solution for serialization and deserialization of JSON data. +2. **Dapper:** It is a simple and efficient ORM that offers high performance and flexibility when working with relational databases. It is easy to use and offers a fast and efficient way to interact with databases. +3. **Polly:** Polly is a library that helps handle transient errors and faults in .NET applications. It offers an easy-to-use policy-based approach to handling retries, timeouts, and circuit breakers, making it a valuable tool for building reliable applications. +4. **AutoMapper**: This .NET Core library simplifies object-to-object mapping by automatically mapping properties from one object to another. This library is especially useful in larger projects where mapping can become time-consuming and tedious. +5. **FluentValidation:** It is a library that provides a fluent API for building validation rules. It makes it easy to create complex validation logic and supports a wide range of validation scenarios, making it a valuable tool for ensuring data integrity in your applications. +6. **Serilog**: This library is a structured logging library that makes it easy to collect and analyze logs from your application. It offers flexibility and extensibility, and supports a variety of sinks for storing logs, including Elasticsearch, SQL Server, and more. +7. **Swashbuckle.AspNetCore.Swagger:** This library generates OpenAPI documentation for your ASP.NET Core Web API. It makes it easy to understand the functionality of your API and allows you to easily generate client code for your API. +8. **NLog**: It is is a free logging platform for .NET with rich log routing and management capabilities. It makes it easy to produce and manage high-quality logs for your application regardless of its size or complexity. +9. **Moq4**: It is is a popular mocking framework for .NET applications. It makes it easy to create mock objects for unit testing, reducing the need for expensive and time-consuming integration testing. +10. **StackExchange.Redis**: This is a library for working with Redis databases in .NET applications. It provides a simple and efficient way to interact with Redis, and offers high performance and scalability. + +------ + + +![10 important .NET Core Libraries](3a0a80478f1cfd26d5802eff5361ba70.png) + + +## Top 10 .NET Core Libraries List That Every Developer Must Know + +Here you can see them in the table with the GitHub stars, GitHub release counts, recent release frequency, NuGet download counts and per day NuGet download counts: + +| GitHub URL | NuGet URL | Stars | Releases | Last release | Downloads | Download Per Day | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- | -------- | ------------ | --------- | ---------------- | +| [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) | [Newtonsoft.Json](https://www.nuget.org/packages/Newtonsoft.Json) | 10K | 65 | 1 month ago | 3B | 680K | +| [Dapper](https://github.com/DapperLib/Dapper) | [Dapper](https://www.nuget.org/packages/Dapper) | 16K | 70 | 2 years ago | 216M | 50K | +| [Polly](https://github.com/App-vNext/Polly) | [Polly](https://www.nuget.org/packages/polly) | 12K | 26 | 1 year ago | 335M | 92K | +| [AutoMapper](https://github.com/AutoMapper/AutoMapper) | [AutoMapper](https://www.nuget.org/packages/AutoMapper) | 9K | 41 | 6 months ago | 400M | 90K | +| [FluentValidation](https://github.com/FluentValidation/FluentValidation) | [FluentValidation](https://www.nuget.org/packages/FluentValidation) | 8K | 68 | 3 days ago | 250M | 56K | +| [Serilog](https://github.com/serilog/serilog) | [Serilog](https://www.nuget.org/packages/Serilog) | 6K | 15 | 1 month ago | 722M | 197K | +| [Swashbuckle.AspNetCore.Swagger](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) | [Swashbuckle.AspNetCore.Swagger](https://www.nuget.org/packages/Swashbuckle.AspNetCore.Swagger) | 5K | 28 | 4 months ago | 386M | 168K | +| [NLog](https://github.com/NLog/NLog) | [NLog](https://www.nuget.org/packages/Nlog) | 6K | 125 | 1 week ago | 217M | 48K | +| [Moq](https://github.com/moq/moq4) | [Moq](https://www.nuget.org/packages/Moq) | 5K | 33 | 4 months ago | 418M | 93K | +| [StackExchange.Redis](https://github.com/StackExchange/StackExchange.Redis) | [StackExchange.Redis](https://www.nuget.org/packages/StackExchange.Redis) | 5K | 34 | 11 days ago | 244M | 74K | + + + +In conclusion, these 10 .NET Core libraries are essential tools for any .NET Core developer. They offer a wide range of functionality, from handling errors to mocking for unit testing and simplifying object mapping. Whether you're working on a large-scale enterprise application or a small project, these libraries can help you build more reliable, efficient, and effective applications. + +There's also a cool GitHub page that gathers all kinds of popular .NET tools. Check out https://github.com/quozd/awesome-dotnet + + +### What is ABP Framework? +ABP Framework 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, modules, themes, tooling, guides and documentation to implement that architecture properly and automate the details and repetitive work as much as possible. + +If you are starting a new ASP.NET Core project, try [abp.io](https://abp.io) now... + + **IT IS FREE AND OPEN-SOURCE!** + +--- + +> I'm Alper Ebicoglu 🧑🏽‍💻 \ +> ABP Framework Core Team Member\ +> Follow me for the latest news about .NET and software development:\ +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu)\ +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu)\ +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu)\ +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline) + + diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6fb57718ff5547cff4fa27c10a.png b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6fb57718ff5547cff4fa27c10a.png new file mode 100644 index 0000000000..dec11bc1c9 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6fb57718ff5547cff4fa27c10a.png differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6fd580494a5edc64b664497aa0.png b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6fd580494a5edc64b664497aa0.png new file mode 100644 index 0000000000..783225e175 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6fd580494a5edc64b664497aa0.png differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6ff161f75a4d0fdb68bc77fa88.png b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6ff161f75a4d0fdb68bc77fa88.png new file mode 100644 index 0000000000..8ed43ac2a7 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c6ff161f75a4d0fdb68bc77fa88.png differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c70346ae7f3a9b397bbb4c00cb3.png b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c70346ae7f3a9b397bbb4c00cb3.png new file mode 100644 index 0000000000..5a02c2596f Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c70346ae7f3a9b397bbb4c00cb3.png differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c70509eaa4595d157033a743a56.png b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c70509eaa4595d157033a743a56.png new file mode 100644 index 0000000000..aa14b424a2 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c70509eaa4595d157033a743a56.png differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c7070216a981e155eadf3e3cda7.png b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c7070216a981e155eadf3e3cda7.png new file mode 100644 index 0000000000..b562de6dae Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/3a0a8c7070216a981e155eadf3e3cda7.png differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/authority-delegation.gif b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/authority-delegation.gif new file mode 100644 index 0000000000..c09f428798 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/authority-delegation.gif differ diff --git a/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/post.md b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/post.md new file mode 100644 index 0000000000..9245f99afe --- /dev/null +++ b/docs/en/Community-Articles/2023-04-13-abpio-platform-72-rc-has-been-published/post.md @@ -0,0 +1,211 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.2 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 v7.2! Thanks to all of you. + +## Get Started with the 7.2 RC + +Follow the steps below to try version 7.2.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.2.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.2.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.2.0-rc.1 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.1: + +* [ABP Framework 7.1 to 7.2 Migration Guide](https://docs.abp.io/en/abp/7.2/Migration-Guides/Abp-7_2) +* [ABP Commercial 7.1 to 7.2 Migration Guide](https://docs.abp.io/en/commercial/7.2/migration-guides/v7_2) + + +## What's New with ABP Framework 7.2? + +In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: + +* Grouping of Navigation Menu Items +* Introducing the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService` +* CMS Kit Comments: Don't Allow External URLs +* Angular UI New Components +* Others + +### Grouping of Navigation Menu Items + +Some applications may need to group their main menus to tidy up their menu structure. For example, you may want to group ABP's menu items, which came from modules in a group named *Admin*. + +In this version, you can allow to define groups and associate menu items with a group. Then your theme can render your menu items within the specified groups. + +**Example:** + +```csharp +private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) +{ + //Creating a new group + context.Menu.AddGroup("Dashboards", l["Dashboards"]); + + //Setting the group name for menu items + context.Menu + .AddItem(new ApplicationMenuItem("Home", l["Menu:Home"], groupName: "Dashboards") + .AddItem(new ApplicationMenuItem("Home", l["Menu:Dashboard"], groupName: "Dashboards"); +} +``` + +> **Note**: Currently, only the [LeptonX Theme](https://leptontheme.com/) renders groups for menu items. See the "LeptonX - Render Groups for Menu Items" section below for a demonstration. + +### Introducing the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService` + +In this version, we have introduced the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService` service to re-initialize application configurations. This service can be helpful, if you want to reset the application configurations after changing some configurations through your code. For example, you might have changed the values of some settings and might want to be able to get the new settings without the need to refresh the page. For this purpose, the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService.ResetAsync()` method can be used to re-initialize the application configurations and cache the updated configurations for further usages. + +> For more information, please see [https://github.com/abpframework/abp/issues/15887](https://github.com/abpframework/abp/issues/15887). + +### CMS Kit Comments: Disallowing External URLs + +CMS Kit provides a [comment system](https://docs.abp.io/en/abp/7.2/Modules/Cms-Kit/Comments) to add the comment feature to any kind of resource, like blog posts for an example. The CMS Kit comment section is good for visitor comments and can improve your interaction with your application users. + +Sometimes, malicious users (or bots) can submit advertisement links into the comment sections. With this version, you can specify *allowed external URLs* for a specific comment section and disallow any other external URLs. You just need to configure the `CmsKitCommentOptions` as follows: + +```csharp +Configure(options => +{ + options.AllowedExternalUrls = new Dictionary> + { + { + "Product", + new List + { + "https://abp.io/" + } + } + }; +}); +``` + +If you don't specify any allowed external URLs for a specific comment section, all external URLs are allowed to be used in comments. For more information, please refer to the [CMS Kit: Comments documentation](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments). + +### New Components for Angular UI + +In this version, we have created some useful UI components for Angular UI, which are `abp-checkbox`, `abp-form-input`, and `abp-card`. Instead of using the related HTML elements and specifying bootstrap classes, from this version on, you can use these components. + +You can see the following examples for the usage of the `abp-card` component: + +```html + + +
...
+
+
+``` + +> See the [Card Component documentation](https://docs.abp.io/en/abp/7.2/UI/Angular/Card-Component) for more information. + +### Others + +* OpenIddict registered custom scopes have been added to the openid-configuration endpoint (`/.well-known/openid-configuration`) automatically. See [#16141](https://github.com/abpframework/abp/issues/16141) for more information. +* Two new tag-helpers have been added to MVC UI, which are `abp-date-picker` and `abp-date-range-picker`. See [#15806](https://github.com/abpframework/abp/pull/15806) for more information. +* Filtering/searching has been improved in the Docs Module and unified under a single *Search* section. See [#15787](https://github.com/abpframework/abp/issues/15787) for more information. + +## What's New with ABP Commercial 7.2? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.2. + +### Authority Delegation + +Authority Delegation is a way of delegating the responsibility of the current user to a different user(s) for a limited time. Thus, a user can be switched to the delegated users' account and perform actions on their behalf. + +This version introduces support for the **Authority Delegation** in the [Account Module](https://docs.abp.io/en/commercial/latest/modules/account). You can check the following gif for a demonstration: + +![authority delegation](authority-delegation.gif) + +> You can check the [Authority Delegation in ABP Commercial](https://community.abp.io/posts/authority-delegation-in-abp-commereical-3wtljpp0) post for an overview of this feature. + +### Force Password Change at Next Logon + +It's a typical need to force users to change their password after their first successful login. Especially, if you as admin create a new user (*from the Users page of the Identity Pro module*, for example) with an easy initial password or a randomly generated password. The user should change his/her password with a more secure password that only they know. + +In this version, the "Forcing Password Change at Next Logon" feature has been added for this kind of purpose. Now, it's possible to force a user to change their password on the next login. + +The admin only needs to check the *Should change password on next login* option, while creating a new user: + +![force-password-change.png](3a0a8c6fb57718ff5547cff4fa27c10a.png) + +After the first successful login, a password change page will open and force the user to change their password: + +![password-change-form.png](3a0a8c6fd580494a5edc64b664497aa0.png) + +Then, the user starts using their account with a secure password that only they know. + +### Periodic Password Changes (Password Aging) + +**Password aging** is a mechanism to force users to periodically change their passwords. It allows you to specify a max number of days that a password can be used before it has to be changed. + +![password-aging.png](3a0a8c6ff161f75a4d0fdb68bc77fa88.png) + +You can force this behavior in the "Password renewing settings" section of the Settings page as can be seen in the image above. Then, after the specified time has passed, users will have to renew their passwords. + +### LeptonX - Render Groups for Menu Items + +As mentioned in the *Grouping of Navigation Menu Items* section above, the [LeptonX Theme](https://leptontheme.com/) renders groups for menu items: + +![leptonx-group-render.png](3a0a8c70346ae7f3a9b397bbb4c00cb3.png) + +### Suite: Show Properties on Create/Update/List Pages + +In this version, ABP Suite allows you to choose whether a property is visible/invisible on the create/update modals and list page. It also allows you to set specific properties to *readonly* on the update modals. + +![suite-property.png](3a0a8c70509eaa4595d157033a743a56.png) + +## Community News + +### ABP - DOTNET CONF'23 + +![abp-conf.png](3a0a8c7070216a981e155eadf3e3cda7.png) + +As the ABP team, we've organized 10+ [online events](https://community.abp.io/events) and gained a good experience with software talks. We are organizing ABP Dotnet Conference 2023, a full-featured software conference, in May. You can visit [https://abp.io/conference](https://abp.io/conference) to see speakers, talks, schedules, and other details. + +**Less than a month left until the event**! Don't forget to take your seat and buy an early bird ticket from [https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54](https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54)! + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [What’s New in .NET 8 🧐 ? Discover ALL .NET 8 Features](https://community.abp.io/posts/whats-new-in-.net-8-discover-all-.net-8-features-llcmrdre) by [Alper Ebicoglu](https://twitter.com/alperebicoglu). +* [Converting Create/Edit Modal to Page - Blazor](https://community.abp.io/posts/converting-createedit-modal-to-page-blazor-eexdex8y) by [Enis Necipoglu](https://twitter.com/EnisNecipoglu). +* [Using Dapper with the ABP Framework](https://community.abp.io/posts/using-dapper-with-the-abp-framework-shp74p2l) by [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan). +* [ABP React Template](https://community.abp.io/posts/abp-react-template-33pjmran) by [Anto Subash](https://twitter.com/antosubash). +* [How to Export Data to Excel Files with ASP.NET Core Minimal API](https://community.abp.io/posts/how-to-export-data-to-excel-files-with-asp.net-core-minimal-api-79o45u3s) by [Berkan Sasmaz](https://twitter.com/berkansasmazz). + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +### New ABP Blog Posts + +There are also some exciting blog posts written by the ABP team. You can see the following list for some of those articles: + +* [ABP Framework: Open Source Web Application Development Framework](https://blog.abp.io/abp/open-source-web-application-development-framework) by [Alper Ebicoglu](https://twitter.com/alperebicoglu). +* [ABP Framework: The Ultimate .NET Web Framework for Rapid Application Development](https://blog.abp.io/abp/ultimate-net-web-framework-for-rapid-application-development) by [Alper Ebicoglu](https://twitter.com/alperebicoglu). +* [Top 10 .NET Core Libraries Every Developer Should Know 🔥](https://blog.abp.io/abp/Top-10-.NET-Core-Libraries-Every-Developer-Should-Know) by [Alper Ebicoglu](https://twitter.com/alperebicoglu) + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.2/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v7.2 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Community-Articles/2023-04-14-you-are-invited-to-abp-net-conf23-/post.md b/docs/en/Community-Articles/2023-04-14-you-are-invited-to-abp-net-conf23-/post.md new file mode 100644 index 0000000000..6f01e73a3f --- /dev/null +++ b/docs/en/Community-Articles/2023-04-14-you-are-invited-to-abp-net-conf23-/post.md @@ -0,0 +1,65 @@ +Hey .NET developers! + +🎉 We are thrilled to share with you that we are hosting a .NET online event: [ABP .NET Conference](https://abp.io/conference) which will take place on **May 10th, 2023**. + +[ABP .NET Conf’23](https://abp.io/conference) is a unique opportunity for .NET developers to: +* Gain insight into the latest trends and developments in the .NET world from industry experts, +* Network with like-minded individuals, +* Discover new technologies and solutions, +* And open many more opportunities! +The conference is expected to attract hundreds of global professionals and experts from all around the globe. + +We aim to inspire and motivate the [ABP .NET Conference](https://abp.io/conference)’s attendees from different angles to embrace new perspectives, improve their skills, and advance their careers in the .NET world. + +Regardless of the location, our claim is to make you feel like you are actually in an in-person conference area in [ABP .NET Conf’23](https://abp.io/conference)! We specifically picked the live streaming platform to let attendees of the [ABP .NET Conference](https://abp.io/conference) engage with each other, speakers and sponsors. + +🧐 **Usual stuff will exist:** +* A common area with chat box to let attendees talk with each other +* Sponsors will have rooms, just like a booth, for you to visit (we know not being able to take promotional items is a bummer but we have a solution, trust me) +* Q&A box to ask your questions to the speakers during the session + +🕺 **Fun parts will also exist:** +* A special engagement feature named “90SN” for you to randomly match with another attendee and talk, exchange socials and simply videochat for 90 seconds. –This is an especially great addition to remove the obstacles of virtual events against networking. +* You will have a photo booth to take a picture of yourself and share on your social media with a specifically-designed ABP .NET Conf’23 photo frame. +* Raffles will take place at the end of the conference for giveaways. They will be given to the ones who actually participated in the ABP .NET Conference. + +Our main purpose of organizing the [ABP .NET Conference](https://abp.io/conference) is to provide valuable insights and practical knowledge to the [ABP .NET Conf’23](https://abp.io/conference) attendees and make our contribution towards the community of ABP and overall .NET. You will have the chance to expand your understanding of the .NET and its ecosystem by taking the best practices through keynote speech by [Taswar Bhatti](https://abp.io/conference/speakers/taswar-bhatti) from Microsoft, and the expert-led sessions from a talented line of speakers. + +With [ABP .NET Conference](https://abp.io/conference) being our first actual conference beside our regular [ABP Community Talks](https://community.abp.io/events), it is quite special for us. Therefore, we poured tears and sweat to create a great experience out of it for you. This is why, we picked a line of pretty talented speakers in the .NET world: +* 🎙️[Halil Ibrahim Kalkan, Co-Founder at Volosoft / Lead Architect and Developer of ABP Framework](https://abp.io/conference/speakers/halil-ibrahim-kalkan), +* 🎙️[Cecil Phillip, Developer Advocate at Stripe](https://abp.io/conference/speakers/cecil-phillip), +* 🎙️[Daniel Marbach, Software Engineer at Particular Software](https://abp.io/conference/speakers/daniel-marbach), +* 🎙️[Gleidson Nascimento, SRE/Cloud Advisor at Urvin Finance](https://abp.io/conference/speakers/gleidson-nascimento), +* 🎙️[Isaac Levin, .NET Developer Advocate at Amazon Web Services](https://abp.io/conference/speakers/isaac-levin), +* 🎙️[Jimmy Engström, Microsoft MVP / Developer at Erik Penser Bank / Azm dev](https://abp.io/conference/speakers/jimmy-engstrom), +* 🎙️[Joseph Guadagno, JosephGuadahno.NET, LLC](https://abp.io/conference/speakers/joseph-guadagno), +* 🎙️[Melissa Houghton, Lead Software Engineer and Developer Relations at Azenix](https://abp.io/conference/speakers/melissa-houghton), +* 🎙️[Nicolas Frankel, Head of Developer Advocacy at Apache APISIX](https://abp.io/conference/speakers/nicolas-frankel), +* 🎙️[Shaun Walker, CTO and Professional Services at Cognizant](https://abp.io/conference/speakers/shaun-walker), +* 🎙️[Simon Painter, Senior Software Developer at Mueller Dairies](https://abp.io/conference/speakers/simon-painter), +* 🎙️[Taswar Bhatti, Azure GTM Manager for CEMA at Microsoft EMEA](https://abp.io/conference/speakers/taswar-bhatti), +* 🎙️[Todd Gardner, CEO at Request Metrics](https://abp.io/conference/speakers/todd-gardner) + +We invite everyone that is related within the .NET ecosystem and want to stay up-to-date on the latest advancements and trends in the .NET world. + +Most exciting of all, there will be raffles from our sponsors for you to look forward to! 🎁 + +What are you waiting for! Come and join us for the [ABP .NET Conference’23](http://conf.abp.io/)!⏳ +
+ +> 👉 **[REGISTER TO ABP .NET CONF'23 NOW](https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54)** 👈 +
+ +🚨 **Last Date to Catch The Early-Bird Tickets:** 🚨 +
April 21, 2023 + +🗓️ **Live Date:** 🗓️ +
Wednesday, May 10, 2023 + +🕘 **Live Times:** 🕔 +
09:00 AM UTC +
17:00 PM UTC + +
+ +Special thanks to our sponsors [ApiX-Drive](https://apix-drive.com/), [Decision Tree](https://decisiontree.tech/), [DM Consulting](https://www.dmconsulting.it/), [.NET Foundation](https://dotnetfoundation.org/), [Microsoft](https://www.microsoft.com/), [Packt Publishing](https://www.packtpub.com/), [WAi Technology](https://waiin.com/). \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-04-18--speed-up-your-aspnet-application-/post.md b/docs/en/Community-Articles/2023-04-18--speed-up-your-aspnet-application-/post.md new file mode 100644 index 0000000000..6f36474400 --- /dev/null +++ b/docs/en/Community-Articles/2023-04-18--speed-up-your-aspnet-application-/post.md @@ -0,0 +1,119 @@ +## How to Optimize Your ASP.NET Application for Improved Performance + +If you want your ASP.NET application to perform well, you need to optimize it for speed, responsiveness, and user experience. Performance optimization is critical for factors like fast page load times, improved response efficiency, and happy users. In this article, I'll provide several tips and tricks to help you optimize performance in ASP.NET Core. + +### Use Response Compression in Your ASP.NET Application +You can use ASP.NET Core's built-in response compression middleware to compress the response data and reduce the amount of data that needs to be transferred over the network. To use response compression, add the following code to your application's Startup.cs file: + +```csharp +services.AddResponseCompression(options => +{ + options.EnableForHttps = true; +}); + +app.UseResponseCompression(); +``` + +### 🖼️ Optimize Images in Your ASP.NET Application: + +Images can be a major contributor to page bloat and slow load times. Here are some tips to optimize images: + +🖌️ Use a tool like ImageOptim or Kraken.io to compress and optimize images. + +🖼️ Specify the width and height of images in HTML so the browser can allocate space for them before they load. + +📝 Use alt attributes to provide descriptive text for images, which can improve accessibility and also help with SEO. + +📜 Use lazy loading for images that are below the fold, meaning they're not visible on the initial screen view. You can use libraries like Vanilla LazyLoad to implement lazy loading. + +📱 Use responsive images to serve different image sizes to different devices. This can improve page load times by reducing the size of images that are displayed on smaller devices. + +💻 Example: + +```html + + + + Image + +``` + +```javascript +var lazyLoadInstance = new LazyLoad(); +``` + +### 🧱 Optimize HTML in Your ASP.NET Application: + +The structure and organization of HTML can affect the page speed. Here are some tips to optimize HTML: + +📝 Use the heading tags (h1, h2, h3, etc.) in a logical and sequential order. + +🔩 Use the "defer" attribute for script tags that don't need to be executed immediately. This can improve the page load times by delaying the execution of scripts until after the page has rendered. + +🔩 Use the "async" attribute for script tags that can be executed asynchronously. This can further improve the page load times by allowing scripts to be downloaded and executed simultaneously. + +🧱 Use semantic HTML elements (like nav, section, and article) to provide additional structure and meaning to the page. + +### 🎨 Optimize CSS and JavaScript in Your ASP.NET Application: + +CSS and JavaScript files can be a major contributor to the page load times. Here are some tips to optimize CSS and JavaScript in your ASP.NET application: + +🔨 Minify and concatenate CSS and JavaScript files to reduce their size. + +🔩 Use the "defer" or "async" attributes for script tags to delay or asynchronously load scripts. + +### 🔡 Use system fonts in Your ASP.NET Application: + +Loading custom fonts can be slow and increase page load times. Using system fonts can improve page speed by allowing the browser to use fonts that are already installed on the user's device. + +### 🖼️ Use Placeholders and Progress Indicators in Your ASP.NET Application: + +To improve the perceived performance of your website, you can use placeholders and progress indicators for slow-loading sections of your page. You can use JavaScript to load these sections after the initial page load. + +💻 Example: + +```html + +
+

Loading...

+
+``` + +```javascript +const placeholder = document.querySelector('#placeholder'); + fetch(placeholder.dataset.url) + .then(response => response.text()) + .then(html => placeholder.innerHTML = html); +``` + +### 🔗 Use the Appropriate Link Text and ARIA Labels: + +When using links, use appropriate link texts that accurately describe the content of the linked page. This can improve the accessibility and also help with SEO. + +ARIA labels should also be used to provide additional context for links. This can also improve the accessibility and help with SEO. + +💻 Example: + +```html +Example +Another Example +``` + +### 🌐 Optimize the Third-party Resources in Your ASP.NET Application: + +Third-party resources like social media widgets and advertising scripts can slow down the page load times. Here are some tips to optimize third-party resources: + +🔩 Use asynchronous scripts when possible. + +🔍 Only load third-party resources that are necessary for the page. + +By following these optimization techniques, you can significantly improve the page speed of your ASP.NET Core web application. + +## Optimized Web Applications with ABP Framework? + +ABP Framework offers an opinionated architecture to build enterprise software solutions with ASP.NET Core best practices on top of the .NET and the ASP.NET Core platforms. It is also a powerful infrastructure to help you develop low-effort web-optimized applications. +It provides the fundamental web application infrastructure, production-ready dotnet startup templates, modules, asp.net core ui themes, tooling, guides and documentation to implement that ASP.NET core architecture properly and automate the details and repetitive work as much as possible. + +If you are starting a new ASP.NET Core project and want a fast website [abp.io](https://abp.io/) now... + +**IT IS FREE AND OPEN-SOURCE!** \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-05-02-c-12--discover-the-exciting-new-features--improvements-/post.md b/docs/en/Community-Articles/2023-05-02-c-12--discover-the-exciting-new-features--improvements-/post.md new file mode 100644 index 0000000000..dc51ac2b5d --- /dev/null +++ b/docs/en/Community-Articles/2023-05-02-c-12--discover-the-exciting-new-features--improvements-/post.md @@ -0,0 +1,113 @@ +Several exciting new features come with C# 12 and the.NET 8 preview. C# is easier to use and more effective than **previous** versions thanks to changes made by the Microsoft development team. **In** **this** **post,** **we'll** **take** **a** **quick** **look** **at** some of the **major** changes in C# **12.** + + + +## 1. Improved Support for Interpolated Strings 🧩 + +With the release of C# 12, you now have the option to incorporate expressions inside interpolated strings. With the help of this functionality, You can now create dynamic values for strings using complicated expressions and techniques. + +For instance, you can use code like this: + +``` +int x = 10; +string message = $"The value of x is {x}, and its square is {x*x}."; +``` + +This will result in a string value of "*The value of x is 10, and its square is 100.*" + +## 2. Primary Constructors 📝 + + +You can now create primary constructors in any class and struct. With primary constructors, developers can add parameters to the class declaration and use these values inside the class body. + +Primary constructors were introduced in C# 9 as part of the record positional syntax. C# 12 extends these to all structs and classes. + +```csharp + public class Book(int pageSize, string authorName, IEnumerable prices) + { + public Book(int pageSize, string authorName) : this(pageSize, authorName, Enumerable.Empty()) { } + public int pageSize => pageSize; + public string authorName { get; set; } = authorName; + public float totalPrice => prices.Sum(); + } +``` + +The good part is that you can avoid the pain of declaring private fields and, you know, binding parameter values to those fields in those tedious constructor bodies by using primary constructors instead. + +## 3. Improved Lambda Expressions 🐑 + +Many of us are using Lambda expressions in our daily development to gain the code better readability. +With this version we see that many enhancements came to lambda expressions make them more effective. +For example, you can now create more complex expressions within lambda functions using the new `and` , `or` operators. +Besides, lambda expressions can now be transformed into expression trees, simplifying the construction of complex queries and optimizing performance. + +## 4. Async Streams 🌐 + +You may iterate through asynchronous data sources thanks to the new `async` streams feature in C# 12. +This new iterator `await foreach` gains us to iterate over a set of async data. +See the following code snippet: + +```csharp +await foreach (var record in FetchRecordsAsyncData()) +{ + Console.WriteLine(record.text); +} +``` + +This will iterate over the asynchronous data returned by the `GetAsyncData()` method and writes each item's text to the console. + +## 5. Target-typed New Expressions 🎯 + +Target-typed new expressions, a new feature in C# 12, make it simpler to construct new objects. +You can now declare new objects using the `var` keyword. +The object's type is inferred from the context. +Especially when dealing with complex types, it gives us better code readability. + +An alternative to writing: + +```csharp +AcmeClass thatObject = new AcmeClass(); +``` + +You can now write: + +```csharp +var thatObject = new AcmeClass(); +``` + + + +## Conclusion 🎬 + +As always Microsoft makes developers' life easier with every release of .NET and C#. +C# 12 comes with many features and improvements. +You now have new tools at your disposal to create more effective, concise, and durable code. +You may now design more potent and reliable applications with C# thanks to the increased support for interpolated strings, records, lambda expressions, target-typed new expressions, and async streams. + + + +## Start C# 12 with the ABP Framework 📚 + +ABP Framework offers an opinionated architecture to build enterprise software solutions with ASP.NET Core best practices on top of the .NET and the ASP.NET Core platforms. It is also a powerful infrastructure to help you develop low-effort web-optimized applications. It provides the fundamental web application infrastructure, production-ready dotnet startup templates, modules, asp.net core ui themes, tooling, guides and documentation to implement that ASP.NET core architecture properly and automate the details and repetitive work as much as possible. + +If you are starting a new ASP.NET Core project and want a fast website [abp.io](https://abp.io/) now... + +🆓 **It's FREE & OPEN-SOURCE!** 🔓 + + +Happy coding 🍿✨ + + +--- + + + +> I'm Alper Ebicoglu 🧑🏽‍💻\ +> ABP Framework Core Team Member\ +> Follow me for the latest news about .NET and software development:\ +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu)\ +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu)\ +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu)\ +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline) + + diff --git a/docs/en/Community-Articles/2023-05-04--abpio-platform-72-final-has-been-released/3a0af7a8a3b472b85ab9c7c030934121.png b/docs/en/Community-Articles/2023-05-04--abpio-platform-72-final-has-been-released/3a0af7a8a3b472b85ab9c7c030934121.png new file mode 100644 index 0000000000..b562de6dae Binary files /dev/null and b/docs/en/Community-Articles/2023-05-04--abpio-platform-72-final-has-been-released/3a0af7a8a3b472b85ab9c7c030934121.png differ diff --git a/docs/en/Community-Articles/2023-05-04--abpio-platform-72-final-has-been-released/post.md b/docs/en/Community-Articles/2023-05-04--abpio-platform-72-final-has-been-released/post.md new file mode 100644 index 0000000000..7dd574196c --- /dev/null +++ b/docs/en/Community-Articles/2023-05-04--abpio-platform-72-final-has-been-released/post.md @@ -0,0 +1,85 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.2 versions have been released today. + +## What's New With Version 7.2? + +All the new features were already explained in detail in the [7.2 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7.2-RC-Has-Been-Published), so there is no need to go over them again. Check it out for more details. + +## Getting Started with 7.2 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 7.2 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents if you are upgrading from v7.1: + +* [ABP Framework 7.1 to 7.2 Migration Guide](https://docs.abp.io/en/abp/7.2/Migration-Guides/Abp-7_2) +* [ABP Commercial 7.1 to 7.2 Migration Guide](https://docs.abp.io/en/commercial/7.2/migration-guides/v7_2) + +## Community News + +### ABP - DOTNET CONF'23 + +![abp-conf.png](3a0af7a8a3b472b85ab9c7c030934121.png) + +As the ABP team, we've organized 10+ [online events](https://community.abp.io/events) and gained a good experience with software talks. We are organizing ABP Dotnet Conference 2023, a full-featured software conference, on May 10. You can visit [https://abp.io/conference](https://abp.io/conference) to see the speakers, talks, schedules, and other details. + +Don't forget to take your seat and buy a ticket from [https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54](https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54)! + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Converting Create/Edit Modal to Page AngularUI](https://community.abp.io/posts/converting-createedit-modal-to-page-angularui-doadhgil) by [Masum Ulu](https://twitter.com/masumulu) +* [How to Export Data to Excel Files with ASP.NET Core Minimal API](https://community.abp.io/posts/how-to-export-data-to-excel-files-with-asp.net-core-minimal-api-79o45u3s) by [Berkan Sasmaz](https://twitter.com/berkansasmazz) +* [ABP React Template](https://community.abp.io/posts/abp-react-template-33pjmran) by [Anto Subash](https://twitter.com/antosubash) +* [Using Dapper with the ABP Framework](https://community.abp.io/posts/using-dapper-with-the-abp-framework-shp74p2l) by [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) +* [Converting Create/Edit Modal to Page - Blazor](https://community.abp.io/posts/converting-createedit-modal-to-page-blazor-eexdex8y) by [Enis Necipoglu](https://twitter.com/EnisNecipoglu) +* [What’s New in .NET 8 🧐 ? Discover ALL .NET 8 Features](https://community.abp.io/posts/whats-new-in-.net-8-discover-all-.net-8-features-llcmrdre) by [Alper Ebicoglu](https://twitter.com/alperebicoglu) +* [Authority Delegation in ABP Commercial](https://community.abp.io/posts/Authority%20Delegation%20In%20ABP%20Commereical-3wtljpp0) by [Liang Shiwei](https://github.com/realLiangshiwei) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +### New ABP Blog Posts + +There are also some exciting blog posts written by the ABP team. You can see the following list for some of those articles: + +* [You Are Invited to ABP .NET Conf’23! 📣](https://blog.abp.io/abp/You-Are-Invited-to-ABP-dotNET-Conf23) by [Bige Beşikçi](https://twitter.com/bigedediki) +* [💻 Speed Up Your ASP.NET Application 🚀](https://blog.abp.io/abp/Speed-Up-Your-ASP.NET-Application) by [Salih Özkara](https://twitter.com/salihozkara_) +* [C# 12 🔍 Discover the Exciting New Features & Improvements 🆕🚀](https://blog.abp.io/abp/CSharp-12-Discover-the-Exciting-New-Features-and-Improvements) by [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) + +## About the Next Version + +The next feature version will be 7.3. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/3a0b4156603fad07000254bf7ec80ab0.png b/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/3a0b4156603fad07000254bf7ec80ab0.png new file mode 100644 index 0000000000..4e78e8982b Binary files /dev/null and b/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/3a0b4156603fad07000254bf7ec80ab0.png differ diff --git a/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/3a0bac0a6ffa3cbcea65d8806d938aea.png b/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/3a0bac0a6ffa3cbcea65d8806d938aea.png new file mode 100644 index 0000000000..65ad8c14d1 Binary files /dev/null and b/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/3a0bac0a6ffa3cbcea65d8806d938aea.png differ diff --git a/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/post.md b/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/post.md new file mode 100644 index 0000000000..093c1f42ac --- /dev/null +++ b/docs/en/Community-Articles/2023-05-18-abp-net-conference-2023-wrap-up/post.md @@ -0,0 +1,50 @@ +Hello and gratitudes, ABP.IO Community! + +We are happy to share the success of the ABP.NET Conference 2023, which captivated overwhelmingly interested live viewers from all over the world. ABP .NET Conference 2023, besides being the first full-day ABP Community event experience, it was also a remarkable one. The intense engagement and attention shown by the community towards the amazing line up of 13 talented speakers was worth mentioning. Join me as we give thanks for the outstanding support and explore the fascinating conversations that took place during this truly global .NET event. + +The virtual nature of our conference allowed us to transcend geographical boundaries, bringing together individuals from diverse cultures and up to 59 different countries. The map below showcases the countries of the live viewers, with darker shades indicating higher minutes viewed. It is an incredible feeling for us to reach this amount of global audience and see the impact of our conference. + +![Screenshot 2023-05-18 at 15.13.25.png](3a0b4156603fad07000254bf7ec80ab0.png) + +The success of ABP .NET Conference 2023 would not have been possible without the invaluable contributions of our talented speakers. These 13 great line up of speakers which include .NET experts and Microsoft MVPs delivered captivating talks that resonated with the audiences. Each of the talk attracted great amount interest and a lot of questions, sparking curiosity in the attendees. We extend our deepest appreciation to each speaker for their valuable insights and for igniting the curiosity throughout the ABP .NET Conference 2023. Let’s remember them and their talk titles: +* 🎙️[Halil Ibrahim Kalkan, Co-Founder at Volosoft / Lead Architect and Developer of ABP Framework](https://twitter.com/hibrahimkalkan), +* 🎙️[Cecil Phillip, Developer Advocate at Stripe](https://twitter.com/cecilphillip), +* 🎙️[Daniel Marbach, Software Engineer at Particular Software](https://twitter.com/danielmarbach), +* 🎙️[Gleidson Nascimento, SRE/Cloud Advisor at Urvin Finance](https://twitter.com/slaterx), +* 🎙️[Isaac Levin, .NET Developer Advocate at Amazon Web Services](https://twitter.com/isaacrlevin), +* 🎙️[Jimmy Engström, Microsoft MVP / Developer at Erik Penser Bank / Azm dev](https://twitter.com/EngstromJimmy), +* 🎙️[Joseph Guadagno, JosephGuadahno.NET, LLC](https://twitter.com/jguadagno), +* 🎙️[Melissa Houghton, Lead Software Engineer and Developer Relations at Azenix](https://twitter.com/meliss_houghton), +* 🎙️[Nicolas Frankel, Head of Developer Advocacy at Apache APISIX](https://twitter.com/nicolas_frankel), +* 🎙️[Shaun Walker, CTO and Professional Services at Cognizant](https://twitter.com/sbwalker), +* 🎙️[Simon Painter, Senior Software Developer at Mueller Dairies](https://twitter.com/madSimonJ), +* 🎙️[Taswar Bhatti, Azure GTM Manager for CEMA at Microsoft EMEA](https://twitter.com/taswarbhatti), +* 🎙️[Todd Gardner, CEO at Request Metrics](https://twitter.com/toddhgardner) + +We are grateful to the each live viewers who dedicated their time and actively participated in ABP .NET Conference 2023. Your presence and engagement made ABP .NET Conference the success it achieved. The image representing your countries serves as a vivid reminder of the collective enthusiasm and passion that raised from each corner of the world. We are humbled by your support and inspired by the connections forged through shared knowledge. + +The interactive nature of ABP .NET Conference 2023 provided an ideal platform for attendees to engage with the speakers. The depth of the subjects presented and the multitude of questions asked during the Q&A sessions showed the intellectuality of the audience. Each question provided a base for engaging discussions and enriched the experience for everyone. The exchange of ideas and the diverse perspectives brought the beauty of the inclusiveness of the ABP .NET Conference 2023. + +For a special thank to our not only a sponsor but also a great partner of ABP Commercial - [Wai Technologies](https://waiin.com/). Besides the impactful contribution of Wai Technologies to the success of our event, we would like to highlight their solid service to the customers. One of their remarkable achievements was assisting a large enterprise-grade logistics company in completely revamping their legacy sales and order management platform. + +Wai Technologies played a crucial role in enabling the logistics company to achieve over 50% acceleration in taking their product to market. They implemented practical solutions that significantly improved application usability, management, and scaling for the company. + +How Wai Technologies refactored the monolithic application to the Micro- +services Architecture: + +![Screenshot 2023-06-08 at 10.16.40.png](3a0bac0a6ffa3cbcea65d8806d938aea.png) + +The technology stack utilized by Wai Technologies included the following: +-ABP Commercial Micro-services +-Angular Frontend +-SQL/Mongo DB +-Azure BLOB Storage +-Azure App Insights +-Docker, Azure Kubernetes Service (AKS) +-Elsa.Net for Workflows +-Elsa Visual workflow Designer + +We are grateful to our partner, Wai Technologies, for their invaluable contributions and expertise. It’s been always a great partnership between ABP Commercial & Wai Technologies. + + +Special thanks to our other sponsors [ApiX-Drive](https://apix-drive.com/), [Decision Tree](https://decisiontree.tech/), [DM Consulting](https://www.dmconsulting.it/), [.NET Foundation](https://dotnetfoundation.org/), [Microsoft](https://www.microsoft.com/), [Packt Publishing](https://www.packtpub.com/). \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23c58b6d34e665030b4f089e9e.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23c58b6d34e665030b4f089e9e.png new file mode 100644 index 0000000000..b248970b47 Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23c58b6d34e665030b4f089e9e.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23df9ab9c68f361acd9c9fa79b.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23df9ab9c68f361acd9c9fa79b.png new file mode 100644 index 0000000000..4ad00ddd5f Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23df9ab9c68f361acd9c9fa79b.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23fd1a5e7625d1fa11b27684ce.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23fd1a5e7625d1fa11b27684ce.png new file mode 100644 index 0000000000..407d8bc6d3 Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac23fd1a5e7625d1fa11b27684ce.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac241d501c2727fd77b885edbfe9.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac241d501c2727fd77b885edbfe9.png new file mode 100644 index 0000000000..d627f5c783 Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac241d501c2727fd77b885edbfe9.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac2466ce529b36ae8e6c38603f80.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac2466ce529b36ae8e6c38603f80.png new file mode 100644 index 0000000000..90ae483bec Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac2466ce529b36ae8e6c38603f80.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac24d1635475ef24d00707bbc67b.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac24d1635475ef24d00707bbc67b.png new file mode 100644 index 0000000000..b3add3ebc0 Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac24d1635475ef24d00707bbc67b.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac250d28086e119cd60b671240ad.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac250d28086e119cd60b671240ad.png new file mode 100644 index 0000000000..9175452037 Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac250d28086e119cd60b671240ad.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac252686a27b707f6686f6ba5fab.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac252686a27b707f6686f6ba5fab.png new file mode 100644 index 0000000000..896663ae28 Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/3a0bac252686a27b707f6686f6ba5fab.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/abp-community-talk-4.png b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/abp-community-talk-4.png new file mode 100644 index 0000000000..36171a8c7b Binary files /dev/null and b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/abp-community-talk-4.png differ diff --git a/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/post.md b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/post.md new file mode 100644 index 0000000000..29a8c2c78d --- /dev/null +++ b/docs/en/Community-Articles/2023-06-08-abpio-platform-73-rc-has-been-published/post.md @@ -0,0 +1,266 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.3 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 v7.3! Thanks to all of you. + +## Get Started with the 7.3 RC + +Follow the steps below to try version 7.3.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.3.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.3.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.3.0-rc.1 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.2: + +* [ABP Framework 7.2 to 7.3 Migration Guide](https://docs.abp.io/en/abp/7.3/Migration-Guides/Abp-7_3) + +> If you are using the CMS Kit or CMS Kit Pro module, please don't forget to create a new migration and apply it to your database. + +## What's New with ABP Framework 7.3? + +In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: + +* Introducing the Volo.Abp.Imaging packages +* ABP CLI: switch-to-local command +* Monitoring Distributed Events +* Ordering of the Local Event Handlers +* Nonce attribute support for Content Security Policy (CSP) +* Other News + +### Introducing the Volo.Abp.Imaging packages + +ABP Framework provides some packages to compress and resize images. Currently, there are four official packages: + +* `Volo.Abp.Imaging.Abstractions`: Provides common services for compression and resizing purposes. +* `Volo.Abp.Imaging.AspNetCore`: Provides some attributes for controller actions that can automatically compress and/or resize uploaded files. +* `Volo.Abp.Imaging.ImageSharp`: Implements the image compression & resize operations using the [ImageSharp](https://github.com/SixLabors/ImageSharp) library. +* `Volo.Abp.Imaging.MagickNet`: Implements the image compression & resize operations using the [Magick.NET](https://github.com/dlemstra/Magick.NET) library. + +You can use one of these official providers (`ImageSharp` or `Magick.NET`) or implement your own image resizer/compressor contributor and use it in your application. + +> See the [Image Manipulation](https://docs.abp.io/en/abp/7.3/Image-Manipulation) documentation to learn more and see the required configurations. + +### ABP CLI: switch-to-local command + +In this version, ABP CLI introduces a new CLI command: **"switch-to-local"**. The `switch-to-local` command changes all NuGet package references on a solution to local project references for all the `.csproj` files in the specified folder (and all its subfolders with any depth). + +**Usage:** + +```bash +abp switch-to-local --paths "C:\Github\abp" +``` + +### Monitoring Distributed Events + +ABP Framework allows you to stay informed when your application **receives** or **sends** a distributed event. This enables you to track the event flow within your application and take appropriate actions based on the received or sent distributed events. + +You just need to subscribe to one of the `DistributedEventReceived` or `DistributedEventSent` events and take additional actions according to your cases. + +**Example: Get informed when your application sends an event to the distributed event bus** + +```csharp +public class DistributedEventSentHandler : ILocalEventHandler, ITransientDependency +{ + public async Task HandleEventAsync(DistributedEventSent eventData) + { + // TODO: IMPLEMENT YOUR LOGIC... + } +} +``` + +> See the documentation to learn more: [Distributed Event Bus](https://docs.abp.io/en/abp/7.3/Distributed-Event-Bus) + +### Ordering of the Local Event Handlers + +In this version, ABP Framework introduces the `LocalEventHandlerOrder` attribute, which can be used to set the execution order for the event handlers. This can be helpful if you want to handle your local event handlers in a specific order. + +**Example:** + +```csharp +[LocalEventHandlerOrder(-1)] +public class MyHandler + : ILocalEventHandler, + ITransientDependency +{ + public async Task HandleEventAsync(StockCountChangedEvent eventData) + { + //TODO: your implementation + } +} +``` + +By default, all event handlers have an order value of 0. Thus, if you want to take certain event handlers to be executed before other event handlers, you can set the order value as a negative value. + +> See the documentation to learn more: [Local Event Bus](https://docs.abp.io/en/abp/7.3/Local-Event-Bus) + +### Nonce attribute support for Content Security Policy (CSP) + +ABP Framework supports adding unique value to nonce attribute for script tags which can be used by Content Security Policy to determine whether or not a given fetch will be allowed to proceed for a given element. In other words, it provides a mechanism to execute only correct script tags with the correct nonce value. + +This feature is disabled by default. You can enable it by setting the *UseContentSecurityPolicyScriptNonce* property of the `AbpSecurityHeadersOptions` class to **true**: + +```csharp +Configure(options => +{ + //adding script-src nonce + options.UseContentSecurityPolicyScriptNonce = true; //false by default +}); +``` + +> See the [Security Headers](https://docs.abp.io/en/abp/7.3/UI/AspNetCore/Security-Headers) documentation for more information. + +### Other News + +* Upgraded the [Blazorise](https://blazorise.com/) library to v1.2.3 for Blazor UI. After the upgrade, ensure that all Blazorise-related packages are using v1.2.3 in your application. +* Module Entity Extension support has been added for the CMS Kit module. See [#16572](https://github.com/abpframework/abp/issues/16572) for more information. + +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/7.3.0-rc.1), which contains a list of all the issues and pull requests were closed with this version. + +## What's New with ABP Commercial 7.3? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.3. + +### Account Module - Using Authenticator App for Two-Factor Authentication + +In this version, ABP Commercial provides a new **Two-Factor Authentication (2FA) provider** that allows you to log in to an application by scanning a QR Code with an Authenticator App, such as Microsoft Authenticator or Google Authenticator. + +You need to apply the following actions to configure an Authenticator and then you are free to log in by using the Authenticator App: + +**Step 1 - Enable Two Factor Authentication and Scan the QR Code:** + +![two-factor-auth-1.png](3a0bac23c58b6d34e665030b4f089e9e.png) + +**Step 2 - Verify the QR Code with an authenticator app:** + +![two-factor-auth-2.png](3a0bac23df9ab9c68f361acd9c9fa79b.png) + +**Step 3 - Save the recovery codes for later use in case of not being able to login by verifying the QR code:** + +![two-factor-auth-3.png](3a0bac23fd1a5e7625d1fa11b27684ce.png) + +You can disable the two-factor authentication and reset the Authenticator App anytime you want, just by disabling the two-factor authentication or resetting the authenticator: + +![reset-authenticator.png](3a0bac241d501c2727fd77b885edbfe9.png) + +### Upgrade Blazorise to v1.2.3 + +Upgraded the [Blazorise](https://blazorise.com/) library to v1.2.3 for Blazor UI. If you are upgrading your project to v7.3.0, please ensure that all the Blazorise-related packages are using v1.2.3 in your application. Otherwise, you might get errors due to incompatible versions. + +### CMS Kit: Module Entity Extensions + +Module entity extension system is a high-level extension system that allows you to define new properties for existing entities of the dependent modules. ABP Framework and ABP Commercial use this system to allow developers to extend entities in different modules. + +In this version, Module Entity Extension support has been added for the CMS Kit Pro module. + +You can open the `YourProjectNameModuleExtensionConfigurator` class inside the `Domain.Shared` project of your solution and change the `ConfigureExtraProperties` method as shown below to add a new property to the `Poll` entity of the [CMS Kit Pro module](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index): + +```csharp +public static void ConfigureExtraProperties() +{ + OneTimeRunner.Run(() => + { + ObjectExtensionManager.Instance.Modules() + .ConfigureCmsKitPro(cmsKitPro => + { + cmsKitPro.ConfigurePoll(poll => + { + poll.AddOrUpdateProperty( + "", + property => + { + //configuration for this property + } + ) + }); + }); + }); +} + +``` + +> See the [Module Entity Extensions documentation](https://docs.abp.io/en/abp/latest/Module-Entity-Extensions) to learn more. + +### LeptonX Account Layout + +In this version, Account Layout has been re-designed for LeptonX Theme. You can see the new account layout in the following figure: + +![leptonx-account-layout.png](3a0bac2466ce529b36ae8e6c38603f80.png) + +> To use this new account layout, ensure that your LeptonX Theme package versions are v2.3+. + +## Community News + +### ABP Community Talks 2023.4: Angular 16 and ABP v7.3 + +![community talks](abp-community-talk-4.png) + +In this episode, the core ABP team talked about what's new with ABP v7.3 and Angular 16. You can watch the event from [here](https://www.youtube.com/watch?v=lq6u4vQURcI). + +### ABP .NET Conference 2023 + +![abp-conf.png](3a0bac24d1635475ef24d00707bbc67b.png) + +We organized ABP .NET Conference 2023 on May 2023 and we are happy to share the success of the conference, which captivated overwhelmingly interested live viewers from all over the world. 13 great line up of speakers which includes .NET experts and Microsoft MVPs delivered captivating talks that resonated with the audiences. Each of the talks attracted a great amount of interest and a lot of questions, sparking curiosity in the attendees. + +Thanks to all speakers and attendees for joining our event. + +> We shared our takeaways in a blog post, which you can read at [https://blog.abp.io/abp/ABP-.NET-Conference-2023-Wrap-Up](https://blog.abp.io/abp/ABP-.NET-Conference-2023-Wrap-Up). + +### Volosoft Attendeed & Sponsored Devnot .NET Conference 2023 + +![devnot-conference.png](3a0bac250d28086e119cd60b671240ad.png) + +We are thrilled to announce that the Volosoft Company proudly attended as one of the Gold Sponsors at the Devnot .NET Conference 2023! We are happy to join and be a sponsor of events and contribute to the software society, empowering developers and driving innovation with the .NET community. + +![devnot-talk.png](3a0bac252686a27b707f6686f6ba5fab.png) + +Co-Founder of [Volosoft](https://volosoft.com/) and Lead Developer of the ABP Framework, [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) gave a word about "Dealing with Concurrency and Multi Threading in .NET" at this event. + +> You can check [this blog post](https://volosoft.com/blog/Reflecting-on-Devnot-Dotnet-Conference-2023) if you want to learn more about the Devnot .NET Conference 2023. + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Authority Delegation in ABP Commercial](https://community.abp.io/posts/authority-delegation-in-abp-commercial-3wtljpp0) by [Liang Shiwei](https://github.com/realLiangshiwei) +* [What's new in Angular 16? New Features and Updates](https://community.abp.io/posts/whats-new-in-angular-16-new-features-and-updates-s1izi9br) by [Masum Ulu](https://twitter.com/masumulu) +* [Kubernetes Integrated Microservice Development with ABP Studio](https://community.abp.io/videos/kubernetes-integrated-microservice-development-with-abp-studio-oix9zkp8) by [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +### New ABP Blog Posts + +There are also some exciting blog posts written by the ABP team. You can see the following list for some of those articles: + +* [ABP .NET Conference 2023 Wrap Up](https://blog.abp.io/abp/ABP-.NET-Conference-2023-Wrap-Up) by [Bige Beşikçi](https://twitter.com/bigedediki) +* [Reflecting on Devnot Dotnet Conference 2023](https://volosoft.com/blog/Reflecting-on-Devnot-Dotnet-Conference-2023) by [Bige Beşikçi](https://twitter.com/bigedediki) +* [Meet Volosoft at the Devnot .NET Conference 2023!](https://volosoft.com/blog/Meet-Volosoft-at-the-Devnot-.NET-Conference-2023) by [Roo Xu](https://github.com/Roo1227) + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.3/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v7.3 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Community-Articles/2023-07-03-Image-Compression-And-Resize/POST.md b/docs/en/Community-Articles/2023-07-03-Image-Compression-And-Resize/POST.md index 9023417b20..1a1aa55f97 100644 --- a/docs/en/Community-Articles/2023-07-03-Image-Compression-And-Resize/POST.md +++ b/docs/en/Community-Articles/2023-07-03-Image-Compression-And-Resize/POST.md @@ -8,6 +8,12 @@ ABP Framework provides services to compress and resize images and implements the > Refer to the documentation for more info: [Image Manipulation](https://docs.abp.io/en/abp/7.3/Image-Manipulation) +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ### Source Code You can find the source code of the application at [https://github.com/abpframework/abp-samples/tree/master/ImageManipulation](https://github.com/abpframework/abp-samples/tree/master/ImageManipulation). Don't hesitate to check the source code, if you are stuck on any point. @@ -281,6 +287,12 @@ The results are impressive for the example above: * The original image was 12 KB and now the compressed & resized image has been reduced to 8 KB. * The original image was 225x225 and now resized as 200x200. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Conclusion In this article, I have shown you how to compress and/or resize images with ABP Framework's Image Manipulation System by just defining some attributes to the top of the controller actions. diff --git a/docs/en/Community-Articles/2023-07-14-abpio-platform-73-final-has-been-released/3a0c651a881f2c3554ccf785699d205f.png b/docs/en/Community-Articles/2023-07-14-abpio-platform-73-final-has-been-released/3a0c651a881f2c3554ccf785699d205f.png new file mode 100644 index 0000000000..23371576ed Binary files /dev/null and b/docs/en/Community-Articles/2023-07-14-abpio-platform-73-final-has-been-released/3a0c651a881f2c3554ccf785699d205f.png differ diff --git a/docs/en/Community-Articles/2023-07-14-abpio-platform-73-final-has-been-released/post.md b/docs/en/Community-Articles/2023-07-14-abpio-platform-73-final-has-been-released/post.md new file mode 100644 index 0000000000..4ae23d2fbf --- /dev/null +++ b/docs/en/Community-Articles/2023-07-14-abpio-platform-73-final-has-been-released/post.md @@ -0,0 +1,74 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.3 versions have been released today. + +## What's New With Version 7.3? + +All the new features were already explained in detail in the [7.3 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7-3-RC-Has-Been-Published), so no need to go over them again. Check it out for more details. + +## Getting Started with 7.3 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 7.3 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First of all, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.2: + +* [ABP Framework 7.2 to 7.3 Migration Guide](https://docs.abp.io/en/abp/7.3/Migration-Guides/Abp-7_3) + +## Community News + +### ABP Community Talks 2023.5: Mobile Development with the ABP Framework + +![abp-community-talk-4-1920.png](3a0c651a881f2c3554ccf785699d205f.png) + +In this episode, we'll talk about Exploring Options for Mobile Development with the ABP Framework. + +> Join us to explore the options for Mobile Development in ABP Framework on July 27, 2023, at 17:00 UTC. You can register from [here](https://kommunity.com/volosoft/events/abp-community-talks-20235-mobile-development-with-the-abp-framework-68e64e59). + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Video: ABP Framework Entity Framework Core](https://community.abp.io/videos/abp-framework-entity-framework-core-z0eyf1yy) by [Hamza Albreem](https://twitter.com/st_braim) +* [Image Compression and Resize with ABP Framework](https://community.abp.io/posts/image-compression-and-resize-with-abp-framework-4v2gpb7g) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [Manage Quartz with SilkierQuartz](https://community.abp.io/posts/manage-quartz-with-silkierquartz-xb4ovbj9) by [Jadyn](https://community.abp.io/members/Jadyn) +* [ABP Helper Methods](https://community.abp.io/posts/abp-helper-methods-04dk74cq) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [How to replace SwaggerUI with RapiDoc](https://community.abp.io/posts/how-to-replace-swaggerui-with-rapidoc-hw7pktmz) by [Jadyn](https://community.abp.io/members/Jadyn) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 7.4. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Community-Articles/2023-08-12-ABP-Commercial-GDPR-Module-Overview/POST.md b/docs/en/Community-Articles/2023-08-12-ABP-Commercial-GDPR-Module-Overview/POST.md index 38cfab67e9..3d62f38886 100644 --- a/docs/en/Community-Articles/2023-08-12-ABP-Commercial-GDPR-Module-Overview/POST.md +++ b/docs/en/Community-Articles/2023-08-12-ABP-Commercial-GDPR-Module-Overview/POST.md @@ -2,6 +2,12 @@ In this article, I will highlight ABP Commercial's [GDPR Module](https://commercial.abp.io/modules/Volo.Gdpr) and show you how to provide personal data to the GDPR Module that is collected by your application and make it aligned with personal data download results. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## GDPR Module [GDPR Module](https://docs.abp.io/en/commercial/latest/modules/gdpr) allows users to download and delete the data collected by the application. It's used for Personal Data Management obligating by the GDPR regulation and provides the following features: @@ -143,6 +149,12 @@ Then, when we clicked the download button, a zip file will be downloaded. We can {"City":"Istanbul","Postcode":"..."} ``` +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Conclusion In this article, I've explained the GDPR Module's data collection system and given you a brief overview of the module. GDPR Module allows you to request to download personal data, delete/anonymize your own personal data and delete your account permanently. It's pre-installed in the Application and Application(single layer) Pro Startup templates, but you can easily configure it to your existing application. diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d5f9cef5d3b21450039a0d60c4.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d5f9cef5d3b21450039a0d60c4.png new file mode 100644 index 0000000000..b059320b9d Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d5f9cef5d3b21450039a0d60c4.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d64851246bb2cf6a71d9c59109.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d64851246bb2cf6a71d9c59109.png new file mode 100644 index 0000000000..9715f7ff52 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d64851246bb2cf6a71d9c59109.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d67e161ba5d8cec75510aee73e.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d67e161ba5d8cec75510aee73e.png new file mode 100644 index 0000000000..5efd677bb4 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d67e161ba5d8cec75510aee73e.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d72e81c83a96ecd5c3ea477b91.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d72e81c83a96ecd5c3ea477b91.png new file mode 100644 index 0000000000..82f09d6247 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d72e81c83a96ecd5c3ea477b91.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d747b1e8af45ed3266d54157bf.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d747b1e8af45ed3266d54157bf.png new file mode 100644 index 0000000000..ddbae4a841 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d747b1e8af45ed3266d54157bf.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d77b35c85754842b0e738fb6e0.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d77b35c85754842b0e738fb6e0.png new file mode 100644 index 0000000000..9d4e95c191 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d77b35c85754842b0e738fb6e0.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d7d95884d0ebc118ffa1208ef3.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d7d95884d0ebc118ffa1208ef3.png new file mode 100644 index 0000000000..eb322626e3 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d7d95884d0ebc118ffa1208ef3.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d805049381a723f9d66af6c553.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d805049381a723f9d66af6c553.png new file mode 100644 index 0000000000..5f8c7cf24f Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d805049381a723f9d66af6c553.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d832074ca544cc93be80c3a476.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d832074ca544cc93be80c3a476.png new file mode 100644 index 0000000000..3eff13e504 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d832074ca544cc93be80c3a476.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d858aa0277a94f9383d38be6e1.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d858aa0277a94f9383d38be6e1.png new file mode 100644 index 0000000000..ea96907e56 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d858aa0277a94f9383d38be6e1.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d89e809905d8ace81340fd63a8.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d89e809905d8ace81340fd63a8.png new file mode 100644 index 0000000000..d850245181 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d89e809905d8ace81340fd63a8.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d8c4ea4107b9c3c18a3117defb.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d8c4ea4107b9c3c18a3117defb.png new file mode 100644 index 0000000000..8801b5fb0b Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d8c4ea4107b9c3c18a3117defb.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d90b8305953bb3099f18506d8b.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d90b8305953bb3099f18506d8b.png new file mode 100644 index 0000000000..d5afe74f10 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d90b8305953bb3099f18506d8b.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d939347073b53288be8286eb41.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d939347073b53288be8286eb41.png new file mode 100644 index 0000000000..8934a9404e Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d939347073b53288be8286eb41.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d96302be92961ed920f55b7865.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d96302be92961ed920f55b7865.png new file mode 100644 index 0000000000..d3b8555be1 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d96302be92961ed920f55b7865.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d99b0db5650b0400f2f338b522.jpg b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d99b0db5650b0400f2f338b522.jpg new file mode 100644 index 0000000000..65bae90315 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d14d99b0db5650b0400f2f338b522.jpg differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d15cd0485c48ab849c6e27d174b74.png b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d15cd0485c48ab849c6e27d174b74.png new file mode 100644 index 0000000000..00c17acccd Binary files /dev/null and b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/3a0d15cd0485c48ab849c6e27d174b74.png differ diff --git a/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/post.md b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/post.md new file mode 100644 index 0000000000..8fd1e7ae9f --- /dev/null +++ b/docs/en/Community-Articles/2023-08-17-abpio-platform-74-rc-has-been-published/post.md @@ -0,0 +1,300 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.4 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 v7.4! Thanks to all of you. + +## Get Started with the 7.4 RC + +Follow the steps below to try version 7.4.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.4.0-rc.5` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.4.0-rc.5 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.4.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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.3 or earlier: + +* [ABP Framework 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/abp/7.4/Migration-Guides/Abp-7_4) +* [ABP Commercial 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/commercial/7.4/migration-guides/v7_4) + +## What's New with ABP Framework 7.4? + +In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: + +* Dynamic Setting Store +* Introducing the `AdditionalAssemblyAttribute` +* `CorrelationId` Support on Distributed Events +* Database Migration System for EF Core +* Other News + +### Dynamic Setting Store + +Prior to this version, it was hard to define settings in different microservices and centrally manage all setting definitions in a single admin application. To make that possible, we used to add project references for all the microservices' service contract packages from a single microservice, so it can know all the setting definitions and manage them. + +In this version, ABP Framework introduces the Dynamic Setting Store, which is an important feature that allows you to collect and get all setting definitions from a single point and overcome the setting management problems on microservices. + +> *Note*: If you are upgrading from an earlier version and using the Setting Management module, you need to create a new migration and apply it to your database because a new database table has been added for this feature. + +### Introducing the `AdditionalAssemblyAttribute` + +In this version, we have introduced the `AdditionalAssemblyAttribute` to define additional assemblies to be part of a module. ABP Framework automatically registers all the services of your module to the [Dependency Injection System](https://docs.abp.io/en/abp/latest/Dependency-Injection). It finds the service types by scanning types in the assembly that define your module class. Typically, every assembly contains a separate module class definition and modules depend on each other using the `DependsOn` attribute. + +In some rare cases, your module may consist of multiple assemblies and only one of them defines a module class, and you want to make the other assemblies parts of your module. This is especially useful if you can't define a module class in the target assembly or you don't want to depend on that module's dependencies. + +In that case, you can use the `AdditionalAssembly` attribute as shown below: + +```csharp +[DependsOn(...)] // Your module dependencies as you normally would do +[AdditionalAssembly(typeof(IdentityServiceModule))] // A type in the target assembly (in another assembly) +public class IdentityServiceTestModule : AbpModule +{ + ... +} +``` + +With the `AdditionalAssembly` attribute definition, ABP loads the assembly containing the `IdentityServiceModule` class as a part of the identity service module. Notice that in this case, none of the module dependencies of the `IdentityServiceModule` are loaded. Because we are not depending on the `IdentityServiceModule`, instead we are just adding its assembly as a part of the `IdentityServiceTestModule`. + +> You can check the [Module Development Basics](https://docs.abp.io/en/abp/7.4/Module-Development-Basics) documentation to learn more. + +### `CorrelationId` Support on Distributed Events + +In this version, `CorrelationId` (a unique key that is used in distributed applications to trace requests across multiple services/operations) is attached to the distributed events, so you can relate events with HTTP requests and can trace all the related activities. + +ABP Framework generates a `correlationId` for the first time when an operation is started and then attaches the current `correlationId` to distributed events as an additional property. For example, if you are using the [transactional outbox or inbox pattern provided by ABP Framework](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#outbox-inbox-for-transactional-events), you can see the `correlationId` in the extra properties of the `IncomingEventInfo` or `OutgoingEventInfo` classes with the standard `X-Correlation-Id` key. + +> You can check [this issue](https://github.com/abpframework/abp/issues/16773) for more information. + +### Database Migration System for EF Core + +In this version, ABP Framework provides base classes and events to migrate the database schema and seed the database on application startup. This system works compatibly with multi-tenancy and whenever a new tenant is created or a tenant's database connection string has been updated, it checks and applies database migrations for the new tenant state. + +This system is especially useful to migrate databases for microservices. In this way, when you deploy a new version of a microservice, you don't need to manually migrate its database. + +You need to take the following actions to use the database migration system: + +* Create a class that derives from `EfCoreRuntimeDatabaseMigratorBase` class, override and implement its `SeedAsync` method. And lastly, execute the `CheckAndApplyDatabaseMigrationsAsync` method of your class in the `OnPostApplicationInitializationAsync` method of your module class. +* Create a class that derives from `DatabaseMigrationEventHandlerBase` class, override and implement its `SeedAsync` method. Then, whenever a new tenant is created or a tenant's connection string is changed then the `SeedAsync` method will be executed. + +### Other News + +* [OpenIddict](https://github.com/openiddict/openiddict-core/tree/4.7.0) library has been upgraded to **v4.7.0**. See [#17334](https://github.com/abpframework/abp/pull/17334) for more info. +* ABP v7.4 introduces the `Volo.Abp.Maui.Client` package, which is used by the MAUI mobile application in ABP Commercial. See [#17201](https://github.com/abpframework/abp/pull/17201) for more info. +* In this version, the `AbpAspNetCoreIntegratedTestBase` class gets a generic type parameter, which expects either a startup class or an ABP module class. This allows us to use configurations from an ABP module or old-style ASP.NET Core Startup class in a test application class and this simplifies the test application project. See [#17039](https://github.com/abpframework/abp/pull/17039) for more info. + +## What's New with ABP Commercial 7.4? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce new features coming with ABP Commercial 7.4. + +### Dynamic Text Template Store + +Prior to this version, it was hard to create text templates in different microservices and centrally manage them in a single admin application. For example, if you would define a text template in your ordering microservice, then those text templates could not be seen on the administration microservice because the administration microservice would not have any knowledge about that text template (because it's hard-coded in the ordering microservice). + +For this reason, in this version, the Dynamic Text Template Store has been introduced to make the [Text Template Management module](https://docs.abp.io/en/commercial/latest/modules/text-template-management) compatible with microservices and distributed systems. It allows you to store and get all text templates from a single point. Thanks to that, you can centrally manage the text templates in your admin application. + +> *Note*: If you are upgrading from an earlier version and are using the Text Template Management module, you need to create a new migration and apply it to your database. + +To enable the dynamic template store, you just need to configure the `TextTemplateManagementOptions` and set the `IsDynamicTemplateStoreEnabled` as true in your module class: + +```csharp +Configure(options => +{ + options.IsDynamicTemplateStoreEnabled = true; +}); +``` + +Notice this is only needed in the microservice where you centrally manage your text template contents. So, typically you would use the configuration above in your administration microservice. Other microservices automatically save their text template contents to the central database. + +### Suite: Custom Code Support + +In this version, we have implemented the custom code support in Suite. This allows you to customize the generated code-blocks and preserve your custom code changes in the next CRUD Page Generation in Suite. ABP Suite specifies hook-points to allow adding custom code blocks. Then, the code that you wrote to these hook points will be respected and will not be overridden in the next entity generation. + +![suite-custom-code.png](3a0d14d5f9cef5d3b21450039a0d60c4.png) + +To enable custom code support, you should check the *Customizable code* option in the crud page generation page. When you enable the custom code support, you will be seeing some hook-points in your application. + +For example, on the C# side, you'll be seeing some abstract classes and classes that derive from them (for entities, application services, interfaces, domain services, and so on...). You can write your custom code in those classes (`*.Extended.cs`) and the next time when you need to re-generate the entity, your custom code will not be overridden (only the base abstract classes will be re-generated and your changes on Suite will be respected): + +Folder structure | Book.Extended.cs +:-------------------------:|:-------------------------: +![suite-custom-code-backend.png](3a0d14d64851246bb2cf6a71d9c59109.png) | ![book-extended-cs.png](3a0d14d67e161ba5d8cec75510aee73e.png) + +> *Note*: If you want to override the entity and add custom code, please do not touch the code between `...` placeholders, because the constructor of the entity should be always re-generated in case of a new property added. + +On the UI side, you can see the *comment placeholders* on the pages for MVC & Blazor applications. These are hook-points provided by ABP Suite and you can write your custom code between these comment sections: + +Folder structure | Books/Index.cshtml +:-------------------------:|:-------------------------: +![suite-custom-code-ui.png](3a0d14d72e81c83a96ecd5c3ea477b91.png) | ![book-extended-cshtml.png](3a0d14d747b1e8af45ed3266d54157bf.png) + +### MAUI & React Native UI Revisions + +In this version, we have revised MAUI & React Native mobile applications and added new pages, functionalities and made improvements on the UI side. + +![maui.png](3a0d14d77b35c85754842b0e738fb6e0.png) + +For example, in the MAUI application, we have implemented the following functionalities and changed the UI completely: + +* **User Management Page**: Management page for your application users. You can search, add, update, or delete users of your application. +* **Tenants**: Management page for your tenants. +* **Settings**: Management page for your application settings. On this page, you can change **the current language**, **the profile picture**, **the current password**, or/and **the current theme**. + +Also, we have aligned the features on both of these mobile options (MAUI & React Native) and showed them in the ["ABP Community Talks 2023.5: Exploring the Options for Mobile Development with the ABP Framework"](https://community.abp.io/events/mobile-development-with-the-abp-framework-ogtwaz5l). + +> If you have missed the event, you can watch from 👉 [here](https://www.youtube.com/watch?v=-wrdngeKgZw). + +### New LeptonX Theme Features + +In the new version of LeptonX Theme, which is v2.4.0-rc.1, there are some new features that we want to mention. + +#### Mobile Toolbars + +The [Toolbar System](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Toolbars) is used to define *toolbars* on the user interface. Modules (or your application) can add items to a toolbar, then the UI themes can render the toolbar on the layout. + +LeptonX Theme extends this system even further and introduces mobile toolbars with this version. You can create a component and add it as a mobile toolbar as below: + +```csharp +public class MyToolbarContributor : IToolbarContributor +{ + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == LeptonXToolbars.MainMobile) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(ShoppingCardToolbarComponent))); + + //other mobile toolbars... + } + + return Task.CompletedTask; + } +} +``` + +Then, the LeptonX Theme will render these mobile toolbars like in the figure below: + +![mobile-toolbars.png](3a0d14d7d95884d0ebc118ffa1208ef3.png) + +> **Note**: The Angular UI hasn't been completed yet. We aim to complete it as soon as possible and include it in the next release. + +#### New Error Page Designs + +In this version, we have implemented new error pages. Encounter a fresh look during error situations with the 'New Error Page Designs,' providing informative and visually appealing error displays that enhance user experience: + +![error-page.png](3a0d14d805049381a723f9d66af6c553.png) + +#### Fluid Layout + +In this version, LeptonX Theme introduces the fresh-looking **Fluid Layout**, which is a layout that lets you align elements so that they automatically adjust their alignment and proportions for different page sizes and orientations. + +![fluid-layout.png](3a0d14d832074ca544cc93be80c3a476.png) + +> You can visit [the live demo of LeptonX Theme](https://x.leptontheme.com/side-menu) and try the Fluid Layout now! + +### Check & Move Related Entities on Deletion/Demand + +In application modules, there are some entities that have complete relationships with each other such as role-user relations. In such cases, it's a typical requirement to check & move related entities that have a relation with the other entity that is about to be deleted. + +For example, if you need to delete an edition from your system, you would typically want to move the tenant that is associated with that edition. For this purpose, in this version, ABP Commercial allows you to move related entities on deletion/demand. + +![editions.png](3a0d14d858aa0277a94f9383d38be6e1.png) + +Currently, this feature is implemented for SaaS and Identity Pro modules and for the following relations: + +* Edition - Tenant +* Role - User +* Organization Unit - User + +Also, it's possible to move the related associated-records before deleting the record. For example, you can move all tenants from an edition as shown in the figure below: + +"Move all tenants" action | "Move all tenants" modal +:-------------------------:|:-------------------------: +![move-all-tenants.png](3a0d14d89e809905d8ace81340fd63a8.png) | ![move-tenants.png](3a0d14d8c4ea4107b9c3c18a3117defb.png) + +### CMS Kit Pro: Page Feedback + +In this version, the **Page Feedback** feature has been added to the [CMS Kit Pro](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) module. This feature allows you to get feedback from a page in your application. + +This is especially useful if you have content that needs feedback from users. For example, if you have documentation or a blog website, it's a common requirement to assess the quality of the articles and get feedback from users. In that case, you can use this feature: + +![page-feedback.png](3a0d14d90b8305953bb3099f18506d8b.png) + +### Chat Module: Deleting Messages & Conversations + +In this version, the [Chat Module](https://docs.abp.io/en/commercial/latest/modules/chat) allows you to delete individual messages or a complete conversation. + +You can enable or disable the message/conversation deletion globally on your application: + +![settings.png](3a0d14d939347073b53288be8286eb41.png) + +> **Note**: The Angular UI hasn't been completed yet. We aim to complete it as soon as possible and include it in the next release. + +### Password Complexity Indicators + +In this version, ABP Framework introduces an innovative ["Password Complexity Indicator"](https://docs.abp.io/en/commercial/7.4/ui/angular/password-complexity-indicator-component) feature, designed to enhance security and user experience. This feature dynamically evaluates and rates the strength of user-generated passwords, providing real-time feedback to users as they create or update their passwords. By visually indicating the complexity level, users are guided toward crafting stronger passwords that meet modern security standards. + +![password-complexity.png](3a0d14d96302be92961ed920f55b7865.png) + +You can check the [Password Complexity Indicator Angular documentation](https://docs.abp.io/en/commercial/7.4/ui/angular/password-complexity-indicator-component) to learn more. + +> **Note**: Currently, this feature is only available for the Angular UI, but we will be implemented for other UIs in the next version. + +## Community News + +### ABP Community Talks 2023.6: Live Community Questions Session + +![streamyard.png](3a0d15cd0485c48ab849c6e27d174b74.png) + +In this episode, the core ABP team will do a Live Q&A session **on August 31, 2023, at 17:00 UTC**. This is your chance to ask the team anything about ABP. Whether it's about features, best practices, or upcoming releases... We want to hear from you! + +You can do either of the following things to send your questions: + +* Reply to this tweet: [https://twitter.com/abpframework/status/1692157154692595817](https://twitter.com/abpframework/status/1692157154692595817) +* Send us an email at [marketing@volosoft.com](mailto:marketing@volosoft) with **"ABP Community Talks Live Q&A"** in the subject line +* Or simply, be there at the live session in the chat. + +> Register to listen and ask your questions now 👉 [https://kommunity.com/volosoft/events/abp-community-talks-20236-live-community-questions-session-1a545496](https://kommunity.com/volosoft/events/abp-community-talks-20236-live-community-questions-session-1a545496). + +### DevNot Developer Summit 2023 + +![developersummit.jpg](3a0d14d99b0db5650b0400f2f338b522.jpg) + +We are thrilled to announce that the co-founder of [Volosoft](https://volosoft.com/) and Lead Developer of the ABP Framework, Halil Ibrahim Kalkan will give a speech about "Building a Kubernetes Integrated Local Development Environment" in the [Developer Summit 2023 event](https://summit.devnot.com/) on the 7th of October. + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [ABP Commercial - GDPR Module Overview](https://community.abp.io/posts/abp-commercial-gdpr-module-overview-kvmsm3ku) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [Video: ABP Framework Data Transfer Objects](https://community.abp.io/videos/abp-framework-data-transfer-objects-qwebfqz5) by [Hamza Albreem](https://github.com/braim23) +* [Video: ABP Framework Essentials: MongoDB](https://community.abp.io/videos/abp-framework-essentials-mongodb-gwlblh5x) by [Hamza Albreem](https://github.com/braim23) +* [ABP Modules and Entity Dependencies](https://community.abp.io/posts/abp-modules-and-entity-dependencies-hn7wr093) by [Jack Fistelmann](https://github.com/nebula2) +* [How to add dark mode support to the Basic Theme in 3 steps?](https://community.abp.io/posts/how-to-add-dark-mode-support-to-the-basic-theme-in-3-steps-ge9c0f85) by [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) +* [Deploying docker image to Azure with yml and bicep through Github Actions](https://community.abp.io/posts/deploying-docker-image-to-azure-with-yml-and-bicep-through-github-actions-cjiuh55m) by [Sturla](https://community.abp.io/members/Sturla) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/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://docs.abp.io/en/abp/7.4/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v7.4 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Community-Articles/2023-08-30-celebrating-abps-ddd-a-decade-dedicated-to-development/post.md b/docs/en/Community-Articles/2023-08-30-celebrating-abps-ddd-a-decade-dedicated-to-development/post.md new file mode 100644 index 0000000000..6831e7eb1d --- /dev/null +++ b/docs/en/Community-Articles/2023-08-30-celebrating-abps-ddd-a-decade-dedicated-to-development/post.md @@ -0,0 +1,44 @@ +Today isn't just another day. Today, we celebrate a decade of dedication, innovation, and collaboration. A day that reminds us of the late nights, the brainstorming sessions, the challenges faced, and the solutions found. A decade ago, we started with a simple idea: to make web application development for .NET developers easier and more efficient. This idea wasn't just a fleeting thought; it was a commitment to every .NET developer out there. That commitment was shaped in the form of [open-source ASP.NET Boilerplate project](https://github.com/aspnetboilerplate/aspnetboilerplate). +As we stand at this 10-year mark, it's not just about looking back but also realizing how every step, every feedback, and every update has shaped ABP journey for today. + +##### Milestones From a Commit to a Community + +* August 2013: The journey began with the **first commit** to the [open-source ASP.NET Boilerplate project](https://github.com/aspnetboilerplate/aspnetboilerplate). +* February 2014: We celebrated the **first official release** of [ASP.NET Boilerplate](https://aspnetboilerplate.com/), marking its readiness for the .NET developer community. +* May 2015: The **launch of [ASP.NET Zero](https://aspnetzero.com/)** provided a startup solution based on the foundational [ASP.NET Boilerplate](https://aspnetboilerplate.com/). +* December 2016: A new chapter unfolded with the **first commit** to the [open-source ABP Framework project](https://github.com/abpframework/abp), ensuring the legacy of [ASP.NET Boilerplate](https://aspnetboilerplate.com/) continued to flourish. +* June 2018: The **first release of the [ABP Framework](https://github.com/abpframework/abp)** showcased its capabilities and features. +* September 2018: We publicly **announced the [open-source ABP Framework project](https://github.com/abpframework/abp)**, inviting developers worldwide to be a part of this journey. +* January 2020: The **introduction of [ABP Commercial](https://commercial.abp.io/)** added a layer of commercial benefits and features on top of the robust ABP Framework. +* August 2023: Here we are, **celebrating 10 years of ABP**! + + +##### A Heartfelt Ode to the ABP Community + +Our journey over the past decade wouldn't have been possible without you. Your relentless feedback, unwavering support, and enduring trust that have not only shaped ABP but also redefined what community-driven development means. Every line of code, every feature, and every update was inspired by you; every milestone we achieved was a testament to the collaborative spirit of the ABP community. Every challenge we overcame was because of the collective wisdom and passion of this vibrant ecosystem. + +You have been the wind beneath our wings - dedicated community of developers, contributors, partners, and users. We appreciate all of it and look forward to the upcoming decades with you! + + +##### Looking Ahead + +While we cherish our achievements over the past decade, we're even more excited about what the future holds. The world of web development is ever-evolving, and so are we. Our commitment remains unwavering: to ensure ABP not only keeps up with the times but sets new benchmarks. With emerging technologies, changing user needs, and the ever-growing expectations of developers, we're committed to pushing the boundaries, innovating, and ensuring that ABP remains the gold standard for .NET developers across the globe. + +With ABP Community's continued support, we are super excited about the future, our eyes are set on the horizon. + + +##### Engage, Enrich, and Evolve with Us + +* **Join ABP Community Events:** We try to make ABP Community Talks on a monthly basis. You can join to [Volosoft Kommunity](https://kommunity.com/volosoft/about) to be the first to hear about every new episode of ABP Community Talks when it is announced. You can watch the previous ABP Community Talks episodes from [here](https://www.youtube.com/playlist?list=PLsNclT2aHJcOsPustEkzG6DywiO8eh0lB). +* **ABP Conference:** Did you catch the [ABP .NET Conference 2023](https://abp.io/Conference/2023)? If not, no worries! We're making it an annual affair. Also, you can watch any session you want from the [ABP DOTNET Conf'23 Playlist](https://www.youtube.com/playlist?list=PLsNclT2aHJcPTA3D4fIF10fsbhbckEbBC). You can follow [ABP Framework Twitter](https://twitter.com/abpframework) for ABP .NET Conf'24 and many more announcements. +* **Chat with Us:** Got questions or ideas? Join to the official [ABP Discord Server](https://community.abp.io/discord) and chat with fellow community members. +* **Watch and Learn:** We're active on [Volosoft YouTube Channel](https://www.youtube.com/@Volosoft). Subscribe to stay ahead of the curve with informative videos, live shows, and much more. + + +##### Wrapping Up + +A decade in the tech world is an eternity, and to have thrived, evolved, and led for ten years is no small feat. It's been ten years of breaking barriers with coding, continuous learning, and growing together as one big family. But this is just the beginning. The future awaits with new challenges, new technologies, and new milestones. And as we gear up to embrace what's next, we want you ABP Community right there with us, scripting the next chapters of this incredible journey. + +From the bottom of our hearts, a big thank you for being an integral part of our story. Together, let's continue to create, innovate, and set new standards. + +Here's to countless more decades dedicated to development, innovation and excellence together with ABP! diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/1a06907364a779fb8bad39f3e6890219.jpg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/1a06907364a779fb8bad39f3e6890219.jpg new file mode 100644 index 0000000000..6e756f8072 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/1a06907364a779fb8bad39f3e6890219.jpg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7a636a849847e69dec153c7e07.jpg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7a636a849847e69dec153c7e07.jpg new file mode 100644 index 0000000000..7a6a0c86e9 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7a636a849847e69dec153c7e07.jpg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7aaa5d774528cc6afeeae8e88b.jpg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7aaa5d774528cc6afeeae8e88b.jpg new file mode 100644 index 0000000000..35494d6935 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7aaa5d774528cc6afeeae8e88b.jpg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7bf6d6942ff236ff2ac5a8f092.jpeg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7bf6d6942ff236ff2ac5a8f092.jpeg new file mode 100644 index 0000000000..7e77436157 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7bf6d6942ff236ff2ac5a8f092.jpeg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7c5833ae0ab6f3395339b17dd8.jpg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7c5833ae0ab6f3395339b17dd8.jpg new file mode 100644 index 0000000000..56286ddec1 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7c5833ae0ab6f3395339b17dd8.jpg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7e6fba0856fb5444f7c63256af.jpg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7e6fba0856fb5444f7c63256af.jpg new file mode 100644 index 0000000000..d6d1e8d37d Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e7e6fba0856fb5444f7c63256af.jpg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e889ae94471a3dd396494be5519.jpeg b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e889ae94471a3dd396494be5519.jpeg new file mode 100644 index 0000000000..06b9513423 Binary files /dev/null and b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/3a0d5e889ae94471a3dd396494be5519.jpeg differ diff --git a/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/post.md b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/post.md new file mode 100644 index 0000000000..1330516ed4 --- /dev/null +++ b/docs/en/Community-Articles/2023-08-31-abpio-is-sponsoring-basta-mainz-2023/post.md @@ -0,0 +1,31 @@ +We are thrilled to announce that ABP.IO will be sponsoring [BASTA! Mainz 2023](https://basta.net/mainz-en/)! We are always eager to support the software development community, and this time, it's in Mainz, Germany. + +BASTA! is a renowned conference for software developers that delves into a plethora of topics in the software development realm. It gathers experts from all corners of the globe to disseminate their knowledge and insights on cutting-edge technologies and industry best practices. This year, the event will take place from September 25 to 29, 2023, at the Rheingoldhalle Mainz. + +We take immense pride in sponsoring such pivotal events and supporting the software development community. Conferences like BASTA! Mainz are perfect for developers to learn, network, and keep up with the evolving trends in the domain. + +Here are some previews from the events we sponsored before, so you know what to expect in BASTA! Mainz 2023: +### DevNot Summit 2022: +![20221015\_113630.jpg](3a0d5e7e6fba0856fb5444f7c63256af.jpg) + +### NDC London 2020: +![00f93d44fcdeb12edd6039f3e6787472.jpg](3a0d5e7a636a849847e69dec153c7e07.jpg) + +![image](1a06907364a779fb8bad39f3e6890219.jpg) + +### NDC London 2023: +![IMG\_0014.jpg](3a0d5e7c5833ae0ab6f3395339b17dd8.jpg) + +![20230125\_084840.jpg](3a0d5e7aaa5d774528cc6afeeae8e88b.jpg) + +### DevNot DotNet 2023: +![Devnot dotnet.jpeg](3a0d5e7bf6d6942ff236ff2ac5a8f092.jpeg) + +As is customary, we have some delightful surprises in store for attendees at our booth. Swing by to grab one of our exclusive swag kits and join our raffles for a chance to win exciting prizes. And, delicious hand-made chocolates all the way from Turkey. here is a sneak peak at what they look like: +![FnZ8qOxWAAA4fDD.jpeg](3a0d5e889ae94471a3dd396494be5519.jpeg) + +The [ABP.IO](https://abp.io/) Team is eagerly anticipating our participation in BASTA! Mainz 2023. We are keen on forging connections with other professionals in the software development industry. Keep an eye out for more updates on our engagement in the conference from [ABP Framework Twitter account](https://twitter.com/abpframework). + +For those keen on learning more about Volosoft and our software development offerings, or if you're curious about our SaaS product, [ABP Commercial](https://commercial.abp.io/), which is built on our [ABP Framework](https://abp.io/), do visit us at our booth. We're always up for a chat about your software development requirements and how we can assist. + +Meet us at BASTA! Mainz 2023! \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee356bf503f43f8ceb6dca73c9f0.png b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee356bf503f43f8ceb6dca73c9f0.png new file mode 100644 index 0000000000..33c0a61b6b Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee356bf503f43f8ceb6dca73c9f0.png differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35853c7f829442023af6553f66.jpg b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35853c7f829442023af6553f66.jpg new file mode 100644 index 0000000000..3a6366eb7b Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35853c7f829442023af6553f66.jpg differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35afc7099825d6dca031412a29.jpg b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35afc7099825d6dca031412a29.jpg new file mode 100644 index 0000000000..56d1b43a01 Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35afc7099825d6dca031412a29.jpg differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35ea587cfd54dbe7f25b08f1ba.jpg b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35ea587cfd54dbe7f25b08f1ba.jpg new file mode 100644 index 0000000000..4179451e34 Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee35ea587cfd54dbe7f25b08f1ba.jpg differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee361959cf15deace2c962b45824.jpg b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee361959cf15deace2c962b45824.jpg new file mode 100644 index 0000000000..8e0d71909b Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee361959cf15deace2c962b45824.jpg differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee3661356610a7c0d806dd40ef97.jpg b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee3661356610a7c0d806dd40ef97.jpg new file mode 100644 index 0000000000..8ebe63afa7 Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee3661356610a7c0d806dd40ef97.jpg differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee3697640ce7b9a095a99940cec9.png b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee3697640ce7b9a095a99940cec9.png new file mode 100644 index 0000000000..08d456b9b3 Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee3697640ce7b9a095a99940cec9.png differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee36b334fb642cc43560a493fc5a.jpg b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee36b334fb642cc43560a493fc5a.jpg new file mode 100644 index 0000000000..9a2594c3b9 Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee36b334fb642cc43560a493fc5a.jpg differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee36e64265b465069593419fb9d6.png b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee36e64265b465069593419fb9d6.png new file mode 100644 index 0000000000..991b764ce6 Binary files /dev/null and b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/3a0dee36e64265b465069593419fb9d6.png differ diff --git a/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/post.md b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/post.md new file mode 100644 index 0000000000..be659ec86f --- /dev/null +++ b/docs/en/Community-Articles/2023-09-28-unleash-the-power-of-abp-cms-kit-a-dynamic-content-showcase/post.md @@ -0,0 +1,105 @@ +We're excited to introduce to you [ABP](https://abp.io/)'s [CMS Kit Module](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index) – a versatile module that empowers you to build your own dynamic content website with ease. In this introductory blog post, we'll first take a look at the **CMS Kit Module** and then we'll take you on a journey through our **CMS Kit Demo Application**, showcasing the incredible capabilities of this feature-rich module. + +## ABP Community Talks 2023.7: Build Your Content Management System with .NET + +We as the ABP team organized the [**ABP Community Talks 2023.7: Build Your Content Management System with .NET**](https://community.abp.io/events/build-your-own-cms-with-.net-a-first-look-at-abps-content-management-system-kit-3nfvm9ix) event to explore the depths of the CMS Kit Module and its real-world applications. The talk delved into the intricacies of the CMS Kit Module, providing valuable insights into its features and functionalities. Attendees had the opportunity to witness the module in action through live demonstrations and interactive Q&A sessions. + +For those who missed the live session, you can catch up on all the enriching discussions and demonstrations by watching the record below 👇: + + + +## Overview of the CMS Kit Module + +At the heart of ABP's CMS Kit Module is a robust Content Management System (CMS) designed to simplify content creation and management. With the CMS Kit, you have the tools to build your own dynamic content website, complete with a range of features tailored to your specific needs. It provides core **building blocks** and fully working sub-systems to create your own website with the CMS features or use the building blocks in your websites for any purpose. + +### CMS Kit: The Building Blocks (a.k.a Features) + +The following features are currently available and ready to use: + +* **Blogging**: Create your blog and publish posts (with markdown / HTML support) +* **Dynamic Pages**: Create pages with dynamic URLs (with markdown / HTML support) +* **Dynamic Menu**: Manage your application’s main menu on the fly +* **Tagging**: Tag any kind of content, like a blog post +* **Comments**: Allow users to comment and discuss in your application +* **Reactions**: Allow users to react to your content using simple smileys +* **Rating**: Reusable component to rate other contents +* **Global Resources**: Dynamically add CSS / JavaScript to your pages or blog posts +* **Dynamic Widgets**: Build widgets and use them in dynamic content, like blog posts + +> For more information, please check the [CMS Kit Module documentation](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index). In the documentation, you can see descriptions for each feature, learn how to install & configure the module, and much more... + +### CMS Kit Pro: The Building Blocks (a.k.a Features) + +CMS Kit Pro is a part of [ABP Commercial](https://commercial.abp.io/) and provides additional features. The following features are provided by the CMS Kit Pro Module: + +* **Contact Form**: Easily add a «contact us» form to your website +* **Newsletter**: Allow users to subscribe to your newsletter (with multiple categories) +* **URL Forwarding**: Create short URLs or redirect users to other pages (for example: [abp.io/dapr](https://abp.io/dapr)) +* **Poll**: Create quick polls for your users +* **Page Feedback**: Collect feedbacks from users for your content + +> For more information, check the [CMS Kit Pro Module documentation](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index). + +## Explore the CMS Kit Demo Application + +As the core ABP development team, we've created a sample application to showcase the incredible capabilities of the ABP's CMS Kit Module. You can explore the source code of the application on our [GitHub repository](https://github.com/abpframework/cms-kit-demo) to get a deeper understanding of how the CMS Kit works under the hood. While developing the application, we aimed to build a real-world application and use almost all of the CMS Kit Features. + +In the next sections, we will provide a detailed walkthrough of the application and highlight each CMS Kit feature that has been incorporated into it. + +### Dynamic Menu Creation with CMS Kit's Menu System + +One of the standing out features of the CMS Kit is its [Menu System](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Menus), which allows for the creation and dynamic ordering of application menu items. Say goodbye to static menus; with CMS Kit, you have the power to tailor your menu structure according to your evolving content needs. + +You can see the homepage of the application in the following figure: + +![homepage.png](3a0dee356bf503f43f8ceb6dca73c9f0.png) + +The application menu items in the navbar are **created & ordered dynamically** with the [CMS Kit's Menu System](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Menus): + +![menu-admin-side.jpg](3a0dee35853c7f829442023af6553f66.jpg) + +### Custom Implementations with Comment & Reaction Features + +Our demo application goes a step further by demonstrating custom implementations, such as an **image gallery**, seamlessly integrated with CMS Kit's [Comment](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments) & [Reaction](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Reactions) Features: + +| Gallery | Detail Page | +|------------------------ |-----------------------| +| ![image-gallery.jpg](3a0dee35afc7099825d6dca031412a29.jpg) | ![image-gallery-detail.jpg](3a0dee35ea587cfd54dbe7f25b08f1ba.jpg) | + +It's pretty easy to integrate CMS Kit Features such as Comments & Reactions into your existing pages. You can check the [source code of the application](https://github.com/abpframework/cms-kit-demo/blob/main/src/CmsKitDemo/Pages/Gallery/Detail.cshtml) and see how to integrate the features. + +### Robust Blogging Capabilities + +Blogging has never been easier! With the CMS Kit's [Blogging Feature](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Blogging), you can effortlessly manage your blog content, complete with [Ratings](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Ratings), [Comments](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments), [Tags](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Tags), and [Reactions](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Reactions) features as enabled: + +| Blog | Blog Post | +|------------------------ |-----------------------| +| ![blogs.jpg](3a0dee361959cf15deace2c962b45824.jpg) | ![blog-detail.jpg](3a0dee3661356610a7c0d806dd40ef97.jpg) | + +You can enable/disable CMS Kit Features per blog on the admin side easily: + +![cmskit-module-features.png](3a0dee3697640ce7b9a095a99940cec9.png) + +### Dynamic Pages with Style and Script Integration + +*Products* pages showcase the flexibility of the CMS Kit's [Pages Feature](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Pages), allowing for dynamic content creation, style customization, and script integration. Your website can now truly reflect your unique brand and content style. + +You can create pages with dynamic URLs on the admin side: + +![pages-admin-side.jpg](3a0dee36b334fb642cc43560a493fc5a.jpg) + +After you have created the page, you can access it via `/{slug}` URL on the public-web side: + +![products-abp-commercial.png](3a0dee36e64265b465069593419fb9d6.png) + +## What's Next? + +Please try the CMS Kit Module now and provide [feedback](https://github.com/abpframework/abp) to help us build a more effective content management kit! + +## Resources + +* [CMS Kit Demo: Source Code](https://github.com/abpframework/cms-kit-demo) +* [cms-kit-demo.abp.io](https://cms-kit-demo.abp.io/) (will be live soon) +* [CMS Kit Module documentation](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index) +* [CMS Kit Pro Module documentation](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index) +* [ABP Community Talks 2023.7: Build Your Content Management System with .NET](https://www.youtube.com/watch?v=S9__Hnu29tI) \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074506bcc60cad473655b6fd5da6.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074506bcc60cad473655b6fd5da6.jpg new file mode 100644 index 0000000000..0017e817ba Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074506bcc60cad473655b6fd5da6.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074555e8d6f62bc3d47c00f86762.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074555e8d6f62bc3d47c00f86762.jpg new file mode 100644 index 0000000000..a9b3649dd2 Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074555e8d6f62bc3d47c00f86762.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0745b6418472a66d905053d492e6.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0745b6418472a66d905053d492e6.jpg new file mode 100644 index 0000000000..929c3753fe Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0745b6418472a66d905053d492e6.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074625fddc3097efdc1bef3058d8.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074625fddc3097efdc1bef3058d8.jpg new file mode 100644 index 0000000000..b04382a27b Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074625fddc3097efdc1bef3058d8.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074675731c4a59167a878d4cd04e.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074675731c4a59167a878d4cd04e.jpg new file mode 100644 index 0000000000..3452104d4a Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074675731c4a59167a878d4cd04e.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074703a63129e5713ff51653aaac.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074703a63129e5713ff51653aaac.jpg new file mode 100644 index 0000000000..d51c0fb0df Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074703a63129e5713ff51653aaac.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e07477e980a4c2104300557e8f7fb.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e07477e980a4c2104300557e8f7fb.jpg new file mode 100644 index 0000000000..4b0af90172 Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e07477e980a4c2104300557e8f7fb.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0747c283919bbc5edfdc289db1d8.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0747c283919bbc5edfdc289db1d8.jpg new file mode 100644 index 0000000000..3ba57d015b Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0747c283919bbc5edfdc289db1d8.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0748c8752dfdc2bcb5b9b2ce5908.png b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0748c8752dfdc2bcb5b9b2ce5908.png new file mode 100644 index 0000000000..e9799d9420 Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0748c8752dfdc2bcb5b9b2ce5908.png differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e07495efa58bb9f1e523d982dbc65.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e07495efa58bb9f1e523d982dbc65.jpg new file mode 100644 index 0000000000..f7f5d1431f Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e07495efa58bb9f1e523d982dbc65.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0749c23a9e3b06d66ed54bed0c7a.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0749c23a9e3b06d66ed54bed0c7a.jpg new file mode 100644 index 0000000000..35de7b572d Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e0749c23a9e3b06d66ed54bed0c7a.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074a268272e630d8422ace32b4c8.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074a268272e630d8422ace32b4c8.jpg new file mode 100644 index 0000000000..02bdc29a17 Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074a268272e630d8422ace32b4c8.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074aa3857a696cb941edc46dcb52.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074aa3857a696cb941edc46dcb52.jpg new file mode 100644 index 0000000000..166c058bba Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074aa3857a696cb941edc46dcb52.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074b0a46662cf39a6796d0f23086.jpg b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074b0a46662cf39a6796d0f23086.jpg new file mode 100644 index 0000000000..a84abea379 Binary files /dev/null and b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/3a0e074b0a46662cf39a6796d0f23086.jpg differ diff --git a/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/post.md b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/post.md new file mode 100644 index 0000000000..dd7cafc13f --- /dev/null +++ b/docs/en/Community-Articles/2023-10-03-basta-mainz-2023-what-a-blast-in-germany/post.md @@ -0,0 +1,118 @@ +BASTA! Mainz 2023 has wrapped up, and what an extraordinary journey it has been! We can’t wait to share our impressions, highlights, and the incredible impact it had on the tech community in Germany and beyond. + + + +### A Glance Back at BASTA! Mainz 2023 + + + + + +We just came back from the[ BASTA! Conference 2023](https://basta.net/), which is an incredible .NET event with over 600 in-person attendees and an additional 200+ tuning in virtually from across the globe. The buzz of excitement and anticipation in the air was undeniable, setting the stage for an unforgettable event for [ABP.IO](https://abp.io/). + + + +![53227564247\_b7acafea68\_c.jpg](3a0e074506bcc60cad473655b6fd5da6.jpg) + + + +![53227631612\_eb38958391\_c.jpg](3a0e074555e8d6f62bc3d47c00f86762.jpg) + + + +![53227631792\_a6d87b4abf\_k.jpg](3a0e0745b6418472a66d905053d492e6.jpg) + + + +As one of the proud sponsors, we set up our booth, engaged with attendees, and delved into a wide range of sessions, workshops, and keynotes to absorb the latest software development trends. + + + +### Engaging with Enthusiastic Minds + + + + + +As the lead developers of ABP Core Team, *[Alper](https://twitter.com/alperebicoglu)* and *[Ismail](https://twitter.com/ismcagdas)* presented the ABP.IO platform modules and features were quite busy enjoying their presenting work with latest version of demos. Alper also gave a great speech on “Building Multi-tenant ASP.NET Core Application & the ABP Framework” at the BASTA! Mainz conference. + + + +![53229004005\_3312b6bfa2\_k.jpg](3a0e074625fddc3097efdc1bef3058d8.jpg) + + + +![20230926\_170335.jpg](3a0e074675731c4a59167a878d4cd04e.jpg) + + + +We introduced **[ABP Framework](https://abp.io/)**, community-driven open-source web application framework, and **[ABP Commercial](https://commercial.abp.io/)**, our enterprise-ready web development platform that is built on top of the open-source ABP Framework to the crowds. + + + +![53227632222\_0a5af1fcc1\_k.jpg](3a0e074703a63129e5713ff51653aaac.jpg) + + + +![53228506206\_24e22498fa\_o.jpg](3a0e07477e980a4c2104300557e8f7fb.jpg) + + + +![53228505931\_b2aea761f9\_k.jpg](3a0e0747c283919bbc5edfdc289db1d8.jpg) + + + +Apart from that, we were thrilled to give away the **[ABP Commercial Licenses](https://commercial.abp.io/pricing)** to the eager attendees on the venue, including the Raffle prize, **Meta Quest 2**, on our last day in BASTA! Conference. + + + +![截屏2023-10-03 11.06.01.png](3a0e0748c8752dfdc2bcb5b9b2ce5908.png) + + + +We are profoundly satisfied with the huge interest and engagement shown by the attendees. The sense of community, collaboration, and shared passion for .NET solutions was palpable throughout the event. + + + +![20230927\_171046.jpg](3a0e07495efa58bb9f1e523d982dbc65.jpg) + + + +![20230928\_150135.jpg](3a0e0749c23a9e3b06d66ed54bed0c7a.jpg) + + + +![20230928\_150533 20.57.50.jpg](3a0e074a268272e630d8422ace32b4c8.jpg) + + + +### A Great Partnership with LIS GmbH + + + + + +![3a0e074aa3857a696cb941edc46dcb52](https://github.com/user-attachments/assets/ea0f6d32-e49b-4573-997f-9751ef16b303) + + + + +At BASTA! Mainz 2023, we were particularly thrilled to celebrate our collaboration with ***LIS GmbH***, a leading software solutions provider. This partnership added a unique dimension to the conference, brought us a fresh perspective to the conference, fostering innovation and opening up new avenues for attendees. + + + +### A Big Thank-You from ABP Team + + + + + +![53228503821\_27860119d9\_k.jpg](3a0e074b0a46662cf39a6796d0f23086.jpg) + + + +Now, a shout-out to BASTA! Mainz 2023. We want to thank to everyone who contributed to the success of this event – attendees, speakers, sponsors, and partners.The conference may have ended, but the knowledge gained, connections formed, and inspiration ignited will continue to shape the tech landscape for years to come. + + + +Until next time! diff --git a/docs/en/Community-Articles/2023-10-11-abpio-platform-74-final-has-been-released/3a0e2f9e8d77cf9c6d53415c46dba4a2.png b/docs/en/Community-Articles/2023-10-11-abpio-platform-74-final-has-been-released/3a0e2f9e8d77cf9c6d53415c46dba4a2.png new file mode 100644 index 0000000000..a84abea379 Binary files /dev/null and b/docs/en/Community-Articles/2023-10-11-abpio-platform-74-final-has-been-released/3a0e2f9e8d77cf9c6d53415c46dba4a2.png differ diff --git a/docs/en/Community-Articles/2023-10-11-abpio-platform-74-final-has-been-released/post.md b/docs/en/Community-Articles/2023-10-11-abpio-platform-74-final-has-been-released/post.md new file mode 100644 index 0000000000..90f89200fb --- /dev/null +++ b/docs/en/Community-Articles/2023-10-11-abpio-platform-74-final-has-been-released/post.md @@ -0,0 +1,79 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.4 versions have been released today. + +## What's New With Version 7.4? + +All the new features were already explained in detail in the [7.4 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7-4-RC-Has-Been-Published), so no need to go over them again. Check it out for more details. + +## Getting Started with 7.4 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 7.4 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First of all, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.3: + +* [ABP Framework 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/abp/7.4/Migration-Guides/Abp-7_4) +* [ABP Commercial 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/commercial/7.4/migration-guides/v7_4) + +## Community News + +### ABP Community Talks 2023.7: Build Your Content Management System with .NET + +We as the ABP team organized the [**ABP Community Talks 2023.7: Build Your Content Management System with .NET**](https://community.abp.io/events/build-your-own-cms-with-.net-a-first-look-at-abps-content-management-system-kit-3nfvm9ix) event to explore the depths of the CMS Kit Module and its real-world applications. The talk delved into the intricacies of the CMS Kit Module, providing valuable insights into its features and functionalities. Attendees had the opportunity to witness the module in action through live demonstrations and interactive Q&A sessions. + +For those who missed the live session, you can catch up on all the enriching discussions and demonstrations by watching the record below 👇: + + + +### BASTA! Mainz 2023 + +![basta-mainz.png](3a0e2f9e8d77cf9c6d53415c46dba4a2.png) + +BASTA! Mainz 2023 has wrapped up, and what an extraordinary journey it has been! We have shared our impressions, highlights, and the incredible impact it had on the tech community in Germany and beyond in a blog post, which you can find at [https://blog.abp.io/abp/BASTA-Mainz-2023-What-a-Blast-in-Germany](https://blog.abp.io/abp/BASTA-Mainz-2023-What-a-Blast-in-Germany). + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Moving Background Job Execution To A Separate Application](https://community.abp.io/posts/moving-background-job-execution-to-a-separate-application-my9cgo9a) by [liangshiwei](https://github.com/realLiangshiwei). +* [Cascading Option Loading with Extensions System in ABP Angular](https://community.abp.io/posts/cascading-option-loading-with-extensions-system-in-abp-angular-gcxgp0v9) by [Masum Ulu](https://twitter.com/masumulu). +* [How to use domain-based tenant resolver in ABP with Angular and OpenIddict](https://community.abp.io/posts/how-to-use-domainbased-tenant-resolver-in-abp-with-angular-and-openiddict-v9y8da7v) by [Mahmut Gündoğdu](https://twitter.com/MahmutGundogdu). + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 8.0. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md index 9142a36be9..9586b51cf5 100644 --- a/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md +++ b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md @@ -2,6 +2,12 @@ In this article, I'll show you the new built-in metrics of .NET 8, which are basically numerical measurements reported over time in your application and can be used to monitor the health of your application and generate reports according to those numerical values. We will see what the metrics are, why to use them, and how to use them in detail. So, let's dive in. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## What are Metrics? Metrics are numerical measurements reported over time. These measurements are crucial for monitoring the health of an application and generating alerts when necessary. In the context of a web service, various metrics can be tracked, such as: @@ -185,6 +191,12 @@ If you want to build a dashboard, you can see [this documentation from Microsoft Also, you can check [this video](https://www.youtube.com/watch?v=A2pKhNQoQUU) if you want to see it in action. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Conclusion In this article, I've shown you the new built-in metrics of .NET8, described what metrics are, which pre-built metrics are provided by ASP.NET Core, how to use & view these pre-built metrics and finally, I have shown you how to create custom metrics and view them in a dashboard. If you want to learn more about the **Metrics System of .NET**, you can check out the references that I have shared below. diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md index c1c38d7818..5c1b03701e 100644 --- a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md +++ b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md @@ -1,8 +1,5 @@ # Blazor's History and Full-stack Web UI -![Cover Image](cover-image.png) - - Blazor is a web framework that allows developers to build interactive web applications using .NET instead of JavaScript. The first version of Blazor was released on May 14, 2020. Since its initial release, Blazor has evolved with the new versions. Until now, six different versions have been declared. Sometimes, it can be not very clear to see the differences between these approaches. First, let's try to understand these. * **Blazor-Server**: >> *Loads fast at first* >> In this version, heavy things are done in the server. Browsers are thin clients and download a small page for the first load. The page updates are done via SignalR connection. This was released with .NET Core 3. diff --git a/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md b/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md index c0bf748876..c247f1e3e9 100644 --- a/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md +++ b/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md @@ -4,6 +4,12 @@ A new .NET version was released on November 14, 2023 and ABP 8.0 RC.1 shipped ba Despite all the related dependency upgrades and changes made on the ABP Framework and ABP Commercial sides, we still need to make some changes. Let's see the required actions that need to be taken in the following sections. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Installing the .NET 8.0 SDK To get started with ASP.NET Core in .NET 8.0, you need to install the .NET 8 SDK. You can install it at [https://dotnet.microsoft.com/en-us/download/dotnet/8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0). @@ -52,7 +58,7 @@ For example, you can update the ASP.NET Core image as follows: ```diff - FROM mcr.microsoft.com/dotnet/aspnet:7.0-bullseye-slim AS base -+ FROM mcr.microsoft.com/dotnet/aspnet:8.0 ++ FROM mcr.microsoft.com/dotnet/aspnet:9.0 ``` You can check the related images from Docker Hub and update them accordingly: @@ -99,3 +105,9 @@ After that, you need to check the migration guide documents, listed below: That's it! These were all the related steps that need to be taken to upgrade your application to .NET 8 and ABP 8.0. Now, you can enjoy the .NET 8 & ABP 8.0 and benefit from the performance improvements and new features. Happy Coding 🤗 + +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e83be956add9b4719eed77e22e4.png b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e83be956add9b4719eed77e22e4.png new file mode 100644 index 0000000000..d58c0c52a9 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e83be956add9b4719eed77e22e4.png differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e83e5fafb8221fae02a69433781.png b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e83e5fafb8221fae02a69433781.png new file mode 100644 index 0000000000..c774e78671 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e83e5fafb8221fae02a69433781.png differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e841f0e8a850191acdbb32b54eb.png b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e841f0e8a850191acdbb32b54eb.png new file mode 100644 index 0000000000..ba1d5f5a97 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e841f0e8a850191acdbb32b54eb.png differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e85960459e2e5d4f60737eabfe6.png b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e85960459e2e5d4f60737eabfe6.png new file mode 100644 index 0000000000..d5c3b4d68a Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e85960459e2e5d4f60737eabfe6.png differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e8a3e0bb1981553fa4ae2698d56.png b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e8a3e0bb1981553fa4ae2698d56.png new file mode 100644 index 0000000000..e8e44f42bb Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f0e8a3e0bb1981553fa4ae2698d56.png differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f2c0ca1a84f21abe964e9f4e0fbac.png b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f2c0ca1a84f21abe964e9f4e0fbac.png new file mode 100644 index 0000000000..d64eb052fa Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/3a0f2c0ca1a84f21abe964e9f4e0fbac.png differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/identity-users.gif b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/identity-users.gif new file mode 100644 index 0000000000..92dad96550 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/identity-users.gif differ diff --git a/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/post.md b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/post.md new file mode 100644 index 0000000000..2e6bfe8202 --- /dev/null +++ b/docs/en/Community-Articles/2023-11-23-abpio-platform-80-rc-has-been-published/post.md @@ -0,0 +1,224 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **8.0 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 v8.0! Thanks to all of you. + +## Get Started with the 8.0 RC + +Follow the steps below to try version 8.0.0 RC today: + +1) **Upgrade** the ABP CLI to version `8.0.0-rc.3` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 8.0.0-rc.3 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 8.0.0-rc.3 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 8.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.x or earlier: + +* [ABP Framework 7.x to 8.0 Migration Guide](https://docs.abp.io/en/abp/8.0/Migration-Guides/Abp-8_0) +* [ABP Commercial 7.x to 8.0 Migration Guide](https://docs.abp.io/en/commercial/8.0/migration-guides/v8_0) + +## What's New with ABP Framework 8.0? + +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 .NET 8.0 +* Upgraded to Angular 17 +* Dynamic Claims +* CDN Support for Bundling & Minification System +* Read-Only Repositories +* Account Module: Set Username After Social/External Login +* Other News... + +### Upgraded to .NET 8.0 + +We've upgraded the ABP Framework to .NET 8.0, so you need to move your solutions to .NET 8.0 if you want to use ABP 8.0. You can check [Microsoft’s Migrate from ASP.NET Core 7.0 to 8.0 documentation](https://learn.microsoft.com/en-us/aspnet/core/migration/70-80), to see how to update an existing ASP.NET Core 7.0 project to ASP.NET Core 8.0. + +### Upgraded to Angular 17 + +Angular 17 [was released on November 8](https://blog.angular.io/introducing-angular-v17-4d7033312e4b) and ABP Framework & ABP Commercial startup templates were immediately migrated to **Angular 17**! + +So, when you create a new solution with the Angular UI, you will take advantage of the new Angular with the new cutting-edge features and enhancements right from the start! + +### Dynamic Claims + +The **Dynamic Claims** feature is used to dynamically generate claims for the user in each request. It's used to automatically and dynamically override the configured claim values in the client's authentication token/cookie by the latest user claims. + +In the prior versions, whenever a user changed their email address or confirmed their own email address, or any other information related to the user (and if it's in the claims), he/she would need to logout and then login to refresh its claims. The new **Dynamic Claims** feature overcomes this problem and allows to **always get the latest user claims**. + +This feature is disabled by default and you can enable it easily for your existing MVC applications by following the [Dynamic Claims documentation](https://docs.abp.io/en/abp/8.0/Dynamic-Claims). For the other UI options (Angular & Blazor UIs), you don't need to enable this feature, since they obtain claims ftom a configuration endpoint. + +> **Note**: Beginning from the v8.0, all the startup templates are pre-configured and the **Dynamic Claims** feature is enabled by default. + +### CDN Support for Bundling & Minification System + +In this version, ABP Framework's [Bundling & Minification System](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Bundling-Minification) provides CDN support for MVC / Razor Pages UI. The bundling system automatically recognizes the external/CDN files and places them as link/script tags on the page along with the bundled CSS/JSS files. + +> Read the documentation for more info: https://docs.abp.io/en/abp/8.0/UI/AspNetCore/Bundling-Minification + +### Read-Only Repositories + +ABP Framework provides read-only repository interfaces (`IReadOnlyRepository<>` or `IReadOnlyBasicRepository<>`) to explicitly indicate that your purpose is to query data, but not change it. It uses [EF Core's No-Tracking Feature](https://learn.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries) behind the scenes, which means the entities returned from the repository will not be tracked by the EF Core's [change tracker](https://learn.microsoft.com/en-us/ef/core/change-tracking/) and thanks to that you get significant performance gains. + +```csharp +public class MyService +{ + private readonly IReadOnlyRepository _bookRepository; + + public async Task MyMethod() + { + var books = await _bookRepository.GetListAsync(); //change tracking not involved + + //... + } +} +``` + +> In addition to the read-only repository interfaces, ABP Framework introduces the `IRepository.DisableTracking()` and `IRepository.EnableTracking()` extension methods to allow developers to disable/enable entity tracking by these methods manually. If you don't want to use the read-only repositories, you can use these methods to enable or disable the change tracker controlled. Read the documentation to learn more: [https://docs.abp.io/en/abp/8.0/Repositories#enabling-disabling-the-change-tracking](https://docs.abp.io/en/abp/8.0/Repositories#enabling-disabling-the-change-tracking) + +### Account Module: Set Username After Social/External Login + +Prior to this version, when you registered with your social accounts for the first time, your email address was becoming your username and it was shown everywhere in the application. Therefore, you would need to update your username later on and this is not a good user experience. + +Thus, in this version, we have enhanced this flow, and now, when you register as an external user for the first time, a username and email address are shown you in a form for you to revise and update if you want, before logging into the application. Thanks to that, after the social registration you would not need to update your username and email address. This is also good at the point of GDPR regulations because your email address will not be shown as a username and will not exposed. + +![account-module-register.png](3a0f0e83be956add9b4719eed77e22e4.png) + +### Other News + +* LDAP over SSL (LDAPS) setting has been added and recommended to establish a secure connection. See [#17865](https://github.com/abpframework/abp/pull/17865) for more information. +* Object Mapping Enhancements (supports mapping collection of objects for custom object mappers). +* Email Sending Improvements (sending attachments with `IEmailSender.QueueAsync()` method). +* Made improvements on NuGet.Config files (by using [packageSourceMapping](https://learn.microsoft.com/en-us/nuget/consume-packages/package-source-mapping)) that came with startup templates and this reduced the restore time of the projects in your solution: + +![nuget.png](3a0f2c0ca1a84f21abe964e9f4e0fbac.png) + +## What's New with ABP Commercial 8.0? + +We've also worked on ABP Commercial to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 8.0. + +### Suite: Generating Master/Detail Relationship + +In this version, we have introduced the **Master/Detail Relationship** support in Suite. The Master-Detail (or Master-Child) relationship refers to a hierarchical connection between two entities, where one entity (the master or parent entity) influences or controls the behavior or properties of another element (the child entity) relationship. The relationship between **Order - Order Lines** can be considered as an example of a master-detail relationship. + +![suite-master-child-datagrid.png](3a0f0e83e5fafb8221fae02a69433781.png) + +ABP Suite allows you to create a master-detail relationship with a few clicks. It generates the necessary code for the master and detail tables, including the foreign key relationship between the two tables. + +To establish a master-detail relationship, you need to apply the following two steps: + +1. Create the master entity, +2. Create a child entity and associate it with a master entity. + +That's it! ABP Suite will be generating the entities, making the related configurations, establishing database relations (including the foreign key relationship), generating the UI for the master entity (with child-grids for child entities), and so on... + +It’s already documented and you can read the documentation at [https://docs.abp.io/en/commercial/8.0/abp-suite/creating-master-detail-relationship](https://docs.abp.io/en/commercial/8.0/abp-suite/creating-master-detail-relationship). + +#### Known Issues + +* (For v8.0-rc.1 and v8.0.rc.2, it's fixed with v8.0-rc.3) After you generate CRUD pages via Suite for the Angular UI, you should start the backend project and run the `abp generate-proxy -t ng` command in the root directory of the Angular application manually. It will be automatically done with the next version, so you will not need to run the command manually in further versions. + +### Get Profile Picture From Social/External Logins + +A user's profile picture would be blank when they first register for an application using a social account through an external authentication provider like Google or Facebook because it hasn't been configured yet. The user must update their profile photo after logging into the application. + + +In order to save the user from having to change their profile picture after logging in for the first time, we have improved this behavior in this version and are now attempting to retrieve the user's profile picture from external authentication providers (like Google) and set it as their profile picture. Later on, if desired, he or she might modify the profile image. + +### Switch Ocelot to YARP for the API Gateway + +Until this version, ABP Commercial was using the [Ocelot](https://github.com/ThreeMammals/Ocelot) for the API Gateway, in the [Microservice Startup Template](https://docs.abp.io/en/commercial/latest/startup-templates/microservice/index). Since the **Ocelot** library is not actively maintained, we have searched for an alternative and decided to switch from Ocelot to [YARP](https://github.com/microsoft/reverse-proxy) for the API Gateway. YARP is maintained by Microsoft and is actively being developed and seems a better alternative than Ocelot and provides the same feature stack and even more. + +You can read the [Migrating to YARP](https://docs.abp.io/en/commercial/8.0/migration-guides/migrating-to-yarp) documentation for migrating your existing microservice application's API Gateway from [Ocelot](https://github.com/ThreeMammals/Ocelot) to [YARP](https://github.com/microsoft/reverse-proxy). + +> We have made the all related changes in the Microservice Startup Template, and also updated the documentation, which you can read [here](https://docs.abp.io/en/commercial/8.0/startup-templates/microservice/gateways). + +### Password Complexity Indicators (MVC & Blazor UIs) + +In v7.4, we have introduced the [Password Complexity Indicators for Angular UI](https://docs.abp.io/en/commercial/7.4/ui/angular/password-complexity-indicator-component) and with this version, we have implemented it for the MVC & Blazor UIs as well. You can use this feature to dynamically evaluate and rate the strength of user-generated passwords, providing real-time feedback to users as they create or update their passwords. + +![password-complexity-indicators.png](3a0f0e841f0e8a850191acdbb32b54eb.png) + +### Read-Only View for Users Page + +In your application, you may want to grant permission to a specific group or people to read-only view the users of your application to be able to do some actions. For example, you may want to marketing team to see the users to organize campaigns for the customers, or make controls. In this case, you can grant default permissions for these groups, however, they could not see the details of a user, because in the current design, if the edit permission is not granted you can't see the detailed info for a user. + +![](identity-users.gif) + +In this version, we have added the read-only view action to the user's page. This allows you to only grant the default view permission to the specific users and allow them to view user information as read-only and not allow them to change or modify it. + +### Export & Import Users as Excel / CSV + +With v8.0, now it's possible to import and export user records in Excel and CSV formats. You can import external users, or import users from Excel or CSV files and also you can export users to Excel or CSV files: + +![users-page.png](3a0f0e85960459e2e5d4f60737eabfe6.png) + +## Community News + +### Highlights from .NET 8.0 + +Our team has closely followed the ASP.NET Core and Entity Framework Core 8.0 releases, read Microsoft's guides and documentation, and adapted the changes to our ABP.IO Platform. We are proud to say that we've shipped the ABP 8.0 RC.1 based on .NET 8.0 just after Microsoft's .NET 8.0 release. + +In addition to the ABP's .NET 8.0 upgrade, our team has created 13 great articles to highlight the important features coming with ASP.NET Core 8.0 and Entity Framework Core 8.0. + +> You can read [this post](https://volosoft.com/blog/Highlights-for-ASP-NET-Entity-Framework-Core-NET-8-0) to see the list of all articles. + +### New ABP Community Articles + +In addition to [the 13 articles to highlight .NET 8.0 features written by our team](https://volosoft.com/blog/Highlights-for-ASP-NET-Entity-Framework-Core-NET-8-0), here are some of the recent posts added to the [ABP Community](https://community.abp.io/): + +* [Upgrade Your Existing Projects to .NET 8 & ABP 8.0](https://community.abp.io/posts/upgrade-your-existing-projects-to-.net-8-abp-8.0-x0n7hiqr) by [Engincan Veske](https://github.com/EngincanV) +* [How to Upload and Download Files in the ABP Framework using Angular](https://community.abp.io/posts/how-to-upload-and-download-files-in-the-abp-framework-using-angular-que8cdr8) by [Mahmut Gündoğdu](https://github.com/mahmut-gundogdu) +* New **ABP Framework Essentials** Videos by [Hamza Albreem](https://github.com/braim23): + * [ABP Essentials - Interception](https://community.abp.io/videos/abp-essentials-interception-ath78xhw) + * [ABP Essentials - Virtual File System](https://community.abp.io/videos/abp-essentials-virtual-file-system-hpgr2j72) + * [ABP Framework Essentials - Localization](https://community.abp.io/videos/abp-framework-essentials-localization-7taieh68) + * [ABP Framework Essentials - Dependency Injection](https://community.abp.io/videos/abp-framework-essentials-dependency-injection-q241mfrf) + * See the playlist for other videos of this series: https://www.youtube.com/playlist?list=PLsNclT2aHJcNupH2wz83y7htugpLoUZ_B + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +### We were in the .NET Conf 2023 + +Microsoft has released .NET 8.0 and celebrated it with a 3-day international online conference. The core team members of ABP Framework, [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) and [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) gave speeches at the .NET Conf 2023. + +[Alper Ebiçoğlu](https://twitter.com/alperebicoglu)'s topic was "Building Multi-Tenant ASP.NET Core Applications and ABP Framework" and in this talk, he talked about what's SaaS development, what are its pros and challenges and multi-tenant development with the open-source ABP Framework: + + + +On the other hand, [Enis Necipoğlu](https://twitter.com/EnisNecipoglu)'s topic was "Reactive programming with .NET MAUI" and he talked about applying reactive programming in .NET MAUI with MVVM and ReactiveUI: + + + +### ABP Community Talks 2023.8: What’s coming with .NET 8.0 & ABP v8.0 + +![community-talk-2023-8.png](3a0f0e8a3e0bb1981553fa4ae2698d56.png) + +In this episode of ABP Community Talks, 2023.8; [Steve Sanderson](https://twitter.com/stevensanderson) will be our guest speaker and we'll talk about .NET 8.0 and ABP 8.0 with the ABP Core Team. We will dive into the features that came with .NET 8.0, how they are implemented in ABP 8.0, and the highlights in the .NET Conf 2023 with [Halil İbrahim Kalkan](https://github.com/hikalkan), [Alper Ebicoglu](https://github.com/ebicoglu), [Engincan Veske](https://github.com/EngincanV), [Berkan Sasmaz](https://github.com/berkansasmaz) and [Bige Besikci Yaman](https://github.com/bigebesikci). + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/8.0/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.0 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e08dc3131b22f8e8cdb714f2ef4.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e08dc3131b22f8e8cdb714f2ef4.jpeg new file mode 100644 index 0000000000..9a417e288e Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e08dc3131b22f8e8cdb714f2ef4.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e08f5f98360ad38c8dc2b96c5a9.jpg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e08f5f98360ad38c8dc2b96c5a9.jpg new file mode 100644 index 0000000000..8dd2d3d6d6 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e08f5f98360ad38c8dc2b96c5a9.jpg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e090fd29b0f78520367930777fa.jpg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e090fd29b0f78520367930777fa.jpg new file mode 100644 index 0000000000..88ac4647f7 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e090fd29b0f78520367930777fa.jpg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0923b0f7d003a0ff46e6ad9da4.jpg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0923b0f7d003a0ff46e6ad9da4.jpg new file mode 100644 index 0000000000..3255703956 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0923b0f7d003a0ff46e6ad9da4.jpg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e097cb0a3425b5268f32c730ff5.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e097cb0a3425b5268f32c730ff5.jpeg new file mode 100644 index 0000000000..a24bf3cfd5 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e097cb0a3425b5268f32c730ff5.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e098c741838d700e4fd5982d9af.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e098c741838d700e4fd5982d9af.jpeg new file mode 100644 index 0000000000..71e266bbca Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e098c741838d700e4fd5982d9af.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09ab67925b359e1ef210f37742.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09ab67925b359e1ef210f37742.jpeg new file mode 100644 index 0000000000..81fd1c716b Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09ab67925b359e1ef210f37742.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09b9a1b5380afcafec58f75df2.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09b9a1b5380afcafec58f75df2.jpeg new file mode 100644 index 0000000000..1394d57bb1 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09b9a1b5380afcafec58f75df2.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09def79c37f4280478fe3b870a.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09def79c37f4280478fe3b870a.jpeg new file mode 100644 index 0000000000..dcab0bdb92 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09def79c37f4280478fe3b870a.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09f09cf1d44f136068714a71fa.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09f09cf1d44f136068714a71fa.jpeg new file mode 100644 index 0000000000..7e6b6d5b3c Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e09f09cf1d44f136068714a71fa.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a19860cefa46476eb171b5e08.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a19860cefa46476eb171b5e08.jpeg new file mode 100644 index 0000000000..711a117c9d Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a19860cefa46476eb171b5e08.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a2e23f7395ab84f7ca206b4ee.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a2e23f7395ab84f7ca206b4ee.jpeg new file mode 100644 index 0000000000..e29ed6de89 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a2e23f7395ab84f7ca206b4ee.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a3c8271fa658eb4fd1e3d2fd0.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a3c8271fa658eb4fd1e3d2fd0.jpeg new file mode 100644 index 0000000000..76305b4579 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a3c8271fa658eb4fd1e3d2fd0.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a49bb67213ac3bfc49a23e355.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a49bb67213ac3bfc49a23e355.jpeg new file mode 100644 index 0000000000..c704702d13 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0a49bb67213ac3bfc49a23e355.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0ac3b558e62dd95cd5c9e9ec80.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0ac3b558e62dd95cd5c9e9ec80.jpeg new file mode 100644 index 0000000000..37e5686783 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0ac3b558e62dd95cd5c9e9ec80.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0ad416925db11783b31331826c.jpeg b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0ad416925db11783b31331826c.jpeg new file mode 100644 index 0000000000..e656b59362 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/3a0f8e0ad416925db11783b31331826c.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/post.md b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/post.md new file mode 100644 index 0000000000..def5bcc18d --- /dev/null +++ b/docs/en/Community-Articles/2023-12-18-abp-at-china-net-conf-2023/post.md @@ -0,0 +1,41 @@ +### .NET Conf China 2023 + +China's most influential .NET event officially kicked off on December 16, 2023. Although a heavy snowfall a few days ago impacted traffic, It did not stop the enthusiastic developers. + + The conference has invited 30+ technical experts from various fields to share the new features of .NET 8, full-stack Blazor, AI and .NET MAUI and other trend-setting technology highlights, focusing on the theme of Intelligent · Open Source · Security. In-depth discussion of artificial Intelligence, web development, front-end & security and other hot technical topics, and more .NET technical experts shared their valuable practical experience over the past year. + +![1.jpeg](3a0f8e08dc3131b22f8e8cdb714f2ef4.jpeg) +![2.jpg](3a0f8e08f5f98360ad38c8dc2b96c5a9.jpg) +![3.jpg](3a0f8e090fd29b0f78520367930777fa.jpg) +![4.jpg](3a0f8e0923b0f7d003a0ff46e6ad9da4.jpg) + +### As one of the community partners of .NET Conf China 2023 + +Our ABP.IO China team arrived at the venue much earlier than it started and was carefully prepared to welcome the developers. + +At the event, we showed developers the latest news and related updates on ABP.IO. We also held face-to-face interactive conversations with multiple developers, including senior ABP developers, framework fans and ABP Commercial customers. We listened to everyone's feedback and discussed how to make ABP.IO better serve developers. + +![10.jpeg](3a0f8e097cb0a3425b5268f32c730ff5.jpeg) +![11.jpeg](3a0f8e098c741838d700e4fd5982d9af.jpeg) +![12.jpeg](3a0f8e09ab67925b359e1ef210f37742.jpeg) +![13.jpeg](3a0f8e09b9a1b5380afcafec58f75df2.jpeg) +![14.jpeg](3a0f8e09def79c37f4280478fe3b870a.jpeg) +![15.jpeg](3a0f8e09f09cf1d44f136068714a71fa.jpeg) + +### As always, we have a raffle. + +Including ABP Commercial's TEAM and PERSONAL licenses, [Halil İbrahim Kalkan](https://halilibrahimkalkan.com/)'s latest book **Mastering ABP Framework**, the ABP community's popular **Implementing Domain Driven Design** book, Bluetooth headset and other ABP peripheral brochures, stickers... + +![19.jpeg](3a0f8e0a19860cefa46476eb171b5e08.jpeg) +![16.jpeg](3a0f8e0a2e23f7395ab84f7ca206b4ee.jpeg) +![17.jpeg](3a0f8e0a3c8271fa658eb4fd1e3d2fd0.jpeg) +![18.jpeg](3a0f8e0a49bb67213ac3bfc49a23e355.jpeg) + +### Through this event, + +We gained a lot and felt the enthusiasm and support of the developers community for ABP.IO. We will continue to work hard to provide better services for developers and contribute to the development of ABP.IO. + +### See you at the next community event! + +![20.jpeg](3a0f8e0ad416925db11783b31331826c.jpeg) +![21.jpeg](3a0f8e0ac3b558e62dd95cd5c9e9ec80.jpeg) \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-12-20-abp-commercial-won-5-recognitions-from-gartner-in-2023/post.md b/docs/en/Community-Articles/2023-12-20-abp-commercial-won-5-recognitions-from-gartner-in-2023/post.md new file mode 100644 index 0000000000..6b8042d376 --- /dev/null +++ b/docs/en/Community-Articles/2023-12-20-abp-commercial-won-5-recognitions-from-gartner-in-2023/post.md @@ -0,0 +1,90 @@ +2023 was the year for ABP.IO to strive with the community. First of all, we'd like to express our appreciation for all your interest and say we are genuinely thankful to you for being with us this year. +As an important part of the community, ABP.IO Core Team worked hard to give the ABP Community the best possible service and it was delivered and appreciated by the users which got us to receive these awards. +On top of last years' [Software Advice's Front Runner of Application Development in 2022](https://blog.abp.io/abp/abpcommercial-2022-front-runner-in-app-development-category) and [GetApp's Application Development Category Leader in 2022](https://blog.abp.io/abp/abpcommercial-2022-category-leader-in-app-development-category), we won **5 awards** this year from Gartner! + +For those of you don't know what [Gartner](https://www.gartner.com/en) is, it is a research and consultant company for IT industry, one of the biggest companies in their area. You might have heard Magic Quadrant, Capterra, GetApp, etc. Those are all Gartner's works. + +In 2023, according to their benchmarking criterias on Capterra, GetApp and Software Advice; ABP Commercial won 5 awards in both Application Development and App Building categories! You can find the whole list divided by the titles below. +These awards are given to those product that are most likely to help businesses the best products for their enhancement needs according to users' objective rankings in different areas like customer satisfaction, ease of use, functionality, etc. That's why we are thankful for our team members' hard work and ABP Community's support! + +To show our appreciation, we generated a set of links that rewards your review for ABP Commercial product in your local Amazon Store! + +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/07a1ac5a-4658-4552-a87d-5f4e1089fee9?lang=en)**[get $10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/07a1ac5a-4658-4552-a87d-5f4e1089fee9?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/30b5d7f2-d0c5-4b38-b968-2dc5601aa196?lang=en)**[get £10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/30b5d7f2-d0c5-4b38-b968-2dc5601aa196?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/8fd7b0e8-e4e1-487a-96d6-88f70c14128c?lang=en)**[get €10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/8fd7b0e8-e4e1-487a-96d6-88f70c14128c?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/f6ee291b-f48f-4821-ac3a-606b7e6af005?lang=en)**[get 1500.0¥](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/f6ee291b-f48f-4821-ac3a-606b7e6af005?lang=en)** + +# GetApp Category Leader + +GetApp's Category Leader ranks top software products based on end-user ratings in five key areas(ease of use, value for money, functionality, customer support, and likelihood to recommend). The scores are derived from user reviews, public data, and vendor information, normalized for recency and volume, and then scaled to a maximum of 20 points per dimension, culminating in a total maximum score of 100. + +[ABP Commercial on GetApp](https://www.getapp.com/development-tools-software/a/abp-commercial/reviews/) is in 2 categories, App Building and Application Development; and was the 2023 Category Leader in both of them! + +## ABP Commercial as 2023 App Building Category Leader + +This year was the first time of ABP Commercial on GetApp to win this award in App Building Category. In App Building Category, GetApp examined 199 products and selected ABP Commercial as one of the [2023 Category Leaders of App Building](https://www.getapp.com/development-tools-software/application-builder/category-leaders/) and selected in the 8th row out of 15 top-ranking products. + +Here is how ABP Commercial ranked in the 5 categories of GetApp when selecting the App Building Category's Leaders: + +* Ease of Use: **16 out of 20** +* Value for Money: **16 out of 20** +* Functionality: **17 out of 20** +* Customer Support: **17 out of 20** +* Likelihood to Recommend: **16 out of 20** + In total: **83 out of 100** + +## ABP Commercial as 2023 Application Development Category Leader + +This year, it was the second year in a row [ABP Commercial won the Category Leader of Application Development](https://www.getapp.com/development-tools-software/application-development/category-leaders/). In Application Development Category, in 2023, the number of products GetApp examined went up to 436 whereas it was 368 in 2022. ABP Commercial's row in these products went down to 14th row in the 15 top-ranking products whereas it was 8th the previous year. + +Here is how ABP Commercial ranked in the 5 categories of GetApp when selecting the Application Development Category's Leaders: + +* Ease of Use: **16 out of 20** +* Value for Money: **15 out of 20** +* Functionality: **16 out of 20** +* Customer Support: **16 out of 20** +* Likelihood to Recommend: **15 out of 20** + In total: **82 out of 100** + +# Software Advice Front Runners + +Software Advice's FrontRunners are selected by evaluating the software products using objective user reviews to score them on Usability and Customer Satisfaction. These scores are based on data from user reviews, public sources, and vendor information. The Usability score combines user ratings on functionality(50%) and ease-of-use(50%). Customer Satisfaction is assessed through value for money(25%), likelihood to recommend(25%), and customer support ratings(50%). All ratings are converted to a standard 5-point scale, normalized for recency and volume, and then scaled up to 100. Products that meet a minimum score threshold on both axes, with a cap on the number of FrontRunners to ensure only the top 10 to 25 products per category are included, and no product scoring below 60 in either dimension is featured. The final FrontRunners graphic positions products based on their scores in these two key dimensions. + +In 2023, ABP Commercial won 2 awards in both categories it exists; App Building and Application Development Categories' Front Runners according to the evaluation criterias mentioned above. Let's have a look at where ABP Commercial is located in the graphic of per categories. + +## ABP Commercial as 2023 Front Runner in App Building + +[ABP Commercial on Software Advice in App Building Category](https://www.softwareadvice.com/app-building/abp-commercial-profile/) is one of the Front Runners in App Building Category among 186 products evaluated in this category of Software Advice. +You can check out the full [App Building Category's Front Runners](https://www.softwareadvice.com/app-building/#frontrunners)' graphic below and locate ABP Commercial in it. + + + +## ABP Commercial as 2023 Front Runner in App Development Software + +[ABP Commercial on Software Advice in App Development Category](https://www.softwareadvice.com/app-development/abp-commercial-profile/) is one of the Front Runners in App Development Category among 390 products evaluated in this category of Software Advice. + +You can check out the full [App Development Category's Front Runners](https://www.softwareadvice.com/app-development/#frontrunners)' graphic below and locate ABP Commercial in it. + + + +# Capterra Shortlist + +Capterra evaluates top software products using a blend of user ratings and popularity including up to 25 products per category for their Shortlists. Those products are selected based on the user reviews and a proprietary scoring system that rates products on a scale of 1 to 50 in User Ratings and Popularity. The Shortlist is intended to offer a comprehensive view of products' recent popularity and ratings, aiding buyers in making informed decisions. + +2023 was the first year for ABP Commercial to win an award in Capterra and it was in App Building Software Category. + +## ABP Commercial as 2023 App Building Software Shortlist Products. + +[ABP Commercial on Capterra](https://www.capterra.com/app-building-software/shortlist/) is one of the App Building Software Shortlist in between 17 other highest-ranking products. Capterra's methodology for the 2023 App Building Software Shortlist involved analyzing 332 products, filtering out those lacking in functionality and user reviews, and then ranking the remaining software based on popularity and user ratings. +ABP Commercial got 49 out of 50, indicating exceptional user satisfaction, and a respectable popularity score of 19 out of 50, reflecting its solid web presence and search trend interest. + +You can access the full grid from [here](https://www.capterra.com/app-building-software/shortlist/). + +Thank you all ABP Community members for this recognition we got this year. We look forward to continuing to provide top-notch software and support to businesses everywhere! + +Don't forget to leave your review and redeem your code from Gartner to help us further, if you like to! + +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/07a1ac5a-4658-4552-a87d-5f4e1089fee9?lang=en)**[get $10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/07a1ac5a-4658-4552-a87d-5f4e1089fee9?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/30b5d7f2-d0c5-4b38-b968-2dc5601aa196?lang=en)**[get £10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/30b5d7f2-d0c5-4b38-b968-2dc5601aa196?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/8fd7b0e8-e4e1-487a-96d6-88f70c14128c?lang=en)**[get €10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/8fd7b0e8-e4e1-487a-96d6-88f70c14128c?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/f6ee291b-f48f-4821-ac3a-606b7e6af005?lang=en)**[get 1500.0¥](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/f6ee291b-f48f-4821-ac3a-606b7e6af005?lang=en)** \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/3a0f9f142d036581db5a7873c9daf529.jpeg b/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/3a0f9f142d036581db5a7873c9daf529.jpeg new file mode 100644 index 0000000000..a24bf3cfd5 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/3a0f9f142d036581db5a7873c9daf529.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/3a0f9f144d6126f5709ecb668aa69465.jpeg b/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/3a0f9f144d6126f5709ecb668aa69465.jpeg new file mode 100644 index 0000000000..42dc55846f Binary files /dev/null and b/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/3a0f9f144d6126f5709ecb668aa69465.jpeg differ diff --git a/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/post.md b/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/post.md new file mode 100644 index 0000000000..6711c43a21 --- /dev/null +++ b/docs/en/Community-Articles/2023-12-21-abpio-platform-80-has-been-released-based-on-net-80/post.md @@ -0,0 +1,82 @@ +Today, [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 8.0 versions have been released based on [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0). + +## What's New With Version 8.0? + +All the new features were explained in detail in the [8.0 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-0-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 8.0 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 8.0 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents if you are upgrading from v7.x or earlier: + +* [ABP Framework 7.x to 8.0 Migration Guide](https://docs.abp.io/en/abp/8.0/Migration-Guides/Abp-8_0) +* [ABP Commercial 7.x to 8.0 Migration Guide](https://docs.abp.io/en/commercial/8.0/migration-guides/v8_0) + +## Community News + +### We were at China .NET Conf 2023 + +China's most influential .NET event officially kicked off on December 16, 2023. The conference has invited 30+ technical experts from various fields to share the new features of .NET 8, full-stack Blazor, AI, .NET MAUI, and more... + +![abp-china-team.jpeg](3a0f9f142d036581db5a7873c9daf529.jpeg) + +As one of the community partners of .NET Conf China 2023, our ABP.IO China team was at the event. At the event, we showed developers the latest news and related updates on ABP.IO. + +Through this event, we gained a lot and felt the enthusiasm and support of the developers community for ABP.IO. If you want to learn more, we have shared our impressions and takeaways in a blog post, which you can find at [https://blog.abp.io/abp/ABP-at-China-NET-Conf-2023](https://blog.abp.io/abp/ABP-at-China-NET-Conf-2023). + +### ABP Commercial Won 5 Recognitions from Gartner + +![awards.jpeg](3a0f9f144d6126f5709ecb668aa69465.jpeg) + +2023 was the year for ABP.IO to strive with the community. On top of last year's [Software Advice's Front Runner of Application Development in 2022](https://blog.abp.io/abp/abpcommercial-2022-front-runner-in-app-development-category) and [GetApp's Application Development Category Leader in 2022](https://blog.abp.io/abp/abpcommercial-2022-category-leader-in-app-development-category), we won **5 awards** this year from **Gartner**! + +> If you are interested in these awards and want to learn more, you can check out our [blog post](https://blog.abp.io/abp/ABP-Commercial-Won-5-Recognitions-from-Gartner-in-2023)! + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community, as always. I will highlight some of them here: + +* [Performance Optimization of .NET-based application](https://community.abp.io/posts/performance-optimization-of-.netbased-and-also-abpbased-application-pmdwhwxc) by [Leon Košak](https://github.com/leonkosak) +* [Video: ABP Framework Consuming HTTP APIs from a .NET Client](https://community.abp.io/videos/abp-framework-consuming-http-apis-from-a-.net-client-uzul9og4) by [Hamza Albreem](https://github.com/braim23) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 8.1. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. diff --git a/docs/en/Community-Articles/2023-12-27-abpio-platform-2023-wrap-up/3a0fbeb0fa89d75154155e2c537e5ca9.png b/docs/en/Community-Articles/2023-12-27-abpio-platform-2023-wrap-up/3a0fbeb0fa89d75154155e2c537e5ca9.png new file mode 100644 index 0000000000..9b25b24617 Binary files /dev/null and b/docs/en/Community-Articles/2023-12-27-abpio-platform-2023-wrap-up/3a0fbeb0fa89d75154155e2c537e5ca9.png differ diff --git a/docs/en/Community-Articles/2023-12-27-abpio-platform-2023-wrap-up/post.md b/docs/en/Community-Articles/2023-12-27-abpio-platform-2023-wrap-up/post.md new file mode 100644 index 0000000000..1842cf2fe3 --- /dev/null +++ b/docs/en/Community-Articles/2023-12-27-abpio-platform-2023-wrap-up/post.md @@ -0,0 +1,104 @@ +ABP.IO is a comprehensive platform that includes the open-source ABP Framework based on ASP.NET Core and its commercial solution designed on the .NET ecosystem. ABP.IO's purpose is to provide a robust infrastructure for developers to create modern web applications efficiently. As ABP.IO Core Team, we came to this day and are excited for the upcoming days thanks to the ever expanding ABP Community members. + +We are grateful for ABP Community including the team members who put effort into making ABP what it is today and the community members for all their amazing support. On top of the achievements in 2022 we summed up in [ABP Year Review 2022 Wrap Up](https://blog.abp.io/abp/ABP-Year-Review-2022-Wrap-Up) blog post for 2022, we, as ABP, achieved even more great successes in 2023 with and thanks to all of you ABP Community members. This year, we remained transparent and committed to our values for trying to help the developers build their web applications efficiently with ABP Framework based on ASP.NET Core. + +We will look into ABP.IO Platform 2023 milestones and wrap the year up in this blog post. Before we hop on to the ABP's recap, we'd like to mention the major highlights in .NET ecosystem which is the **release of .NET 8**. In ABP, it's worth mentioning before all that 2023 was the year we celebrated the **10th Year of ABP** and the first year ever we organized a full conference-**ABP .NET Conf'23**! Let's have a look at them and more. + +![ABP.IO 2023 Wrap Up & Recap.png](3a0fbeb0fa89d75154155e2c537e5ca9.png) + +### Anniversary + +This year was a special year in which we celebrated the **10th Birthday of the ABP**! Looking back, a decade passed till the very first day of the ABP journey. Words are simply not nearly enough to describe our excitement and how surprised we are since it now feels like a blink aside from all the bitter and sweet moments of our journey. Take a look at the milestones we overcame with you and how the last decade went in [Celebrating ABP's DDD: A Decade Dedicated to Development](https://blog.abp.io/abp/Celebrating-ABP%2527s-DDD%253A-A-Decade-Dedicated-to-Development). We dedicated a full 3-day weekend to celebrate the 10th birthday of ABP with our team. [Take a peak at the 1-minute-video from that weekend](https://youtube.com/embed/LxMqIVNHKOk). +In addition to our celebration, we created ABP Framework swag shop that includes a limited-time swag items that have ABP's special 10th Year logo on them. +If you would like to get your Limited-time ABP 10th Year Swag from + +* European Union Store, [visit ABP Framework EU Store](https://abpframework-eu.myspreadshop.net) +* United States Store, [visit ABP Framework US Store](https://abpframework-us.myspreadshop.com) + +It was the **7th birthday of Volosoft**, the company behind the ABP platform. We are proud and excited for the many years to come with the amazing team and many more valuable people to come and join to our team! + +### Events + +We give significant importance to giving back .NET and the overall software development industry. This year was our most active year in the events part of it, because, we not only sponsored to events this year but also **organized** one. + +* **[ABP .NET Conf'23](https://abp.io/conference/2023)** ABP .NET Conference 2023 took place online on May 10, 2023 and each talk is published in [ABP DOTNET Conf'23 Playlist](https://www.youtube.com/playlist?list=PLsNclT2aHJcPTA3D4fIF10fsbhbckEbBC) publicly available on YouTube. Anyone was invited to the event as we mentioned in our [You Are Invited to ABP .NET Conf'23!](https://blog.abp.io/abp/You-Are-Invited-to-ABP-dotNET-Conf23) along with our excitement. It was a truly remarkable experience we got to taste for the first time and got a significant interest. You can read all the statistics in [ABP .NET Conference 2023 Wrap Up](https://blog.abp.io/abp/ABP-.NET-Conference-2023-Wrap-Up) along with our gratitude. Here is a known secret: we plan to do it on a yearly basis! + +In addition to organizing our own .NET event, we, of course, also sponsored 5 events in 2023. Here is the list of the events we sponsored: + +* **[NDC London](https://ndclondon.com/)** is an event we have sponsored almost every year they have organized since 2018. This year, we announced we will sponsor NDC London again in [this announcement blog post](https://blog.abp.io/abp/ABP.IO-is-sponsoring-NDC-London-2023) and a [Recap of the NDC London 2023 here](https://blog.abp.io/abp/What%E2%80%99s-NEW-in-NDC-London-2023). +* **[Devnot Dotnet 2023](https://dotnet.devnot.com/)** is an event we sponsored as Volosoft Company, you can find how it went in [this blog post](https://volosoft.com/Blog/Reflecting-on-Devnot-Dotnet-Conference-2023). +* **[BASTA! Mainz 2023](https://basta.net/mainz-en/)** is the event we sponsored for the first time this year. We were so excited and published a blog post announcing [ABP.IO is sponsoring BASTA! Mainz](https://blog.abp.io/abp/ABP.IO-is-sponsoring-BASTA!-Mainz-2023) and a [Recap of BASTA! Mainz](https://volosoft.com/blog/BASTA-Mainz-2023-What-a-Blast-in-Germany) from our perspective of this amazing event. +* **[.NET Conf 2023](https://www.dotnetconf.net/)** was another online blast we experienced this year to be a sponsor of. We were happy to give ABP Commercial gifts as a form of our thanks to the biggest virtual .NET Conference audience. +* **[DOTNET Conf China 2023](https://chinaevent.microsoft.com/events/details/5f625a2b-206c-4838-b2af-079b3ea27270)** in another part of the usual .NET Conferences but is offering an in-person, therefore, as much amazing platform as the virtual one as a conference. This year, we sponsored .NET Conference China and had a great time there. You can read about the Recap of [ABP at China .NET Conf 2023](https://blog.abp.io/abp/ABP-at-China-NET-Conf-2023). + +### Community Talks + +[ABP Community Talks](https://community.abp.io/events#abp-community-talks) is the monthly live event where we gather to talk and share ideas about the latest news about ABP Framework and overall .NET-related topics in an hour with ABP Community members and a spontaneous appearance of famous .NET names such as Jon Galloway, Joseph Guadagno, Steve Sanderson, etc. This year, we organized **8 ABP Community Talks episodes** about several topics and shared some insights while being interactive with the ABP Community. [Watch ABP Community Talks from its YouTube Playlist](https://www.youtube.com/playlist?list=PLsNclT2aHJcOsPustEkzG6DywiO8eh0lB) and don't forget to [subscribe to our YouTube Channel](https://www.youtube.com/@volosoft) and open the alerts to learn about the upcoming episodes. While you are at it, you are more than welcome to take a look at the resourceful videos we published, as well. 🙂 + +### NuGet Downloads + +NuGet is a package manager designed specifically for the .NET ecosystem. It simplifies the process of creating and consuming packages, thanks to the NuGet client tools. By using these tools, developers can easily manage their project dependencies and improve their workflow. +In 2023, [ABP Core NuGet package](https://www.nuget.org/packages/Volo.Abp.Core/6.0.2) reached more than **22.3 million** of downloads! +On the other hand, overall [Volosoft NuGet Profile](https://www.nuget.org/profiles/volosoft) reached **almost a billion** downloads! + +Thank you all for your interest and support towards ABP and overall Volosoft Packages. + +### ABP Community Posts + +[ABP Community](https://community.abp.io/) is a hub for ABP Framework, .NET and software development. There are articles, videos, events and many more within ABP Community resources. In 2023, only the articles reached up to **almost 200 posts** on top of the videos and events. You can find each resources from the given links below. + +* [ABP Community Events](https://community.abp.io/events) +* [ABP Community Articles](https://community.abp.io/posts) +* [ABP Community Videos](https://community.abp.io/videos) +* [ABP Community Raffles](https://community.abp.io/raffles) + +### ABP Framework on GitHub + +This year was yet another year we shine with [ABP Framework GitHub Repository](https://github.com/abpframework/abp)'s **11.8k stars**! +We appreciate **precisely 100 different [ABP contributors](https://github.com/abpframework/abp/graphs/contributors)** dedicated their valuable time to contribute to make ABP Framework better. In 2023, ABP Framework got **[more than 2850 commits](https://github.com/abpframework/abp/graphs/commit-activity) from 37 different contributors**. Your hard work and effort worth a million thanks, if nothing! We are grateful for each and every one of you and embrace more ten thousands of stars we will gain together with more hundreds of ABP Framework Contributors in the near future. + +### ABP.IO Platform Version Releases + +ABP Framework released 5 versions from 7.1 to 8.0 in 2023. You can check the release logs from [ABP Framework Release Logs](https://github.com/abpframework/abp/releases). + +The most important milestone in these releases is that we upgraded ABP Framework to .NET 8 in [ABP v8.0](https://blog.abp.io/abp/abp-8-0-stable-release-with-dotnet-8-0). + +### Video Tutorials + +In 2023, we published **29 tutorial videos** on top of the 48 videos from last year. We gathered them in [ABP.IO Video Courses](https://abp.io/video-courses) for you to watch free on ABP.IO to learn more about the ABP Framework Essentials and simplify your ABP Platform Journey according to your interests. You can find more videos on [Volosoft's YouTube Channel](https://www.youtube.com/c/@volosoft). + +### ABP Commercial + +2023 was the year for ABP Commercial to shine along with ABP Framework in which more than **80 countries** in the world bought a license which cumulated the customer base of ABP Commercial up to **more than 120 countries**! With this math, it's now safe to say that ABP Commercial is helping streamline the application development processes of businesses from **more than half of the world**! + +* This year, businesses that are active in **more than 95 different industries from more than from 80 countries** accelarated their app development with ABP Commercial +* We performed **293 hours** of [Live ABP Training](https://commercial.abp.io/trainings) to help ABP Framework and ABP Commercial users to perfect their development skills +* Our talented support team solved **more than 1920 support tickets** in 2023. + +#### New launch: ABP Studio + +We were preparing [ABP Studio](https://commercial.abp.io/studio) as a whole new launch for more than a year. 2023 was the year we matured it enough to finally share it with you and share our excitement with all of you! It was a thrill for our Co-Founder [Halil İbrahim Kalkan](https://github.com/hikalkan) to mention about it for the first time in [ABP .NET Conf'23](https://abp.io/conference/2023) with his talk on [Kubernetes Integrated Microservice Development with ABP Studio](https://youtu.be/XiPRcIHJ3NE?si=3FlfJRbbi5D15s9U). Then, we prepared [ABP Studio's dedicated page](https://commercial.abp.io/studio) and shared its details for you to check out and test it out in the Beta version which is AVAILABLE NOW. You can [visit ABP Studio page and request a Beta Access from there](https://commercial.abp.io/studio). Here are some key resources for ABP Studio aside from its page: + +* [ABP Studio Documentation](https://docs.abp.io/en/commercial/latest/studio/index) +* [ABP Community Talks 2023.8: What's Coming with ABP 8 & .NET 8 - ABP Studio Part](https://www.youtube.com/watch?v=yo2L1xGa2pM&t=3250s) +* [Demo: Running and Developing Microservice Applications with ABP Studio Kubernetes Integration](https://www.youtube.com/watch?v=CeUq2ysz-mQ) +* [Demo: Running and Developing Microservice Applications with ABP Studio Solution Runner](https://www.youtube.com/watch?v=sSCxyccoHqE) +* [Kubernetes Integrated Microservice Development with ABP Studio \| ABP \.NET Conference 2023](https://youtu.be/XiPRcIHJ3NE?si=3FlfJRbbi5D15s9U) + +## Gartner Badges + +[Gartner](https://www.gartner.com/en) is a research and consultant company for IT industry, one of the biggest companies in their area. You might have heard Magic Quadrant, Capterra, GetApp, etc. Those are all Gartner's works. This year, we earned **5 Gartner badges** for ABP Commercial which makes us more successful than 2022 in which we earned 2 badges([Application Development Front Runner of Software Advice](https://blog.abp.io/abp/abpcommercial-2022-front-runner-in-app-development-category) and [Application Develompent Category Leader of GetApp](https://blog.abp.io/abp/abpcommercial-2022-category-leader-in-app-development-category)) from Gartner. + +* Capterra Shortlist 2023 in App Building Category +* GetApp Category Leader 2023 in App Building Category +* GetApp Category Leader 2023 in Application Development Category +* Software Advice Front Runner 2023 in App Building Category +* Software Advice Front Runner 2023 in App Development Category + You can learn more about the each Gartner Badges in our recently published blog post, [ABP Commercial Won 5 Recognitions from Gartner in 2023](https://blog.abp.io/abp/ABP-Commercial-Won-5-Recognitions-from-Gartner-in-2023). + +To show our appreciation, we generated a set of links that rewards your review for ABP Commercial product in your local Amazon Store! + +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/07a1ac5a-4658-4552-a87d-5f4e1089fee9?lang=en)**[get $10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/07a1ac5a-4658-4552-a87d-5f4e1089fee9?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/30b5d7f2-d0c5-4b38-b968-2dc5601aa196?lang=en)**[get £10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/30b5d7f2-d0c5-4b38-b968-2dc5601aa196?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/8fd7b0e8-e4e1-487a-96d6-88f70c14128c?lang=en)**[get €10 gift card](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/8fd7b0e8-e4e1-487a-96d6-88f70c14128c?lang=en)** +* [Leave a review for ABP Commercial & ](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/f6ee291b-f48f-4821-ac3a-606b7e6af005?lang=en)**[get 1500.0¥](https://reviews.capterra.com/products/new/8b6f9777-574b-42c6-9902-c045b585ab7c/f6ee291b-f48f-4821-ac3a-606b7e6af005?lang=en)** \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-01-02-meet-abpio-at-ndc-london-2024/post.md b/docs/en/Community-Articles/2024-01-02-meet-abpio-at-ndc-london-2024/post.md new file mode 100644 index 0000000000..aa2fa568c4 --- /dev/null +++ b/docs/en/Community-Articles/2024-01-02-meet-abpio-at-ndc-london-2024/post.md @@ -0,0 +1,18 @@ +Hey there, are you ready to start 2024 journey with [ABP.IO](https://abp.io/)? + +We're absolutely thrilled to announce that ABP.IO is proudly sponsoring [NDC London 2024](https://ndclondon.com) for the fifth consecutive year! With 110+ speakers and 115+ conference sessions, the conference will be held in the heart of the City of London at the QEII. As a dedicated supporter of the software development community, especially in .NET community, we’re excited to once again be part of this phenomenal gathering. + +For those new to the scene, NDC London is a conference where software developers come together to explore a wide range of topics in the industry. It actively brings experts from around the world share their knowledge on the latest technologies and best practices. Organized by NDC Conferences, known for hosting similar events worldwide, it's a great opportunity to learn and connect in the software development community. + +The ABP.IO team is just ready up for NDC London 2024. We're eager to connect with fellow developers and dive deep into the conference insights. Stay tuned for more updates as we gear up for this fantastic event. Join us at our booth on the 3rd floor of the Queen Elizabeth II Centre for exciting surprises! We've prepared exclusive swag kits and the raffle you won't want to miss. + +As [Volosoft Company](https://volosoft.com/), supporting events like NDC London reflects our dedication to empowering the software development community. These gatherings are essential—a chance to learn, connect, and stay updated in our dynamic field. Catch insights from past NDC events and more conference experiences on our previous [blogs](https://blog.abp.io/abp). + +Interested in Volosoft and our contributions to software development? Drop by our booth to discuss [ABP Commercial](https://commercial.abp.io/), our SaaS product based on the robust open source [ABP Framework](https://github.com/abpframework/abp). Let's chat about your software needs and how we can assist you. + +Mark your calendars because NDC London 2024 is going to be off the charts, and we can't wait to see you there! Let's dive into the future of software development together. + +
+See you at NDC London 2024! + +
diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59366a9beb61202ddf67a48af0.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59366a9beb61202ddf67a48af0.jpg new file mode 100644 index 0000000000..dbdf7c96b0 Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59366a9beb61202ddf67a48af0.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5964f409df4857352a7750144f.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5964f409df4857352a7750144f.jpg new file mode 100644 index 0000000000..a25fabcc98 Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5964f409df4857352a7750144f.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e598d63941f1b4eb0bbb9c1a7bf.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e598d63941f1b4eb0bbb9c1a7bf.jpg new file mode 100644 index 0000000000..660d086cbc Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e598d63941f1b4eb0bbb9c1a7bf.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59b2bc78fcdb2805b6b2c2e0d8.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59b2bc78fcdb2805b6b2c2e0d8.jpg new file mode 100644 index 0000000000..7babc9ab5b Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59b2bc78fcdb2805b6b2c2e0d8.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59d73b779a17a42733619a5082.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59d73b779a17a42733619a5082.jpg new file mode 100644 index 0000000000..b1ab47d590 Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59d73b779a17a42733619a5082.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59fc9f52bfdd52a5b2a6fd629b.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59fc9f52bfdd52a5b2a6fd629b.jpg new file mode 100644 index 0000000000..27aad1a716 Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e59fc9f52bfdd52a5b2a6fd629b.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a3c4d33948a14f739566c3e91.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a3c4d33948a14f739566c3e91.jpg new file mode 100644 index 0000000000..eda7ac4735 Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a3c4d33948a14f739566c3e91.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a65ed0e44544fba86d71ba538.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a65ed0e44544fba86d71ba538.jpg new file mode 100644 index 0000000000..76842cf0fa Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a65ed0e44544fba86d71ba538.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a8d62fe81356f87616a4c00bc.jpg b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a8d62fe81356f87616a4c00bc.jpg new file mode 100644 index 0000000000..5be2c5d6dc Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/3a101e5a8d62fe81356f87616a4c00bc.jpg differ diff --git a/docs/en/Community-Articles/2024-01-15-2024-first-community-event/post.md b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/post.md new file mode 100644 index 0000000000..9f338522b9 --- /dev/null +++ b/docs/en/Community-Articles/2024-01-15-2024-first-community-event/post.md @@ -0,0 +1,21 @@ + ## 2024 First Community Event. + +The first .NET community event in 2024 was successfully held in Shenzhen on January 14, 2024. + +This event is co-organized by **Microsoft MVP China Team**, **Microsoft Reactor**, **China .NET Community** and **Shenzhen .NET Club**. + +**ABP.IO** continues to strongly support the community, and we have prepared exquisite gifts for participants. + +The event includes four wonderful technical lectures to reveal big data and AI's potential opportunities and innovations. It is a transfer of knowledge and a platform for communication and cooperation among technology enthusiasts. + +![1.jpg](3a101e59366a9beb61202ddf67a48af0.jpg) +![2.jpg](3a101e5964f409df4857352a7750144f.jpg) +![3.jpg](3a101e598d63941f1b4eb0bbb9c1a7bf.jpg) +![4.jpg](3a101e59b2bc78fcdb2805b6b2c2e0d8.jpg) +![51.jpg](3a101e59fc9f52bfdd52a5b2a6fd629b.jpg) +![5.jpg](3a101e59d73b779a17a42733619a5082.jpg) +![6.jpg](3a101e5a3c4d33948a14f739566c3e91.jpg) +![8.jpg](3a101e5a65ed0e44544fba86d71ba538.jpg) +![9.jpg](3a101e5a8d62fe81356f87616a4c00bc.jpg) + +**See you at the next community event!** \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md index a45f893b16..c6a37d85cd 100644 --- a/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md +++ b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md @@ -1,5 +1,3 @@ -![cover](cover.png) - # ABP Now Supports .NET 8 Recently we have published ABP v8.0. With this version [the ABP Framework](https://github.com/abpframework/abp/blob/dev/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj#L6) and ABP Commercial both supports for .NET 8, aligning itself with the latest enhancements and new features of the ASP.NET's new version 8. @@ -170,4 +168,4 @@ Starting in .NET 8, C# Hot Reload [supports modifying generic types and generic *References:* -* https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8 \ No newline at end of file +* https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8 diff --git a/docs/en/Community-Articles/2024-01-18-ABP-Now-Supports-Keyed-Services/POST.md b/docs/en/Community-Articles/2024-01-18-ABP-Now-Supports-Keyed-Services/POST.md index a5f2c694ed..aeefc03c0c 100644 --- a/docs/en/Community-Articles/2024-01-18-ABP-Now-Supports-Keyed-Services/POST.md +++ b/docs/en/Community-Articles/2024-01-18-ABP-Now-Supports-Keyed-Services/POST.md @@ -2,6 +2,12 @@ In this post, I describe the new **"keyed service"** support for the dependency injection container, which came with .NET 8.0. Then, I'll show you an example of usage within the ABP Framework. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## What Are Keyed Services? ASP.NET Core ships with a built-in dependency injection container, which is a pretty basic DI container that supports minimal features a dependency injection container is supposed to have. For that reason, most of the .NET users use third-party containers like [Autofac](https://autofac.org/), or Ninject. @@ -187,11 +193,27 @@ On the other hand, resolving keyed services from `LazyServiceProvider` is not su ### Automatically Registering Keyed Services -Currently, if you want to register a keyed service, you need to do it manually as we see in the previous sections by using one of the overloads (`.AddKeyedTransient`, `.AddKeyedScoped` and `.AddKeyedSingleton`). +ABP provides the `ExposeKeyedServiceAttribute` to control which keyed services are provided by the related class. + +For example, if you want to register a keyed service as a transient dependency, you can do it as follows: + +```csharp +[ExposeKeyedService("taxCalculator")] +[ExposeKeyedService("calculator")] +public class TaxCalculator: ICalculator, ITaxCalculator, ICanCalculate, ITransientDependency +{ +} +``` + +> Notice that the ExposeKeyedServiceAttribute only exposes the keyed services. So, you can not inject the ITaxCalculator or ICalculator interfaces in your application without using the FromKeyedServicesAttribute as shown in the example above. If you want to expose both keyed and non-keyed services, you can use the ExposeServicesAttribute and ExposeKeyedServiceAttribute attributes altogether. -It would be good if we could make this process automatically and not need to manually register services, and for that purpose, I have [created an issue](https://github.com/abpframework/abp/issues/18794) that aims to introduce an attribute, which allows us to automatically register multiple services as keyed services. +Please refer to the [Dependency Injection document](https://abp.io/docs/latest/framework/fundamentals/dependency-injection#exposekeyedservice-attribute) for further info. -You can [follow the issue](https://github.com/abpframework/abp/issues/18794) if you are considering using keyed services in your application and don't want to register them manually. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- ## Summary diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c22c9c7b27c9d007bc5817adaee.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c22c9c7b27c9d007bc5817adaee.png new file mode 100644 index 0000000000..2935b780b5 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c22c9c7b27c9d007bc5817adaee.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c28bb8b56956ba1e9486162c9fb.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c28bb8b56956ba1e9486162c9fb.png new file mode 100644 index 0000000000..cb03ca7462 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c28bb8b56956ba1e9486162c9fb.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c291c1653e33f4b475ed8543b39.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c291c1653e33f4b475ed8543b39.png new file mode 100644 index 0000000000..afbb6bd078 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c291c1653e33f4b475ed8543b39.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c297595810b3386fbb639eb1ed9.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c297595810b3386fbb639eb1ed9.png new file mode 100644 index 0000000000..872c190993 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c297595810b3386fbb639eb1ed9.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c29c57e24188931b73d4c13bcff.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c29c57e24188931b73d4c13bcff.png new file mode 100644 index 0000000000..1a249f2fc7 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c29c57e24188931b73d4c13bcff.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2ef17a8549b7bdb49926421e64.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2ef17a8549b7bdb49926421e64.png new file mode 100644 index 0000000000..bff98168a4 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2ef17a8549b7bdb49926421e64.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2f49f707344bf790f8a7b8f248.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2f49f707344bf790f8a7b8f248.png new file mode 100644 index 0000000000..70354be8b9 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2f49f707344bf790f8a7b8f248.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2f94607809e9ea4da93c4b58fb.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2f94607809e9ea4da93c4b58fb.png new file mode 100644 index 0000000000..d388ed6aa4 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c2f94607809e9ea4da93c4b58fb.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c3322a8172d22fdceb1c931bfb7.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c3322a8172d22fdceb1c931bfb7.png new file mode 100644 index 0000000000..02706c7981 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c3322a8172d22fdceb1c931bfb7.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c3d26924d5ccd093c79e351e2cf.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c3d26924d5ccd093c79e351e2cf.png new file mode 100644 index 0000000000..c7ce9a56ae Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108c3d26924d5ccd093c79e351e2cf.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108f97f94047a43a52511f8b4c1802.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108f97f94047a43a52511f8b4c1802.png new file mode 100644 index 0000000000..73ef0ae7c7 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108f97f94047a43a52511f8b4c1802.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108fa3b8c97de8532fba8646e48f0b.png b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108fa3b8c97de8532fba8646e48f0b.png new file mode 100644 index 0000000000..e34e403d90 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/3a108fa3b8c97de8532fba8646e48f0b.png differ diff --git a/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/post.md b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/post.md new file mode 100644 index 0000000000..a7a397498f --- /dev/null +++ b/docs/en/Community-Articles/2024-02-05-ndc-london-2024-abpios-key-highlights/post.md @@ -0,0 +1,83 @@ +As ABP.IO team, we just got back from our amazing trip with [NDC London](https://ndclondon.com/) and would love to share a recap of this amazing conference. It was the 5th time in a row we were a proud sponsor of NDC London. It, now, basically feels like home spending 3 days in Queen Elizabeth Centre II with NDC London for the [ABP.IO](https://abp.io/) team to be there. + +![booth.png](3a108c22c9c7b27c9d007bc5817adaee.png) + +This year, we were there with Lead Developers of ABP.IO Platform [Halil Ibrahim Kalkan](https://community.abp.io/members/hikalkan) and [Alper Ebicoglu](https://community.abp.io/members/alper) -as usual- and also ABP.IO Core team members, [Engincan Veske](https://community.abp.io/Members/EngincanV) and [Bige Besikci Yaman](https://community.abp.io/Members/bigebesikci). + +![team.png](3a108c28bb8b56956ba1e9486162c9fb.png) + +These 3 days with the team was all about chatting and having fun with amazing attendees and speakers. We met with talented and passionate software developers and introduced the [open source ABP Framework](https://github.com/abpframework/abp) - web application framework built on ASP.NET Core and [ABP Commercial](https://commercial.abp.io/) - the complete web application development platform built on open source ABP Framework to them. We also had a chance to reunite with some of the regulars as us and talked about the latest updates on .NET and ABP.IO Platform. + +![attendees1.png](3a108c291c1653e33f4b475ed8543b39.png) + +![attendees2.png](3a108c297595810b3386fbb639eb1ed9.png) + +![attendees3.png](3a108c29c57e24188931b73d4c13bcff.png) + +It wasn't all about learning but always fun and games with all the attendees. We love to show our hospitality with hand-made chocolates; enjoy the small-but-useful gadgets as well as the beneficial items such as books and of course the funny stickers. This year was no different. +We had delicious hand-made chocolates we brought all the way to London as always and didn't forget to enjoy them as we go through the days! +Attendees got to test their .NET knowledge with an easy quiz and left our booth with their TWS earphones. +As for the benefits and efficiency, we gave [Implementing DDD e-book](https://abp.io/books/implementing-domain-driven-design)'s paperback written by the Lead Architecture of ABP Framework - Halil Ibrahim Kalkan to the .NET developers. Because, what better gift than a book? + +![booth2.png](3a108c3322a8172d22fdceb1c931bfb7.png) + +As usual, we draw a raffle on the last day for Meta Quest 2 prize. Congratulations to our winner, Christian Wattengard. + +![raffle winner.png](3a108fa3b8c97de8532fba8646e48f0b.png) +
+ +NDC London was - once again - full of insightful talks with 110 sessions and 100+ speakers. You can find some highlights from those talks below. + +## First Day of NDC London +#### "Keynote: Debug your thinking" by [Laila Bougria](https://twitter.com/noctovis) +She showed how crucial it is to make good decisions in software development, more than just picking the right tech. She set an example of how she improved her way of thinking, pushing for a methodical way to make decisions that result in better, more well-rounded solutions. She encouraged everyone to think deeply and improve their problem-solving skills to come up with better software solutions. + +#### "Real-Time Connected Apps with .NET MAUI, Blazor, and SignalR" by [Gerald Versluis](https://twitter.com/jfversluis) +He kicked off one of the first sessions by talking on how to build apps that update instantly using SignalR, .NET MAUI, and Blazor. He broke down the basics of SignalR and showed off its capabilities with some cool demos, showing how apps on phones and the web can work together in real time. His talk was all about making apps that work together smoothly and keep users engaged. + +#### "You are doing logging in .NET wrong. Let’s fix it" by [Nick Chapsas](https://twitter.com/nickchapsas) +He talked about how important logging is for finding and fixing problems in apps that are already out there. He pointed out the usual mistakes people make when logging in .NET and showed how to fix them. His advice aimed to make logging more effective. + +#### "Architecture Modernization: Aligning Software, Strategy, and Structure" by [Nick Tune](https://twitter.com/ntcoding) +He warned about the dangers of sticking with old software architectures, which can stop a business from growing. He argued for updating software architectures to stay competitive, helping businesses move faster and grow bigger. + +## Second Day of NDC London +#### "Distribu-ready with the Modular Monolith" by [Layla Porter](https://twitter.com/laylacodesit) +She tackled the excitement and problems with distributed systems and microservices. She introduced the Modular Monolith as a smarter way to prepare for growth without making things too complicated. She explained how this approach keeps things simpler but still ready for the future. + +#### "How to effectively spy on your systems" by [Laila Bougria](https://twitter.com/noctovis) +In her second talk of NDC London after the Keynote on the first day, she explained how to keep an eye on complex systems using OpenTelemetry. She talked about the hurdles of making sure you can watch over your systems effectively and shared tips on picking the right tools, keeping costs down, and setting up your system for the best oversight. Her talk aimed to give a full picture of how to monitor systems well. + +#### "Tales from the .NET 8 Migration Trenches" by [Jimmy Bogard](https://twitter.com/jbogard) +He shared his experience with updating a .NET 4.8 app to .NET 8, without starting from scratch. He gave advice on how to move parts of an app to newer versions bit by bit, while still keeping everything running. His focus was on how to update common parts of apps, like databases and messaging, with practical tips from real projects. + +#### "CS Fundamentals: Why SSL and SSH are Secure" by [Jon Skeet](https://twitter.com/jonskeet) and [Rob Conery](https://twitter.com/robconery) +They took a close look at the RSA algorithm, a key piece of technology that keeps online communication secure and talked about why it's so important as well as its history, and even showed how it works, all while sharing interesting stories. + +## Third and the Last Day of NDC London +#### "How GitHub delivers GitHub using GitHub" by [April Edwards](https://twitter.com/TheAprilEdwards) +She shared how Microsoft's engineering teams have become more agile, going from releasing new versions every three years to every three weeks. She also explained how GitHub uses its own tools to build and improve itself. In her talk, she compared the agile journeys of Microsoft and GitHub, showing how they deliver software quickly and efficiently. + +![talks1.png](3a108c2ef17a8549b7bdb49926421e64.png) + +![talks2.png](3a108c2f49f707344bf790f8a7b8f248.png) + +![talks3.png](3a108c2f94607809e9ea4da93c4b58fb.png) + +## The fun part of the NDC London +The expo area on the third floor of Queen Elizabeth II Centre was also full of fun in all aspects. There were a variety of delicious food and the place hosted a yet another great party with delicious cocktails. We didn't forget to have fun and had our bellies full at all times! + +![food.png](3a108c3d26924d5ccd093c79e351e2cf.png) +![cocktail.png](3a108f97f94047a43a52511f8b4c1802.png) + +Last but not least, let's take a look around in Queen Elizabeth II Centre and re-live the expo area of NDC London atmosphere. +
+ +Thank you all for visiting our booth and the amazing chat you cherished our 3 days with. +We will see you all on the next one! :) + +To see how the past 4 NDC London sponsorships went, check out: +* [NDC London 2023 - Sponsored for the 4th time](https://volosoft.com/blog/NDC-London-2018-Impressions) +* [Recap: NDC {London} 2020 Software Developers Conference](https://volosoft.com/blog/Recap-NDC-London-2020-Software-Developers-Conference) +* [Impressions of NDC London 2019](https://volosoft.com/blog/Impressions-of-NDC-London-2019) +* [NDC London 2018 Impressions](https://volosoft.com/blog/NDC-London-2018-Impressions) \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2b6804e27641c3a54a31b17af.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2b6804e27641c3a54a31b17af.png new file mode 100644 index 0000000000..8281ecb8d6 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2b6804e27641c3a54a31b17af.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2ccca44199565fef1d235b2cc.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2ccca44199565fef1d235b2cc.png new file mode 100644 index 0000000000..92b767515a Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2ccca44199565fef1d235b2cc.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2ea684ad6afba3caab97b4425.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2ea684ad6afba3caab97b4425.png new file mode 100644 index 0000000000..6c45f9cb71 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2ea684ad6afba3caab97b4425.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2fff3262dc03a5acaa50ffb00.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2fff3262dc03a5acaa50ffb00.png new file mode 100644 index 0000000000..23b1dc8513 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a2fff3262dc03a5acaa50ffb00.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a31f35c6183ddc89755c791bff.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a31f35c6183ddc89755c791bff.png new file mode 100644 index 0000000000..6bb0920800 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a31f35c6183ddc89755c791bff.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a33d9bacfe3632188944e5ed02.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a33d9bacfe3632188944e5ed02.png new file mode 100644 index 0000000000..c1c8e6ca8d Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a33d9bacfe3632188944e5ed02.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a35dec6b8ff82063cf4422efd7.jpg b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a35dec6b8ff82063cf4422efd7.jpg new file mode 100644 index 0000000000..c8a78a0f93 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a35dec6b8ff82063cf4422efd7.jpg differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a3779ccb1908d67691ec3f1ba4.png b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a3779ccb1908d67691ec3f1ba4.png new file mode 100644 index 0000000000..cb03ca7462 Binary files /dev/null and b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/3a10d2a3779ccb1908d67691ec3f1ba4.png differ diff --git a/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/post.md b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/post.md new file mode 100644 index 0000000000..fbe2c2cbad --- /dev/null +++ b/docs/en/Community-Articles/2024-02-19-abpio-platform-81-rc-has-been-published/post.md @@ -0,0 +1,237 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **8.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 v8.1! Thanks to all of you. + +## Get Started with the 8.1 RC + +Follow the steps below to try version 8.1.0 RC today: + +1) **Upgrade** the ABP CLI to version `8.1.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 8.1.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 8.1.0-rc.1 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 8.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v8.x or earlier: + +* [ABP Framework 8.0 to 8.1 Migration Guide](https://docs.abp.io/en/abp/8.1/Migration-Guides/Abp-8_1) +* [ABP Commercial 8.0 to 8.1 Migration Guide](https://docs.abp.io/en/commercial/8.1/migration-guides/v8_1) + +## What's New with ABP Framework 8.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: + +* Introducing the `ExposeKeyedServiceAttribute` +* Custom Menu Component Support for MVC UI +* Introducing the `DisableAbpFeaturesAttribute` + +### Introducing the `ExposeKeyedServiceAttribute` + +[Keyed dependency injection (DI) services](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0#keyed-services) were added to the built-in DI container as a new feature with .NET 8.0. This is an important feature, which allows for registering and retrieving DI services using keys/names. + +In this version, we have introduced the `ExposeKeyedServiceAttribute` to allow you to automatically register keyed services by conventions: + +```csharp +[ExposeKeyedService("taxCalculator")] +[ExposeKeyedService("calculator")] +public class TaxCalculator: ICalculator, ITaxCalculator, ICanCalculate, ITransientDependency +{ +} +``` + +In the example above, the `TaxCalculator` class exposes the `ITaxCalculator` interface with the key `taxCalculator` and the `ICalculator` interface with the key `calculator`. + +Thanks to that, then you can use the [`FromKeyedServicesAttribute`](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.fromkeyedservicesattribute?view=dotnet-plat-ext-8.0) to resolve a certain keyed service in the constructor: + +```csharp +public class MyClass +{ + //... + public MyClass([FromKeyedServices("taxCalculator")] ITaxCalculator taxCalculator) + { + TaxCalculator = taxCalculator; + } +} +``` + +> Notice that the `ExposeKeyedServiceAttribute` only exposes the keyed services. So, you can not inject the `ITaxCalculator` or `ICalculator` interfaces in your application without using the `FromKeyedServicesAttribute` as shown in the example above. + +> If you want to learn more about the keyed dependency injection services, please refer to [Microsoft's documentation](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0#keyed-services) and [ABP Framework's Dependency Injection document](https://docs.abp.io/en/abp/8.1/Dependency-Injection#exposekeyedservice-attribute). + +### Custom Menu Component Support for MVC UI + +In this version, we have introduced the **custom menu component support**, which allows you to use a custom component for a certain menu item. + +You can use the `UseComponent` extension method while defining menu items to use your custom component for the related menu item: + +```csharp +context.Menu.Items.Add( + new ApplicationMenuItem("Custom.1", "My Custom Menu", "#") + .UseComponent(typeof(MyMenuComponent))); +``` + +Then, for the related menu item, your custom component will be rendered on the UI. + +### Introducing the `DisableAbpFeaturesAttribute` + +In this version, we have introduced the `DisableAbpFeaturesAttribute` to allow you to disable interceptors, middlewares, and MVC filters for a specific controller. + +For example, you may want to disable interceptors for a certain controller, but you may also don't want to disable middlewares and mvc filters, in that case, you can use the `DisableAbpFeaturesAttribute` as follows: + +```csharp +[Route("api/my-endpoint")] +[DisableAbpFeatures(DisableInterceptors = true, DisableMiddleware = false, DisableMvcFilters = false)] +public class MyController : AbpController +{ + +} +``` + +This can be useful if you have some APIs that are used frequently but you don't need all the features of ABP Framework. + +> **Note:** If you want to disable all interceptors, middlewares, and filters for a certain controller, then you can use the `[DisableAbpFeatures]` without the need to specify the parameters, they are disabled by default. + +## What's New with ABP Commercial 8.1? + +We've also worked on ABP Commercial to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 8.1. + +### Suite: New Features + +In this version, we mostly worked on ABP Suite and implemented some wanted features, such as *bulk delete*, *filterable properties*, *customizable page title*, *allowing establishing relationships with installed ABP modules' entities* and *supporting the `BasicAggregateRoot` as the base class*. + +#### Bulk Delete + +From this version on, ABP Suite allows you to perform bulk deletion of records based on specified criteria. + +![bulk-delete.png](3a10d2a2b6804e27641c3a54a31b17af.png) + +To enable *bulk delete support*, you should enable the *Bulk delete* option in the CRUD page generation page, along with the *Create user interface* option (they are enabled by default). When you enable the *bulk delete support*, you will see the checkboxes for each line in the datatable: + +![bulk-delete-datatable.png](3a10d2a2ccca44199565fef1d235b2cc.png) + +By selecting these checkboxes, you can delete all records in the current datatable (10 records by default), or delete all records in the database (by selecting *select all xx items* selection), or delete any records you want by selecting them one by one. + +> **Note:** This feature has already been implemented for MVC & Blazor UIs, but not implemented for Angular UI yet. We aim to implement it for Angular UI with *v8.1.0-rc.2*. + +#### Filterable Properties + +ABP Suite has been generating advanced filters for entities for a while and before this version, if you enabled the *create user interface* option, then all of the properties that you specified were included in the advanced filter section automatically. + +In this version, we have introduced the **filterable properties** feature to allow you to select which properties should be filterable and which are not: + +![filterable-properties.png](3a10d2a2ea684ad6afba3caab97b4425.png) + +Now, you have full control to select which properties should be included as filter inputs and shown on the advanced filters section on your generated pages. + +In other words, once, you select a property as *not filterable*, then the property will not be included in the filter inputs and in the advanced filter section. Also, if there are not any filterable properties for an entity, then the advanced filters section will not be generated. + +#### Customizable Page Title + +In this version on, ABP Suite allows you to specify the page title for the current entity. + +![page-title.png](3a10d2a2fff3262dc03a5acaa50ffb00.png) + +You just need to specify the *page title* on the CRUD page generation page for a specific entity and then it will be used as a localization key in the application (and also will be localized - for example, if you specify it as 'MyPageTitle', then it will be localized in English as 'My Page Title'), so you can localize it for different languages later on. + +#### Allowing Establishing Relationships with Installed ABP Modules' Entities + +In this version, ABP Suite allows you to establish one-to-many relationship with pre-installed ABP Modules. You can add any entity from pre-installed ABP modules as a navigation property, by checking the **Include entities from ABP modules** checkbox in the navigation property model and choosing the related module entity as in the following figure: + +![suite-include-entities-from-abp-modules.png](3a10d2a31f35c6183ddc89755c791bff.png) + +In the example above, the `IdentityUser` entity is selected as the navigation property but you can also choose any entity from the installed ABP modules in the navigation property model. + +> **Note:** Ensure that your solution is built properly before establishing relationship between your own entity and a module entity because ABP Suite scans assemblies and finds which ABP modules you are using and lists their entities in the navigation property model if you have checked the **Include entities from ABP modules** checkbox. + +#### Support `BasicAggregateRoot` Base Class + +In this version on, ABP Suite allows you to choose the `BasicAggregateRoot` as the base class while generating an entity: + +![basic-aggregate-root.png](3a10d2a33d9bacfe3632188944e5ed02.png) + +> You can choose the [BasicAggregateRoot](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs) if you want to create an aggregate root without the `IHasExtraProperties` and `IHasConcurrencyStamp` interfaces implemented (extra properties & concurrency check). + +### ABP Studio v0.6.5 Has Been Released! + +We have just released v0.6.5 for ABP Studio and with this version, we fixed many minor bugs reported by you, started supporting running multiple ABP Studio instances, and added important features, such as adding a public website to the new microservice template, and so on... + +In addition to all of this, we continue to enrich ABP Studio's documentation as always and you can read them at [https://docs.abp.io/en/commercial/latest/studio/overview](https://docs.abp.io/en/commercial/latest/studio/overview). + +Please try ABP Studio v0.6.5 and [provide feedback](https://support.abp.io/QA/Questions/6416/ABP-Studio-Bugs--Issues) to help us release more stable versions. Thanks in advance! + +## Community News + +### .NET Conf China 2023 Watch Party + +![dotnet-conf-china-2023-watch-party.jpg](3a10d2a35dec6b8ff82063cf4422efd7.jpg) + +ABP.IO was thrilled to sponsor the first .NET Community event in 2024 held in Shenzen on January 14, 2024. + +The event included four wonderful technical lectures to reveal big data and AI's potential opportunities and innovations. It was a transfer of knowledge and a platform for communication and cooperation among technology enthusiasts and we are happy to be attended. + +> If you want to learn more about the .NET Conf China 2023 Watch Party event, please check [the blog post](https://blog.abp.io/abp/2024-First-Community-Event). + +### Volosoft Attended NDC London 2024 + +![ndc-london-2024.png](3a10d2a3779ccb1908d67691ec3f1ba4.png) + +Core team members of the ABP Framework, [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan), [Alper Ebicoglu](https://twitter.com/alperebicoglu), [Engincan Veske](https://twitter.com/EngincanVeske), and [Bige Beşikci Yaman](https://twitter.com/bigedediki) attended [NDC London 2024](https://ndclondon.com/) from the 31st of January to the 2nd of February. + +It was the 5th time in a row we were a proud sponsor of NDC London. It, now, basically feels like home spending 3 days in Queen Elizabeth Centre II with NDC London for the [ABP.IO](https://abp.io/) team to be there. + +These 3 days with the team were all about chatting and having fun with amazing attendees and speakers. We met with talented and passionate software developers and introduced the [open source ABP Framework](https://github.com/abpframework/abp) - web application framework built on ASP.NET Core and [ABP Commercial](https://commercial.abp.io/) - the complete web application development platform built on open source ABP Framework - to them. + +> We shared our insights and key highlights from the NDC London 2024 event, which you can find at [https://blog.abp.io/abp/NDC-London-2024-ABP.IO-Key-Highlights](https://blog.abp.io/abp/NDC-London-2024-ABP.IO-Key-Highlights). + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Every Programmer Should Know #2: Optimistic Concurrency Control](https://community.abp.io/posts/every-programmer-should-know-2-optimistic-concurrency-control-sms9xs9n) by [Berkan Sasmaz](https://github.com/berkansasmaz) +* [Global Error Handling in Angular](https://community.abp.io/posts/global-error-handling-in-angular-gjcb2f1e) by [Sinan Öztürk](https://github.com/Sinan997) +* [ABP Framework goes Azure](https://community.abp.io/posts/abp-framework-goes-azure-ub4u5ax5) by [Bart Van Hoey](https://github.com/bartvanhoey) +* [ABP Supports .NET8](https://community.abp.io/posts/abp-supports-.net8-e4gve6ih) by [Alper Ebicoglu](https://community.abp.io/members/alper) +* [Engincan Veske](https://github.com/EngincanV) has created **three** new community articles: + * [ABP Now Supports Keyed Services!](https://community.abp.io/posts/abp-now-supports-keyed-services-6k92wz7h) + * [Mutation Testing in C# with Stryker](https://community.abp.io/posts/mutation-testing-in-c-with-stryker-tp6u599h) + * [ABP Suite: Best CRUD Page Generation Tool for .NET](https://community.abp.io/posts/abp-suite-best-crud-page-generation-tool-for-.net-cmm9xs3n) +* [Ahmed Tarek](https://github.com/AhmedTarekHasan) has created **nine** new community articles: + * [📑 Cover IO Based Apps With Unit Tests in .NET C# 🧪](https://community.abp.io/posts/-cover-io-based-apps-with-unit-tests-in-.net-c--zp6kip2r) + * [Better Enhanced Repository Pattern Implementation in .NET C#](https://community.abp.io/posts/better-enhanced-repository-pattern-implementation-in-.net-c-hpkbxr3l) + * [When Not To Use DI, IoC, and IoC Containers in .NET C#](https://community.abp.io/posts/when-not-to-use-di-ioc-and-ioc-containers-in-.net-c-n769hq8u) + * [⏰ Best Practice for Using Timers in .NET C# ⏳](https://community.abp.io/posts/-best-practice-for-using-timers-in-.net-c--3cqvew5o) + * [How to Fully Cover .NET C# Console Application With Unit Tests](https://community.abp.io/posts/how-to-fully-cover-.net-c-console-application-with-unit-tests-3h248yhe) + * [Web Scraping in .NET C#](https://community.abp.io/posts/web-scraping-in-.net-c-6pkp1abi) + * [Step by step guide to develop a Fluent API from scratch in .NET C# using the Builder Design Pattern](https://community.abp.io/posts/step-by-step-guide-to-develop-a-fluent-api-from-scratch-in-.net-c-using-the-builder-design-pattern-sbww0vky) + * [A Best Practice for Designing Interfaces in .NET C#](https://community.abp.io/posts/a-best-practice-for-designing-interfaces-in-.net-c-9xqc4h8d) + * [Invariance, Covariance, and Contravariance in .NET C#](https://community.abp.io/posts/invariance-covariance-and-contravariance-in-.net-c-9blmuhme) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/posts/create) 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://docs.abp.io/en/abp/8.1/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.1 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/Post.md b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/Post.md new file mode 100644 index 0000000000..a73fd2507a --- /dev/null +++ b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/Post.md @@ -0,0 +1,134 @@ +# URL-Based Localization + +In this article I'll show you how to optimize your ABP website localization with a URL parameter. URL Paths are commonly being used to change the current UI culture. This method makes our website SEO-Friendly as you structuring the URLs for multiple languages. And you can also share the link of your website with a specific language. Let's see implementing multi-language support with URL parameters in an ABP project. + +![Turkish and English Localization within URL](scrshot1.jpg) + + + +## Mastering Website Localization: Language Codes in URLs Explained + +Enhancing UX with URL-Based website localization is mainly done with ASP.NET Core's routing system. Also we need to automatically redirect the links without language code parameter. Our URL structures for the localization will be as following: + +- https://mywebsite.com/en/dashboard (English) +- https://mywebsite.com/tr/dashboard (Turkish) + + + +## Routing + +Before starting to explain how to do this, you can see [this commit](https://github.com/salihozkara/MultiLangRoute/commit/09e40cfd751562dec0dab890e54e0c5ca9ee256c) which implements this functionality. The routing module consists of these fundamental classes: + +### 1. **MultiLanguageSupportMetaData.cs** + +This class is used to add a language parameter to route templates. For example, it changes the `/about` route to `/language/about`. + +### 2. **MultiLanguageRedirectRequiredMetaData.cs** + +This class is used to redirect users to the correct language version. If a user visits the `/about` page and the current culture is `"tr-TR"`, this class will redirect them to `/tr-TR/about`. + +### 3. **UrlNormalizer.cs** + +This static class is used to normalize URLs by adding language information and improving performance using caching. + +```csharp +public static string NormalizeUrl(EndpointDataSource endpointDataSource, HttpContext httpContext, string url) +{ + // Normalize the URL and cache it + return Cache.GetOrAdd(url, (key) => + { + var absoluteUrl = GetAbsoluteUrl(key); + var multiLanguageRedirectRequiredMetaData = + GetMultiLanguageRedirectRequiredMetaData(endpointDataSource, absoluteUrl); + return multiLanguageRedirectRequiredMetaData?.ReBuildUrl(httpContext, key) ?? key; + }); +} +``` + +### 4. **MyLinkGenerator.cs** + +This class extends ASP.NET Core’s `LinkGenerator` class to automatically add language information to all generated links. + +### 5. **MyRouteDataRequestCultureProvider.cs** + +This class determines the current culture using the language parameter in the URL. For example, it extracts the `"tr-TR"` culture from the `/tr-TR/about` URL. + +### 6. **RoutingMiddleware.cs** + +This middleware processes HTTP requests and redirects users to the correct language version when necessary. + +```csharp +public override Task InvokeAsync(HttpContext context, RequestDelegate next) +{ + var endpoint = context.GetEndpoint(); + if(endpoint is not RouteEndpoint) + { + return next(context); + } + + // Redirect if necessary + var redirectMetaData = endpoint.Metadata.GetMetadata(); + if (redirectMetaData is not null) + { + redirectMetaData.Redirect(context); + return Task.CompletedTask; + } + + // ... +} +``` + + + +## CultureAnchorTagHelper.cs + +This **Tag Helper** processes `` tags in a Razor page and automatically adds language information to URLs if it's missing. + +```csharp +[HtmlTargetElement("a", Attributes = "href", TagStructure = TagStructure.NormalOrSelfClosing)] +public class CultureAnchorTagHelper(EndpointDataSource endpointDataSource, IHttpContextAccessor contextAccessor) + : TagHelper, ITransientDependency +{ + public override void Process(TagHelperContext context, TagHelperOutput output) + { + var href = output.Attributes["href"].Value.ToString(); + if (href != null) + { + output.Attributes.SetAttribute("href", + UrlNormalizer.NormalizeUrl(endpointDataSource, contextAccessor.HttpContext!, href)); + } + } +} +``` + +**How This Tag Helper Works:** + +- Finds all `` tags within your Razor pages. +- Retrieves the `href` attribute of each link. +- Uses the `UrlNormalizer.NormalizeUrl()` method to normalize the URL with the current culture information. +- Replaces the original URL with the normalized one. + +For example, if the current culture is `"tr"` and a page contains ``, this Tag Helper will transform it into ``. + + + +## Sample Project + +Salih Özkara from ABP team created a sample working project which implements URL localization. He used ABP free tier MVC template and MongoDB. You can check out the related commit which implements URL localization: + +https://github.com/salihozkara/MultiLangRoute/commit/09e40cfd751562dec0dab890e54e0c5ca9ee256c + +And full working demo is available at: + +https://github.com/salihozkara/MultiLangRoute + +You can download the demo project at: + +[UrlLocalizationSampleProject.zip](https://github.com/abpframework/abp/blob/634ff52fb07d0b1281640695dbeffccdc943ca53/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/UrlLocalizationSampleProject.zip) + + + +## Summary + +This implementation extends ASP.NET Core’s routing mechanism and utilizes caching for improved performance. It ensures multilingual support by normalizing URLs, redirecting users to the appropriate language version, and automatically handling language-specific links. + diff --git a/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/UrlLocalizationSampleProject.zip b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/UrlLocalizationSampleProject.zip new file mode 100644 index 0000000000..a9079c5f6e Binary files /dev/null and b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/UrlLocalizationSampleProject.zip differ diff --git a/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/cover.png b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/cover.png new file mode 100644 index 0000000000..b0f06080af Binary files /dev/null and b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/cover.png differ diff --git a/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/scrshot1.jpg b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/scrshot1.jpg new file mode 100644 index 0000000000..0d35786717 Binary files /dev/null and b/docs/en/Community-Articles/2024-03-05-URL-Based-Localization/scrshot1.jpg differ diff --git a/docs/en/Community-Articles/2024-03-19-join-abpio-at-modern-net-web-day/3a11773a4db7b592ecf271fd1fe58e93.png b/docs/en/Community-Articles/2024-03-19-join-abpio-at-modern-net-web-day/3a11773a4db7b592ecf271fd1fe58e93.png new file mode 100644 index 0000000000..06945f9cda Binary files /dev/null and b/docs/en/Community-Articles/2024-03-19-join-abpio-at-modern-net-web-day/3a11773a4db7b592ecf271fd1fe58e93.png differ diff --git a/docs/en/Community-Articles/2024-03-19-join-abpio-at-modern-net-web-day/post.md b/docs/en/Community-Articles/2024-03-19-join-abpio-at-modern-net-web-day/post.md new file mode 100644 index 0000000000..df8844f18a --- /dev/null +++ b/docs/en/Community-Articles/2024-03-19-join-abpio-at-modern-net-web-day/post.md @@ -0,0 +1,31 @@ +**[ABP.IO](https://www.abp.io/)** is proud to announce our sponsorship of the upcoming **"Modern .NET Day"** event hosted by **[Jeff Fritz](https://twitter.com/csharpfritz)** and Friends, set to take place on Twitch. As one of the sponsors, we are excited to contribute to this enriching experience for .NET fellows worldwide. + +### Exclusive Offer + +As a swag bag sponsor, ABP.IO is delighted to give away 15 FREE tickets to the highly anticipated **[ABP Dotnet Conf’24](https://abp.io/conference/2024)**, scheduled on ***May 8-9***. Sign up for "Modern .NET Web Day" and enter for a chance to win this valuable ticket, paving the way for your next fun journey in the world of dotnet. + +![modern dotnet web day (1).png](3a11773a4db7b592ecf271fd1fe58e93.png) +### Topics to be Discussed + +Join us dive into the magic of .NET 8 at the community live stream event, "Modern .NET Web Day." Prepare to immerse yourself in the latest advancements, from the new Blazor features to revolutionary AI-driven productivity boosts in web development projects.  +Topics that will be covered include: + +* *ASP.NET Core*: Crafting Maintainable Microservices +* *Cloud Native development with .NET Aspire* +* *Developer Productivity with Visual Studio and .NET* +* *GitHub Copilot configuration, extension, tips and tricks* +* *User Experience and Front-End Development*: Delve into responsive design, accessibility, and performance optimization. Discuss modern front-end frameworks (Blazor, React, Angular, etc.) in the .NET ecosystem. Share strategies for creating delightful user interfaces. + +Don't miss out on this opportunity to gain invaluable insights and strategies for creating exceptional user interfaces. Mark your calendars for "Modern .NET Web Day" and join us for an unforgettable experience! + +*** + +📌 **Date:** March 22nd + +⏰ **Time:** 11 AM - 4 PM ET ( 3 - 8 PM UTC ) + +📺 **Where:** [Twitch (twitch.tv/csharpfritz)](https://www.twitch.tv/csharpfritz) + +*** + +[Register now ](https://www.mobilize.net/modern-dotnet-web-day)to join us. We look forward to seeing you there! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-03-31-announcement-our-new-abpio-unified-platform/post.md b/docs/en/Community-Articles/2024-03-31-announcement-our-new-abpio-unified-platform/post.md new file mode 100644 index 0000000000..9df19e7437 --- /dev/null +++ b/docs/en/Community-Articles/2024-03-31-announcement-our-new-abpio-unified-platform/post.md @@ -0,0 +1,63 @@ +Hi ABP Community, + +📢 We're excited to announce an improvement to your ABP.IO experience! In our ongoing effort to simplify and improve your interaction with our platform, we are working on a new design for ABP.IO and its subdomains. This update isn't just about aesthetics; it's a comprehensive enhancement aimed at unifying all our services under a single platform address: https://abp.io. + + + +## Why are we making this change? + +Whether you're developing with our open-source framework or using our commercial product, or looking for support; our goal is always to deliver the best experience possible. The new design will improve several aspects: + +🔹**Simplifying Navigation**: As the ABP.IO platform has grown rapidly, navigating through numerous subdomains has become challenging. We're transitioning to a well-structured mega menu system that will make navigation tidier and more straightforward. With everything under the ABP.IO domain, finding what you need will be easier. + +🎨 **Enhancing User Experience**: We're introducing a fresh, modern design that not only looks better but also enhances functionality and ease of use. + +🔎 **Better SEO**: A unified domain improves our platform's discoverability, making it easier for new users to find us and for you to share resources with your peers. + + + +## Which services are being unified? + +✅ The following websites will now be unified under ABP.IO: + +- blog.abp.io 👉 abp.io/blog +- docs.abp.io 👉 abp.io/docs +- support.abp.io 👉 abp.io/support +- community.abp.io 👉 abp.io/community +- commercial.abp.io 👉 abp.io + + +> ⛔ The following websites will not be unified during this transition: admin.abp.io, account.abp.io, nuget.abp.io + + +## What can you expect? + +The new ABP.IO platform is designed with you in mind. Here’s what to look forward to: + +- **Seamless Integration**: Transitioning from multiple subdomains to a single address without losing track of your favorite resources. We will keep many pages the same as before. Page-based transitions will be made over a longer period of time. + +- **Improved Support and Documentation**: We will merge commercial and open-source docs into a single address so it'll be easier to access our documentation. + + + +## Your journey with us during this transition + +We know that change is overwhelming, but we are trying to provide a smooth transition. Here's how we're making it seamless for you: + +🚩 **No Immediate Action Required**: Your existing bookmarks and links will continue to work, automatically redirecting you to the new unified platform. + +🎗 **Stay Informed**: We will keep you updated with guides and support during the transition. + +📧 **We’re Here to Help**: Our support team is ready to assist you with any questions or concerns. If you have any issues, you can contact us at our Discord channel or send an email to info@abp.io. + + + +## Looking Ahead + +This upgrade is another milestone in our journey together. Thank you for your support and feedback, which have been instrumental in making this transition possible. Stay tuned for more updates, and here's to a new chapter together at ABP.IO! + + + +Happy coding 🫡 + +ABP.IO Team \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-04-08-abpio-platform-81-final-has-been-released/post.md b/docs/en/Community-Articles/2024-04-08-abpio-platform-81-final-has-been-released/post.md new file mode 100644 index 0000000000..3a2bc44731 --- /dev/null +++ b/docs/en/Community-Articles/2024-04-08-abpio-platform-81-final-has-been-released/post.md @@ -0,0 +1,78 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 8.1 versions have been released today. + +## What's New With Version 8.1? + +All the new features were explained in detail in the [8.1 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-1-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 8.1 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 8.1 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v8.x or earlier: + +* [ABP Framework 8.0 to 8.1 Migration Guide](https://docs.abp.io/en/abp/8.1/Migration-Guides/Abp-8_1) +* [ABP Commercial 8.0 to 8.1 Migration Guide](https://docs.abp.io/en/commercial/8.1/migration-guides/v8_1) + +## Community News + +### New ABP Community Posts + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [Adding a Module to an ABP project made simple](https://community.abp.io/posts/adding-a-module-to-an-abp-project-made-simple-a8zw0j2m) by [Bart Van Hoey](https://twitter.com/@bartvanhoey) +* [Getting started with Abp Vue UI](https://community.abp.io/posts/getting-started-with-abp-vue-ui-4vfiv5io) by [Sajankumar Vijayan](https://community.abp.io/members/Sajan) +* [Liming Ma](https://github.com/maliming) has created **two** new community articles: + * [How to share the cookies between subdomains](https://community.abp.io/posts/how-to-share-the-cookies-between-subdomains-jfrzggc2) + * [Using Testcontainers in ABP Unit Test](https://community.abp.io/posts/using-testcontainers-in-abp-unit-test-b67gzpxg) +* [Ahmed Tarek](https://github.com/AhmedTarekHasan) has created **three** new community articles: + * [Strategy Design Pattern In .NET C#](https://community.abp.io/posts/strategy-design-pattern-in-.net-c-vcgv11h5) + * [Mediator Design Pattern In .NET C#](https://community.abp.io/posts/mediator-design-pattern-in-.net-c-pdsjp93n) + * [SOLID: Liskov Substitution Principle Explained In .NET C#](https://community.abp.io/posts/solid-liskov-substitution-principle-explained-in-.net-c-hx2z8vo9) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +### New ABP Blog Posts + +There are also some exciting blog posts written by the ABP team. You can see the following list for some of those articles: + +* [Announcement: Our New ABP.IO Unified Platform](https://blog.abp.io/abp/our-new-abp.io-unified-platform) by [Alper Ebicoglu](https://twitter.com/alperebicoglu) +* [Join ABP.IO at Modern .NET Web Day](https://blog.abp.io/abp/Join-ABP.IO-at-Modern-.NET-Web-Day) by [Roo Xu](https://github.com/Roo1227) + +## About the Next Version + +The next feature version will be 8.2. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-04-16-welcome-to-abp-dotnet-conf24-a-decade-of-net-innovation/3a11fced7109d5f4d3c23920ecb5eec2.png b/docs/en/Community-Articles/2024-04-16-welcome-to-abp-dotnet-conf24-a-decade-of-net-innovation/3a11fced7109d5f4d3c23920ecb5eec2.png new file mode 100644 index 0000000000..ac776fa613 Binary files /dev/null and b/docs/en/Community-Articles/2024-04-16-welcome-to-abp-dotnet-conf24-a-decade-of-net-innovation/3a11fced7109d5f4d3c23920ecb5eec2.png differ diff --git a/docs/en/Community-Articles/2024-04-16-welcome-to-abp-dotnet-conf24-a-decade-of-net-innovation/post.md b/docs/en/Community-Articles/2024-04-16-welcome-to-abp-dotnet-conf24-a-decade-of-net-innovation/post.md new file mode 100644 index 0000000000..92635c6f7e --- /dev/null +++ b/docs/en/Community-Articles/2024-04-16-welcome-to-abp-dotnet-conf24-a-decade-of-net-innovation/post.md @@ -0,0 +1,107 @@ +🌟Hey .NET community! + +We are excited to invite you to join us for the **[ABP Dotnet Conference 2024](https://abp.io/conference/2024)**, taking place online on **May 8-9, 2024**! As we celebrate the 10th anniversary of the **[ABP.IO](https://www.abp.io/)**, sign up for an expanded two-day event packed with even more engaging workshops & talks that promises to deepen your expertise and expand your connections within the .NET ecosystem. + +Building on the success of last year’s event [ABP Dotnet Conf'23](https://abp.io/conference/2023), we are more than excited to bring together passionate developers, renowned speakers, and industry leaders from across the globe once again, for industrial knowledge, inspiration, and networking opportunities. + + + +## Why Attend? + +**[ABP Dotnet Conf'24](https://abp.io/conference/2024)** offers a unique blend of learning and networking opportunities tailored for the .NET community. + +**Industry-Leading Speakers:** Gain insights from pioneers and innovators in the .NET landscape. Expect practical advice, forward-thinking strategies, and inspiring stories that can move your projects and career forward. + +   +**Engaging Formats:** From engaging workshops to enlightening keynote & insightful talks, experience a variety of session formats designed to fit in all levels of expertise. Special highlights include workshops on modern .NET technologies and a keynote that explores career growth through creative practices. + +**Interactive Networking:** Embrace the full conference experience online with features designed to reach the most aspects of in-person events. Engage with experts and peers through live Q&As, virtual meet-ups, and interactive chat rooms. + + + + +## Speakers & Agenda + +As we always be careful with topics we choose on our regular **[ABP Community Talks](https://community.abp.io/events)**, to ensure a great experience for our audience, the same effort behind, for our **[ABP Dotnet Conf’24](https://abp.io/conference/2024)**, we have thoughtfully selected topics and expert speakers to deliver sessions filled with deep insights and inspiration. Our speakers for the **[ABP Dotnet Conference 2024](https://abp.io/conference/2024)**, chosen for their deep expertise, are set to deliver sessions that promise both inspiration and in-depth knowledge to all our attendees. See the crafted **Workshops & Talks** agenda overview: + + +📌 **Day 1 Workshops - May 8th** 📌 + +* 🎙️[Johan Smarius](https://abp.io/conference/2024/speakers/johan-smarius), Building a GraphQL Server in .NET 8 +* 🎙️[Wojciech Krasa](https://abp.io/conference/2024/speakers/wojciech-krasa), Testing framework with PostgreSQL and Testcontainers for .NET +* 🎙️[Ahmet Faruk Ulu](https://abp.io/conference/2024/speakers/ahmet-faruk-ulu), ABP Framework Essentials: Crafting Your SaaS Success Story  +* 🎙️[Alberto Acerbis](https://abp.io/conference/2024/speakers/alberto-acerbis) &  [Ferdinando Santacroce](https://abp.io/conference/2024/speakers/ferdinando-santacroce), Tackling Chaos, Resilience & Metrics in the heart of your Application +* 🎙️[Omkar Choudhari](https://abp.io/conference/2024/speakers/omkar-choudhari) & [Aman Sharma](https://abp.io/conference/2024/speakers/aman-sharma), Building your own copilot with ABP chat module +* 🎙️[Stefan Pölz](https://abp.io/conference/2024/speakers/stefan-polz), Let's Build an incremental source generator with Roslyn +* 🎙️[Ryan Niño Dizon](https://abp.io/conference/2024/speakers/ryan-nino-dizon), Building a Serverless Backend API with Azure Functions +* 🎙️[Kaushik Gokhale](https://abp.io/conference/2024/speakers/kaushik-gokhale) & Omkar Choudhari, React ♥ ABP: Next-Level Frontend Workshop for 3x Acceleration +* 🎙️[Rebai Hamida](https://abp.io/conference/2024/speakers/rebai-hamida), Build containerized application using Docker and Azure + + + +📌 **Day 2 Talks - May 9th** 📌 + +* 🎙️[Hannes Lowette](https://abp.io/conference/2024/speakers/hannes-lowette), Keynote: Manage your career, the Mario Kart way +* 🎙️[Engincan Veske](https://abp.io/conference/2024/speakers/engincan-veske), Sentiment Analysis in .NET +* 🎙️[Jessica Engström](https://abp.io/conference/2024/speakers/jessica-engstrom), Practical tips to improve your UX and accessibility +* 🎙️[Irina Scurtu](https://abp.io/conference/2024/speakers/irina-scurtu), .NET gRPC - deep dive +* 🎙️[Dino Esposito](https://abp.io/conference/2024/speakers/dino-esposito), In Defense of ASP.NET and Server-side Web +* 🎙️[Alexej Sommer](https://abp.io/conference/2024/speakers/alexej-sommer), Security for ASP.NET developers +* 🎙️[Adora Nwodo](https://abp.io/conference/2024/speakers/adora-nwodo), Designing Secure Cloud Native Apps with .NET and Azure +* 🎙️[Nicola Iarocci](https://abp.io/conference/2024/speakers/nicola-iarocci), C# 12 What's new and interesting +* 🎙️[Jimmy Engström](https://abp.io/conference/2024/speakers/jimmy-engstrom), Connecting gadgets to Blazor +* 🎙️[Juergen Gutsch](https://abp.io/conference/2024/speakers/juergen-gutsch), Building cloud native applications with .NET Aspire +* 🎙️[Halil Ibrahim Kalkan](https://abp.io/conference/2024/speakers/halil-ibrahim-kalkan), Designing Modular Monolith for Microservice Architecture +* 🎙️[Shaun Lawrence](https://abp.io/conference/2024/speakers/shaun-lawrance), Building games in .NET MAUI +* 🎙️[Jamie Taylor](https://abp.io/conference/2024/speakers/jamie-taylor), Empathy, Sympathy and Compassion +* 🎙️[Cecil Phillip](https://abp.io/conference/2024/speakers/cecil-phillip), Building Microservices with Dapr and .NET +* 🎙️[Rebai Hamida](https://abp.io/conference/2024/speakers/rebai-hamida), Embracing .NET 8.0: Leveraging New Features for Modern Application Development +* 🎙️[Sergei Gorlovetsky](https://abp.io/conference/2024/speakers/sergei-gorlovetsky), Optimizing ABP Deployments: Strategies and Best Practices with Helm and Kubernetes +* 🎙️[Todd Gardner,](https://abp.io/conference/2024/speakers/todd-gardner) Success On Your Own Terms +* 🎙️[Brian Gorman](https://abp.io/conference/2024/speakers/brian-gorman), Protecting Your Secrets using Azure Key Vault, Azure App Configuration, GitHub and C# MVC +* 🎙️[Mitchel Sellers](https://abp.io/conference/2024/speakers/mitchel-sellers), Architecting ASP.NET Core for Geo-Distributed Deployment + + + + +## What's New This Year? + +* **Enhanced Community Interaction:** An open attendee hub to join a chat with others at the event, or meet in video discussion groups. + +* **Instant Networking:** Meet other people one-on-one at the event in 5-minute video calls from the comfort of where you are during the whole live event, Wednesday 8 May - Thursday 9 May. + +* **Raffles & Giveaways & Gifts:** Stay connected with us, participate actively and stand a chance to win surprising prizes from us & our sponsors. + + + + + + + + +**[ABP Dotnet Conf'24](https://abp.io/conference/2024)** goes beyond just-a-conference. It’s a fun meet-up for the .NET community, fostering collaboration and growth. It's absolutely great for anyone passionate about .NET. Don't miss out on this landmark conference that celebrates a decade of ABP and the vibrant growth of the .NET community.  + + +**🚨 Registration Ends:** May 9, 2024 at 5:00 PM (UTC +0) + +**🗓 Event Dates:** May 8-9, 2024 + +**⏰ Event Times:** Sessions will run from 09:00 AM to 5:00 PM (UTC +0) + + +### > **[REGISTER NOW](https://web-eur.cvent.com/event/181460e1-5a3e-4dd6-9bbd-2b900050e01d/regProcessStep1?environment=production-eu)** +###
+### + + + + + +![1920_1080-1.png](3a11fced7109d5f4d3c23920ecb5eec2.png) + + +Special thanks to our sponsors [WAi Technologies](https://waiin.com/),[ Decision Tree](https://decisiontree.tech/), [DM Consulting](https://www.dmconsulting.it/en/), [HeadChannel](https://headchannel.co.uk/), [3S Studio](https://3sstudio.com/), [Kuem](https://www.kuem.si/en/), [Mailtrap](https://mailtrap.io/), and event partners [Microsoft](https://www.microsoft.com/), [.NET Foundation](https://dotnetfoundation.org/), [JetBrains](https://www.jetbrains.com/), [Packt Publishing](https://www.packtpub.com/), [dotnetdays](https://dotnetdays.ro/),[ International Conference Alerts](https://internationalconferencealerts.com/) who make this event possible and more impactful. + + + +See you there at #abpconf24 and celebrate a decade of ABP with the global .NET community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-04-19-Performing-Case-Insensitive-Search-In-Postgresql/POST.md b/docs/en/Community-Articles/2024-04-19-Performing-Case-Insensitive-Search-In-Postgresql/POST.md index e4f763f279..5eb4a5bd98 100644 --- a/docs/en/Community-Articles/2024-04-19-Performing-Case-Insensitive-Search-In-Postgresql/POST.md +++ b/docs/en/Community-Articles/2024-04-19-Performing-Case-Insensitive-Search-In-Postgresql/POST.md @@ -120,6 +120,12 @@ After these configurations, you should create a migration and apply it to your d However, this solution comes with some problems, for example, by using non-deterministic collations, it's not yet possible to use pattern-matching operators such as `LIKE` on columns. This is a huge problem because it makes it hard to use LINQ. For example, you can't use the `.EndsWith` or `.StartsWith` methods, because they are [translated to `LIKE` command on the SQL level](https://www.npgsql.org/efcore/mapping/translations.html). +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Conclusion In PostgreSQL, you can perform case-insensitive searches by using the `citext` data type or by utilizing collation settings. Nevertheless, if you have an ABP-based PostgreSQL application or a plain .NET application with PostgreSQL as the database option, to make a decision to pick one of these options, you can follow the following points: diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1039888d362b74f377ad5d7a8.png b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1039888d362b74f377ad5d7a8.png new file mode 100644 index 0000000000..75c21a9693 Binary files /dev/null and b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1039888d362b74f377ad5d7a8.png differ diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc13e410e85f86a8cada595c4ba.png b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc13e410e85f86a8cada595c4ba.png new file mode 100644 index 0000000000..ed1483f343 Binary files /dev/null and b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc13e410e85f86a8cada595c4ba.png differ diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc16be482de862d5cdef1ff74a3.png b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc16be482de862d5cdef1ff74a3.png new file mode 100644 index 0000000000..4d299da6ee Binary files /dev/null and b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc16be482de862d5cdef1ff74a3.png differ diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc196f7f658dad6eded9fb78ad0.png b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc196f7f658dad6eded9fb78ad0.png new file mode 100644 index 0000000000..2e4dadafc6 Binary files /dev/null and b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc196f7f658dad6eded9fb78ad0.png differ diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1b7ca559908f2d1b149d2a6c8.png b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1b7ca559908f2d1b149d2a6c8.png new file mode 100644 index 0000000000..ba1f421339 Binary files /dev/null and b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1b7ca559908f2d1b149d2a6c8.png differ diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1f4879a000ebb2a81da3cf8b8.png b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1f4879a000ebb2a81da3cf8b8.png new file mode 100644 index 0000000000..2b5bc20678 Binary files /dev/null and b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/3a122bc1f4879a000ebb2a81da3cf8b8.png differ diff --git a/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/post.md b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/post.md new file mode 100644 index 0000000000..728fdf4f31 --- /dev/null +++ b/docs/en/Community-Articles/2024-04-26-unifying-the-abp-platform/post.md @@ -0,0 +1,108 @@ +I am very excited to announce that some big changes and improvements are coming to the ABP.IO Platform soon. In this post, I will explain the changes we are currently working on. Here, a brief list of these changes: + +* We are merging the subdomains of the ABP.IO Platform websites: Community.abp.io, commercial.abp.io, blog.abp.io, docs.abp.io websites and their contents are being merged into the main domain, abp.io. +* ABP (open source) and ABP Commercial documents are being merged into a single documentation. +* Introducing ABP Studio Community Edition. + +These changes won't effect the license conditions. The open source part will remain the same and the commercial license contents will also be the same. The aim of the changes is to make the platform more consistent, holistic, understandable and easy to start. + +Let's dive deep... + +## Merging the ABP.IO Websites + +ABP.IO website has many subdomains currently: + +* **abp.io**: Home page of the open source ABP Framework project. +* **community.abp.io**: A website that community can share contents and we organize events. +* **commercial.abp.io**: A website to promote and sell commercial ABP licenses which have pre-built modules, themes, tooling and support on top of the ABP Framework. +* **docs.abp.io**: The technical documentation of the ABP Framework and ABP Commercial. +* **blog.abp.io**: A blog website to announce the news on the platform. +* **support.abp.io**: Premium support for the ABP Commercial customers. + +All these subdomains (except the support website for now) are being merged to the abp.io domain. All their contents and UI designs are being revised and enriched. + +Some fundamental purposes of that change are; + +* Making content more coherent and holistic, +* Making the design more harmonious, +* Making the contents of the old subdomains more visible and reachable, +* Allow you to navigate through the web pages much easier, +* Reducing duplications between different websites, + +I will highlight a few important changes in the next sections. + +### The New Mega Menu + +As I said above, the abp.io UI design is also being revised. One of the big revisions is the main menu. We are replacing the current main navigation by a mega menu as shown in the following figure: + +![new-mega-menu.png](3a122bc1039888d362b74f377ad5d7a8.png) + +We believe that new mega menu will allow you to navigate through the web pages much easier. + +### The New Get Started Page + +We are constantly working to improve ABP's onboarding experience. With the new platform changes, we now offer ABP Studio as the starting point for the ABP Platform. You can still use the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) to created new ABP solutions, but the new ABP Studio makes it much easier and understandable. It also provides features to easily run and monitor your applications, even in the Community edition. + +![new-get-started.png](3a122bc13e410e85f86a8cada595c4ba.png) + +You can easily download and install ABP Studio, login with your abp.io account and create your first ABP solution. + +### The New Pricing Page + +Since the [ABP Commercial website](https://commercial.abp.io/) has merged with the main website, you will see the *Pricing* page located on the main menu of the abp.io website. We have completely revised the design and content of this page to better reflect which features are open source and free, and what is included in the paid licenses. + +![new-pricing.png](3a122bc16be482de862d5cdef1ff74a3.png) + +As mentioned above, all the free & open source features are still free & open source. In addition, we included the ABP Studio Community edition (will be explained below) to the free license. + +## Merging the ABP Platform Documentation + +Currently, ABP Framework (open source) and ABP Commercial [documents](https://docs.abp.io/) are completely separated. You can switch between them on the left side: + +![docs-project-selection.png](3a122bc196f7f658dad6eded9fb78ad0.png) + +Based on our and customers' experiences, there are some problems with that approach: + +* Getting started, development tutorials, release notes, road map and some other documents are duplicated (or very similar) among ABP Framework and ABP Commercial documents. +* For ABP Commercial users, it is not clear if they also need to read the ABP Framework (open source) documentation or not. Also, when they read the framework document, some parts are different for ABP Commercial users, and it is also not clear in some cases. + +We are currently working to completely merge the ABP Framework (open source) and ABP Commercial documentation, remove duplications and revisit the contents. We will clearly indicate if a part of a document requires a paid license. + +The left navigation panel tree is also completely revisited and simplified: + +![docs-new-navigation.png](3a122bc1b7ca559908f2d1b149d2a6c8.png) + +## The ABP Studio Community Edition + +[ABP Studio](https://docs.abp.io/en/commercial/latest/studio/index) is a cross-platform desktop application designed for ABP and .NET developers. It aims to provide a comfortable development environment by automating tasks, providing insights about your solution, and simplifying the processes of creation, development, execution, browsing, monitoring, tracing, and deploying your solutions. + +Here, a screenshot from the *Solution Runner* screen of ABP Studio: + +![abp-studio-solution-runner.png](3a122bc1f4879a000ebb2a81da3cf8b8.png) + +ABP Studio has been started as a commercial product, as a part of [ABP Commercial](https://commercial.abp.io/). We are very excited to announce that the *Community Edition* will be available soon for free. It will have some missing features and limitations compared to the full edition, but will be enough to create, explore and run ABP solutions easily. + +We will be offering ABP Studio as a starting point to the ABP platform. The [Getting Started](https://docs.abp.io/en/abp/latest/Getting-Started-Overall) and other documents will use ABP Studio to create new solutions and perform ABP-related operations. + +## Other News + +We are also working on some other topics related to these changes. Some of them are; + +* Completely renewing the [startup templates](https://docs.abp.io/en/abp/latest/Startup-Templates/Index) (with ABP Studio), so they will be more flexible and will provide more options. +* Providing a tool to automatically convert ABP solutions created with open source startup templates into ABP commercial. + +## Questions + +I tried to explain all the important changes in this post. However, you may have some questions in your mind. + +### What should open source users expect? + +Since the [ABP Commercial](https://commercial.abp.io/) website content is merged with the main [abp.io](https://abp.io/) website, you will see paid features being introduced on the main website. The pricing page will also be available on the same website. This may lead you to wonder whether the ABP Platform is a fully paid product. The simple answer to this question is "No". Actually, nothing has changed on the open source side. Everything will be the same. Additionally, open source users will now have ABP Studio Community Edition for free. So open source has more for its users than before. + +### What should ABP Commercial customers expect? + +ABP Commercial license holders may wonder if any license change happens. The answer is "No". All the license types, rules, restrictions and features are the same. With the changes explained in this post, you will follow the documentation easier (since you won't need to go to another website for the framework documentation) and you will better understand what special features are available to you. + +## Last Words + +With this post, we wanted to announce the changes to be made on the ABP platform to the ABP community, so don't be surprised or curious about what happened. If you have any questions or suggestions, feel free to write a comment for this blog post or send an email to info@abp.io. \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-05-06-join-us-at-abp-dotnet-conf-2024-in-just-3-days/post.md b/docs/en/Community-Articles/2024-05-06-join-us-at-abp-dotnet-conf-2024-in-just-3-days/post.md new file mode 100644 index 0000000000..5f8deaceda --- /dev/null +++ b/docs/en/Community-Articles/2024-05-06-join-us-at-abp-dotnet-conf-2024-in-just-3-days/post.md @@ -0,0 +1,11 @@ +We're only three days away from the **[ABP Dotnet Conference 2024](https://abp.io/conference/2024)**. As we prepare to celebrate a decade of innovation in .NET, we want to make sure that no one misses out on the opportunity to be part of this exciting event. + +### Special Offer for Students +We are pleased to provide free tickets for students who are passionate about learning and growing in their careers. Don’t miss this chance to connect with industry leaders and peers at no cost.  If you are a student passionate about dotnet technologies, do not miss your chance to register for a **Free Ticket** on **Day 2, May 9th**. Secure your spot now by filling out the **[👉Student Registration Form👈](https://docs.google.com/forms/u/1/d/e/1FAIpQLSeExnaZ5KKO4D-AtuxBVm3qon7kqyAT8fPuxzrOFuoaEQEVcA/viewform?usp=send_form)** + + +### What to Expect +As highlighted in our [Previous Welcome Blog](https://blog.abp.io/abp/Welcome-to-ABP-Dotnet-Conf%252724%253A-A-Decade-of-.NET-Innovation), **[ABP Dotnet Conf 2024](https://abp.io/conference/2024)** promises to be a remarkable 2-day virtual event with 29 expert speakers, hands-on workshops & talks sessions, and networking opportunities designed to inspire and engage. Whether you're a seasoned developer or a student just starting your career, this conference is the perfect place to deepen your knowledge and connect with other professionals. + + +We look forward to welcoming you to what promises to be an unforgettable event. Let's celebrate the innovations and progress of the .NET ecosystem together at #abpconf24! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-05-10-Sentiment-Analysis-within-ABP-Based-Application/POST.md b/docs/en/Community-Articles/2024-05-10-Sentiment-Analysis-within-ABP-Based-Application/POST.md index e6417b70ce..deb162bcba 100644 --- a/docs/en/Community-Articles/2024-05-10-Sentiment-Analysis-within-ABP-Based-Application/POST.md +++ b/docs/en/Community-Articles/2024-05-10-Sentiment-Analysis-within-ABP-Based-Application/POST.md @@ -4,6 +4,12 @@ In this article, first I will briefly explain what sentiment analysis is and the We will use ML.NET Framework, which is an open-source machine learning framework created by the dotnet team and also we will create a layered ABP Solution by using the application template and finally we will use CMS Kit's Comment Feature and extend its behavior by adding spam detection while creating or updating a comment, at that point we will make sentiment analysis. +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Sentiment Analysis [Sentiment Analysis (or opinion mining)](https://en.wikipedia.org/wiki/Sentiment_analysis) refers to determining the emotion from the given input. The primary goal of sentiment analysis is to identify, extract, and categorize (positive, negative, or neutral) the sentiments expressed in textual data. @@ -333,6 +339,12 @@ Then, finally, we can run the application to see the final results: Once the model is trained and evaluated, we can save the trained model and use it directly for further use. In this way, you don’t have to retrain the model every time when you want to make predictions. It’s essential to save the trained model for future use and a must for the production-ready code. I created a separate article dedicated to that topic, and if you are interested, you can read it from [here](https://engincanv.github.io/machine-learning/sentiment-analysis/best-practises/2024/05/16/reusing-and-optimizing-machine-learning-models-in-dotnet.html). +--- +> 🛠 Liked this post? I now share all my content on Substack — real-world .NET, AI, and scalable software design. +> 👉 Subscribe here → engincanveske.substack.com +> 🎥 Also, check out my YouTube channel for hands-on demos and deep dives: https://www.youtube.com/@engincanv +--- + ## Conclusion In this article, I briefly explain what sentiment analysis is, created a sample ABP-based application, integrated the CMS Kit Module and finally, applied sentiment analysis to make spam checks whenever a new comment has been submitted or updated. You can get the source code of the demo from [https://github.com/EngincanV/SentimentAnalysisDemo](https://github.com/EngincanV/SentimentAnalysisDemo) diff --git a/docs/en/Community-Articles/2024-05-16-abp-dotnet-conference-2024-wrap-up/Screenshot-2024-05-13-at-20-18-36.png b/docs/en/Community-Articles/2024-05-16-abp-dotnet-conference-2024-wrap-up/Screenshot-2024-05-13-at-20-18-36.png new file mode 100644 index 0000000000..6f0a1dee1b Binary files /dev/null and b/docs/en/Community-Articles/2024-05-16-abp-dotnet-conference-2024-wrap-up/Screenshot-2024-05-13-at-20-18-36.png differ diff --git a/docs/en/Community-Articles/2024-05-16-abp-dotnet-conference-2024-wrap-up/post.md b/docs/en/Community-Articles/2024-05-16-abp-dotnet-conference-2024-wrap-up/post.md new file mode 100644 index 0000000000..426b01639c --- /dev/null +++ b/docs/en/Community-Articles/2024-05-16-abp-dotnet-conference-2024-wrap-up/post.md @@ -0,0 +1,57 @@ +Hello and gratitude, ABP.IO Community! + +It was an absolute blast to upgrade ABP Dotnet Conference with a 1-day of workshops and an additional parallel session of talks! With ABP Dotnet Conference 2024, we marked a decade of innovation and community engagement. This year's event, besides being our second full-day(for both days!) ABP Community event, it has another special significance as we celebrated the 10th anniversary of ABP this year. The overwhelming interest and participation of live viewers and speakers from all around the world made this milestone truly memorable. + +From the nature of virtual conference, once again we were able to transcend geographical boundaries, uniting .NET developers from diverse cultures and 52 different countries. The map below showcases the countries of our live viewers, with darker shades indicating higher minutes viewed. Witnessing the global reach and impact of our conference fills us with immense pride and joy. We are grateful to each live viewer who dedicated their time and actively participated in the ABP Dotnet Conference 2024. Your presence and engagement played a crucial role in the success of the event. + +![Live Viewers Map](Screenshot-2024-05-13-at-20-18-36.png) + +The success of ABP Dotnet Conference 2024 would not have been possible without the contributions of our talented speakers. This year, we featured an impressive lineup of 29 speakers from all over the world, including .NET experts and Microsoft MVPs, who delivered captivating talks that resonated with our audience. Each session sparked curiosity and generated numerous questions, leading to enriching discussions. We extend our deepest appreciation to each speaker for their valuable insights and for sharing their knowledges with the attendees. Here’s a reminder of our speakers and their talk titles: + +📌 **Day 1 Workshops - May 8th, 2024** 📌 + +* 🎙️[Johan Smarius](https://abp.io/conference/2024/speakers/johan-smarius), Building a GraphQL Server in .NET 8 +* 🎙️[Wojciech Krasa](https://abp.io/conference/2024/speakers/wojciech-krasa), Testing framework with PostgreSQL and Testcontainers for .NET +* 🎙️[Ahmet Faruk Ulu](https://abp.io/conference/2024/speakers/ahmet-faruk-ulu), ABP Framework Essentials: Crafting Your SaaS Success Story  +* 🎙️[Alberto Acerbis](https://abp.io/conference/2024/speakers/alberto-acerbis) &  [Ferdinando Santacroce](https://abp.io/conference/2024/speakers/ferdinando-santacroce), Tackling Chaos, Resilience & Metrics in the heart of your Application +* 🎙️[Omkar Choudhari](https://abp.io/conference/2024/speakers/omkar-choudhari) & [Aman Sharma](https://abp.io/conference/2024/speakers/aman-sharma), Building your own copilot with ABP chat module +* 🎙️[Stefan Pölz](https://abp.io/conference/2024/speakers/stefan-polz), Let's Build an incremental source generator with Roslyn +* 🎙️[Ryan Niño Dizon](https://abp.io/conference/2024/speakers/ryan-nino-dizon), Building a Serverless Backend API with Azure Functions +* 🎙️[Kaushik Gokhale](https://abp.io/conference/2024/speakers/kaushik-gokhale) & [Omkar Choudhari](https://abp.io/conference/2024/speakers/omkar-choudhari), React ♥ ABP: Next-Level Frontend Workshop for 3x Acceleration +* 🎙️[Rebai Hamida](https://abp.io/conference/2024/speakers/rebai-hamida), Build containerized application using Docker and Azure + + + +📌 **Day 2 Talks - May 9th, 2024** 📌 + +* 🎙️[Hannes Lowette](https://abp.io/conference/2024/speakers/hannes-lowette), Keynote: Manage your career, the Mario Kart way +* 🎙️[Engincan Veske](https://abp.io/conference/2024/speakers/engincan-veske), Sentiment Analysis in .NET +* 🎙️[Jessica Engström](https://abp.io/conference/2024/speakers/jessica-engstrom), Practical tips to improve your UX and accessibility +* 🎙️[Irina Scurtu](https://abp.io/conference/2024/speakers/irina-scurtu), .NET gRPC - deep dive +* 🎙️[Dino Esposito](https://abp.io/conference/2024/speakers/dino-esposito), In Defense of ASP.NET and Server-side Web +* 🎙️[Alexej Sommer](https://abp.io/conference/2024/speakers/alexej-sommer), Security for ASP.NET developers +* 🎙️[Adora Nwodo](https://abp.io/conference/2024/speakers/adora-nwodo), Designing Secure Cloud Native Apps with .NET and Azure +* 🎙️[Nicola Iarocci](https://abp.io/conference/2024/speakers/nicola-iarocci), C# 12 What's new and interesting +* 🎙️[Jimmy Engström](https://abp.io/conference/2024/speakers/jimmy-engstrom), Connecting gadgets to Blazor +* 🎙️[Juergen Gutsch](https://abp.io/conference/2024/speakers/juergen-gutsch), Building cloud native applications with .NET Aspire +* 🎙️[Halil Ibrahim Kalkan](https://abp.io/conference/2024/speakers/halil-ibrahim-kalkan), Designing Modular Monolith for Microservice Architecture +* 🎙️[Shaun Lawrence](https://abp.io/conference/2024/speakers/shaun-lawrance), Building games in .NET MAUI +* 🎙️[Jamie Taylor](https://abp.io/conference/2024/speakers/jamie-taylor), Empathy, Sympathy and Compassion +* 🎙️[Cecil Phillip](https://abp.io/conference/2024/speakers/cecil-phillip), Building Microservices with Dapr and .NET +* 🎙️[Rebai Hamida](https://abp.io/conference/2024/speakers/rebai-hamida), Embracing .NET 8.0: Leveraging New Features for Modern Application Development +* 🎙️[Sergei Gorlovetsky](https://abp.io/conference/2024/speakers/sergei-gorlovetsky), Optimizing ABP Deployments: Strategies and Best Practices with Helm and Kubernetes +* 🎙️[Todd Gardner,](https://abp.io/conference/2024/speakers/todd-gardner) Success On Your Own Terms +* 🎙️[Brian Gorman](https://abp.io/conference/2024/speakers/brian-gorman), Protecting Your Secrets using Azure Key Vault, Azure App Configuration, GitHub and C# MVC +* 🎙️[Mitchel Sellers](https://abp.io/conference/2024/speakers/mitchel-sellers), Architecting ASP.NET Core for Geo-Distributed Deployment + + We are humbled by all ABP Community Members', conference attendees', speakers' and sponsors' support and inspired by the connections forged through shared knowledge. + +The ABP Dotnet Conference 2024 platform's interactive strucutre provided an ideal environment for attendees to engage with the speakers as well as with themselves. The depth of the talks and workshops presented and the multitude of questions asked during the Q&A sessions highlighted the intellectual curiosity of our audience. Each question laid the foundation for engaging discussions, enriching the experience for everyone involved. The exchange of ideas and diverse perspectives showcased the beauty of inclusiveness at the ABP Dotnet Conference 2024. + +Of course, our valuable sponsors deserves a huge special thanks to encourage us to make ABP Dotnet Conference 2024 happen again! Thanks to our sponsors [WAi Technologies](https://waiin.com/), [Decision Tree](https://decisiontree.tech/), [DM Consulting](https://www.dmconsulting.it/en/), [HeadChannel](https://headchannel.co.uk/blog/community-abp.10-posts-submit/), [3S Studio](https://3sstudio.com/), [Kuem](https://www.kuem.si/en/), [Mailtrap](https://mailtrap.io/), and event partners [Microsoft](https://www.microsoft.com/), [.NET Foundation](https://dotnetfoundation.org/), [JetBrains](https://www.jetbrains.com/), [Packt Publishing](https://www.packtpub.com/), [dotnetdays](https://dotnetdays.ro/),[ International Conference Alerts](https://internationalconferencealerts.com/) who make this event possible and more impactful. + +Thank you all for making the ABP Dotnet Conference 2024 great again! We look forward to many more years of innovation and community collaboration. Here’s to another decade of growth and learning together! + +Hope to see you all and more on the next one! + +[Visit ABP Dotnet Conference 2024's website for more information](https://abp.io/conference/2024) \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc3a52aac05d08a0fe3ca28bd69.gif b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc3a52aac05d08a0fe3ca28bd69.gif new file mode 100644 index 0000000000..ecd9819d53 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc3a52aac05d08a0fe3ca28bd69.gif differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc3e2227b31914fbc8227a39369.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc3e2227b31914fbc8227a39369.png new file mode 100644 index 0000000000..2b2aa17308 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc3e2227b31914fbc8227a39369.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc4025ef90a3c26cbecd1b2483c.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc4025ef90a3c26cbecd1b2483c.png new file mode 100644 index 0000000000..82856c45b2 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc4025ef90a3c26cbecd1b2483c.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc413b69c663fb44dd26d593dea.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc413b69c663fb44dd26d593dea.png new file mode 100644 index 0000000000..d2dcfddc5c Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc413b69c663fb44dd26d593dea.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc43db80882c4d63aa228c8784f.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc43db80882c4d63aa228c8784f.png new file mode 100644 index 0000000000..a6b64ee986 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc43db80882c4d63aa228c8784f.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc44f7b46307c446e2072c0e64c.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc44f7b46307c446e2072c0e64c.png new file mode 100644 index 0000000000..2b6d2fdf95 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc44f7b46307c446e2072c0e64c.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc802ce68a2f11bbb3655581faa.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc802ce68a2f11bbb3655581faa.png new file mode 100644 index 0000000000..5a6f8d1186 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc802ce68a2f11bbb3655581faa.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc81a41e7f2141587ed6bea6838.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc81a41e7f2141587ed6bea6838.png new file mode 100644 index 0000000000..5871984876 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc81a41e7f2141587ed6bea6838.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc83546d342d1228c9009b0d42a.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc83546d342d1228c9009b0d42a.png new file mode 100644 index 0000000000..5a6373be10 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc83546d342d1228c9009b0d42a.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc849a78f7cea57557bb834e3a4.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc849a78f7cea57557bb834e3a4.png new file mode 100644 index 0000000000..ed774fd4fd Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc849a78f7cea57557bb834e3a4.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8642a002d1a4e879130667553.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8642a002d1a4e879130667553.png new file mode 100644 index 0000000000..4c20ced391 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8642a002d1a4e879130667553.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8817dc1f3e8c351ca458a6d23.jpg b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8817dc1f3e8c351ca458a6d23.jpg new file mode 100644 index 0000000000..48a71dc881 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8817dc1f3e8c351ca458a6d23.jpg differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc898d5155cc068b1fa85da469a.jpg b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc898d5155cc068b1fa85da469a.jpg new file mode 100644 index 0000000000..639d49176a Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc898d5155cc068b1fa85da469a.jpg differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8b7c12bc3ce1b904e74792a6f.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8b7c12bc3ce1b904e74792a6f.png new file mode 100644 index 0000000000..f37435dc0e Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8b7c12bc3ce1b904e74792a6f.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8cda3abdfcb3556b6390258a7.png b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8cda3abdfcb3556b6390258a7.png new file mode 100644 index 0000000000..a14a47a5a0 Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/3a12bcc8cda3abdfcb3556b6390258a7.png differ diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/post.md b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/post.md new file mode 100644 index 0000000000..c3eadb6419 --- /dev/null +++ b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/post.md @@ -0,0 +1,268 @@ +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **8.2 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 v8.2! Thanks to all of you. + +## Get Started with the 8.2 RC + +Follow the steps below to try version 8.2.0 RC today: + +1) **Upgrade** the ABP CLI to version `8.2.0-rc.3` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 8.2.0-rc.3 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 8.2.0-rc.3 +```` + +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/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 8.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v8.x or earlier: + +* [ABP Framework 8.x to 8.2 Migration Guide](https://docs.abp.io/en/abp/8.2/Migration-Guides/Abp-8_2) +* [ABP Commercial 8.x to 8.2 Migration Guide](https://docs.abp.io/en/commercial/8.2/migration-guides/v8_2) + +## What's New with ABP Framework 8.2? + +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: + +* Blazor Full-Stack Web App UI +* Introducing the `IBlockUiService` for Blazor UI +* Allowing Case-Insensitive Indexes for MongoDB +* Other News... + +### Blazor Full-Stack Web App UI + +ASP.NET Blazor in .NET 8 allows you to use a single powerful component model to handle all of your web UI needs, including server-side rendering, client-side rendering, streaming rendering, progressive enhancement, and much more! + +ABP v8.2.x supports the new Blazor Web App template, which you can directly create with the following command: + +```bash +abp new BookStore -t app -u blazor-webapp +``` + +When you create the project, you will typically see two main projects for Blazor UI, besides other projects: + +* **MyCompanyName.MyProjectName.Blazor.WebApp** (startup project of your application, and contains `App.razor` component, which is the root component of your application) +* **MyCompanyName.MyProjectName.Blazor.WebApp.Client** + +This new template overcomes the disadvantages of both Blazor WASM and Blazor Server applications and allows you to decide which approaches to use for a specific page or component. Therefore, you can imagine this new web UI as a combination of both Blazor Server and Blazor WASM. + +> This approach mainly overcomes the **large binary downloads of Blazor WASM**, and it resolves the Blazor Server's problem, which **always needs to be connected to the server via SignalR**. + +> If you are considering migrating your existing Blazor project to Blazor WebApp or want to learn more about this new template, please read the [Migrating to Blazor Web App](https://docs.abp.io/en/abp/8.2/Migration-Guides/Abp-8-2-Blazor-Web-App) guide. + +### Introducing the `IBlockUiService` for Blazor UI + +In this version, ABP Framework introduces the [`IBlockUiService`](https://docs.abp.io/en/abp/8.2/UI/Blazor/Block-Busy) for Blazor UI. This service uses UI Block API to disable/block the page or a part of the page. + +You just need to simply inject the `IBlockUiService` to your page or component and call the `Block` or `UnBlock` method to block/unblock the specified element: + +```csharp +namespace MyProject.Blazor.Pages +{ + public partial class Index + { + private readonly IBlockUiService _blockUiService; + + public Index(IBlockUiService _blockUiService) + { + _blockUiService = blockUiService; + } + + public async Task BlockForm() + { + /* + Parameters of Block method: + selectors: A string containing one or more selectors to match. https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector#selectors + busy : Set to true to show a progress indicator on the blocked area. + */ + await _blockUiService.Block(selectors: "#MySelectors", busy: true); + + //Unblocking the element + await _blockUiService.UnBlock(selectors: "#MySelectors"); + } + } +} + +``` + +Here is the resulting UI with all possible options (**block**, **block busy**, and **unblock**): + +![block-ui-service-blazor.gif](3a12bcc3a52aac05d08a0fe3ca28bd69.gif) + +### Allowing Case-Insensitive Indexes for MongoDB + +MongoDB allows case-insensitive string comparisons by using case-insensitive indexes. You can create a case-insensitive index by specifying a **collation**. + +To do that, you should override the `CreateModal` method, configure the `CreateCollectionOptions`, and specify the **collation** as below: + +```csharp +protected override void CreateModel(IMongoModelBuilder modelBuilder) +{ + base.CreateModel(modelBuilder); + + modelBuilder.Entity(b => + { + b.CreateCollectionOptions.Collation = new Collation(locale:"en_US", strength: CollationStrength.Secondary); + + b.ConfigureIndexes(indexes => + { + indexes.CreateOne( + new CreateIndexModel( + Builders.IndexKeys.Ascending("MyProperty"), + new CreateIndexOptions { Unique = true } + ) + ); + } + ); + }); +} +``` + +After this configuration, a unique index will be created for the `MyProperty` property and then you can perform case-insensitive string comparisons without the need to worry. See [#19073](https://github.com/abpframework/abp/pull/19073) for more information. + +### Other News + +* Angular package version has been updated to v17.3.0. See [#19915](https://github.com/abpframework/abp/pull/19915) for more info. +* OpenIddict [5.4.0 has been released on March 26](https://github.com/openiddict/openiddict-core/releases/tag/5.4.0). Therefore, we decided to upgrade the OpenIddict packages to v5.4.0. See [#19427](https://github.com/abpframework/abp/issues/19427). +* AutoMapper [13.0.1 was released on February 8](https://github.com/AutoMapper/AutoMapper/releases/tag/v13.0.1) and in this version, we upgraded AutoMapper packages to v13.0.1. See [#19564](https://github.com/abpframework/abp/pull/19564/). +* See other completed tasks in this version: [https://github.com/abpframework/abp/releases?q=8.2.0-rc](https://github.com/abpframework/abp/releases?q=8.2.0-rc&expanded=true) + +## What's New with ABP Commercial 8.2? + +We've also worked on ABP Commercial to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 8.2. + +### Session Management + +The [Session Management](https://docs.abp.io/en/commercial/8.2/modules/identity/session-management) feature allows you to prevent concurrent login and manage user sessions. You can allow concurrent login, allow only one session of the same device type, or logout from all other devices when a new session is created, by specifying in the settings page: + +![concurrent-login-settings.png](3a12bcc3e2227b31914fbc8227a39369.png) + +Also, you can view and manage users sessions on the `Users` page of the [Identity Module](https://docs.abp.io/en/commercial/8.2/modules/identity): + +![manage-user-sessions-1.png](3a12bcc4025ef90a3c26cbecd1b2483c.png) + +![manage-user-sessions-2.png](3a12bcc413b69c663fb44dd26d593dea.png) + +### Suite: File/Image Property + +In this version, ABP Suite allows you to add a file/image property for an entity. You can select "File" as the property type for your properties as in the following figure: + +![suite-file-property.png](3a12bcc43db80882c4d63aa228c8784f.png) + +Then, when you generate your entity and try to insert a record, you will see the file upload component on the create/update models: + +![suite-file-property-create.png](3a12bcc44f7b46307c446e2072c0e64c.png) + +You can upload a file with any supported extensions and under 10MB (this can be increased in the generated code, if you wish) and after that, you can download, delete and update the existing file any time you want: + +![](suite-file-upload-in-action.gif) + +> **Note:** This feature has already been implemented for MVC & Blazor UIs, but not implemented for Angular UI yet. We aim to implement it for Angular UI with v8.2.0. + +### Suite: DateOnly & TimeOnly Types + +In this version on, ABP Suite provides `DateOnly` and `TimeOnly` types as property types. You can select these types when you create an entity: + +![suite-dateonly-timeonly-properties.png](3a12bcc802ce68a2f11bbb3655581faa.png) + +Then, all related configurations (including db configurations) will be made by ABP Suite, and you will be able to see the fields in the UI: + +![suite-dateonly-timeonly-ui.png](3a12bcc81a41e7f2141587ed6bea6838.png) + +> **Note**: The `DateOnly` and `TimeOnly` types were introduced with .NET 6. Therefore, please make sure that all of your projects' target frameworks are .NET8+. With ABP v8.2, all startup templates target a single target framework, which is .NET8, so if you created your project with version 8.2+, you don't need to make any changes. + +### Periodic Log Deletion for Audit Logs + +In this version, the [Audit Logging Module](https://docs.abp.io/en/commercial/8.2/modules/audit-logging) provides a built-in periodic log deletion system. You can enable/disable the clean-up service system wide, in this way, you can turn off the clean up service for all tenants and their hosts: + +![audit-logging-module-global-settings.png](3a12bcc83546d342d1228c9009b0d42a.png) + +> If the system wide clean up service is enabled, you can configure the global *Expired Item Deletion Period* for all tenants and hosts. + +When configuring the global settings for the audit log module from the host side in this manner, ensure that each tenant and host uses the global values. If you want to set tenant/host-specific values, you can do so under *Settings* -> *Audit Log* -> *General*. This way, you can disable the clean up service for specific tenants or host. It overrides the global settings: + +![audit-logging-module-general-settings.png](3a12bcc849a78f7cea57557bb834e3a4.png) + +> **Note**: To view the audit log settings, you need to enable the feature. For the host side, navigate to *Settings* -> *Feature Management* -> *Manage Host Features* -> *Audit Logging* -> *Enable audit log setting management*. + +## Community News + +### ABP Dotnet Conf 2024 Wrap Up + +![abp-dotnet-conf-2024.png](3a12bcc8642a002d1a4e879130667553.png) + +We organized [ABP Dotnet Conference 2024](https://abp.io/conference/2024) on May 2024 and we are happy to share the success of the conference, which captivated overwhelmingly interested live viewers from all over the world. 29 great line up of speakers which includes .NET experts and Microsoft MVPs delivered captivating talks that resonated with the audiences. Each of the talks attracted a great amount of interest and a lot of questions, sparking curiosity in the attendees. + +Thanks to all speakers and attendees for joining our event. 🙏 + +> We shared our takeaways in a blog post, which you can read at [https://blog.abp.io/abp/ABP-Dotnet-Conference-2024-Wrap-Up](https://blog.abp.io/abp/ABP-Dotnet-Conference-2024-Wrap-Up). + +### DevDays Europe 2024 + +![devdays-europe.jpg](3a12bcc8817dc1f3e8c351ca458a6d23.jpg) + +Co-founder of [Volosoft](https://volosoft.com/), [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) gave a speech about "How to Build a Multi-Tenant ASP.NET Core Application" at the [DevDays Europe 2024](https://devdays.lt/) on the 20th of May. + +### DevOps Pro Europe 2024 + +![devops-pro-europe.jpg](3a12bcc898d5155cc068b1fa85da469a.jpg) + +We are thrilled to announce that the co-founder of [Volosoft](https://volosoft.com/) and Lead Developer of the [ABP Framework](https://abp.io/), [Halil Ibrahim Kalkan](https://x.com/hibrahimkalkan) gave a speech about "Building a Kubernetes Integrated Local Development Environment" in the [DevOps Pro Europe](https://devopspro.lt/) on the 24th of May. + +### Devnot Dotnet Conference 2024 + +We are happy to announce that core team members of the [ABP Framework](https://abp.io/), [Alper Ebiçoğlu](https://twitter.com/alperebicoglu) and [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) will give speeches at the [Devnot Dotnet Conference 2024](https://dotnet.devnot.com/) on 25th of May. + +[Alper Ebiçoğlu](https://twitter.com/alperebicoglu) will talk about **"AspNet Core & Multitenancy"**: + +![devnot-dotnet-conference-alper-ebicoglu.png](3a12bcc8b7c12bc3ce1b904e74792a6f.png) + +On the other hand, [Enis Necipoğlu](https://twitter.com/EnisNecipoglu) will talk about **"Reactive Programming with .NET MAUI"**: + +![devnot-dotnet-conference-enis-necipoglu.png](3a12bcc8cda3abdfcb3556b6390258a7.png) + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Ahmed Tarek](https://twitter.com/AhmedTarekHasa1) has created **four** new community articles: + * [🤔 When Implementations Affect Abstractions ⁉️](https://community.abp.io/posts/-when-implementations-affect-abstractions--ekx1o5xn) + * [👍 Design Best Practices In .NET C# 👀](https://community.abp.io/posts/design-best-practices-in-.net-c--eg8q8xh0) + * [👍 Chain of Responsibility Design Pattern In .NET C# 👀](https://community.abp.io/posts/chain-of-responsibility-design-pattern-in-.net-c--djmvkug1) + * [Flagged Enumerations: How To Represent Features Combinations Into One Field](https://community.abp.io/posts/flagged-enumerations-how-to-represent-features-combinations-into-one-field-9gj4l670) +* [Engincan Veske](https://github.com/EngincanV) has created **three** new community articles: + * [Performing Case-Insensitive Search in ABP Based-PostgreSQL Application: Using citext and Collation](https://community.abp.io/posts/caseinsensitive-search-in-abp-basedpostgresql-application-c9kb05dc) + * [Sentiment Analysis Within ABP-Based Application](https://community.abp.io/posts/sentiment-analysis-within-abpbased-application-lbsfkoxq) + * [Reusing and Optimizing Machine Learning Models in .NET](https://community.abp.io/posts/reusing-and-optimizing-machine-learning-models-in-.net-qj4ycnwu) +* [Unlocking Modularity in ABP.io A Closer Look at the Contributor Pattern](https://community.abp.io/posts/unlocking-modularity-in-abp.io-a-closer-look-at-the-contributor-pattern-ixf6wgbw) by [Qais Al khateeb](https://community.abp.io/members/qais.alkhateeb@devnas-jo.com) +* [Deploy Your ABP Framework MVC Project to Azure Container Apps](https://community.abp.io/posts/deploy-your-abp-framework-mvc-project-to-azure-container-apps-r93u9c6d) by [Selman Koç](https://community.abp.io/members/selmankoc) +* [How claim type works in ASP NET Core and ABP Framework](https://community.abp.io/posts/how-claim-type-works-in-asp-net-core-and-abp-framework-km5dw6g1) by [Liming Ma](https://github.com/maliming) +* [Using FluentValidation with ABP Framework](https://community.abp.io/posts/using-fluentvalidation-with-abp-framework-2cxuwl70) by [Enes Döner](https://community.abp.io/members/Enes) +* [Using Blob Storage with ABP](https://community.abp.io/posts/using-blob-storage-with-abp-framework-jygtmhn4) by [Emre Kendirli](https://community.abp.io/members/emrekenderli) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/posts/create) 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://docs.abp.io/en/abp/8.2/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.2 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/suite-file-upload-in-action.gif b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/suite-file-upload-in-action.gif new file mode 100644 index 0000000000..0b51b1472e Binary files /dev/null and b/docs/en/Community-Articles/2024-05-24-abpio-platform-82-rc-has-been-published/suite-file-upload-in-action.gif differ diff --git a/docs/en/Community-Articles/2024-06-27-abpio-platform-82-final-has-been-released/post.md b/docs/en/Community-Articles/2024-06-27-abpio-platform-82-final-has-been-released/post.md new file mode 100644 index 0000000000..06bacd109a --- /dev/null +++ b/docs/en/Community-Articles/2024-06-27-abpio-platform-82-final-has-been-released/post.md @@ -0,0 +1,65 @@ +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 8.2 versions have been released today. + +## What's New With Version 8.2? + +All the new features were explained in detail in the [8.2 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-2-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 8.2 + +### Creating New Solutions + +You can create a new solution with the ABP Framework version 8.2 by either using the `abp new` command or generating the CLI command 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 more. + +### How to Upgrade an Existing Solution + +#### Install/Update the ABP CLI + +First, install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update the existing CLI: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +#### Upgrading Existing Solutions with the 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. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v8.x or earlier: + +* [ABP Framework 8.x to 8.2 Migration Guide](https://docs.abp.io/en/abp/8.2/Migration-Guides/Abp-8_2) +* [ABP Commercial 8.x to 8.2 Migration Guide](https://docs.abp.io/en/commercial/8.2/migration-guides/v8_2) + +## Community News + +### New ABP Community Posts + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [How to use Angular Material with Form Validation on ABP](https://community.abp.io/posts/how-to-use-angular-material-with-form-validation-on-abp-jtheajj3) by [Mahmut Gündoğdu](https://x.com/mahmutgundogdu) +* [Tunnel your local host address to a public URL with ngrok](https://community.abp.io/posts/tunnel-your-local-host-address-to-a-public-url-with-ngrok-4cywnocj) by [Bart Van Hoey](https://github.com/bartvanhoey) +* [Antiforgery Token Validation When Angular and HTTP API Runs on the Same Server](https://community.abp.io/posts/antiforgery-token-validation-when-angular-and-http-api-runs-on-the-same-server-mzf5ppdq) by [dignite](https://x.com/dignite_adu) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 8.3. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-06-27-how-to-use-Aspire-with-ABP-framework/How to use Aspire with ABP framework.md b/docs/en/Community-Articles/2024-06-27-how-to-use-Aspire-with-ABP-framework/How to use Aspire with ABP framework.md index 7d78d476c5..4afe83c7c9 100644 --- a/docs/en/Community-Articles/2024-06-27-how-to-use-Aspire-with-ABP-framework/How to use Aspire with ABP framework.md +++ b/docs/en/Community-Articles/2024-06-27-how-to-use-Aspire-with-ABP-framework/How to use Aspire with ABP framework.md @@ -300,3 +300,7 @@ After making all our changes, we can run the `AspirationalAbp.AppHost` project. ## Conclusion Combining .NET Aspire with the ABP framework creates a powerful setup for building robust, observable, and feature-rich applications. By integrating Aspire's observability and cloud capabilities with ABP's approach of focusing on your business without repeating yourself, you can develop feature-rich, scalable applications with enhanced monitoring and seamless cloud integration. This guide provides a clear path to set up and configure these technologies, ensuring your applications are well-structured, maintainable, and ready for modern cloud environments. + +## See Also + +* [.NET Aspire vs ABP Studio: Side by Side](https://abp.io/community/articles/.net-aspire-vs-abp-studio-side-by-side-t1c73d1l) diff --git a/docs/en/Community-Articles/2024-07-24-the-new-abp-platform-is-live/post.md b/docs/en/Community-Articles/2024-07-24-the-new-abp-platform-is-live/post.md new file mode 100644 index 0000000000..83e7ab5b74 --- /dev/null +++ b/docs/en/Community-Articles/2024-07-24-the-new-abp-platform-is-live/post.md @@ -0,0 +1,80 @@ +We're thrilled to announce that the **new ABP.IO Platform is now live!** Our team has been hard at unifying and enhancing the entire platform to deliver a seamless, user-friendly experience. Here's what's new: + + +### Unified domain and enhanced navigation 🌍 + +All our services are now consolidated under a single domain; [abp.io](https://abp.io). This means you no longer need to navigate through multiple subdomains. The new mega menu makes finding what you need easier and faster. + + +### Modern design and improved UX 🎨 + +The platform boasts a fresh, modern design aimed at improving both aesthetics and functionality. This redesign enhances usability, making your interaction with ABP.IO more intuitive. + + + +### Documentation in one place 📃 + +We’ve combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unified documentation will help you find what you're looking for more efficiently. The new documentation address is [abp.io/docs](https://abp.io/docs). When you switch to old ABP versions before v8.3, you will see the old documents are still available. + + + +### Introducing "ABP Studio Community Edition" 🪄 + +We're excited to introduce the **ABP Studio Community Edition**, which is now **available for free**. This edition provides powerful tools to streamline your development process. You can easily create a new project with a configuration wizard in ABP Studio. It also provides module management, which means you can add/remove an ABP Module easily. You can also debug your microservice project and track the HTTP requests easily. Connecting your local development environment to a local or remote Kubernetes cluster is another cool feature of ABP Studio. We aim for ABP Studio to be the primary tool for ABP developers to manage their projects. + +> Download ABP Studio 👉 [abp.io/studio](https://abp.io/studio). + + +### Enhanced "ABP CLI" 🚀 + +ABP CLI is also renewed. The new CLI is compatible with ABP Studio. It adds new commands. The new CLI is now available on NuGet at [nuget.org/packages/Volo.Abp.Studio.Cli](https://www.nuget.org/packages/Volo.Abp.Studio.Cli). It's a dotnet global tool. When you install ABP Studio, the new ABP CLI is automatically installed. You can still use the old ABP CLI commands. To use the legacy ABP CLI commands just add `--old` parameter to your commands. + +> The docs of the new ABP CLI 👉 [abp.io/docs/latest/cli](https://abp.io/docs/latest/cli). + + + +### 20% Celebration discount 💰 + +To celebrate the launch of the new platform, we're offering a **20% discount** for a limited time. This discount is valid for all new purchases, renewing existing licenses and buying additional developer seats. + +> Discounted prices 👉 [abp.io/pricing](https://abp.io/pricing). + + +### Existing customers 🛂 + +In terms of licensing rules, existing customers will not be affected by this change. You can manage your license just like before at [abp.io/my-organizations](https://abp.io/my-organizations). + +> The new support website address 👉 [abp.io/support](https://abp.io/support). + + +--- + + +### Community Talk on the new ABP Platform + +We made a community talk on YouTube on August 1st, 2024, and we explained these topics. You can watch it from the below link: + + + + + +--- + +### Why choose the ABP Platform? 🙄 + +ABP Platform simplifies modern software development with well-architected startup templates, modular design infrastructure, multi-tenancy support, comprehensive security features, and a vibrant community. If you are starting a new web project or transforming your legacy application, ABP is the perfect solution! If you still wonder why you need such a solution, see [abp.io/why-choose-abp](https://abp.io/why-choose-abp). + +There are several startup ASP.NET Core templates for your requirements. Read [abp.io/how-it-works](https://abp.io/how-it-works) page to understand ABP's approach. We have a FAQ page where you can find answers to many of your questions [abp.io/faq](https://abp.io/faq). + +> Start your new ABP project -for free- 👉[abp.io/get-started](https://abp.io/get-started)! + + +### Join our community 👨‍👨‍👦 + +We invite developers, IT professionals, and businesses to join the ABP Community. Our community website is now [abp.io/community](https://abp.io/community). On this website, you can read ABP-related posts, watch live community shows and core team's fundamental video courses... + +------ + +For more information, visit our newly unified platform at [abp.io](https://abp.io). We look forward to your feedback and continued support as we grow together! + +> Found a bug in the new platform? Or if you have an idea, write to us 👉 [abp.io/contact](https://abp.io/contact). \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-07-26-introducing-the-new-abp-cli/post.md b/docs/en/Community-Articles/2024-07-26-introducing-the-new-abp-cli/post.md new file mode 100644 index 0000000000..d9c49c1960 --- /dev/null +++ b/docs/en/Community-Articles/2024-07-26-introducing-the-new-abp-cli/post.md @@ -0,0 +1,77 @@ +📢 We're excited to introduce the [new ABP CLI](https://abp.io/docs/latest/cli/index) after the announcement of [the new unified ABP Platform](https://abp.io/blog/new-abp-platform-is-live). + +As you know, we recently unified the ABP platform in a single domain ([abp.io](https://abp.io/)) and made some changes in our templating system to simplify your development. Also, we released more stable ABP Studio versions, which can dramatically improve and speed up your development time. Besides all of these changes, we have also introduced a new ABP CLI to bring you a more streamlined and efficient experience, which also extends the current commands. + +Here is a brief overview of what's new, what's changed, and why this change is happening... + +## The New ABP CLI + +ABP CLI is a command line tool to perform some common operations for ABP based solutions or [ABP Studio](https://abp.io/docs/latest/studio) features. With v8.2+, the old/legacy ABP CLI has been replaced with a new CLI system to align with the new templating system and ABP Studio. + +The new ABP CLI extends the old ABP CLI, adds more features that are used by ABP Studio behind the scenes, and is also fully compatible with the new templating system. Also, it allows you to use the old ABP CLI if you need, it by passing a single parameter. + +To be able to use the new ABP CLI, you should first delete the existing/old CLI with the following command if you installed it before: + +```bash +dotnet tool uninstall -g Volo.Abp.Cli +``` + +Then, to install the new ABP CLI, you can just simply execute the following command in your terminal: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +> Both old and new ABP CLI binary names use the same `abp` command as the executing command. Therefore, you should uninstall the old CLI first, if you installed it before. + +> **Note**: Since the new ABP CLI uses the same `abp` command, you can use the same commands as you did before. + +## Reason for the Change + +ABP introduces a new templating system, which is fully compatible with the ABP Studio from v8.2+. Since, ABP Studio offers more and better features (such as tracking, monitoring, and deploying your applications from a single point), and the new templating system has a different versioning structure, we wanted to introduce a new ABP CLI by extending the current features and adding even more features that are compatible with the new templating system and ABP Studio. + +This change allows you to create your application with the new templating system either by running the cross-platform ABP Studio application or ABP CLI and allows you to create automated pipelines with the power of the new ABP CLI. + +## Using the Old ABP CLI + +If you have an older version of ABP solutions and need to use the old ABP CLI for any reason, you can do it easily with the new ABP CLI. + +You just need to put the `--old` command at the end of your command and execute the related CLI command as you would before. This allows you to use the old CLI commands with the new CLI without the need to uninstall the new CLI. + +For example, if you want to create a new ABP v8.2.0 solution, you can execute the following command: + +```bash +abp new Acme.BookStore --version 8.2.0 --old +``` + +When you run this command, the new ABP CLI installs the old CLI with `abp-old` name as the executing command within the latest version of ABP under the **%UserProfile%\\.abp\studio\cli\old** directory and allows you to use the old commands. + +If you want to use a specific version of the old ABP CLI, it's also possible with the new ABP CLI. You can use the `install-old-cli` command of the new CLI to either install or update an old CLI, then you can directly execute any old ABP CLI command by simply passing the `--old` parameter to the end of your command: + +```bash +# installing the old ABP CLI with v8.0 +abp install-old-cli --version 8.0.0 + +abp new Acme.BookStore --version 8.0 --old # alternatively, you can use the `abp-old` command without need to pass the "--old" parameter +``` + +## New Commands + +New ABP CLI extends the existing features of old ABP CLI and introduces new commands. Here are some of the new commands: + +* `kube-connect`: Connects to Kubernetes environment. (Available for **Business or higher licenses**) +* `kube-intercept`: Intercepts a service running in Kubernetes environment. (Available for **Business or higher licenses**) +* `list-module-sources`: Lists the remote module sources. +* and more... + +You can check the CLI documentation for all available commands and their usage. + +## Conclusion + +In this blog post, we briefly explained the new ABP CLI, what's the reason for this change, and how to use the old ABP CLI with the new ABP CLI. + +If you have any further questions related to the new ABP CLI, you can always refer to the [CLI](https://abp.io/docs/latest/cli/index) and [Old ABP CLI vs New ABP CLI](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli) documentation. Also, we listed some of the questions that you may have, which you can [check from here](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli#common-questions). + +Please try out the new ABP CLI, and provide feedback to help us release more stable versions, with additional features. + +Thanks for being a part of the ABP Community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e81208c50f7a7c2c5f2463ee95.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e81208c50f7a7c2c5f2463ee95.png new file mode 100644 index 0000000000..35e53cd3dc Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e81208c50f7a7c2c5f2463ee95.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e82f626e06b4022b7fe077d68b.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e82f626e06b4022b7fe077d68b.png new file mode 100644 index 0000000000..051451d512 Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e82f626e06b4022b7fe077d68b.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8580fc750ee048c9a14f7c064.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8580fc750ee048c9a14f7c064.png new file mode 100644 index 0000000000..2d97e6067c Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8580fc750ee048c9a14f7c064.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e87779052078513905ac904886.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e87779052078513905ac904886.png new file mode 100644 index 0000000000..02a2ba1076 Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e87779052078513905ac904886.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8936010694a2402ab1e771296.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8936010694a2402ab1e771296.png new file mode 100644 index 0000000000..87dbb07a41 Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8936010694a2402ab1e771296.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8bcfc8e9ce9dfdcb779fe7d74.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8bcfc8e9ce9dfdcb779fe7d74.png new file mode 100644 index 0000000000..edc9118d9c Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8bcfc8e9ce9dfdcb779fe7d74.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8eee5a21b45744cedf6e688f3.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8eee5a21b45744cedf6e688f3.png new file mode 100644 index 0000000000..e09cfb2ddd Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e8eee5a21b45744cedf6e688f3.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e908e6740ea8f1a74a72a8a7e6.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e908e6740ea8f1a74a72a8a7e6.png new file mode 100644 index 0000000000..572cf40956 Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e908e6740ea8f1a74a72a8a7e6.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e927e9ce87f76be80eb2946060.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e927e9ce87f76be80eb2946060.png new file mode 100644 index 0000000000..2f3342d573 Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e927e9ce87f76be80eb2946060.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e947cec9e65339c4faf917a656.png b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e947cec9e65339c4faf917a656.png new file mode 100644 index 0000000000..f0ca19268e Binary files /dev/null and b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/3a1414e947cec9e65339c4faf917a656.png differ diff --git a/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/post.md b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/post.md new file mode 100644 index 0000000000..d2bd8c2481 --- /dev/null +++ b/docs/en/Community-Articles/2024-07-30-announcing-abp-studio-beta-general-availability/post.md @@ -0,0 +1,109 @@ +ABP Framework makes your daily coding activities much easier, more convenient, and even more enjoyable. However, building a software product is not just about coding. We know that you need to build, run, test, debug and deploy your software, and trace errors on a failure. You also should to design architecture of your overall solution and perform many common operations on your solutions in addition to the coding activity. + +We'd already provided tools like [ABP CLI](https://abp.io/cli) and [ABP Suite](https://abp.io/suite) for these kind of purposes before. [ABP Studio](https://abp.io/studio) takes this one long step further and offers a tool that you can use continuously throughout your coding activities, help you for non-coding activities to make you focus on your software development. + +I am very excited to announce that the ABP Studio (beta) is generally available to everyone. It is now downloadable on the [get started page](https://abp.io/get-started) of the [new ABP Platform website](https://abp.io/blog/new-abp-platform-is-live). + +## What is ABP Studio? + +[ABP Studio](https://abp.io/docs/latest/studio) is a cross-platform desktop application for ABP and .NET developers. It aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run, browse, monitor, trace and deploy your solutions much easier. + +**From now on, ABP Studio is the default way to start with the ABP Platform**; + +* The [get started page](https://abp.io/get-started) has updated so it offers to download ABP Studio to create a new ABP based solution. +* The ABP CLI ([Volo.Abp.Cli](https://nuget.org/packages/Volo.Abp.Cli)) is replaced by the ABP Studio CLI ([Volo.Abp.Studio.Cli](https://www.nuget.org/packages/Volo.Abp.Studio.Cli)). [The new ABP Studio CLI](https://abp.io/docs/latest/cli) is compatible with the old one, and extends it by introducing new commands. +* [Startup solution templates](https://abp.io/docs/latest/solution-templates) are completely renewed. The solution structures are similar to the old ones, but they are totally new templates built with the new templating engine. +* All the documentation and tutorials now uses ABP Studio and ABP Studio CLI. + +> **ABP Studio is in beta stage now.** It is also in rapid development and release cycle. We frequently release new feature and patch versions. Please [file an issue](https://github.com/abpframework/abp/issues/new/choose) if you have any problem. +> +> If you want to continue to use the old CLI and old startup templates, please [refer that document](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli). + +## The Easiest Way to Start with ABP + +As mentioned before, the [startup solution templates](https://abp.io/docs/latest/solution-templates) are completely renewed with ABP Studio. They provide much more options compared to the old startup templates. The following screenshot is taken from the New Solution wizard of ABP Studio, which provides an comfortable and easy way to create new solutions: + +![abp-studio-new-layered-solution-template-wizard.png](3a1414e81208c50f7a7c2c5f2463ee95.png) + +For example, you can now select most of the non-fundamental modules as optional while creating a new solution: + +![abp-studio-new-layered-solution-template-wizard-options.png](3a1414e82f626e06b4022b7fe077d68b.png) + +### Developing Microservices Solutions is Now Much Easier + +The most important change is made on the [microservice startup template](https://abp.io/docs/latest/solution-templates/microservice) (which is available only for Business or higher license holders). We've designed the solution structure, integrations, Kubernetes/Helm configuration, database migrations and all others from scratch and well documented all the decisions we've applied. Developing microservice solutions with ABP is now easier and more understandable than ever. + +## Architecting Your Complex Solutions + +One of the main purposes to build ABP Studio was to simplify to create multi-modular and distributed systems. Either you create a modular monolith application or a microservice solution, [ABP Studio's solution explorer](https://abp.io/docs/latest/studio/solution-explorer) provides a convenient way to design your high-level solution structure. + +You see a microservice solution in the following screenshot: + +![solution-explorer.png](3a1414e8580fc750ee048c9a14f7c064.png) + +That ABP Studio solution contains multiple separate .NET solutions (`.sln`) each has multiple .NET projects (`.csproj`). ABP Studio allows you to easily manage such a multi-solution system on a single view. You can create new packages and modules, import existing packages and modules, manage their dependencies and so on. + +## Run and Test Your Multi-Application Solutions with a Single Click + +One of the biggest shortcomings we face when developing distributed or complex solutions is being able to easily run all components of the solutions so that we can test and debug a single service or application without caring about all the runtime dependencies. + +Here a screenshot from the ABP Studio's [Solution Runner](https://abp.io/docs/latest/studio/running-applications) view: + +![abp-studio-solution-runner-overall.png](3a1414e87779052078513905ac904886.png) + +When you use ABP Studio, it is dramatically easier to run, monitor, test, debug and develop your applications and services. You can browse your web UI applications, monitor all the HTTP requests, distributed events, exceptions and logs in real time on a single screen. In this way, you can easily run all the systems and trace the problems when you have. + +All you need to click the *Play* button or right-click and select the *Run* -> *Start All* command: + +![abp-studio-solution-runner-start-apps.png](3a1414e8936010694a2402ab1e771296.png) + +The nice thing is that you can create multiple profiles for each of your teams so that they can run only the applications they need to develop the application they are working on. + +## Seamlessly Develop Your Service as Integrated to Kubernetes + +Kubernetes is the de-facto tool to deploy, run and scale complex systems. However, it can also be a great tool to develop such solutions in a local environment. + +With ABP Studio's [Kubernetes Integration](https://abp.io/docs/latest/studio/kubernetes) system, it is now possible to deploy and run a complex system in a Kubernetes cluster. Then you can establish a bridge between your local development environment and the Kubernetes cluster. In this way, you can develop, run, test and debug an application or service in your local development environment as it is running in the Kubernetes cluster. All incoming and outgoing traffic is properly routed and managed by ABP Studio. You just focus on the service you are responsible to develop and let the Kubernetes run rest of the system for you. + +You can see all the Helm charts in a solution in the Kubernetes panel of ABP Studio: + +![abp-studio-helm-charts.png](3a1414e8bcfc8e9ce9dfdcb779fe7d74.png) + +Here, you can easily build, install and uninstall the Helm charts to your Kubernetes cluster. In the Kubernetes tab, you can connect to the Kubernetes cluster and intercept a service to develop it locally. See [the documentation](https://abp.io/docs/latest/studio/kubernetes) for more information. + +The good news is that all the monitoring data (HTTP Requests, Events, Exceptions, Logs,...) is still visible in real time with the Kubernetes integration too. + +## Use the ABP Suite as Integrated to ABP Studio + +[ABP Suite](https://abp.io/suite) is a tool that is basically used to generate code for ABP Solutions. It has started by creating simple CRUD pages, and now it does much more. It can establish relations with existing entities, create complex user interfaces like parent/child tables and so on... + +ABP Suite can be used directly inside ABP Studio by clicking the *ABP Suite* -> *Open* command: + +![abp-suite-open-in-abp-studio.png](3a1414e8eee5a21b45744cedf6e688f3.png) + +This will open ABP Suite in a new tab for the current solution and focus on the CRUD page generation: + +![abp-suite-in-abp-studio.png](3a1414e908e6740ea8f1a74a72a8a7e6.png) + +The new ABP Studio solution templates and ABP Suite code generation are compatible with each other. Here a screenshot from the generated CRUD UI for a very simple Book entity: + +![suite-generated-entity.png](3a1414e927e9ce87f76be80eb2946060.png) + +## The Community Edition vs Commercial Licenses + +ABP Studio has a Community Edition which is completely free and available to everyone. As you can guess, there are come differences between the community edition and commercial editions. ABP Platform has 4 fundamental license types; + +* Open source (free) +* Team +* Business +* Enterprise + +Here, the comparison table for ABP Studio features for these license types: + +![abp-studio-license-comparison-table.png](3a1414e947cec9e65339c4faf917a656.png) + +Microservice startup template and Kubernetes integration features are available only for commercial licenses since these are considered more enterprise requirements. Also, the solution size is limited with the ABP Community edition. If you are building a large or distributed solution, consider to [purchase a commercial license](https://abp.io/pricing). + +## Conclusion + +I've introduced the ABP Studio General Availability with this post. It is still in the beta stage. You can expect frequent releases during the beta phase. We will add new features and fix issues quickly. Please [download](https://abp.io/studio) and use it now. If you find any problem, do not hesitate to open an [issue on GitHub](https://github.com/abpframework/abp/issues/new/choose). \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff619cb6c8f327d8674864fe158.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff619cb6c8f327d8674864fe158.png new file mode 100644 index 0000000000..52eb61f285 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff619cb6c8f327d8674864fe158.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff64a2f24ce591a64262fe6ee84.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff64a2f24ce591a64262fe6ee84.png new file mode 100644 index 0000000000..c0b1a4fe48 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff64a2f24ce591a64262fe6ee84.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff676c58a374c2b3ec7fd8ebced.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff676c58a374c2b3ec7fd8ebced.png new file mode 100644 index 0000000000..9398fa1070 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff676c58a374c2b3ec7fd8ebced.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6887bf4a58ef4536168c3ba0a.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6887bf4a58ef4536168c3ba0a.png new file mode 100644 index 0000000000..082c567f8c Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6887bf4a58ef4536168c3ba0a.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6aa7c451b9a2bfc67041a6939.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6aa7c451b9a2bfc67041a6939.png new file mode 100644 index 0000000000..be73de4d8f Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6aa7c451b9a2bfc67041a6939.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6be3fe8da7d5b3e67142d2a5a.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6be3fe8da7d5b3e67142d2a5a.png new file mode 100644 index 0000000000..2f45635782 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6be3fe8da7d5b3e67142d2a5a.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6dbebdf8dd69c114127b7aa71.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6dbebdf8dd69c114127b7aa71.png new file mode 100644 index 0000000000..95265fea29 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6dbebdf8dd69c114127b7aa71.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6f9de25f4020d8ce7b2c3dd82.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6f9de25f4020d8ce7b2c3dd82.png new file mode 100644 index 0000000000..cc468d4bf3 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff6f9de25f4020d8ce7b2c3dd82.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff70d3a8a6018dde07c5d56b595.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff70d3a8a6018dde07c5d56b595.png new file mode 100644 index 0000000000..d92621f403 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a141ff70d3a8a6018dde07c5d56b595.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a1462b93192e9ffc0c15a5db4ded692.png b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a1462b93192e9ffc0c15a5db4ded692.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/3a1462b93192e9ffc0c15a5db4ded692.png differ diff --git a/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/post.md b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/post.md new file mode 100644 index 0000000000..4ddd247a63 --- /dev/null +++ b/docs/en/Community-Articles/2024-08-01-abpio-platform-83-rc-has-been-published/post.md @@ -0,0 +1,174 @@ +Today, we are happy to release [ABP](https://abp.io) version **8.3 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 v8.3! Thanks to you in advance. + +## Get Started with the 8.3 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: + +![switch-to-preview.png](3a1462b93192e9ffc0c15a5db4ded692.png) + +## Migration Guide + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3) + +## What's New with ABP v8.3? + +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: + +* CMS Kit: Marked Items/Favorites +* CMS Kit: Approvement System for Comments +* Docs: Added Google Translation Support & Introducing the Single Project Mode +* Using DBFunction for Global Query Filters +* CMS Kit (PRO): FAQ +* Package Updates (NuGet & NPM) + +### CMS Kit: Marked Items/Favorites + +CMS Kit provides a marking system to mark any kind of resource, like a blog post or a product, as a favorite, starred, flagged, or bookmarked. + +![cmskit-module-markedItems.png](3a141ff619cb6c8f327d8674864fe158.png) + +This system is especially useful if you need to highlight some resources and differentiate them from other items. To use the marking system, you need to define an entity type with the icon name, by configuring the `CmsKitMarkedItemOptions`: + +```csharp +Configure(options => +{ + options.EntityTypes.Add( + new MarkedItemEntityTypeDefinition( + entityType: "product", + icon: StandardMarkedItems.Favorite + ) + ); +}); +``` + +You can select any of the standard marked item icons (as used in the example above) or easily customize the icons shown in the toggling components. + +> Read the [CMS Kit: Marked Item System](https://abp.io/docs/8.3/modules/cms-kit/marked-items) documentation to learn more. + +### CMS Kit: Approvement System for Comments + +CMS Kit Module has been provided a [Commenting System](https://abp.io/docs/8.3/modules/cms-kit/comments) for a while. This system allows you to add the comment feature to any kind of resource, like blog posts, or products. However, this system wasn't providing an approvement system, that allows system administrations to review the comments before publishing them in their application. + +In this version, we have introduced the [Approvement System](https://abp.io/docs/8.3/modules/cms-kit/comments#settings), which allows you to _require approval for comments to be published_. It's disabled by default, but you can make it enabled by simply checking the related setting on the settings page: + +![cmskit-module-comments-settings.png](3a141ff64a2f24ce591a64262fe6ee84.png) + +When you enable it, whenever a user submits a comment, it can be directly seen on the back-office application (in the _cms/comments_ page), and you can determine if the comment should be approved or rejected. If you approve the comment, then it will be shown in the comment section for the related resource. + +> Read the [CMS Kit: Comments](https://abp.io/docs/8.3/modules/cms-kit/comments) documentation to learn more. + +### Docs: Added Google Translation Support & Introducing the Single Project Mode + +In this version, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Translation support for better findings in the documentation, and introduced a single project mode to align our needs in the documentation system with [the unification of the ABP Platform](https://abp.io/blog/new-abp-platform-is-live). + +The single project mode allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation for it, it's especially useful for you. You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name: + +```csharp +Configure(options => +{ + options.SingleProjectMode.Enable = true; + options.SingleProjectMode.ProjectName = "abp"; +}); +``` + +In addition to this feature, we also introduced Google Translation support for the documentation system and even integrated it into our [abp.io/docs](https://abp.io/docs/) website: + +![docs-google-search.png](3a141ff676c58a374c2b3ec7fd8ebced.png) + +![google-search-results.png](3a141ff6887bf4a58ef4536168c3ba0a.png) + +Thanks to this system, you can either translate your documentation into your own language by Google Translation System or search specific keywords to easily find the related topic in the documentation. + +### Using DBFunction for Global Query Filters + +In this version, ABP has started using [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) for global filters to gain performance improvements and let EF Core generate more precise SQL commands under the hook. + +> See the documentation for more info: [Using User-defined function mapping for global filters](https://abp.io/docs/8.3/framework/infrastructure/data-filtering#using-user-defined-function-mapping-for-global-filters) + +### CMS Kit: FAQ + +CMS Kit provides a [FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) to allow users to create, edit, and delete FAQs. Here is an example screenshot from the FAQ page on the admin side: + +![cms-kit-faq.png](3a141ff6aa7c451b9a2bfc67041a6939.png) + +You can list, create, update, and delete sections and their questions on the admin side of your solution. Then, by using the `FaqViewComponent` in your public-web application, you can display FAQs, section by section: + +![faq-section-public-web.png](3a141ff6be3fe8da7d5b3e67142d2a5a.png) + +> Read the [CMS Kit: FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) documentation to learn more. + +### Package Updates + +In this version, we also updated some of the core NuGet and NPM package versions. All of the removed or deprecated methods have already been updated at the framework level. However, if you used any methods from these packages, you should be aware of the change and update it in your code accordingly. + +You can see the following list of the package version changes: + +* **Angular** package version has been updated to **v18.1.x**. See [#20436](https://github.com/abpframework/abp/issues/20436) for more info. +* [Updated Markdig.Signed from v0.33.0 to v0.37.0](https://github.com/abpframework/abp/pull/20195) - [NuGet](https://www.nuget.org/packages/Markdig.Signed) +* [Updated Hangfire from v1.8.6 to v1.8.12](https://github.com/abpframework/abp/pull/20009) - [NuGet](https://www.nuget.org/packages/Hangfire.AspNetCore) +* [Updated SixLabors.ImageSharp from v3.0.2 to v3.1.4](https://github.com/abpframework/abp/pull/19643) - [NuGet](https://www.nuget.org/packages/SixLabors.ImageSharp) +* [Updated Blazorise from v1.5.0 to v1.5.2](https://github.com/abpframework/abp/pull/19841) - [NuGet](https://www.nuget.org/packages/Blazorise) +* [Updated datatables.net from v1.11.4 to v2.0.2](https://github.com/abpframework/abp/pull/19340) - [NPM](https://www.npmjs.com/package/datatables.net) + +## Community News + +### The New ABP Platform Is Live! + +![new-platform-cover-image.png](3a141ff6dbebdf8dd69c114127b7aa71.png) + +We're thrilled to announce that the **new ABP.IO Platform** is now live! Our team has been hard at unifying and enhancing the entire platform to deliver a seamless, user-friendly experience. We consolidated all our services under a single domain: [abp.io](https://abp.io/); added a new mega menu that makes finding what you need much easier and faster, and also improved the UX of our application and combined both ABP (open-source) and ABP Commercial (paid) documents into a single comprehensive resource. + +> Read the blog post to learn more about this unification 👉 [The new ABP Platform is live!](https://abp.io/blog/new-abp-platform-is-live) + +### Announcing ABP Studio (Beta) General Availability + +We're really excited to announce that the **ABP Studio (beta)** is generally available to everyone. It is now downloadable on the [get started page](https://abp.io/get-started) of the [new ABP Platform website](https://abp.io/blog/new-abp-platform-is-live). + +![studio-beta-cover-image.png](3a141ff6f9de25f4020d8ce7b2c3dd82.png) + +> Read the blog post to learn more about the ABP Studio (Beta) 👉 [Announcing ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability) + +### Introducing the New ABP CLI + +As described above, we recently [unified the ABP platform in a single domain (abp.io)](https://abp.io/blog/new-abp-platform-is-live) and made some changes in our templating system to simplify your development. Also, we released more stable **ABP Studio** versions, which can dramatically improve and speed up your development time. + +Besides all of these changes, we have also introduced a [new ABP CLI](https://abp.io/docs/latest/cli/index) to bring you a more streamlined and efficient experience, which also extends the current commands. + +![new-abp-cli-cover-image.png](3a141ff70d3a8a6018dde07c5d56b595.png) + +The new ABP CLI extends the old ABP CLI, adds more features that are used by ABP Studio behind the scenes, and is also fully compatible with the new templating system. We created a blog post, which you can read at [https://abp.io/blog/introducing-the-new-abp-cli](https://abp.io/blog/introducing-the-new-abp-cli) to highlight the reason behind this change and insights into the new ABP CLI, you can check it out if you want to learn more. + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Ahmed Tarek](https://twitter.com/AhmedTarekHasa1) has created **three** new community articles: + * [🧪 Unit Testing Best Practices In .NET C# 🤷‍♂️](https://abp.io/community/articles/-unit-testing-best-practices-in-.net-c--mnx65npu) + * [Memory Management In .NET](https://abp.io/community/articles/memory-management-in-.net-rqwbtzvl) + * [🧵 How String In .NET C# Works 🤷‍♂️](https://abp.io/community/articles/-how-string-in-.net-c-works--vj6d2pnm) + +* [Anto Subash](https://twitter.com/antosubash) has created **two** new community videos: + * [ABP React Template V2](https://abp.io/community/videos/abp-react-template-v2-ilc4cyqr) + * [Migrating Tye to Aspire - .NET Microservice with ABP](https://abp.io/community/videos/migrating-tye-to-aspire-.net-microservice-with-abp-ga1t4ckr) + +* [HeadChannel Team](https://headchannel.co.uk/) has created **two** new community articles: + * [Managing Baseline Creation in Applications Based on ABP Framework](https://abp.io/community/articles/managing-baseline-creation-in-applications-based-on-abp-framework-yiacte5c) + * [How to Test The System Using PostgreSQL and TestContainers](https://abp.io/community/articles/how-to-test-the-system-using-postgresql-and-testcontainers-8yh8t0j8) + +* [Create a Generic HTTP Service to Consume a Web API](https://abp.io/community/articles/create-a-generic-http-service-to-consume-a-web-api-yidme2kq) by [Bart Van Hoey](https://github.com/bartvanhoey) +* [Use User-Defined Function Mapping for Global Filter](https://abp.io/community/articles/use-userdefined-function-mapping-for-global-filter-pht26l07) by [Liming Ma](https://github.com/maliming) +* [How to use .NET Aspire with ABP framework](https://abp.io/community/articles/how-to-use-.net-aspire-with-abp-framework-h29km4kk) by [Berkan Şaşmaz](https://twitter.com/berkansasmazz) +* [Exciting New Feature in ABP.IO CMS Kit: Marked Item System](https://abp.io/community/articles/exciting-new-feature-in-abp.io-cms-kit-marked-item-system.-2hvpq0me) by [Suhaib Mousa](https://abp.io/community/members/suhaibmousa032@gmail.com) + +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/create) 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/8.3/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.3 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-08-12-join-abp-at-net-conf-focus-on-ai/post.md b/docs/en/Community-Articles/2024-08-12-join-abp-at-net-conf-focus-on-ai/post.md new file mode 100644 index 0000000000..432ece093c --- /dev/null +++ b/docs/en/Community-Articles/2024-08-12-join-abp-at-net-conf-focus-on-ai/post.md @@ -0,0 +1,46 @@ +We’re excited to announce that **[ABP](https://abp.io)** is sponsoring the **[.NET Conf: Focus on AI](https://focus.dotnetconf.net)**, taking place virtually on **August 20, 2024**. This one-day event, hosted by Microsoft team, together with .NET community, will showcase how AI can supercharge the .NET applications. + +## About .NET Conf + +.NET Conf has been a virtual event since the beginning, and this year brings a 1-day focus event all about artificial intelligence tools and libraries with the .NET platform. And “.NET Conf: Focus” is a series of smaller, live events that are delivered throughout the year, each focusing on specific things you can do with .NET. + +This 1-day event features live sessions with speakers from the community, Microsoft, and the .NET team. You can ask questions live on X, Mastodon, YouTube, or Twitch, and gain valuable knowledge to enhance your skills as a .NET developer. + +## What to Expect? + +Get ready for deep dives into AI integration, practical examples, and insights from industry experts and community leaders. Ideal for all .NET developers, especially if you are looking to enhance your applications with AI. You’ll get to hear from industry experts and community leaders. Plus you’ll get to learn from partners and companies who are already successfully integrating AI into their .NET applications. + +### Keynote: State of .NET + AI. + +***Scott Hanselman*** and ***Maria Naggaga Nakanwagi*** will discuss AI basics, Large Language Models (LLMs), and the latest advancements in AI within the .NET ecosystem, including insights into various SDKs and integration strategies. + +### Session Highlights + +* **Getting Started with AI in .NET** by *Stephen Toub* +* **NET Aspire and Semantic Kernel** by *Steve Sanderson* and *Matthew Bolanos* +* **Interactive AI with Blazor and .NET** by *Dan Roth* +* **AI Models in .NET: From Local to Cloud** by *Bruno Capuano* +* **RAG with .NET and Azure SQL** by *Davide Mauri* +* **Semantic Search in .NET with Milvus** by *Tim Spann* +* **H&R Block’s AI Journey with .NET and Azure** by *Vin Kamat* + +## Win an ABP License! + +As part of our sponsorship, we’re giving away 15 ABP Personal Licenses during the event! ABP license provides powerful tools to help you build robust and scalable .NET applications. Simply **[register](https://developer.microsoft.com/en-us/reactor/events/23325/)** the event for a chance to win. + +## Last Week for 20% Off⏳ + +We’re also celebrating the launch of our [New Website](https://www.abp.io/) with 20% off All ABP Licenses—but hurry, this offer ends soon! Visit [abp.io](https://abp.io) to grab this limited-time deal. The last day is **August 17th, 2024**. Don’t miss out! + +*** + +📅 **Date**: August 20th + +⏰ **Time**: 4:00 PM - 12:00 AM (UTC) Coordinated Universal Time + +🔴 **Livestream**: X, Mastodon, YouTube or Twitch + +*** + + + **[Register](https://developer.microsoft.com/en-us/reactor/events/23325/)** now! \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218818c8481d12de92c7b257113.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218818c8481d12de92c7b257113.png new file mode 100644 index 0000000000..7dbf8f7912 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218818c8481d12de92c7b257113.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218a38e2fd4a8c44943d8aa0b11.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218a38e2fd4a8c44943d8aa0b11.png new file mode 100644 index 0000000000..269159c651 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218a38e2fd4a8c44943d8aa0b11.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218c8262a2a4da395a93f4e94d0.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218c8262a2a4da395a93f4e94d0.png new file mode 100644 index 0000000000..46c8de76da Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218c8262a2a4da395a93f4e94d0.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218df7be4403013931b9dd94a6c.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218df7be4403013931b9dd94a6c.png new file mode 100644 index 0000000000..3459635322 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218df7be4403013931b9dd94a6c.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218f3e4ecc0aed21065b80a534d.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218f3e4ecc0aed21065b80a534d.png new file mode 100644 index 0000000000..8556ff38af Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146218f3e4ecc0aed21065b80a534d.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462191f25bb51fba69cdb759edba6.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462191f25bb51fba69cdb759edba6.png new file mode 100644 index 0000000000..7b4fdbba8e Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462191f25bb51fba69cdb759edba6.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462193e86ee8e2460974db1783388.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462193e86ee8e2460974db1783388.png new file mode 100644 index 0000000000..9398fa1070 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462193e86ee8e2460974db1783388.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146219582b520fef94c9a95bd36167.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146219582b520fef94c9a95bd36167.png new file mode 100644 index 0000000000..082c567f8c Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a146219582b520fef94c9a95bd36167.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a14621978a2335ed0a66c96393e7b1a.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a14621978a2335ed0a66c96393e7b1a.png new file mode 100644 index 0000000000..6584dfc015 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a14621978a2335ed0a66c96393e7b1a.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462199053fbd8b20fa92db1c15860.png b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462199053fbd8b20fa92db1c15860.png new file mode 100644 index 0000000000..68dddcad64 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/3a1462199053fbd8b20fa92db1c15860.png differ diff --git a/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/post.md b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/post.md new file mode 100644 index 0000000000..a26346e8b9 --- /dev/null +++ b/docs/en/Community-Articles/2024-08-14-new-abp-documentation-system-everything-you-need-in-one-place-/post.md @@ -0,0 +1,73 @@ +We have combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unification brings you a better experience in the documentation system, helps you find what you're looking for more easily, allows you to read the documents that are related to each other one after the other, and also provides Google Search and Google Translation support for the documents. + +Let's see what's new with the unified documentation system in detail: + +## All Documentation In One Place 📃 + +We decided to combine the ABP (open-source) and ABP Commercial (paid) documents into a single place, along with [the new ABP Platform Unification](https://abp.io/blog/new-abp-platform-is-live). + +The new documentation address is [abp.io/docs](https://abp.io/docs) and seen like below: + +![abp-docs.png](3a146218818c8481d12de92c7b257113.png) + +This unified documentation brings you a better search capability with Google Search support, allows you to not need to switch between documentation websites to read both framework and commercial features, look what you are looking for more easily from the unified menu structure, following new features and their documentation in a more stable and easier way. + +## Accessing Documents with Older Versions🗃️ + +From v8.2, with the new documentation system, since we merged all documents into a single place, you don't need to select if you want to show a framework or commercial document. However, if you want to access an old document, for example, if you are using an older version of ABP or don't want to create the solutions from ABP Studio and instead prefer ABP CLI (in the getting started and startup template docs, ABP Studio is shown for project creation and other features, for instance), you can change the version from the version select-box (prior to v8.2), and select which document type (framework or commercial) you want to read and then find/choose the document that you want: + +![old-docs.png](3a146218a38e2fd4a8c44943d8aa0b11.png) + +You can access any old-version document as you would before, by specifying the version. But we suggest you update your solution to v8.2+ and start using ABP Studio! By doing that, you can get more benefits from the new features, and edge-cutting features of ABP Studio and easily manage your application from development to production! + +## Documentation Updates 🚀 + +With the [announcement of ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability), we made some improvements in our documents. Starting from v8.2, since ABP Studio is the suggested way to create and manage your applications, we updated the [Get started](https://abp.io/docs/latest/get-started) documentation and some other documents along with, and explained project creation via ABP Studio. If you prefer [creating a new solution with the ABP CLI](https://abp.io/docs/latest/cli), you can use the new ABP CLI as you did the old one before. + +Besides that, we revised all of our documents, updated most of them according to the [new ABP Platform unification](https://abp.io/blog/new-abp-platform-is-live). For example, we merged our migration guide documents into single documents for each version and categorized the related topics you need to do when updating your solutions under the **open-source** and **pro** sections, so either you are an open-source template user or a license owner, you can easily jump to the related section and read them easily and accordingly: + +![in-this-document.png](3a146218c8262a2a4da395a93f4e94d0.png) + +Since we combined ABP (framework) and ABP Commercial documents, we added information notes in each document that indicate if the related feature is in your license plan or not. An example screenshot from ABP Suite documentation can be seen as follow: + +![suite-license-note.png](3a146218df7be4403013931b9dd94a6c.png) + +Also, for the application modules, we added **(PRO)** postfixes in the navigation menu for you to easily understand if the module is for license owners or open-source users. Thanks to that you can easily distinguish the related application modules and read the related module documentation to understand it: + +![pro-modules.png](3a146218f3e4ecc0aed21065b80a534d.png) + +## New Navigation Tree 📚 + +With the documentation unification, we re-structured the navigation tree of the documents: + +![navigation-menu.png](3a1462191f25bb51fba69cdb759edba6.png) + +The new navigation tree allows you to find any document you want in a more desired way, in the related sub-menu. For example, if you want to learn more about *modularity*, you can find under the **Framework > Architecture > Modularity** menu items, or if you want to learn more about the ABP Studio, you can find the all related docs under the root **Tools** menu. + +## Google Translate & Search Capabilities 🔎 + +In ABP v8.3, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Search support for better findings in the documentation, and introduced Google Translation for the documentation system. After implementing these features, we integrated them into our documentation system and removed the languages select box from the menu: + +![google-translate-and-search.png](3a1462193e86ee8e2460974db1783388.png) + +From now on, we will provide documents in English only. The reason behind that is, that with the new Google Translate support, you can directly translate any documentation to the desired language (of course, must be one of the supported languages). Thanks to the Google Translate feature, you can read the official documentation in your own language, and we as the core team, don't need to synchronize the documentation between different languages, it was really hard to keep them up to date, and now they all will be available all the time in the all supported languages. + +![google-search-result.png](3a146219582b520fef94c9a95bd36167.png) + +Also, thanks to Google Search, now you can search specific keywords to easily find the related topic in the documentation. For example, if you search the **Validation** keyword, Google will list all related documents according to their importance and relevancy: + +## Feedbacks 📝 + +Besides all changes, we also added a **feedback section** at the end of each document. You can share your thoughts, suggestions, or criticism for specific documentation. We would like to hear more from you about our documentation quality and get suggestions from each one of you to improve our documents and platform, so it will be much appreciated if you share your feedback for any documentation you want, please don't hesitate! + +![docs-feedbacks.png](3a14621978a2335ed0a66c96393e7b1a.png) + +You can either directly scroll down to the bottom directly for a certain document, or click the **Feedback** action button to navigate to the feedbacks section, and provide feedback: + +![docs-feedback-section.png](3a1462199053fbd8b20fa92db1c15860.png) + +## Conclusion 🎯 + +To see the new ABP documentation system, please visit the [abp.io/docs](https://abp.io/docs/latest/) website. Check out the new navigation tree, read the documents you want, provide feedback to help us improve our documents and more... + +We look forward to your feedback and continued support as we grow together! Thanks in advance 🙏 diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md new file mode 100644 index 0000000000..cd4c3177a1 --- /dev/null +++ b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md @@ -0,0 +1,60 @@ +Ahead-of-Time (AOT) compilation and Just-in-Time (JIT) compilation are two different methods for compiling Angular applications. Here's a breakdown of the differences between them: + +### **Ahead-of-Time (AOT) Compilation** + +**What is AOT?** + +- AOT compilation refers to the process of compiling your Angular application during the build phase, before the application is served to the browser. +- The Angular compiler converts your TypeScript and HTML templates into efficient JavaScript code ahead of time. + +**Advantages:** + +1. **Faster Rendering:** Since the compilation is done beforehand, the browser receives precompiled code, leading to faster rendering and better performance when the app loads. +2. **Smaller Bundle Size:** AOT eliminates the need for the Angular compiler in the client-side bundle, which reduces the overall bundle size. +3. **Improved Security:** AOT compilation checks your templates and bindings during the build process, catching errors early and reducing the risk of injection attacks. +4. **Early Error Detection:** Errors related to templates and bindings are caught during the build time rather than at runtime, leading to more robust and error-free applications. + +**When to Use:** + +- AOT is typically used in production builds because it provides better performance, smaller bundles, and more secure applications. + +**How to Use:** + +- AOT is the default when you run `ng build --prod` in an Angular project. + +### **Just-in-Time (JIT) Compilation** + +**What is JIT?** + +- JIT compilation occurs in the browser at runtime. The Angular compiler translates the TypeScript and HTML templates into JavaScript code just before the application runs in the browser. +- The application is compiled on the fly as the user interacts with it. + +**Advantages:** + +1. **Faster Build Time:** Since there’s no pre-compilation step, the build process is faster during development. +2. **More Flexible Development:** JIT allows for rapid iteration during development, as changes can be quickly reflected without needing to rebuild the entire application. +3. **Dynamic Components:** JIT allows for more flexibility in scenarios where components need to be dynamically created or compiled at runtime. + +**When to Use:** + +- JIT is typically used in development environments because it allows for quicker build times and easier debugging. + +**How to Use:** + +- JIT is the default compilation method when you run `ng serve` for development builds in Angular. + +### **Comparison Summary:** + +| Feature | AOT (Ahead-of-Time) | JIT (Just-in-Time) | +| ---------------------- | ----------------------------- | ---------------------------------- | +| **Compilation Timing** | At build time | At runtime | +| **Performance** | Faster application startup | Slower application startup | +| **Bundle Size** | Smaller (no Angular compiler) | Larger (includes Angular compiler) | +| **Error Detection** | Catches template errors early | Errors caught at runtime | +| **Use Case** | Production | Development | +| **Dynamic Components** | Less flexible | More flexible | + +### **Best Practices:** + +- **Use AOT** for production builds to ensure faster load times, smaller bundle sizes, and more secure applications. +- **Use JIT** during development to take advantage of quicker builds and easier debugging. diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png new file mode 100644 index 0000000000..bd6d7e8cbf Binary files /dev/null and b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png differ diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md new file mode 100644 index 0000000000..5ea6cb6528 --- /dev/null +++ b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md @@ -0,0 +1,83 @@ +# What is Angular Schematics? + +**Angular Schematics** is a powerful tool which is part of the Angular CLI that allows developers to automate various development tasks by **generating and modifying code**. Schematics provides a way to create **templates and boilerplate code** for Angular applications or libraries, enabling consistency and reducing the amount of repetitive work. + +### Key Concepts of Angular Schematics: + +1. **Code Generation:** + - Schematics can generate boilerplate code for various Angular artifacts, such as components, services, modules, pipes... For example, when you run a command like `ng generate component my-component`, Angular uses a schematic to create the component files and update the necessary modules. + +2. **Code Modification:** + - Schematics can also modify existing code in your project. This includes tasks like updating configuration files, adding new routes, or modifying Angular modules. They can be very useful when upgrading projects to a new version of Angular or adding new features that require changes to the existing codebase. + +3. **Custom Schematics:** + - Developers can create their own custom schematics to automate repetitive tasks specific to their projects. For example, if your team frequently needs to set up a certain type of service or configure specific libraries, you can create a schematic that automates these steps. In [ABP Suite](https://abp.io/suite), we use the custom schematics templates to generate CRUD pages for Angular UI. + +4. **Collection of Schematics:** + - Schematics are often grouped into collections. The Angular CLI itself is a collection of schematics. You can create your own collection or use third-party schematic collections created by the Angular community. + +5. **Integration with Angular CLI:** + - Schematics is integrated with the Angular CLI. The `ng generate` and `ng add` commands are examples of how schematics are used in everyday Angular development. When you use these commands, the Angular CLI runs the corresponding schematic to perform the desired operation. + +6. **Upgrade Tasks:** + - Schematics can be used to automate the process of upgrading Angular applications. For example, the Angular Update command (`ng update`) uses schematics to automatically apply necessary changes to your project when upgrading to a new version of Angular. + +### Common Use Cases: + +- **Generating Components, Services, Modules.:** Easily create Angular building blocks with commands like `ng generate component`, `ng generate service`, or `ng generate module`. + +- **Adding Libraries:** Automatically set up and configure third-party libraries with `ng add`. For example, `ng add @angular/material` uses a schematic to install and configure Angular Material in your project. + +- **Automating Project Upgrades:** Simplify the process of upgrading Angular versions by running `ng update`, which uses schematics to make necessary code changes. + +- **Custom Project Scaffolding:** Create custom schematics to enforce your team's development standards and best practices by automating the creation of specific project structures. + +### How to Create a Custom Schematic: + +Creating a custom schematic involves several steps: +1. **Install the Schematics CLI:** + ```bash + npm install -g @angular-devkit/schematics-cli + ``` + +2. **Create a New Schematic Project:** + ```bash + schematics blank --name=my-schematic + cd my-schematic + ``` + +3. **Define Your Schematic:** Modify the files in the schematic project to define what your schematic will generate or modify. + +4. **Test Your Schematic:** You can run your schematic locally using the `schematics` command. + +5. **Publish Your Schematic (Optional):** Once your schematic is ready, you can publish it to npm or include it in your Angular projects. + +#### Example: +If you want to create a custom component with specific settings or styles, you can create a schematic to automate this. Every time a developer on your team needs to create this type of component, they can run the schematic, ensuring consistency across the project. + + + +### Helpful Links + +Here are the direct links for the Angular Schematics resources: + +- [Angular Official Documentation: Schematics Overview — angular.io](https://angular.io/guide/schematics) + +- [Creating Custom Schematics — angular.io](https://angular.io/guide/schematics-for-libraries) + +- [CLI Schematic Command — angular.io](https://angular.io/cli/schematic) + +- [Devkit Schematics— github.com](https://github.com/angular/angular-cli/tree/main/packages/angular_devkit/schematics) + +- [Schematics Examples — github.com](https://github.com/angular/angular-cli/tree/main/packages/schematics/angular) + +- [Debugging Angular Schematics — dev.to](https://dev.to/nikolasleblanc/debugging-angular-schematics-1ne0) + +- [Using Schematics with Nx — nx.dev](https://nx.dev/guides/using-angular-schematics) + +- [Schematics API — angular.io](https://angular.io/api/schematics) + + + +### Conclusion: +Angular Schematics is a powerful tool for automating repetitive tasks, generating consistent code, and managing project upgrades. By leveraging schematics, Angular developers can save time, reduce errors, and enforce best practices across their projects. diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png new file mode 100644 index 0000000000..3e155996e8 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md new file mode 100644 index 0000000000..a294a1f2e6 --- /dev/null +++ b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md @@ -0,0 +1,121 @@ +# Do You Really Need Multi-tenancy? + +This article discusses whether you need a multi-tenancy architecture for your next project. Answer my critical questions to decide if multi-tenancy suits your application or not! + +## What’s Multi-tenancy? + +It’s an architectural approach to building SaaS solutions. In this model, the hardware and software resources are shared between tenants, and application data is virtually or physically isolated between tenants. Here, **the main goal is minimizing costs and maximizing customer count**. + +**An ideal multi-tenant application should be;** + +- A multi-tenancy system should be designed to **work seamlessly** and make your application code **multi-tenancy aware** as much as possible. +- When a customer wants to separate their database, it **should also be deployable to on-premise**. + + +![Tenancy Schema](tenancy-schema.png) + + +--- + + + +## Multi-tenant Development is Hard - Reconsider! + +**Developing a multi-tenant application is harder** compared to non-multi-tenant applications. You add `TenandId` to all your shared entities. And each time you make a query, you need to filter by `TenantId`. There is an increased risk of security breaches if one tenant's data is compromised. Multi-tenancy can limit the extent of customization available to each tenant since they all operate on the same core infrastructure. Also, in a microservice environment, things get two times more complicated. So you should carefully consider if you need multi-tenancy or not. Sometimes, I got questions like; + +![Questions](questions.png) + +**No! These are not multi-tenant applications.** It just needs a simple filtering by your different branches/faculties/departments/holding sub-companies/ groups or whatever hierarchy is… +**You are confusing "grouping" with "resource sharing".** + +--- + + + +## Do I Really Need Multi-tenancy? + +Ask yourself the following questions if you cannot decide whether your app needs multi-tenancy or not; + +1. Can a user be shared among other tenants? +2. Any tenant needs to see other tenant's data? +3. Does your application break when you physically move one of the tenants? +4. Do your customers need higher security and better GDPR enforcement? +5. Do you need cumulative queries over your tenants? + + + +Let's answer these questions; + + + +##### **1. Can a user be shared among other tenants?** + +If you need to *share a user among other tenants, or in other words, users can be members of different tenants,* then **your application is definitely not multi-tenant**! Multi-tenancy means a tenant’s data is always isolated, even if it’s logically separated. **You cannot share a user among your tenants.** The reason is simple: In the future, if you move a tenant to on-premise, then your application will break! + +![user-multiple-membership](user-multiple-membership.png) + +##### **2. Does any tenant need to see other tenants' data?** + +If your answer is **YES**, **then** **your application is not multi-tenant**. In multi-tenant apps, the tenant's data cannot be shared in any circumstances among the other tenants. Business decision-makers sometimes want to share some entities with other tenants. If there's this requirement, you shouldn't start a multi-tenant architecture. You can simply group these tenants manually. Again, reply to this question; **In the future, if I move a tenant physically to another environment, will my app still work properly?** In this case, it will not! + +![Shared entity](shared-entity.png) + +Let's say your app is *Amazon.com* and you have a product entity *iPhone* that you want to share with other sellers. This requirement violates the multi-tenant rule. While your *Amazon.com* is still SaaS, it shouldn't be multi-tenant. + +On the other hand, if you serve several online shopping websites dedicated to different brands. Let's say Nike and Adidas want to have their own e-commerce websites. And your ***Amazon.com* provides these companies with their own subdomains: *nike.amazon.com* and *adidas.amazon.com***. In this architecture, these companies will have their own user, roles, settings. Also these companies will have their own branding like custom login screen, custom logo, different theme layouts, menu items, language options, payment gateways etc... Hence, **this is %100 multi-tenant.** + + + +##### **3. Does your application break when you physically move one of the tenants?** + +If your answer is **YES**, you should **stop making it multi-tenant**. It is **not a multi-tenant app**! This means your tenants are tightly coupled with the application's infrastructure or database, and this requirement prevents you from making it multi-tenant because it disrupts the entire system when you take out a tenant. + +![Coupled Tenants](coupled-tenants.png) + + +##### **4. Do your customers need higher security and better GDPR enforcement?** + +If your answer is **YES**, you **should not make it multi-tenancy.** When a **hacker** gets into your server, he can **steal all your client data**. Also, if you have a security hole, **a tenant can gain access** to other tenants' data. Especially your tenants' data is being shared in the same database... On the other hand, some customers, for example, government agencies or banks, may be required to locate the database in their own geo-location and make it unreachable from the main application. In this case, you should go with a single-tenant architecture. Another difficulty is that some tenants may have **different data retention policies**, so you must implement different strategies for each tenant. In this case, you should also consider making it a single-tenant. + +![Security GDPR Data Retention](security-gdpr-db-retention.png) + +##### **5. Do you need cumulative queries over your tenants?** + +This question is not a clear decision parameter for multi-tenancy. But it can be a supportive parameter for your decision. Actually, this is a common feature in multi-tenant systems where aggregated reporting or analytics across tenants is required. In a virtually isolated multi-tenant environment, you can easily do this by just disabling the multi-tenancy filter. However, when some of your tenants have separate databases or application instances, it becomes harder to get aggregate reports. + +Do you need cumulative queries over your tenants? If your answer is YES, then you should keep all your tenants' data in a shared database to easily query them. But if you still need to physically move some of the tenants, then you have the following strategies: + +* First, all your databases need to be on the same network so that you can gather data from different databases. +* Second, in some cases, according to the GDPR requirements or government agency regulations, you must locate the database in their geo-location. And you cannot connect to these databases. In this case, you can create a Web API in your application that gives you a report for this specific tenant. Later, you'll gather the reports from all your tenants like this and merge them. +* Third; When the tenant databases are in different geo-location (inaccessible), then each tenant can send their report to your central server. So you can generate cumulative reports. + + + +## Conclusion + +- It's important to decide on the first day whether your application needs to be multi-tenant. To decide this, consider these topics; + + - **Do my tenants really have a relationship with each other?** No, they have nothing to do in common; **OK, go with multi-tenancy**. + - **My tenants don't have a relationship** with each other, and the only thing they have in common is sharing my application. **OK, go with multi-tenancy**. + - **When a tenant leaves the system (by removing their data), the other tenants also stop working** This means that the tenants are coupled. **Do not do multi-tenancy!** + + + +--- + + + +![Logo](https://abp.io/assets/platform/img/logos/logo-abp-dark.svg) + +We’ve been working for a long time on multi-tenancy, microservices, modular development topics, and developing tools and frameworks for repetitive development tasks. Check out the amazing open-source [ABP Framework](https://github.com/abpframework/abp), which provides all the alternative solutions to implement a multi-tenant architecture. The multi-tenancy logic is seamlessly done at the core level, and you can simply focus on your business code. Keep it simple, nice and neat with ABP. + + +```bash +ABP.IO: The Modern Way of Developing Web Apps for .NET Developers! +``` + + + +Alper Ebicoglu / [x.com/alperebicoglu](https://x.com/alperebicoglu) + +— ABP Team diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png new file mode 100644 index 0000000000..5dbe089084 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png new file mode 100644 index 0000000000..0946615495 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png new file mode 100644 index 0000000000..d75731dbef Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png new file mode 100644 index 0000000000..ae38dae0e2 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png new file mode 100644 index 0000000000..bb9b5d979d Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png new file mode 100644 index 0000000000..952aca7266 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png new file mode 100644 index 0000000000..9cd6bcfb48 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png differ diff --git a/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/3a14f8d3e5f86b230ae92e5734b8400b.png b/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/3a14f8d3e5f86b230ae92e5734b8400b.png new file mode 100644 index 0000000000..30883ebf92 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/3a14f8d3e5f86b230ae92e5734b8400b.png differ diff --git a/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/3a153ae9a87ee1b9eb8b2782b82e1789.png b/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/3a153ae9a87ee1b9eb8b2782b82e1789.png new file mode 100644 index 0000000000..a182c04647 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/3a153ae9a87ee1b9eb8b2782b82e1789.png differ diff --git a/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/post.md b/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/post.md new file mode 100644 index 0000000000..de27f8cdbd --- /dev/null +++ b/docs/en/Community-Articles/2024-09-12-abpio-platform-83-final-has-been-released/post.md @@ -0,0 +1,77 @@ +[ABP](https://abp.io/) 8.3 stable version has been released today. + +## What's New With Version 8.3? + +All the new features were explained in detail in the [8.3 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-3-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 8.3 + +### Creating New Solutions + +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) to create new solutions. + +By default, ABP Studio uses stable versions to create solutions. Therefore, it will be creating the solution with the latest stable version, which is v8.3 for now, so you don't need to specify the version. + +### How to Upgrade an Existing Solution + +You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained: + +### Upgrading via ABP Studio + +If you are already using the ABP Studio, you can upgrade it to the latest version to align it with ABP v8.3. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info. + +After upgrading the ABP Studio, if you are using a stable version, such as v8.2.0, then you can open your solution in the application, and simply click the **Upgrade ABP Packages** action button to instantly upgrade your solution: + +![upgrade-abp-packages.png](3a153ae9a87ee1b9eb8b2782b82e1789.png) + +If you are using an RC version, you can use the **Switch to stable** option as follows: + +![switch-to-stable.png](3a14f8d3e5f86b230ae92e5734b8400b.png) + +### Upgrading via ABP CLI + +Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet, you can run the following command: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +Or to update the existing CLI, you can run the following command: + +```bash +dotnet tool update -g Volo.Abp.Studio.Cli +``` + +After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows: + +```bash +abp update +``` + +> You can run this command in the root folder of your solution. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3) + +## Community News + +### New ABP Community Posts + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [Alper Ebicoglu](https://twitter.com/alperebicoglu) has created **three** new community articles: + * [Do You Really Need Multi-tenancy?](https://abp.io/community/articles/do-you-really-need-multitenancy-hpwn44r3) + * [What is Angular Schematics?](https://abp.io/community/articles/what-is-angular-schematics-2z4jusf5) + * [Understanding Angular AOT vs JIT Compilations](https://abp.io/community/articles/understanding-angular-aot-vs-jit-compilations-0r0a0a3f) +* [Dynamic Widget Communication](https://abp.io/community/articles/dynamic-widget-communication-uvun7q23) by [Suhaib Mousa](https://suhaibmousa.com/) +* [Introducing the Google Cloud Storage BLOB Provider](https://abp.io/community/articles/introducing-the-google-cloud-storage-blob-provider-yrt6azc0) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [Switching Between Organization Units](https://abp.io/community/articles/switching-between-organization-units-i5tokpzt) by [Liming Ma](https://github.com/maliming) + +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/create) to the ABP Community. + +## About the Next Version + +The next feature version will be 9.0. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/cover.png b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/cover.png new file mode 100644 index 0000000000..2c1048c5ce Binary files /dev/null and b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/cover.png differ diff --git a/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md new file mode 100644 index 0000000000..1d78b493e4 --- /dev/null +++ b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md @@ -0,0 +1,147 @@ +# ASP.NET Core Blazor 9.0 New Features Summary 🆕 + +In this article, I'll highlight .NET 9's Blazor updates and important features for ASP.NET Core 9.0. These features are based on the latest .NET 9 Preview 7. + +## .NET MAUI Blazor Hybrid App and Web App solution template + +There's a new solution template to create .**NET MAUI native** and **Blazor web client** apps. This new template allows to choose a Blazor interactive render mode, it uses a shared Razor class library to maintain the UI's Razor components. + +For more info: + +* [learn.microsoft.com > maui blazor web app tutorial](https://learn.microsoft.com/en-us/aspnet/core/blazor/hybrid/tutorials/maui-blazor-web-app?view=aspnetcore-9.0) +* [reddit.com/r/Blazor/comments/1dabyzk/net_8_blazor_hybrid_maui_app_web_hosting/](https://www.reddit.com/r/Blazor/comments/1dabyzk/net_8_blazor_hybrid_maui_app_web_hosting/) + + + +## A new middleware: `MapStaticAssets` + +This new middleware optimizes the delivery of static assets in any ASP.NET Core app, also for Blazor. Basically it compresses assets via [Gzip](https://datatracker.ietf.org/doc/html/rfc1952), [fingerprints](https://developer.mozilla.org/docs/Glossary/Fingerprinting) for all assets at build time with a Base64 and removes caches when Visual Studio Hot Reload (development time) is in action. + +For more info: + +* [learn.microsoft.com > optimizing static web assets](https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-9.0?view=aspnetcore-8.0#optimizing-static-web-asset-delivery) +* [learn.microsoft.com > fundamentals of static files](https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/static-files?view=aspnetcore-9.0#static-asset-middleware) + + + +## Simplifying the process of querying component states at runtime + +1. Finding the component's current execution location: This can be especially helpful for component performance optimization and debugging. +2. Verifying whether the component is operating in a dynamic environment by checking: This can be useful for parts whose actions vary according to how their surroundings interact. +3. Obtaining the render mode allocated to the component: Comprehending the render mode can aid in enhancing the rendering procedure and augmenting the component's general efficiency. + +For more info: + +* [learn.microsoft.com > detect rendering location interactivity & render mode runtime](https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-9.0#detect-rendering-location-interactivity-and-assigned-render-mode-at-runtime) + + + +## Detecting component's location, interactivity support and render mode + +The `ComponentBase.RendererInfo` and `ComponentBase.AssignedRenderMode` now allows to detect the following actions: + +* `RendererInfo.Name` returns the location where the component is executing +* `RendererInfo.IsInteractive` indicates if the component supports interactivity at the time of rendering. +* `ComponentBase.AssignedRenderMode` exposes the component's assigned render mode + + + +## Better server-side reconnection + +* When the previous app is disconnected and the user navigates to this app, or browser put this app in sleep mode, Blazor runs reconnection mechanism. + +* When reconnection is not successful because your server killed connection, it automatically makes a full page refresh. + +* With the new below config, you can adjust your reconnection retry time: + + * ```csharp + Blazor.start({ + circuit: { + reconnectionOptions: { + retryIntervalMilliseconds: (previousAttempts, maxRetries) => + previousAttempts >= maxRetries ? null : previousAttempts * 1000 + }, + }, + }); + ``` + + + +## Simple serialization for authentication + +The new APIs in ASP.NET make it easier to add authentication to existing Blazor Web Apps. These APIs, now part of the Blazor Web App project template, allow authentication state to be serialized on the server and deserialized in the browser, simplifying the process of integrating authentication. This removes the need for developers to manually implement or copy complex code, especially when using WebAssembly-based interactivity. + +For more info: + +- [learn.microsoft.com > blazor Identity UI individual accounts](https://learn.microsoft.com/en-us/aspnet/core/blazor/security/server/?view=aspnetcore-9.0#blazor-identity-ui-individual-accounts) +- [learn.microsoft.com > manage authentication state](https://learn.microsoft.com/en-us/aspnet/core/blazor/security/server/?view=aspnetcore-9.0#manage-authentication-state-in-blazor-web-apps) + + + +## Easily add static server-side rendering pages + +With .NET 9, adding static server-side rendering (SSR) pages to globally interactive Blazor Web Apps has become simpler. The new `[ExcludeFromInteractiveRouting]` attribute allows developers to mark specific Razor component pages that require static SSR, such as those relying on HTTP cookies and the request/response cycle. Pages annotated with this attribute exit interactive routing and trigger a full-page reload, while non-annotated pages default to interactive rendering modes like `InteractiveServer`. This approach enables flexibility between static and interactive rendering depending on the page's requirements. + +For more info: + +* [learn.microsoft.com > render-modes](https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-9.0#static-ssr-pages-in-a-globally-interactive-app) + + + +## Constructor Injection in Razor Components + +Razor components support constructor injection, allowing services like `NavigationManager` to be injected directly into a component's constructor. This can be used to manage navigation actions, such as redirecting the user upon an event like a button click. + +For more info: + +* [learn.microsoft.com> dependency-injection](https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/dependency-injection?view=aspnetcore-9.0#request-a-service-in-a-component) + + + +## Configuring WebSocket Compression and Frame-Ancestors CSP in Interactive Server Components + +By default, Interactive Server components enable WebSocket compression and set a `frame-ancestors` Content Security Policy (CSP) to `self`, restricting embedding the app in `