XAF - 2022 Roadmap (Cross-Platform .NET App UI & API Services)

XAF Team Blog
28 February 2022

Before I detail XAF’s 2022 Roadmap, my thanks to everyone who shared feedback/comments last year. Your contribution to XAF’s evolution is appreciated. The following list outlines the features/capabilities we expect to introduce in our Cross-Platform .NET App UI - XAF and .NET App Security API this year. 

Table of Contents

ASP.NET Core Blazor UI

We expect to introduce the following to XAF's Blazor UI in the v22.1 release cycle:

  • Release of DxGridListEditor (Server Mode support, custom calculated field support, column resizing support, performance enhancements, Column Chooser). Available in v22.1.
  • Main Menu Toolbar Enhancements (learn more). Available in v22.1.
  • Preview of Runtime Form Layout Customization for End-Users (learn more). Postponed to v22.2.
  • Migration to the DevExpress themes. Postponed to v22.2.
  • Bootstrap 5 Support. Available in v22.1.

v22.1 is mostly a service release for XAF's Blazor UI, because it is fully dependent on the progress made with DevExpress Blazor components. Even though the XAF team is heavily involved at early planning and testing stages, we still require additional time to integrate and test the latest component enhancements (roadmap). So, not all new Blazor component features available in v22.1 will ship as part of XAF's Blazor UI v22.1. We expect to catch up in v22.2 with enhancements such as accordion for navigation, inline row editing and export in the grid control, split view like Outlook, advanced popup windows, etc. We will detail these plans in another roadmap post around the July time frame.

We also encourage XAF developers to remember that XAF is fully extendable framework/constructor, and that you can incorporate Blazor and DevExtreme components/customize XAF’s default UI as needed today, without waiting for another release. More customization tips | Blazor UI (FAQ).
BACK TO THE TOP

WinForms UI

Release of Entity Framework Core 5 for Data Access

In v22.1, we can recommend production use of Entity Framework Core 5 (EF Core 5) data models in .NET 6 WinForms apps (Documentation). You can find a demo at: c:\Users\Public\Documents\DevExpress Demos 22.1\Components\eXpressApp Framework\EFCoreDemo\. EF Core 5 can also be used in XAF's Blazor apps and .NET App Security API. Enhancements include multiple stability fixes and support for the Server and DataView access modes in ListView. Available in v22.1. 

As we noted 1 year ago, we encourage our Entity Framework 6 (EF 6) users to consider EF Core 5 for new XAF's Blazor and WinForms .NET 5+ projects. Microsoft has moved EF 6 into maintenance mode, and as such, EF 6 will not mirror XAF's .NET 5+ offering. At present, EF Core 5 supports key XAF technologies/capabilities including advanced security and comprehensive audit trail support. EF Core 5 also offers better performance when compared to EF 6. For more information, see Porting from EF 6 to EF Core.

Release of Middle Tier Application Server for .NET 6 

In v22.1, we can recommend production use of our Middle Tier application server with XPO-based .NET 6 WinForms apps. Available in v22.1.

Entity Framework Core 6 Support in WinForms, Blazor & API Services for Data Access

Support for Entity Framework Core 6 (EF Core 6) is expected in our v22.2 release cycle. EF Core 6 is the latest version of Entity Framework and has a number of advantages over EF Core 5: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-6.0/whatsnew. Unfortunately, Microsoft introduced a number of breaking changes that we will need to address. We will not support EF 7 in 2022 unless there are strong reasons to do so (because this is NOT an LTS release). 
BACK TO THE TOP

API Services for Non-XAF UI Clients

Release of the FREE Web API Service for Basic CRUD & Authorization in v22.1

Our Web API backend service is powered by Swagger/OpenAPI and allows you to reuse XAF application data, logic, and modules within non-XAF apps. Our v22.1 release will include stability, performance, and documentation updates. In addition, we will support EF Core 5 for Web API Service (in previous versions, only XPO was supported). We will also update example E4908 to use the Web API Service instead of a custom implementation with plain OData v4. Available in v22.1.

The Future of XAF API Services: FREE and PAID Capabilities

