建立UI擴充性的專案

NOTE
本文假設您已熟悉軟體開發工具。

若要建立自訂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才會載入Stage組建;否則,只會顯示已發佈的生產擴充功能。 您也可以使用aio app run在本機預覽,稍後再升級至​生產

    如需提升至生產環境的詳細資訊,請參閱發佈您的擴充功能

執行aio app init

  1. 開啟終端機。

  2. 在終端機中,移至您保留專案的資料夾。

  3. 執行:

    code language-sh
    aio app init my-fusion-extension --standalone-app
    
    • my-fusion-extension是資料夾/應用程式名稱。 您可以選取此名稱,但請使用小寫字母、連字型大小且不含空格。
    • --standalone-app通知CLI建立​純應用程式架構,而不是要求您挑選產品範本。 這是避免AEM (或任何其他)範本的關鍵。
  4. 出現提示時,選取您的組織 (如果您屬於多個組織)。

  5. 出現提示時,請選取​ 建立新專案 ​並接受建議的名稱,或選取現有的空白專案。

    命令會自動設定​ 階段 ​和​ 生產 ​工作區。

    命令也會產生檔案至my-fusion-extension資料夾並執行npm install

  6. 繼續確認專案建立

NOTE
如果您偏好互動式功能表:​請執行aio app init my-fusion-extension > (不含--standalone-app)。 當它詢問​**「您想要搜尋哪些範本?」** 或顯示範本檢查清單,請勿選取AEM等產品範本。 選擇選項以建立​獨立應用程式 / 「所有延伸點→無」

檢查專案建立

  1. 在終端機中,移至已建立的資料夾:

    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擴充性來賓程式庫。
  2. 繼續新增必要的資料庫

TIP
如果您產生的配置在CLI版本之間稍有不同,請不要擔心。 此程式會告訴您確切要建立哪些檔案以及要放進哪些檔案,因此無論起始點為何,您都可以符合預期的結構。

新增必要程式庫

您的擴充功能需要兩個程式庫:

  • @adobe/uix-guest:讓您的應用程式與Fusion (主機)交談。
  • @adobe/react-spectrum: Adobe的React UI元件,因此您的畫面會符合Adobe的外觀和風格。 (選填,但建議使用;您可以改用純HTML。)

若要安裝這些程式庫:

  1. 在終端機中,執行:

    code language-sh
    npm install @adobe/uix-guest @adobe/react-spectrum
    
  2. (視條件而定)如果您產生的專案尚未包含React,請一併安裝:

    code language-sh
    npm install react react-dom react-router-dom
    
  3. 繼續確認專案組建

確認專案建置

在變更任何專案之前,請確定空白的專案已建置

  1. 在終端機中,執行:

    code language-sh
    aio app build
    

    如果順利完成,且沒有錯誤,表示您的工具和專案已正確設定。 您已準備好將專案連線到Fusion。

    note tip
    TIP
    如果建置失敗,​最常見的原因是不受支援的Node.js版本。 執行node --version並確定它是18或20。
    • 如需有關安裝Node.js的資訊,請參閱設定工具
    • 如需其他可能錯誤的資訊,請參閱疑難排解
  2. 繼續設定Fusion的專案。

設定專案以進行Fusion

設定自訂擴充功能的下一個步驟是將您的通用專案連線到Workfront Fusion。

您將會:

  1. 為您的擴充功能建立資料夾
  2. 告訴App Builder有關Fusion 擴充點 (在app.config.yaml中)的資訊。
  3. 說明您的擴充功能片段(以ext.config.yaml表示)。
  4. 註冊​您的Widget,讓Fusion知道其標題和UI所在的位置。

我們全程使用fusion/nav-organization/1。 若要改用團隊區段為目標,請將fusion/nav-team/1交換到所有位置。 若要同時支援兩者,請為每個重複此模式。

為您的擴充功能建立資料夾

  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中參照的名稱。

  2. 繼續在app.config.yaml🔗中宣告擴充點。

app.config.yaml中宣告擴充點

  1. 開啟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
    
    1. 繼續ext.config.yaml中描述擴充功能

ext.config.yaml中描述擴充功能

  1. 建立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
  2. 繼續設定穩定的擴充功能識別碼

設定穩定的擴充功能ID

您的擴充功能需要兩個框架共用的唯一ID。

如需與自訂擴充功能相關的框架資訊,請參閱包含在UI擴充功能中的框架

  1. 建立src/fusion-nav-organization-1/web-src/src/components/Constants.js

    code language-js
    module.exports = {
      extensionId: 'my-fusion-extension'
    };
    

    在您的程式碼參考擴充功能ID的所有位置使用相同的值。

  2. 繼續註冊您的Widget

註冊Widget

「註冊」是隱藏的背景框架告訴Fusion您的擴充功能所提供的內容。 您宣告的dashboard.getWidget()方法會傳回Widget的標題及其可見UI的URL。

  1. 建立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放在導覽按鈕上的標籤。 如果hideWidgetHeaderfalse,Fusion也會將標題顯示為您UI上方的標題。
    • url​是您​可見 UI在此相同應用程式中的路由。 這是由您的前端路由器(設定於下一頁)處理的雜湊路由(#/my-widget)。 它必須解析為轉譯您熒幕的元件。
    • metadata​來自app-metadata.jsongenerate-metadata鉤點會在建置時為您建立。 將其匯入,如下所示。
    • dashboard.getWidget方法名稱是用來探索您的Widget的協定合約Fusion呼叫。 保留dashboard名稱空間和getWidget名稱。

擴充功能的後端現已完成。 建置擴充功能UI的下一個步驟。

如需建立UI的說明,請參閱建立自訂擴充功能UI

recommendation-more-help
workfront-fusion-help-workfront-fusion