使用表單資料模型

data-integration

表單資料模型編輯器提供直覺式使用者介面和工具,可用於編輯和設定表單資料模型。 使用編輯器,可以在表單資料模型中,從關聯的資料源添加和配置資料模型對象、屬性和服務。 此外,它還允許您建立資料模型對象和屬性,而不使用資料源,並以後將它們與相應的資料模型對象和屬性綁定。 您也可以為資料模型物件屬性產生和編輯範例資料,以便在預覽時預填最適化表單和互動式通訊。 您可以測試在表單資料模型中設定的資料模型物件和服務,以確保其與資料來源正確整合。

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

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

注意

您必須同時是​fdm-author​和​forms-user​群組的成員,才能建立及使用表單資料模型。 請連絡您的AEM管理員以成為群組的成員。

添加資料模型對象和服務

如果您使用資料源建立了表單資料模型,則可以使用表單資料模型編輯器來添加資料模型對象和服務、配置其屬性、在資料模型對象之間建立關聯,以及測試表單資料模型和服務。

您可以在表單資料模型中,從可用的資料來源新增資料模型物件和服務。 新增的資料模型物件顯示在「模型」標籤中時,新增的服務會顯示在「服務」標籤中。

要添加資料模型對象和服務,請執行以下操作:

  1. 登入AEM製作例項,導覽至​Forms >資料整合,然後開啟您要新增資料模型物件的表單資料模型。

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

  3. 選擇要添加到表單資料模型的資料模型對象和服務,然後點選​添加選定項

    所選對象

    所選資料模型對象和服務

    「模型」(Model)頁簽顯示所有資料模型對象及其屬性的圖形表示,這些對象及其屬性添加到表單資料模型中。 每個資料模型物件由表單資料模型中的方塊表示。

    模型標籤

    「模型」(Model)頁簽顯示添加的資料模型對象

    注意

    您可以按住並拖曳資料模型物件方塊四周,以在內容區域中組織這些物件。 在表單資料模型中新增的所有資料模型物件在「資料來源」窗格中會呈現灰色。

    「服務」索引標籤會列出新增的服務。

    services-tab

    「服務」頁簽顯示資料模型服務

    注意

    除了資料模型對象和服務之外,OData服務元資料文檔還包括定義兩個資料模型對象之間關聯的導航屬性。 有關詳細資訊,請參閱使用OData服務的導航屬性

  4. 點選​儲存​以儲存表單模型物件。

    注意

    您可以使用最適化表單規則,叫用表單資料模型的「服務」索引標籤中設定的服務。 規則編輯器的「調用服務」操作中提供了已配置的服務。有關在適用性表單規則中使用這些服務的詳細資訊,請參閱規則編輯器中的調用服務和設定規則的值。

建立資料模型對象和子屬性

建立資料模型對象

雖然可以從配置的資料源添加資料模型對象,但也可以建立沒有資料源的資料模型對象或實體。 如果您尚未在表單資料模型中設定資料來源,則此功能特別實用。

要建立不使用資料源的資料模型對象,請執行以下操作:

  1. 登入AEM製作例項,導覽至​Forms >資料整合,然後開啟您要在其中建立資料模型物件或實體的表單資料模型。

  2. 點選​建立實體

  3. 在「建立資料模型」對話框中,指定資料模型對象的名稱,然後點選​Add。 資料模型物件會新增至表單資料模型。 請注意,新新增的資料模型物件未系結至資料來源,且沒有任何屬性,如下圖所示。

    新實體

接下來,可以在未綁定的資料模型對象中添加子屬性。

添加子屬性

表單資料模型編輯器可讓您在資料模型物件中建立子屬性。 建立時的屬性不會綁定到資料源中的任何屬性。 您稍後可以將子屬性與包含資料模型物件中的其他屬性捆綁。

