为用户界面可扩展性创建项目
要创建自定义UI扩展,您必须为其创建一个App Builder项目。
本页介绍如何使用aio命令行生成通用App Builder项目。 “通用”表示项目 不 是从产品特定的模板开始的。 使用通用应用程序启动可以使项目变得简单,并且允许项目与Workfront Fusion连接。
熟悉以下有关创建项目以用于Adobe Fusion AI扩展性的概念和术语可能会很有用。
-
Adobe Developer Console (https://developer.adobe.com/console)是您的项目所在的Web仪表板。
-
术语:
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 术语 它的含义 组织 您公司的Adobe组织。 与在Fusion中使用的组织相同。 项目 一个应用程序/扩展的容器。 您将为扩展创建一个项目。 工作区 工作阶段的项目配置副本。 每个项目都有一个 生产 工作区,并且您通常还使用 暂存 工作区进行测试。 想想像“环境”这样的工作区。 凭据/服务 允许您的应用程序使用的权限。 为您创建的默认值足以启动。 -
创建项目的方法有两种:
- 自动(推荐):命令
aio app init在生成代码时为您创建项目和工作区。 本文介绍了此过程。 - 手动:您首先在Developer Console中自己创建项目,然后指向
aio。 我们建议仅在您的组织要求集中创建项目时才执行此操作。
- 自动(推荐):命令
-
在决定使用哪个工作区时,请先开发并部署到阶段。 仅当用户在其Fusion配置文件(用户头像菜单>产品设置> Fusion配置文件>首选项>暂存扩展)中打开暂存测试时,Fusion才会加载暂存内部版本;否则,只显示已发布的生产扩展。 您还可以使用
aio app run在本地预览,然后稍后升级到生产。有关提升至生产环境的详细信息,请参阅发布您的扩展。
运行aio app init
-
打开终端。
-
在终端中,移至保留项目的文件夹。
-
运行:
code language-sh aio app init my-fusion-extension --standalone-appmy-fusion-extension是文件夹/应用程序名称。 您可以选择此名称,但应使用小写字母、连字符且不能使用空格。--standalone-app告知CLI创建普通应用程序框架,而不是要求您选择产品模板。 这是避免AEM(或任何其他)模板的关键。
-
出现提示时,选择您的组织(如果您属于多个组织)。
-
出现提示时,选择 创建新项目 并接受建议的名称,或选择现有的空项目。
该命令会自动设置 暂存 和 生产 工作区。
该命令还会将文件生成到
my-fusion-extension文件夹并运行npm install。 -
继续确认项目创建。
aio app init my-fusion-extension > (不带--standalone-app)。 当它询问**“您要搜索什么模板?”** 或显示模板核对清单,请勿选择AEM等产品模板。 选择选项以创建独立应用程序 / “所有扩展点→无”。检查项目创建
-
在终端中,移到已创建的文件夹:
code language-sh cd my-fusion-extension您应该看到类似于下面的结构(省略了一些文件):
code language-none my-fusion-extension/ |--- app.config.yaml // main configuration (you will edit this) |--- package.json //dependencies and scripts |--- src/ // your source code |--- web-src/ or src/.../web-src/ // front-end files (HTML/JS)您最关心的两个文件是:
app.config.yaml:中央配置。 在此过程的后续步骤中,您将在此处添加一个extensions:部分,以将您的应用程序连接到Fusion扩展点。package.json:列出您的应用程序使用的库。 您将在此处添加Adobe UI可扩展性来宾库。
-
继续添加所需的库。
添加所需的库
您的扩展需要两个库:
@adobe/uix-guest:允许您的应用程序与Fusion(主机)通信。@adobe/react-spectrum: Adobe的React UI组件,因此您的屏幕与Adobe的外观相匹配。 (可选,但推荐;您可以改用纯HTML。)
要安装这些库,请执行以下操作:
-
在终端中,运行:
code language-sh npm install @adobe/uix-guest @adobe/react-spectrum -
(视情况而定)如果您生成的项目尚未包含React,请同时安装以下组件:
code language-sh npm install react react-dom react-router-dom -
继续确认项目生成。
确认项目生成
在更改任何内容之前,请确保生成空项目
为Fusion配置项目
设置自定义扩展的下一步是将通用项目连接到Workfront Fusion。
您将会:
- 为扩展创建文件夹
- 告知App Builder有关Fusion 扩展点 (在
app.config.yaml中)的信息。 - 描述扩展的片段(在
ext.config.yaml中)。 - 注册您的小组件,以便Fusion知道其标题及其UI所在的位置。
我们全程使用fusion/nav-organization/1。 若要改为定位团队分区,请在所有位置交换fusion/nav-team/1。 要同时支持这两者,请为每个重复该模式。
为扩展创建文件夹
-
创建文件,使项目如下所示:
code language-none my-fusion-extension/ |-- app.config.yaml |-- src/ |-- fusion-nav-organization-1/ // one folder per extension point |-- ext.config.yaml |-- web-src/ |-- src/ |-- components/ |-- App.js |-- ExtensionRegistration.js |-- DashboardWidget.js |-- Constants.js我们建议在扩展点(
fusion-nav-organization-1)之后命名文件夹。 确切名称由您决定,但必须与您在app.config.yaml中引用的名称匹配。 -
继续在
app.config.yaml中声明扩展点。
在app.config.yaml中声明扩展点
-
打开
app.config.yaml并将其内容更新为:code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yaml这些内容描述如下:
extensions::此应用实现一个或多个扩展点。fusion/nav-organization/1:您插入的Fusion插槽。 名称必须完全匹配,包括版本1。$include::这指向描述此扩展的内容的第二个配置文件(在下一步中创建)。 将其保留在单独的文件中可保持app.config.yaml整洁,并允许您稍后添加更多扩展点。
note NOTE 如果要定位这两个扩展,请列出这两个扩展,每个扩展都有自己的文件夹: code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yaml fusion/nav-team/1: $include: src/fusion-nav-team-1/ext.config.yaml- 继续在
ext.config.yaml中描述扩展
描述ext.config.yaml中的扩展
-
使用以下方式创建
src/fusion-nav-organization-1/ext.config.yaml:code language-yaml operations: view: - type: web impl: index.html web: web-src hooks: pre-app-build: node node_modules/@adobe/uix-guest/scripts/generate-metadata.js pre-app-run: node node_modules/@adobe/uix-guest/scripts/generate-metadata.js这些内容描述如下:
operations.view:声明您的扩展提供了从index.html提供的视图 (可见UI)。 正因如此,扩展才会显示屏幕,而不是仅在后台运行。web: web-src:保存前端文件的文件夹。 App Builder在此构建所有内容,并将其托管在Adobe的内容交付网络(CDN)上。hooks:在生成/运行时自动运行的小型命令。generate-metadata.js脚本随@adobe/uix-guest提供,并生成您的注册代码所需的app-metadata.json文件(请参阅步骤4)。 你不写这个脚本,你只是引用它。
note NOTE 如果您还需要服务器端逻辑,还可以添加无服务器 actions(小型后端函数)。 操作是可选的,并且无需进行渲染UI,因此我们将其排除在外,以便本指南保持重点。 如果稍后添加它们,请在此处声明一个actions:文件夹,并在app.config.yaml中声明一个runtimeManifest:。 添加一个函数的最常见原因是调用Workfront/Fusion API而不点击浏览器CORS。
有关调用API的信息,请参阅调用Workfront和Fusion API。 -
继续设置稳定的扩展ID。
设置稳定的扩展ID
您的扩展需要两个框架共享的唯一ID。
有关与自定义扩展相关的框架的信息,请参阅UI扩展中包含的框架。
-
创建
src/fusion-nav-organization-1/web-src/src/components/Constants.js:code language-js module.exports = { extensionId: 'my-fusion-extension' };在您的代码引用扩展ID的任何位置使用相同的值。
-
继续注册您的小组件。
注册您的构件
“注册”是隐藏的背景框架告诉Fusion您的扩展所提供内容的方式。 您声明了一个dashboard.getWidget()方法,该方法返回您的小部件的标题及其可见UI的URL。
-
创建
src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.js。
重要部分是register(...)调用:code language-js import { register } from "@adobe/uix-guest"; import metadata from "../../../../app-metadata.json"; import { extensionId } from "./Constants"; async function init() { await register({ id: extensionId, metadata, methods: { dashboard: { getWidget() { return { id: extensionId, title: "My Fusion tool", // shown on the Fusion nav button description: "What this tool does", url: "/index.html#/my-widget", // route to your visible UI hideWidgetHeader: false // false = Fusion shows the title }; } } } }); } init().catch(console.error);要点:
title是Fusion放置在导航按钮上的标签。 如果hideWidgetHeader是false,Fusion还会将标题显示为您UI上方的标题。url是您在此同一应用程序中的visible UI的路由。 此处是您的前端路由器(在下一页设置)处理的哈希路由(#/my-widget)。 它必须解析为呈现屏幕的组件。metadata来自app-metadata.json,generate-metadata挂接在生成时为您创建。 导入它,如下所示。dashboard.getWidget方法名称是同意的合同Fusion调用,用于发现您的小组件。 保留dashboard命名空间和getWidget名称。
扩展的后端现已完成。 构建扩展UI的下一个步骤。
有关构建UI的说明,请参阅构建自定义扩展UI。