首页 文章 精选 留言 我的

精选列表

搜索[企业级],共10001篇文章
优秀的个人博客,低调大师

《企业级ios应用开发实战》一导读

前 言 为什么写这本书随着我国3G网络和移动互联网的兴起,许多传统的企业应用正在从桌面向移动终端扩展,移动办公、移动营销、移动作业等需求日渐强烈。有迹象表明,传统的互联网正在向移动互联网发展。根据摩根士丹利发布的全球互联网发展趋势报告(Mary Meeker 2010)显示:全球互联网发展趋势正在由PC-Internet向Mobile-Internet转变,手机在某种意义上已经主导着互联网的发展,新兴的下一代互联网,即Mobile 2.0正在崛起,这完全得益于移动通信技术的迅猛发展。这不仅仅是一场由最新数码科技与网络技术导致的变革,还是传统企业应用从Internet向移动互联网转移的前提和诱因。与PC相比,移动终端的这种全新用户体验是不可替代的,在一定程度上吸引了人们从桌面向移动终端的转移。而且,移动互联网也凭借着其出色的业务

优秀的个人博客,低调大师

Jmix 2.2 发布 - 企业级 Web 快速开发框架

▲Jmix2.2 发布 我们最近发布了 Jmix 的 2.2 版本。这篇博客中,我们将介绍这个新版本中增加的新功能和改进。 有关完整的详细信息和升级说明,请参阅文档中的最近更新[1]页面。 图表扩展组件 也许 Jmix 2.2 最值得注意的新特性是期待已久的图表组件。该组件在 Jmix UI 中集成了开源的 JavaScript 图表库 Apache ECharts[2] 。在 Jmix 项目中可以通过 XML 或 Java 配置 ECharts 的所有功能,并与其他 UI 组件一样,可以很方便地连接服务端的数据。 例如,有一个 VehicleCount 实体,该实体在 cars、motorcycles、bicycles 和 year 属性中按年份存储不同类型车辆的数量,您可以按下面的代码示例配置一个数据可视化的图表: <data> <collectionid="vehiclesDc" class="com.company.demo.entity.VehicleCount"> <fetchPlanextends="_local"/> <loaderid="vehiclesDl"readOnly="true"> <query> <![CDATA[selectefromVehicleCounteorderbye.year]]> </query> </loader> </collection> </data> <layout> <charts:chartid="chart"> <charts:dataSet> <charts:sourcedataContainer="vehiclesDc" categoryField="year" valueFields="carsmotorcyclesbicycles"/> </charts:dataSet> <charts:series> <charts:barname="Cars"/> <charts:barname="Motorcycles"stack="stack"/> <charts:barname="Bicycles"stack="stack"/> </charts:series> <charts:xAxes> <charts:xAxis/> </charts:xAxes> <charts:yAxes> <charts:yAxis> <charts:axisLabelformatter="{value}"/> </charts:yAxis> </charts:yAxes> <charts:titletext="Vehicles"subtext="ByYear"/> <charts:legend/> </charts:chart> 可以看到,图表通过 source 元素关联了数据容器,并在 series 元素中定义如何显示数据。生成的图表如下: ▲ECharts 图表 我们尝试让 XML 和 Java 的图表 API 尽可能接近 ECharts 的原生 JavaScript API,这样,通过参考 ECharts 的文档,可以直接在 Jmix 中配置图表了。 图表扩展组件在 Jmix 组件市场[3] 免费提供,可以在任何 Jmix 2.2 的项目中使用。 地图扩展组件改进 我们为地图扩展组件添加了新的重要功能:能够显示 MultiPoint、MultiLine 和 MultiPolygon 几何图形、热图图层和聚类图。 MultiPolygon 是单一几何图形多边形的集合。在下面的示例中,我们创建了一个由两个矩形组成的 MultiPolygon: privatevoidaddMultiPolygon(VectorSourcevectorSource){ GeometryFactoryfactory=GeometryUtils.getGeometryFactory(); Polygonpolygon1=factory.createPolygon( factory.createLinearRing(newCoordinate[]{ newCoordinate(15.5,38.9), newCoordinate(15.5,44.9), newCoordinate(9.5,44.9), newCoordinate(9.5,38.9), newCoordinate(15.5,38.9)})); Polygonpolygon2=factory.createPolygon( factory.createLinearRing(newCoordinate[]{ newCoordinate(20.7,40.9), newCoordinate(26.7,40.9), newCoordinate(26.7,34.9), newCoordinate(20.7,34.9), newCoordinate(20.7,40.9)})); MultiPolygonmultiPolygon=factory.createMultiPolygon(newPolygon[]{polygon1,polygon2}); vectorSource.addFeature(newMultiPolygonFeature(multiPolygon)); } 地图中显示如下: ▲地图中的多边形 聚类功能支持通过合并功能在地图上显示大量标记。在下面的示例中,展示了罗马人建立的著名城市: ▲地图中的标记 只需将矢量数据源放入视图 XML 中的 cluster 元素中即可实现: <maps:geoMap> <maps:layers> <maps:tile> <maps:osmSource/> </maps:tile> <maps:vectorid="cityLayer"> <maps:clusterdistance="30"> <maps:dataVectorSourcedataContainer="citiesDc"property="point"/> </maps:cluster> </maps:vector> </maps:layers> <maps:mapViewcenterY="41.9"centerX="12.48"zoom="4.5"/> </maps:geoMap> 相同的数据也可以用热力图展示,值用颜色表示: ▲地图中的热力图 热力图通过特定的 heatmap 图层配置,该图层自己的数据源连接到同一数据容器: <maps:geoMap> <maps:layers> <maps:tile> <maps:osmSource/> </maps:tile> <maps:heatmapradius="15"> <maps:heatmapDataVectorSourcedataContainer="citiesDc"property="point"/> </maps:heatmap> </maps:layers> <maps:mapViewcenterY="41.9"centerX="12.48"zoom="4.5"/> </maps:geoMap> BPM 扩展组件改进 为了缩短在 Studio 中开发业务流的反馈环路时间,我们实现了将流程定义热部署到正在运行的应用程序中的功能。在 BPMN 设计器的顶部面板中有 Hot Deploy Process 按钮。成功部署流程后,应用程序会在日志中打印一条消息: ▲BPM 流程热部署 Studio 中的流程表单向导现在可以为流程的启动事件生成表单。表单中将包含一个用于启动流程的按钮,该按钮调用流程引擎的 API。 向导的“表单模板”下拉列表中包含一个新的实体实例流程表单选项。如果选择此选项,向导将支持选择或创建 Entity 类型的流程变量。生成的流程表单将带有一个数据容器以及一个用于编辑所选实体的控件。 富文本编辑器组件 新富文本编辑器组件基于 Quill[4] JavaScript 库构建,支持编辑文本的格式并将其保存为 HTML: ▲富文本编辑器 该组件是数据感知的,可以与数据模型关联: <richTextEditorid="descriptionField"width="100%" dataContainer="stepDc"property="description"/> 主视图的改进 新增的 menuFilterField 组件支持用户对主菜单项进行过滤。 只需要将过滤器控件放在视图上的某个位置并与 listMenu 关联: <menuFilterFieldmenu="menu" placeholder="Search..."classNames="ms-sme-s"/> <navid="navigation"classNames="jmix-main-view-navigation"ariaLabel="msg://navigation.ariaLabel"> <listMenuid="menu"/> </nav> 菜单搜索的实际效果: ▲应用程序菜单搜索 主视图的另一个改进是能够在没有子视图打开时以声明方式定义其展示的内容。使用 appLayout 组件的 initialLayout 元素: <appLayout> <navigationBar.../> <drawerLayout.../> <initialLayout> <h2text="Helloworld!"/> </initialLayout> </appLayout> 应用程序界面如下: ▲应用程序初始视图 还有一点,这个页面中大家最期待的改进就是横向主菜单: ▲应用程序顶部菜单栏 由 horizontalMenu 组件实现,该组件从同一 menu.xml 中获取菜单的结构。因此,项目中可以随时将标准的竖向 listMenu 替换为顶部横向菜单。最简单的方法是点击 New → View,然后选择 Main view with top menu 模板。如果你在向导的第二步中勾选了 Use as default main view 复选框,Studio 会自动在 jmix.ui.main-view-id 应用程序属性和所有视图的 @Route 注解的 layout 属性中设置新的主视图,例如: @Route(value="users",layout=MainViewTopMenu.class) 这样一来,当应用程序启动时,新的主菜单将无缝完美运行。 DataGrid 改进 现在,双击 DataGrid 的某一行将打开详情视图,或者,如果是查找模式,则完成选择。这对用户来说非常方便,不需要先选择一行,再点击按钮或菜单。 我们还完成了表头过滤器的一项重要工作:现在 URL 中可以反映表头过滤器的状态,以提供深度链接,从而导航到详情视图再返回时仍然保持视图的过滤器状态。如需配置,请使用 urlQueryParameters facet 中新的 dataGridFilter 元素。 还有一个有用的功能是新的 gridColumnVisibility 组件,用户能够隐藏和显示列: ▲DataGrid 列显示控制 通用过滤器支持集合属性 以前,要使用 genericFilter 组件按实体的集合属性过滤实体时,必须使用 join 和 where 子句定义 JPQL 条件。显然,对于最终用户来说,这个太难了。 现在,在多对多映射中,按集合属性及其内部属性进行过滤与一对一映射一样简单:集合属性也显示在通用过滤器的“添加条件”对话框中,并且所需的 JPQL 条件由框架自动生成。 在下面的示例中,用户列表按链接 steps 集合的 completedDate 属性进行筛选: ▲通用过滤器集合属性过滤 - 配置 ▲通用过滤器集合属性过滤 - 结果 提升构建速度 虽然热部署技术在开发用户界面时大大缩短了反馈环路的时间,但这并不适用于业务逻辑的开发。因此,在开发过程中能快速重启应用程序仍然非常重要。 在以前的版本中,实体增强步骤会在构建过程中消耗大量的时间,在 Jmix 2.2 中我们做了改进,只有在自上次构建后数据模型发生修改时才会执行实体增强。因此,如果在不修改实体的情况下更改了 Spring Bean,那么构建和重启过程现在比以前快得多,尤其是在具有大量数据模型的项目中。 新的代码片段辅助 如果您在项目中包含报表、电子邮件、BPM 或通知扩展组件,则 Studio 提供了与这些附加组件 API 相关的新代码片段。 例如,如果要在用户点击按钮时运行报表,则可以先生成按钮点击事件监听器,然后将 Run report using UiReportRunner 代码段拖放到监听器中。Studio 将提示您指定需要运行的报表,并为您生成相应的代码: ▲报表组件辅助代码段 生成的代码可以正常工作,也可以作为进一步开发的样板代码。 使用向导添加组件 随着 UI 组件不断丰富,对于新手来说,为某个任务找到合适的组件变得越来越具有挑战性。 因此,我们决定提供另一种更具声明性的方式来创建 UI 视图。开发人员无需从“添加组件”选项板中选择组件并对其进行配置,而是可以启动一个组件创建向导,向导界面中会提示一系列的问题。然后,向导根据问题的答案生成包含预制配置的可视化组件和数据组件的整个代码片段。 事实上,Studio 之前为 DataGrid 和数据容器提供了这种向导,但这些向导仅当从组件工具箱中选择相应组件时才会启动。现在,可以不知道特定组件的存在,只需选择一个向导,根据其名称可以完成任务。 在以下截屏视频中,“编辑实体属性”向导创建了一个 formLayout,其中包含数据容器中关联的字段: ▲通过向导添加复杂页面组件 此功能目前还处于实验阶段,我们计划未来会添加更多向导,以及考虑在各种场景中的使用。 测试脚手架 当使用新的 Studio 打开一个项目时,可以在 Jmix 工具窗口中看到 Tests 节点。双击该节点将进入 Project 工具窗口并打开 src/test/java 目录。 通过 New → Advanced → Integration Test 和 UI Integration Test 操作,可以快速生成业务逻辑和 UI 集成测试的装代码。 小项目用 Studio 免费啦! One more thing... 现在,Studio 的 premium RAD 功能可以在最多 10 个实体和角色的小型项目中免费使用。也就是说,Studio 中所有的可视化工具都可以用来学习、实验、创建宠物项目或商业项目,而无需商业或试用订阅。唯一的限制是这些项目没有大的数据模型和安全角色。 我们希望通过提供免费的工具能够让开发者更容易学习和接受 Jmix,从而让更多的人能够接触到 Jmix。 下一步? 在 2024 年 6 月的下一个功能版本中,我们计划实现集成 Apache Superset[5],一个全球领先的开源数据可视化平台。 在 Studio 方面,我们将提供一种聚合 Liquibase 变更日志的方法,以及快速转换类似的 UI 组件的操作,例如,切换 entityPicker 和 entityComboBox。 与之前一样,我们还会投入大量时间来修复错误、添加小功能和提升性能。 我们未来版本的详细路线图在 GitHub 项目[6] 中。针对 2.2 的补丁版本将大约每月发布一次,以保持定期更新。 感谢所有提供想法、建议和错误报告的亲们! 参考资料 [1]最近更新: https://docs.jmix.cn/jmix/whats-new/index.html [2]Apache ECharts: https://echarts.apache.org/ [3]Jmix 组件市场: https://www.jmix.io/marketplace [4]Quill: https://quilljs.com/ [5]Apache Superset: https://superset.apache.org/ [6]GitHub 项目: https://github.com/orgs/jmix-framework/projects/5