要建立子屬性,請執行以下操作:

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

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

  3. 如果屬性是計算屬性,則啟用計算。 根據規則或運算式來評估計算屬性的值。 如需詳細資訊,請參閱編輯屬性

  4. 如果資料模型對象綁定到資料源,則添加的子屬性將自動綁定到具有相同名稱和資料類型的父資料模型對象的屬性。

    要使用資料模型對象屬性手動綁定子屬性,請點選​Bind Reference​欄位旁的瀏覽表徵圖。 選擇對象​對話框列出父資料模型對象的所有屬性。 選取要系結的屬性,並點選勾號圖示。 請注意,您只能選取與子屬性資料類型相同的屬性。

  5. 點選​Done​以儲存子屬性,並點選​Save​以儲存表單資料模型。 子屬性現在已新增至資料模型物件。

建立資料模型物件和屬性後,您可以繼續根據表單資料模型建立最適化表單和互動式通訊。 稍後,當您有可用的資料來源並加以設定時,您就可以將表單資料模型與資料來源系結。 系結會自動在相關的最適化表單和互動式通訊中更新。 如需使用表單資料模型建立最適化表單和互動式通訊的詳細資訊,請參閱使用表單資料模型

綁定資料模型對象和屬性

當您要與表單資料模型整合的資料來源可用時,可以將其新增至表單資料模型,如更新資料來源所述。 然後,執行以下操作來綁定未綁定的資料模型對象和屬性:

  1. 在表單資料模型中,選擇要與資料源綁定的未綁定資料源。

  2. 點選​編輯屬性

  3. 在​編輯屬性​窗格中,點選​綁定​欄位旁的瀏覽表徵圖。 它會開啟​選取物件​對話方塊,列出在表單資料模型中新增的資料來源。

    select-object

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

  5. 點選​Done​以儲存屬性,然後點選​Save​以儲存表單資料模型。 資料模型物件現在與資料來源系結。 請注意,資料模型物件不再標示為「未系結」。

    綁定模型對象

配置服務

要讀取和寫入資料模型對象的資料,請執行以下操作來配置讀取和寫入服務:

  1. 選取資料模型物件頂端的核取方塊以加以選取,然後點選​編輯屬性

    編輯屬性

    編輯屬性以配置資料模型對象的讀寫服務

    將開啟「編輯屬性」對話框。

    edit-properties-2

    編輯屬性對話方塊

    注意

    除了資料模型對象和服務之外,OData服務元資料文檔還包括定義兩個資料模型對象之間關聯的導航屬性。 將OData服務資料源添加到表單資料模型時,表單資料模型中有一個服務可用於資料模型對象中的所有導航屬性。 您可以使用此服務讀取相應資料模型對象的導航屬性。

    有關使用服務的詳細資訊,請參閱使用OData服務的導航屬性

  2. 切換​頂級對象​以指定資料模型對象是否為頂級模型對象。

    在表單資料模型中配置的資料模型對象可用於基於表單資料模型的適用性表單的「內容」瀏覽器的「資料模型對象」頁簽中。 在兩個資料模型對象之間添加關聯時,要關聯的資料模型對象在「資料模型對象」(Data Model Objects)頁簽中要關聯的資料模型對象下嵌套。 如果嵌套資料模型是頂層對象,它也將單獨顯示在「資料模型對象」頁簽中。 因此,您會看到其中兩個項目,一個在巢狀階層內,另一個在巢狀階層外,這可能會混淆表單作者。 要使關聯的資料模型對象僅顯示在嵌套層次結構中,請禁用「頂級對象」屬性。

  3. 為所選資料模型對象選擇讀和寫服務。 服務的引數隨即顯示。

    讀寫服務

    為員工資料源配置的讀寫服務

  4. 點選aem_6_3_edit ,將讀取服務引數系結至「使用者設定檔屬性」、「請求屬性」或「文字值」,並指定系結值。🔗

  5. 點選​Done​以儲存引數,點選​Done​以儲存屬性,然後點選​Save​以儲存表單資料模型。

綁定讀取服務參數

根據綁定值將Read服務參數綁定到用戶配置檔案屬性、請求屬性或常值。 該值會以引數的形式傳遞至服務,以從資料來源擷取與指定值相關聯的詳細資料。

常值

