Today, we are happy to release the ABP Framework and ABP Commercial 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:
dotnet tool update Volo.Abp.Cli -g --version 8.2.0-rc.3

or install it if you haven't before:

dotnet tool install Volo.Abp.Cli -g --version 8.2.0-rc.3
  1. Create a new application with the --preview option:
abp new BookStore --preview

See the ABP CLI documentation for all the available options.

You can also use the 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.

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:

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:

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 guide.

Introducing the IBlockUiService for Blazor UI

In this version, ABP Framework introduces the IBlockUiService 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:

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

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:

protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
    base.CreateModel(modelBuilder);

    modelBuilder.Entity<Question>(b =>
    {
        b.CreateCollectionOptions.Collation = new Collation(locale:"en_US", strength: CollationStrength.Secondary);

        b.ConfigureIndexes(indexes =>
            {
                indexes.CreateOne(
                    new CreateIndexModel<BsonDocument>(
                        Builders<BsonDocument>.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 for more information.

Other News

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 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

Also, you can view and manage users sessions on the Users page of the Identity Module:

manage-user-sessions-1.png

manage-user-sessions-2.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

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

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:

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

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

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 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

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

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

We organized ABP Dotnet 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.

DevDays Europe 2024

devdays-europe.jpg

Co-founder of Volosoft, Alper Ebiçoğlu gave a speech about "How to Build a Multi-Tenant ASP.NET Core Application" at the DevDays Europe 2024 on the 20th of May.

DevOps Pro Europe 2024

devops-pro-europe.jpg

We are thrilled to announce that the co-founder of Volosoft and Lead Developer of the ABP Framework, Halil Ibrahim Kalkan gave a speech about "Building a Kubernetes Integrated Local Development Environment" in the DevOps Pro Europe on the 24th of May.

Devnot Dotnet Conference 2024

We are happy to announce that core team members of the ABP Framework, Alper Ebiçoğlu and Enis Necipoğlu will give speeches at the Devnot Dotnet Conference 2024 on 25th of May.

Alper Ebiçoğlu will talk about "AspNet Core & Multitenancy":

devnot-dotnet-conference-alper-ebicoglu.png

On the other hand, Enis Necipoğlu will talk about "Reactive Programming with .NET MAUI":

devnot-dotnet-conference-enis-necipoglu.png

New ABP Community Articles

There are exciting articles contributed by the ABP community as always. I will highlight some of them here:

Thanks to the ABP Community for all the content they have published. You can also post your ABP-related (text or video) content 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 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!