优秀的个人博客,低调大师

Jmix 2.1 发布 - 企业级 Web 快速开发框架

我们最近发布了 Jmix 的 2.1 版本。下面我们将介绍这个新版本中增加的新功能和改进。 有关完整的详细信息和升级说明,请参阅官方文档中的最近更新页面。 新的扩展组件 我们将一些之前在 Jmix v.1 中基于经典 UI 的扩展组件迁移了过来。Jmix 2.1 中也能很容易集成这些组件,并且基于 Vaadin 24 提供的现代 Flow UI。 地图 地图扩展组件已经能支持 Jmix 2+,且具有新的 API,Studio 也能提供出色的支持。 下面的示例演示了如何在指定位置显示一个地图标记的 OpenStreetMap: <maps:geoMapid="map"width="100%"height="100%"> <maps:layers> <maps:tile> <maps:osmSource/> </maps:tile> <maps:vectorid="pointsLayer"> <maps:vectorSource/> </maps:vector> </maps:layers> </maps:geoMap> @ViewComponent privateGeoMapmap; @Subscribe publicvoidonInit(InitEventevent){ VectorLayervectorLayer=map.getLayer("pointsLayer"); VectorSourcevectorSource=vectorLayer.getSource(); vectorSource.addFeature(newMarkerFeature( GeometryUtils.createPoint(12.496176,41.902695))); } 这个示例属于 “hello world” 级别,显然没有涵盖组件的所有功能。事实上,地图可以包含瓦片层、图像层和矢量层,每个图层都支持不同的数据供应商。可以显示标记、点、折线和多边形。该组件的工作尚未完成,我们将在下一个版本中提供更多功能。 动态属性 动态属性 扩展组件支持在运行时为实体定义新的属性,而无需修改数据库结构和重启应用程序。这些动态属性可以拆分为不同的类别。 例如,Book 实体可以分为两类:电子和纸质。电子书具有“可用格式”和“文件大小”属性,而纸质书具有“封面类型”、“重量”和“尺寸”属性。可以在应用程序 UI 中定义动态属性: 在配置了属性之后,用户可以在已有的视图中查看并输入属性值: 动态属性会自动显示在特殊的 dynamicAttributesPanel 组件(如上所示)或任何现有的 formLayout 和 dataGrid 中。 通知组件 通知组件支持向用户发送应用内通知或电子邮件通知。可以通过 API 或使用附加组件提供的视图发送通知: 应用程序的 UI 需要包含 notificationsIndicator 组件,例如在 main-view.xml 中: <appLayout> <navigationBar> <header...> ... <ntf:notificationsIndicatorclassNames="ms-autome-m"/> </header> </navigationBar> 然后,收件人能在指示标记看到未读通知的数量,并通过简洁的 UI 直接打开: 搜索组件 搜索 扩展组件支持与 ElasticSearch 进行集成,为应用程序中的数据和上传文件提供全文搜索功能。通过几个简单的步骤就能使用该组件: 定义 ElasticSearch 的连接: jmix.search.elasticsearch.url = http://localhost:9200 创建一个带注解的 Java 接口,用于定义哪些内容需要进行索引: @JmixEntitySearchIndex(entity=Book.class) publicinterfaceBookIndexDef{ @AutoMappedField(includeProperties= {"title","author","publisher","genre.name"}) voidbookMapping(); } 在应用程序 UI 中添加 searchField 组件: <drawerLayout> <section...> <search:searchField/> 这样就可以了。系统将为 Book 实体的数据自动创建索引(并在每次变动时重新索引),用户能使用索引进行全文搜索: 搜索结果会根据当前用户的数据访问权限自动过滤,消除任何信息泄露的风险。 WebDAV WebDAV 扩展组件通过 WebDAV 协议提供对文件存储中文件的访问。用户可以使用桌面应用程序(Word、Excel、LibreOffice 等)无缝打开和编辑文件,而无需从应用程序进行上传和下载的操作。在 UI 层,组件提供了一个特殊的上传控件和管理页面,用于管理文件及其版本: 批量编辑器 批量编辑器 扩展组件支持用户一次更改多个实体实例的属性值,并提供了一个可以添加到任何 dataGrid 的操作: <dataGridid="booksDataGrid"...> <actions> ... <actionid="bulkEdit"type="bulked_edit"/> </actions> 此操作将打开一个对话框,用户可以输入属性的值。所有选定的实体实例都将更新这些属性: JMX 控制台 JMX 控制台 扩展组件为 Java JMX API 提供了 Web 页面。系统管理员可以直接在应用程序 UI 中检查 JMX bean、编辑属性和调用操作: BPM 改进 在应用程序 UI 中现在可以使用 DMN 表建模器了: 流程表单向导现在可以生成功能完备的视图,用于编辑流程变量和选择输出结果。 向导能显示流程中定义的变量: 并支持定义输出: 根据你的选择,向导会在视图中生成代码,将流程变量注入 UI 组件,并使用所选的输出完成任务: @ProcessForm(outcomes={ @Outcome(id="submit"), @Outcome(id="reject") }) //... publicclassBpmProcessFormextendsStandardView{ @Autowired privateProcessFormContextprocessFormContext; @ProcessVariable @ViewComponent privateEntityPicker<Book>book; //... @Subscribe("submitBtn") protectedvoidonSubmitBtnClick(ClickEvent<JmixButton>event){ processFormContext.taskCompletion() .withOutcome("submit") .saveInjectedProcessVariables() .complete(); closeWithDefaultAction(); } dataGrid改进 该版本中,对 dataGrid 组件进行了增强,dataGrid 主要用于展示表格数据。 现在,用户可以对 dataGrid 进行多列排序。列排序的顺序由排序箭头旁边显示的数字表示: 排序由 dataGrid 组件的 multiSort、multiSortOnShiftClickOnly 和 multiSortPriority 属性定义。 另一个新功能是可以在行内计算聚合值。需要配置聚合列时,请将 dataGrid 组件的 aggregatable 属性设置为 true,将 aggregation 元素添加到列中并选择聚合类型。聚合值将显示在单独的行中: 下一个改进是能够声明式地将渲染器分配给 dataGrid 列。如果你熟悉 Jmix Classic UI,那你可能会发现带有声明式渲染器的列与 Classic UI 中的“生成列”非常相似。在 XML 中定义某个列,然后创建一个返回渲染器的处理方法: @Supply(to="stepsDataGrid.completed",subject="renderer") privateRenderer<UserStep>stepsDataGridCompletedRenderer(){ returnnewComponentRenderer<>(userStep->{ //... returncheckbox; }); } 框架中预定义了几个用于设置日期和数字格式的渲染器,可以在 XML 的列中使用。还有,现在可以在 XML 中定义不绑定实体属性的列,仅用于为其声明渲染器。 也许数据网格的改进中最令人兴奋的新功能是表头过滤器。可以使用 column XML 元素的 filterable 属性来定义哪些列支持过滤。可过滤列的标题中带有“漏斗”图标。如果用户单击此图标,则会显示一个包含属性过滤器的弹窗: 如果设置了过滤条件,表头的图标将高亮显示: 表头过滤器这个概念,对于使用包括 Excel 在内的许多流行产品的用户都很熟悉,所以这个功能非常容易被发现和使用。我们认为,这种过滤数据的方式是对其他两个过滤组件的极好补充:genericFilter 和 propertyFilter。genericFilter 组件在运行时是完全可自定义的,并提供高级条件,但可能不是特别容易使用。而 propertyFilter 对用户来说很简单,但需要开发人员事先配置。数据网格的表头过滤器在功能上类似于 propertyFilter,但不占用任何额外的屏幕空间,因此可以成为大多数视图的默认过滤选择。 值的一提的是,这三个过滤功能可以在同一视图和数据加载器上一起使用,而不会发生任何冲突。所有过滤器的条件都将使用逻辑 AND 运算符进行简单组合。 新的 UI 组件和 Facets VirtualList 新的 virtualList 组件用于展示任意内容的列表。在页面中,该组件仅渲染当前可见的部分,因此,无论内容多复杂,都能保证有良好的性能。 virtualList 可以在视图中替换 dataGrid 使用。在 XML 中定义组件并将与集合数据容器连接: <virtualListid="stepsVirtualList"itemsContainer="stepsDc"/> 与数据加载器关联的过滤和分页组件(如 genericFilter 和 simplePagination)将直接影响 virtualList 展示的内容,这一点与 dataGrid 一样。 然后,需要创建一个展示列表每项内容的处理方法: @Supply(to="stepsVirtualList",subject="renderer") privateRenderer<Step>stepsVirtualListRenderer(){ returnnewComponentRenderer<>(step->{ //... returnhbox; }); } 花费一些精力对 virtualList 内容的布局进行编码后,可以获得类似于以下示例的视图: Html html 组件支持将任意 HTML 内容插入到视图中。内容可以定义在内部的 content 元素、项目资源中的文件,或者是消息包中,而以消息包的方式定义可以方便地支持国际化。 Settings settings facet 支持保存和恢复当前用户的可视化组件的设置,能自动保存 dataGrid 列的参数、详细信息和 genericFilter 的打开状态,以及 simplePagination 选定的页面大小。只需将 facet 拖放到视图并设置其 auto=“true” 属性,facet 将能管理视图中具有标识符的所有支持保存设置的组件。 settings facet 还提供处理方法,可以保存和还原视图及其组件的任何属性。 Timer timer facet 支持以特定的时间间隔运行某些视图代码,其工作在一个可以处理用户界面事件并能更新视图组件的线程中。使用时,在 XML 中定义参数,并为 TimerActionEvent 创建处理方法: <timerid="timer"delay="2000"repeating="true"autostart="true"/> @Subscribe("timer") publicvoidonTimerTimerAction(finalTimer.TimerActionEventevent){ //... } 加载下拉列表选项 新版本中引入了一种将数据加载到下拉组件中的高效方法,支持 comboBox、entityComboBox 和 multiSelectComboBox。现在,可以不用为组件定义选项的集合数据容器,也无需提前加载完整的选项列表。新的方法是,需要在下拉列表组件中定义 itemsQuery 嵌套标签,并编写类似下面的查询语句: <entityComboBoxid="departmentField"property="department"pageSize="30"> <itemsQueryclass="com.company.onboarding.entity.Department" fetchPlan="_instance_name" searchStringFormat="(?i)%${inputString}%"> <query> <![CDATA[selectefromDepartmente wheree.namelike:searchStringorderbye.name]]> </query> </itemsQuery> </entityComboBox> 当用户打开下拉列表时,将执行查询语句,并返回最多 pageSize 行(默认为 50)数据作为选项。当用户滚动选项列表时,将分页加载数据。如果用户在控件中输入一些文本,还可以按文本过滤选项。 除了在 XML 中编写 JPQL 查询语句外,还可以定义 itemsFetchCallback 处理方法并通过编程的方式从任何源加载数据。 与使用单独的集合数据容器的旧方法相比,itemsQuery 可以在数据量比较大的时候提供更好的性能。itemsQuery 支持分批加载选项,从而可以减少内存的使用量,并支持在数据存储级别进行数据过滤。因此,这种方法可以支持几乎任何大小的数据集作为下拉列表中的选项来源。 话又说回来,对于较小的数据集,使用单独的预加载集合容器仍然是更好的选择,因为响应更快。 视图设计器的改进 下面我们看一下 Studio 中的新功能和改进。 Studio 中最明显的变化可能是包含了组件的层次结构和属性的 Jmix UI 工具窗口。这个窗口现在支持与页面的 Java controller 同时打开并使用各种操作,而无需打开页面的 XML。 这样一来,在控制器中编写 Java 代码时,查看组件树、更改组件属性甚至添加新组件都非常方便。 另外,对 Preview(预览)面板也进行了改进。 我们都知道,显示页面的预览效果需要构建前端并启动 Vaadin 服务的开发模式,这个过程可能非常耗时。为了节省打开项目的时间,现在只有在 XML 编辑器顶部面板中点击 Start Preview 按钮时,才会打开预览面板。面板打开后,项目中后续所有打开的视图都将展示在预览面板中。要停止预览,只需单击 Stop Preview。 我们还做了大量工作,将预览功能与其他可视化设计器机制进行拆分。因为预览面板使用 JCEF 嵌入式浏览器,该浏览器对项目、IDE和操作系统的非标准配置的细微差别很敏感,容易出现问题。现在,即使预览面板出问题也不会影响 Jmix UI 工具窗口和代码生成功能。 代码辅助 在此版本中,我们引入了在视图类和 Spring bean 中注入依赖和 UI 组件的全新方法。 一旦你在方法体中开始输入字符,则会出现一个代码自动完成的下拉列表,其中显示了可用的 bean、UI 组件、局部变量和类字段。尚未注入到类中的 Bean 和 UI 组件将以斜体字显示。如果选择其中一项,则将自动注入到构造函数或使用特定注解(@Autowired 或 @ViewComponent)的字段中,于是能立即在当前光标位置使用。 有了这个功能,查找和注入可用的 bean 和 UI 组件就变得非常容易了。希望你喜欢这个小改进 😄 支持 Data Repositories Studio 现在能对创建和管理 Spring Data repositories 提供完整的支持。 通过点击 Jmix 窗口工具栏中的 New → Data Repository 创建 repository。Studio 将创建 repository 的接口并将其显示在实体节点下。 使用 repository 代码编辑器操作面板中的 Add Derived Method 和 Add Query Method 按钮可以创建具有派生查询或显式查询的方法: 对于 repository 的已有方法,Studio 会显示一个侧边栏图标,支持调整方法参数,例如添加排序或 fetch plan: 数据模型备注 本文中想强调的另一个功能是支持为实体及其属性添加备注。 实体设计器现在包含实体和每个属性的 Comment 字段。可以设置备注,备注将显示在字段中: 在设计器中输入的文本存储在实体类及其字段的 @Comment 注解中: @Comment(""" Storesinformationaboutbooks. HasreferencetoGenre.""") @JmixEntity @Table(name="BOOK") @Entity publicclassBook{ //... @Comment("Booktitle") @Column(name="TITLE",nullable=false) privateStringtitle; Studio 会生成 setTableRemarks 和 setColumnRemarks Liquibase 变更日志操作,可以将备注保存在数据库结构中(适用于除 HSQL 之外的所有数据库)。这样可以通过任何数据库工具查看备注。还可以从元数据中提取备注或直接从类注解中提取备注,以便在应用程序 UI 中显示或生成文档。 下一步? 在计划于 2024 年 2 月发布的下一个功能版本中,我们将实现新的 Charts 扩展组件,并完成 Maps 扩展组件中的剩余功能。UI 层方面,我们将添加 RichTextArea、水平主菜单以及搜索主菜单的功能。我们还将简化在 UI 视图中使用 Data Repository。 在 Studio 方面,我们将提供 BPMN 业务流程定义的热部署、生成自定义 REST controller,以及提供实体和视图集成测试的样板代码。 我们未来版本的详细路线图在 GitHub 项目 中。针对 2.1 的补丁版本将大约每月发布一次,以保持定期更新。 感谢所有提供想法、建议和错误报告的亲们!

