[AEM Forms]{class="badge positive" title="適用於AEM Forms)。"}

處理表單資料模型 (FDM) work-with-form-data-model

版本
文章連結
AEM 6.5
按一下這裡
AEM as a Cloud Service
本文章

表單資料模型(FDM)編輯器​提供直覺式使用者介面和整合工具,用於在Adobe Experience Manager (AEM) Forms中建立、編輯和設定​表單資料模型(FDM)。 使用編輯器,您直接從表單資料模型(FDM)內的相關資料來源新增並設定​資料模型物件、屬性​和​服務。

表單資料模型編輯器的功能

資料整合

表單資料模型編輯器支援下列重要工作:

  • 將相關資料來源的資料模型物件、屬性和服務​新增並設定到FDM中。
  • 建立沒有資料來源的資料模型物件和屬性。 您可以先定義這些物件,然後再將它們與各自的資料模型物件和屬性繫結,這會使設計脫離來源組態。
  • 產生並編輯資料模型物件屬性的範例資料。 此範例資料會在預覽期間預先填入最適化Forms,以便作者和測試者在部署之前使用真實值驗證表單行為。
  • 測試FDM中設定的資料模型物件和服務,以確認它們已正確與基礎資料來源整合。

先決條件

如果您是初次使用Forms資料整合,但尚未設定資料來源或建立表單資料模型(FDM),請參閱下列主題:

請閱讀下文,瞭解您可以使用表單資料模型編輯器執行的各種任務和設定的詳細資訊。

NOTE
您必須是​ fdm-author ​和​ forms-user ​群組的成員才能建立和使用表單資料模型(FDM)。 請連絡您的Experience Manager管理員,以成為這些群組的成員。

新增資料模型物件及服務 add-data-model-objects-and-services

如果您使用資料來源建立表單資料模型(FDM),您可以使用表單資料模型編輯器來新增資料模型物件和服務、設定其屬性、建立資料模型物件之間的關聯,以及測試表單資料模型(FDM)和服務。 這可讓您在單一編輯環境中,直接從連線的資料來源組合完整、實用的資料模型。

您可以在表單資料模型(FDM)中,從可用的資料來源新增資料模型物件和服務。 新增的資料模型物件會顯示在「模型」標籤中,而新增的服務會顯示在「服務」標籤中,讓這兩種物件型別保持明確分隔,以方便設定和測試。

若要新增資料模型物件與服務:

  1. 登入Experience Manager作者執行個體,導覽至​Forms >資料整合,然後開啟您要新增資料模型物件的表單資料模型(FDM)。

  2. 在資料來源窗格中,展開資料來源以檢視可用的資料模型物件及服務。

  3. 選取您要新增至表單資料模型(FDM)的資料模型物件與服務,並選取​新增選取的專案。 這會將選取的物件和服務新增至FDM,以便您可以設定其屬性並建立它們之間的關聯。

    選取的物件

    選取的資料模型物件與服務

    模型​標籤以圖形呈現所有資料模型物件及其加入至表單資料模型(FDM)的屬性。 每個資料模型物件在表單資料模型(FDM)中以方塊表示,因此模型結構可以很容易地以視覺化方式掃描。

    模型標籤

    模型​索引標籤顯示新增的資料模型物件

    note
    NOTE
    您可以按住並拖曳資料模型物件方塊,以便在內容區域中加以組織。 在「表單資料模型」(FDM)中新增的所有資料模型物件在「資料來源」窗格中都會呈現灰色,表示這些物件已新增並防止重複專案。

    服務​索引標籤列出新增的服務。

    services-tab

    服務​索引標籤顯示資料模型服務

    note
    NOTE
    除了資料模型物件和服務之外,OData (開放式資料通訊協定)服務中繼資料檔案還包括導覽屬性,這些屬性定義兩個資料模型物件之間的關聯,並允許周遊相關資料。 如需詳細資訊,請參閱使用OData服務的導覽屬性。
  4. 選取​ 儲存 ​以儲存表單模型物件。

    note
    NOTE
    您在表單資料模型(FDM)的「服務」標籤中設定的服務,可直接使用最適化表單規則叫用,讓表單作者在執行階段觸發資料擷取或寫入資料等作業。 規則編輯器的「叫用服務」動作中提供已設定的服務。 如需有關在最適化表單規則中使用這些服務的詳細資訊,請參閱規則編輯器中的「叫用服務並設定規則值」。

建立資料模型物件和子屬性 create-data-model-objects-and-child-properties

資料模型​將資訊組織為結構化、可重複使用的單位,稱為​物件,每個單位都可以包含描述物件個別屬性的​子屬性。 建立定義良好的物件並在其下方巢狀子屬性,是建立任何資料模型的基本步驟,因為它可建立應用程式將儲存、驗證和交換之資訊的清晰、階層式表示法。

