| Oracle® Fusion Middleware Oracle WebCenter Content: Imagingの開発 11gリリース1 (11.1.1) B72422-04 |
|
![]() 前 |
![]() 次 |
この章の内容は次のとおりです。
Imaging APIはドキュメントのメタデータとドキュメントのコンテンツの両方を更新するためのDocumentService.updateDocument操作を提供します。この操作はDocumentContentService.uploadDocument操作から返されるuploadTokenと、フィールド値の変更が含まれるFieldValueインスタンスのリストの両方を受け入れます。これらのパラメータのいずれか、または両方が提供されますが、これは、更新がフィールド値のみの更新の場合と、ドキュメントのコンテンツのみの更新の場合と、フィールド値とコンテンツの両方の更新の場合があることを意味します。この章の最後にある例7-1に、ここで説明するトピックのサンプル・コードを示します。
Imagingアプリケーションでのドキュメントの作成更新は2段階のプロセスです。最初の手順で、ドキュメントのバイナリ・データはDocumentContentService.uploadDocument操作を使用してImagingサーバーにアップロードされます。この操作により、固有のアップロード・トークンが返され、これを使用して以降のDocumentService.updateDocumentへのコールが行われて、アプリケーションにドキュメントの索引が作成されます。このuploadTokenは、ユーザーがログアウトするか、createDocumentまたはupdateDocumentコールに使用されるまで有効です。一度しか使用されない場合もあります。
Imaging APIのDocument.FieldValueクラスは、ドキュメントの索引付けの際にドキュメントのメタデータを提供するために使用されます。FieldValuesは、Document.FieldValueインスタンスのjava.util.Listとして、udpateDocumentに渡されます。リストのFieldValueはそれぞれ、アプリケーションのFieldDefinitionにマップされます。
Document.FieldValueオブジェクトは、NameId定義クラスがアプリケーション・フィールド定義にマッピングするようフィールドIDまたはフィールド名によって定義できるという点で、NameId定義クラスと同様に機能します。この両方が指定される場合、名前値ではなくID値が使用されます。
Document.FieldValueには、値のプロパティも含まれます。この値の型はフィールド定義のImaging FieldTypeと互換性がある必要があります。Imagingの値のタイプは、使用されるJavaタイプによって自動的に決定します。次の表に、Imagingのフィールド・タイプと互換性のあるJavaタイプの対応を示します。
| Imagingのフィールド・タイプ | Javaタイプ |
|---|---|
| FieldType.Date | java.util.Date、java.util.GregorianCalendar |
| FieldType.Decimal | java.math.BigDecimal、float、decimal |
| FieldType.Number | Integer、Long, |
| FieldType.Text | String |
表内では、太字のJavaタイプは、FieldTypeに関連付けられたネイティブ・タイプです。FieldValueは、表内の他のタイプをネイティブ・タイプに強制的に変更します。強制プロセスにおいて値の精度が失われる場合があるため、ネイティブ・タイプ以外のタイプを使用する際には注意が必要です。
FieldValuesをupdateDocumentとともに使用する場合、リストは、ドキュメントのアプリケーションで定義されたすべてのフィールドを含む必要はありません。変更が必要なフィールド値のみ指定する必要があります。また、ドキュメントを更新するときには、指定されていないフィールドは無視されます。必須と定義されていないフィールドについては、リストにFieldValueを含め、その値をnullに設定することにより、値を故意にnullにすることもできます。これを実行する場合、FieldValueは、Javaタイプnullに基づいて必要なフィールド・タイプを決定できないため、Imaging FieldTypeを受け入れるFieldValueコンストラクタを使用する必要があります。
例7-1は、このセクションで説明した基本概念を示しています。
例7-1 ドキュメント更新の例
package devguidesamples;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import oracle.imaging.BasicUserToken;
import oracle.imaging.Document;
import oracle.imaging.DocumentContentService;
import oracle.imaging.DocumentService;
import oracle.imaging.ImagingException;
import oracle.imaging.NameId;
import oracle.imaging.RenderOptions;
import oracle.imaging.RenderPage;
import oracle.imaging.RenderResult;
import oracle.imaging.Rendition;
import oracle.imaging.Search;
import oracle.imaging.SearchArgument;
import oracle.imaging.SearchService;
import oracle.imaging.SearchValue;
import oracle.imaging.ServicesFactory;
import oracle.imaging.TypedValue;
import oracle.imaging.UserToken;
public class UpdateDocumentSample {
public static void main(String[] args)
throws IOException {
try { // try-catch
UserToken credentials = new BasicUserToken("ipmuser", "ipmuserpwd");
ServicesFactory servicesFactory =
ServicesFactory.login(credentials, Locale.US, "http://ipmhost:16000/imaging/ws");
try { // try-finally to ensure logout
SearchService searchService = servicesFactory.getSearchService();
DocumentService docService = servicesFactory.getDocumentService();
DocumentContentService docContentService =
servicesFactory.getDocumentContentService();
// The find the document with invoice number 1234 using the Invoices search
List<SearchArgument> searchArguments = new ArrayList<SearchArgument>();
SearchValue searchValue = new SearchValue(SearchValue.Type.NUMBER, 1234);
SearchArgument searchArgument = new SearchArgument("Invoice Number", searchValue);
searchArgument.setOperatorValue(Search.Operator.EQUAL);
searchArguments.add(searchArgument);
Search.ResultSet resultSet =
searchService.executeSavedSearch(new NameId("Invoices"), searchArguments);
if (resultSet.getTotalResults() == 0) {
System.out.println("Document not found");
}
String documentId = resultSet.getResults().get(0).getDocumentId();
// update field values only.
List<Document.FieldValue> fieldValues = new ArrayList<Document.FieldValue>();
fieldValues.add(new Document.FieldValue("Amount", new BigDecimal("99.95")));
docService.updateDocument(documentId, null, fieldValues, false);
// update document content
String fileName = "C:/PathToImages/NewInvoice1234.tif";
DataHandler fileData = new DataHandler(new FileDataSource(fileName));
String uploadToken = docContentService.uploadDocument(fileData, "invoice1234.tif");
docService.updateDocument(documentID, uploadToken, null, false);
// update field values and document content at once
fieldValues = new ArrayList<Document.FieldValue>();
fieldValues.add(new Document.FieldValue("Receive Date", new Date())); //now
fileName = "C:/PathToImages/AnotherNewInvoice1234.tif";
fileData = new DataHandler(new FileDataSource(fileName));
uploadToken = docContentService.uploadDocument(fileData, "invoice1234.tif");
docService.updateDocument(documentID, uploadToken, fieldValues, false);
}
finally {
if (servicesFactory != null) {
servicesFactory.logout();
}
}
}
catch (ImagingException e) {
System.out.println(e.getMessage());
}
}
}