Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
237 lines (186 sloc) 14.2 KB

CUBA 平台发行说明

概要

该文档列出了 CUBA 平台版本 7.1-chs 的主要改动。

破坏性改动

  1. SYS_SCHEDULED_TASK 表的 PERIOD 字段重命名为 PERIOD_。如果您在数据库初始化脚本中创建定时任务,需要修改脚本使用新的列名。

  2. 删除了之前已经废弃的 LoginServiceLoginWorker 类。使用 AuthenticationServiceTrustedClientService 中的相应方法:

    • LoginService.login()AuthenticationService.login() 使用 LoginPasswordCredentials

    • LoginService.loginTrusted()AuthenticationService.login() 使用 TrustedClientCredentials

    • LoginService.loginByRememberMe()AuthenticationService.login() 使用 RememberMeCredentials

    • LoginService.loginByRememberMe()AuthenticationService.login() 使用 RememberMeCredentials

    • LoginService.substituteUser()AuthenticationService.substituteUser()

    • LoginService.getSession()TrustedClientService.findSession()

    • LoginService.getSystemSession()TrustedClientService.getSystemSession()

  3. 删除了之前已经废弃的 CubaAuthProvider 接口、该接口的实现类以及 cuba.web.externalAuthenticationcuba.web.externalAuthenticationProviderClass 应用程序属性。按照 文档 的描述使用事件、LoginProviderHttpRequestFilter

  4. TableGroupTable 接口中,删除了之前已经废弃的操作列的方法:

    // 从 Table 删除
    void setColumnCaption(String columnId, String caption);
    void setColumnCaption(Table.Column column, String caption);
    void setColumnDescription(String columnId, String description);
    void setColumnDescription(Table.Column column, String description);
    void setColumnCollapsed(String columnId, boolean collapsed);
    void setColumnCollapsed(Table.Column column, boolean collapsed);
    void setColumnWidth(String columnId, int width);
    void setColumnWidth(Table.Column column, int width);
    void setColumnAlignment(String columnId, ColumnAlignment alignment);
    void setColumnAlignment(Column column, ColumnAlignment alignment);
    void addAggregationProperty(String columnId, AggregationInfo.Type type);
    void addAggregationProperty(Column columnId, AggregationInfo.Type type);
    void removeAggregationProperty(String columnId);
    void setColumnSortable(String columnId, boolean sortable);
    boolean getColumnSortable(String columnId);
    void setColumnSortable(Column column, boolean sortable);
    boolean getColumnSortable(Column column);
    void setColumnCaptionAsHtml(String columnId, boolean captionAsHtml);
    void setColumnCaptionAsHtml(Table.Column column, boolean captionAsHtml);
    boolean getColumnCaptionAsHtml(String columnId);
    boolean getColumnCaptionAsHtml(Table.Column column);
    
    // 从 GroupTable 删除
    boolean getColumnGroupAllowed(String columnId);
    void setColumnGroupAllowed(String columnId, boolean allowed);
    boolean getColumnGroupAllowed(Table.Column column);
    void setColumnGroupAllowed(Table.Column column, boolean allowed);

    作为删除方法的替代方案,使用以下方法:

    Table.Column<Foo> numberColumn = fooTable.getColumn("number"); // get Column object by column id
    numberColumn.setCaption("Num"); // invoke Column's methods
  5. DataContext.PostCommitEvent 现在是在合并提交的实体回界面的数据上下文 之后 才触发,参阅 相应问题

  6. REST API 功能已经迁移到 REST API 扩展,参阅其 文档 。Studio 迁移程序会自动在项目中包含该扩展,如果项目带有一些 REST 配置文件或者使用了 Frontend UI 模块。否则,会从 web 模块的 web.xml 中删除 REST servlet 和 filter。

  7. 由于 REST API 迁移到了扩展里面,web 客户端的 健康检查 URL改到了 /dispatch/health,比如 http://localhost:8080/app/dispatch/health。如果在项目中包含了 REST API 扩展,则在 web 和 portal block 还会跟之前版本一样,有 /rest/health API 端点。portal 模块现在有了它自己的健康检查端点。

  8. 遗留的 REST API v1 功能已经迁移到 JPA Web API 扩展。Studio 并不提供任何自动的迁移过程,所以如果项目中需要该功能,请使用 README 中的安装向导。

  9. Application Log - 应用程序日志History - 界面历史 菜单项已经从默认的主菜单中删除。如果您还需要,在项目的 web-menu.xml 中添加如下元素:

    <item id="logWindow" class="com.haulmont.cuba.web.log.LogWindowLauncher" insertAfter="settings"/>
    <item id="sec$ScreenHistory.browse" insertAfter="settings"/>

