シナリオ:API を使用したポートフォリオの作成

このシナリオでは、Correspondence Management Solution Accelerator API を使用してポートフォリオを作成する方法について説明します。

ポートフォリオの作成に使用される Correspondence Management オブジェクト

ポートフォリオの作成に使用される主な Java オブジェクトを次に示します。

  • ドキュメントオブジェクト - com.adobe.icc.dbforms.obj.PortfolioDocument

  • フォルダーオブジェクト - com.adobe.icc.dbforms.obj.PortfolioFolder

  • ポートフォリオオブジェクト - com.adobe.icc.dbforms.obj.Portfolio

これらのオブジェクトは、カテゴリ、レターなど、Correspondence Management の管理対象の他のアセットを参照します。

ドキュメントオブジェクトの作成

ドキュメントオブジェクトは、次のようにコンストラクター PortfolioDocument を指定して作成することもできます。

public PortfolioDocument(String id, String name, String desc, String comment, int state, DocumentSource docSource, byte[] docContent, String docReference, Category ucat, Category lcat, int version, Date activeStartDate, Date activeEndDate, String lastChangeBy, String mimeType)

また、PortfolioDocument の setter メソッドを使用して、オブジェクトの別のプロパティを設定することもできます。ポートフォリオのドキュメントには、ファイルのドキュメント、または Correspondence Management システム内に作成された通信レターのドキュメントを指定できます。PortfolioDocument クラスのパラメーターをいくつか使用することで、この 2 つのドキュメントのどちらでも作成できます。作成されるドキュメントオブジェクトの種類を指定するパラメーターを次に示します。

  • DocumentSource:ファイルとレターのどちらからドキュメントオブジェクトを作成するかを指定します。したがって、値は DocumentSource.FILE または DocumentSource.LETTER のどちらかを取ります。

  • DocumentReference:DocumentSource がファイルの場合に NULL に設定されます。それ以外の場合は、新しいドキュメントオブジェクトのレター ID を参照します。

  • DocumentContent:DocumentSource がレターの場合に NULL に設定されます。DocumentSource がファイルの場合は、PDF ファイルのバイト配列を参照します。

次のコードスニペットは、portfolioDocument の作成方法を示しています。

PortfolioDocument doc = new PortfolioDocument(); 
doc.setActiveEndDate(getDate()); 
doc.setActiveStartDate(getDate()); 
doc.setComment("Sample document"); 
doc.setDesc("Sample document"); 
doc.setDocContent(getdocumentContent()); 
doc.setDocReference(null); 
doc.setDocSource(DocumentSource.FILE); 
doc.setLcat(subCategoryObject); 
doc.setUcat(categoryObject); 
doc.setName(documentName); 
doc.setState(iState); 
doc.setVersion(0);

ポートフォリオの作成中、ドキュメントをフォルダー構造で整理するには、PortfolioFolder オブジェクトを作成します。portfolioDocument と同様に、コンストラクターか別の setter メソッドのいずれかを使用できます。

public PortfolioFolder(String id, String name, String desc, List<PortfolioFolder> subFolders, List<PortfolioDocument> documents) 

最後に、ポートフォリオオブジェクトが、フォルダーオブジェクトおよびドキュメントを使用して作成され、CM の管理対象の他のアセットを参照します。

public Portfolio(String id, String name, String desc, String comment, int state, Category ucat, Category lcat, int version, Date activeStartDate, Date activeEndDate, String lastChangeBy, PortfolioDocument navigator, PortfolioDocument cover, PortfolioFolder rootFolder) 

ポートフォリオコンストラクターには、前述のとおり特別なドキュメントが 2 つあります。

  • ナビゲーター:ドキュメントオブジェクトは、ポートフォリオのナビゲーション用のアドビ特有のファイル形式(.nav)を使用して作成されます。

  • 表紙:ポートフォリオの表紙として設定されるドキュメントオブジェクト。

注意: ポートフォリオを作成する際には、ナビゲーター、表紙およびソースドキュメントが必要です。

ポートフォリオの作成およびレンダリング

ポートフォリオを作成するには、次の操作を実行します。

  1. ナビゲーター、表紙、その他のソースドキュメントなど、様々なドキュメントオブジェクトを作成し、永続化します。

  2. ドキュメントを適切に関連付けることで、ポートフォリオオブジェクトを作成し、永続化します。

  3. ポートフォリオをレンダリングします。

ドキュメントオブジェクトの作成および永続化

ポートフォリオに必要なドキュメントオブジェクトを作成します。

/* Creating a document object for the Navigator */ 
PortfolioDocument navDoc = new PortfolioDocument(); 
navDoc.setActiveEndDate(getDate()); 
navDoc.setActiveStartDate(getDate()); 
navDoc.setComment("Navigator document"); 
navDoc.setDesc("Navigator document"); 
navDoc.setDocContent(getdocumentContent()); 
navDoc.setDocReference(null); 
navDoc.setDocSource(DocumentSource.FILE); 
navDoc.setLcat(getCategoryObject("SubCategory",1)); 
navDoc.setUcat(getCategoryObject("MainCategory",0)); 
navDoc.setName("SampleNavigator"); 
navDoc.setState(0); 
navDoc.setVersion(0);

