例えば、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™に条件付きプログラミングを組み込む方が簡単です。
JEE Workbench の AEM Forms で使用可能な JEE サービス上の標準の AEM Forms のセットの中に Execute Script
サービスがあります。このサービスではプロセスでスクリプトの実行が可能で、そのための executeScript
操作を使用できます。
このチュートリアルでは、アプリケーションとプロセスの全体的な作成は範囲外ですが、この手順のために、「DemoApplication02」という名前のアプリケーションが作成されました。 アプリケーションが既に作成されている場合は、このアプリケーションでプロセスを作成して executeScript サービスを呼び出す必要があります。 Execute Script
サービスが含まれるアプリケーションにプロセスを追加するには以下の手順に従います。
executeScriptDemoProcess
という名前を付けました。Foundation
セットにあります。サービス名にこのオブジェクトが Execute Script – 1.0
として表示され、操作名には executeScript
と表示されます。この項目をクリックして選択します。「Execute Script」サービスアクティビティを定義してプロセスを作成すると、このプロセスにスクリプトを追加できるようになります。このプロセスにスクリプトを追加するには、以下の手順に従います。
プロセスプロパティパレットに移動します。このパレット内で、 入力 」セクションで、「。…」アイコンをクリックします。
表示されるテキストボックスに、スクリプトを記述します。スクリプトが記述されたら、[OK] を押します(下図を参照)。
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>