We will keep offering basic CRUD and authorization functions for free as part of our .NET Role-based Access Control & Permission Management API. In v22.1, this free product will also include a project template that will generate a Web API Service with the same basic functions powered by Entity Framework Core 5 and XPO ORM. To download your free copy, please verify your contact information and click Register on the following web page: https://www.devexpress.com/security-api-free.  

We will also add paid enterprise features for this security API and Web API Service. Like technical support, these paid features will be a part of the XAF/Universal license. For instance, v22.1 will include end points to get localized captions for classes and members in the Web API Service. Available in v22.1.

Later this year we also hope to support XAF's audit trail for Entity Framework Core 6 and XPO, end points to download reports in PDF or FileData-based attachments, advanced CRUD with XAF validation rules, etc). For more information on these paid capabilities, check out XAF modules.
BACK TO THE TOP


BACK TO THE TOP

Cross-Platform Enhancements

.NET 6 Is Used By Default

XAF's Blazor and WinForms (.NET Core) assemblies will target .NET 6 with our v22.1 release. .NET 6 is a long-term support (LTS) release, and with it we can deliver the best experience from a UX and performance perspective for Blazor, XAF Model Editor, and our WinForms design-time. Available in v22.1.

Simplified XAF Solution Structure

We removed SolutionName.Module.XXX projects and allowed XAF developers to add Controllers, business classes, list and property editors, view items, and other XAF-specific entities to automatically load from SolutionName.XXX executable projects. This should make it easier for new XAFers to get started with the product and also eliminate mistakes for existing XAF developers. Available in v22.1.

BACK TO THE TOP

Preview of XAF Module Extensions for Unified Application Configuration in WinForms & Blazor

As you may recall from our 2021 roadmap, we will NOT support Module and Application Designers in .NET 5+ apps. These designers duplicate Solution Wizard functionality and are rarely used (occasional module or application configurations can be easily addressed with a few lines of code: example).

To promote straightforward and consistent configurations for security and application modules across WinForms and Blazor in .NET 6, XAF v22.1 will support  fluent API syntax in Startup.cs. Available in v22.1.

