カスタムスケジュールジョブの高度なテクニック
カスタムスケジュールジョブの基本のテクニックでは、パブリッシングジョブを作成するための入力を行い、製品表現名、製品表現の説明などを指定することはできません。
手順 - カスタムコード/ワークフローからパブリッシングを開始すると
カスタムスケジュールジョブの基本の考え方を組み合わせると、スケジュールジョブの柔軟性が飛躍的に増します。
そのテクニックとは、Publisher クラスの doPublish メソッドを myCustomJob メソッドに挿入するだけです。myCustomJob は QueryResult を返す必要があるので、空の QueryResult を返します。doPublish メソッドにより、パブリッシングジョブが実行待ちキューに入っているからです。
public static WTList myCustomJob() {
WTList wt = new WTArrayList();
try {
QuerySpec qs = new QuerySpec(WTDocument.class);
WTContainerRef cr = ScheduleJobs.getCurrentContainer();
if (cr != null) {
ContainerSpec cs = new ContainerSpec();
cs.addSearchContainer(cr);
qs.setAdvancedQueryEnabled(true);
qs.appendWhere(
WTContainerHelper.getWhereContainerIn(cs, WTDocument.class),
new int[]{0});
}
if (cr != null) qs.appendAnd();
qs.appendWhere(new SearchCondition(WTDocument.class,
Iterated.LATEST_ITERATION,
SearchCondition.IS_TRUE),
new int[]{0});
Representable doc = null;
String objRef;
int offset = 0;
BasicPageableQuerySpec bpqs = new BasicPageableQuerySpec();
bpqs.setPrimaryStatement(qs);
bpqs.setOffset(offset);
bpqs.setRange(1000);
PagingQueryResult qr =
(PagingQueryResult)PersistenceHelper.manager.find(bpqs);
long sessionId = qr.getSessionId();
int total = qr.getTotalSize();
while (true) {
while (qr.hasMoreElements()) {
doc = (Representable)((Object[])qr.nextElement())[0];
objRef =
ObjectReference.newObjectReference(doc).toString();
Publisher pub = new Publisher();
pub.doPublish(false, true, objRef, (ConfigSpec)null,
(ConfigSpec)null, true, "My Rep",
"My Description", Publisher.NONE, null, 0);
}
offset += qr.size();
if (offset >= total) break;
PageableQuerySpec pqs = new PagingSessionSpec(sessionId);
pqs.setOffset(offset);
pqs.setRange(1000);
qr =
(PagingQueryResult)PersistenceHelper.manager.find(pqs);
}
if (sessionId > 0)
PagingSessionHelper.closePagingSession(sessionId);
} catch(Exception e) {e.printStackTrace();}
return new wtl;
}
カスタムスケジュールジョブの基本で使用されたものと同じ例ですが、太字で示すように
doPublish メソッドが使用されています。このカスタムジョブは、"My Rep" という名前と "My Description" という説明の製品表現を作成します。また、メソッドから返される WTList が空になることに注意してください。
doPublish メソッドのその他の有用な使い方については、
手順 - カスタムコード/ワークフローからパブリッシングを開始するを参照してください。