什麼是資料模型物件和子屬性?

  • 資料模型物件​是一種命名容器,可將相關欄位分組為單一邏輯實體。 物件代表真實世界或概念性專案(例如客戶、訂單或產品),並做為其他元素所附加的頂層結構。
  • 子屬性​是巢狀在物件內的個別欄位。 每個子屬性會定義父物件的一個屬性,以及其特性,例如名稱、資料型別以及值是否為必要。 在父物件下巢狀屬性會將相關資料群組在一起,以提高清晰度並更容易維護模型。

這種父子關係賦予資料模型其階層。 物件會當做父項,而子項屬性會繼承父項的內容,確保每個屬性都明確關聯到它所描述的實體。

如何建立資料模型物件

請依照下列步驟在資料模型中定義新物件:

  1. 為物件命名。 選擇可識別物件所代表之實體的清楚描述性名稱。 一致的命名可讓模型更易於日後閱讀和參考。
  2. 將物件定義為容器。 將物件建立為頂層元素,以儲存其相關聯的子屬性。
  3. 新增子屬性。 附加說明物件屬性的個別欄位,並依次定義每個欄位。
  4. 指派資料型別給每個屬性。 指定每個子屬性接受的值型別(例如文字、數字或布林值),以便正確驗證資料。
  5. 設定需求規則。 指出哪些子項屬性是必要的以及哪些是選用的,確保模型會強制應用程式所依賴的限制。

新增子屬性

將子屬性新增至物件時,請使用下列詳細資料定義每個屬性:

  • 屬性名稱 — 父物件中屬性的唯一描述性標籤。
  • 資料型別 — 屬性儲存的值的型別,控制如何驗證和處理值。
  • 必要或選擇性狀態 — 屬性是否必須一律有值。
  • 巢狀結構(如果適用) — 子屬性本身可以是具有自己的子屬性的物件,可讓您為複雜的多層級資料建立模型。 此巢狀結構可讓資料模型呈現深度結構化的資訊。

實用應用程式與優點

使用物件和子屬性來建構資料模型可提供幾項實際優勢:

  • 一致性 — 將共用物件下的相關欄位分組,可確保資料能跨應用程式統一儲存及解譯。
  • 可重複使用 — 定義良好的物件可在多個位置參照,減少重複專案。
  • 驗證 — 將資料型別和需求規則指派給子屬性,可讓系統自動擷取無效或不完整的資料。
  • 可擴充性 — 因為物件支援巢狀子屬性,所以模型可以成長以呈現日益複雜的關係,而不會變得雜亂。

最佳做法

  • 對物件及其子項屬性使用清楚的描述性名稱,讓模型保持自我檔案化。
  • 將相關屬性分組到相同的父物件下,而不是將其分散到不相關的結構中。
  • 儘早定義資料型別和需求規則,因為這樣做可以從一開始就建立可靠的驗證。
  • 保持巢狀有意義 — 只有當其他階層有效地反映資料的結構時,才會巢狀化子屬性。

只要仔細定義物件及其子屬性,您就可以建立有組織、可維護,並能精確表示應用程式使用之實體的資料模型。

建立資料模型物件 create-data-model-objects

雖然您可以從已設定的資料來源新增資料模型物件,也可以建立沒有資料來源的資料模型物件(也稱為實體)。 資料模型物件​是表單資料模型(FDM)中的結構化實體,代表屬性的邏輯分組,稍後可繫結至資料來源欄位或單獨使用。 當您尚未在表單資料模型(FDM)中設定資料來源時,此功能特別有用,因為它可讓您在後端整合就緒之前,開始設計資料結構。

建立沒有資料來源的資料模型物件的步驟

若要在不使用資料來源的情況下建立資料模型物件:

  1. 登入Experience Manager作者執行個體,導覽至​Forms >資料整合,並開啟您要建立資料模型物件或實體的表單資料模型(FDM)。

  2. 選取​建立實體。

  3. 在建立資料模型對話方塊中,指定資料模型物件的名稱,並選取​新增。 資料模型物件會新增至表單資料模型(FDM)。 新加入的資料模型物件未繫結至資料來源,且沒有任何屬性,如下圖所示。 因為物件未繫結,所以在您定義其屬性或將其連線到資料來源之前,此物件純粹以結構預留位置的形式存在。

    new-entity

後續步驟 next-steps-data-model-object

建立未繫結的資料模型物件後,新增子屬性以定義其結構。 這些子屬性可讓您指定物件保留的欄位和屬性,而且一旦您的資料整合完成設定,這些欄位和屬性可在稍後繫結至資料來源。 這可確保資料模型物件可完全正常運作,並準備好用於表單中。

新增子屬性 child-properties

表單資料模型(FDM)編輯器可讓您在資料模型物件中建立子屬性。 依預設,新建立的子屬性不會繫結至資料來源中的任何屬性。 您稍後可以將子屬性繫結到包含資料模型物件中的另一個屬性。