通用 UI

  1. 现在可以通过组合已存在的可视化组件来创造新的可视化组件了,参阅 组合组件

  2. 非可视化组件的概念已经归纳出来并且支持扩展,参阅 非可视化组件 。除了 Timer 之外,框架提供了新的非可视化组件:https://doc.cuba-platform.cn/manual-7.1-chs/gui_ClipboardTrigger.html[ClipboardTrigger]DataLoadCoordinator

  3. DataLoadCoordinator 组件设计用来声明式的将数据加载器和数据容器、可视化组件、界面事件进行连接。可以使用该组件而不必再 Java 代码中写事件处理器了。

  4. Form - 表单 组件现在可以包含使用 field 元素定义的通用的字段了。框架会根据对应的实体属性和已有的组件生成策略选择合适的可视化组件。

  5. 引入了 输入对话框 ,可以使用 API 构建输入表单。可以用这个替换输入数据的界面。

  6. 现在可以将应用程序的部分界面开放给非认证用户,参阅 匿名访问界面

  7. 标准的登录界面和主窗口已经用新的界面 API 重写了,细节参阅 Root Screens 。主界面布局带有侧边菜单栏,所以新项目会默认使用这个。对于从之前版本框架迁移过来的项目,Studio 迁移程序会在 web-app.properties 中添加以下应用程序属性:

    cuba.web.loginScreenId = loginWindow
    cuba.web.mainScreenId = mainWindow

    这可以保证迁移过来的项目仍旧使用旧版的登录页和主界面。如果需要切换到新界面,可以删除这些应用程序属性。

  8. 标准主界面上的登出按钮已经使用 UserActionsButton 组件进行了替换。如果用户未认证,该组件允许用户跳转到登录界面;当用户完成认证后,该组件提供显示 Settings - 配置 界面和登出的操作。

  9. 可以为应用程序界面生成 URL 了,参阅 URL 路由生成器

  10. 如果一个界面控制器有公共的 setters 用来接收参数,则可以从主菜单传递参数,参阅 menu.xml

  11. 如果一个界面片段控制器有公共的 setters 用来接收参数,则可以在父界面的 XML 中设置,参阅 给界面片段传递参数

  12. 当界面片段被添加/移除到父界面时,可以触发 attach/detach 生命周期事件,参阅 ScreenFragment 事件 。另外,当用编程的方式创建界面片段时,不在需要手动调用 init() 方法了,因为片段的生命周期事件会在片段被添加到界面时自动触发。

  13. UI 表格的实体属性排序可以 自定义 了。

  14. Data Loaders 添加了 PreLoadEventPostLoadEvent 事件。

  15. 引入了 DynamicAttributesPanel 可视化组件,设计用来在基于新 API 的界面中显示带有动态属性的 分类的实体

  16. Table 组件的列现在有 expandRatio 属性。

  17. 通用过滤器现在可以在改变了条件或者其它参数时,不需要按搜索按钮马上生效。你可以使用过滤器的 applyImmediately 属性或者全局的 cuba.gui.genericFilterApplyImmediately 应用程序属性来控制该功能。Studio 迁移过程会默认设置该值为 false,以保持现有系统的用户体验不变。

  18. HtmlAttributes 的功能已经扩展,现在可以操控嵌套的 HTML 元素了。

  19. 为了简化从框架的 6 版本迁移的难度,我们恢复了之前没有文档的使用遗留 API 界面作为 frame 的功能。现在支持 AbstractWindowAbstractLookupEntityCombinedScreenAbstractEditor 不支持)的子类了。界面的 init() 方法会自动调用,而 ready() 不会,跟之前一样。

  20. 框架现在提供了基础设施,以便在 web 层写集成测试,用来在全功能的 Spring 容器中测试 UI,参阅 Web 集成测试