從​綁定到​下拉菜單中選擇​常值,並在​綁定值​欄位中輸入一個值。 與值相關聯的詳細資料會從資料來源中擷取。 使用此選項可檢索與靜態值關聯的詳細資訊。

在此示例中,與​4367655678​關聯的詳細資訊(作為mobilenum參數的值)從資料源中檢索。 如果您傳入行動號碼引數的值,則相關的詳細資料可包含客戶名稱、客戶地址和城市等屬性。

常值

使用者檔案屬性

從​綁定到​下拉菜單中選擇​用戶配置檔案屬性,並在​綁定值​欄位中輸入屬性名稱。 登入AEM例項的使用者詳細資訊會根據屬性名稱,從資料來源擷取。

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

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

使用者設定檔

在此示例中,在​綁定值​欄位中為grios用戶指定profile.empid

編輯引數

id引數採用用戶配置檔案的empid屬性的值,並將其作為參數傳遞到讀取服務。 它會從與登入使用者相關聯的empid員工資料模型物件中讀取並傳回相關屬性的值。

要求屬性

使用請求屬性從資料來源擷取關聯的屬性。

  1. 從​綁定到​下拉菜單中選擇​請求屬性,並在​綁定值​欄位中輸入屬性名稱。

  2. 為head.jsp建立overlay。 若要建立覆蓋,請開啟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

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

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

    例如,使用以下代碼從資料源檢索petid的值:

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

詳細資訊會根據請求中指定的屬性名稱從資料來源擷取。

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

添加關聯

通常,資料源中的資料模型對象之間會建立關聯。 關聯可以是一對一或一對多。 例如,可以有多個與員工相關聯的家屬。 它稱為一對多關聯,由1:n在連接相關資料模型對象的線上描述。 但是,如果關聯為指定的員工ID返回唯一的員工名稱,則稱為一對一關聯。

將資料源中的關聯資料模型對象添加到表單資料模型時,它們的關聯將被保留並顯示為通過箭頭線連接。 您可以在表單資料模型中,跨不同資料來源新增資料模型物件之間的關聯。

注意

JDBC資料源中的預定義關聯不會保留在表單資料模型中。 您必須手動建立。

添加關聯:

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

    添加關聯

    注意

    除了資料模型對象和服務之外,OData服務元資料文檔還包括定義兩個資料模型對象之間關聯的導航屬性。 在表單資料模型中新增關聯時,可以使用這些導覽屬性。 有關詳細資訊,請參閱使用OData服務的導航屬性

    將開啟「添加關聯」對話框。

    add-association-2

    添加關聯對話框

  2. 在「添加關聯」窗格中:

    • 指定關聯的標題。
    • 選擇關聯類型 — 一對一或一對多。
    • 選擇要關聯的資料模型對象。
    • 選擇讀取服務以從所選模型對象讀取資料。 讀取服務參數隨即出現。 編輯以變更引數(如有必要),並將其系結至要關聯的資料模型物件的屬性。

    在以下示例中,Dependents資料模型對象的讀取服務的預設參數為dependentid

    add-association-example

    Dependents讀取服務的預設參數為dependited

    但引數必須是關聯資料模型對象之間的公用屬性,在此示例中為Employeeid。 因此,Employeeid參數必須綁定到Employee資料模型對象的id屬性,才能從Dependents資料模型對象中獲取關聯的依存項詳細資訊。

    add-association-example-2

    更新引數和系結

    點選​Done​以儲存引數。

  3. 點選​Done​以儲存關聯,然後點選​Save​以儲存表單資料模型。

  4. 重複步驟,視需要建立更多關聯。

注意

添加的關聯將顯示在資料模型對象框中,具有指定的標題和一條連接關聯資料模型對象的線。

您可以選取相關的核取方塊,然後點選「編輯關聯」以編輯關聯。

新增關聯

編輯屬性

您可以編輯資料模型對象的屬性、其屬性以及在表單資料模型中添加的服務。

