使用AEM Forms on JEE Workbench中的執行指令碼服務來建置XML資料 using-execute-script-service-forms-jee-workbench

JEE程式管理工作流程中AEM Forms涉及許多XML,例如:XML資訊可在程式中建置並傳送至JEE Workspace上AEM Forms的Flex應用程式,用於系統設定,或傳遞資訊至表單或從表單傳送。 在許多情況下,JEE上的AEM Forms開發人員需要管理XML,而且在許多情況下,這要求透過JEE上的AEM Forms管理XML。

處理簡單的XML設定時,您可以使用 Set Value 服務,這是JEE服務上的預設AEM Forms。 此服務會設定流程資料模型中一或多個資料專案的值。 對於簡單的條件邏輯「如果是,則是」情況,此服務可符合其目的。

但是,在更複雜的情況下,「設定值」服務不會那麼有效。 在這些情況下,您必須依賴一組更強大的程式設計指令,例如Java™等程式設計語言所提供的指令。 使用Java™來建置複雜的XML,比使用Set Value服務內的簡單文字建置XML檔案簡單明瞭。 此外,在Java™中納入條件式程式設計比在Set Value服務中更容易。

在程式中使用執行指令碼服務 using-execute-script-service-in-process

在AEM Forms on JEE Workbench提供的標準AEM Forms on JEE服務集合中, Execute Script 服務。 此服務可讓您在程式中執行指令碼,並提供 executeScript 操作完成。

使用定義為活動的「執行指令碼」服務建立應用程式和程式 create-an-application

在本教學課程中,整體應用程式和流程建立不在範圍之內,但就本指示而言,已建立名為「DemoApplication02」的應用程式。 假設應用程式已經建立,您需要在此應用程式中建立程式以呼叫executeScript服務。 若要將流程新增至應用程式,其中包含 Execute Script 服務:

  1. 以滑鼠右鍵按一下您的應用程式,然後選取 新增. 在 新增 滑出功能表,選取 程式. 為流程命名,視需要新增說明,然後選取要代表此流程的圖示。 出於本教學課程的目的,我們已建立一個流程,並將其命名為 executeScriptDemoProcess.
  2. 定義您的起點,或稍後新增起點的簡單選擇。
  3. 現在已建立流程,且應該會自動在 流程設計 視窗。 在此視窗中,按一下「流程設計」視窗頂端的「活動選擇器」圖示,並將新活動拖曳到泳道上。 此時, 定義活動視窗 應該會出現(請參閱下圖)。
    定義活動
  4. executeScript服務位於 Foundation 服務集。 「服務」名稱會將物件列為 Execute Script – 1.0 操作名稱 executeScript. 按一下以選取此專案。
  5. 現在應建立此程式,且預設為 程式屬性 視窗應該會出現在左側的窗格中。

使用「執行指令碼」服務將指令碼新增至處理序 add-script-to-process-with-execute-script

使用定義的「執行指令碼」服務活動建立處理序後,就可以將指令碼新增至此處理序。 若要將指令碼新增至此程式:

  1. 導覽至 程式屬性 調色盤。 在此浮動視窗中,展開 輸入 區段,然後按一下「……」圖示。

  2. 在出現的文字方塊中寫入您的指令碼。 編寫指令碼後,請按[確定] (請參閱下圖)。
    執行指令碼

使用Execute Script Service建立XML create-xml-execute-script-service

一旦建立包含Execute Script服務的處理序後,就可以使用此指令碼來建立XML。 您可以使用將指令碼新增至處理序中所述的文字方塊來撰寫以下所述的指令碼 Execute Script 「服務」一節。

關於執行指令碼服務的技術

若要瞭解Execute Script服務的功能和限制,必須瞭解服務的技術基礎。 JEE上的AEM Forms使用Apache Xerces檔案物件模型(DOM)剖析器,在程式中建立和儲存XML變數。 Xerces是W3C檔案物件模型規格的Java™實作;已定義 此處. DOM規格是操作XML的標準方法,自1998年以來就已存在。 Xerces的Java™實作Xerces-J支援DOM Level 2 1.0版。

用來儲存XML變數的Java™類別為:

  • org.apache.xerces.dom.NodeImpl和

  • org.apache.xerces.dom.DocumentImpl

DocumentImpl是NodeImpl的子類別,因此可以假設任何XML處理變數都是NodeImpl衍生。 您可以找到NodeImpl的檔案 此處.

使用Execute Script服務建立範例XML

以下是在Execute Script服務中建立XML的範例。 處理序具有型別為XML的變數節點。 此活動的結果為XML檔案。 此檔案有何作用,或如何套用至整個程式,已超出本教學課程的範圍;最終將取決於在整個應用程式中需要XML做什麼。 如簡介中所述,XML可用於AEM Forms中JEE表單和程式的許多用途,這僅是說明如何編寫執行指令碼活動代碼以輸出簡單的XML檔案。

輸出XML的簡單JavaScript如下所示:

import org.apache.xerces.dom.DocumentImpl;

import org.w3c.dom.Document;

import org.w3c.dom.Element;



Document document = new DocumentImpl();

Element topLevelResources = document.createElement("resources");

Element resource = document.createElement("resource");

resource.setAttribute("id", "first item id");

resource.setAttribute("value", "first item value");

topLevelResources.appendChild(resource);

document.appendChild(topLevelResources);

patExecContext.setProcessDataValue("/process_data/node", document);
NOTE
先前提到的DOM物件必須匯入指令碼中。

此簡單指令碼的結果是新XML檔案,其中變數節點設為:

<resources>

<resource id="first item id" value="first item value"/>

</resources>

使用反複回圈將節點新增至XML

節點也可以加入至流程中的現有XML變數。 變數(節點)包含已建立的XML物件。

Document document = patExecContext.getProcessDataValue("/process_data/node");

NodeList childNodes = document.getChildNodes();

int numChildren = childNodes.getLength();

for (int i = 0; i < numChildren; i++)

{

Node currentChild = childNodes.item(i);

if (currentChild.getNodeType() == Node.ELEMENT_NODE)

{

// found the top-level node

Element newResource = document.createElement("resource");

newResource.setAttribute("id", "second item id");

newResource.setAttribute("value", "second item value");

currentChild.appendChild(newResource);

break;

}

}

patExecContext.setProcessDataValue("/process_data/node", document);
The variable node in the XML is now set to:

<resources>

<resource id="first item id" value="first item value"/>

<resource id="second item id" value="second item value"/>

</resources>
recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2