XAF - 跨平台 .NET App UI v22.2
XAF Blazor
新的渲染和大小模式
DevExpress Blazor 数据网格 (DxGrid)、编辑器、布局和导航组件现在使用我们优化的呈现引擎而不是 Bootstrap。此更改将使我们能够使用以下新功能/特性扩展我们的 Blazor 组件套件:
• 通过更少的 JavaScript 互操作调用提高了渲染性能。
• 跨 DevExpress Blazor 组件的一致外观。
我们新的渲染引擎显着提高了现有 Blazor大小模式 的功能:
• Blazor 组件(无论使用何种大小模式)都被缩小以满足“密集”界面的要求,并在屏幕上显示更多相关信息。新的大尺寸模式反映了过去的“中号”。新的中模式更接近于过去的“小”模式。我们新的小型模式允许您提供类似于 Microsoft Outlook 等桌面应用程序的界面。
• 新的大小模式适用于我们的 Blazor 数据网格 (DxGrid)、选项卡、弹出窗口和其他以前不支持大小模式选项的 UI 组件。
• 大小模式现在提供更一致的用户体验,并影响受支持的 Blazor 组件的所有间距/大小。例如,我们的 Blazor Form Layout 组件根据选定的大小模式调整项目/组之间的填充。

DxGridListEditor 中的其他增强功能
我们向 DxGridListEditor 组件添加了以下增强功能:
• ExportController在列表视图中包含导出到操作。
• 模型编辑器包含列的 MinWidth 选项。
• 您可以根据需要创建自定义摘要。有关详细信息,请参阅以下主题:如何:从控制器扩展和访问应用程序模型节点。

拆分视图布局
我们为 Blazor 应用程序中的列表视图引入了一种新的 ListViewAndDetailView 显示模式。受 Microsoft Outlook 中的紧凑视图的启发,此新功能允许您将数据呈现为同步的 ListView 和 DetailView(并排显示)。

布局选项卡 - 延迟加载
布局选项卡现在支持延迟加载。当Tab被激活并持续在DOM中时,将呈现标签的内容。
查找属性编辑器中的多列
查找属性编辑器现在可以在下拉列表中显示多列。编辑器从应用程序模型中的 Lookup ListView 节点获取列信息。

展开/折叠布局组
您现在可以展开/折叠布局组。激活IsCollapsibleGroup选项以启用此功能。使用IsGroupCollapsed属性在代码中指定组的展开/折叠状态。

DxGridListEditor 中的内联编辑
用户现在可以内联编辑数据或使用编辑表单。可以显示编辑表单而不是编辑行(或显示在浮动窗口中)。使用InlineEditMode属性指定编辑模式。文档

增强的 Accordion 和树状导航
我们集成了一个新的 DevExpress Blazor Accordion 组件并支持通用控制选项(例如,图像、视图变体、在单独的浏览器选项卡中打开项目等)。