其他

  1. 动态属性的功能显著加强了,包括:一种新的类型 - fixed-point number;自定义验证;自动计算和依赖属性。参阅 管理动态属性 了解细节。

  2. 框架现在带有一些启动时对运行环境和数据模型的检查:

    • 如果有下面的环境问题,日志会记录一个警告:

    • 如果一个本地属性使用了 @Basic(fetch = FetchType.LAZY) 注解,读取类型换成 EAGER 会记录一个警告

    • 如果一个引用属性使用了 @ManyToOne(fetch = FetchType.EAGER)(或者类似引用注解使用了 EAGER 读取类型),读取类型切换成 LAZY 会记录一个警告

    • 如果一个实体没有正确加强,会抛出异常,应用程序不会启动。如果有任何关于这点的疑问,可以设置 cuba.disableEntityEnhancementCheckfalse 禁用该功能

  3. 引入了 EntityPersistingEvent ,可以用来在新实体持久化到数据库之前初始化其属性。

  4. DataManager 现在可以为保存的实体实例执行 bean 验证。使用 cuba.dataManagerBeanValidation 属性来控制是否默认执行验证。

    当升级一个现有项目至 7.1,Studio 迁移程序会设置该属性为 false 以关闭验证。

  5. DataManager 现在默认使用 _base 视图(之前是 _local)。所以,如果在执行请求时未指定视图,比如 dataManager.load(Person.class).id(someId).one(),将会获取到实体的本地属性和 @NamePattern 中指定的属性。如果 @NamePattern 包含引用属性,则会比之前获取更多的数据。

  6. 引入了 LoadContext.setIds() 方法,接收实体标识符的集合。该方法被 DataManager.loadList() 方法以更高的优先级使用,相比传递的查询语句和单一 id 来说。流式接口也有接收多个 id 的方法:

    dataManager.load(Customer.class).ids(customer1Id, customer2Id).list();
    
    List<UUID> idList = Arrays.asList(customer1Id, customer2Id);
    dataManager.load(Customer.class).ids(idList).list();
  7. @JmxBean 注解可以用来注册 JMX bean ,而不需要在 spring.xml 文件中注册了。

  8. 查询提示 可以用来针对数据库特性对查询语句做优化。提示可以传递给 QueryLoadContext

核心框架:

com.google.guava/guava = 27.1-jre com.microsoft.sqlserver/mssql-jdbc = 7.2.1.jre8 commons-codec/commons-codec = 1.12 commons-fileupload/commons-fileupload = 1.4 mysql/mysql-connector-java = 8.0.15 org.apache.commons/commons-collections4 = 4.3 org.apache.commons/commons-compress = 1.18 org.apache.commons/commons-dbcp2 = 2.6.0 org.apache.commons/commons-lang3 = 3.9 org.apache.commons/commons-pool2 = 2.6.2 org.apache.commons/commons-text = 1.6 org.apache.httpcomponents/fluent-hc = 4.5.8 org.apache.httpcomponents/httpclient = 4.5.8 org.apache.httpcomponents/httpcore = 4.4.11 org.apache.httpcomponents/httpmime = 4.5.8 org.aspectj/aspectjrt = 1.9.2 org.aspectj/aspectjweaver = 1.9.2 org.codehaus.groovy = 2.5.6 org.eclipse.persistence/org.eclipse.persistence.jpa = 2.7.3-6-cuba org.freemarker/freemarker = 2.3.28 org.hibernate.validator/hibernate-validator = 6.0.16.Final org.hsqldb/hsqldb = 2.4.1 org.jgroups/jgroups = 3.6.17.Final org.postgresql/postgresql = 42.2.5 org.spockframework/spock-core = 1.3-groovy-2.5

报表扩展:

com.haulmont.yarg = 2.1.5


You can’t perform that action at this time.