ドキュメントの作成時にアクセス許可を設定するように求められます。 FileNET P8 5.2.1 FP2 - ドキュメント作成時のアクセス許可の編集
は基本的に書かれたコードの一部を以下に再現されています。プリプロセッサまたはサブスクリプション:public void onEvent(ObjectChangeEvent event, Id eventId) {
if (event instanceof CreationEvent) {
Document doc = (Document) event.get_SourceObject();
AccessPermissionList permissions = doc.get_Permissions();
String creatorGranteeName = getCreatorGranteeName(doc);
Iterator<AccessPermission> iter = permissions.iterator();
boolean found = false;
while (iter.hasNext()) {
AccessPermission ace = (AccessPermission) iter.next();
if (ace.get_GranteeName().equals(creatorGranteeName)) {
permissions.remove(ace);
// relevant ? is "permission" duplicated ?
doc.set_Permissions(permissions);
break;
}
}
if (!found) return ; // no need to save
doc.save(RefreshMode.REFRESH); // --> triggers CreationEvent -> loop
System.out.println("Saved."); // never reached
}
}
は、私は2つの方法を試してみました。
プリプロセッサは、ドキュメントが完全に構築されていない、特にアクセス許可(管理者のみが設定されている)のため動作しません。取得は機能していないようです(これは、文書がまだ保存されていないためわかります)。
Susbcriptionクラッシュそれは同期は関係なく、リフレッシュモードがRefreshMode.REFRESH
かRefreshMode.NO_REFRESH
であれば、doc.save()
ラインで処理されます場合。 asynchrounslyが完了した場合、ループのように見えます。doc.save
は、CreationEvent
をリトリガーします。
私は何か問題があった場合、または存在する場合は第3の方法を探しています。
EDIT:削除するアクセス許可が見つからなかった場合、保存をスキップするブロックコードが追加されました。私が原因で評判のコメントすることはできませんので
私はしませんでしたが、何が目的ですか?これは 'CreationEvent'を再び呼び起こさないのでしょうか?また、それは新しいバージョンを作成するようです(私はcheckOutが必要と思われる)。 – Amessihel
チェックインの前にコードが文書を保存していますので、チェックインして保存すると問題は解決します。また、event.get_SourceObject()の代わりに。 changeEvent.get_SourceObjectId();のようにしてみてください。ドキュメントdoc = Factory.Document.fetchInstance(os、documentId、propertyFilter); –
また、 'checkin()'呼び出しに関する部分を削除してください。この文脈では関係ありませんでした。前回の専門家と同じように 'Document.fetchInstance()'呼び出しに言及し、より完全で正確なので私たちの専門家の答えの後に設計されたものを選択したので、私はあなたをアップしました。 – Amessihel