常见增强功能
.NET 7 支持
XPO 的 ORM 数据模型设计器、XAF 的模型编辑器和解决方案向导在 v22.2 中支持最新的 Visual Studio 2022 和 .NET 7 版本。
防止导航权限的读取访问
我们实施了新的验证规则来改进对访问权限的控制。在此版本中,当您拒绝访问特定角色的导航项时,XAF 会通知您是否仍然为具有分配角色的用户打开关联的类型权限。该警告有助于防止对特定对象类型进行未经授权的访问。
XPO 连接提供程序增强功能
XPO 现在支持以下数据库引擎的最新版本:
Microsoft SQL Server 2019 和 2022(Microsoft.Data.SqlClient.dll 5.0.0 和 System.Data.SqlClient.dll 4.6.1.4)
Oracle 21c (Oracle.ManagedDataAccess.Core.dll 3.1.21.1)
PostgreSQL 15 (Npgsql.dll 6.0.7.0)
MySQL 服务器 8(MySql.Data.dll 8.0.31.0 和 MySqlConnector.dll 2.1.13)
SQLite(Microsoft.Data.SQLite.dll 6.0.10 和 ystem.Data.SQLite.dll 1.0.116.0)
VistaDB 6.4 (VistaDB.6.dll 6.4.0.0)
实体框架核心
EF Core 6 ORM 支持
您现在可以使用 Entity Framework Core 6 访问所有基于 .NET 6 的 XAF 应用程序(WinForms、Blazor 和 Web API 服务)中的数据。
EF Core 的内置属性更改通知
您现在可以使用更改跟踪代理在通过 Entity Framework Core 6 访问数据时自动检测对象属性更改。启用 DbContextOptions.UseChangeTrackingProxies 选项后,您不再需要实施 INotifyPropertyChanged 和 INotifyPropertyChanging 来通知客户端属性值已更改.
这个新的增强功能允许您简化业务类的实施。
考虑以下示例。这是 v22.1 中业务对象的实现:
C#
public class BusinessObject : INotifyPropertyChanged {
int id;
string name;
public int Id {
get { return id; }
set {
if (id != value) {
id = value;
OnPropertyChanged();
}
}
}
public string Name {
get { return name; }
set {
if (name != value) {
name = value;
OnPropertyChanged();
}
}
}
protected void OnPropertyChanged([CallerMemberName]string propertyName = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
这就是它在 v22.2 中的转换方式:
C#
public class BusinessObject {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
可以对实现 IObjectSpaceLink 的对象进行相同的更改。例如,这是 v22.1 中业务对象的实现。
C#
public class BusinessObject : IObjectSpaceLink {
// ...
public void SomeAction() {
// some business-logic uses ObjectSpace
}
IObjectSpace objectSpace;
IObjectSpace IObjectSpaceLink.ObjectSpace {
get { return objectSpace; }
set { objectSpace = value; }
}
}
这就是它在 v22.2 中的样子。
C#
public class BusinessObject {
// ...
public void SomeAction() {
var objectSpace = ((IObjectSpaceLink)this).ObjectSpace;
// some business-logic uses objectSpace
}
}
配置 EF Core DbContext 时,调用 DbContextOptionsBuilder.UseObjectSpaceLinkProxies 方法为所有持久类启用自动 IObjectSpaceLink 实现。阅读以下 MSDN 主题以了解更多信息:DbContextOptions。
使用 XAF 解决方案向导创建的所有新项目默认启用 UseChangeTrackingProxies 选项。
EF Core 业务对象的新基类
抽象 DevExpress.Persistent.BaseImpl.EF.BaseObject 类包括一个关键属性并实现IObjectSpaceLink和IXafEntityObject接口。从“BaseObject”继承以避免样板代码并在您的业务对象中实施最佳实践。
C#
public class BusinessObject : BaseObject {
public virtual int MyProperty { get; set;}
// The OnCreated() method is a part of the IXafEntityObject interface implementation
public override void OnCreated() {
// ObjectSpace is a part of the IObjectSpaceLink interface implementation
MyProperty = ObjectSpace.GetObjectsQuery<BusinessObject>().Count();
}
}
.NET APP安全和Web API服务
您现在可以使用 Entity Framework Core 6 访问我们后端 Web API / REST API 应用程序中的数据。我们的 Web API 服务的基本功能(CRUD、身份验证和授权)作为我们的.NET App Security & Web API Service 的一部分免费提供。

报表模块支持
使用服务端点(又名报表模块) 从数据库中的报表模板和过滤数据下载 PDF 。使用api/Report/DownloadByKey、api/Report/DownloadByName端点,您可以从存储在数据库中的 ReportDatav2 容器下载数据。
每个 ReportDatav2 都链接到一个“XtraReport”、报表数据源和在 Visual Studio IDE 中设计的数据模型。您可以根据需要传递报表容器标识符、数据源条件和其他参数。
XAF 的应用程序向导自动将ReportController添加到新的 Web API 应用程序。您可以扩展和修改此端点以满足特定要求。
注意:此端点尊重安全权限。
我们的 Web API 服务的这个选项作为DevExpress 通用订阅的一部分提供。
审计追踪支持
使用服务端点(审计跟踪模块) 记录数据库历史变化。在 Web API 端点中通过 ORM 进行的数据更改不会被忽视。您可以在 RDBMS 或 XAF 的管理 UI(WinForms、Blazor 和/或 ASP.NET Web Forms)中查看相关的日志历史记录。
我们的 Web API 服务的这个选项作为DevExpress 通用订阅的一部分提供。
文件附件支持
使用服务端点(文件附件模块) 下载存储在数据库中的 BLOB 数据。使用api/MediaFile/DownloadStream端点,您可以从数据模型中声明的 FileData、MediaDataObject、Image 或字节数组属性下载数据。
注意:此端点尊重安全权限。
我们的 Web API 服务的这个选项作为DevExpress 通用订阅的一部分提供。
验证模块支持
使用内置(超过 10 个)或自定义验证规则 - 验证模块检查我们 Web API 服务中输入数据的状态。您现在可以使用我们的 IValidator 服务来验证自定义端点中的输入数据。文档
我们的 Web API 服务的这个选项作为DevExpress 通用订阅的一部分提供。
非持久对象支持
您现在可以在我们的 Web API 服务中对非持久对象和代理对象执行 CRUD 操作(与其他持久对象的方式相同)。我们建议您从NonPersistentBaseObject或其他具有关键属性的类继承,以对非持久性类实施最佳实践。
我们的 Web API 服务的这个选项作为DevExpress 通用订阅的一部分提供。
内置单元测试基础设施
我们的 MainDemo 应用程序现在包括一个预配置的测试项目,其中包含基类和帮助程序以及适用于最流行使用场景的固定装置。该项目应帮助 API 开发人员为 CRUD 操作和自定义 Web API 服务端点编写单元测试。
C#
[TestFixture]
public class MyWebApiTests : BaseWebApiTest {
[Test]
public async Task TestPostDelete() {
var newResult = await api.PostAsync(
new TestObject { TestProperty = "test" }
);
Assert.NotNull(await api.GetByKeyAsync<TestObject>(newResult.Oid.ToString()));
var deleted = await api.DeleteAsync<TestObject>(newResult.Oid.ToString());
Assert.AreEqual(newResult.Oid, deleted.Oid);
}
[TestCase(typeof(Employee))]
[TestCase(typeof(Paycheck))]
[TestCase(typeof(Position))]
public async Task TestGetBasic(Type objectType) {
var result = await api.GetAllAsync(objectType);
Assert.Greater(result.Length, 0);
}
}
我们的 Web API 服务的这个选项作为DevExpress 通用订阅的一部分提供。
新的预构建代码和项目错误诊断
我们在 v22.2.3 + 使用项目转换器(重大变更)启用了XAF/XPO 错误诊断(作为 DevExpress.ExpressApp.CodeAnalysis NuGet 包的一部分提供)。我们希望这将节省您在 Visual Studio 中的时间或使用您的 CI/CD 工作流验证您的构建质量。
在此更新中,我们还添加了以下新诊断:
• 内部 ShowViewStrategy.ShowView 方法调用而不是推荐的公共 ShowViewInPopupWindow、ShowMessage API 或使用操作。
• 检测只读属性(非公共或缺少设置器)的冗余 NonPersistentAttribute。
• 检测 XPCollection 属性的冗余 ExplicitLoadingAttribute。
• 检测 XPO 类中的冗余 IObjectSpaceLink(因为 Session 属性已经存在)。
• 检测 XPO 类中的冗余 IXafEntityObject(因为 AfterConstruction、OnSaving 和 OnLoaded 方法可用)。
• 不正确的 XAF 控制器实例化,如“new DialogController()”。
• 避免在基于 XPO 的 XAF 项目中使用无参数构造函数创建新的 Session/UnitOfWork。
• 检测实体框架或非持久性 POCO 类或其成员中的 XPO 特定属性。
• 在 XPO 方法调用中使用封闭属性名称。
• 使用受支持的 EF Core 包版本。
• 使用不带类型参数的通用 XPCollection<T> 类、GetCollection<T> 方法和 AssociationAttribute 来声明您的关联属性。
渝公网安备50010702505508