若要建立子屬性:

  1. 在表單資料模型中,選取資料模型物件並選取​建立子屬性。

  2. 在​ 建立子屬性 ​對話方塊中,分別在​ Name ​和​ Type ​欄位中指定屬性的名稱和資料型別。 您可以選擇指定屬性的標題和說明。

  3. 如果屬性是​計算屬性,請啟用​計算,該屬性的值是根據​ 規則或運算式 ​評估的,而不是直接輸入。 如需詳細資訊,請參閱編輯屬性。

  4. 如果資料模型物件繫結至資料來源,則新增的子屬性會自動繫結至具有相同名稱和資料型別的父資料模型物件的屬性。 此自動繫結在名稱和資料型別上均相符,確保子屬性與其父屬性一致,無需額外的手動步驟。

    若要手動繫結子屬性與資料模型物件屬性,請選取​ 繫結參考 ​欄位旁的瀏覽圖示。 選取物件​對話方塊會列出父資料模型物件的所有屬性。 選取要繫結的屬性,然後選取勾號圖示。 您只能選取與子屬性資料型別相同的屬性,因為有效的繫結需要資料型別相符。

  5. 選取​ 完成 ​以儲存子屬性,並選取​ 儲存 ​以儲存表單資料模型(FDM)。 子屬性現在已新增至資料模型物件。

建立資料模型物件和屬性後,您可以繼續根據表單資料模型(FDM)建立最適化Forms。 稍後,當您有可用的資料來源且已設定資料來源時,可以將表單資料模型(FDM)與資料來源繫結。 因此,繫結會在所有相關聯的最適化Forms中自動更新,因此變更不會手動重新配置,並四處傳播。 如需使用表單資料模型(FDM)建立最適化Forms的詳細資訊,請參閱使用表單資料模型。

繫結資料模型物件和屬性 bind-data-model-objects-and-properties

當您要與表單資料模型(FDM)整合的資料來源可用時,您可以將其新增至表單資料模型(FDM),如更新資料來源中所述。 未繫結的資料模型物件或屬性​存在於表單資料模型(FDM)中,但尚未對應到已連線資料來源中的欄位,所以在建立繫結之前,它無法讀取或寫入資料。 然後,執行下列操作以繫結未繫結的資料模型物件和屬性:

  1. 在表單資料模型中,選取要與資料來源繫結的未繫結資料來源。

  2. 選取​編輯屬性。

  3. 在​ 編輯屬性 ​窗格中,選取​ 繫結 ​欄位旁的瀏覽圖示。 瀏覽圖示會開啟​ 選取物件 ​對話方塊,其中會列出新增至表單資料模型(FDM)的資料來源。

    select-object

  4. 展開資料來源樹狀結構並選取要繫結的資料模型物件,然後選取勾選圖示。

  5. 選取​ 完成 ​以儲存屬性,然後選取​ 儲存 ​以儲存表單資料模型。 資料模型物件現在與資料來源繫結。 這可確保物件在執行階段可讀取和寫入連線的資料來源。 儲存後,資料模型物件不再標籤為「未繫結」,確認繫結已完成。

    繫結模型物件

設定服務 configure-services

設定讀取和寫入服務可讓資料模型物件讀取和寫入表單資料模型(FDM)中的資料。 若要設定資料模型物件的讀取和寫入服務,請完成下列步驟:

  1. 選取資料模型物件頂端的核取方塊以選取它,並選取​編輯屬性。

    edit-properties

    編輯屬性以設定資料模型物件的讀取和寫入服務

    編輯屬性對話方塊開啟。

    edit-properties-2

    編輯內容對話方塊

    note
    NOTE
    除了資料模型物件和服務之外,OData (開放式資料通訊協定)服務中繼資料檔案也包含定義兩個資料模型物件之間關聯性的​導覽屬性。 當您將OData服務資料來源新增至表單資料模型(FDM)時,表單資料模型(FDM)中有一項服務可用於資料模型物件中的所有導覽屬性。 您可以使用此服務來讀取對應資料模型物件的導覽屬性。
    如需使用服務的詳細資訊,請參閱使用OData服務的導覽屬性。
  2. 切換​ 最上層物件 ​以指定資料模型物件是否為最上層模型物件。

    在表單資料模型(FDM)中設定的資料模型物件可用於根據表單資料模型(FDM)的最適化表單內容瀏覽器中的資料模型物件索引標籤。 當您在兩個資料模型物件之間新增關聯時,您與之關聯的資料模型物件會巢狀內嵌在您從​ 資料模型物件 ​索引標籤中關聯的資料模型物件下。 如果巢狀資料模型是頂層物件,它也會單獨出現在​ 資料模型物件 ​索引標籤中。 因此,物件會出現兩次,一個專案出現在巢狀階層內,另一個專案出現在巢狀階層外,這會混淆表單作者。 若要讓關聯的資料模型物件只出現在巢狀階層中,請停用​ 頂層物件 ​屬性。 這可確保表單作者看到單一、明確的專案,減少表單製作期間的混淆。

  3. 為選取的資料模型物件選取​ 讀取 ​和​ 寫入 ​服務。 接著會針對設定顯示所選服務的引數。

    讀寫服務

    為員工資料來源設定的讀寫服務

  4. 選取 aem63edit 將讀取服務引數繫結至將引數繫結至使用者設定檔屬性、要求屬性或常值值,並指定繫結值。

  5. 選取​ 完成 ​以儲存引數,完成​以儲存屬性,然後選取​ 儲存 ​以儲存表單資料模型(FDM)。

