處理表單資料模型

資料整合

表單資料模型編輯器提供直覺式使用者介面和工具,用於編輯和設定表單資料模型。 使用編輯器,您可以從表單資料模型中的相關資料來源新增及設定資料模型物件、屬性和服務。 此外,它可讓您在不使用資料來源的情況下建立資料模型物件和屬性,並在稍後將它們與各自的資料模型物件和屬性繫結。 您也可以產生和編輯資料模型物件屬性的範例資料,以用來預先填入Adaptive Forms 預覽時。 您可以測試在表單資料模型中設定的資料模型物件和服務,以確保其與資料來源正確整合。

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

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

注意

您必須同時為兩者 fdm-authorforms-user 群組,以便能夠建立和使用表單資料模型。 聯絡您的 Experience Manager 成為群組成員的管理員。

新增資料模型物件和服務

如果您使用資料來源建立表單資料模型,您可以使用表單資料模型編輯器來新增資料模型物件和服務、設定其屬性、建立資料模型物件之間的關聯,以及測試表單資料模型和服務。

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

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

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

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

  3. 選取您要新增至表單資料模型的資料模型物件和服務,然後點選 新增選取專案.

    選取的物件

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

    模型 標籤會以圖形呈現所有資料模型物件及其新增至表單資料模型的屬性。 每個資料模型物件都由表單資料模型中的方塊表示。

    model-tab

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

    注意

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

    服務 索引標籤清單新增的服務。

    services-tab

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

    注意

    除了資料模型物件和服務之外,OData服務中繼資料檔案還包括定義兩個資料模型物件之間關聯的導覽屬性。 如需詳細資訊,請參閱 使用OData服務的導覽屬性.

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

    注意

    您可以使用最適化表單規則,叫用您在表單資料模型的「服務」標籤中設定的服務。 設定的服務可在規則編輯器的「叫用服務」動作中使用。如需在調適型表單規則中使用這些服務的詳細資訊,請參閱叫用服務和設定規則值,位置如下: 規則編輯器.

建立資料模型物件和子屬性

建立資料模型物件

雖然您可以從已設定的資料來源新增資料模型物件,也可以建立沒有資料來源的資料模型物件或實體。 這很有幫助,尤其是如果您尚未在表單資料模型中設定資料來源。

若要建立不含資料來源的資料模型物件:

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

  2. 點選 建立實體.

  3. 在 建立資料模型 對話方塊,指定資料模型物件的名稱,然後點選 新增. 資料模型物件會新增至表單資料模型。 新加入的資料模型物件未繫結至資料來源,因此沒有任何屬性,如下圖所示。

    new-entity

接下來,您可以在未繫結的資料模型物件中新增子屬性。

新增子屬性

表單資料模型編輯器可讓您在資料模型物件中建立子屬性。 建立時的屬性未繫結至資料來源中的任何屬性。 您稍後可以將子屬性與包含資料模型物件中的另一個屬性繫結。

若要建立子屬性:

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

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

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

  4. 如果資料模型物件繫結至資料來源,則新增的子屬性會自動繫結至具有相同名稱和資料型別的父資料模型物件的屬性。

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

  5. 點選 完成 儲存子屬性並點選 儲存 以儲存表單資料模型…… 子屬性現在已新增至資料模型物件。

建立資料模型物件和屬性後,您可以繼續建立Adaptive Forms 根據表單資料模型。 稍後,當您有可用的資料來源且已設定資料來源時,即可將表單資料模型與資料來源繫結。 繫結會在相關聯的最適化Forms中自動更新 . 如需有關建立最適化Forms的詳細資訊 使用表單資料模型,請參閱 使用表單資料模型.

繫結資料模型物件和屬性

當您想要與表單資料模型整合的資料來源可用時,可以依照中的說明將其新增至表單資料模型 更新資料來源. 然後,執行下列操作以繫結未繫結的資料模型物件和屬性:

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

  2. 點選 編輯屬性.

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

    select-object

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

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

    bound-model-object

設定服務

若要讀取和寫入資料模型物件的資料,請執行以下動作來設定讀取和寫入服務:

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

    edit-properties

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

    此 編輯屬性 對話方塊開啟。

    edit-properties-2

    編輯內容對話方塊

    注意

    除了資料模型物件和服務之外,OData服務中繼資料檔案還包括定義兩個資料模型物件之間關聯的導覽屬性。 當您將OData服務資料來源新增至表單資料模型時,表單資料模型中有一項服務可用於資料模型物件中的所有導覽屬性。 您可以使用此服務來讀取對應資料模型物件的導覽屬性。

    如需使用服務的詳細資訊,請參閱 使用OData服務的導覽屬性.

  2. 切換 頂層物件 指定資料模型物件是否為頂層模型物件。

    在表單資料模型中設定的資料模型物件可用於根據表單資料模型的最適化表單內容瀏覽器中的資料模型物件索引標籤。 當您在兩個資料模型物件之間新增關聯時,您與之關聯的資料模型物件會巢狀內嵌於您從中產生關聯的資料模型物件下。 資料模型物件 標籤。 如果巢狀資料模型是頂層物件,它也會單獨出現在 資料模型物件 標籤。 因此,您會看到其中的兩個專案,一個在巢狀階層內,另一個在巢狀階層外,這可能會使表單作者感到困惑。 若要讓關聯的資料模型物件只出現在巢狀階層中,請停用「頂層物件」屬性。

  3. 為選取的資料模型物件選取讀取和寫入服務。 會出現服務的引數。

    讀寫服務

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

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

  5. 點選 完成 若要儲存引數, 完成 以儲存屬性,然後 儲存 以儲存表單資料模型。

