エージェント UI を使用してインタラクティブ通信の準備と送信を行う prepare-and-send-interactive-communication-using-the-agent-ui
エージェント UI を使用してインタラクティブ通信の準備を行い、後処理用として送信することができます。エージェントは、許可設定に基づいて必要な変更を行い、メールの送信や印刷出力などの後処理用としてインタラクティブ通信を送信します。
概要 overview
インタラクティブ通信を作成したら、エージェントを使用してそのインタラクティブ通信をエージェント UI で開き、データ入力と、コンテンツや添付ファイルの管理を行って、受信者固有のコピーを作成することができます。その後、エージェントにより、後処理用としてインタラクティブ通信を送信することができます。
エージェント UI を使用してインタラクティブ通信の準備を行う際に、以下に示すインタラクティブ通信の構成要素が、エージェントによりエージェント UI で管理されます。その後、インタラクティブ通信が後処理用に送信されます。
- データ:エージェント UI の「データ」タブには、インタラクティブ通信でエージェントを使用して編集できる変数とロック解除されたフォームデータモデルプロパティが表示されます。これらの変数とプロパティは、インタラクティブ通信内のドキュメントフラグメントの編集時または作成時に生成されます。「データ」タブには、XDP テンプレートまたは印刷チャネルテンプレートに組み込まれているフィールドも表示されます。「データ」タブが表示されるのは、エージェントを使用して編集できる変数、フォームデータモデルプロパティまたはフィールドが、インタラクティブ通信内に含まれている場合だけです。
- コンテンツ:エージェントにより、「コンテンツ」タブに表示される各種コンテンツ(インタラクティブ通信内のドキュメントフラグメントやコンテンツ変数など)が管理されます。エージェントは、ドキュメントフラグメントのプロパティを使用してインタラクティブ通信を作成する際に、許可設定に従って、そのドキュメントフラグメントを変更します。また、許可されている場合は、ドキュメントフラグメントの並べ替え、追加、削除、改ページの追加も、エージェントによって実行されます。
- 添付ファイル:エージェント UI で「添付ファイル」タブが表示されるのは、インタラクティブ通信にファイルが添付されている場合と、エージェントがライブラリにアクセスする場合だけです。エージェントに対して添付ファイルの変更と編集が許可されている場合もあれば、許可されていない場合もあります。
エージェント UI を使用したインタラクティブ通信の準備 prepare-interactive-communication-using-the-agent-ui
-
フォーム/フォームとドキュメント を選択します。
-
目的のインタラクティブ通信を選択して「エージェント UI を開く」を選択します。
note note NOTE エージェント UI が機能するのは、選択したインタラクティブ通信に印刷チャネルが含まれている場合だけです。 インタラクティブ通信のコンテンツとプロパティに基づいて、エージェント UI に、「データ」タブ、「コンテンツ」タブ、「添付ファイル」タブという 3 つのタブが表示されます。
次に、データの入力、コンテンツの管理、添付ファイルの管理を行います。
データを入力 enter-data
-
「データ」タブで、変数、フォームデータモデルプロパティ、印刷テンプレート(XDP)のフィールドのデータを、必要に応じて入力します。アスタリスク(*)の付いた必須フィールドをすべて入力し、「送信」ボタンを有効にします。
インタラクティブ通信のプレビュー画面でデータフィールドの値を選択すると、対応するデータフィールドが「データ」タブでハイライト表示されます(その逆も同様です)。
コンテンツの管理 manage-content
「コンテンツ」タブで、インタラクティブ通信内のドキュメントフラグメントやコンテンツ変数などのコンテンツを管理します。
-
「コンテンツ」を選択します。インタラクティブ通信の「コンテンツ」タブが表示されます。
-
必要に応じて、「コンテンツ」タブでドキュメントフラグメントを編集します。コンテンツ階層内の関連するフラグメントにフォーカスするには、インタラクティブ通信のプレビュー画面で関連する行や段落を選択するか、コンテンツ階層内で目的のフラグメントを直接選択します。
例えば、以下のプレビュー画面で、「Make a payment online now …」という行が含まれているドキュメントフラグメントを選択すると、「コンテンツ」タブでも同じドキュメントフラグメントが選択されます。
「コンテンツ」タブまたは「データ」タブで、プレビューの左上にある「コンテンツ内の選択したモジュールをハイライト表示」( )をタップすると、関連するテキスト、段落またはデータフィールドがプレビュー画面でタップまたは選択されたときにドキュメントフラグメントに移動する機能の有効と無効を切り替えることができます。
インタラクティブ通信の作成時にエージェントによって編集できるフラグメントには、「選択したコンテンツを編集」アイコン( )が表示されます。このアイコンを選択すると、フラグメントが編集モードで表示され、フラグメントを編集できるようになります。テキストの書式設定と管理を行うには、以下のオプションを使用します。
エージェント UI で各種のドキュメントフラグメントを操作する方法については、エージェント UI で使用できる操作と情報を参照してください。
-
インタラクティブ通信の印刷出力に改ページを追加するには、改ページを追加する位置にカーソルを置き、「直前に改ページ」または「直後に改ページ」を選択します( )。
インタラクティブ通信に、改ページのプレースホルダーが明示的に挿入されます。改ページの明示的な挿入によって変化したインタラクティブ通信の外観を確認するには、印刷プレビューを表示します。
次に、インタラクティブ通信の添付ファイルの管理を行います。
添付ファイルを管理 manage-attachments
-
「添付ファイル」を選択します。エージェント UI に、インタラクティブ通信の作成時に設定可能な添付ファイルが表示されます。
インタラクティブ通信と共に添付ファイルを送信しない場合は、ビューアイコンをタップします。添付ファイルに表示されている削除アイコン(X マーク)を選択すると、インタラクティブ通信から添付ファイルが削除されます(エージェントによる添付ファイルの削除または非表示が許可されている場合)。インタラクティブ通信の作成時に必須ファイルとして指定された添付ファイルの場合、ビューアイコンと削除アイコンは無効になります。
-
ライブラリアクセス( )アイコンを選択してコンテンツライブラリにアクセスし、添付ファイルとして DAM アセットを挿入します。
note note NOTE ライブラリアクセスアイコンを使用できるのは、インタラクティブ通信の作成時に、印刷チャンネルの「ドキュメントコンテナ」プロパティでライブラリへのアクセスを有効にした場合だけです。 -
インタラクティブ通信の作成時に、添付ファイルの順序をロックしなかった場合は、添付ファイルを選択して上下の矢印をタップすると、添付ファイルの順序を変更することができます。
-
Web プレビューと印刷プレビューを使用して、2 つの出力が正しく作成されているかどうかを確認します。
プレビューの表示内容に問題がない場合は、「送信」を選択して、インタラクティブ通信を後処理用に送信します。さらに変更を行う場合は、プレビュー画面を終了して変更画面に戻ります。
テキストの書式設定 formattingtext
エージェント UI でテキストフラグメントを編集する場合、選択した編集のタイプ(フォント、段落、リスト)に応じて、表示されるツールバーが異なります。
フォントツールバー
段落ツールバー
リストツールバー
テキストの一部をハイライト表示または強調表示 highlightemphasize
編集可能なフラグメント内のテキストの一部をハイライト表示または強調表示するには、目的のテキストを選択して、ハイライト表示の色を選択します。
書式設定されたテキストの貼り付け pasteformattedtext
テキストに特殊文字を挿入 specialcharacters
エージェント UI では、210 個の特殊文字がサポートされています。管理者は、カスタマイズすることで特殊文字を増やしたり、カスタムの特殊文字を追加したりすることができます。
添付ファイルの配信 attachmentdelivery
- サーバーサイドの API を使用して、インタラクティブ通信をインタラクティブ PDF または非インタラクティブ PDF としてレンダリングすると、レンダリング後の PDF に PDF ファイルが添付されます。
- エージェント UI を使用して、インタラクティブ通信に関連付けられた後処理を送信処理の一部としてロードすると、添付ファイルが List<com.adobe.idp.Document> inAttachmentDocs パラメーターとして渡されます。
- メールや印刷などの配信メカニズムワークフローにより、PDF 版のインタラクティブ通信と共に添付ファイルも配信されます。
エージェント UI で使用できるアクションと情報 actionsagentui
ドキュメントフラグメント document-fragments
- 上矢印と下矢印:上矢印と下矢印を使用して、インタラクティブ通信内のドキュメントフラグメントを上下に移動することができます。
- 削除:インタラクティブ通信からドキュメントフラグメントを削除します(削除が許可されている場合)。
- 直前に改ページ:(ターゲット領域の子フラグメントで使用可能)ドキュメントフラグメントの直前に改ページが挿入されます。
- インデント:ドキュメントフラグメントのインデントを増減します。
- 直後に改ページ(ターゲット領域の子フラグメントで使用可能):ドキュメントフラグメントの直後に改ページが挿入されます。
-
編集(テキストフラグメントの場合のみ):テキストドキュメントフラグメントを編集するためのリッチテキストエディターが起動します。詳しくは、テキストのフォーマットを参照してください。
-
選択(目のアイコン):インタラクティブ通信にドキュメントフラグメントを含めたり、インタラクティブ通信からドキュメントフラグメントを除外したりすることができます。
-
未入力値:ドキュメントフラグメントの未入力変数の数が表示されます。これは、表示専用情報です。
リストドキュメントフラグメント list-document-fragments
- 空白行を挿入: 空白行を新たに挿入します。
- 選択(目のアイコン):インタラクティブ通信にドキュメントフラグメントを含めたり、インタラクティブ通信からドキュメントフラグメントを除外したりすることができます。
- 箇条書き/番号付けをスキップ:リストドキュメントフラグ内で、箇条書きまたは番号付けをスキップする場合に有効にします。
- 未入力値:ドキュメントフラグメントの未入力変数の数が表示されます。これは、表示専用情報です。
インタラクティブ通信をドラフトとして保存 save-as-draft
エージェント UI を使用して、各インタラクティブ通信の 1 つ以上のドラフトを保存し、後でそのドラフトを取得して、作業を続行できます。それぞれのドラフトに異なる名前を指定して、識別しやすくすることができます。
インタラクティブ通信をドラフトとして正常に保存するために、これらの手順を順番に実行することをお勧めします。
ドラフトとして保存機能の有効化 before-save-as-draft
ドラフトとして保存機能は、デフォルトでは有効になっていません。この機能を有効にするには、次の手順を実行します。
-
ccrDocumentInstance サービスプロバイダーインターフェイス(SPI)を実装します。
SPI を使用すると、インタラクティブ通信のドラフトバージョンを、固有の識別子としてドラフト ID を指定したうえで、データベースに保存できます。これらの手順は、Maven プロジェクトを使用して OSGi バンドルをビルドする方法に関する基本知識があることを前提としています。
SPI の実装例について詳しくは、ccrDocumentInstance SPI の実装例を参照してください。
-
http://<hostname>:<port>/ system/console/bundles
を開き、「インストール/更新」を選択して OSGi バンドルをアップロードします。アップロードされたパッケージのステータスが アクティブ と表示されていることを確認します。パッケージのステータスが アクティブ と表示されない場合は、サーバーを再起動します。 -
https://'[server]:[port]'/system/console/configMgr
にアクセスします。 -
「通信設定を作成」を選択します。
-
「CCRDocumentInstanceService を使用した保存を有効にする」を選択し、「保存」を選択します。
インタラクティブ通信をドラフトとして保存 save-as-draft-agent-ui
インタラクティブ通信をドラフトとして保存するには、次の手順を実行します。
-
Forms Manager でインタラクティブ通信を選択し、「エージェント UI を開く」を選択します。
-
エージェント UI で必要な変更を行い、「ドラフトとして保存」を選択します。
-
ドラフトの名前を「名前」フィールドに指定し、「完了」を選択します。
インタラクティブ通信をドラフトとして保存したら、「変更を保存」を選択して、ドラフトに対するその他の変更内容を保存します。
インタラクティブ通信のドラフトの取得 retrieve-draft
インタラクティブ通信をドラフトとして保存した後、その通信を取得して作業を続行できます。以下を使用してインタラクティブ通信を取得します。
https://server:port/aem/forms/createcorrespondence.hmtl?draftid=[draftid]
[draftid] とは、インタラクティブ通信をドラフトとして保存した後に生成されるドラフトバージョンの固有の識別子を指します。
ccrDocumentInstance SPI の実装例 sample-ccrDocumentInstance-spi
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
操作が実装例でデータベースサービスを呼び出す方法を示しています。
次に、実装の一部である 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 にアップデートしてください。