繫結讀取服務引數 bindargument

根據繫結值,將Read服務引數繫結到下列三個繫結型別之一: 使用者設定檔屬性、要求屬性​或​常值值。 讀取服務會使用此值作為引數,從資料來源擷取與指定值相關聯的詳細資料。 每個繫結型別都會決定引數值的來源:固定輸入、登入使用者的設定檔,或傳入要求。

常值數值 literal-value

從​ 繫結至 ​下拉式功能表中選取​常值,並在​ 繫結值 ​欄位中輸入值。 會從資料來源擷取與該值相關聯的詳細資料。 使用此選項來擷取與靜態值相關的詳細資料,因為Literal繫結提供不依賴使用者或請求的固定、未變更輸入。

在此範例中,與​4367655678 (作為​ mobilenum ​引數的值)相關聯的詳細資料是從資料來源擷取。 當您傳遞行動號碼引數的值時,所傳回的相關詳細資料可包含客戶名稱、客戶地址和城市等屬性。

常值值

使用者檔案屬性 user-profile-attribute

從​ 繫結至 ​下拉式功能表中選取​使用者設定檔屬性,並在​ 繫結值 ​欄位中輸入屬性名稱。 根據屬性名稱,從資料來源擷取登入Experience Manager執行個體之使用者的詳細資訊。

在​ 繫結值 ​欄位中指定的屬性名稱必須包含完整的繫結路徑,直到使用者的屬性名稱為止。 開啟以下URL以存取CRXDE上的使用者詳細資訊:

https://[server-name]:[port]/crx/de/index.jsp#/home/users/

使用者設定檔

在此範例中,請在grios使用者的​ 繫結值 ​欄位中指定​profile.empid。

編輯引數

id引數從使用者設定檔中取得​ empid ​屬性的值,並將其作為引數傳入Read服務。 讀取服務接著會從與登入使用者相關聯之empid的員工資料模型物件讀取並傳回關聯屬性的值。

要求屬性 request-attribute

使用要求屬性繫結,根據傳入要求中提供的值,從資料來源擷取關聯的屬性。

  1. 從​ 繫結至 ​下拉式功能表中選取​要求屬性,並在​ 繫結值 ​欄位中輸入屬性名稱。

  2. 為head.jsp建立覆蓋。 若要建立覆蓋,請開啟CRX DE並將https://<server-name>:<port number>/crx/de/index.jsp#/libs/fd/af/components/page2/afStaticTemplatePage/head.jsp檔案複製到https://<server-name>:<port number>/crx/de/index.jsp#/apps/fd/af/components/page2/afStaticTemplatePage/head.jsp

    note
    NOTE
    • 如果您使用靜態範本,請將head.jsp覆蓋在:
      /libs/fd/af/components/page2/afStaticTemplatePage/head.jsp
    • 如果您使用可編輯的範本,請覆蓋aftemplatedpage.jsp,網址為:
      /libs/fd/af/components/page2/aftemplatedpage/aftemplatedpage.jsp
  3. 設定要求屬性的paramMap。 例如,將下列程式碼加入apps資料夾的.jsp檔案中:

    code language-javascript
    <%Map paraMap = new HashMap();
     paraMap.put("<request_attribute>",request.getParameter("<request_attribute>"));
     request.setAttribute("paramMap",paraMap);
    

    例如,使用以下程式碼從資料來源擷取petId的值:

    code language-javascript
    <%Map paraMap = new HashMap();
    paraMap.put("petId",request.getParameter("petId"));
    request.setAttribute("paramMap",paraMap);%>
    

因此,讀取服務會根據請求中指定的屬性名稱,從資料來源擷取詳細資料。

例如,在要求中將屬性指定為petid=100,會從資料來源擷取與該屬性值相關的屬性。

新增關聯 add-associations

關聯通常在資料來源中的資料模型物件之間建立,當物件進入表單資料模型(FDM)時,這些關聯會保留。 關聯定義了兩個資料模型物件之間的關係,可以是​ 一對一 ​或​一對多。

單一記錄與多個記錄相關時,會存在​ 一對多 ​關聯。 例如,一位員工可以有多個與員工記錄相關聯的相依項。 此關聯性稱為一對多關聯,由1:n在連線關聯資料模型物件的線上描述。 當關聯性傳回唯一一個相符記錄時,即存在​ 一對一 ​關聯 — 例如,當關聯傳回指定員工ID的唯一員工名稱時,即是一對一關聯。

