フォームの送信処理
最終更新日: 2025年4月2日
- 適用対象:
- Experience Manager 6.4
- Experience Manager 6.5
作成対象:
- 経験者
- 開発者
AEM Forms 6.5
このパートでは、AEM パブリッシュで実行され、HTML5 フォームの送信を処理するシンプルなサーブレットを作成します。このサーブレットは、送信されたデータを AEM オーサーのリポジトリ内の nt:file
ノードとして保存する役割を担う AEM オーサーインスタンスで実行されているサーブレットに HTTP POST リクエストを送信します。
HTML5 送信を処理するサーブレットのコードを以下に示します。このサーブレットでは、AEM オーサーインスタンスの /bin/startworkflow にマウントされたサーブレットに対して POST 呼び出しを行います。このサーブレットは、フォームデータを AEM オーサーのリポジトリに保存します。
AEM パブリッシュサーブレット
次のコードは、HTML5 フォームの送信を処理します。このコードは、パブリッシュインスタンスで実行されます。
package com.aemforms.mobileforms.core.servlets;
import com.aemforms.mobileforms.core.configuration.service.AemServerCredentialsConfigurationService;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.Servlet;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
@Component(service={Servlet.class}, property={"sling.servlet.methods=post", "sling.servlet.paths=/bin/handleformsubmission"})
public class HandleFormSubmission extends SlingAllMethodsServlet implements Serializable {
private static final long serialVersionUID = 1L;
private final transient Logger logger = LoggerFactory.getLogger(this.getClass());
@Reference
AemServerCredentialsConfigurationService aemServerCredentialsConfigurationService;
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
logger.debug("In do POST of bin/handleformsubmission");
ByteArrayOutputStream result = new ByteArrayOutputStream();
try {
ServletInputStream is = request.getInputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
logger.debug(result.toString(StandardCharsets.UTF_8.name()));
} catch (IOException e1) {
logger.error("An error occurred", e1);
}
String postURL = aemServerCredentialsConfigurationService.getWorkflowServer();
logger.debug("The url to invoke workflow is "+postURL);
HttpPost postReq = new HttpPost(postURL);
// This is the base64 encoding of the admin credentials. This call should be made over HTTPS in production scenarios to avoid leaking credentials.
String userName = aemServerCredentialsConfigurationService.getUserName();
String password = aemServerCredentialsConfigurationService.getPassword();
String credential = userName+":"+password;
String encodedString = Base64.getEncoder().encodeToString(credential.getBytes());
postReq.addHeader("Authorization", "Basic "+encodedString);
System.out.println("The encoded string is "+"Basic "+encodedString);
CloseableHttpClient httpClient = HttpClients.createDefault();
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
logger.debug("added url parameters");
try {
urlParameters.add(new BasicNameValuePair("xmlData", result.toString(StandardCharsets.UTF_8.name())));
postReq.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse httpResponse = httpClient.execute(postReq);
logger.debug("Sent request to author instance");
String startWorkflowResponse = EntityUtils.toString(httpResponse.getEntity());
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.write(startWorkflowResponse);
} catch (IOException e) {
logger.error("An error occurred", e);
}
}
}
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 ロケーターを設定し、関連する設定を実行する手順