説明:

  • getDate() は、現在の日付を返すカスタムメソッドです。

  • getdocumentContent(String docSource) もカスタムメソッドです。これは、ファイルコンテンツをバイト配列として返します。

  • getCategoryObject(String categoryName, int categoryType) は、カテゴリオブジェクトを返すカスタムメソッドです。

同様に、表紙ドキュメントオブジェクト coverDoc を作成します。

/* Creating a document object from a Letter */ 
PortfolioDocument ltrDoc = new PortfolioDocument(); 
ltrDoc.setActiveEndDate(getDate()); 
ltrDoc.setActiveStartDate(getDate()); 
ltrDoc.setComment("Sample document"); 
ltrDoc.setDesc("Sample document"); 
ltrDoc.setDocContent(null); 
ltrDoc.setDocReference(getLetterID("SampleLetter",0)); 
ltrDoc.setDocSource(DocumentSource.LETTER); 
ltrDoc.setLcat(getCategoryObject("SubCategory",1)); 
ltrDoc.setUcat(getCategoryObject("MainCategory",0)); 
ltrDoc.setName("SampleDocFromLetter"); 
ltrDoc.setState(0); 
ltrDoc.setVersion(0);
注意: getLetterID(String LetterName, int State) は、レター ID を返すカスタムメソッドです。

ドキュメントの navDoc、coverDoc および ltrDoc オブジェクトが作成されますが、まだ永続化されていません。永続化するには、Correspondence Management API の createDocument() を使用します。

public PortfolioDocument createDocument(PortfolioDocument document)

このメソッドは、document オブジェクトを引数として取り、それを永続化します。このメソッドは、Content Space での参照に使用される ID を持つ PortfolioDocument オブジェクトを返します。

作成されたドキュメントオブジェクトを永続化します。

/* Persisting the document objects */ 
navDoc = documentService.createDocument(navDoc); 
coverDoc = documentService.createDocument(coverDoc); 
ltrDoc = documentService.createDocument(ltrDoc);

これで、これらのアセットは、次の activateDocument API を使用してアクティベートできます。

public PortfolioDocument activateDocument(String documentID, boolean updateDependencies)

ポートフォリオオブジェクトの作成

作成された様々なドキュメントを関連付けるポートフォリオオブジェクトを作成します。

/* Creating the portfolio object */ 
Portfolio pf = new Portfolio(); 
pf.setName("SamplePortfolio"); 
pf.setActiveEndDate(getDate()); 
pf.setActiveStartDate(getDate()); 
pf.setComment("Sample portfolio"); 
pf.setDesc("Sample portfolio "); 
pf.setLcat(getCategoryObject("SubCategory",1)); 
pf.setUcat(getCategoryObject("MainCategory",0)); 
pf.setState(0); 
pf.setVersion(0); 
pf.setNavigator(navDoc); 
pf.setCover(coverDoc); 
/* Create the folders and associate the documents with it */ 
PortfolioFolder folder = new PortfolioFolder(); 
List<PortfolioDocument> docList = new ArrayList<PortfolioDocument>(); 
docList.add(ltrDoc); 
folder.setName("root"); 
folder.setSubFolders(null); 
folder.setDesc("root folder"); 
folder.setDocuments(docList); 
pf.setRootFolder(folder);

ポートフォリオオブジェクトを作成し、すべてのプロパティを設定したので、次は、createPortfolio API を使用してそのオブジェクトを永続化します。

public Portfolio createPortfolio(Portfolio portfolio)

ポートフォリオオブジェクトを永続化します。

/* Persisting the portfolio object */ 
pf = portfolioService.createPortfolio(pf);

PortfolioDocument と同様、activatePortfolio() API を使用して、ポートフォリオアセットをアクティベートします。

public Portfolio activatePortfolio(String portfolioID)

ポートフォリオオブジェクトのレンダリング

ポートフォリオの必要なすべてのアセットおよびポートフォリオオブジェクト自体を作成したので、次はポートフォリオをレンダリングします。Correspondence Management は、次の API を提供します。

public PDFResponseType renderPortfolio(Portfolio portfolio, String dataXML)

このメソッドは、portfolio オブジェクトと dataXML を引数として取り、PDFResponseType オブジェクトを返します。このオブジェクトからポートフォリオを抽出して保存できます。

データ XML は、ドキュメントをレターから作成する場合に使用されます。データ XML は、いくつかのデータディクショナリ要素を順番に参照します。ポートフォリオがレンダリングされると、XML データを使用して解決されるデータディクショナリ要素へのすべての参照を使用してレタードキュメントがレンダリングされます。

注意: ポートフォリオのレタードキュメントは、対話的にのみレンダリングできます。レターとレンダリングの統合は使用できません。

このコードスニペットは、最終出力のポートフォリオオブジェクトをレンダリングする方法、およびローカルディスクに保存できるポートフォリオファイルを抽出する方法を示しています。

byte[] pdfDoc = null; 
PDFResponseType resp = portfolioRenderService.renderPortfolio(pf, xmlData); 
pdfDoc = resp.getFile().getDocument();