Добавление типа к документу, загруженному в Alfresco через поведение - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь связать тип документа с xz: xylo, всякий раз, когда документ загружается в определенную рабочую область Alfresco, он должен присоединяться к типу, который я определил в xylomodel.xml.

Iя пытаюсь добиться этого с помощью поведения 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 голосов
/ 13 октября 2018

В зависимости от ваших требований, вам может быть лучше добиться этого с помощью Правил папок .

Если правила папок не соответствуют требованиям или если я неправильно понимаю ваше использование очень специфического NodeRefиз workspace://SpacesStore/973e1b8d-bf61-8196-3278-fbbf0b4375gg тогда я бы просто проверил в методе onCreateNode, если родительский узел созданного узла соответствует этому NodeRef, вместо того, чтобы пытаться проверить в методе 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 / рабочее пространство папкой или сайтом или чем-то еще).

Надеюсь, это поможет.

...