Quantcast
Channel: XAF Team Blog
Viewing all 148 articles
Browse latest View live

XAF - New Community Modules, Unit Testing Best Practices, Official Documentation Updates

$
0
0

Community News

  1. Check out two new blog posts on unit testing from Manuel Grundner (DevExpress MVP): 
    T is for Testing: XAF & XPO - Builder Pattern 1 | T is for Testing: XAF & XPO - Test Data 2.
    These posts will be interesting for those creating complex apps with XAF.
  2. The eXpand Framework, managed by Apostolis Bekiaris, continues to release new platform-agnostic packages for XAF: http://xaf.expandframework.com/. eXpand’s new ProgressBarViewItem and HideToolBar add to the dozen plus low-dependency modules managed by Apostolis. Note: If you have not reviewed eXpand recently, you should definitely take a look at its new modules…they are smaller, include documentation, and ship Azure unit tests (Apostolis has also added usage examples, videos and troubleshooting info). Give it a try and please share your thoughts with us.

  3. A new version of XAFARI with full support for XAF v19.1.3 is available (DevExpress updates are slightly ahead of XAFARI versions). As you may know, Galaktika Soft has been providing paid reusable XAF modules with documentation and support services for more than 5 years.
  4. A new case-study about a Human Relation Management solution using XAFARI and XAF is available here. We also published XAF case studies from two other loyal XAF users last month: Case Study 1 | Case Study 2.
  5. We asked our customers about their thoughts on Blazor and received numerous comments. Since our ASP.NET team is fully committed to the Blazor platform, we are investing how Blazor can be used with XAF. We may modify our React-based SPA UI strategy and focus our efforts on Blazor going forward (our initial impression is that Blazor better fits the long term needs of our customers). We will publish additional info as it becomes available.

 Documentation Updates


XAF - Usability and Performance Enhancements, Breaking Changes, Noteworthy Support Center Tickets and Tricks

$
0
0

Usability & Performance Enhancements

  • To save time with functional XAF testing, check our Notepad++ and Visual Studio Code extensions for EasyTest files (*.etc, *.inc): syntax highlighting, collapsible regions, code snippets and more. In our opinion, functional and unit tests are a must for teams creating complex apps. We would appreciate your feedback here or in comments to this KB article.
  • With XAF v19.1.4, we no longer check the TargetObjectsCriteria value for disabled or inactive actions. An Action criterion is evaluated only when the Action is activated and becomes visible. For more information, please see this ticket
  • Did you know that CodeRush's Code Cleanup feature can automatically replace hardcoded property names in XPO/XAF business objects with nameof? For more information, see this ticket.
  • XAF v19.1.4 demos include fixes for high DPI displays: navigation panel and lookup/popup window widths are modified more effectively (they are no longer narrow and certain Web images are no longer blurred). For more information, see the following tickets: one, two. If you’ve experienced other 4K/SVG related issues, please submit your comment below.
  • We moved deprecated Item Templates (XAF v19.1.5) into a section at the bottom - this will preclude them from accidental selection. Recommended templates are placed at the top and are sorted by popularity. For more information, see this ticket
  • With XAF v19.2, we no longer display the save confirmation dialog when a user closes DetailView for a new unmodified object in a WinForms application. For more information, see this breaking change
  • With XAF v19.2, the IObjectSpace.ObjectChanged event is no longer raised for control value changes (because of performance issues). For more information, see this breaking change.
  • With XAF v19.1.5, we load all objects required by RecordsNavigationController (current, next and previous objects) in one query when DetailView is opened through ListViewProcessCurrentObjectController. Currently, ASPxGridListEditor, WinForms GridListEditor, SchedulerListEditor and TreeListEditor call this API when an object is double-clicked or ENTER is pressed. This should be a bit faster on slow connections. For more information on usage scenarios, feel free to review the following tickets: one, two, three
  • Check my comment at the bottom of this ticket and help us decide on a feature we have planned for WinForms (v19.2) - collapsible layout groups.

Noteworthy Support Center Tickets

  • T741546: Don’t miss the Visual Studio 2019 version 16.1 or newer update where DevExpress project templates are categorized as expected.
  • A2670: We keep recommending that our users try Native Image Generator (NGEN) to dramatically cut app and form load times. 
  • K18167: We described how to use STASafeDataStore in an XAF app to resolve the "Entering the 'GetObjectsNonReenterant' state..." error caused by a known .NET Framework specificity
  • T741228: We clarified the assembly versions loaded in a complex XAF solution (with projects for both .NET Framework and .NET Standard).
  • T742517; We demonstrated how to load multiple file attachments using a custom ViewItem based on the ASPxUploadControl (XAF Web app).
  • KA18699: We updated a popular KB article regarding ways to define calculated properties.
  • T741894: We demonstrated how to use the CustomizeTypesInfo method in a multi-threaded scenario (Web app).
  • T749921 | T741871: We discussed usability, printing and performance of the new rich text editors in XAF WinForms and WebForms apps.
  • E4908: We started a series of posts on how to use the XAF security system functions in non-XAF .NET apps using XPO for data access. This example contains a security system feature overview and the first Console demo.

XAF - Using XAF's Security System in non-XAF .NET Apps powered by XPO

$
0
0

We recently began a series of posts designed to explain XAF’s security system and how it can be used in non-XAF .NET apps powered by XPO.

The first example was a Console application that reads data protected by current user permissions and outputs the "Protected content" placeholder instead of secured data values.

In our next example, we’ll discuss DevExtreme + ASP.NET Web API OData. Before we do, however, we wanted to summarize some of the reasons we think you should consider XAF’s security system in your next .NET application.

Target Audience & Scenarios

  • XAF developers who create non-XAF .NET apps and want to reuse existing data models and Security System settings (users, roles and permissions) stored in an XAF application database. Based on experience, XAF customers often create custom Web and mobile UI clients with ASP.NET MVC, DevExtreme; backend servers with ASP.NET Web API/OData or Console, Windows Service, WCF apps for various administrative tasks (data modifications, report generation, scheduled workflows).
  • Non-XAF developers who create standard line-of-business (LOB) apps with login, logout forms and security related functionality for any .NET UI technologies like WinForms, WPF, ASP.NET (WebForms, MVC 5, MVC Core, Razor Pages) and .NET server technologies like ASP.NET Web API/OData, WCF, etc. Yet more use-cases with Blazor & Xamarin.Forms (Android, iOS, UWP) UI technologies may come when XAF v19.2 supports .NET Standard 2.0. 

Pain Points

Developers often face the following difficulties when creating security systems:

  • Getting security right: safe, fast, up-to-date, flexible, and database agnostic. Ready-to-use middleware libraries like ASP.NET Core Identity or Identity Server can be difficult to configure or offer unnecessary functionality.
  • LOB app developers want to save time and do not want to implement complex security memberships and authentication/authorization algorithms from scratch. For instance, filtering protected data against the current user’s access rights or checking if the current user is allowed to delete records.
  • Access right customization (runtime). While certain technologies like ASP.NET simplify authentication and basic authorization with built-in design time APIs, it is difficult to build a flexible and customizable security system (allowing users to customize the system once the app is deployed).

The XAF Security System

The primary XAF security system features used in line-of-business applications across supported platforms include:

1. Role-based access control with multi-database permission storage.

1.1. Access control permissions linked to roles and users that can be stored in more than a dozen popular data stores powered by the XPO ORM (including popular RDBMS like SQL Server, Oracle, PostgreSQL, MySql, Firebird, XML and "in-memory" stores).

  • Type permissions grant Read, Write, Create, and Delete access to all objects that belong to a particular type.
  • Object Permissions work in conjunction with Type Permissions and grant access to object instances that fit a specified criterion.
  • Member Permissions grant access to specific members unconditionally or based on a criterion.

1.2. Powerful and easy-to-use APIs to configure users, roles and permissions in code or visually in XAF apps.

1.3. Support for extensions or replacement with fully custom user, role, and permission objects to meet the needs of your business domain or address various integration scenarios.

2. Authentication.

2.1. Built-in authentication types: Forms (user name/password), Active Directory (Windows user) and Mixed (several authentication providers).

2.2. A modern and secure algorithm for password generation and validation.

2.3. Support for extension or replacement with custom authentication strategies and logon parameters. For instance, our popular example shows how to use OAuth2 with Google, Facebook or Microsoft authentication providers.

3. Authorization.

3.1. Just two code lines to read secure records filtered against a logged user (role and permission based). When you set up SecuredObjectSpaceProvider, you can create an unlimited number of secure data contexts - your data query and modification APIs will remain unchanged. A bit more code is required to connect a non-XAF client to the Middle-Tier application server.

3.2. Fine-grain access control for base and inherited objects, one to many and many to many object relationships, individual columns with or without criteria (example: can read the Full Name field, but cannot see and modify Salary) and specific object instances only.

3.3. Straightforward APIs to check CRUD or custom access rights for UI element customizations. With this, you can hide or mask protected grid columns, editors in detail forms, and disable menu toolbar commands like New, Delete, Edit, etc.

3.4. Security permission caching for the best possible performance. Two built-in Permission Policies determine the security system’s behavior when explicitly specified permissions for a specific type, object, or member do not exist.

3.5. Proven in production environments. DevExpress Support, comprehensive documentation, examples and a diagnostic tool are at your service to troubleshoot complex security permission configurations.


XAF - Using XAF's Security System in a DevExtreme App (with ASP.NET Web API/OData v4 powered by XPO)

$
0
0

This is part 2 of a series of posts designed to explain XAF’s security system and how it can be used in non-XAF .NET apps powered by XPO. If you are new to XAF’s security system or to this blog series, please review some of the reasons we think you should consider XAF’s security system in your next .NET application.  

Our new exampleconsists of an ASP.NET Core Web API/OData v4 service on the server and the DevExtreme Data Grid UI on the client. The app starts with a login form and then displays a data grid with “protected” records for the logged user.

Future Plans

In our next blog post, we’ll create a WinForms example with simple, form-based authentication logic (login/password). This was the most requested configuration based on our most recent survey and past blog comments. In addition to generic descriptions, our examples will also include step-by-step tutorials. Based on user feedback, we may extend the demo with full CRUD operations.
We look forward to your feedback on this sample and your thoughts on XAF’s security system. Feel free to share your usage scenarios below and we’ll be happy to extend the demo where appropriate.

XAF - Important Changes to the SPA UI Strategy: The Future is Blazor

$
0
0

The announcement within this post is important and I don't wish to minimize its impact. My goal is to give everyone as much advance notice as possible but I will save a more in-depth discussion for a later post.

As of last month, we officially canceled XAF's React-based SPA UI project. We have made the decision to focus our efforts on Blazor going forward.

We asked many XAF users for feedback and almost univerally, most felt that Blazor was indeed the right path forward. Since our ASP.NET team is also fully committed to the Blazor platform, we believe Blazor represents our best long-term option. Truth is that we seriously considered Blazor a year ago, but unfortunately it was not in the best possible state at that time.

We can no longer ignore the value Blazor brings to the table for our .NET user base. We appreciate all the wonderful React-related feedback you've given us over the last twelve months and though cancelling a project is not fun (nor does it help anyone's bottom line) we are confident that this decision will be a win/win for everyone.

Benefits of Blazor for You and DevExpress 