當您將關聯資料模型物件從資料來源新增至表單資料模型(FDM)時,它們的關聯會保留並顯示為以箭頭線連線。 您也可以在單一表單資料模型(FDM)中,跨不同資料來源在資料模型物件之間新增關聯,如此可讓您合併來自不同後端系統的相關資料。

NOTE
Java Database Connectivity (JDBC)資料來源中的預先定義關聯不會保留在表單資料模型(FDM)中,因為這些關聯不會自動傳遞。 您必須手動建立。

若要新增關聯:

  1. 選取資料模型物件頂端的核取方塊以選取它,然後選取​新增關聯。 「新增關聯」對話方塊開啟。

    新增關聯

    note
    NOTE
    除了資料模型物件和服務之外,開放式資料通訊協定(OData)服務中繼資料檔案還包括定義兩個資料模型物件之間關聯的導覽屬性。 在表單資料模型(FDM)中新增關聯時,可以使用這些導覽屬性。 如需詳細資訊,請參閱使用OData服務的導覽屬性。

    新增關聯對話方塊開啟。

    add-association-2

    新增關聯對話方塊

  2. 在「新增關聯」窗格中:

    • 指定關聯的標題。
    • 選取關聯型別 — 一對一​或​一對多。
    • 選取要關聯的資料模型物件。
    • 選取讀取服務,以從選取的模型物件讀取資料。 讀取服務引數會出現。 編輯引數以視需要加以變更,並將其繫結至您要關聯的資料模型物件的屬性。

    在下列範例中,Dependents資料模型物件之讀取服務的預設引數為dependentid。

    add-association-example

    相依物件讀取服務的預設引數相依於

    但是,引數必須是關聯資料模型物件之間共用的共同屬性,在此範例中為Employeeid。 因此,因為關聯相依於相符的索引鍵,所以Employeeid引數必須繫結到Employee資料模型物件的id屬性。 此繫結可讓系統從「相依專案」資料模型物件擷取關聯的相依專案詳細資料。

    add-association-example-2

    已更新引數和繫結

    選取​ 完成 ​以儲存引數。

  3. 選取​ 完成 ​以儲存關聯,然後選取​ 儲存 ​以儲存表單資料模型(FDM)。

  4. 視需要重複這些步驟以建立其他關聯。

NOTE
新增的關聯會顯示在資料模型物件方塊中,並包含指定的標題和連線相關資料模型物件的直線。
選取關聯的核取方塊並選取​編輯關聯,即可編輯關聯。

已新增關聯

編輯屬性 properties

編輯屬性可讓您設定資料模型物件、其屬性和服務在​ 表單資料模型(FDM) ​中的行為方式。 透過​ 編輯屬性 ​窗格,您可以定義服務、資料型別、索引鍵及引數,以決定FDM如何讀取、寫入及傳回資料。

若要編輯屬性:

  1. 選取​ 表單資料模型(FDM) ​中資料模型物件、屬性或服務旁的核取方塊。

  2. 選取​編輯屬性。 選取的模型物件、屬性或服務的​ 編輯屬性 ​窗格會開啟。

    • 資料模型物件:指定​ 讀取和寫入服務 ​並編輯引數。 這些服務會決定如何從物件基礎資料來源擷取資料,以及如何將資料儲存到該來源。

    • 屬性:指定屬性的​型別、子型別​和​格式。 您也可以指定選取的屬性做為資料模型物件的​主索引鍵,以唯一識別每個記錄。

    • 服務:指定服務的輸入模型物件、輸出型別和引數。 對於​Get服務,您可以指出它是否傳回陣列,以確保服務正確處理多個記錄。

      edit-properties-service

    Get服務的「編輯內容」對話方塊

  3. 選取​ 完成 ​以儲存屬性組態,然後選取​ 儲存 ​以儲存​表單資料模型(FDM)。 此最終儲存會將所有屬性變更提交至FDM。

建立計算屬性 computed

計算屬性​會自動從規則或運算式衍生其值。 您可以使用規則將計算屬性的值設定為​ 表單資料模型(FDM) ​中的常值字串、數字、數學運算式的結果或其他屬性的值。 由於此值是計算式,而非手動輸入,因此計算屬性可減少資料輸入錯誤,並隨著基礎資料變更而保持相依欄位的一致性。

範例:建置FullName計算屬性