繫結讀取服務引數

根據繫結值,將讀取服務引數繫結到使用者設定檔屬性、要求屬性或常值值。 值會作為引數傳遞至服務,以從資料來源擷取與指定值相關聯的詳細資料。

常值

選取 常值繫結至 下拉式功能表,並在 繫結值 欄位。 會從資料來源擷取與該值相關聯的詳細資料。 使用此選項可擷取與靜態值相關聯的詳細資訊。

在此範例中,與 4367655678,作為 mobilenum 引數,從資料來源擷取。 如果您傳遞行動號碼引數的值,關聯的詳細資料可包含客戶名稱、客戶地址及城市等屬性。

常值

使用者檔案屬性

選取 使用者設定檔屬性繫結至 下拉式功能表,然後在 繫結值 欄位。 使用者已登入 Experience Manager 例項是根據屬性名稱從資料來源擷取。

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

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

使用者設定檔

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

編輯引數

id 引數採用 empid 使用者設定檔的屬性,並將其作為引數傳遞至讀取服務。 它會從employee資料模型物件讀取並傳回相關屬性的值, empid 與登入使用者相關聯。

要求屬性

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

  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

    注意
    • 如果您使用靜態範本,請將head.jsp覆蓋在:
      /libs/fd/af/components/page2/afStaticTemplatePage/head.jsp
    • 如果您使用可編輯的範本,請覆蓋aftemplatedpage.jsp:
      /libs/fd/af/components/page2/aftemplatedpage/aftemplatedpage.jsp
  3. 設定 paramMap 請求屬性的。 例如,將下列程式碼加入apps資料夾的.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. 選取資料模型物件頂端的核取方塊以選取並點選 新增關聯. 「新增關聯」對話方塊開啟。

    add-association

    注意

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

    此 新增關聯 對話方塊開啟。

    add-association-2

    新增關聯對話方塊

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

    • 指定關聯的標題。
    • 選取關聯型別 — 一對一一對多.
    • 選取要關聯的資料模型物件。
    • 選取讀取服務,從選取的模型物件讀取資料。 讀取服務引數會出現。 編輯以變更引數(如有必要),並將其繫結至要關聯的資料模型物件的屬性。

    在以下範例中,「相依專案」資料模型物件的讀取服務預設引數為 dependentid.

    add-association-example

    依存專案讀取服務的預設引數為依存專案

    不過,引數必須是關聯資料模型物件之間的通用屬性,在此範例中為 Employeeid. 因此, Employeeid 引數必須繫結至 id Employee資料模型物件的屬性,以從Dependents資料模型物件擷取關聯的相依專案詳細資料。

    add-association-example-2

    已更新引數和繫結

    點選 完成 以儲存引數。

  3. 點選 完成 以儲存關聯,然後 儲存 以儲存表單資料模型。

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

注意

新增的關聯會顯示在資料模型物件方塊中,並帶有指定的標題和連線關聯資料模型物件的線。

您可以選取關聯的核取方塊並點選,以編輯關聯 編輯關聯.

added-association

編輯屬性

您可以編輯資料模型物件的屬性、其屬性,以及在表單資料模型中新增的服務。

若要編輯屬性:

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

  2. 點選 編輯屬性. 此 編輯屬性 所選模型物件、屬性或服務的窗格開啟。

    • 資料模型物件:指定讀取和寫入服務以及編輯引數。

    • 屬性:指定屬性的型別、子型別和格式。 您也可以指定選取的屬性是否為資料模型物件的主索引鍵。

    • 服務:指定服務的輸入模型物件、輸出型別和引數。 對於Get服務,您可以指定是否預期它會傳回陣列。

      edit-properties-service
      取得服務的「編輯內容」對話方塊

  3. 點選 完成 以儲存屬性,然後 儲存 以儲存表單資料模型。

建立計算屬性

計算屬性是根據規則或運算式計算其值的屬性。 您可以使用規則將計算屬性的值設定為常值字串、數字、數學運算式的結果或表單資料模型中其他屬性的值。