Though waiting another year for a Blazor UI is not the best news, our decision to pursue this new direction brings with it a number of benefits:

  • XAF v19.2 will include .NET Standard 2.0 Nuget packages. This helps the Security APIs in Non-XAF apps and allows us to address more usage scenarios for both XAF and non-XAF customers.
  • Blazor better fits the long term needs of our .NET users and those with little or no JavaScript, HTML and CSS experience. 
  • Blazor has fewer moving parts and a simpler architecture than our React SPA UI (DevExtreme React components are wrapped with a custom written UI scaffolding framework that works on top of XAF's server-side Application Model and View-based infrastructure).
  • Blazor provides simpler development flow - one that is familiar to WinForms and ASP.NET devs.
  • Our initial impression is that Blazor will allow us to add features more quickly and is easier to maintain. For instance, one developer can create a basic MainDemo-like app with list and detail forms in only 5 days with Blazor server-side. 
  • Blazor provides better performance than ASP.NET WebForms apps, because of its 'virtual DOM'-based UI updates (produces less traffic (bytes)). In our early tests, Blazor server-side spike performance is comparable to our SPA UI demos. Additionally, Blazor does not have issues with slow initial build (due to hundreds of megabytes in the node_modules folder). 

To Client-side, or Server-side, that is the Question.

As of this moment, our former SPA UI team is conducting final tests and we'll soon know whether to pursue Blazor client-side or Blazor server-side. Blazor client-side hosting mode supports offline and better scalability. Blazor server-side mode is much more mature, easier to use and much faster in our syntethic tests. Needless to say, we don't want customer apps (with hundreds of business classes and controllers) to load slowly with Mono inside the browser, especially on low power mobile devices.

The race continues and no obvious winner has emerged as of yet. I will announce who wins our Blazor client-side vs server-side shootout as soon as I am able. Please stay tuned.

eXpressApp Framework - Early Access Preview (v19.2)

$
0
0

We are two months away from our next major update (v19.2). The purpose of this post is to share our progress and give XAF users the opportunity to test new functionality before we wrap up our current dev cycle.

XAF is part of the Universal Subscription. Active Universal subscribers are entitled to download and install this Early Access Preview. If you currently own an active DXperience Subscription, you can test the features described herein by logging onto the DevExpress Download Manager and installing this build in trial mode. Once you do, please take a moment to tell us whether these new features address your business needs. This will help us fine-tune our code before official launch. 

If you are using a trial version and are considering XAF for your next project, purchase a Universal subscription license for automatic access to this early access preview. If you are ready to upgrade to Universal from another subscription level, email us at clientservices@devexpress.com for preferential upgrade pricing.

.NET Core 3 Desktop SDK Support in WinForms Apps

To download and test XAF's WinForms Main Demo for .NET Core 3.0 Desktop, please refer to this knowledge base article. We are still working to finalize our unit and functional tests for the final release.

.NET Standard 2.0 Support for Platform-Agnostic Modules

These core libraries only provide non-visual APIs and do not offer a ready-made UI (like XAF modules for WinForms and WebForms): 

  • DevExpress.ExpressApp | DevExpress.ExpressApp.Xpo | DevExpress.ExpressApp.Objects | DevExpress.ExpressApp.Images.
  • DevExpress.Persistent.Base | DevExpress.Persistent.BaseImpl.
  • DevExpress.ExpressApp.Security | DevExpress.ExpressApp.Security.Xpo.
  • DevExpress.ExpressApp.Validation | DevExpress.ExpressApp.ConditionalAppearance
  • DevExpress.ExpressApp.AuditTrail | DevExpress.ExpressApp.CloneObject.
  • DevExpress.ExpressApp.Kpi | DevExpress.ExpressApp.StateMachine | DevExpress.ExpressApp.ViewVariantsModule.
These libraries should be extremely helpful for XAF developers who create cross-platform non-XAF .NET apps and libraries. You can now reuse existing XAF data models and Security System settings (users, roles and permissions) in a custom Xamarin mobile client or an ASP.NET Core service hosted on Linux-based servers.
Using NuGet? Our unified .NET installer automatically configures the Local NuGet feed for you.

Security System in non-XAF .NET Apps (Powered by XPO)

We’re doing our best to explain XAF’s security system and how it can be used in non-XAF .NET apps powered by XPO. 

Please check our new WinForms CRUD demo and tutorial - the most popular configuration based on a hundred of blog comments and survey responses!

In addition, please review our updated Console and ASP.NET Core Web API/OData v4 + DevExtreme apps.

Changes to XAF's SPA UI Strategy: The Future is Blazor 

As you may already know, we officially canceled XAF's React-based SPA UI project. We’ve made the decision to focus our efforts on Blazor.

ASP.NET WebForms Spreadsheet Editor

XAF's Office module now includes the DevExpress WebForms Spreadsheet control. You can use it to display and edit Excel documents stored in byte array properties of your business objects.

To learn more about new capabilities and to help shape future development efforts, please read this knowledge base article.

ASP.NET WebForms Batch Edit Support for Reference & ImmediatePostData Properties in ASPxGridListEditor

We now support reference and ImmediatePostData properties in ASPxGridView's Batch Edit mode - one of the most popular customer requests for our WebForms UI! 

To learn more about this new feature, please read this sample on GitHub.

Note: Our primary focus in 2020 will be on XAF’s Blazor UI but we will do what we can to address the needs of those reliant on our ASP.NET WebForms UI. 

Asynchonous Method Support in IObjectSpace

To learn more about the new IObjectSpaceAsync inteface and custom async operations in WinForms apps, please read this knowledge base article and respond to a few questions from the R&D team.

This will help shape future development plans - asynchronous operations within standard XAF WinForms and Blazor UI modules.

Improved Usability of Layout Groups in WinForms & WebForms

We replaced the IModelLayoutGroupWeb.IsCollapsibleCardGroup and IModelLayoutGroupWeb.IsCardGroupCollapsed properties with new platform-agnostic options: IModelLayoutGroup.IsCollapsibleGroup and IModelLayoutGroup.IsGroupCollapsed. This was necessary to implement a popular user request - collapsible layout groups for WinForms.

For more information, please read this breaking change document.

Performance & Stability Enhancements (Design-Time)

With this update, XAF's Model Editor, Application & Module Designers start faster and require less memory. We have done the impossible - we reimplemented Visual Studio's ITypeDiscoveryService, because its GetTypes method caused problems, especially for complex apps.

For more information, please read this knowledge base article.

Breaking Changes

Before you migrate and test existing projects, we ask that you read XAF's breaking changes document.

Your Feedback Matters!

Your thoughts and perspectives are always appreciated. Please use the comments section below, create a new Support Center ticket or email xafteam@devexpress.com to engage us.
We know you’re busy, but we ask that you take a moment out of your schedule to answer the survey questions below. Thanks in advance for your participation.
NOTE: Early Access and CTP builds are provided solely for early testing purposes and are not ready for production use. This build can be installed side by side with other major versions of DevExpress products. Please backup your project and other important data before installing Early Access and CTP builds.

XAF - Using XAF's Security System in WinForms Apps (powered by XPO)

$
0
0

I hope this bit of news was not buried beneath our EAP announcements last week.

Please check our new WinForms CRUD demo and tutorial to learn about our most popular configuration (based on hundreds of blog comments and survey responses).

This represents existing functionality - is available right now in XAF v19.1 (and older versions). The new v19.2 release adds .NET Standard 2.0 support - helpful for developers who create cross-platform non-XAF .NET apps and libraries.  

If you are interested in XAF's cross-platform Security System APIs, please answer 3 short survey questions at the end of the introduction blog post.

Our next example will be for ASP.NET WebForms. Though mature technology, WebForms remains highly popular and will likely remain relevant over the coming years. As always, we look forward to your questions or suggestions. 

eXpressApp Framework - Tips & Tricks (August 2019)

$
0
0

Interesting Support Tickets

eXpressApp Framework

eXpress Persistent Objects

Documentation Updates


Have you come across an interesting support ticket? Share it with the DevExpress developer community below.


eXpressApp Framework - Tips & Tricks (September 2019)

$
0
0
Like in months past, we’ve compiled a list of interesting support tickets in this month’s Tips & Tricks blog post. We’d also like to remind active Universal subscribers that v19.2 Beta 1 can be downloaded today. If time permits, please install v19.2 Beta 1 and share your feedback with us – we’d love to know what you think of our most recent build.

Interesting Support Tickets

eXpressApp Framework

eXpress Persistent Objects

Documentation Updates

.NET Core 3 and .NET Standard 2 Support

Custom Aggregates

We are working on documentation for our new feature you can try with the v19.2 Beta release: CustomAggregateCollectionCustomAggregateEvaluationContext<T> | ICustomAggregate | ICustomAggregateConvertibleToExpression | ICustomAggregateFormattable

Get more information on this feature in our What's New (v19.2 Beta) overview.

Best Practices

All examples in our documentation use nameof instead of hardcoded API names.

Community News

  • The eXpand Framework, managed by Apostolis Bekiaris, released almost 10 new free and low-dependency modules for XAF since we wrote about it in July: http://xaf.expandframework.com/. I want to highlight the RefreshView and GridListEditor packages: the first refreshes a View periodically based on the Application Model's option and the second contains GridListEditor extensions. All the modules are small, include documentation, and ship with Azure unit tests. Please check them out and let us know what you think.
  • A new version of XAFARI with full support for XAF v19.1.6 is available (DevExpress updates are slightly ahead of XAFARI versions). As you may know, Galaktika Soft has been providing paid reusable XAF modules with documentation and support services for more than 5 years.
  • Joche Ojeda published a YouTube video and GitHub sample that demonstrate how a custom IDataStore implementation can be used to feed a Xamarin Forms application with data from an XAF application using the same XPO data model. 

XAF - Using XAF's Security System in ASP.NET WebForms Apps and Updates for WinForms, DevExtreme/OData Examples

$
0
0

I realize you are all busy, but if you have a moment, I’d love your feedback on our new ASP.NET WebForms CRUD demo and its step-by-step tutorial. The new demo helps demonstrate use of XAF's Security System APIs for the WebForms platform.

With our last GitHub repository update, we also completed Create, Read, Update, Delete (CRUD) functionality for the ASP.NET OData service used by DevExtreme clients (previously only 'read' operations were implemented).



Ready-To-Use Login, List and Detail Forms for Your Next WinForms, DevExtreme and ASP.NET Apps

Even if you do not plan to use XAF and XPO in your apps, you can save time if you copy and modify these free form templates. They are now High DPI-ready, use SVG images and now ship with a more polished UI/UX. 

What's Next

We are now preparing .NET Core 3 versions of WinForms, Console and DevExtreme/OData examples. Please let us know which example you'd like to see next: ASP.NET MVC Core, Xamarin, WPF, or Blazor. 

eXpressApp Framework - Tips & Tricks (October 2019)

$
0
0

Here's this month's XAF-related tips & tricks. If you have a support ticket you'd like to share with the XAF developer community, feel free to post a link in the comment section below.

Interesting Support Tickets

Core/General

WinForms

Web

Recently Resolved Issues

Documentation Updates

Custom Aggregates in Criteria Language

See our new Custom Aggregate Functions article and the How to: Implement and Use Custom Aggregate Functions step-by-step tutorial.

Office Module Updates

We reworked and extended the structure of our Office Module documentation.

Non-Persistent Objects

We collected and described additional ways to display non-persistent or proxy objects in a Detail View: How to: Display a Non-Persistent Object's Detail View 

Your Feedback Matters

We appreciate your feedback and, as always, look forward to your comments.

XAF - Blazor UI Progress and Future Plans

$
0
0

Here is our first XAF Blazor (Server Side) demo. It demonstrates straightforward CRUD usage scenarios. Feel free to test its capabilities within a modern desktop or mobile browser.

https://demos.devexpress.com/XAF/BlazorDemo

How It Works

XAF automatically generates this simple UI and database based on the following ORM data model.
using System;
using DevExpress.Xpo;
using DevExpress.Xpo.Metadata;
using DevExpress.ExpressApp.DC;
using DevExpress.Persistent.Base;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.BaseImpl;

namespace BlazorDemo.Module.BusinessObjects {
    [DefaultClassOptions]
    [XafDisplayName("Note")]
    [XafDefaultProperty(nameof(Subject))]
    public class DemoNote : BaseObject {
        public DemoNote(Session session) : base(session) { }
        private string _Subject;
        public string Subject {
            get { return _Subject; }
            set { SetPropertyValue<string>(nameof(Subject), value); }
        }
        private DateTime _CreatedOn;
        [ModelDefault(nameof(IModelCommonMemberViewItem.AllowEdit), "False")]
        [ValueConverter(typeof(UtcDateTimeConverter))]
        public DateTime CreatedOn {
            get { return _CreatedOn; }
            set { SetPropertyValue<DateTime>(nameof(CreatedOn), value); }
        }
        private DateTime _LastModified;
        [ModelDefault(nameof(IModelCommonMemberViewItem.AllowEdit), "False")]
        [ValueConverter(typeof(UtcDateTimeConverter))]
        public DateTime? LastModified {
            get { return _LastModified; }
            set { SetPropertyValue<DateTime?>(nameof(LastModified), value); }
        }
        private string _Owner;
        [ModelDefault(nameof(IModelCommonMemberViewItem.AllowEdit), "False")]
        public string Owner {
            get { return _Owner; }
            set { SetPropertyValue<string>(nameof(Owner), value); }
        }
        private string _Description;
        [Size(SizeAttribute.Unlimited)]
        public string Description {
            get { return _Description; }
            set { SetPropertyValue<string>(nameof(Description), value); }
        }
        public override void AfterConstruction() {
            base.AfterConstruction();
            CreatedOn = DateTime.Now;
            LastModified = DateTime.Now;
            Owner = "BLAZOR Demo User";
        }
        protected override void OnSaving() {
            base.OnSaving();
            if(!Session.IsNewObject(this)) {
                LastModified = DateTime.Now;
            }
        }
    }
}

It uses eXpress Persistent Objects (XPO), but we will support Entity Framework in the future. For more information on how XAF works, refer to Getting Started.

Future Plans

By the end of 2020, we hope to give XAF users a stable platform on which to build Blazor-powered apps (with full CRUD capabilities and core modules like Security and Validation). As you’d expect, usage scenarios will be partly driven by the scope and breadth of the DevExpress Blazor product line. To help clarify our vision, we will build a Blazor demo inspired by its ASP.NET WebForms counterpart (MainDemo) - expect more updates from us in the coming months.

Blazor Server Today, Blazor WebAssembly is for the Future

As you know, our decision was relatively simple: Blazor Server is ready for production while Blazor WebAssembly is in preview (learn more from Microsoft). Blazor WebAssembly is also hampered by a few performance issues.

Scenario
(Desktop / Mobile)

Server Side 

WebAssembly

App Start 

2 sec / 6 sec

6 sec / 46 sec

Open List View 

< 0.5 sec / < 0.5 sec

2 sec / 7 sec

Open Detail View 

< 0.5 sec / < 0.5 sec

1 sec / 7 sec

In addition to performance, Blazor WebAssembly involves more complicated development paradigms for existing XAF users. For instance, you need to consider client and server communications, use asynchronous APIs with IObjectSpaceAsync, ActionBase.ExecuteAsync, etc.

Anyway, we will certainly monitor the progress of Blazor WebAssembly and reconsider our strategy when necessary. So far, we have not done anything that would prevent a potential switch from one hosting mode to another.

Your Feedback Matters

To engage us and discuss XAF’s vision, roadmap and technical requirements, please use our private XAF discussion forum (exclusively for Universal customers). The forum also includes a known issues list for this pre-alpha release.

Feel free to comment below or email us at xafteam@devexpress.com for more information.

XAF - User Authentication and Group Authorization API in ASP.NET Core MVC Apps (powered by XPO)

$
0
0

Here is our ASP.NET Core MVC demo and step-by-step tutorial for XAF’s user authentication and group authorization API. Many of you asked us to deliver this demo – thank you for your feedback and your continued engagement.

If you’re using Xamarin, WPF or Blazor, please be patient with us – we will produce user authentication and group authorization demos for these platforms shortly.

We also hope to update our samples to .NET Core 3.0 where applicable. And finally, we do expect to refactor and simplify demo code and instructions. For instance, instead of IsGranted calls, which may accept many parameters, we will introduce CanRead, CanWrite and other shortcuts in v19.2.4. XAF WinForms and WebForms developers will benefit from these usability enhancements as well.

eXpressApp Framework Roadmap 2020 - Your Vote Counts

$
0
0

It's All 'Bout the Blazor, Blazor, Blazor

XAF v20.1 will include a CTP version of Blazor UI with XPO ORM for data access. XAFers will be able to create Blazor Server apps using the Solution Wizard (Blazor WebAssembly support is postponed until officially released by Microsoft). We expect to ship the following functionality for desktop and mobile apps:
  • Navigation control with group and item hierarchy.
  • Main menu with all standard XAF command types (buttons, popups, input/search boxes, drop-down menus).
  • Grid List Editor with sorting & grouping.
  • Detail form layout with group and tab controls.
  • Property Editors for all data types (no advanced editors for criteria, RTF, etc.).
  • Simple forms authentication with a login and password, role-based authorization and basic user/role management with access rights created in code (no specialized permission editors in the UI).
  • Data input validation with RuleRequiredField, RuleCriteria, RuleRange and other popular rules.
  • Multiple UI themes and a runtime theme chooser (similar to the 'gear' in the top-right corner of https://demos.devexpress.com/blazor/).
By our second release of 2020 (v20.2), XAF’s Blazor UI should be ready for production use. We hope to include additional XAF modules (please cast your vote below), online documentation, support for UI customization and advanced CRUD usage scenarios (as well as custom control integration). We also hope to support more end-user customization capabilities once they are included within individual DevExpress Blazor controls (for instance, grid column filters, add/remove columns, data export, inline edit).
We will continue to update XAF’s online Blazor demo with new features as they become available. Our next update (in 1-2 weeks) should include support for collection, reference, enumeration, Boolean, image and other data editors.

Housekeeping

  • We want to remove Visual Studio dependencies from the design-time Model Editor to increase stability and performance. We like the WPF designer that runs as a separate process and draws itself inside the Visual Studio frame. This will also help us support the Model Editor in .NET Core 3+ and .NET Standard 2+ projects (v20.1).
  • We will also incorporate a number of usability enhancements to the Model Editor based on user feedback - please let us know if you have any issues with this editor (v20.1).
  • We will monitor Microsoft updates with regard to the component designer in .NET Core 3+ and see if we can support our Application, Module, Controller and Action Designers. We will also support the SDK-style project format for all XAF design-time tools (v20.1, v20.2).
  • We will add support for Visual Studio vNext, .NET 5 and C# 8.0 features like Nullable Reference Types (v20.2).

Security System

We hope to publish Blazor, Xamarin and WPF examples for XAF's User Authentication and Group Authorization API powered by the XPO ORM (see our GitHub repository for more information). To make these examples more elegant and modern, we've thought about the following enhancements: 
  • Introduce asynchronous versions of popular security APIs (IsGranted, CanRead, CanWrite, CanDelete, etc.). 
  • Support token-based authentication.
  • Simplify XAF's security system integration with the help of utility libraries (they will encapsulate boilerplate code). 

We hope to support Entity Framework Core to help more DevExpress and non-DevExpress customers benefit from XAF's Security System. In v20.1, we will introduce a secured Object Space for EF Core 3.1+ and examples for corresponding platforms. Later in v20.2, we will support EF Core in our Blazor UI. We will decide on the EF Core support for WinForms UI based on user demand. Please share your thoughts on this subject in the survey below.

WinForms UI & Core

  • We hope support the following asynchronous operations out-of-the-box in the WinForms UI based on IObjectSpaceAsync introduced in v19.2: open List or Detail View, save View changes, save audit data (v20.1). If you are missing important use-case scenarios, please specify them in comments below.
  • We will support basic Entity Framework Core usage scenarios (v20.1) – those needed for XAF's Security System in non-XAF apps and Blazor UI (see above).
  • We want to rewrite our Tree List Editors module and support inplace data editing (v20.1), better filtering options and more features (S30514S30735 S38121) based on user feedback (v20.2).
  • We want to enable enhanced WinForms Filter and Expression editors in the Model Editor and within built-in List and Property Editors (v20.2).
  • We will make a number of Non-Persistent/proxy object enhancements (v20.2): support for filtering; propagate FindObject, CommitChanges, Refresh and other methods from NonPersistentObjectSpace to AdditionalObjectSpaces (T509228); support CRUD operations with non-persistent objects in a nested ListView of a persistent object DetailView (T486427T510338T695631).

ASP.NET WebForms UI

Our primary focus will be on XAF’s new Web & Mobile UI for Blazor. This notwithstanding, we will do our best to address the needs of existing ASP.NET WebForms UI users.

Your Feedback Counts

Though we want to deliver everything (and deliver it yesterday), we can’t make any guarantees. As always we welcome your comments and specific usage-scenarios. The more you share, the better we can understand your business needs now and into the future.

Before we proceed to the 2020 Roadmap voting, please tell us about yourself and share your experience with the features we released in 2019.

XAF - Blazor Demo with Image, Collection, Lookup, Enumeration, Boolean, File Property Editors and More

$
0
0

As you probably know, we are building XAF's next-gen Web and Mobile UI with the DevExpress Blazor components. At this stage, we use the Blazor Server Side hosting model because it is stable and fast (we will look at Blazor WebAssembly again when it is out of preview).

If you are interested in our new Web and Mobile UI, please take a look at our updated web demo: https://www.devexpress.com/go/XAF_Blazor_Demo.aspx. This updated demo shows-off familiar XAF property editors and even additional extra modules: File Attachments, View Variants and Audit Trail.

What's Next?

In the next sprint, we will focus on stability and usability. We also hope to complete basic editor functionality such as nullable type and formatting support, TimeSpan and Object property editors.
In our next Blazor-related post, I will discuss unit and functional as it relates to XAF's Blazor UI - this will be very important to teams creating complex enterprise apps. Please stay tuned!

Your Feedback Matters

If you have not yet voted in our roadmap survey, please do so within the next couple of weeks. We hope to publish our official roadmap in January.

XAF - Unit and Functional Testing with Blazor UI

$
0
0
I want to share our vision on unit/functional testing as early as possible, because it is important to XAF's target audience - development teams creating complex enterprise apps. Increased support traffic regarding this topic and our recent roadmap surveys underscore the importance of this subject. Everything I will describe below is already battle-tested by our team internally.

Functional Tests

We continue to use our cross-platform EasyTest engine for functional testing. Chrome or FireFox web browser interaction is powered by Selenium.

If you have Google Chrome installed on your desktop, you can run automatic tests for our online Blazor demo with Visual Studio or the command prompt - no special configuration is required. For more information, refer to the following KB article: How to use EasyTest and Selenium WebDriver to create functional tests for XAF's Blazor UI with C#, VB.NET or a human-readable scripting language.

The following are supported:

1. Functional tests with C# or VB.NET (for developers).

using DevExpress.ExpressApp.EasyTest.BlazorAdapter;
using DevExpress.ExpressApp.EasyTest.BlazorAdapter.TestControls;
using DevExpress.ExpressApp.EasyTest.BlazorAdapter.Utils;
using NUnit.Framework;

namespace MainDemo.Blazor.FunctionalTest {
    public class TakeScreenshortTests : FunctionalTestBase {
        public TakeScreenshortTests() {
            TestSettings.DefaultApplicationUrl = "https://demos.devexpress.com/XAF/BlazorDemo/";
        }
        [Test]
        public void StartPageScreenshot() {
            CompareScreenshot.Exec(TestSettings.CombineWithCWD(@"..\..\Images\MainDemo.png"), Browser.GetImage());
        }
        [Test]
        public void DeatailViewScreenshot() {
            var mainListView = new MainListView(Driver);
            mainListView.Grid.RowClick("Hewitt Aiello");
            CompareScreenshot.Exec(TestSettings.CombineWithCWD(@"..\..\Images\ContactMainDemo.png"), Browser.GetImage());
        }
        [Test]
        public void CRUD() {
            var contactsListView = new MainListView(Driver);
            contactsListView.Toolbar.FindControl("New").Act(null);
            var contactDetailView = new MainDetailView(Driver);
            ((IControlText)contactDetailView.Form.FindControl(TestControlType.Field, "First Name")).Text = "TestName";
            contactDetailView.Toolbar.FindControl("Save and Close").Act();
            contactsListView = new MainListView(Driver);
            contactsListView.Grid.RowClick("TestName");
            contactDetailView = new MainDetailView(Driver);
            contactDetailView.Toolbar.FindControl("Delete").Act();
            wait.Until(BlazorAppResponseAwaiter.IsAlertPresent);
            var dialog = new DialogTestControl(Driver);
            Assert.AreEqual("You are about to delete the selected record(s). Do you want to proceed?", dialog.Text);
            dialog.Act("Yes");
            wait.Until(SeleniumUtils.ElementExists(GridTestControl.ByGrid));
            contactsListView = new MainListView(Driver);
            Assert.AreEqual(0, contactsListView.Grid.WebElement.FindElements(GridTestControl.ByRowByValue("TestName")).Count);
        }
    }
}

2. Functional tests with human-readable scripts (for non-developers).

#Application MainDemoBlazor_Chrome

*Action New
*FillForm
 First Name = TestContact
*Action Save and Close

*ProcessRecord 
 Full Name = TestContact

*Action Delete

*HandleDialog
 Respond = Yes
 Message = You are about to delete the selected record(s). Do you want to proceed?

!ProcessRecord 
 Full Name = TestContact

Unit Tests

Thanks to XAF's modular architecture and mocks, we can keep our unit tests as lightweight as possible. Unit tests for Blazor UI are no different than XAF tests for WinForms or WebForms. Consider the following test cases: 

1. Test whether a Controller's Action is active in DetailView and ListView.

#if DebugTest
using DevExpress.ExpressApp.Base.Tests;
using DevExpress.ExpressApp.Blazor.SystemModule;
using DevExpress.ExpressApp.Tests.Blazor.Helpers;
using NUnit.Framework;

namespace DevExpress.ExpressApp.Tests.Blazor.SystemModule {
    [TestFixture]
    public class ModificationsControllerTests : BaseDBTest {
        [Test]
        public void TestUpdateActionState() {
            DetailView detailView = new TestDetailViewFactory(this).CreateView<TestPersistentObject>(true);
            BlazorModificationsController modificationsController = new BlazorModificationsController();
            modificationsController.SetView(detailView);
            Assert.IsTrue(modificationsController.SaveAction.Active["OnlyForDetailView"]);
            Assert.IsTrue(modificationsController.SaveAndCloseAction.Active["OnlyForDetailView"]);
            Assert.IsTrue(modificationsController.SaveAndNewAction.Active["OnlyForDetailView"]);
            Assert.IsTrue(modificationsController.CancelAction.Active["OnlyForDetailView"]);

            ListView listView = new TestListViewFactory(this).CreateView<TestPersistentObject>();
            modificationsController = new BlazorModificationsController();
            modificationsController.SetView(listView);
            Assert.IsFalse(modificationsController.SaveAction.Active["OnlyForDetailView"]);
            Assert.IsFalse(modificationsController.SaveAndCloseAction.Active["OnlyForDetailView"]);
            Assert.IsFalse(modificationsController.SaveAndNewAction.Active["OnlyForDetailView"]);
            Assert.IsFalse(modificationsController.CancelAction.Active["OnlyForDetailView"]);
        }
//...
}

2. Test whether a boolean property editor has localized values in the underlying control based on the Application Model.

//...
[Test]
public void SelectedItemTest() {
    ModelPropertyEditorImpl model = new ModelPropertyEditorImpl("Bool");
    model.CaptionForFalse = "CaptionForFalse";
    model.CaptionForTrue = "CaptionForTrue";
    BooleanPropertyEditor propertyEditor = new BooleanPropertyEditor(typeof(TestObjectWithNullableProperties), model);

    propertyEditor.ComponentValue = null;
    Assert.IsNull(propertyEditor.SelectedItem);
    Assert.IsNull(propertyEditor.ComponentValue);

    propertyEditor.ComponentValue = true;
    Assert.AreEqual(model.CaptionForTrue, propertyEditor.SelectedItem.Caption);
    Assert.AreEqual(propertyEditor.ComponentValue, propertyEditor.SelectedItem.Value);

    propertyEditor.ComponentValue = false;
    Assert.AreEqual(model.CaptionForFalse, propertyEditor.SelectedItem.Caption);
    Assert.AreEqual(propertyEditor.ComponentValue, propertyEditor.SelectedItem.Value);
}
//...

Future Plans

Ultimately, we will release all required assemblies with helper/mock classes (like TestDBTest, TestDetailViewFactory, BlazorAdapter, etc.) - all to reduce the time needed to write unit and functional tests with XAF.

If you have problematic scenarios that you want us to document, please leave comments to this post - thank you in advance.

eXpressApp Framework - 2020 Roadmap

$
0
0

Before I detail XAF’s 2020 Roadmap, my thanks to everyone who shared feedback/thoughts last year. Your contribution to XAF’s evolution is appreciated.

The following list outlines the features/capabilities we expect to introduce in the eXpressApp Framework (XAF) this year.

Blazor UI

XAF v20.1 will include a CTP version of Blazor UI with eXpress Persistent Objects (XPO) ORM classes for data access. XAFers will be able to create Blazor Server apps using the Solution Wizard.
We expect to ship the following functionality for desktop and mobile apps in CTP:
  • Navigation control with group and item hierarchy.
  • Main menu with all standard XAF command types (buttons, popups, input/search boxes, drop-down menus).
  • Grid List Editor with sorting & grouping.
  • Detail form layout with group and tab controls.
  • Property Editors for all data types (no advanced editors for criteria, RTF, etc.).
  • Simple Forms Authentication with a login and password, role-based authorization and basic user/role management with access rights created in code (no specialized permission editors in the UI).
  • Data input validation with RuleRequiredField, RuleCriteria, RuleRange and other popular rules.
  • Multiple UI themes (including a compact one) and a runtime theme chooser (similar to the 'gear' in the top-right corner of https://demos.devexpress.com/blazor/).
We expect to officially ship XAF’s Blazor Server UI in our v20.2 release cycle. It should include online documentation and the following capabilities/functionality:
  • XAF modules: Conditional Appearance and Reports.
  • EF Core and non-persistent POCO proxies for data access (see below).
  • UI customization, custom control integration and advanced CRUD usage scenarios. 
  • Extended end-user customization options (such as grid column filters, add/remove columns, data export, inline edit). 

We postponed decisions related to Blazor WebAssembly support until it is officially marked as final (LTS) by Microsoft (likely in .NET 5 or later). We will continue to update XAF’s online Blazor demo with new features as they become available.

WinForms UI

  • We hope support the following asynchronous operations out-of-the-box in the WinForms UI based on IObjectSpaceAsync introduced in v19.2: open List or Detail View, save View changes, save audit data (v20.1). If you are missing important use-case scenarios, please specify them in comments below.
  • We want to enable enhanced WinForms Filter and Expression editors in the Model Editor and within built-in List and Property Editors (v20.1).
  • We want to rewrite our Tree List Editors module and support inplace data editing, better filtering options and more features (S30514S30735 S38121) based on user feedback (v20.2).

ASP.NET WebForms UI

Our primary focus will be on XAF’s new Web & Mobile UI for Blazor. This notwithstanding, we will do our best to address the needs of existing ASP.NET WebForms UI users.

Housekeeping & Core

  • We want to remove Visual Studio dependencies from the design-time Model Editor to increase stability and performance. We like the WPF designer that runs as a separate process and draws itself inside the Visual Studio frame. This will also help us support the Model Editor in .NET Core 3+ and .NET Standard 2+ projects (v20.1).
  • We will also incorporate a number of usability enhancements to the Model Editor based on user feedback - please let us know if you have any issues with this editor (v20.1).
  • We will monitor Microsoft updates with regard to the component designer in .NET Core 3+ and see if we can support our Application, Module, Controller and Action Designers. We will also support the SDK-style project format for all XAF design-time tools, Visual Studio vNext, .NET 5 and C# 8.0 features like Nullable Reference Types  (v20.1, v20.2).
  • We will make a number of Non-Persistent/proxy object enhancements (v20.2): support for filtering; propagate FindObject, CommitChanges, Refresh and other methods from NonPersistentObjectSpace to AdditionalObjectSpaces (T509228); support CRUD operations with non-persistent objects in a nested ListView of a persistent object DetailView (T486427T510338T695631).
  • You can expect further performance enhancements to the Application Model and other core sub-systems. For  instance, removing static XafTypesInfo dependencies and locks in ModelNode may result in faster app startup and unit tests as well as greater scalability for Blazor apps.

Security System: User Authentication and Group Authorization API

  • We will publish Blazor, Xamarin and WPF examples for XAF's User Authentication and Group Authorization API powered by the XPO ORM (see our GitHub repository for more information). To deliver more elegant and modern solutions, we're considering the following enhancements: asynchronous versions of popular security APIs (IsGranted, CanRead, CanWrite, CanDelete, etc.), token-based authentication and possible utility libraries that will encapsulate boilerplate code.
  • We hope to support Entity Framework Core to help more DevExpress and non-DevExpress customers benefit from XAF's Security System. In v20.1, we will introduce a secured Object Space for EF Core 3.1+ and examples for corresponding platforms. Later in v20.2, we will support EF Core in our Blazor UI. We will decide on the EF Core support for WinForms UI based on user demand.
  • We will include a built-in permission for XAF Actions (T618115). Since the UI has yet to be finalized, we welcome feedback and thoughts about the interface. We're considering the following base functionality: 
    • A separate tab in the role detail form with a list of Action items like our built-in Navigation Permissions. In this grid, users will be able group data by display text, category, module and other context information. Please let us know your thoughts about this.
    • Users will view, add, modify and remove only permissions for Actions they want to prohibit or deactivate. We want to follow only the 'Allow all by defaultpolicy regardless of what is specified in the role, because other options do not make much sense for Actions. Your feedback is appreciated.
    • Users will be able to prohibit execution of both custom and XAF system Actions (for greater user flexibility and implementation simplicity).
    • Users will be able to quickly locate an Action in the lookup editor in the Action permission's detail form via search and grouping (for instance, to filter out XAF system Actions like Logon and Refresh).
    • Action permissions will hide Actions unconditionally: we don't expect to interfere with Conditional Appearance, State Machine, TargetObjectsCriteria or any custom rules that depend on criteria or object/UI changes in Controllers. If you want such dynamic functionality for Actions, it is better to implement it using these specific means. Please let us know your thoughts about this.

Your Opinion Counts

As always, we look forward to your comments and questions. Please share your thoughts below or email xafteam@devexpress.com.

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.

XAF - Tips & Tricks (January 2020)

$
0
0

Interesting Support Tickets

Reports & Office Modules

XPO

ASP.NET WebForms

Miscellaneous

Usability & Performance Enhancements

Simplified Access to List View's Objects

How to: Access Objects Selected in the Current View: This article now demonstrates a way to access business object wrappers via the IObjectRecord interface for different List View data access modes.

User-Friendly URLs

How to: Print a Report Without Displaying a Preview: This approach now supports the user-friendly URLs mechanism.

Showcase Your Apps on DevExpresss.com

Highlight your business app and share your development experiences with the DevExpress community. To include your app in our upcoming App Showcase, please forward an application screenshot to clientservices@devexpress.com and tell us which DevExpress products you currently use within your organization.

XAF - User Authentication and Group Authorization API in .NET Core Apps: Blazor Server, Web API/OData v4 and More (powered by XPO)

$
0
0

Our recent enhancements to user authentication and group authorization demos include the following:  

  • .NET Core 3.0+ versions of WinForms, ASP.NET Core MVC, Web API/OData v4 + DevExtreme apps.
  • New non-XAF Blazor Server demo and tutorial based on DevExpress Blazor components and XAF's security system APIs.
  • New extension methods CanXXX for the SecurityStrategy class (where XXX is Read, Write, Create, Delete, Navigate) that replace complicated IsGranted calls with many parameters.

    //BEFORE
    SecuritySystem.IsGranted(
        new PermissionRequest(ObjectSpace, typeof(DemoTask), 
           SecurityOperations.Write, selectedObject, nameof(DemoTask.Status)
        )
    );
    
    //AFTER:
    security.CanWrite(selectedObject, nameof(DemoTask.Status));
    We simplified XAF and non-XAF demo code and help topics accordingly. XAF WinForms and WebForms developers will benefit from these usability enhancements as well. For more examples, see our MainDemo v19.2.6 ("c:\Users\Public\Documents\DevExpress Demos 19.2\Components\eXpressApp Framework\MainDemo\CS\MainDemo.Module\Controllers\TaskActionsController.cs").
  • New extension methods CanXXXByUser and CanXXXByRole for the SecurityStrategy class. These extension methods help query access rights for required user and role objects even if you are not logged in under them within a secured application. Use cases include custom UI or diagnostic tools designed to display effective permissions for certain users (T413260, T826065, T552175). More documentation and code examples are coming soon.

Please Help Us Decide on Xamarin, Blazor WebAssembly, WPF and ASP.NET MVC 5 Demo Apps

Based on user surveys and blog comments, interest for highlighted platforms was not very high. Also, many users wanted to see WinForms and ASP.NET Core examples with OAuth2 - using Microsoft Office 365, Azure Active Directory or Google authentication providers (we currently display a simple Forms authentication with a login and password).

Please leave comments about the most desired platforms and use-case scenarios with our authentication and group authorization APIs. Even if you are not using XAF yet, we would love to hear from you about problematic or costly tasks associated with other security libraries such as Identity Server or ASP.NET Core. Thank you for your continued support!

Recent Feedback

I wanted to share a testimonial from David Desidera, Solution Architect at SpecTect, who successfully integrated XAF's security system APIs with a legacy WinForms app:

David Desidera, Solution Architect at SpecTect More than one year ago I explained to my collaborators that - in my opinion - it was possible to integrate XAF's security layer with UI interface into an existing WinForms enterprise application that was 10 years old. We successfully implemented it! It took 40 man-days of job in total instead of at least 400 if I had decided to start from scratch. You guys saved my life!!

If you are using XAF's security system APIs or simply evaluating it at present time, please share your experience below.

XAF - Blazor Demo Update with New Themes, Editors and Other Enhancements

$
0
0

After the release of DevExpress Blazor UI Components v19.2.3, we updated our XAF Blazor demo, addressed a few issues and implemented some new capabilities. As always, we look forward to your comments and questions. 

  • Theme Selector with 20+ Bootstrap themes: At this stage, we’ve tested the default Office White theme (minor issues are expected for other themes).

  • Optimistic Concurrency Control: Includes the ability to merge and discard changes.
  • 'Edit' button for aggregated objects and a Clear button for nullable editors.
  • Partial data loading for root List Views (like Server Mode).
  • Page Size selector in List Views.
  • List View records now open via a single click instead of the in-place 'Open' button.
  • Previous known issues were resolved:
    1. The Filter by Text command is now case-insensitive;
    2. List View rows can be grouped by reference properties;
    3. New objects are immediately added to List Views.

What's Next?

We are presently working on the following new features:

  • Simple Form-based authentication with a login and password, role-based authorization and basic user/role management with access rights created in code (no specialized permission editors in the UI).
  • A "compact" toggle for all themes in the Theme Selector (many customers wanted more compact themes for the Web). We will also polish remaining themes for XAF layouts by v20.1.

For more information on what we have planned for XAF Blazor, please refer to the eXpressApp Framework - 2020 Roadmap.

Viewing all 148 articles
Browse latest View live