例如,您可以建立計算屬性​FullName,其值是串連現有​ FirstName ​和​ LastName ​屬性的結果。 若要這麼做,請遵循下列步驟:

  1. 建立名稱為FullName的新屬性,其資料型別為​String。

  2. 啟用​ Computed ​並選取​ Done ​以建立屬性。

    已計算

    已建立​ FullName ​計算屬性。 屬性旁會出現圖示,表示該屬性已計算。

    computed-prop

  3. 選取​ 全名 ​屬性,然後選取​編輯規則。 規則編輯器視窗隨即開啟。

  4. 在規則編輯器視窗中,選取​建立。 設定值​規則視窗隨即開啟。

    從​ 選取選項 ​下拉式清單中,選取​數學運算式。 其他可用選項為​ 表單資料模型物件 ​和​字串。

  5. 在數學運算式中,選取​ FirstName ​作為第一個物件,選取​ LastName ​作為第二個物件。 選取​ 加 ​作為運運算元。

    選取​完成,然後選取​ 關閉 ​以關閉規則編輯器視窗。 完成的規則看起來類似下列。

    規則

  6. 在​ 表單資料模型(FDM) ​上,選取​儲存。 運算屬性已設定。 這可確保每當​ FirstName ​或​ LastName ​變更時,FullName​值會自動更新,因此串連的完整名稱一律與來源欄位保持同步。

使用OData服務的導覽屬性 work-with-navigation-properties-of-odata-services

OData服務中的​ 導覽屬性 ​會定義兩個資料模型物件之間的關聯,以建立一個實體與另一個實體的關聯關係且可周遊至另一個實體。 這些屬性定義在​ 實體型別 ​或​ 複雜型別 ​上,它們可讓使用者端從一個記錄移至其相關記錄。 例如,在從範例TripPin OData範例服務的中繼資料檔的下列擷取中,Person​實體包含三個導覽屬性: Friends、BestFriend​和​Trips。

如需有關導覽屬性的詳細資訊,請參閱OData檔案。

<edmx:Edmx xmlns:edmx="https://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<script/>
<edmx:DataServices>
<Schema xmlns="https://docs.oasis-open.org/odata/ns/edm" Namespace="Microsoft.OData.Service.Sample.TrippinInMemory.Models">
<EntityType Name="Person">
<Key>
<PropertyRef Name="UserName"/>
</Key>
<Property Name="UserName" Type="Edm.String" Nullable="false"/>
<Property Name="FirstName" Type="Edm.String" Nullable="false"/>
<Property Name="LastName" Type="Edm.String"/>
<Property Name="MiddleName" Type="Edm.String"/>
<Property Name="Gender" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.PersonGender" Nullable="false"/>
<Property Name="Age" Type="Edm.Int64"/>
<Property Name="Emails" Type="Collection(Edm.String)"/>
<Property Name="AddressInfo" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Location)"/>
<Property Name="HomeAddress" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.Location"/>
<Property Name="FavoriteFeature" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.Feature" Nullable="false"/>
<Property Name="Features" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Feature)" Nullable="false"/>
<NavigationProperty Name="Friends" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person)"/>
<NavigationProperty Name="BestFriend" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person"/>
<NavigationProperty Name="Trips" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip)"/>
</EntityType>

導覽屬性在表單資料模型中的顯示方式

當您在​ 表單資料模型(FDM) ​中設定OData服務時,實體容器中的所有導覽屬性都會透過FDM中的單一服務自動提供使用。 此合併表示您不需要針對每個關聯分別使用服務,因為FDM會將它們顯示在一起。 在此TripPin OData服務範例中,Person實體容器中的三個導覽屬性都可以使用FDM中的一個​ GET LINK ​服務來讀取。

以下特別說明FDM中的​ GET LINK of Person /People ​服務,這是TripPin OData服務Person實體中3個導覽屬性 — Friends、BestFriend​及​Trips — 的組合服務。

nav-prop-service

設定取得連結服務

將​ GET LINK ​服務新增至FDM中的​ 服務 ​索引標籤之後,您可以編輯其屬性,以選擇要在服務中使用的輸出模型物件與導覽屬性。 例如,下列​ GET LINK of Person /People ​服務使用​ Trip ​作為輸出模型物件,使用​ Trips ​作為導覽屬性。

edit-prop-nav-prop

NOTE
NavigationPropertyName​引數的​ 預設值 ​欄位中可用的值取決於​ 傳回陣列? ​的狀態 切換按鈕。 啟用時,欄位會顯示​ 集合 ​型別的導覽屬性。

在此範例中,您也可以選擇​ Person ​作為輸出模型物件,並將導覽屬性引數設定為​ Friends ​或​BestFriend,視是否要​ 傳回陣列? ​而定。 啟用或停用。

edit-prop-nav-prop2

在關聯中使用導覽屬性

同樣地,您可以在FDM中新增關聯時,選擇​ GET LINK ​服務並設定其導覽屬性。 但是,只有當​ 繫結至欄位 ​設定為​ 常值 ​時,才能選取導覽屬性;因為此需求,在正確設定繫結之前,導覽屬性選項不會變成可選取的。

add-association-nav-prop

產生和編輯範例資料 sample