例如,您可以建立計算屬性 全名 其值是串連現有 名字姓氏 屬性。 若要這麼做:

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

  2. 啟用 已計算 並點選 完成 以建立屬性。

    已計算

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

    computedprop

  3. 選取FullName屬性並點選 編輯規則. 規則編輯器視窗隨即開啟。

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

    從選取選項下拉式清單中選取 數學運算式. 其他可用選項包括 表單資料模型物件字串.

  5. 在數學運算式中,選取 名字姓氏 分別位於第一和第二物件中。 選取 作為運運算元。

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

    單項規則

  6. 在表單資料模型上,點選 儲存. 已設定運算屬性。

使用OData服務的導覽屬性

在OData服務中,導覽屬性用於定義兩個資料模型物件之間的關聯。 這些屬性是在實體型別或複雜型別上定義的。 例如,在以下從範例的中繼資料檔案擷取中 旅行夾 OData範例服務,個人實體包含三個導覽屬性 — 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>

當您在表單資料模型中設定OData服務時,實體容器中的所有導覽屬性都可透過表單資料模型中的服務使用。 在此範例中,TripPin OData服務中 Person 實體容器可使用其中一種讀取 GET LINK 表單資料模型中的服務。

下列專案會重點說明 GET LINK of Person /People 表單資料模型中的服務,此服務是三個導覽屬性的組合服務。 Person TripPin OData服務的實體。

nav-prop-service

在新增 GET LINK 服務至「表單資料模型」中的「服務」標籤,您可以編輯屬性以選擇要在服務中使用的輸出模型物件和導覽屬性。 例如,下列專案 GET LINK of Person /People 下列範例中的服務會使用「運送航程」作為輸出模型物件,而瀏覽屬性則作為「運送航程」。

edit-prop-nav-prop

注意

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

在此範例中,您也可以選擇輸出模型物件作為Person,選擇導覽屬性引數作為Friends或BestFriend (取決於是否 傳回陣列? 啟用或停用)。

edit-prop-nav-prop2

同樣地,您也可以選擇 GET LINK 在表單資料模型中新增關聯時,服務並設定其導覽屬性。 不過,若要能夠選取導覽屬性,請確定 繫結至欄位 設為 常值.

add-association-nav-prop

產生和編輯範例資料

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

執行下列操作以產生和編輯範例資料:

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

    產生範例資料

  2. 編輯範例資料 視窗,視需要編輯資料,然後點選 儲存.

測試資料模型物件與服務

您的表單資料模型已設定,但在使用前,您可能想要測試已設定的資料模型物件和服務是否如預期般運作。 若要測試資料模型物件與服務:

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

    「測試表單資料模型」視窗隨即開啟。

    test-data-model

  2. 在 測試表單資料模型 視窗中,從「輸入」窗格選取要測試的資料模型物件或服務。

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

    測試結果

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

自動驗證輸入資料

表單資料模型會在叫用DermisBridge API時(根據表單資料模型中提供的驗證條件)驗證作為輸入所收到的資料。 驗證是根據 ValidationOptions 在用來叫用API的查詢物件中設定的旗標。

此旗標可設為下列任一值:

  • 完整:FDM會根據所有限制執行驗證
  • 關閉:無驗證
  • 基本:FDM會根據「必要」和「可為nullable」的限制來執行驗證

若未設定任何值 ValidationOptions標幟, 基本 對輸入資料執行驗證。

以下範例說明如何設定驗證標幟為 完整

operationOptions.setValidationOptions(ValidationOptions.FULL);
注意

您在輸入資料中為屬性提供的值必須與在中繼資料檔案中為屬性定義的資料型別相符。
如果值不符合為屬性定義的資料型別,DermisBridge API會顯示例外狀況,不論 ValidationOptions 標幟。 如果記錄層級設定為Debug,則會將錯誤記錄到 error.log 檔案。

表單資料模型會根據資料型別限制清單來驗證輸入資料。 輸入資料的限制清單可能會因資料來源而異。

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

限制 說明 輸入資料來源
必填 如果為true,則引數必須包含在輸入資料中。 Swagger、WSDL和資料庫
可為nullable 若為true,則可將輸入資料中的引數值設為Null。 WSDL、Odata和資料庫
最大值 指定數值的上限。 指定為上限的最大值也可以指派給輸入資料中的引數。 Swagger和WSDL
最小值 指定數值的下限。 指定為下限的最小值也可以指定給輸入資料中的引數。 Swagger和WSDL
exclusiveMaximum 指定數值的上限。 不得將指定為上限的最大值指派給輸入資料中的引數。 Swagger和WSDL
exclusiveMinimum 指定數值的下限。 不得將指定為下限的最小值指派給輸入資料中的引數。 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"
   }
   ]

如果輸入資料不符合驗證准則,則會顯示例外。 如果記錄層級設定為 偵錯,錯誤會記錄到 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)"]}}

後續步驟

您有一個工作表單資料模型,現在可以在調適型Forms中使用 工作流程。 如需詳細資訊,請參閱 使用表單資料模型.

本頁內容