サムネイルの操作
以下のコード例は、サムネイル関連の操作を示しています。 サムネイルの概要については、「サムネイルの概念」を参照してください。
サブスクリプションの作成
以下の Java™ および C# の例では、イベントに基づくサムネイルの生成を示します。 コードは、CmThumbnailGenerationSubscription インスタンスを作成します。サブスクリプションは、MIME タイプが pdf または Microsoft Word の新規ドキュメントと Document クラスまたはサブクラスのチェックイン済みバージョンに対して実行されます。
Java の例
// CmThumbnailGenerationSubscription のインスタンスを作成する
CmThumbnailGenerationSubscription sub = Factory.CmThumbnailGenerationSubscription.createInstance(os, "CmThumbnailGenerationSubscription");
sub.set_DisplayName("Event-based thumbnail subscription");
sub.set_SubscriptionTarget(Factory.ClassDefinition.getInstance(os, GuidConstants.Class_Document));
sub.set_IncludeSubclassesRequested(Boolean.TRUE);
sub.set_IsEnabled(Boolean.TRUE);
sub.set_IsSynchronous(Boolean.TRUE);
// CheckinEvent を使用する必要がある
SubscribedEventList sel = Factory.SubscribedEvent.createList();
SubscribedEvent se = Factory.SubscribedEvent.createInstance(os);
se.set_EventClass(Factory.EventClassDefinition.getInstance(os, GuidConstants.Class_CheckinEvent));
sel.add(se);
sub.set_SubscribedEvents(sel);
// 指定する MIME タイプでドキュメントをフィルターする
sub.set_FilterExpression("MimeType IN ('application/pdf','application/msword')");
// The EventAction instance created by the Thumbnail Extension Add-on should be used.
EventActionSet eaSet = os.get_EventActions();
EventAction ea;
Iterator iter = eaSet.iterator();
// アドオンによって作成されたイベント・アクションを取得する
while (iter.hasNext())
{
ea = (EventAction) iter.next();
if (ea.get_ProgId().equalsIgnoreCase("com.filenet.engine.sweep.handler.ThumbnailGenerationHandler"))
{
sub.set_EventAction(ea);
sub.save(RefreshMode.NO_REFRESH);
}
}
C# の例
// ICmThumbnailGenerationSubscription のインスタンスを作成する
ICmThumbnailGenerationSubscription sub = Factory.CmThumbnailGenerationSubscription.CreateInstance(os, "CmThumbnailGenerationSubscription");
sub.DisplayName = "Event-based thumbnail subscription";
sub.SubscriptionTarget = Factory.ClassDefinition.GetInstance(os, GuidConstants.Class_Document);
sub.IncludeSubclassesRequested = true;
sub.IsEnabled = true;
sub.IsSynchronous = true;
// CheckinEvent を使用する必要がある
ISubscribedEventList sel = Factory.SubscribedEvent.CreateList();
ISubscribedEvent se = Factory.SubscribedEvent.CreateInstance(os);
se.EventClass = Factory.EventClassDefinition.GetInstance(os, GuidConstants.Class_CheckinEvent);
sel.Add(se);
sub.SubscribedEvents = sel;
// 指定する MIME タイプでドキュメントをフィルターする
sub.FilterExpression = "MimeType IN ('application/pdf','application/msword')";
// The EventAction instance created by the Thumbnail Extension Add-on should be used.
IEventActionSet eaSet = os.EventActions;
foreach (IEventAction ea in eaSet)
{
if (ea.ProgId.Equals("com.filenet.engine.sweep.handler.ThumbnailGenerationHandler"))
{
sub.EventAction = ea;
sub.Save(RefreshMode.NO_REFRESH);
}
}
サムネイル生成ジョブの作成
以下の Java および C# の例では、一部または全部の既存のドキュメントのサムネイルを生成 (再生成) するために使用される、スイープに基づくサムネイルの生成を示します。 コードは、CmThumbnailGenerationJobインスタンスを作成して、毎日深夜 12 時から午前 6 時の間に完了するまで実行されるようにジョブを構成します。
この例では、スイープとイベントに基づくサムネイル生成を相互に補完するための構成方法を示しています。 上記のサブスクリプションの作成の例では、サムネイルは、新規バージョンがチェックインされるときに、MIME タイプが pdf または Microsoft Word の新規ドキュメントに対して生成されます。この生成ジョブの作成の例では、サムネイルは、MIME タイプが pdf または Microsoft Word で 2012 年 4 月 1 日より前に永続化されていた既存のドキュメントに対して生成されます。生成ジョブは、サブスクリプションが有効になった時点 (4 月 1 日の日付を想定) より前に存在していたドキュメントのみをターゲットにします。
Java の例
// CmThumbnailGenerationJob のインスタンスを作成する
CmThumbnailGenerationJob genJob = Factory.CmThumbnailGenerationJob.createInstance(os, "CmThumbnailGenerationJob");
genJob.set_DisplayName("Sweep-based thumbnail generation job");
genJob.set_SweepTarget(Factory.DocumentClassDefinition.getInstance(os, GuidConstants.Class_Document) );
// 4 月 1 日より前のすべての関連バージョンを指定の MIME タイプでフィルターする
genJob.set_FilterExpression("DateLastModified < 20120401T000000Z AND VersionStatus = 1 AND MimeType IN ('application/pdf','application/msword')");
// ジョブが毎日深夜 12 時から 6 時間にわたって実行されるようにタイム・スロットを作成する
CmTimeslotList tsList = Factory.CmTimeslot.createList();
for (int day = 0; day < 7; day++)
{
CmTimeslot ts = Factory.CmTimeslot.createInstance();
ts.set_Weekday(Weekday.getInstanceFromInt(day));
ts.set_Duration(Integer.valueOf(360));
ts.set_StartMinutesPastMidnight(Integer.valueOf(0));
tsList.add(ts);
}
// タイム・スロットを設定する
genJob.set_SweepTimeslots(tsList);
genJob.save(RefreshMode.NO_REFRESH);
C# の例
// ICmThumbnailGenerationJob のインスタンスを作成する
ICmThumbnailGenerationJob genJob = Factory.CmThumbnailGenerationJob.CreateInstance(os, "CmThumbnailGenerationJob");
genJob.DisplayName = "Thumbnail generation job";
genJob.SweepTarget = Factory.DocumentClassDefinition.GetInstance(os, GuidConstants.Class_Document);
// 4 月 1 日より前のすべての関連バージョンを指定の MIME タイプでフィルターする
genJob.FilterExpression = "DateLastModified < 20120401T000000Z AND VersionStatus = 1 AND MimeType IN ('application/pdf','application/msword')";
// ジョブが毎日深夜 12 時から 6 時間にわたって実行されるようにタイム・スロットを作成する
ICmTimeslotList tsList = Factory.CmTimeslot.CreateList();
for (int day = 0; day < 7; day++)
{
ICmTimeslot ts = Factory.CmTimeslot.CreateInstance();
ts.Weekday = (Weekday) day;
ts.Duration = 360;
ts.StartMinutesPastMidnight = 0;
tsList.Add(ts);
}
// タイム・スロットを設定する
genJob.SweepTimeslots = tsList;
genJob.Save(RefreshMode.NO_REFRESH);
サムネイル要求の作成
以下の Java および C# の例では、クライアント・アプリケーションが CmThumbnailRequest オブジェクトを作成する、アドホックのサムネイル生成を示します。 コードは、ドキュメント・バージョンで設定されたコンテンツ・エレメントごとにサムネイル要求を生成します。
Java の例
static PropertyFilter pf = new PropertyFilter();
...
// Get document for which thumbnails will be generated.
pf.addIncludeProperty(new FilterElement(null, null, null, "ContentElements ElementSequenceNumber", null));
Document doc = Factory.Document.fetchInstance(os, new Id("{B7E5D6C1-F7FD-48F2-AD9C-BAF652F0A00F}"), pf);
// ドキュメントのコンテンツ・エレメントを取得する
ContentElementList cel = doc.get_ContentElements();
Iterator iter = cel.iterator();
ContentElement ce;
CmThumbnailRequest request;
// コンテンツ・エレメントを反復処理して、コンテンツ・エレメントごとにサムネイル要求を作成する
while (iter.hasNext())
{
ce = (ContentElement)iter.next();
request = Factory.CmThumbnailRequest.createInstance(os, ClassNames.CM_THUMBNAIL_REQUEST);
request.set_InputDocument(doc);
request.set_ElementSequenceNumber(ce.get_ElementSequenceNumber());
request.save(RefreshMode.REFRESH);
}
C# の例
static PropertyFilter pf = new PropertyFilter();
...
// Get document for which thumbnails will be generated.
pf.AddIncludeProperty (new FilterElement(null, null, null, "ContentElements ElementSequenceNumber", null) );
IDocument doc = Factory.Document.FetchInstance(os, new Id("{2D357CC2-2059-44BD-A846-170C4D0254D4}"), pf);
// ドキュメントのコンテンツ・エレメントを取得する
IContentElementList cel = doc.ContentElements;
ICmThumbnailRequest request;
// コンテンツ・エレメントを反復処理して、コンテンツ・エレメントごとにサムネイル要求を作成する
foreach (IContentElement ce in cel)
{
request = Factory.CmThumbnailRequest.CreateInstance(os, ClassNames.CM_THUMBNAIL_REQUEST);
request.InputDocument = doc;
request.ElementSequenceNumber = ce.ElementSequenceNumber;
request.Save(RefreshMode.REFRESH);
}
サムネイル要求の取得
以下の Java および C# の例では、ThumbnailRequest キュー・テーブル内のすべての CmThumbnailRequest オブジェクトを取得して、各要求の状況を出力します。要求が失敗する場合、サムネイル生成は再試行されます。
Java の例
// SQL 選択ステートメントを作成する
String sqlStr = "Select * from CmThumbnailRequest";
SearchSQL sql = new SearchSQL(sqlStr);
SearchScope ss = new com.filenet.api.query.SearchScope(os);
// ThumbnailRequest キュー・テーブル内のすべての要求を取得する
IndependentObjectSet requestSet = (IndependentObjectSet)ss.fetchObjects(sql, null, null, Boolean.TRUE);
// 要求アイテムを反復処理し、状況を出力する
Iterator iter = requestSet.iterator();
CmThumbnailRequest request;
while (iter.hasNext())
{
request = (CmThumbnailRequest)iter.next();
System.out.println("Creator: " + request.get_Creator() +
"¥nDate Created: " + request.get_DateCreated().toString() +
"¥nFailure count: " + request.get_FailureCount() +
"¥nQueue entry status: " + request.get_QueueEntryStatus() );
// 失敗した要求について、サムネイル生成を再試行するために FailureCount プロパティーをリセットする
if (request.get_QueueEntryStatus().equals(QueueEntryStatus.FAILED) )
{
System.out.println("Reason for failure: " + request.get_LastFailureReason());
request.set_FailureCount(0);
request.save(RefreshMode.REFRESH);
}
System.out.println("==================================");
}
C# の例
// SQL 選択ステートメントを作成する
String sqlStr = "Select * from CmThumbnailRequest";
SearchSQL sql = new SearchSQL(sqlStr);
SearchScope ss = new SearchScope(os);
// ThumbnailRequest キュー・テーブル内のすべての要求を取得する
IIndependentObjectSet requestSet = (IIndependentObjectSet)ss.FetchObjects(sql, null, null, true);
// 要求アイテムを反復処理し、状況を出力する
foreach (ICmThumbnailRequest request in requestSet)
{
System.Console.WriteLine("Creator: " + request.Creator +
"¥nDate Created: " + request.DateCreated.ToString() +
"¥nFailure count: " + request.FailureCount +
"¥nQueue entry status: " + request.QueueEntryStatus );
// 失敗した要求について、サムネイル生成を再試行するために FailureCount プロパティーをリセットする
if (request.QueueEntryStatus.Equals(QueueEntryStatus.FAILED) )
{
System.Console.WriteLine("Reason for failure: " + request.LastFailureReason);
request.FailureCount = 0;
request.Save(RefreshMode.REFRESH);
}
System.Console.WriteLine("==================================");
}
イメージ出力の制御
以下の Java および C# の例では、サムネイル生成サービスで使用されるデフォルトのフォーマットおよびサイズのパラメーターを変更する方法を示します。 これらのパラメーターは、Thumbnail Extension アドオンによって作成される CmThumbnailRequestSweep インスタンスによって制御されます。
Java の例
static PropertyFilter pf = new PropertyFilter();
...
pf.addIncludeProperty(new FilterElement(null, null, null, "IsEnabled ImageFormat ImageSize", null));
// Get instance created by the Thumbnail Extension Add-on.
CmThumbnailRequestSweep requestSweep = Factory.CmThumbnailRequestSweep.fetchInstance(os,
new Id("{8BBC6AE6-F1F8-4F8D-9086-48CD5F04628B}"), pf );
// デフォルトのイメージ関連プロパティー設定を変更する
requestSweep.set_ImageFormat(ThumbnailImageFormat.PNG);
requestSweep.set_ImageSize(ThumbnailImageSize.LARGE);
// 要求スイープを有効にする
if (!requestSweep.get_IsEnabled()) requestSweep.set_IsEnabled(true);
requestSweep.save(RefreshMode.REFRESH);
C# の例
static PropertyFilter pf = new PropertyFilter();
...
pf.AddIncludeProperty(new FilterElement(null, null, null, "IsEnabled ImageFormat ImageSize", null));
// Get instance created by the Thumbnail Extension Add-on.
ICmThumbnailRequestSweep requestSweep = Factory.CmThumbnailRequestSweep.FetchInstance(os,
new Id("{8BBC6AE6-F1F8-4F8D-9086-48CD5F04628B}"), pf );
// デフォルトのイメージ関連プロパティー設定を変更する
requestSweep.ImageFormat = ThumbnailImageFormat.PNG;
requestSweep.ImageSize = ThumbnailImageSize.LARGE;
// 要求スイープを有効にする
if (!(Boolean) requestSweep.IsEnabled) requestSweep.IsEnabled = true;
requestSweep.Save(RefreshMode.REFRESH);
サムネイルの作成
以下の Java および C# の例では、サムネイルを作成するためのユーザー生成オプションを示します。この場合、サムネイル・イメージは、サード・パーティー・アプリケーションによって生成され、Content Engine で永続化されます。 このシナリオでは、クライアント・アプリケーションが CmThumbnail オブジェクトを直接的に作成します。 サムネイル・イメージは、CmThumbnail オブジェクトに関連付けられているドキュメントおよびエレメントのシーケンス番号とともに、CmThumbnail オブジェクトで設定されます。
Java の例
static PropertyFilter pf = new PropertyFilter();
...
// Get document on which thumbnail will be set.
pf.addIncludeProperty(new FilterElement(1, null, null, "ContentElements ElementSequenceNumber", null));
Document doc = Factory.Document.fetchInstance(os, new Id("{BF90623C-BDC8-4A18-939C-EA556D90B623}"), pf);
// ドキュメントに関連付けられるサムネイル・オブジェクトを作成する
CmThumbnail tnObject = Factory.CmThumbnail.createInstance(os, ClassNames.CM_THUMBNAIL);
// サムネイル・オブジェクトでコンテンツ・エレメントのシーケンス番号とドキュメントを設定する
ContentElementList cel = doc.get_ContentElements();
ContentElement ce = (ContentElement)cel.get(0);
tnObject.set_ElementSequenceNumber(ce.get_ElementSequenceNumber());
tnObject.set_InputDocument(doc);
// サード・パーティー・アプリケーションによって表示されるユーザー生成サムネイル・イメージを取得する
// サムネイル・オブジェクトでイメージを設定する
byte [] thumbImage = getThumbnailImage("C:¥¥thumbnail¥¥images¥¥HomePolicyTemplate.png");
tnObject.set_Image(thumbImage);
tnObject.set_MimeType("image/png");
tnObject.save(RefreshMode.REFRESH);
C# の例
static PropertyFilter pf = new PropertyFilter();
...
// Get document on which thumbnails will be set.
pf.AddIncludeProperty(new FilterElement(1, null, null, "ContentElements ElementSequenceNumber", null));
IDocument doc = Factory.Document.FetchInstance(os, new Id("{BF90623C-BDC8-4A18-939C-EA556D90B623}"), pf);
// ドキュメントに関連付けられるサムネイル・オブジェクトを作成する
ICmThumbnail tnObject = Factory.CmThumbnail.CreateInstance(os, ClassNames.CM_THUMBNAIL);
// サムネイル・オブジェクトでコンテンツ・エレメントのシーケンス番号とドキュメントを設定する
IContentElementList cel = doc.ContentElements;
IContentElement ce = (IContentElement)cel[0];
tnObject.ElementSequenceNumber = ce.ElementSequenceNumber;
tnObject.InputDocument = doc;
// サード・パーティー・アプリケーションによって表示されるユーザー生成サムネイル・イメージを取得する
// サムネイル・オブジェクトでイメージを設定する
byte[] thumbImage = GetThumbnailImage("C:¥¥thumbnail¥¥images¥¥HomePolicyTemplate.png");
tnObject.Image = thumbImage;
tnObject.MimeType = "image/png";
tnObject.Save(RefreshMode.REFRESH);
ドキュメントのサムネイルの取得
以下の Java および C# の例では、ドキュメントに関連付けられているすべての CmThumbnail オブジェクトを取得します。
Java の例
static PropertyFilter pf = new PropertyFilter();
...
// Get document to check for thumbnails.
pf.addIncludeProperty(new FilterElement(null, null, null, "CmThumbnails", null));
Document doc = Factory.Document.fetchInstance(os, new Id("{792E0292-B36B-4B5D-8391-B2BFF990B3F1}"), pf);
// サムネイルを反復処理し、各サムネイルに関する情報を出力する
CmThumbnailSet thumbnails = doc.get_CmThumbnails();
if (!doc.get_CmThumbnails().isEmpty())
{
Iterator iter = thumbnails.iterator();
while (iter.hasNext())
{
CmThumbnail tn = (CmThumbnail) iter.next();
System.out.println("Name of thumbnail: " + tn.get_Name() + "¥n" +
"System generated: " + tn.get_IsSystemGenerated() + "¥n" +
"Element sequence number: " + tn.get_ElementSequenceNumber());
}
}
else System.out.println("Document has no associated thumbnails");
C# の例
static PropertyFilter pf = new PropertyFilter();
...
// Get document to check for thumbnails.
pf.AddIncludeProperty(new FilterElement(null, null, null, "CmThumbnails", null));
IDocument doc = Factory.Document.FetchInstance(os, new Id("{792E0292-B36B-4B5D-8391-B2BFF990B3F1}"), pf);
// サムネイルを反復処理し、各サムネイルに関する情報を出力する
ICmThumbnailSet thumbnails = doc.CmThumbnails;
if (!doc.CmThumbnails.IsEmpty())
{
foreach (ICmThumbnail tn in thumbnails)
{
System.Console.WriteLine("Name of thumbnail: " + tn.Name + "¥n" +
"System generated: " + tn.IsSystemGenerated + "¥n" +
"Element sequence number: " + tn.ElementSequenceNumber);
}
}
else System.Console.WriteLine("Document has no associated thumbnails");