表單資料模型(FDM)編輯器​針對表單資料模型中的所有資料模型物件屬性(包括​計算屬性)產生​範例資料。 此範例資料包含一組符合為每個屬性設定的​ 資料型別 ​的隨機值,為您提供逼真的測試值,而不需要即時資料來源連線。

關於範例資料

範例資料可做為現成的測試輸入,可讓您在將表單資料模型繫結至生產資料之前,預覽及驗證表單資料模型的運作方式。 由於每個產生的值都遵循其屬性的已設定資料型別,因此範例集會反映實際記錄的預期結構和格式,這有助於您在開發初期驗證繫結、計算邏輯和表單行為。

您也可以編輯產生的值並儲存變更。 即使您重新產生範例資料,已儲存的資料仍會保留,因此您手動組織的測試案例會跨重新產生保留。 這可讓您可以建置穩定、可重複使用的測試案例,而不必在每次產生新的隨機值時都遺失編輯。

產生和編輯範例資料的步驟

  1. 開啟​ 表單資料模型(FDM) ​並選取​編輯範例資料。 FDM編輯器會在​ 編輯範例資料 ​視窗中產生並顯示範例資料。

    產生範例資料

  2. 在​ 編輯範例資料 ​視窗中,視需要編輯資料,並選取​儲存。 已編輯的範例資料會儲存並保留,即使在您重新產生範例資料後,仍可繼續使用。

測試資料模型物件與服務 test-data-model-objects-and-services

設定表單資料模型(FDM)後,請先測試已設定的資料模型物件和服務,再以即時表單部署FDM,以確認它們可如預期般運作。 部署前的測試會驗證每個物件和服務是否傳回正確資料,減少表單投入生產時發生執行階段錯誤的風險。

若要測試資料模型物件與服務:

  1. 在表單資料模型(FDM)中選取資料模型物件或服務,然後分別選取​ 測試模型物件 ​或​測試服務。

    測試表單資料模型​視窗開啟。

    test-data-model

  2. 在​ 測試表單資料模型 ​視窗中,從​ 輸入 ​窗格選取要測試的資料模型物件或服務。 這會識別您要驗證的特定物件或服務。

  3. 在測試程式碼中指定引數值,然後選取​測試。 成功的測試會傳回​ 輸出 ​窗格中的輸出,確認選取的物件或服務已正確設定,且能依預期擷取或處理資料。

    測試結果

按照相同的程式,您可以驗證表單資料模型(FDM)中的其他資料模型物件和服務,以確保整個模型在使用之前能可靠地執行。

自動驗證輸入資料 automated-validation-of-input-data

當叫用​ DermisBridge API ​時,表單資料模型(FDM)​會自動驗證收到的資料作為輸入,並套用表單資料模型中定義的驗證准則。 此驗證是由用來叫用API的查詢物件中所設定的​ ValidationOptions ​旗標所控制。 根據預設,當ValidationOptions旗標未設定值時,FDM會對輸入資料執行​ BASIC ​驗證。

ValidationOptions旗標層次

ValidationOptions旗標接受下列三個值之一,每個值都定義FDM驗證輸入的嚴格程度:

  • FULL: FDM會根據​ 所有已定義的限制 ​來驗證輸入。 使用此層級在處理資料之前,強制實施每個資料型別和商業規則限制。
  • 關閉: FDM執行​無驗證。 輸入資料無需任何限制檢查即可通過。
  • BASIC: FDM僅驗證​ required ​與​ nullable ​限制。 這可確保必填欄位存在,並且接受Null處理規則,而不評估完整的限制集合。

如果未設定ValidationOptions標幟的值,FDM預設會套用​ BASIC ​驗證。

設定驗證旗標

下列範例將驗證旗標設為​FULL,啟用所有條件約束的驗證:

operationOptions.setValidationOptions(ValidationOptions.FULL);
NOTE
您在輸入資料中為屬性提供的值必須與在中繼資料檔案中為該屬性定義的資料型別相符。
因為資料型別檢查是獨立於驗證層級強制執行,如果提供的值不符合定義的資料型別,DermisBridge API​會傳回例外狀況​**,不論ValidationOptions旗標**​的值為何。 當記錄層級設定為​ Debug ​時,API會將對應的錯誤記錄到​ error.log ​檔案。

資料來源的資料型別限制

表單資料模型(FDM)​會根據定義的資料型別限制清單來驗證輸入資料。 此限制清單可能會依基礎​ 資料來源 ​而有所不同,因此在驗證期間強制執行的確切限制是由與表單資料模型相關聯的資料來源所決定。

下表列出套用至每個支援資料來源之輸入資料的資料型別限制:

