我试图将文档类型与xz:xylo相关联,每当将文档上传到Alfresco的特定工作区中时,它都应该附加到我在xylomodel.xml中定义的类型上。
我正在尝试通过Alfresco行为来实现这一目标,因为通过Share进行操作对我的要求有一定的限制。
如果所附的代码在语法上正确并且我正在正确接近,请问谁能纠正我。
enter code here
公共类ApplyXyloAspect实现NodeServicePolicies.OnCreateNodePolicy {`
private NodeService nodeService;
private PolicyComponent policyComponent;
// Behaviours
private Behaviour onCreateNode;
}
/**
^When a document of type @XyloCmsType(name = "X:xz:Xylo") is created than aspects from xyloModel.xml
^needs to be applied
*/
public void init() {
// Create behaviours
if workspace=workspace://SpacesStore/973e1b8d-bf61-8196-3278-fbbf0b4375gg
org.alfresco.repo.node.NodeServicePolicies this.onCreateNode = new JavaBehaviour(this, "onCreateNode", NotificationFrequency.FIRST_EVENT);
// Bind behaviours to node policies
this.policyComponent.bindClassBehaviour(Qname.createQName(NamespaceService.ALFRESCO_URI, "onCreateNode"),
Qname.createQName(XYLO.NAMESPACE_XYLO_CONTENT_MODEL, XYLO.TYPE_xz_xyloModel),
this.onCreateNode
);
}
答案 0 :(得分:2)
根据您的要求,最好通过Folder Rules实现这一目标。
如果文件夹规则不足,或者如果我误解了您对workspace://SpacesStore/973e1b8d-bf61-8196-3278-fbbf0b4375gg
的非常特定的NodeRef的使用,那么我将仅检查onCreateNode方法(如果创建的节点的父节点与该NodeRef相匹配),而不是尝试来检查init方法。
因此在您的init方法中,您将只执行以下操作:
this.onCreateNode = new JavaBehaviour(this, "onCreateNode", Behaviour.NotificationFrequency.FIRST_EVENT);
this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateNodePolicy.QNAME, Qname.createQName(XYLO.NAMESPACE_XYLO_CONTENT_MODEL, XYLO.TYPE_xz_xyloModel), this.onCreateNode);
然后只需检查该节点是否是您要成为父节点的节点的子节点,在这种情况下,您说它将是workspace://SpacesStore/973e1b8d-bf61-8196-3278-fbbf0b4375gg
。
所以onCreateNode方法看起来像这样。
@Override
public void onCreateNode(ChildAssociationRef childAssociationRef){
NodeRef idealParentNodeRef = new NodeRef("workspace://SpacesStore/973e1b8d-bf61-8196-3278-fbbf0b4375gg");
NodeRef nodeRef = childAssociationRef.getChildRef();
NodeRef parentRef = childAssociationRef.getParentRef();
//First double check and make sure all the nodes exist.
if(nodeService.exists(nodeRef) && nodeService.exists(parentRef) && nodeService.exists(idealParentNodeRef)){
//then check if the parentRef and the idealParentNodeRef match
if(parentRef.equals(idealParentNodeRef)){
nodeService.addAspect(nodeRef, /*QName of the Aspect you want to add*/);
}
}
}
如果您实际上知道您要上传到的节点/工作空间每次都会非常具体,尽管我可能还会建议您进行一些错误处理,日志记录等操作,但这会得到帮助你至少开始了。
注意,通常,您不必一定希望NodeRef每次都保持不变,当然,我只是向您展示您可以做的事情而不是您应该执行的操作(而不是应该执行的操作)(这将是寻找其他方法来引用您要使用的NodeRef /工作区,然后从那里继续进行),具体取决于是否NodeRef /工作区是文件夹或站点,或其他)。
希望这会有所帮助。