要編輯屬性:

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

  2. 點選​編輯屬性。 將開啟所選模型對象、屬性或服務的​編輯屬性​窗格。

    • 資料模型物件:指定讀和寫服務和編輯參數。
    • 屬性:指定屬性的類型、子類型和格式。也可以指定所選屬性是否為資料模型對象的主鍵。
    • 服務:指定服務的輸入模型對象、輸出類型和參數。對於Get服務,可以指定它是否應返回陣列。

    edit-properties-service

    獲取服務的編輯屬性對話框

  3. 點選​Done​以儲存屬性,然後點選​Save​以儲存表單資料模型。

建立計算屬性

計算屬性是根據規則或表達式計算其值的屬性。 使用規則,可以將計算屬性的值設定為文本字串、數字、數學表達式的結果或窗體資料模型中其他屬性的值。

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

  1. 建立資料類型為String的名稱為FullName的新屬性。

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

    計算

    將建立FullName計算屬性。 請注意屬性旁的圖示,以描繪計算屬性。

    computed-prop

  3. 選擇FullName屬性,然後點選​Edit Rule。 規則編輯器視窗隨即開啟。

  4. 在規則編輯器視窗中,點選​建立。 將開啟「設定值」規則窗口。

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

  5. 在數學表達式中,分別在第一和第二對象中選擇​FirstName​和​LastName。 選擇​plus​作為運算子。

    點選​Done,然後點選​Close​以關閉規則編輯器視窗。 規則看起來類似下列。

    單項規則

  6. 在表單資料模型上,點選​儲存。 已配置計算屬性。

使用OData服務的導航屬性

在OData服務中,導航屬性用於定義兩個資料模型對象之間的關聯。 這些屬性是在實體類型或複雜類型上定義的。 例如,在從示例TripPin OData示例服務的元資料檔案的以下提取中,人員實體包含三個導航屬性:朋友、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>

在表單資料模型中配置OData服務時,實體容器中的所有導航屬性都可通過表單資料模型中的服務提供。 在此TripPin OData服務示例中,可以使用表單資料模型中的一個GET LINK服務讀取Person實體容器中的三個導航屬性。

以下將突出顯示「表單資料模型」中的GET LINK of Person /People服務,該服務是TripPin OData服務的Person實體中三個導航屬性的組合服務。

nav-prop-service

GET LINK服務添加到「表單資料模型」的「服務」頁簽後,可以編輯屬性以選擇要在服務中使用的輸出模型對象和導航屬性。 例如,以下示例中的以下GET LINK of Person /People服務使用Trip作為輸出模型對象,使用導航屬性作為Trips。

edit-prop-nav-prop

注意

NavigationPropertyName​引數的​預設值​欄位中可用的值取決於​Return陣列的狀態? 切換按鈕。啟用後,將顯示「集合」類型的導航屬性。

在此示例中,您還可以選擇輸出模型對象作為Person,選擇導航屬性參數作為Friends或BestFriend(取決於​Return陣列? 啟用或停用)。

edit-prop-nav-prop2

同樣地,在表單資料模型中新增關聯時,您可以選擇GET LINK服務並配置其導覽屬性。 但是,要能夠選擇導航屬性,請確保將​綁定到欄位​設定為​常值

add-association-nav-prop

產生和編輯範例資料

表單資料模型編輯器可讓您為表單資料模型中的所有資料模型物件屬性產生範例資料,包括計算屬性。 這是一組符合為每個屬性設定的資料類型的隨機值。 您也可以編輯和儲存資料,即使重新產生範例資料,資料也會保留。

執行下列操作以生成和編輯示例資料:

  1. 開啟表單資料模型,然後點選​編輯範例資料。 它會在「編輯範例資料」視窗中產生並顯示範例資料。

    產生範例資料

  2. 在「編輯示例資料」窗口中,根據需要編輯資料,然後點選「保存」。

接下來,您可以使用範例資料,根據表單資料模型預先填寫及測試互動式通訊。 如需詳細資訊,請參閱使用表單資料模型

測試資料模型對象和服務

