项目

编辑模板

ABP Suite 使用模板来生成代码文件。您可以点击“编辑模板”菜单项查看模板文件。

Suite模板列表

包含两个模板过滤器:

  1. UI框架:可在 AngularMVCBlazor 模板之间切换。
  2. 数据库提供程序:可在 EF CoreMongoDb 模板之间切换。

这些过滤器会根据您的ABP解决方案自动选择。所选解决方案显示在页面右上角,当前截图中为“Acme.BookStore”。

ABP Suite模板是嵌入资源,存储在 Volo.Abp.Commercial.SuiteTemplates 包中。当您更新项目时,Suite模板也会同步更新。为了确保为项目生成正确的代码,Volo.Abp.Commercial.SuiteTemplates 的版本必须与您的Suite版本保持一致。

如何找到需要编辑的模板?

模板页面设有搜索框。要找到相关模板,可以从生成的代码文件中选取一段独特文本进行搜索,系统将按模板内容进行筛选过滤。

模板文件遵循特定的命名约定:

  • 若模板名称以 Server 开头,则用于生成后端代码,如仓储、应用服务、本地化文件、控制器、权限、映射配置、单元测试等。
  • 若模板名称以 Frontend.Angular 开头,则用于Angular代码生成。Angular代码通过 Angular Schematics 生成。
  • 若模板名称以 Frontend.Mvc 开头,则用于生成Razor页面、菜单、JavaScript和CSS文件。
  • 若模板名称以 Frontend.Blazor 开头,则用于生成Razor组件。

如何编辑模板?

点击模板卡片上的 编辑 按钮后,您将看到模板内容及其变量。这些变量以 %%my-variable%% 格式编写。

编辑模板后,相应模板卡片上会显示“已自定义”标记。点击“还原自定义”即可恢复为原始内容。

已自定义模板

变量:

编辑模板内容时,您可能需要参考变量列表。这些变量根据以下项目信息生成:

  • 解决方案名称:Acme.BookStore
  • 实体类型:主实体
  • 实体名称:OrderLine
  • 复数名称:OrderLines
  • 数据库表:OrderLines
  • 命名空间:OrderLines
  • 基类:FullAuditedAggregateRoot
  • 主键类型:Guid
  • 页面标题:MyOrderLines
  • 菜单图标:fa fa-shopping
变量名
%%solution-namespace%% Acme.BookStore
%%solution-namespace-camelcase%% acme.bookStore
%%project-name%% Acme.BookStore
%%only-project-name%% BookStore
%%only-project-name-camelcase%% bookStore
%%entity-namespace%% OrderLines
%%entity-namespace-camelcase%% orderLines
%%entity-name%% OrderLine
%%entity-name-computed%% OrderLine (或 OrderLineWithNavigationProperties - 如果包含导航属性)
%%entity-name-camelcase%% orderLine
%%entity-name-plural%% OrderLines
%%entity-name-plural-kebabcase%% order-lines
%%entity-name-plural-camelcase%% orderLines
%%entity-page-title%% MyOrderLines (页面标题由ABP Suite本地化)
%%menu-icon%% fa-shopping
%%primary-key%% Guid
%%database-table-name%% OrderLines
%%base-class%% FullAuditedAggregateRoot
%%other-interfaces%% , IMultiTenant (如果是多租户)
%%default-sorting%% {0}Price asc
%%with-navigation-properties%% WithNavigationProperties (如果包含导航属性)
%%entity-name-prefix%% OrderLine. (如果包含导航属性)
%%entity-name-prefix-camelcase%% orderLine. (如果包含导航属性)
%%entity-name-prefix-nullable%% orderLine?. (如果包含导航属性)
%%module-name-slash-postfix%% BookStore/ (用于模块模板)
%%custom-code-base%% Base (如果启用了自定义代码支持)
%%custom-code-abstract-modifier%% abstract (如果启用了自定义代码支持)
%%custom-code-partial-modifier%% partial (如果启用了自定义代码支持)

主/从实体关系的变量:

如果您建立了主/从实体关系,模板中会使用一些变量来生成代码。例如,以 Order 作为主实体,OrderLine 作为其子实体时,以下变量将填充为对应值:

变量名
%%child-master-entity-name%% Order
%%child-entities-namespaces%% (Order主实体所有子实体的命名空间 - 逐行排列)
%%child-entities-namespaces-razor%% (Order主实体所有子实体的命名空间 - 逐行排列 - 用于Blazor UI)
%%child-entities-appservice-injections%% (将子实体应用服务注入到Razor页面 - 例如 @inject IOrderLineAppService OrderLineAppService)
%%mapper-ignore-child-entities%% (为主实体的子实体添加映射忽略语句 - 例如 .Ignore(x => x.OrderLines))

条件语句:

条件语句用于在满足条件时渲染相关代码块。如果条件为真,则条件块内部的文本会被渲染。您也可以在条件块中使用变量。

变量名 描述
%%<if:IMultiTenantEntity>%% %%</if:IMultiTenantEntity>%% 如果实体是多租户实体。
%%<if:ApplicationContractsNotExists>%% %%</if:ApplicationContractsNotExists>%% 如果 *.Application.Contracts 项目不存在
%%<if:IsNonTieredArchitecture>%% %%</if:IsNonTieredArchitecture>%% 如果是非分层架构的应用模板。即 *.HttpApi.Host 项目不存在
%%<if:IsTieredArchitecture>%% %%</if:IsTieredArchitecture>%% 如果是分层架构的应用模板。即 *.HttpApi.Host 项目存在
%%<if:IsModule>%% %%</if:IsModule>%% 如果是模块模板。
%%<if:IHasConcurrencyStamp>%% %%</if:IHasConcurrencyStamp>%% 如果实现了 IHasConcurrencyStamp 接口或启用了并发检查
%%<if:PreserveCustomCodeNotEnabled>%% %%</if:PreserveCustomCodeNotEnabled>%% 如果未启用自定义代码支持。
%%<if:IsChildEntity>%% %%</if:IsChildEntity>%% 如果是子实体。
%%<if:IsMasterWithChildEntities>%% %%</if:IsMasterWithChildEntities>%% 如果是包含子实体的主实体。
%%<if:HasNavigationProperties>%% %%</if:HasNavigationProperties>%% 如果实体包含导航属性。
%%<if:HasMasterEntityNavigationProperties>%% %%</if:HasMasterEntityNavigationProperties>%% 如果是主实体且包含导航属性。
%%<if:HasFilterableProperties>%% %%</if:HasFilterableProperties>%% 如果实体包含任何可筛选属性。
%%<if:HasAnyFilterableProperties>%% %%</if:HasAnyFilterableProperties>%% 如果实体包含任何可筛选属性(包括导航属性)。
%%<if:BulkDeleteEnabled>%% %%</if:BulkDeleteEnabled>%% 如果启用了批量删除。
在本文档中