通过行为将类型添加到Alfresco上传的文档中

时间:2018-10-12 21:07:41

标签: alfresco

我试图将文档类型与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
    );
 }

1 个答案:

答案 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 /工作区是文件夹或站点,或其他)。

希望这会有所帮助。