AEM ワークフローでの変数値のログ記録
最終更新日: 2025年3月27日
- 適用対象:
- Experience Manager 6.5
- トピック:
- アダプティブフォーム
作成対象:
- 初心者
- 開発者
変数の値をログ記録することは、ソフトウェア開発では一般的な方法です。これは、開発者が AEM ワークフローの実行方法をトラックして理解し、問題を診断し、AEM ワークフロー内のデータフローを監視するのに役立ちます。
カスタムプロセスステップに関連付けられた次のコードは、FormDataModel タイプを除くすべてのタイプの変数の値をログ記録します。
package com.variablelogger.core;
import com.adobe.aemfd.docmanager.Document;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.adobe.granite.workflow.model.VariableTemplate;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
@Component(property = {
Constants.SERVICE_DESCRIPTION + "=Log workflow process variables",
Constants.SERVICE_VENDOR + "=Adobe Systems",
"process.label" + "=Log workflow process variables"
})
public class LogWorkflowVariables implements WorkflowProcess {
Logger log = LoggerFactory.getLogger(this.getClass());
private void writeListOfString(String[] stringArray)
{
for (int i = 1; i <= stringArray.length; i++)
{
log.debug("Got String " + stringArray[i]);
}
}
private void writeListOfDocuments(Object[] documentsArray)
{
log.debug(" Got "+documentsArray.length+" files to write to file system");
for(int i=0;i<documentsArray.length;i++)
{
Document attachment = (Document) documentsArray[i];
try
{
String[] path = attachment.getAttribute("adobe.docmanager.attribute.filename").toString().split("/");
log.debug("The attachment name is "+ path[1]);
attachment.copyToFile(new File(path[1]));
attachment.close();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
private void writeDocument(Document documentToWrite,String key)
{
log.debug(" Writing Document "+key);
if (documentToWrite!=null)
{
try
{
documentToWrite.copyToFile(new File(key + ".pdf"));
documentToWrite.close();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException
{
log.debug("Logging variable info for "+ workItem.getWorkflow().getWorkflowModel().getTitle()+" workflow ");
log.debug("Logging variable info for payload path "+ workItem.getWorkflowData().getPayload().toString());
MetaDataMap metaMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
Map <String,com.adobe.granite.workflow.model.VariableTemplate>variableTemplateMap = workItem.getWorkflow().getWorkflowModel().getVariableTemplates();
Iterator<String> templateIterator = variableTemplateMap.keySet().iterator();
while(templateIterator.hasNext())
{
String key = templateIterator.next();
VariableTemplate vt = variableTemplateMap.get(key);
log.debug("The variable "+key+" is of type "+vt.getType()+" and its sub type is "+vt.getSubType());
if(vt.getType().equalsIgnoreCase("com.adobe.aemfd.docmanager.Document"))
{
Document documentToWrite = metaMap.get(key, Document.class);
if(documentToWrite!=null)
writeDocument((Document) metaMap.get(key),key);
}
if(vt.getType().equalsIgnoreCase("java.util.ArrayList"))
{
if(vt.getSubType().equalsIgnoreCase("com.adobe.aemfd.docmanager.Document"))
{
log.debug("Got Array List " + key);
Document[] documentsArray = metaMap.get(key, Document[].class);
if(documentsArray!=null)
writeListOfDocuments(documentsArray);
}
if(vt.getSubType().equalsIgnoreCase("java.lang.String"))
{
log.debug("Got Array List of Strings " + key);
String[] stringArray = metaMap.get(key, String[].class);
if(stringArray!=null)
writeListOfString(stringArray);
}
}
if(vt.getType().equalsIgnoreCase("java.util.Date"))
{
log.debug("Got Date "+key);
java.util.Date dateVariable = metaMap.get(key,java.util.Date.class);
if(dateVariable!=null)
log.debug("The value of "+key+ " is " +dateVariable.toString());
}
if(vt.getType().equalsIgnoreCase("java.lang.Boolean"))
{
log.debug("Got Boolean "+key);
Boolean booleanVariable = metaMap.get(key,java.lang.Boolean.class);
if(booleanVariable!=null)
log.debug("The value of "+key+" is "+String.valueOf(booleanVariable));
}
if(vt.getType().equalsIgnoreCase("org.w3c.dom.Document"))
{
log.debug("Got XML Document "+key);
String xmlDocument = metaMap.get(key,String.class);
if(xmlDocument!=null)
log.debug("The value of xml Document is "+xmlDocument);
}
if( (vt.getType().equalsIgnoreCase("com.google.gson.JsonObject") )|| (vt.getType().equalsIgnoreCase("java.lang.String")))
{
log.debug("Got String/Json variable");
if(metaMap.get(key)!=null)
log.debug("The value of "+key+" is "+metaMap.get(key));
}
}
log.debug("Finished logging variable info for "+ workItem.getWorkflow().getWorkflowModel().getTitle()+" workflow ");
log.debug("Finished logging variable info for payload path "+ workItem.getWorkflowData().getPayload().toString());
}
}
ドキュメントは、AEM サーバーインストールのルートフォルダーに保存されます。
サンプルバンドルをデプロイ
Felix web コンソールを使用して、変数ロガーバンドルをデプロイします。
このバンドルを AEM ワークフローのプロセスステップに関連付けて、String 変数と Document 変数の値をログ記録します。
Experience Manager
- 概要
- 従うべきベストプラクティス
- AEM オーサーとの OKTA 認証の設定
- 最初のアダプティブフォームの作成
- フォーム送信の処理
- 便利な統合
- OSGi バンドルの作成
- アダプティブフォーム
- Windows への AEM Forms のインストール
- Linux への 32 ビットパッケージのインストール
- アダプティブフォームでの事前入力サービス
- クエリパラメーターを使用してアダプティブフォームに入力する
- AEM Forms の QR コード
- アダプティブフォームでのカスタム送信
- アダプティブフォームの Captcha
- ルールエディターでのカスタム関数
- Web ページへのアダプティブフォームの埋め込み
- 文字列の配列を作成
- AEM Forms の項目読み込みパス
- OSGi ワークフローで XML の Set Value を使用する
- OSGi ワークフローで JSON での Set Value を使用する
- AEM Forms ワークフローでメールコンポーネントを送信
- API を使用した DocumentOfRecord を生成
- インライン画像の表示
- DAM 画像をインラインで表示する
- GeoLocation API の使用
- トランザクションレポートの使用
- AEM Forms でユーザープロファイルデータを統合
- Microsoft Dynamics とAEM Forms
- ルールエディターの機能強化
- ルールエディターへのアクセスの制限
- テーマエディターの機能強化
- フォームエディターの機能強化
- アダプティブフォームの自動テスト
- アダプティブフォームの自動テスト
- LDAP と AEM Forms の統合
- AEM Forms でのサービスユーザーの使用
- アダプティブフォーム送信時の DoR のタグ付けと保存
- フォームデータモデルサービス呼び出し結果のテーブルへの入力
- ワークフローコメントの取り込み
- 送信されたフォームデータの DB への格納
- DB へのフォーム添付ファイルの挿入
- データソース設定の変更
- フォームデータモデルのプロパティの上書き
- AEM 6.4 ワークフローのフォームデータモデルサービス
- フォームデータモデルサービス手順でのエラーメッセージの処理
- AEM 6.5.1 ワークフローのフォームデータモデルサービス
- データソースを使用しないフォームデータモデル
- 計算されたフォームデータモデルの要素
- AEM Forms での JDBC データソースの設定
- JDBC ベースのフォームデータモデル
- フォームデータモデル内の 2 つのエンティティ間に関連付けを作成する
- ルールエディターでのフォームデータモデルの呼び出しサービスの使用
- フォームデータモデルを使用した AEM DAM へのバイナリデータの投稿
- 再利用可能なワークフローモデルの作成
- AEM Workflow カスタムプロセス手順
- HTML5 Forms の事前入力
- Salesforce を使用したフォームデータモデル
- 選択コンポーネントへの項目の動的な追加
- ChatBot を使用した PDF フォームへの入力
- コア - コンポーネントベースのフォーム
- DAM フォルダーコンテンツの選択とアセンブリ
- フォームデータモデルを使用したアダプティブフォームの事前入力
- UI のヒントとテクニック
- インボックスのカスタマイズ
- メールフォームの添付ファイル
- データと添付ファイルのフォームへの事前入力
- アダプティブフォームの保存と取得
- PDF ファイルからデータを読み込み
- 送信したデータの CSV 形式での書き出し
- HTML5 Forms
- AEM Forms と Acrobat Sign
- 複数フォームへの署名
- カスタムワークフローの手順
- カスタムワークフローコンポーネント
- AEM ワークフローの変数
- フォームデータの確認
- MySQL DB でのフォームデータの格納と取得
- PDF フォーム送信での AEM ワークフローのトリガー
- モバイルフォーム送信での AEM ワークフローのトリガー
- フォーム送信のクエリ
- フォームポータルでのカスタムアセットタイプのリスト
- AEM Forms と Marketo
- AEM Forms と Adobe Campaign Standard
- ウェルカムキット
- ヘッドレスフォーム API
- Forms と Acrobat Sign を使用した React アプリ
- ドキュメントサービス
- PDF forms のタイプ
- アダプティブフォームに PDF を埋め込む
- PDF のカルーセルコンポーネント内
- AEM Forms での Assembler サービスの使用
- Assembler サービスでの XDP のステッチ
- AEM Forms の監視フォルダーの使用
- AEM Forms でのバーコードサービスの使用
- AEM Formsでの PDFG サービスの使用
- 権限パスワードでの PDF の暗号化
- AEM Forms での Output と Forms Service の使用
- 出力サービスでの xdp フラグメントの使用
- フラグメントを使用して PDF を生成する ECMA スクリプト
- 1 つのデータファイルからの複数の PDF の生成
- モバイルフォーム送信時に PDF を生成
- フォーム送信に基づいてコアコンポーネントの PDF を生成
- モバイルフォームからインタラクティブ PDF を生成
- アダプティブフォームからインタラクティブ DoR を生成
- Reader 拡張機能資格情報の設定
- XDP レンディションの PDF への使用権限の適用
- アップロードされた PDF への使用権限の適用
- ドキュメントの認証
- フォーム添付ファイルのアセンブリ
- 便利なユーティリティサービス
- Forms Designer
- AEM Forms Workbench
- 印刷チャネル用のインタラクティブ通信
- ドラフトレターの保存と取得
- インタラクティブ通信
- Web チャネルのインタラクティブ通信
- トラブルシューティング
- ドキュメントサービス:DDX 関連の問題のトラブルシューティング手順
- ドキュメントサービス:PDFA 変換の問題のトラブルシューティング手順
- ドキュメントサービス:Forms と出力サービスのフォント関連の問題をデバッグする方法
- ドキュメントサービス:Forms と出力サービスでフォントを埋め込む方法
- ドキュメントサービス:Forms と出力サービスをデバッグするためのパフォーマンスログを有効にする方法
- ドキュメントサービス:大きなファイルを変換する際に、トランザクションタイムアウトを長くする方法
- ドキュメントサービス:FormsIVS および OutputIVS を使用して読み込みテストを実行する方法
- ドキュメントサービス:FormsIVS および OutputIVS でカスタム XDP およびデータファイルを更新する方法
- ドキュメントサービス:詳細 ORB トレースを有効にする手順
- ドキュメントサービス:XMLFormService の bmc プールサイズを調整する手順(パート 1)
- ドキュメントサービス:XMLFormService の bmc プールサイズを調整する手順(パート 2)
- ドキュメントサービス:JMX コンソールでパラメーターを調整する手順
- 大きな xml データファイルとテンプレートのマージを有効にする
- PDFG:PDFG でのトランザクションタイムアウトの変更方法
- PDFG:PDFG での CORBA タイムアウトの更新方法
- PDFG:PDFG でのタイムアウトの更新方法
- PDFG:Windows Server 2016 で PDFG ユーザーを追加する手順
- PDFG:32 ビットライブラリとその依存関係を確認してインストールする手順
- PDFG:Windows Server 2016 でフォルダー権限を確認する手順
- PDFG:UNIX で Strace を有効にする手順
- PDFG:必要な 32 ビット Microsoft Visual C++ 再配布可能パッケージをインストールする手順
- PDFG:System Readiness Tool の出力を実行および解釈する手順
- PDFG:Acrobat 固有の問題のトラブルシューティング手順
- PDFG:Windows での HtmltoPDF の問題のトラブルシューティング手順
- PDFG:UNIX(PhantomJS)での HtmltoPDF 固有の問題のトラブルシューティング手順
- PDFG:UNIX(WebKit 変換)での HtmltoPDF 固有の問題のトラブルシューティング手順
- PDFG:UNIX でのマルチユーザー PDFG 変換のトラブルシューティング手順
- PDFG:Windows でのマルチユーザー PDFG 変換のトラブルシューティング手順
- PDFG:UNIX での OpenOffice 固有の問題のトラブルシューティング手順
- PDFG:Windows での OpenOffice 固有の問題のトラブルシューティング手順
- ドキュメントセキュリティ:Acrobat でドキュメントセキュリティモジュールを使用して作成したポリシーを適用する方法
- User Management:AEM Forms JEE でユーザーまたはグループを追加する方法
- User Management:UM セッションタイムアウトを増やす方法
- Workbench:https を使用した Workbench への接続
- Workbench:ヘルプメニューからの Workbench ログの収集
- Workbench:Workbench のデバッグ出力を有効にする方法
- Workbench:Workbench のメモリパラメーターの調整方法
- Workbench:Workbench パフォーマンスパラメーターの調整方法
- Designer:C++ 再頒布可能パッケージに対する Designer の依存関係
- Designer:HTML プレビューを有効にする方法
- Designer:PDF プレビューを有効にする方法
- Designer:Designer パッチのインストール方法
- JEE Foundation:エントロピーの値を変更する方法
- JEE Foundation:AEM Forms JEE の任意のサービスのトランザクションタイムアウトを変更する方法
- JEE Foundation:ジョブマネージャーテーブルからプロセスレコードをパージする方法
- JEE Foundation:コマンドラインからプロセスのパージを実行する方法
- JEE Foundation:手動で Bootstrap を実行する手順
- JEE Foundation:モバイルフォームのデバッグログを取り込む手順
- JEE Foundation:ForcedDisconnectException を軽減する手順
- 一般:JBoss Admin Console 用の管理ユーザーの追加方法
- 一般:HAR ログの取得方法
- 一般:UNIX サーバーで JVM のヒープダンプを取得する方法
- 一般:Windows サーバーで JVM のヒープダンプを取得する方法
- 一般:ネットワークログの取得方法
- 一般:UNIX サーバーで JVM のスレッドダンプを取得する方法
- 一般:Windows サーバーで JVM のスレッドダンプを取得する方法
- 一般:自己署名証明書を生成する方法
- 一般:Web サービスを HTML5 フォームから呼び出す方法
- 一般:AEM Forms OSGi の任意のクラスのデバッグログを有効にする手順
- 一般:JBOSS アプリケーションサーバーの任意のクラスのデバッグログを有効にする手順
- 一般:Websphere アプリケーションサーバーの任意のクラスのデバッグログを有効にする手順
- 一般:AEM Forms OSGi で SSL を有効にする手順
- 一般:lc_turnkey.xml で使用するキーストアパスワードを暗号化する手順
- 一般:Steps-to-reset-default-password-for-users-in-AEM-Forms-JEE
- 一般:Steps-to-reset-default-password-for-users-in-AEM-Forms-OSGI
- 一般:クラスターで GemFire ロケーターを設定し、関連する設定を実行する手順