ヘッダーをスキップ
Oracle® WebCenter Content Imaging開発者ガイド
11g リリース1 (11.1.1)
B72422-01
  ドキュメント・ライブラリへ移動
ライブラリ
目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 ドキュメントの更新

この章の内容は次のとおりです。

7.1 ドキュメントの更新について

Imaging APIには、ドキュメントのメタデータとドキュメントのコンテンツの両方を更新するためのDocumentService.updateDocument操作が用意されています。この操作は、DocumentContentService.uploadDocument操作から返されたuploadTokenと、フィールド値の変更を含むFieldValueインスタンスのリストの両方を受入れます。これらのパラメータのどちらか、または両方が提供されます。これは更新されるのが、フィールド値のみであるか、ドキュメントのコンテンツのみであるか、またはフィールド値とコンテンツの両方であるかを表します。この章の最後にある例7-1に、ここで説明するトピックのサンプル・コードを示します。

7.2 改訂されたドキュメント・コンテンツのアップロード

Imagingアプリケーションでドキュメントのコンテンツを更新する手順は2つのステップに分かれています。最初の手順では、DocumentContentService.uploadDocument操作を使用して、ドキュメントのバイナリ・データをImagingサーバーにアップロードします。この操作は一意のアップロード・トークンを戻します。このトークンは続けて、DocumentService.updateDocumentのコールに使用され、アプリケーションにこのドキュメントを索引付けします。このuploadTokenは、ユーザーがログアウトするまで、またはcreateDocumentコールかupdateDocumentコールで使用されるまで有効です。uploadTokenを使用できるのは1回のみです。

7.3 ドキュメントのメタデータの更新

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.4 ドキュメント更新の例

例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());
      }
   }
}