优秀的个人博客,低调大师

iDempiere 企业级 ERP/CRM/SCM 11 Synergy 发布

iDempiere. Community Powered Enterprise iDempiere 11 Synergy 于 2023 年 12 月 25 日发布。 从 2012 年 10 月 31 日发布 1.0a 至今,iDempiere 已经陪伴我们走过了整整 11 个年头,感谢如此多元化的国际社区,感谢那些为 iDempiere 的强大、倾情奉献的人们。 官方仅发布了11的上线通知,目前还没有更详细的说明发布。这里站在个人的角度罗列几个相对重要的更新: 系统基盘的更新 OpenJDK 17 Eclipse 2023-09 ( 目前wiki中还是推荐使用Eclipse 2023-03,笔者也是使用的这一版本成功构建的版本billboard.js 3.10.3Jetty 10.0.18 Hazelcast 3.4 重要功能增强单点登录:SSO Support 分区表的支持(注:之前独自在数据库层级做分区表也是没有问题的,本次是直接通过系统功能来支持分区表):table partitioning support Support of UUID as Key HikariCP连接池初始设置的调整(initial pool size to 10) 其他重要更新 https://wiki.idempiere.org/en/Category:New_Features_w11 软件发布履历 2022 年 12 月 26 日发布了 10 Peace 2021 年 12 月 27 日发布了 9 Horizon 2020 年 12 月 23 日发布了 8.2 Phong2019 年 11 月 22 日发布了 7.1 2019 年 01 月 05 日发布了 6.2 2018 年 11 月 04 日发布了 6.1 2017 年 10 月 31 日发布了 5.1 2016 年 10 月 31 日发布了 4.1 2015 年 10 月 31 日发布了 3.1 2014 年 10 月 31 日发布了 2.1 2013 年 10 月 31 日发布了 2.0 2013 年 06 月 27 日发布了 1.0c 2013 年 04 月 24 日发布了 1.0b 2012 年 10 月 31 日发布了 1.0a

优秀的个人博客,低调大师

PrimiHub 1.6.10 发布,企业级开源隐私计算平台

PrimiHub 是一款由密码学专家团队打造的开源隐私计算平台,支持安全多方计算、联邦学习、隐私求交、隐私查询等。具有如下特性: 开源:完全开源、免费 安装简单:支持 Docker 一键部署 开箱即用:拥有Web 界面、命令行和Python SDK多种使用方式 功能丰富:支持隐匿查询、隐私求交、联合统计、数据资源管理等功能 灵活配置:支持自定义扩展语法、语义、安全协议等 自主研发:基于安全多方计算、联邦学习、同态加密、可信计算等隐私计算技术 1.6.10 更新了什么? 新增特性 联邦学习新增数据预处理模块,支持pipeline调用 任务启动通过process的形式,避免任务间的干扰 PrimiHub平台支持用户自定义python代码的执行(实验特性) 页面端支持联邦线性回归模型 增加部署节点地图展示 增加页面取消任务运行 优化 修复多机部署时模型指标显示问题 对psi输入原始数据做去重处理 PrimiHub 的 gcc 编译器版本支持gcc8及以上 优化模型指标页面端展示 修复Window系统下文件UTF-8 BOM头问题 项目地址 GitHub:https://github.com/primihub/primihub Gitee:https://gitee.com/primihub/primihub 官网:https://primihub.com

优秀的个人博客,低调大师

Jmix 2.0.1 发布 - 企业级 Web 快速开发框架

💥 主要新功能: 更新 XStream 至 1.4.20+,修复 CVE-2022-40151 REST Authentication Server 支持自定义登录页面。 🛠️ 主要 Bug 修复: BPM组件的很多修复和提升。 报表组件的进一步完善。 Excel 导出时,如果页面没有DataLoader会抛异常的问题。 登录页面选择语言列表中排序的问题。 固定 hazelcast 的版本为 5.2.2,避免新版本与 k8s 不兼容的问题。 详细修复的问题列表,请参考 Jmix GitHub: https://github.com/jmix-framework/jmix/issues?page=1&q=is%3Aclosed+milestone%3A2.0.1 🔑 Jmix 是一个覆盖应用程序全生命周期的 Java Web快速开发框架。以 Spring Boot 作为开源基础框架,提供过程中的 Studio 开发工具以及开箱即用的扩展组件。通过 Jmix 实现您的数字化愿景,无低代码平台限制,无供应商依赖,无需按用户付费。 资源:👉🏻Jmix 适合我吗? 👉🏻中文官网

优秀的个人博客,低调大师

Jmix 1.5.3 发布 - 企业级 Web 快速开发框架

Jmix Web 快速开发框架 1.5.3 发布,该补丁版本中主要包含了 Bug 修复,推荐升级: 💥 主要新功能: - 支持 Spring Boot 2.7.13 - Jmix UI 自动化测试支持JUnit5的 @Nested 注解。 - Quartz 组件中的Repeat Count与Quartz官方的行为一致。 🛠️ 主要 Bug 修复: - DataGrid中查看生成列抛异常的问题。 - 构建时不再检查Vaadin更新,提高编译速度。 - 经典UI中主从界面新建实体时,按钮的可见性问题。 - BPM中编辑实体类型流程变量出错的问题。 - FloatDataType不支持负值的问题。 - 报表模块中的一些bug。 - Flow UI中的一些bug(如果使用FlowUI,请直接使用Jmix2.0)。 详细修复的问题列表,请参考 Jmix GitHub: https://github.com/jmix-framework/jmix/issues?page=1&q=is%3Aclosed+milestone%3A1.5.3 🔑 Jmix 是一个覆盖应用程序全生命周期的 Java Web快速开发框架。以 Spring Boot 作为开源基础框架,提供过程中的 Studio 开发工具以及开箱即用的扩展组件。通过 Jmix 实现您的数字化愿景,无低代码平台限制,无供应商依赖,无需按用户付费。 资源:👉🏻Jmix 适合我吗? 👉🏻中文官网:https://www.jmix.cn

优秀的个人博客,低调大师

Jmix 2.0 发布 - 企业级 Web 快速开发框架

▲Jmix2.0 发布 Jmix 2.0是产品迭代中的一个非常重要的里程碑。这个版本引入了许多重要功能,并对Jmix的版图做了重大调整。在这篇文章中,我们主要了解有哪些更新以及这些更新对使用Jmix的应用程序有什么影响。 有关完整的详细信息和升级说明,请参阅文档中的最近更新页面。 技术栈更新 Jmix 2.0中影响最大的变化是技术栈的更新。现在运行时依赖基础框架的最新版本: Jmix core中Spring框架的升级:Spring Boot 3.1、Spring Framework 6.0、Spring Security 6.1 Flow UI子系统中的Vaadin 24.0 数据访问中的JPA实现采用了EclipseLink 4.0 BPM引擎使用了Flowable 7.0 基础框架的新版本提供了非常充足的支持期限,为Jmix框架和应用程序的稳步发展迎来了一个“恒纪元”。但另一方面,现在构建和运行应用程序至少需要JDK 17,如果使用WAR部署,则需要将Tomcat更新到10。 此外,由于经典UI中使用的Vaadin 8与新的Jakarta Servlet API和Spring 6不兼容,因此在Jmix 2.0中移除了经典UI。因此,要从Jmix 1.5经典UI升级到Jmix 2.0,需要替换UI层。有关Jmix版本迁移的更多信息,请参阅我们之前的博客文章:Jmix 延长免费支持Classic UI 新的Studio 2.0支持使用Flow UI的Jmix 1.5项目进行自动迁移。 支持 Flow UI 的扩展组件 我们已经为BPM、工作日历、Email和报表扩展组件实现了Flow UI版本,现在可以在Jmix 2.0中使用。 BPM扩展组件现在具有运行时全功能的BPMN建模器以及管理UI: ▲BPM 运行时建模器 工作日历扩展组件的新UI: ▲工作日历新UI Email 历史记录UI: ▲电子邮件历史记录UI 报表设计器在低分辨率的屏幕中更简洁易用: ▲低分辨率报表设计器 为了在大多数情况下提供简洁的UI,报表设计器中一个带区默认只有单一数据集。但是,如果勾选 多数据集 复选框,设计器将切换到更复杂的视图: ▲多数据集报表设计器 通用过滤器组件 genericFilter 组件的功能已经完善,支持在设计时和运行时创建配置和自定义条件。运行时的配置和自定义条件可以交由最终用户管理: ▲通用过滤器 代码编辑器组件 基于Ace编辑器的新 codeEditor 组件支持用户查看和编辑带有语法高亮显示的代码。代码编辑器还有一些高级功能,如不同的颜色主题: ▲代码编辑器 与许多其他Jmix UI组件一样,可以很容易地与数据模型进行绑定,以编辑存储在实体属性中的代码。 防止浏览器标签页关闭 Web应用中有一个常见的问题,当用户意外关闭浏览器标签页时,已经输入的数据会丢失。现在,当展示实体详细信息视图时,如果用户尝试关闭浏览器标签页,浏览器会显示有关离开页面的标准确认弹窗: ▲阻止弹窗关闭 可以使用 setPreventBrowserTabClosing() 方法在任何视图中启用或禁用此行为。 快速云部署 很多时候,开发者需要为用户、管理层或同事演示开发中的应用程序。如果可以直接在本机展示,或者有CI/CD工具将代码部署到演示或测试环境,那么这不是问题。但是,如果需要为异地相关人员展示开发中的应用,那么最好的选择是将其部署到云端。 Studio现在支持通过几个简单的步骤来完成云部署,这些步骤不需要任何有关部署或云的特定认知: 在AWS上注册一个帐户 在本机安装Docker 完成Studio中快速云部署向导的几个步骤。 在几分钟内,应用程序将在AWS EC2服务器上启动并运行,全球用户都可以访问。 背后的原理是,Studio首先为应用程序生成 docker-compose.yaml,通过AWS API创建EC2实例,在上面安装Docker,然后在服务器上构建应用程序镜像,并使用app和PostgreSQL数据库的容器运行 docker-compose。数据库和文件存储的数据会映射至服务器的文件系统,确保在修改代码重新部署时能保留所有数据。 该功能在Studio中隐藏了很长时间,因为我们认为还有一些需要完善的地方,在2.0中,终于和用户见面了。 Studio UI/UX改进 Jmix工具窗口现在显示一个包含项目中定义的所有Spring bean的节点: ▲Jmix工具窗口Bean节点 还可以使用下面这个选项对bean和其他元素按包名分组: ▲按包名分组 Beans部分仅显示带有 @Component 或 @Service 注解的bean,不显示在Java配置中使用 @Bean 注解创建的bean。 Inject对话框现在显示项目classpath中定义的所有bean,包括Java配置中使用 @Bean 注解创建的bean。Other Beans部分有智能分组: ▲注入智能分组 在Jmix论坛上有一个帖子,用户抱怨Studio生成的代码会收到IDEA的警告,类似“某些东西可以有 final 修饰符”。我们认为这是一个合理的要求,Studio应该遵循IDEA环境的代码检查。因此,所有生成的代码现在都包含推荐的 final 修饰符。如果你不需要,可以修改Jmix插件的设置禁用此选项。 对Studio生成代码的另一个改进是,使用 OffsetDateTime 类型生成实体审计相关的时间字段,包括创建、修改以及软删除的时间。这样一来,数据库将保存带有时区的时间戳。 Studio中使用BPM 如果你的项目中包含 BPM 扩展组件,则Jmix工具窗口现在能展示BPM节点。该节点包含BPMN流程(Processes)、流程草稿(Process Drafts)以及DMN表格: ▲Studio中的BPM设计器 流程可以在流程和流程草稿文件夹之间互相拷贝,通过建模器窗口顶部的按钮操作即可。这样可以组织一个简单的工作流程:在草稿文件夹中定义流程,流程定义完成后可以复制到流程文件夹。位于流程文件夹中的所有流程定义都将在下次应用程序启动时自动部署。如果部署出现问题,还可以将流程复制回草稿文件夹,然后从流程文件夹删除,以便应用程序能顺利启动。 通用REST中的身份验证 在1.4版本中,我们引入了Jmix授权服务作为预览功能。在2.0中,该功能升级成为通用REST中的主要身份验证方式。这一变化有两方面的原因:一方面,旧的Jmix OAuth2模块无法在Jmix 2.0中使用,因为依赖过时的Spring Security OAuth与Spring Boot 3不兼容;另一方面,我们需要遵循最佳实践,弃用过时的OAuth密码授权流程。 如果在Jmix 2.0中使用通用REST扩展组件,则必须选择授权类型,这决定了REST客户端将如何获得访问token。Jmix授权服务支持两种类型:客户端凭证和授权码。与之前的密码授权相比,这两种方式的优势在于,客户端应用程序不可以收集或保存用户密码,这在很多合规性要求中是必要条件。 与旧的密码授权最相似且最容易实现的是客户端凭证授权。这种方式应当用于服务器与服务器之间的通信,例如与第三方系统集成。此时,Jmix授权服务需要配置客户端的角色,例如 rest-minimal、order-management 等。要获取访问token,客户端只需在basic authentication header中传递其 client-id 和 client-secret。使用此token的后续API调用将以用户名为 client-id 的特殊用户进行,其角色为该客户端所配置的角色列表。换句话说,客户端使用提前配置好的静态权限集,而非真正的用户。 通过授权码进行授权稍微复杂一些,但支持客户端代表真正的用户进行操作。对于这种授权类型,当客户端请求身份验证时,Jmix授权服务会显示一个登录页面,供用户输入用户名和密码。认证成功后向客户端返回一个中间授权码。客户端使用中间授权码获取访问token,之后可以使用token进行API调用。此时,客户端作为输入用户名的用户运行,但是不知道用户的密码。 结论 随着新技术栈和生产就绪的Flow UI的引入,Jmix平台完成了现代化改造,后续将稳步发展。我们的团队将继续努力实现新的功能,并不断提高产品的整体质量。 在定于2023年10月发布的下一个功能版本中,我们计划了几个重要的更新。包括为更多的扩展组件实现Flow UI,在Flow UI中添加SuggestionField和SettingsFacet,以及提升对data repository的支持。我们未来版本的详细路线图发布在GitHub。 欢迎在我们的论坛上提供反馈,并感谢所有贡献想法、建议和提出bug的你们!

优秀的个人博客,低调大师

PrimiHub 1.6.8 发布,企业级开源隐私计算平台

PrimiHub 是一款由密码学专家团队打造的开源隐私计算平台,支持安全多方计算、联邦学习、隐私求交、隐私查询等。具有如下特性: 开源:完全开源、免费 安装简单:支持 Docker 一键部署 开箱即用:拥有Web界面、命令行和Python SDK多种使用方式 功能丰富:支持隐匿查询、隐私求交、联合统计、数据资源管理等功能 灵活配置:支持自定义扩展语法、语义、安全协议等 自主研发:基于安全多方计算、联邦学习、同态加密、可信计算等隐私计算技术 本次更新了什么? 新增特性: 联邦学习支持mysql数据库 纵向LR支持多分类 PIR支持数据库查询 优化: 修复页面发起联邦任务,未选择可信第三方运行报错,再次选择不运行问题 更新页面纵向LR及横向LR自定义参数配置 页面发起推理服务任务,增加任务类型,横向任务一方推理 修复PIR结果中文显示乱码 项目地址 GitHub:https://github.com/primihub/primihub Gitee:https://gitee.com/primihub/primihub 官网:https://primihub.com

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册