gpt4 book ai didi

java - FileNET P8 5.2.1 FP2 - 编辑文档创建权限

转载 作者:行者123 更新时间:2023-12-02 02:46:04 26 4
gpt4 key购买 nike

创建文档时,我们需要设置权限。

基本上编写的代码部分复制如下:

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
}
}

我尝试了两种方法:预处理器或订阅。

预处理器不起作用,因为文档似乎没有完全构建,特别是关于权限(仅设置了管理员)。获取似乎不起作用(这是可以理解的,因为文档尚未存储)。

如果在 doc.save()同步处理

Susbcription,则无论刷新模式是否为 RefreshMode.REFRESH,它都会崩溃RefreshMode.NO_REFRESH。如果异步完成,它似乎会循环,就好像doc.save重新触发CreationEvent

因此,如果我做错了什么,我会寻求帮助,或者如果存在第三种方法,我会寻求帮助。

编辑:添加了 block 代码,如果没有找到删除权限,则跳过保存。

最佳答案

正如 @Manjunatha Muniyappa 所说,我通过从对象存储中获取文档而不是从 CreationEvent 对象中获取文档来解决我的问题。 It seems to be recommended by the editor (“作为最佳实践,获取事件的持久源对象”)。通过这种方式,CreationEvent也不会被引发(我不知道为什么)。

因此,解决方案是在创建事件上创建一个异步订阅,与下面的处理程序类关联:

// Only relevant lines are kept.
public class CustomEventAction implements EventActionHandler {
// [...]
public void onEvent(ObjectChangeEvent event, Id eventId) {
if (event instanceof CreationEvent) {
ObjectStore os = event.getObjectStore();
Id id = event.get_SourceObjectId();
FilterElement fe =
new FilterElement(null, null, null, "permissions creator", null);
PropertyFilter pf = new PropertyFilter();
pf.addIncludeProperty(fe);
Document doc = Factory.Document.fetchInstance(os, id, pf);

AccessPermissionList permissions;

String creatorGranteeName = getCreatorGranteeName(doc);
permissions = doc.get_Permissions();
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);
found = true;
break;
}
}

if (!found) {
return;
}

doc.save(RefreshMode.REFRESH);
}
}
}

关于java - FileNET P8 5.2.1 FP2 - 编辑文档创建权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com