限制
說明
輸入資料來源
必要
如果為true,則引數必須包含在輸入資料中。
Swagger、WSDL和資料庫
可為空
若為true,則可將輸入資料中的引數值設為Null。
WSDL、Odata和資料庫
maximum
指定數值的上限。 指定為上限的最大值也可以指派給輸入資料中的引數。
Swagger和WSDL
minimum
指定數值的下限。 指定為下限的最小值也可以指定給輸入資料中的引數。
Swagger和WSDL
exclusiveMax
指定數值的上限。 指定為上限的最大值不得指派給輸入資料中的引數。
Swagger和WSDL
exclusiveMinimum
指定數值的下限。 不得將指定為下限的最小值指派給輸入資料中的引數。
Swagger和WSDL
minLength
指定字串中所含字元數的下限。 指定為下限的最小值也可以指定給輸入資料中的引數。
Swagger和WSDL
maxLength
指定字串中所含字元數的上限。 指定為上限的最大值也可以指派給輸入資料中的引數。
Swagger、WSDL、Odata和資料庫
pattern
指定固定的字元順序。 只有在字元符合指定的模式時,才能成功驗證輸入字串。
Swagger
minItems
指定陣列中專案的最小數目。 指定為下限的最小值也可以指定給輸入資料中的引數。
Swagger和WSDL
maxItems
指定陣列中專案的最大數量。 指定為上限的最大值也可以指派給輸入資料中的引數。
Swagger和WSDL
uniqueItems
如果為true,則陣列的所有元素在輸入資料中必須是唯一的。
Swagger
列舉(字串)
將輸入資料中的引數值限製為固定的字串值集。 它必須是至少有一個元素的陣列,其中每個元素都是唯一的。
Swagger、WSDL和Odata
列舉(數字)
將輸入資料中的引數值限製為固定的數值集。 它必須是至少有一個元素的陣列,其中每個元素都是唯一的。
WSDL

使用Swagger限制進行輸入資料驗證

只有在​ 訂單識別碼 ​存在且其值在​ 1-10 ​範圍內時,輸入資料才會通過驗證。 在此範例中,輸入資料是根據​ Swagger (OpenAPI) ​檔案中定義的​最大值、最小值​和​ 必要 ​條件約束進行驗證。 這三種限制型別可管理接受的輸入,如下所示:

  • 必要 — 必須提供引數;遺失orderId無法驗證。
  • 最小值 — 值不得小於​1。
  • 最大值 — 值不得超過​10。

由於限制會直接在API定義中宣告,因此在作業執行之前,會在結構描述層級自動執行驗證。 這樣可確保只有格式正確的請求才能到達基礎服務。

   parameters: [
   {
   name: "orderId",
   in: "path",
   description: "ID of pet that must be fetched",
   required: true,
   type: "integer",
   maximum: 10,
   minimum: 1,
   format: "int64"
   }
   ]

驗證失敗行為和錯誤記錄

當輸入資料不符合這些條件時,系統會擲回驗證例外狀況。 由於此失敗,而且當記錄層級設定為​ Debug ​時,錯誤會寫入​ error.log ​檔案。 此記錄行為可協助開發人員準確診斷違反的限制條件,因為記錄專案會識別失敗引數、違反的限制條件以及違規值。

例如,提交​ 16 ​的orderId超過宣告的​最大值10,產生下列記錄專案:

21.01.2019 17:26:37.411 *ERROR* com.adobe.aem.dermis.core.validation.JsonSchemaValidator {"errorCode":"AEM-FDM-001-044","errorMessage":"Input validations failed during operation execution.","violations":{"/orderId":["numeric instance is greater than the required maximum (maximum: 10, found: 16)"]}}

錯誤專案擷取錯誤代碼​AEM-FDM-001-044、訊息"Input validations failed during operation execution."以及指向/orderId欄位的violations區塊、所需的最大值​ 10 ​以及找到的值(16)。 這種結構化的細節可讓您直接識別和更正超出範圍的輸入。

後續步驟 next-steps

您有一個可用的​表單資料模型(FDM),現在已準備好用於最適化Forms工作流程。 表單資料模型代表您的表單擷取資料並與連線資料來源交換的資料結構和關係,提供可重複使用的統一結構描述,供Adaptive Forms直接繫結。 由於該模型將基礎資料服務抽象為單一的一致層,因此它允許表單從這些來源讀取和寫入這些來源,而不需要為每個新表單重建整合邏輯。

模型備妥後,您現在可以將它套用至表單建置任務中。 常見的後續步驟包括:

  • 將表單欄位繫結到模型,以便最適化表單元件直接對應到FDM中定義的資料屬性,確保資料擷取和提交的一致性。
  • 使用模型擷取的現有資料預填表單,減少手動資料輸入,改善使用者體驗。
  • 設定表單提交,將擷取的資料透過模型寫入回連線的資料來源,以保持記錄同步。
  • 在多個表單間重複使用模型,以維持一致性並減少重複的設定工作。

跨工作流程重複使用單一表單資料模型可提升一致性並降低持續維護成本,因為模型的更新會傳播至依賴它的每個表單。 如需在最適化Forms中套用模型的詳細指引,請參閱使用表單資料模型(FDM)。

recommendation-more-help
experience-manager-cloud-service-help-main-toc