您的表單資料模型已設定,但在使用前,您可能想要測試已設定的資料模型物件和服務是否如預期般運作。 要測試資料模型對象和服務,請執行以下操作:

  1. 在表單資料模型中選擇資料模型對象或服務,並分別點選​測試模型對象​或​測試服務

    將開啟「測試表單資料模型」窗口。

    測試資料模型

  2. 在「測試表單資料模型」窗口中,從「輸入」窗格中選擇要測試的資料模型對象或服務。

  3. 在測試程式碼中指定引數值,然後點選​Test。 成功的測試會在「輸出」窗格中返回輸出。

    測試結果

同樣地,您可以測試表單資料模型中的其他資料模型物件和服務。

輸入資料的自動驗證

表單資料模型會根據表單資料模型中可用的驗證准則,在叫用DermisBridge API時,驗證收到作為輸入的資料。 驗證以用於叫用API的查詢物件中設定的ValidationOptions標幟為基礎。

標幟可設為下列任一值:

  • 完整:FDM根據所有約束執行驗證
  • 關閉:無驗證
  • 基本:FDM根據「必要」和「nullable」約束執行驗證

如果未為ValidationOptions標幟設定值,則對輸入資料執行​BASIC​驗證。

以下是將驗證標幟設定為​FULL​的範例:

operationOptions.setValidationOptions(ValidationOptions.FULL);
注意

輸入資料中為屬性提供的值必須與元資料文檔中為屬性定義的資料類型相匹配。
如果值與為屬性定義的資料類型不符,則DermisBridge API會顯示例外狀況,而不考慮ValidationOptions標幟的值。 如果日誌級別設定為Debug,則將錯誤記錄到​error.log​檔案。

表單資料模型會根據資料類型限制清單來驗證輸入資料。 輸入資料的限制清單可根據資料源而改變。

下表列出根據資料來源輸入資料的限制:

限制 說明 輸入資料源
必填 如果為true,則必須將參數包含在輸入資料中。 Swagger、WSDL和資料庫
null 如果為true,則輸入資料中的參數值可設為Null。 WSDL、Odata和資料庫
最大值 指定數值的上界。 指定為上界的最大值也可以分配給輸入資料中的參數。 Swagger和WSDL
最小 指定數值的下限。 指定為下界的最小值也可以分配給輸入資料中的參數。 Swagger和WSDL
exclusiveMaximum 指定數值的上界。 指定為上限的最大值不得分配給輸入資料中的參數。 Swagger和WSDL
exclusiveMinum 指定數值的下限。 指定為下限的最小值不得分配給輸入資料中的參數。 Swagger和WSDL
minLength 指定字串中包含的字元數的下限。 指定為下界的最小值也可以分配給輸入資料中的參數。 Swagger和WSDL
maxLength 指定字串中包含的字元數的上限。 指定為上界的最大值也可以分配給輸入資料中的參數。 Swagger、WSDL、Odata和資料庫
圖樣 指定固定的字元順序。 只有在字元符合指定模式時,輸入字串才會成功驗證。 Swagger
minItems 指定陣列中的最小項目數。 指定為下界的最小值也可以分配給輸入資料中的參數。 Swagger和WSDL
maxItems 指定陣列中的項目數上限。 指定為上界的最大值也可以分配給輸入資料中的參數。 Swagger和WSDL
uniqueItems 如果為true,則陣列的所有元素在輸入資料中必須是唯一的。 Swagger
列舉(字串)

將輸入資料中參數的值限制為一組固定的字串值。 它必須是陣列,其中至少包含一個元素,且每個元素都是唯一的。 Swagger、WSDL和Odata
枚舉(數字)

將輸入資料中參數的值限制為一組固定的數值。 它必須是陣列,其中至少包含一個元素,且每個元素都是唯一的。 WSDL

在此範例中,會根據Swagger檔案中定義的最大、最小和必要限制來驗證輸入資料。 只有在訂單ID存在且其值介於1和10之間時,輸入資料才符合驗證標準。

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

如果輸入資料不符合驗證標準,則會顯示例外。 如果日誌級別設定為​Debug,則將錯誤記錄到​error.log​檔案。 例如,

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)"]}}

後續步驟

您有可運作的表單資料模型,現在已可在最適化表單和互動式通訊工作流程中使用。 如需詳細資訊,請參閱使用表單資料模型

本頁內容