エージェント UI を使用すると、エージェントはインタラクティブ通信を準備し、後処理に送信できます。 エージェントは、許可されている必要な変更を行い、インタラクティブ通信を電子メールや印刷などの後処理に送信します。
インタラクティブ通信を作成したら、エージェントを使用してそのインタラクティブ通信をエージェント UI で開き、データ入力と、コンテンツや添付ファイルの管理を行って、受信者固有のコピーを作成することができます。その後、エージェントにより、後処理用としてインタラクティブ通信を送信することができます。
エージェント UI を使用してインタラクティブ通信の準備を行う際に、以下に示すインタラクティブ通信の構成要素が、エージェントによりエージェント UI で管理されます。その後、インタラクティブ通信が後処理用に送信されます。
フォーム/フォームとドキュメントを選択します。
目的のインタラクティブ通信を選択して「エージェント UI を開く」をタップします。
エージェント UI が機能するのは、選択したインタラクティブ通信に印刷チャネルが含まれている場合だけです。
インタラクティブ通信のコンテンツとプロパティに基づいて、エージェント UI に、「データ」タブ、「コンテンツ」タブ、「添付ファイル」タブという 3 つのタブが表示されます。
次に、データの入力、コンテンツの管理、添付ファイルの管理を行います。
「データ」タブで、必要に応じて、変数、フォームデータモデルのプロパティ、印刷テンプレート (XDP) フィールドのデータを入力します。 アスタリスク(*)の付いた必須フィールドをすべて入力し、「送信」ボタンを有効にします。
インタラクティブ通信のプレビューでデータフィールドの値をタップして、「データ」タブで対応するデータフィールドをハイライト表示するか、逆にハイライト表示します。
「コンテンツ」タブでは、インタラクティブ通信内のドキュメントフラグメントやコンテンツ変数などのコンテンツを管理します。
「コンテンツ」を選択します。インタラクティブ通信の「コンテンツ」タブが表示されます。
必要に応じて、「コンテンツ」タブでドキュメントフラグメントを編集します。コンテンツ階層内の関連するフラグメントにフォーカスするには、インタラクティブ通信のプレビュー画面で関連する行や段落をタップするか、コンテンツ階層内で目的のフラグメントを直接タップします。
例えば、以下のプレビュー画面で、「Make a payment online now …」という行が含まれているドキュメントフラグメントを選択すると、「コンテンツ」タブでも同じドキュメントフラグメントが選択されます。
「コンテンツ」タブまたは「データ」タブで、プレビューの左上にある「コンテンツ内の選択したモジュールをハイライト表示」()をタップすると、関連するテキスト、段落またはデータフィールドがプレビュー画面でタップまたは選択されたときにドキュメントフラグメントに移動する機能の有効と無効を切り替えることができます。
インタラクティブ通信の作成時にエージェントによって編集できるフラグメントには、「選択したコンテンツを編集」するためのアイコン()が表示されます。「選択したコンテンツを編集」アイコンをタップして、フラグメントを編集モードで起動し、変更を加えます。 テキストの書式設定と管理には、次のオプションを使用します。
エージェント UI で各種のドキュメントフラグメントを操作する方法については、エージェント UI で使用できる操作と情報を参照してください。
インタラクティブ通信の印刷出力に改ページを追加するには、改ページを追加する位置にカーソルを置き、「直前に改ページ」または「直後に改ページ」を選択します()。
インタラクティブ通信に、改ページのプレースホルダが明示的に挿入されます。 明示的な改ページがインタラクティブ通信に与える影響を確認するには、印刷プレビューを参照してください。
インタラクティブ通信の添付ファイルの管理に進みます。
「添付ファイル」を選択します。エージェント UI に、インタラクティブ通信の作成時に設定可能な添付ファイルが表示されます。
インタラクティブ通信と共に添付ファイルを送信しない場合は、ビューアイコンをタップします。添付ファイルに表示されている削除アイコン(「X」アイコン)をタップすると、インタラクティブ通信から添付ファイルが削除されます(エージェントによる添付ファイルの削除または非表示が許可されている場合)。インタラクティブ通信の作成時に必須ファイルとして指定された添付ファイルの場合、ビューアイコンと削除アイコンは無効になります。
ライブラリアクセス()アイコンをタップしてコンテンツライブラリにアクセスし、添付ファイルとして DAM アセットを挿入します。
ライブラリアクセスアイコンを使用できるのは、インタラクティブ通信の作成時に、印刷チャンネルの「ドキュメントコンテナ」プロパティでライブラリへのアクセスを有効にした場合だけです。
インタラクティブ通信の作成時に、添付ファイルの順序をロックしなかった場合は、添付ファイルを選択して上下の矢印をタップすると、添付ファイルの順序を変更することができます。
Web プレビューと印刷プレビューを使用して、2 つの出力が正しく作成されているかどうかを確認します。
プレビューの表示内容に問題がない場合は、「送信」をタップして、インタラクティブ通信を後処理用に送信します。さらに変更を行う場合は、プレビュー画面を終了して変更画面に戻ります。
エージェント UI でテキストフラグメントを編集する際、選択した編集の種類に応じて、ツールバーが変わります。フォント、段落、またはリスト:
フォントツールバー
段落ツールバー
リストツールバー
編集可能なフラグメント内のテキストの一部をハイライト表示または強調するには、テキストを選択して「ハイライトの色」をタップします。
エージェント UI には、210 個の特殊文字に対するサポートが組み込まれています。 管理者は、カスタマイズすることで特殊文字を増やしたり、カスタムの特殊文字を追加したりすることができます。
編集(テキストフラグメントの場合のみ):テキストドキュメントフラグメントを編集するためのリッチテキストエディターが起動します。詳しくは、テキストのフォーマットを参照してください。
選択(目のアイコン):インタラクティブ通信にドキュメントフラグメントを含めたり、インタラクティブ通信からドキュメントフラグメントを除外したりすることができます。
未入力値:ドキュメントフラグメントの未入力変数の数が表示されます。これは、表示専用情報です。
エージェント UI を使用して、各インタラクティブ通信の 1 つ以上のドラフトを保存し、後でそのドラフトを取得して、作業を続行できます。それぞれのドラフトに異なる名前を指定して、識別しやすくすることができます。
インタラクティブ通信をドラフトとして正常に保存するために、これらの手順を順番に実行することをお勧めします。
ドラフトとして保存機能は、デフォルトでは有効になっていません。この機能を有効にするには、次の手順を実行します。
ccrDocumentInstance サービスプロバイダーインターフェイス(SPI)を実装します。
SPI を使用すると、インタラクティブ通信のドラフトバージョンを、固有の識別子としてドラフト ID を指定したうえで、データベースに保存できます。これらの手順は、Maven プロジェクトを使用して OSGi バンドルをビルドする方法に関する基本知識があることを前提としています。
SPI の実装例について詳しくは、ccrDocumentInstance SPI の実装例を参照してください。
http://<hostname>:<port>/ system/console/bundles
を開き、「インストール/更新」をタップして OSGi バンドルをアップロードします。アップロードされたパッケージのステータスがアクティブと表示されていることを確認します。パッケージのステータスがアクティブと表示されない場合は、サーバーを再起動します。
https://'[server]:[port]'/system/console/configMgr
にアクセスします。
「通信設定の作成」をタップします。
「CCRDocumentInstanceService を使用した保存を有効にする」を選択し、「保存」をタップします。
インタラクティブ通信をドラフトとして保存するには、次の手順を実行します。
Forms Manager でインタラクティブ通信を選択し、「エージェント UI を開く」をタップします。
エージェント UI で必要な変更を行い、「ドラフトとして保存」をタップします。
ドラフトの名前を名前フィールドに指定し、「完了」をタップします。
インタラクティブ通信をドラフトとして保存したら、「変更を保存」をタップして、ドラフトに対するその他の変更内容を保存します。
インタラクティブ通信をドラフトとして保存した後、その通信を取得して作業を続行できます。以下を使用してインタラクティブ通信を取得します。
https://server:port/aem/forms/createcorrespondence.hmtl?draftid=[draftid]
[draftid] とは、インタラクティブ通信をドラフトとして保存した後に生成されるドラフトバージョンの固有の識別子を指します。
ccrDocumentInstance
SPI を実装し、インタラクティブ通信をドラフトとして保存します。ccrDocumentInstance
SPI の実装例は次のとおりです。
package Implementation;
import com.adobe.fd.ccm.ccr.ccrDocumentInstance.api.exception.CCRDocumentException;
import com.adobe.fd.ccm.ccr.ccrDocumentInstance.api.model.CCRDocumentInstance;
import com.adobe.fd.ccm.ccr.ccrDocumentInstance.api.services.CCRDocumentInstanceService;
import org.apache.commons.lang3.StringUtils;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
@Component(service = CCRDocumentInstanceService.class, immediate = true)
public class CCRDraftService implements CCRDocumentInstanceService {
private static final Logger logger = LoggerFactory.getLogger(CCRDraftService.class);
private HashMap<String, Object> draftDataMap = new HashMap<>();
@Override
public String save(CCRDocumentInstance ccrDocumentInstance) throws CCRDocumentException {
String documentInstanceName = ccrDocumentInstance.getName();
if (StringUtils.isNotEmpty(documentInstanceName)) {
logger.info("Saving ccrData with name : {}", ccrDocumentInstance.getName());
if (!CCRDocumentInstance.Status.SUBMIT.equals(ccrDocumentInstance.getStatus())) {
ccrDocumentInstance = mySQLDataBaseServiceCRUD(ccrDocumentInstance,null, "SAVE");
}
} else {
logger.error("Could not save data as draft name is empty");
}
return ccrDocumentInstance.getId();
}
@Override
public void update(CCRDocumentInstance ccrDocumentInstance) throws CCRDocumentException {
String documentInstanceName = ccrDocumentInstance.getName();
if (StringUtils.isNotEmpty(documentInstanceName)) {
logger.info("Saving ccrData with name : {}", documentInstanceName);
mySQLDataBaseServiceCRUD(ccrDocumentInstance, ccrDocumentInstance.getId(), "UPDATE");
} else {
logger.error("Could not save data as draft Name is empty");
}
}
@Override
public CCRDocumentInstance get(String id) throws CCRDocumentException {
CCRDocumentInstance cCRDocumentInstance;
if (StringUtils.isEmpty(id)) {
logger.error("Could not retrieve data as draftId is empty");
cCRDocumentInstance = null;
} else {
cCRDocumentInstance = mySQLDataBaseServiceCRUD(null, id,"GET");
}
return cCRDocumentInstance;
}
@Override
public List<CCRDocumentInstance> getAll(String userId, Date creationTime, Date updateTime,
Map<String, Object> optionsParams) throws CCRDocumentException {
List<CCRDocumentInstance> ccrDocumentInstancesList = new ArrayList<>();
HashMap<String, Object> allSavedDraft = mySQLGetALLData();
for (String key : allSavedDraft.keySet()) {
ccrDocumentInstancesList.add((CCRDocumentInstance) allSavedDraft.get(key));
}
return ccrDocumentInstancesList;
}
//The APIs call the service in the database using the following section.
private CCRDocumentInstance mySQLDataBaseServiceCRUD(CCRDocumentInstance ccrDocumentInstance,String draftId, String method){
if(method.equals("SAVE")){
String autoGenerateId = draftDataMap.size() + 1 +"";
ccrDocumentInstance.setId(autoGenerateId);
draftDataMap.put(autoGenerateId, ccrDocumentInstance);
return ccrDocumentInstance;
}else if (method.equals("UPDATE")){
draftDataMap.put(ccrDocumentInstance.getId(), ccrDocumentInstance);
return ccrDocumentInstance;
}else if(method.equals("GET")){
return (CCRDocumentInstance) draftDataMap.get(draftId);
}
return null;
}
private HashMap<String, Object> mySQLGetALLData(){
return draftDataMap;
}
}
save
、update
、get
および getAll
の操作はそれぞれ、データベースサービスを呼び出して、インタラクティブ通信をドラフトとして保存、インタラクティブ通信の更新、データベースからデータを取得、データベースで使用可能なすべてのインタラクティブ通信のデータ取得を行います。この例では、mySQLDataBaseServiceCRUD
をデータベースサービスの名前として使用します。
次の表では、ccrDocumentInstance
SPI の実装例を説明しています。具体的には、save
、update
、get
および getAll
操作が実装例でデータベースサービスを呼び出す方法を示しています。
操作 |
データベースサービスの例 |
インタラクティブ通信のドラフトを作成するか、直接送信することができます。保存操作用の API は、インタラクティブ通信がドラフトとして送信され、ドラフト名が含まれているかどうかを確認します。次に API は、Save を入力メソッドとして mySQLDataBaseServiceCRUD サービスを呼び出します。 ![]() |
mySQLDataBaseServiceCRUD サービスは、Save を入力メソッドとして検証し、自動生成されたドラフト ID を生成して AEM に返します。ドラフト ID を生成するロジックは、データベースに応じて異なる場合があります。 ![]() |
更新操作用の API は、インタラクティブ通信のドラフトのステータスを取得し、インタラクティブ通信にドラフト名が含まれているかどうかを確認します。API は mySQLDataBaseServiceCRUD サービスを呼び出して、データベース内のそのステータスを更新します。 ![]() |
mySQLDataBaseServiceCRUD サービスは、Update を入力メソッドとして検証し、インタラクティブ通信のドラフトのステータスをデータベースに保存します。 ![]() |
GET 操作の API は、インタラクティブ通信にドラフト ID が含まれているかどうかを確認します。 次に、API は、GET を入力メソッドとして mySQLDataBaseServiceCRUD サービスを呼び出し、インタラクティブ通信のデータを取得します。 ![]() |
mySQLDataBaseServiceCRUD サービスは、GET を入力メソッドとして検証し、ドラフト ID に基づいてインタラクティブ通信のデータを取得します。 ![]() |
getAll 操作の API は、mySQLGetALLData サービスを呼び出して、データベースに保存されているすべてのインタラクティブ通信のデータを取得します。 ![]() |
mySQLGetALLData サービスは、データベースに保存されているすべてのインタラクティブ通信のデータを取得します。 ![]() |
次に、実装の一部である pom.xml
ファイルの例をご紹介します。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.adobe.livecycle</groupId>
<artifactId>draft-sample</artifactId>
<version>2.0.0-SNAPSHOT</version>
<name>Interact</name>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>com.adobe.aemfd</groupId>
<artifactId>aemfd-client-sdk</artifactId>
<version>6.0.160</version>
</dependency>
</dependencies>
<!-- ====================================================================== -->
<!-- B U I L D D E F I N I T I O N -->
<!-- ====================================================================== -->
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.3.0</version>
<extensions>true</extensions>
<executions>
<!--Configure extra execution of 'manifest' in process-classes phase to make sure SCR metadata is generated before unit test runs-->
<execution>
<id>scr-metadata</id>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<exportScr>true</exportScr>
<instructions>
<!-- Enable processing of OSGI DS component annotations -->
<_dsannotations>*</_dsannotations>
<!-- Enable processing of OSGI metatype annotations -->
<_metatypeannotations>*</_metatypeannotations>
<Bundle-SymbolicName>${project.groupId}-${project.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>autoInstall</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.sling</groupId>
<artifactId>maven-sling-plugin</artifactId>
<executions>
<execution>
<id>install-bundle</id>
<phase>install</phase>
<goals>
<goal>install</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
必ず pom.xml
ファイルの aemfd-client-sdk
依存関係を 6.0.160 にアップデートしてください。