JEE Workbench 上の AEM Forms の Execute Script サービスを使用した XML データの作成

最終更新日: 2023-11-08
  • 作成対象:
  • User

例えば、JEE 上のAEM Forms Process Management ワークフローには、XML 情報がプロセス内で構築され、JEE Workspace のFlexアプリケーションに送信され、システム設定に使用されたり、フォームとの間で情報を渡したりする XML が多く含まれています。 JEE 上の AEM Forms 開発者による XML の管理が必要となるインスタンスは多くありますが、そのうちの多くで、XML を JEE プロセス上の AEM Forms で管理する必要があります。

単純な XML 設定を扱う場合、Set Value サービスを使用することができます。これは JEE サービス上のデフォルトの AEM Forms です。プロセスデータモデルの 1 つ以上のデータ項目の値を設定します。単純な条件ロジック「if this, the」のシナリオの場合、このサービスは目的に合う場合があります。

しかし、より複雑な状況では、Set Value サービスはそれほど有効ではありません。このような状況では、Java™のようなプログラミング言語で提供されるコマンドなど、より堅牢なプログラミングコマンドのセットに依存する必要があります。 Set Value サービス内の単純なテキストから XML ドキュメントを作成するよりも、Java™を使用して複雑な XML を作成する方がはるかに簡単で明確です。 さらに、Set Value サービス内よりも Java™に条件付きプログラミングを組み込む方が簡単です。

プロセスでの Execute Script サービスの使用

JEE Workbench の AEM Forms で使用可能な JEE サービス上の標準の AEM Forms のセットの中に Execute Script サービスがあります。このサービスではプロセスでスクリプトの実行が可能で、そのための executeScript 操作を使用できます。

「スクリプトを実行」サービスをアクティビティとして定義したアプリケーションとプロセスの作成

このチュートリアルでは、アプリケーションとプロセスの全体的な作成は範囲外ですが、この手順のために、「DemoApplication02」という名前のアプリケーションが作成されました。 アプリケーションが既に作成されている場合は、このアプリケーションでプロセスを作成して executeScript サービスを呼び出す必要があります。 Execute Script サービスが含まれるアプリケーションにプロセスを追加するには以下の手順に従います。

  1. アプリケーションを右クリックし、「 」を選択します。 新規. 新規​スライドアウトメニューで​プロセス​を選択します。プロセスに名前を付け、必要に応じて説明を追加し、このプロセスを表すアイコンを選択します。 このチュートリアル用に、プロセスを作成し、executeScriptDemoProcessという名前を付けました。
  2. スタートポイントを定義するか、後でスタートポイントを追加するよう指定してください。
  3. これでプロセスが作成され、 プロセスデザインウィンドウで自動的に開きます。このウィンドウで、Process Design ウィンドウの上部にある Activity Picker アイコンをクリックし、新しいアクティビティをスイムレーンにドラッグします。 この時点で、アクティビティを定義ウィンドウが表示されます(下図を参照)。
    アクティビティを定義
  4. executeScript サービスは、 サービスの Foundation セットにあります。サービス名にこのオブジェクトが Execute Script – 1.0 として表示され、操作名には executeScript と表示されます。この項目をクリックして選択します。
  5. このプロセスが作成され、デフォルトではプロセスのプロパティウィンドウが左側のパネルに表示されます。

「Execute Script」サービスを使用したプロセスへのスクリプトの追加

「Execute Script」サービスアクティビティを定義してプロセスを作成すると、このプロセスにスクリプトを追加できるようになります。このプロセスにスクリプトを追加するには、以下の手順に従います。

  1. プロセスプロパティパレットに移動します。このパレット内で、 入力 」セクションで、「。…」アイコンをクリックします。

  2. 表示されるテキストボックスに、スクリプトを記述します。スクリプトが記述されたら、[OK] を押します(下図を参照)。
    Execute Script

Execute Script サービスを使用した XML の作成

Execute Script サービスを含むプロセスが作成されたら、このスクリプトを使用して XML を作成できます。上の「Execute Scriptサービスを使用したプロセスへのスクリプトの追加」の節で説明されたテキストボックスで、以下のスクリプトを記述できます。

Execute Script サービスのテクノロジーについて

Execute Script サービスの能力と制限を知るには、サービスの技術的基盤を知る必要があります。 JEE 上の AEM Forms は、Apache Xerces ドキュメントオブジェクトモデル(DOM)パーサーを使用して、プロセス内で XML 変数を作成し、保存します。Xerces は、W3C の Document Object Model 仕様の Java™実装で、定義済み ここ. DOM 仕様は XML を操作する標準的な方法で、1998 年から存在します。Xerces の Java™実装 Xerces-J は、DOM Level 2 version 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 は JEE 上の AEM Forms のプロセスで多くの目的に使用できます。ここでは、単純な 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);
メモ

前述の DOM オブジェクトをスクリプトに読み込む必要があります。

この単純なスクリプトの結果は、次のように変数ノードが設定された新しい XML ドキュメントになります。

<resources>

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

</resources>

反復ループを使用した XML へのノードの追加

ノードは、プロセス内の既存の XML 変数にも追加できます。変数 node は、作成された 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>

このページ