...
services.AddXaf(Configuration, builder => {
builder.UseDefaultApplicationFactory<SimpleAppSetupDemoBlazorApplication>();
builder.Modules
    .AddSystemBlazorModule()
    .Add<SimpleAppSetupDemoModule>()
    .AddSecurityModule()
    .AddAuditTrailModule(auditTrailModule =>
        auditTrailModule.AuditDataItemPersistentType = typeof(DevExpress.Persistent.BaseImpl.AuditDataItemPersistent))
    .AddCloneObjectModule()
    .AddConditionalAppearanceModule()
    .AddDashboardsBlazorModule(null, options => {
        options.SetupDashboardConfigurator = (configurator, serviceProvider) => {
            configurator.DefaultDataReloadingTimeout = TimeSpan.FromSeconds(5);
        };
        options.RouteOptions.Endpoint = "customApiRoute/dashboards";
    })
...

The PlatformApplication.designer.xx and Module.designer.xx files will be removed from the Solution Wizard template in .NET 6 apps as well. These changes will NOT affect .NET Framework apps and you can keep using the old-good option with the designers as before. 
BACK TO THE TOP 

Model Editor Enhancements

The Model Editor is now built with .NET 6 and delivers better performance and stability. Users will also like the simplified drag-and-drop implementation under the NavigationItems node (you no longer need to precisely point out the Items sub-node and can drop an item directly on the root node). Available in v22.1.


BACK TO THE TOP

Support for XAF Data Sources in the .NET 6 Report Designer

XAF developers will be able to use XAF-specific report data sources in the new .NET 6 Report Designer for Visual Studio. Known issues such as missing XAF business classes in the ObjectTypeName editor or missing members in the Field List have been addressed. Available in v22.1.

Unit & Functional Test Infrastructure in Solution Wizard

Solution Wizard will include built-in end-to-end (e2e) tests in C# powered by our EasyTest functional testing engine and popular unit testing libraries such as xUnit, nUnit. Available in v22.1.

Later this year will add boilerplate code for unit testing and CI/CD template to help you get started with specific tests-related tasks in minutes using GitHub Actions and Azure DevOps. 
BACK TO THE TOP 

[Theory]
[InlineData(BlazorAppName)]
[InlineData(WinAppName)]
public void CreateStudent(string applicationName) {
    FixtureContext.DropDB(AppDBName);
    var appContext = FixtureContext.CreateApplicationContext(applicationName);
    appContext.RunApplication();
    appContext.GetForm().FillForm(("User Name", "Admin"));
    appContext.GetAction("Log In").Execute();

    appContext.Navigate("Student");
    Assert.Equal(0, appContext.GetGrid().GetRowCount());

    appContext.GetAction("New").Execute();
    appContext.GetForm().FillForm(("First Name", "John"), ("Last Name", "Smith"));
    appContext.GetAction("Save").Execute();
    Assert.Equal("John Smith", appContext.GetForm().GetPropertyValue("Full Name"));

    appContext.Navigate("Student");
    Assert.Equal(1, appContext.GetGrid().GetRowCount());
    Assert.Equal(new string[] { "John", "Smith" }, appContext.GetGrid().GetRow(0, "First Name", "Last Name"));
}

BACK TO THE TOP

Release of Pre-Built Code & Project Error Diagnostics

We shared a preview of this useful feature in v21.2, and are now releasing it under the CodeRush umbrella. The DevExpress.ExpressApp.CodeAnalysis package will be renamed to DevExpress.CodeRush.CodeAnalysis.XAF and the Project Converter will take care of this automatically. Available in v22.1.

If you have not yet voted in the CodeRush 2022 Roadmap survey, I strongly recommend you do this today, because certain enhancements may be very interesting for XAF/XPO users.

New Database Connection Providers in XPO

We will keep XPO connection providers up to date with the latest database engines and extend support based on user feedback.

  • MySqlConnector is a new ADO.NET data provider (MIT) for MySQL, MariaDB, Amazon Aurora, Azure Database for MySQL and other MySQL-compatible databases. It should deliver more value than the old MySql.Data provider (GPLv2). Available in v22.1.
  • We will support the latest version of PostgreSQL driver for .NET Core apps - Npgsql 6.0. Available in v22.1.
  • We will also expand XPO connection provider support with SAP HANA. Available in v22.1.

BACK TO THE TOP 

Your Opinion Counts

As always, we look forward to your comments and questions. Use the field below to share feedback with us.

The information contained within this blog post details our current/projected development plans. Please note that this information is being shared for INFORMATIONAL PURPOSES ONLY and does not represent a binding commitment on the part of Developer Express Inc. This roadmap and the features/products listed within it are subject to change. You should not rely on or use this information to help make a purchase decision about Developer Express Inc products.

Need Faster Support Replies?

Once you create a new XAF ticket in the DevExpress Support Center and select XAF under the Platform/Product field, please review the following help links displayed above the Submit button. These links describe how you can collect callstacks, logs and other important diagnostic information for any .NET error. Once you collect/compile this information, forward it to us along with your support ticket. This information will ensure faster and more accurate replies from support.

Nate Laff
Nate Laff
What happened with async audit trail? That never made it in did it?
28 February 2022
SaiKan
SaiKan
I have to humbly disagree with the "Simplified Solution Architecture" change. The SOP made total sense. Im not sure how/why that would confuse new XAFers.
28 February 2022
Taradanov
Taradanov

About simplified project structure - for my strictly Web or strictly Desktop solutions i manually move everything from Project.Module/Project.Module.XXX to Project.Win or Project.Blazor projects for simplicity.

It would be great if it will be possible to choose Project structure on project creation - either default (old) behavior with Module/Module.XXX modules, simplified with only crossplatform Module or simple with only Desktop/Blazor project. 

28 February 2022
CRM-7a7cc1d6-5ee5-409a-b05c-acef24352bf3
Paul PS
Thats a lot of things to do. Is there any ETA for Web API to be production ready? 
1 March 2022
Akin GUNES
Akin GUNES

What about missing modules like ChartModule, PivotGridModule, SchedulerModule and all others. Also ProperyEditors like RichTextPropertyEditor, TimePropertyEditor, TreeListPropertyEditor etc.. All of these components are ready in Blazor Component Suite. We are waiting their xaf implementation out of box.

Also Grid export (especially for excel, pdf, html) is very important for all community. Ability to show images on main menu and View Caption is also important and i think your Blazor Menu component is ready to replace Xaf Blazor UI's TreeList based navigation control. 

To be honest, i think most of these should have been implemented in 20.2 version. I think Xaf Blazor UI is going very slow after it is first release. That is my opinion. I respect all your effort and great job you are doing. But we expect more from you hero guys.

1 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Nate Laff: If you look into the AuditTrailService source code, you can find the SaveAsync method, but we have not completed the remaining tasks, because it appeared bigger than we thought. So, this feature is paused for now.

@SaiKan, Taradanov: Thanks for your feedback. We want to reduce the number of projects, because the whole world is moving in this direction (file-scope namespaces, minimal APIs, etc.), and, more importantly, we want to avoid issues that XAF newbies had with the SolutionName.XXX projects - now they will be like any other module project with regard to Controllers, business classes, etc. This makes SolutionName.Module.XXX projects redundant.

@Paul PS: As I noted, XAF's Web API Service will be ready for production use in v22.1. Have you tried its preview in v21.2, and if so, what is holding you back from using it today?

@Akin Gunes: Thanks for your continued support. XAF's Blazor UI already supports the Office Module for rich text editing and the Dashboard module for data visualization scenarios. Our position on the Chart and PivotGrid modules  has not changed since 2021 roadmap (btw, there you can also find examples of Scheduler and TreeList (DevExtreme) integration - there is also no TreeList component in Blazor Components yet). We will take your feedback on the main and navigation menu enhancements into account. As I noted, this plan may be updated around the July time frame).


1 March 2022
Alain Bismark
Alain Bismark

Hi Dennis

I would like to know if exists plans to improve the way to model in XAF, for example support of DDD or similar approach, or create other functionalities that keep XAF on top!


For example I saw this https://github.com/mcintyre321/ValueOf, and might be will be great to have this kind of things in XPO to improve the way to create models.


Might be other thing to consider is to declare permissions in code:

private bool _ReporteParcialPermitido = false;

[AllowWrite("ROLE_APROBADORES"]

[AllowRead("ROLE_APROBADORES"] public bool ReporteParcialPermitido

{ get { return _ReporteParcialPermitido; }

set { SetPropertyValue(nameof(ReporteParcialPermitido), ref _ReporteParcialPermitido, value); }

}


Consider the following featur : entity splitting

https://docs.microsoft.com/en-us/ef/ef6/modeling/designer/entity-splitting?redirectedfrom=MSDN%5D

Consider create forms like this  

I am wondering if is possible to use AttributeProvider to simplify the model definition, please check my code

public interface Model_Attributes_Provider
    {
        [VisibleInListView(true)]
        [VisibleInDetailView(true)]
        [VisibleInLookupListView(true)]
        [ModelDefault("AllowEdit", "False")]
        object NoVisible_NoEditable { get; set; }
    }

and we can declare the following property in a business object

[AttributeProvider(nameof(Model_Attributes_Provider), nameof(Model_Attributes_Provider.NoVisible_NoEditable))]
        public string PropertyName
        {
            get => propertyName;
            set => SetPropertyValue(nameof(PropertyName), ref propertyName, value);
        }

check a right example

As an example:

using System;
using System.ComponentModel;
class Foo {
    [AttributeProvider(typeof(IListSource))]
    public object Bar { get; set; }

static void Main() {
        var bar = TypeDescriptor.GetProperties(typeof(Foo))["Bar"];
        foreach (Attribute attrib in bar.Attributes) {
            Console.WriteLine(attrib);
        }
    }
}
outputs:

System.SerializableAttribute
System.ComponentModel.AttributeProviderAttribute
System.ComponentModel.EditorAttribute
System.Runtime.InteropServices.ComVisibleAttribute
System.Runtime.InteropServices.ClassInterfaceAttribute
System.ComponentModel.TypeConverterAttribute
System.ComponentModel.MergablePropertyAttribute

thanks





1 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Alain Bismark: Thanks for your suggestions. You can implement what you described in the current XAF version with your own custom attributes and a little .NET Reflection. Once you declare custom attributes and implement the mechanism to read them, you can use XAF's Types Info, Application Model, and Security System API to "convert" your attribute to specific XAF security permissions, Application Model nodes, etc. - the capabilities are unlimited here.

We have not planned to add a "AttributeProvider" mechanism out-of-the-box at this stage. I remember we had a similar request 4-5 years ago, but then I found that it was from you and we gave some starter code for your implementation there (your SC ticket). Have you abandoned this idea? If not, what implementation issues you experienced and what did not work as expected so far? Thanks.
1 March 2022
Alain Bismark
Alain Bismark

Thanks Dennis

yes! Xaf can be customized in several ways, but I think that “native functionalities” based on community extensions or ideas is a great way to keep Xaf “updated”.

what about the other topics?, DDD support of value objects for example ?


Thanks in advance !

1 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)

@Alain Bismark: No plans for this in XAF/XPO 2022.

1 March 2022
Manuel Grundner [DevExpress MVP]
Manuel Grundner
@Alain Bismark You can look into [Xenial ModelBuilders](ModelBuilders - Buddy class approach | Xenial.Framework)
1 March 2022
Randy Jean
Randy Jean
I like the simplified project structure idea.  Most of the time we-re not touching anything in the Desktop/Web/Blazor (non-module projects) other than startup and global config stuff so combining with the platform specific modules makes sense.  I assume existing projects can still remain  with separate projects and this would just apply to new project templates.
2 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Randy Jean: Thanks - yes, this was our main motivation.
2 March 2022
Maximilian Kaya
Max
would like to see webapi grpc crudl without odata etc. dependency, I think that suits with your future plans using SkiaSharp and opens new market for xaf as backend for many other front end developers (flutter,react etc.)
3 March 2022
AlexanderCPunkt
Alexander C. (Co-Orga GmbH)
What about navgiation between entities?
3 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Max: We primarily target .NET developers who use Entity Framework or XPO ORM for data access. OData is a natural choice here. XAF's Blazor UI and Web API Service can already be deployed on Linux servers, if required. What does gRPC give to you over OData for your XAF apps? Are you developing non-XAF UI clients already, and if so, would you please elaborate on what is missing, inconvenient? Thank you.

@Alexander: Please elaborate on your question. If you ask about XAF's Blazor UI, then we hope to have accordion navigation by the end of this year or so.
3 March 2022
Pedro Hernández
Pedro Hernández
Scheduler Module +1
8 March 2022
Isa_Tahiri
Isa_Tahiri
Scheduler / Notification modules +1
8 March 2022
AlexanderCPunkt
Alexander C. (Co-Orga GmbH)

I still missing the possibility to navigate from entity A to entity X via hyperlink on the detail view.

All of our customers are complaining about this missing key feature!

9 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Alexander C. (Co-Orga GmbH): It's already available in v21.2.5. Would you please check out the section "Teaser 2: Custom Buttons for XAF's Blazor UI Lookup Editor Are Comingin my recent post?
9 March 2022
Akin GUNES
Akin GUNES

@Dennis, I think Alexander C is talking about opening the object in new tab/window as i commented in the blog post you are referring. 

Here is my comment again;

LookupEditor's New and Open Related Record actions were most wanted features. I just prefer to control Open Related Record action's target window Open in Popup window  or Open in new tab/window. It would be perfect if we can have both of these two actions (open in popup / open in new tab) with ability to hide both or any of them. 



9 March 2022
AlexanderCPunkt
Alexander C. (Co-Orga GmbH)
@Akin GUNES exactly!
15 March 2022
Kartal TURGUT
Kartal TURGUT
  • Preview of Runtime Form Layout Customization for End-Users (learn more).

Will there an option save layout changes by user or for all users? Some admin users can be change layout for all users.

15 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Kartal TURGUT: XAF already includes this option: How to: Enable the Administrative UI for managing Users' Model Differences.
16 March 2022
SaiKan
SaiKan

FederationDataSource is one of the most powerful (perhaps the most) tool you have in XAF. Data is the most prized possession in an enterprise and presenting it is what EVERY business manager/CFO/CEO want.

Spend more time polishing that tool. 

  • Add support for ObjectDataSource collection - this is how "Business user of the apps think"
  • Add support string query building


Update your DataSource Wizard to allow the use of external token storage so one can safely secure those connection strings or their credentials in vaults such as

  • AWS KMS
  • Azure Key Vault
  • Google KMS
  • Others


22 March 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@SaiKan: FederationDataSource is not XAF's feature, but I've shared your feedback with our BI Dashboard team. I am also happy to hear that you value our Universal subscription that much.
22 March 2022
Randy Jean
Randy Jean

Blazor grids and filtering - really need some feature parity with other platform control sets:

1.  Dropdowns with distinct values to multi-select

2. Excel like filtering for dates/numeric, etc.

3. Filter editor

Good to see all other things on roadmap such as exporting, column chooser, re-sizing, inline editing. If I missed seeing the above 3 items mentioned then I apologize.

We mostly use XAF but build non-XAF as well.  Hoping once 22.1 is out and new Blazor grid is fully implemented that the above 3 items will be addressed.  We would like to go all in on Blazor/XAF but don't want to do a bunch of customizations for features that we know and love from the other platforms.

1 April 2022
wilson mota 1
wilson mota 1
+1 Randy Jean
4 April 2022
CRM-9194aa7b-8cdc-4797-be0e-e9bc2483529b
Customer237809
Hi, is inline edit feature implemented for blazor listview xaf for this version?
6 April 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Customer237809: No.
6 April 2022
Bernd F.
Bernd F.

Here a some features / suggestions that could be a cool addition to XAF Blazor in the future:

  • Master detail view with a tree list (we currently implement it with a tree list and a DetailPropertyEditor as workaround in Web Forms).
  • Token property editor as optional property editor for many-to-many associations (we implemented the property editor in Web Forms but it would be cool to have it out of the box) because especially when the amout of objects is limited a token editor is the more modern, more convient and more screen estate saving option.
  • Option in the model for nodes where you can currently specify the height in pixels (e.g. CustomHeight for RichTextPropertyEditor or the VerticalScrollableHeight for the grid list editor) to take the maximum available height instead. In our views it happens pretty often that there is one element in the layout (like e.g. a rich text field) that could happily take the available vertical screen estate but instead the space is wasted. I think a lot of our DetailViews would look better out of the box.

On a side note: Themes and the Size Mode are cool! :)

14 April 2022
Rubén Duarte
Rubén Duarte
When is expected to be releases the 22.1 version? 
14 April 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Rubén Duarte: May-June.
20 April 2022
Ken Gliddon
Ken Gliddon
Scheduler / Notification modules +1
25 April 2022
CRM-732d5b58-95b6-4185-bcbf-579f0c662d94
John Bunyan
+1 on inline row editing
25 April 2022
Mart-Consulting
MRTProject

Hi, in

https://docs.devexpress.com/eXpressAppFramework/118045/application-shell-and-base-infrasctructure/application-solution-components/application-solution-structure

i see old Application Solution Structure

How I get new  Simplified XAF Solution Structure like in this doc? 

5 May 2022
Dennis (DevExpress)
Dennis Garavsky (DevExpress)
@Ken Gliddon, John Bunyan: thanks for your feedback.
@MRTProject: This help topic is for v21.2 - just wait for v22.1 in June.
5 May 2022
Alain Bismark
Alain Bismark
+INFINITE on inline row editing
28 May 2022
Mario Blatarić
Mario Blatarić

I have new, rather big, project and I decided to give Web API services a serious go. 

It turned to be serious time saver with ability to reuse entire data model and security. Before, I would have to write new project, replicate and constantly maintain data structure, deal with security and so on. 

Web API Services are just natural fit for XAF Blazor, I really like it.

I also moved to simplified solution structure, it's a little thing, but it makes every day work easier and fluent API is so nice I actually restarted entire project from scratch to get all the goodies :-) 

14 June 2022

Please login or register to post comments.