簡體   English   中英

以編程方式在AEM中添加節點?

[英]Programmatically add node in AEM?

我需要使用java服務在AEM中創建一個節點。 我創建了一個工作流,其中一個進程觸發content/dam/Test的java服務。

我是否需要使用java服務創建節點或者只是以編程方式創建節點?

有各種API可用於創建節點:
1.使用Node API

  • 將資源調整為Node
    Node node = resource.adaptTo(Node.class);
  • 然后使用函數“addNode(java.lang.String relPath,java.lang.String primaryNodeTypeName)”添加一個節點
    node.addNode(nodeName, NodePrimaryType);
  • 您可以使用函數“setProperty(java.lang.String name,Value value)”添加屬性
  • 保存會話,以便保存新節點及其屬性

  1. 使用JcrUtil
    JCRUtil有2個API:

    • Apache Jackrabbit 2.0之一 - JcrUtils
    • 而另一個用於常見JCR任務的實用程序 - JcrUtil

您可以通過其中任何一個來創建新節點。

工作流會話可以適應JCR會話,從那里您可以通過JCR API訪問讀/寫。

import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;

import javax.jcr.Node;
import javax.jcr.Session;

@Component
@Service
@Properties({@Property(name = Constants.SERVICE_DESCRIPTION, value = "Some Service")})
public class AddTheNodeWorkflow implements WorkflowProcess {

    @Override
    public final void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
        try {
            final String payloadPath = getPayloadPath(workItem);
            final Session session = workflowSession.adaptTo(Session.class);

            // get the node for the workflow payload
            final Node payloadNode = session.getNode(payloadPath);

            // add the node
            final Node somenode = payloadNode.addNode("somenode");
            somenode.setProperty("myproperty", "my property value");


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String getPayloadPath(WorkItem workItem) {
        return workItem.getWorkflowData().getPayload().toString();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM